pythia6152.f

00001 C*********************************************************************
00002 C*********************************************************************
00003 C*                                                                  **
00004 C*                                                    March 1997    **
00005 C*                                                                  **
00006 C*           The Lund Monte Carlo for Hadronic Processes            **
00007 C*                                                                  **
00008 C*                        PYTHIA version 6.1                        **
00009 C*                                                                  **
00010 C*                        Torbjorn Sjostrand                        **
00011 C*                Department of Theoretical Physics 2               **
00012 C*                         Lund University                          **
00013 C*               Solvegatan 14A, S-223 62 Lund, Sweden              **
00014 C*                    phone +46 - 46 - 222 48 16                    **
00015 C*                    E-mail torbjorn@thep.lu.se                    **
00016 C*                                                                  **
00017 C*                          SUSY parts by                           **
00018 C*                         Stephen Mrenna                           **
00019 C*                   Physics Department, UC Davis                   **
00020 C*             One Shields Avenue, Davis, CA 95616, USA             **
00021 C*                   phone + 1 - 530 - 752 - 2661                   **
00022 C*                E-mail mrenna@physics.ucdavis.edu                 **
00023 C*                                                                  **
00024 C*         Several parts are written by Hans-Uno Bengtsson          **
00025 C*          PYSHOW is written together with Mats Bengtsson          **
00026 C*     advanced popcorn baryon production written by Patrik Eden    **
00027 C*    code for virtual photons mainly written by Christer Friberg   **
00028 C*    code for low-mass strings mainly written by Emanuel Norrbin   **
00029 C*        Bose-Einstein code mainly written by Leif Lonnblad        **
00030 C*      CTEQ  parton distributions are by the CTEQ collaboration    **
00031 C*      GRV 94 parton distributions are by Glueck, Reya and Vogt    **
00032 C*   SaS photon parton distributions together with Gerhard Schuler  **
00033 C*     g + g and q + qbar -> t + tbar + H code by Zoltan Kunszt     **
00034 C*         MSSM Higgs mass calculation code by M. Carena,           **
00035 C*           J.R. Espinosa, M. Quiros and C.E.M. Wagner             **
00036 C*         PYGAUS adapted from CERN library (K.S. Kolbig)           **
00037 C*                                                                  **
00038 C*   The latest program version and documentation is found on WWW   **
00039 C*            http://www.thep.lu.se/~torbjorn/Pythia.html           **
00040 C*                                                                  **
00041 C*              Copyright Torbjorn Sjostrand, Lund 1997             **
00042 C*                                                                  **
00043 C*********************************************************************
00044 C*********************************************************************
00045 C                                                                    *
00046 C  List of subprograms in order of appearance, with main purpose     *
00047 C  (S = subroutine, F = function, B = block data)                    *
00048 C                                                                    *
00049 C  B   PYDATA   to contain all default values                        *
00050 C  S   PYTEST   to test the proper functioning of the package        *
00051 C  S   PYHEPC   to convert between /PYJETS/ and /HEPEVT/ records     *
00052 C                                                                    *
00053 C  S   PYINIT   to administer the initialization procedure           *
00054 C  S   PYEVNT   to administer the generation of an event             *
00055 C  S   PYSTAT   to print cross-section and other information         *
00056 C  S   PYINRE   to initialize treatment of resonances                *
00057 C  S   PYINBM   to read in beam, target and frame choices            *
00058 C  S   PYINKI   to initialize kinematics of incoming particles       *
00059 C  S   PYINPR   to set up the selection of included processes        *
00060 C  S   PYXTOT   to give total, elastic and diffractive cross-sect.   *
00061 C  S   PYMAXI   to find differential cross-section maxima            *
00062 C  S   PYPILE   to select multiplicity of pileup events              *
00063 C  S   PYSAVE   to save alternatives for gamma-p and gamma-gamma     *
00064 C  S   PYGAGA   to handle lepton -> lepton + gamma branchings        *
00065 C  S   PYRAND   to select subprocess and kinematics for event        *
00066 C  S   PYSCAT   to set up kinematics and colour flow of event        *
00067 C  S   PYSSPA   to simulate initial state spacelike showers          *
00068 C  S   PYRESD   to perform resonance decays                          *
00069 C  S   PYMULT   to generate multiple interactions                    *
00070 C  S   PYREMN   to add on target remnants                            *
00071 C  S   PYDIFF   to set up kinematics for diffractive events          *
00072 C  S   PYDISG   to set up kinematics, remnant and showers for DIS    *
00073 C  S   PYDOCU   to compute cross-sections and handle documentation   *
00074 C  S   PYFRAM   to perform boosts between different frames           *
00075 C  S   PYWIDT   to calculate full and partial widths of resonances   *
00076 C  S   PYOFSH   to calculate partial width into off-shell channels   *
00077 C  S   PYRECO   to handle colour reconnection in W+W- events         *
00078 C  S   PYKLIM   to calculate borders of allowed kinematical region   *
00079 C  S   PYKMAP   to construct value of kinematical variable           *
00080 C  S   PYSIGH   to calculate differential cross-sections             *
00081 C  S   PYPDFU   to evaluate parton distributions                     *
00082 C  S   PYPDFL   to evaluate parton distributions at low x and Q^2    *
00083 C  S   PYPDEL   to evaluate electron parton distributions            *
00084 C  S   PYPDGA   to evaluate photon parton distributions (generic)    *
00085 C  S   PYGGAM   to evaluate photon parton distributions (SaS sets)   *
00086 C  S   PYGVMD   to evaluate VMD part of photon parton distributions  *
00087 C  S   PYGANO   to evaluate anomalous part of photon pdf's           *
00088 C  S   PYGBEH   to evaluate Bethe-Heitler part of photon pdf's       *
00089 C  S   PYGDIR   to evaluate direct contribution to photon pdf's      *
00090 C  S   PYPDPI   to evaluate pion parton distributions                *
00091 C  S   PYPDPR   to evaluate proton parton distributions              *
00092 C  F   PYCTEQ   to evaluate the CTEQ 3 proton parton distributions   *
00093 C  S   PYGRVL   to evaluate the GRV 94L proton parton distributions  *
00094 C  S   PYGRVM   to evaluate the GRV 94M proton parton distributions  *
00095 C  S   PYGRVD   to evaluate the GRV 94D proton parton distributions  *
00096 C  F   PYGRVV   auxiliary to the PYGRV* routines                     *
00097 C  F   PYGRVW   auxiliary to the PYGRV* routines                     *
00098 C  F   PYGRVS   auxiliary to the PYGRV* routines                     *
00099 C  F   PYCT5L   to evaluate the CTEQ 5L proton parton distributions  *
00100 C  F   PYCT5M   to evaluate the CTEQ 5M1 proton parton distributions *
00101 C  S   PYPDPO   to evaluate old proton parton distributions          *
00102 C  F   PYHFTH   to evaluate threshold factor for heavy flavour       *
00103 C  S   PYSPLI   to find flavours left in hadron when one removed     *
00104 C  F   PYGAMM   to evaluate ordinary Gamma function Gamma(x)         *
00105 C  S   PYWAUX   to evaluate auxiliary functions W1(s) and W2(s)      *
00106 C  S   PYI3AU   to evaluate auxiliary function I3(s,t,u,v)           *
00107 C  F   PYSPEN   to evaluate Spence (dilogarithm) function Sp(x)      *
00108 C  S   PYQQBH   to evaluate matrix element for g + g -> Q + Qbar + H *
00109 C                                                                    *
00110 C  S   PYMSIN   to initialize the supersymmetry simulation           *
00111 C  S   PYAPPS   to determine MSSM parameters from SUGRA input        *
00112 C  F   PYRNMQ   to determine running quark masses                    *
00113 C  F   PYRNMT   to determine running top mass                        *
00114 C  S   PYTHRG   to calculate sfermion third-gen. mass eigenstates    *
00115 C  S   PYINOM   to calculate neutralino/chargino mass eigenstates    *
00116 C  F   PYRNM3   to determine running M3, gluino mass                 *
00117 C  S   PYEIG4   to calculate eigenvalues and -vectors in 4*4 matrix  *
00118 C  S   PYHGGM   to determine Higgs mass spectrum                     *
00119 C  S   PYSUBH   to determine Higgs masses in the MSSM                *
00120 C  S   PYPOLE   to determine Higgs masses in the MSSM                *
00121 C  S   PYVACU   to determine Higgs masses in the MSSM                *
00122 C  S   PYRGHM   auxiliary to PYVACU                                  *
00123 C  S   PYGFXX   auxiliary to PYRGHM                                  *
00124 C  F   PYFINT   auxiliary to PYVACU                                  *
00125 C  F   PYFISB   auxiliary to PYFINT                                  *
00126 C  S   PYSFDC   to calculate sfermion decay partial widths           *
00127 C  S   PYGLUI   to calculate gluino decay partial widths             *
00128 C  S   PYTBBN   to calculate 3-body decay of gluino to neutralino    *
00129 C  S   PYTBBC   to calculate 3-body decay of gluino to chargino      *
00130 C  S   PYNJDC   to calculate neutralino decay partial widths         *
00131 C  S   PYCJDC   to calculate chargino decay partial widths           *
00132 C  F   PYXXZ5   auxiliary for neutralino 3-body decay                *
00133 C  F   PYXXW5   auxiliary for ino charge change 3-body decay         *
00134 C  F   PYXXGA   auxiliary for ino -> ino + gamma decay               *
00135 C  F   PYX2XG   auxiliary for ino -> ino + gauge boson decay         *
00136 C  F   PYX2XH   auxiliary for ino -> ino + Higgs decay               *
00137 C  F   PYXXZ2   auxiliary for chargino 3-body decay                  *
00138 C  S   PYHEXT   to calculate non-SM Higgs decay partial widths       *
00139 C  F   PYH2XX   auxiliary for H -> ino + ino decay                   *
00140 C  F   PYGAUS   to perform Gaussian integration                      *
00141 C  F   PYSIMP   to perform Simpson integration                       *
00142 C  F   PYLAMF   to evaluate the lambda kinematics function           *
00143 C  S   PYTBDY   to perform 3-body decay of gauginos                  *
00144 C  S   PYTECM   to calculate techni_rho/omega masses                 *
00145 C  S   PYEICG   to calculate eigenvalues of a 4*4 complex matrix     *
00146 C                                                                    *
00147 C  S   PY1ENT   to fill one entry (= parton or particle)             *
00148 C  S   PY2ENT   to fill two entries                                  *
00149 C  S   PY3ENT   to fill three entries                                *
00150 C  S   PY4ENT   to fill four entries                                 *
00151 C  S   PY2FRM   to interface to generic two-fermion generator        *
00152 C  S   PY4FRM   to interface to generic four-fermion generator       *
00153 C  S   PY6FRM   to interface to generic six-fermion generator        *
00154 C  S   PY4JET   to generate a shower from a given 4-parton config    *
00155 C  S   PY4JTW   to evaluate the weight od a shower history for above *
00156 C  S   PY4JTS   to set up the parton configuration for above         *
00157 C  S   PYJOIN   to connect entries with colour flow information      *
00158 C  S   PYGIVE   to fill (or query) commonblock variables             *
00159 C  S   PYEXEC   to administrate fragmentation and decay chain        *
00160 C  S   PYPREP   to rearrange showered partons along strings          *
00161 C  S   PYSTRF   to do string fragmentation of jet system             *
00162 C  S   PYINDF   to do independent fragmentation of one or many jets  *
00163 C  S   PYDECY   to do the decay of a particle                        *
00164 C  S   PYDCYK   to select parton and hadron flavours in decays       *
00165 C  S   PYKFDI   to select parton and hadron flavours in fragm        *
00166 C  S   PYNMES   to select number of popcorn mesons                   *
00167 C  S   PYKFIN   to calculate falvour prod. ratios from input params. *
00168 C  S   PYPTDI   to select transverse momenta in fragm                *
00169 C  S   PYZDIS   to select longitudinal scaling variable in fragm     *
00170 C  S   PYSHOW   to do timelike parton shower evolution               *
00171 C  S   PYBOEI   to include Bose-Einstein effects (crudely)           *
00172 C  S   PYBESQ   auxiliary to PYBOEI                                  *
00173 C  F   PYMASS   to give the mass of a particle or parton             *
00174 C  F   PYMRUN   to give the running MSbar mass of a quark            *
00175 C  S   PYNAME   to give the name of a particle or parton             *
00176 C  F   PYCHGE   to give three times the electric charge              *
00177 C  F   PYCOMP   to compress standard KF flavour code to internal KC  *
00178 C  S   PYERRM   to write error messages and abort faulty run         *
00179 C  F   PYALEM   to give the alpha_electromagnetic value              *
00180 C  F   PYALPS   to give the alpha_strong value                       *
00181 C  F   PYANGL   to give the angle from known x and y components      *
00182 C  F   PYR      to provide a random number generator                 *
00183 C  S   PYRGET   to save the state of the random number generator     *
00184 C  S   PYRSET   to set the state of the random number generator      *
00185 C  S   PYROBO   to rotate and/or boost an event                      *
00186 C  S   PYEDIT   to remove unwanted entries from record               *
00187 C  S   PYLIST   to list event record or particle data                *
00188 C  S   PYLOGO   to write a logo                                      *
00189 C  S   PYUPDA   to update particle data                              *
00190 C  F   PYK      to provide integer-valued event information          *
00191 C  F   PYP      to provide real-valued event information             *
00192 C  S   PYSPHE   to perform sphericity analysis                       *
00193 C  S   PYTHRU   to perform thrust analysis                           *
00194 C  S   PYCLUS   to perform three-dimensional cluster analysis        *
00195 C  S   PYCELL   to perform cluster analysis in (eta, phi, E_T)       *
00196 C  S   PYJMAS   to give high and low jet mass of event               *
00197 C  S   PYFOWO   to give Fox-Wolfram moments                          *
00198 C  S   PYTABU   to analyze events, with tabular output               *
00199 C                                                                    *
00200 C  S   PYEEVT   to administrate the generation of an e+e- event      *
00201 C  S   PYXTEE   to give the total cross-section at given CM energy   *
00202 C  S   PYRADK   to generate initial state photon radiation           *
00203 C  S   PYXKFL   to select flavour of primary qqbar pair              *
00204 C  S   PYXJET   to select (matrix element) jet multiplicity          *
00205 C  S   PYX3JT   to select kinematics of three-jet event              *
00206 C  S   PYX4JT   to select kinematics of four-jet event               *
00207 C  S   PYXDIF   to select angular orientation of event               *
00208 C  S   PYONIA   to perform generation of onium decay to gluons       *
00209 C                                                                    *
00210 C  S   PYBOOK   to book a histogram                                  *
00211 C  S   PYFILL   to fill an entry in a histogram                      *
00212 C  S   PYFACT   to multiply histogram contents by a factor           *
00213 C  S   PYOPER   to perform operations between histograms             *
00214 C  S   PYHIST   to print and reset all histograms                    *
00215 C  S   PYPLOT   to print a single histogram                          *
00216 C  S   PYNULL   to reset contents of a single histogram              *
00217 C  S   PYDUMP   to dump histogram contents onto a file               *
00218 C                                                                    *
00219 C  S   PYKCUT   dummy routine for user kinematical cuts              *
00220 C  S   PYEVWT   dummy routine for weighting events                   *
00221 C  S   PYUPIN   dummy routine to initialize a user process           *
00222 C  S   PYUPEV   dummy routine to generate a user process event       *
00223 C  S   PDFSET   dummy routine to be removed when using PDFLIB        *
00224 C  S   STRUCTM  dummy routine to be removed when using PDFLIB        *
00225 C  S   STRUCTP  dummy routine to be removed when using PDFLIB        *
00226 C  S   PYTAUD   dummy routine for interface to tau decay libraries   *
00227 C  S   PYTIME   dummy routine for giving date and time               *
00228 C                                                                    *
00229 C*********************************************************************
00230  
00231 C...PYDATA
00232 C...Default values for switches and parameters,
00233 C...and particle, decay and process data.
00234  
00235       BLOCK DATA PYDATA
00236  
00237 C...Double precision and integer declarations.
00238       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
00239       IMPLICIT INTEGER(I-N)
00240       INTEGER PYK,PYCHGE,PYCOMP
00241 C...Commonblocks.
00242       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
00243       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
00244       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
00245       COMMON/PYDAT4/CHAF(500,2)
00246       CHARACTER CHAF*16
00247       COMMON/PYDATR/MRPY(6),RRPY(100)
00248       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
00249       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
00250       COMMON/PYINT1/MINT(400),VINT(400)
00251       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
00252       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
00253       COMMON/PYINT4/MWID(500),WIDS(500,5)
00254       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
00255       COMMON/PYINT6/PROC(0:500)
00256       CHARACTER PROC*28
00257       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
00258       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
00259       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
00260      &SFMIX(16,4)
00261       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
00262       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYDATR/,/PYSUBS/,
00263      &/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,
00264      &/PYINT6/,/PYINT7/,/PYMSSM/,/PYSSMT/,/PYBINS/
00265  
00266 C...PYDAT1, containing status codes and most parameters.
00267       DATA MSTU/
00268      &   0,    0,    0, 4000,10000,  500, 4000,    0,    0,    2,
00269      1   6,    1,    1,    0,    1,    1,    0,    0,    0,    0,
00270      2   2,   10,    0,    0,    1,   10,    0,    0,    0,    0,
00271      3   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00272      4   2,    2,    1,    4,    2,    1,    1,    0,    0,    0,
00273      5  25,   24,    0,    1,    0,    0,    0,    0,    0,    0,
00274      6   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00275      7  30*0,
00276      1   1,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00277      2   1,    5,    3,    5,    0,    0,    0,    0,    0,    0,
00278      &  80*0/
00279       DATA (PARU(I),I=1,100)/
00280      &  3.141592653589793D0, 6.283185307179586D0,
00281      &  0.197327D0, 5.06773D0, 0.389380D0, 2.56819D0,  4*0D0,
00282      1  0.001D0, 0.09D0, 0.01D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0, 0D0,
00283      2  0D0,   0D0,   0D0,   0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,
00284      3  0D0,   0D0,   0D0,   0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,
00285      4  2.0D0,  1.0D0, 0.25D0,  2.5D0, 0.05D0,
00286      4  0D0,   0D0, 0.0001D0, 0D0,   0D0,
00287      5  2.5D0,1.5D0,7.0D0,1.0D0,0.5D0,2.0D0,3.2D0, 0D0, 0D0, 0D0,
00288      6  40*0D0/
00289       DATA (PARU(I),I=101,200)/
00290      &  0.00729735D0, 0.232D0, 0.007764D0, 1.0D0, 1.16639D-5,
00291      &  0D0, 0D0, 0D0, 0D0,  0D0,
00292      1  0.20D0, 0.25D0, 1.0D0, 4.0D0, 10D0, 0D0, 0D0,  0D0, 0D0, 0D0,
00293      2 -0.693D0, -1.0D0, 0.387D0, 1.0D0, -0.08D0,
00294      2 -1.0D0,  1.0D0,  1.0D0,  1.0D0,  0D0,
00295      3  1.0D0,-1.0D0, 1.0D0,-1.0D0, 1.0D0,  0D0,  0D0, 0D0, 0D0, 0D0,
00296      4  5.0D0, 1.0D0, 1.0D0,  0D0, 1.0D0, 1.0D0,  0D0, 0D0, 0D0, 0D0,
00297      5  1.0D0, 0D0, 0D0, 0D0, 1000D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0,0D0,
00298      6  1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0,  0D0,  0D0, 0D0, 0D0, 0D0,
00299      7  1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 1.0D0, 0D0,0D0,0D0,
00300      8  1.0D0, 1.0D0, 1.0D0, 0.0D0, 0.0D0, 1.0D0, 1.0D0, 0D0,0D0,0D0,
00301      9  0D0,  0D0,  0D0,  0D0, 1.0D0,  0D0,  0D0, 0D0, 0D0, 0D0/
00302       DATA MSTJ/
00303      &  1,    3,    0,    0,    0,    0,    0,    0,    0,    0,
00304      1  4,    2,    0,    1,    0,    2,    2,    0,    0,    0,
00305      2  2,    1,    1,    2,    1,    2,    2,    0,    0,    0,
00306      3  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
00307      4  2,    2,    4,    2,    5,    3,    3,    0,    0,    3,
00308      5  0,    3,    0,    2,    0,    0,    1,    0,    0,    0,
00309      6  40*0,
00310      &  5,    2,    7,    5,    1,    1,    0,    2,    0,    2,
00311      1  0,    0,    0,    0,    1,    1,    0,    0,    0,    0,
00312      2  80*0/
00313       DATA PARJ/
00314      &  0.10D0, 0.30D0, 0.40D0, 0.05D0, 0.50D0,
00315      &  0.50D0, 0.50D0,   0.6D0,   1.2D0,   0.6D0,
00316      1  0.50D0,0.60D0,0.75D0, 0D0, 0D0, 0D0, 0D0, 1.0D0, 1.0D0, 0D0,
00317      2  0.36D0, 1.0D0,0.01D0, 2.0D0,1.0D0,0.4D0, 0D0, 0D0, 0D0, 0D0,
00318      3  0.10D0, 1.0D0, 0.8D0, 1.5D0,0D0,2.0D0,0.2D0, 0D0,0.08D0,0D0,
00319      4  0.3D0, 0.58D0, 0.5D0, 0.9D0,0.5D0,1.0D0,1.0D0,1.0D0,0D0,0D0,
00320      5  0.77D0, 0.77D0, 0.77D0, -0.05D0, -0.005D0,
00321      5 -0.00001D0, -0.00001D0, -0.00001D0, 1.0D0, 0D0,
00322      6  4.5D0, 0.7D0, 0D0,0.003D0, 0.5D0, 0.5D0, 0D0, 0D0, 0D0, 0D0,
00323      7  10D0, 1000D0, 100D0, 1000D0, 0D0, 0.7D0,10D0, 0D0, 0D0, 0D0,
00324      8  0.29D0, 1.0D0, 1.0D0,  0D0,  10D0, 10D0, 0D0, 0D0, 0D0,1D-4,
00325      9  0.02D0, 1.0D0, 0.2D0,  0D0,  0D0,  0D0,  0D0, 0D0, 0D0, 0D0,
00326      &  0D0,  0D0,  0D0,  0D0,   0D0,   0D0,  0D0,  0D0,  0D0,  0D0,
00327      1  0D0,  0D0,  0D0,  0D0,   0D0,   0D0,  0D0,  0D0,  0D0,  0D0,
00328      2  1.0D0, 0.25D0,91.187D0,2.489D0, 0.01D0,
00329      2  2.0D0,  1.0D0, 0.25D0,0.002D0,   0D0,
00330      3  0D0, 0D0, 0D0, 0D0, 0.01D0, 0.99D0, 0D0, 0D0,  0.2D0,   0D0,
00331      4  10*0D0,
00332      5  10*0D0,
00333      6  10*0D0,
00334      7  0D0, 200D0, 200D0, .333D0, .05D0, 0D0, 0D0, 0D0, 0D0, -0.693D0, 
00335      8 -1.0D0, 0.387D0, 1.0D0, -0.08D0, -1.0D0,  
00336      8  1.0D0,  1.0D0, -0.693D0, -1.0D0, 0.387D0, 
00337      9  1.0D0, -0.08D0, -1.0D0,   1.0D0, 1.0D0,  
00338      9  5*0D0/  
00339  
00340 C...PYDAT2, with particle data and flavour treatment parameters.
00341       DATA (KCHG(I,1),I=   1, 500)/-1,2,-1,2,-1,2,-1,2,2*0,-3,0,-3,0,   
00342      &-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,  
00343      &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,   
00344      &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,   
00345      &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,   
00346      &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, 
00347      &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,  
00348      &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,    
00349      &4*0,3,2*0,3,0,-1,2,-1,2,-1,2,-3,0,-3,0,-3,0,-1,2,-3,164*0/        
00350       DATA (KCHG(I,2),I=   1, 500)/8*1,12*0,2,16*0,2,1,113*0,-1,0,2*-1, 
00351      &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,   
00352      &-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, 
00353      &6*1,6*0,2*1,165*0/                                                
00354       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, 
00355      &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,   
00356      &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, 
00357      &0,4*1,3*0,12*1,3*0,1,2*0,1,0,16*1,163*0/                          
00358       DATA (KCHG(I,4),I=   1, 293)/1,2,3,4,5,6,7,8,9,10,11,12,13,14,15, 
00359      &16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,   
00360      &37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,   
00361      &58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,   
00362      &79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,   
00363      &100,110,111,113,115,130,210,211,213,215,220,221,223,225,310,311,  
00364      &313,315,321,323,325,330,331,333,335,411,413,415,421,423,425,431,  
00365      &433,435,440,441,443,445,511,513,515,521,523,525,531,533,535,541,  
00366      &543,545,551,553,555,1103,1114,2101,2103,2110,2112,2114,2203,2210, 
00367      &2212,2214,2224,3101,3103,3112,3114,3122,3201,3203,3212,3214,3222, 
00368      &3224,3303,3312,3314,3322,3324,3334,4101,4103,4112,4114,4122,4132, 
00369      &4201,4203,4212,4214,4222,4224,4232,4301,4303,4312,4314,4322,4324, 
00370      &4332,4334,4403,4412,4414,4422,4424,4432,4434,4444,5101,5103,5112, 
00371      &5114,5122,5132,5142,5201,5203,5212,5214,5222,5224,5232,5242,5301, 
00372      &5303,5312,5314,5322,5324,5332,5334,5342,5401,5403,5412,5414,5422, 
00373      &5424,5432,5434,5442,5444,5503,5512,5514,5522,5524,5532,5534,5542, 
00374      &5544,5554,10111,10113,10211,10213,10221,10223,10311,10313,10321,  
00375      &10323,10331,10333,10411,10413,10421,10423,10431,10433,10441,      
00376      &10443,10511,10513,10521,10523,10531,10533,10541,10543,10551,      
00377      &10553,20113,20213,20223,20313,20323,20333,20413,20423,20433/      
00378       DATA (KCHG(I,4),I= 294, 500)/20443,20513,20523,20533,20543,20553, 
00379      &100443,100553,1000001,1000002,1000003,1000004,1000005,1000006,    
00380      &1000011,1000012,1000013,1000014,1000015,1000016,1000021,1000022,  
00381      &1000023,1000024,1000025,1000035,1000037,1000039,2000001,2000002,  
00382      &2000003,2000004,2000005,2000006,2000011,2000012,2000013,2000014,  
00383      &2000015,2000016,4000001,4000002,4000011,4000012,163*0/            
00384       DATA (PMAS(I,1),I=   1, 211)/0.33D0,0.33D0,0.50D0,1.50D0,    
00385      &4.80D0,175D0,2*400D0,2*0D0,0.00051D0,0D0,0.10566D0,0D0,1.777D0,  
00386      &0D0,400D0,5*0D0,91.187D0,80.33D0,80D0,6*0D0,500D0,900D0,500D0,        
00387      &3*300D0,350D0,200D0,5000D0,10*0D0,3*110D0,3*210D0,4*0D0,2*200D0,  
00388      &4*750D0,16*0D0,1D0,2D0,5D0,16*0D0,0.13498D0,0.7685D0,1.318D0,     
00389      &0.49767D0,0D0,0.13957D0,0.7669D0,1.318D0,0D0,0.54745D0,0.78194D0, 
00390      &1.275D0,2*0.49767D0,0.8961D0,1.432D0,0.4936D0,0.8916D0,1.425D0,   
00391      &0D0,0.95777D0,1.0194D0,1.525D0,1.8693D0,2.01D0,2.46D0,1.8645D0,   
00392      &2.0067D0,2.46D0,1.9685D0,2.1124D0,2.5735D0,0D0,2.9798D0,          
00393      &3.09688D0,3.5562D0,5.2792D0,5.3248D0,5.83D0,5.2789D0,5.3248D0,    
00394      &5.83D0,5.3693D0,5.4163D0,6.07D0,6.594D0,6.602D0,7.35D0,9.4D0,     
00395      &9.4603D0,9.9132D0,0.77133D0,1.234D0,0.57933D0,0.77133D0,0D0,      
00396      &0.93957D0,1.233D0,0.77133D0,0D0,0.93827D0,1.232D0,1.231D0,        
00397      &0.80473D0,0.92953D0,1.19744D0,1.3872D0,1.11568D0,0.80473D0,       
00398      &0.92953D0,1.19255D0,1.3837D0,1.18937D0,1.3828D0,1.09361D0,        
00399      &1.3213D0,1.535D0,1.3149D0,1.5318D0,1.67245D0,1.96908D0,2.00808D0, 
00400      &2.4521D0,2.5D0,2.2849D0,2.4703D0,1.96908D0,2.00808D0,2.4535D0,    
00401      &2.5D0,2.4529D0,2.5D0,2.4656D0,2.15432D0,2.17967D0,2.55D0,2.63D0,  
00402      &2.55D0,2.63D0,2.704D0,2.8D0,3.27531D0,3.59798D0,3.65648D0,        
00403      &3.59798D0,3.65648D0,3.78663D0,3.82466D0,4.91594D0,5.38897D0/      
00404       DATA (PMAS(I,1),I= 212, 500)/5.40145D0,5.8D0,5.81D0,5.641D0,      
00405      &5.84D0,7.00575D0,5.38897D0,5.40145D0,5.8D0,5.81D0,5.8D0,5.81D0,   
00406      &5.84D0,7.00575D0,5.56725D0,5.57536D0,5.96D0,5.97D0,5.96D0,5.97D0, 
00407      &6.12D0,6.13D0,7.19099D0,6.67143D0,6.67397D0,7.03724D0,7.0485D0,   
00408      &7.03724D0,7.0485D0,7.21101D0,7.219D0,8.30945D0,8.31325D0,         
00409      &10.07354D0,10.42272D0,10.44144D0,10.42272D0,10.44144D0,           
00410      &10.60209D0,10.61426D0,11.70767D0,11.71147D0,15.11061D0,0.9835D0,  
00411      &1.231D0,0.9835D0,1.231D0,1D0,1.17D0,1.429D0,1.29D0,1.429D0,       
00412      &1.29D0,2*1.4D0,2.272D0,2.424D0,2.272D0,2.424D0,2.5D0,2.536D0,     
00413      &3.4151D0,3.46D0,5.68D0,5.73D0,5.68D0,5.73D0,5.92D0,5.97D0,7.25D0, 
00414      &7.3D0,9.8598D0,9.875D0,2*1.23D0,1.282D0,2*1.402D0,1.427D0,        
00415      &2*2.372D0,2.56D0,3.5106D0,2*5.78D0,6.02D0,7.3D0,9.8919D0,3.686D0, 
00416      &10.0233D0,32*500D0,4*400D0,163*0D0/                               
00417       DATA (PMAS(I,2),I=   1, 500)/5*0D0,1.39883D0,16*0D0,2.48009D0,    
00418      &2.07002D0,0.00237D0,6*0D0,14.54848D0,0D0,16.6708D0,8.42842D0,     
00419      &4.92026D0,5.75967D0,0.10158D0,0.39162D0,417.4648D0,10*0D0,        
00420      &0.04104D0,0.0105D0,0.02807D0,0.82101D0,0.64973D0,0.1575D0,4*0D0,  
00421      &0.88161D0,0.88001D0,19.33905D0,39*0D0,0.151D0,0.107D0,3*0D0,      
00422      &0.149D0,0.107D0,2*0D0,0.00843D0,0.185D0,2*0D0,0.0505D0,0.109D0,   
00423      &0D0,0.0498D0,0.098D0,0D0,0.0002D0,0.00443D0,0.076D0,2*0D0,        
00424      &0.023D0,2*0D0,0.023D0,2*0D0,0.015D0,0D0,0.0013D0,0D0,0.002D0,     
00425      &2*0D0,0.02D0,2*0D0,0.02D0,2*0D0,0.02D0,2*0D0,0.02D0,4*0D0,0.12D0, 
00426      &4*0D0,0.12D0,3*0D0,2*0.12D0,3*0D0,0.0394D0,4*0D0,0.036D0,0D0,     
00427      &0.0358D0,2*0D0,0.0099D0,0D0,0.0091D0,74*0D0,0.06D0,0.142D0,       
00428      &0.06D0,0.142D0,0D0,0.36D0,0.287D0,0.09D0,0.287D0,0.09D0,0.25D0,   
00429      &0.08D0,0.05D0,0.02D0,0.05D0,0.02D0,0.05D0,0D0,0.014D0,0.01D0,     
00430      &8*0.05D0,0D0,0.01D0,2*0.4D0,0.025D0,2*0.174D0,0.053D0,3*0.05D0,   
00431      &0.0009D0,4*0.05D0,3*0D0,19*1D0,0D0,7*1D0,0D0,1D0,0D0,1D0,0D0,     
00432      &2.65171D0,2.65499D0,0.42901D0,0.41917D0,163*0D0/                  
00433       DATA (PMAS(I,3),I=   1, 500)/5*0D0,13.98835D0,16*0D0,24.8009D0,   
00434      &20.70015D0,0.02369D0,6*0D0,145.48484D0,0D0,166.70801D0,           
00435      &84.28416D0,49.20256D0,57.59671D0,1.0158D0,3.91624D0,4174.64797D0, 
00436      &10*0D0,0.41042D0,0.10504D0,0.28068D0,8.21005D0,6.49728D0,         
00437      &1.57496D0,4*0D0,8.81606D0,8.80013D0,193.39048D0,39*0D0,0.4D0,     
00438      &0.25D0,3*0D0,0.4D0,0.25D0,2*0D0,0.1D0,0.17D0,2*0D0,0.2D0,0.12D0,  
00439      &0D0,0.2D0,0.12D0,0D0,0.002D0,0.015D0,0.2D0,2*0D0,0.12D0,2*0D0,    
00440      &0.12D0,2*0D0,0.05D0,0D0,0.005D0,0D0,0.01D0,2*0D0,0.05D0,2*0D0,    
00441      &0.05D0,2*0D0,0.05D0,2*0D0,0.05D0,4*0D0,0.14D0,4*0D0,0.14D0,3*0D0, 
00442      &2*0.14D0,3*0D0,0.04D0,4*0D0,0.035D0,0D0,0.035D0,2*0D0,0.05D0,0D0, 
00443      &0.05D0,74*0D0,0.05D0,0.25D0,0.05D0,0.25D0,0D0,0.2D0,0.4D0,        
00444      &0.005D0,0.4D0,0.01D0,0.35D0,0.001D0,0.1D0,0.08D0,0.1D0,0.08D0,    
00445      &0.1D0,0D0,0.05D0,0.02D0,6*0.1D0,0.05D0,0.1D0,0D0,0.02D0,2*0.3D0,  
00446      &0.05D0,2*0.3D0,0.02D0,2*0.1D0,0.03D0,0.001D0,4*0.1D0,3*0D0,       
00447      &19*10D0,0.00001D0,7*10D0,0.00001D0,10D0,0.00001D0,10D0,0.00001D0, 
00448      &26.51715D0,26.54994D0,4.29011D0,4.19173D0,163*0D0/                
00449       DATA (PMAS(I,4),I=   1, 500)/12*0D0,658654D0,0D0,0.0872D0,68*0D0, 
00450      &0.1D0,0.387D0,16*0D0,0.00003D0,2*0D0,15500D0,0D0,7804.5D0,6*0D0,  
00451      &26.762D0,3*0D0,3709D0,6*0D0,0.317D0,2*0D0,0.1244D0,2*0D0,0.14D0,  
00452      &6*0D0,0.468D0,2*0D0,0.462D0,2*0D0,0.483D0,2*0D0,0.15D0,19*0D0,    
00453      &44.34D0,0D0,78.88D0,4*0D0,23.96D0,2*0D0,49.1D0,0D0,87.1D0,0D0,    
00454      &24.6D0,4*0D0,0.0618D0,0.029D0,6*0D0,0.106D0,6*0D0,0.019D0,2*0D0,  
00455      &7*0.1D0,4*0D0,0.342D0,2*0.387D0,6*0D0,2*0.387D0,6*0D0,0.387D0,    
00456      &0D0,0.387D0,2*0D0,8*0.387D0,0D0,9*0.387D0,83*0D0,163*0D0/         
00457       DATA PARF/
00458      &  0.5D0,0.25D0, 0.5D0,0.25D0, 1D0, 0.5D0,  0D0,  0D0,  0D0, 0D0,
00459      1  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
00460      2  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
00461      3  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
00462      4  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
00463      5  0.5D0,  0D0, 0.5D0,  0D0,  1D0,  1D0,  0D0,  0D0,  0D0, 0D0,
00464      6  0.75D0, 0.5D0, 0D0,0.1667D0,0.0833D0,0.1667D0,0D0,0D0,0D0, 0D0,
00465      7  0D0,  0D0,  1D0,0.3333D0,0.6667D0,0.3333D0,0D0,0D0,0D0, 0D0,
00466      8  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0, 0D0,
00467      9  0.0099D0, 0.0056D0, 0.199D0, 1.35D0, 4.5D0, 5*0D0,
00468      & 0.325D0,0.325D0,0.5D0,1.6D0, 5.0D0,  0D0,  0D0,  0D0,  0D0, 0D0,
00469      1 0D0,0.11D0,0.16D0,0.048D0,0.50D0,0.45D0,0.55D0,0.60D0,0D0,0D0,
00470      2 0.2D0, 0.1D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0,  0D0, 0D0,
00471      3 60*0D0,
00472      4 0.2D0,  0.5D0,  8*0D0,
00473      5 1800*0D0/
00474       DATA ((VCKM(I,J),J=1,4),I=1,4)/
00475      &  0.95113D0,  0.04884D0,  0.00003D0,  0.00000D0,
00476      &  0.04884D0,  0.94940D0,  0.00176D0,  0.00000D0,
00477      &  0.00003D0,  0.00176D0,  0.99821D0,  0.00000D0,
00478      &  0.00000D0,  0.00000D0,  0.00000D0,  1.00000D0/
00479  
00480 C...PYDAT3, with particle decay parameters and data.        
00481       DATA (MDCY(I,1),I=   1, 500)/5*0,3*1,6*0,1,0,1,5*0,3*1,6*0,1,0,   
00482      &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,     
00483      &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,  
00484      &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, 
00485      &1,0,1,0,4*1,163*0/                                                
00486       DATA (MDCY(I,2),I=   1, 500)/1,9,17,25,33,41,56,66,2*0,76,80,82,  
00487      &87,89,143,145,150,2*0,153,162,174,190,210,6*0,289,0,311,334,416,  
00488      &496,523,526,527,10*0,536,544,550,558,582,608,4*0,632,639,646,     
00489      &19*0,658,659,663,16*0,672,674,679,688,0,697,699,701,0,708,716,    
00490      &722,731,733,735,738,748,754,757,0,768,774,785,791,854,857,865,    
00491      &926,928,936,969,971,0,975,976,979,981,1017,1018,1026,1062,1063,   
00492      &1071,1110,1111,1115,1146,1147,1151,1152,1161,0,1163,4*0,1164,3*0, 
00493      &1167,1170,2*0,1171,1173,1176,2*0,1180,1181,1184,1187,0,1190,1195, 
00494      &1197,1200,1202,2*0,1206,1207,1208,1284,2*0,1288,1289,1290,1291,   
00495      &1292,2*0,1296,1297,1299,1300,1302,1306,0,1307,1311,1315,1319,     
00496      &1323,1327,1331,2*0,1335,1336,1337,1354,1363,2*0,1372,1373,1374,   
00497      &1375,1376,1385,2*0,1394,1395,1396,1397,1398,1407,1408,2*0,1417,   
00498      &1426,1435,1444,1453,1462,1471,1480,0,1489,1498,1507,1516,1525,    
00499      &1534,1543,1552,1561,1570,1571,1572,1573,1574,1579,1582,1584,1589, 
00500      &1591,1596,1603,1607,1609,1611,1613,1615,1617,1619,1621,1622,1624, 
00501      &1626,1628,1630,1632,1634,1636,1638,1640,1641,1643,1645,1659,1661, 
00502      &1663,1667,1669,1671,1673,1675,1677,1679,1681,1683,1685,1696,1710, 
00503      &1722,1734,1746,1758,1770,1785,1796,1807,1818,1829,1840,1851,1912, 
00504      &1919,2021,2077,2195,2329,0,2400,2416,2432,2448,2464,2480,2496,0,  
00505      &2511,0,2526,0,2541,2545,2549,2552,163*0/                          
00506       DATA (MDCY(I,3),I=   1, 500)/5*8,15,2*10,2*0,4,2,5,2,54,2,5,3,    
00507      &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, 
00508      &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,  
00509      &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, 
00510      &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,  
00511      &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,  
00512      &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,  
00513      &2*2,14,2*2,4,9*2,11,14,5*12,15,6*11,61,7,102,56,118,134,71,0,     
00514      &6*16,15,0,15,0,15,0,2*4,3,2,163*0/                                
00515       DATA (MDME(I,1),I=   1,4000)/6*1,-1,7*1,-1,7*1,-1,7*1,-1,7*1,-1,  
00516      &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,
00517      &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,
00518      &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,    
00519      &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,  
00520      &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,  
00521      &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,  
00522      &1447*0/                                                           
00523       DATA (MDME(I,2),I=   1,4000)/43*102,4*0,102,0,6*53,3*102,4*0,102, 
00524      &2*0,3*102,4*0,102,2*0,6*102,42,6*102,2*42,2*0,8*41,2*0,36*41,     
00525      &8*102,0,102,0,102,2*0,21*102,8*32,8*0,16*32,4*0,8*32,9*0,62*53,   
00526      &8*32,14*0,16*32,7*0,8*32,12*0,62*53,8*32,10*0,62*53,4*32,5*0,     
00527      &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,     
00528      &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,  
00529      &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,  
00530      &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,  
00531      &12,2*0,12,0,12,14*42,16*0,48,3*13,2*42,9*0,14*42,16*0,48,3*13,    
00532      &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,  
00533      &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,  
00534      &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,    
00535      &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,   
00536      &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,   
00537      &5*0,832*53,1459*0/                                                
00538       DATA (BRAT(I)  ,I=   1, 348)/43*0D0,0.00003D0,0.001765D0,         
00539      &0.998205D0,35*0D0,1D0,6*0D0,0.1783D0,0.1735D0,0.1131D0,0.2494D0,  
00540      &0.003D0,0.09D0,0.0027D0,0.01D0,0.0014D0,0.0012D0,2*0.00025D0,     
00541      &0.0071D0,0.012D0,0.0004D0,0.00075D0,0.00006D0,2*0.00078D0,        
00542      &0.0034D0,0.08D0,0.011D0,0.0191D0,0.00006D0,0.005D0,0.0133D0,      
00543      &0.0067D0,0.0005D0,0.0035D0,0.0006D0,0.0015D0,0.00021D0,0.0002D0,  
00544      &0.00075D0,0.0001D0,0.0002D0,0.0011D0,3*0.0002D0,0.00022D0,        
00545      &0.0004D0,0.0001D0,2*0.00205D0,2*0.00069D0,0.00025D0,0.00051D0,    
00546      &0.00025D0,35*0D0,0.154075D0,0.119483D0,0.154072D0,0.119346D0,     
00547      &0.152196D0,3*0D0,0.033549D0,0.066752D0,0.033549D0,0.066752D0,     
00548      &0.033473D0,0.066752D0,2*0D0,0.321502D0,0.016502D0,2*0D0,          
00549      &0.016509D0,0.320778D0,2*0D0,0.00001D0,0.000591D0,6*0D0,           
00550      &2*0.108062D0,0.107983D0,0D0,0.000001D0,0D0,0.000327D0,0.053489D0, 
00551      &0.852249D0,4*0D0,0.000244D0,0.06883D0,0D0,0.023981D0,0.000879D0,  
00552      &65*0D0,0.145869D0,0.113303D0,0.145869D0,0.113298D0,0.14581D0,     
00553      &0.049013D0,2*0D0,0.032007D0,0.063606D0,0.032007D0,0.063606D0,     
00554      &0.032004D0,0.063606D0,8*0D0,0.251276D0,0.012903D0,0.000006D0,0D0, 
00555      &0.012903D0,0.250816D0,0.00038D0,0D0,0.000008D0,0.000465D0,        
00556      &0.215459D0,5*0D0,2*0.085262D0,0.08526D0,7*0D0,0.000046D0,         
00557      &0.000754D0,5*0D0,0.000074D0,0D0,0.000439D0,0.000015D0,0.000061D0/ 
00558       DATA (BRAT(I)  ,I= 349, 642)/0.306171D0,0.68864D0,0D0,0.003799D0, 
00559      &66*0D0,0.000079D0,0.001292D0,5*0D0,0.000126D0,0D0,0.002256D0,     
00560      &0.00001D0,0.000002D0,2*0D0,0.996233D0,63*0D0,0.000013D0,          
00561      &0.067484D0,2*0D0,0.00001D0,0.002701D0,0D0,0.929792D0,18*0D0,      
00562      &0.452899D0,0D0,0.547101D0,1D0,2*0.215134D0,0.215133D0,0.214738D0, 
00563      &2*0D0,2*0.06993D0,0D0,0.000225D0,0.036777D0,0.596654D0,2*0D0,     
00564      &0.000177D0,0.050055D0,0.316112D0,0.041762D0,0.90916D0,2*0D0,      
00565      &0.000173D0,0.048905D0,0.000328D0,0.053776D0,0.872444D0,2*0D0,     
00566      &0.000259D0,0.073192D0,0D0,0.153373D0,2*0.342801D0,0D0,0.086867D0, 
00567      &0.03128D0,0.001598D0,0.000768D0,0.004789D0,0.006911D0,0.004789D0, 
00568      &0.006911D0,0.004789D0,3*0D0,0.003077D0,0.00103D0,0.003077D0,      
00569      &0.00103D0,0.003077D0,0.00103D0,2*0D0,0.138845D0,0.474102D0,       
00570      &0.176299D0,0D0,0.109767D0,0.008161D0,0.028584D0,0.001468D0,2*0D0, 
00571      &0.001468D0,0.02853D0,0.000007D0,0D0,0.000001D0,0.000053D0,        
00572      &0.003735D0,5*0D0,2*0.009661D0,0.00966D0,0D0,0.163019D0,           
00573      &0.004003D0,0.45294D0,0.008334D0,2*0.038042D0,0.001999D0,0D0,      
00574      &0.017733D0,0.045908D0,0.017733D0,0.045908D0,0.017733D0,3*0D0,     
00575      &0.038354D0,0.011181D0,0.038354D0,0.011181D0,0.038354D0,           
00576      &0.011181D0,2*0D0,0.090264D0,2*0.001805D0,0.090264D0,0.001805D0,   
00577      &0.81225D0,0.001806D0,0.090428D0,0.001809D0,0.001808D0,0.090428D0/ 
00578       DATA (BRAT(I)  ,I= 643, 803)/0.001808D0,0.81372D0,0D0,0.325914D0, 
00579      &0.016735D0,0.000009D0,0.016736D0,0.32532D0,0.000554D0,0.00001D0,  
00580      &0.000603D0,0.314118D0,3*0D0,1D0,2*0.08D0,0.76D0,0.08D0,2*0.105D0, 
00581      &0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,0.988D0,        
00582      &0.012D0,0.998739D0,0.00079D0,0.00038D0,0.000046D0,0.000045D0,     
00583      &2*0.34725D0,0.144D0,0.104D0,0.0245D0,2*0.01225D0,0.0028D0,        
00584      &0.0057D0,0.2112D0,0.1256D0,2*0.1939D0,2*0.1359D0,0.002D0,0.001D0, 
00585      &0.0006D0,0.999877D0,0.000123D0,0.99955D0,0.00045D0,2*0.34725D0,   
00586      &0.144D0,0.104D0,0.049D0,0.0028D0,0.0057D0,0.3923D0,0.321D0,       
00587      &0.2317D0,0.0478D0,0.0049D0,0.0013D0,0.0003D0,0.0007D0,0.89D0,     
00588      &0.08693D0,0.0221D0,0.00083D0,2*0.00007D0,0.564D0,0.282D0,0.072D0, 
00589      &0.028D0,0.023D0,2*0.0115D0,0.005D0,0.003D0,0.6861D0,0.3139D0,     
00590      &2*0.5D0,0.665D0,0.333D0,0.002D0,0.333D0,0.166D0,0.168D0,0.084D0,  
00591      &0.087D0,0.043D0,0.059D0,2*0.029D0,0.002D0,0.6352D0,0.2116D0,      
00592      &0.0559D0,0.0173D0,0.0482D0,0.0318D0,0.666D0,0.333D0,0.001D0,      
00593      &0.332D0,0.166D0,0.168D0,0.084D0,0.086D0,0.043D0,0.059D0,          
00594      &2*0.029D0,2*0.002D0,0.437D0,0.208D0,0.302D0,0.0302D0,0.0212D0,    
00595      &0.0016D0,0.48947D0,0.34D0,3*0.043D0,0.027D0,0.0126D0,0.0013D0,    
00596      &0.0003D0,0.00025D0,0.00008D0,0.444D0,2*0.222D0,0.104D0,2*0.004D0, 
00597      &0.07D0,0.065D0,2*0.005D0,2*0.011D0,5*0.001D0,0.07D0,0.065D0/      
00598       DATA (BRAT(I)  ,I= 804, 977)/2*0.005D0,2*0.011D0,5*0.001D0,       
00599      &0.026D0,0.019D0,0.066D0,0.041D0,0.045D0,0.076D0,0.0073D0,         
00600      &2*0.0047D0,0.026D0,0.001D0,0.0006D0,0.0066D0,0.005D0,2*0.003D0,   
00601      &2*0.0006D0,2*0.001D0,0.006D0,0.005D0,0.012D0,0.0057D0,0.067D0,    
00602      &0.008D0,0.0022D0,0.027D0,0.004D0,0.019D0,0.012D0,0.002D0,0.009D0, 
00603      &0.0218D0,0.001D0,0.022D0,0.087D0,0.001D0,0.0019D0,0.0015D0,       
00604      &0.0028D0,0.683D0,0.306D0,0.011D0,0.3D0,0.15D0,0.16D0,0.08D0,      
00605      &0.13D0,0.06D0,0.08D0,0.04D0,0.034D0,0.027D0,2*0.002D0,2*0.004D0,  
00606      &2*0.002D0,0.034D0,0.027D0,2*0.002D0,2*0.004D0,2*0.002D0,0.0365D0, 
00607      &0.045D0,0.073D0,0.062D0,3*0.021D0,0.0061D0,0.015D0,0.025D0,       
00608      &0.0088D0,0.074D0,0.0109D0,0.0041D0,0.002D0,0.0035D0,0.0011D0,     
00609      &0.001D0,0.0027D0,2*0.0016D0,0.0018D0,0.011D0,0.0063D0,0.0052D0,   
00610      &0.018D0,0.016D0,0.0034D0,0.0036D0,0.0009D0,0.0006D0,0.015D0,      
00611      &0.0923D0,0.018D0,0.022D0,0.0077D0,0.009D0,0.0075D0,0.024D0,       
00612      &0.0085D0,0.067D0,0.0511D0,0.017D0,0.0004D0,0.0028D0,0.619D0,      
00613      &0.381D0,0.3D0,0.15D0,0.16D0,0.08D0,0.13D0,0.06D0,0.08D0,0.04D0,   
00614      &0.01D0,2*0.02D0,0.03D0,2*0.005D0,2*0.02D0,0.03D0,2*0.005D0,       
00615      &0.015D0,0.037D0,0.028D0,0.079D0,0.095D0,0.052D0,0.0078D0,         
00616      &4*0.001D0,0.028D0,0.033D0,0.026D0,0.05D0,0.01D0,4*0.005D0,0.25D0, 
00617      &0.0952D0,0.94D0,0.06D0,2*0.4D0,2*0.1D0,1D0,0.0602D0,0.0601D0/     
00618       DATA (BRAT(I)  ,I= 978,1136)/0.8797D0,0.135D0,0.865D0,0.02D0,     
00619      &0.055D0,2*0.005D0,0.008D0,0.012D0,0.02D0,0.055D0,2*0.005D0,       
00620      &0.008D0,0.012D0,0.01D0,0.03D0,0.0035D0,0.011D0,0.0055D0,0.0042D0, 
00621      &0.009D0,0.018D0,0.015D0,0.0185D0,0.0135D0,0.025D0,0.0004D0,       
00622      &0.0007D0,0.0008D0,0.0014D0,0.0019D0,0.0025D0,0.4291D0,0.08D0,     
00623      &0.07D0,0.02D0,0.015D0,0.005D0,1D0,0.3D0,0.15D0,0.16D0,0.08D0,     
00624      &0.13D0,0.06D0,0.08D0,0.04D0,0.02D0,0.055D0,2*0.005D0,0.008D0,     
00625      &0.012D0,0.02D0,0.055D0,2*0.005D0,0.008D0,0.012D0,0.01D0,0.03D0,   
00626      &0.0035D0,0.011D0,0.0055D0,0.0042D0,0.009D0,0.018D0,0.015D0,       
00627      &0.0185D0,0.0135D0,0.025D0,0.0004D0,0.0007D0,0.0008D0,0.0014D0,    
00628      &0.0019D0,0.0025D0,0.4291D0,0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,  
00629      &1D0,0.3D0,0.15D0,0.16D0,0.08D0,0.13D0,0.06D0,0.08D0,0.04D0,       
00630      &0.02D0,0.055D0,2*0.005D0,0.008D0,0.012D0,0.02D0,0.055D0,          
00631      &2*0.005D0,0.008D0,0.012D0,0.01D0,0.03D0,0.0035D0,0.011D0,         
00632      &0.0055D0,0.0042D0,0.009D0,0.018D0,0.015D0,0.0185D0,0.0135D0,      
00633      &0.025D0,2*0.0002D0,0.0007D0,2*0.0004D0,0.0014D0,0.001D0,0.0009D0, 
00634      &0.0025D0,0.4291D0,0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,1D0,       
00635      &2*0.3D0,2*0.2D0,0.047D0,0.122D0,0.006D0,0.012D0,0.035D0,0.012D0,  
00636      &0.035D0,0.003D0,0.007D0,0.15D0,0.037D0,0.008D0,0.002D0,0.05D0,    
00637      &0.015D0,0.003D0,0.001D0,0.014D0,0.042D0,0.014D0,0.042D0,0.24D0/   
00638       DATA (BRAT(I)  ,I=1137,1341)/0.065D0,0.012D0,0.003D0,0.001D0,     
00639      &0.002D0,0.001D0,0.002D0,0.014D0,0.003D0,1D0,2*0.3D0,2*0.2D0,1D0,  
00640      &0.0252D0,0.0248D0,0.0267D0,0.015D0,0.045D0,0.015D0,0.045D0,       
00641      &0.7743D0,0.029D0,0.22D0,0.78D0,1D0,0.331D0,0.663D0,0.006D0,       
00642      &0.663D0,0.331D0,0.006D0,1D0,0.999D0,0.001D0,0.88D0,2*0.06D0,      
00643      &0.639D0,0.358D0,0.002D0,0.001D0,1D0,0.88D0,2*0.06D0,0.516D0,      
00644      &0.483D0,0.001D0,0.88D0,2*0.06D0,0.9988D0,0.0001D0,0.0006D0,       
00645      &0.0004D0,0.0001D0,0.667D0,0.333D0,0.9954D0,0.0011D0,0.0035D0,     
00646      &0.333D0,0.667D0,0.676D0,0.234D0,0.085D0,0.005D0,2*1D0,0.018D0,    
00647      &2*0.005D0,0.003D0,0.002D0,2*0.006D0,0.018D0,2*0.005D0,0.003D0,    
00648      &0.002D0,2*0.006D0,0.0066D0,0.025D0,0.016D0,0.0088D0,2*0.005D0,    
00649      &0.0058D0,0.005D0,0.0055D0,4*0.004D0,2*0.002D0,2*0.004D0,0.003D0,  
00650      &0.002D0,2*0.003D0,3*0.002D0,2*0.001D0,0.002D0,2*0.001D0,          
00651      &2*0.002D0,0.0013D0,0.0018D0,5*0.001D0,4*0.003D0,2*0.005D0,        
00652      &2*0.002D0,2*0.001D0,2*0.002D0,2*0.001D0,0.2432D0,0.057D0,         
00653      &2*0.035D0,0.15D0,2*0.075D0,0.03D0,2*0.015D0,2*0.08D0,0.76D0,      
00654      &0.08D0,4*1D0,2*0.08D0,0.76D0,0.08D0,1D0,2*0.5D0,1D0,2*0.5D0,      
00655      &2*0.08D0,0.76D0,0.08D0,1D0,2*0.08D0,0.76D0,3*0.08D0,0.76D0,       
00656      &3*0.08D0,0.76D0,3*0.08D0,0.76D0,3*0.08D0,0.76D0,3*0.08D0,0.76D0,  
00657      &3*0.08D0,0.76D0,0.08D0,2*1D0,2*0.105D0,0.04D0,0.0077D0,0.02D0/    
00658       DATA (BRAT(I)  ,I=1342,1522)/0.0235D0,0.0285D0,0.0435D0,0.0011D0, 
00659      &0.0022D0,0.0044D0,0.4291D0,0.08D0,0.07D0,0.02D0,0.015D0,0.005D0,  
00660      &2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,      
00661      &2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,      
00662      &4*1D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,        
00663      &0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,      
00664      &0.005D0,4*1D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,        
00665      &0.015D0,0.005D0,1D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,  
00666      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00667      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00668      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00669      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00670      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00671      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00672      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00673      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00674      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00675      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00676      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0,      
00677      &0.015D0,0.005D0,2*0.105D0,0.04D0,0.5D0,0.08D0,0.14D0,0.01D0/      
00678       DATA (BRAT(I)  ,I=1523,2548)/0.015D0,0.005D0,2*0.105D0,0.04D0,    
00679      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,      
00680      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,      
00681      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,      
00682      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,2*0.105D0,0.04D0,      
00683      &0.5D0,0.08D0,0.14D0,0.01D0,0.015D0,0.005D0,4*1D0,0.52D0,0.26D0,   
00684      &0.11D0,2*0.055D0,0.333D0,0.334D0,0.333D0,0.667D0,0.333D0,0.28D0,  
00685      &0.14D0,0.313D0,0.157D0,0.11D0,0.667D0,0.333D0,0.28D0,0.14D0,      
00686      &0.313D0,0.157D0,0.11D0,0.36D0,0.18D0,0.03D0,2*0.015D0,2*0.2D0,    
00687      &4*0.25D0,0.667D0,0.333D0,0.667D0,0.333D0,0.667D0,0.333D0,0.667D0, 
00688      &0.333D0,4*0.5D0,0.007D0,0.993D0,1D0,0.667D0,0.333D0,0.667D0,      
00689      &0.333D0,0.667D0,0.333D0,0.667D0,0.333D0,8*0.5D0,0.02D0,0.98D0,    
00690      &1D0,4*0.5D0,3*0.146D0,3*0.05D0,0.15D0,2*0.05D0,4*0.024D0,0.066D0, 
00691      &0.667D0,0.333D0,0.667D0,0.333D0,4*0.25D0,0.667D0,0.333D0,0.667D0, 
00692      &0.333D0,2*0.5D0,0.273D0,0.727D0,0.667D0,0.333D0,0.667D0,0.333D0,  
00693      &4*0.5D0,0.35D0,0.65D0,2*0.0083D0,0.1866D0,0.324D0,0.184D0,        
00694      &0.027D0,0.001D0,0.093D0,0.087D0,0.078D0,0.0028D0,3*0.014D0,       
00695      &0.008D0,0.024D0,0.008D0,0.024D0,0.425D0,0.02D0,0.185D0,0.088D0,   
00696      &0.043D0,0.067D0,0.066D0,831*0D0,0.85422D0,0.005292D0,0.044039D0,  
00697      &0.096449D0,0.853165D0,0.021144D0,0.029361D0,0.096329D0/           
00698       DATA (BRAT(I)  ,I=2549,4000)/0.294414D0,0.109437D0,0.596149D0,    
00699      &0.389861D0,0.610139D0,1447*0D0/                                   
00700       DATA (KFDP(I,1),I=   1, 374)/21,22,23,4*-24,25,21,22,23,4*24,25,  
00701      &21,22,23,4*-24,25,21,22,23,4*24,25,21,22,23,4*-24,25,21,22,23,    
00702      &4*24,25,37,1000022,1000023,1000025,1000035,1000021,1000039,21,22, 
00703      &23,4*-24,25,2*-37,21,22,23,4*24,25,2*37,22,23,-24,25,23,24,-12,   
00704      &22,23,-24,25,23,24,-12,-14,48*16,22,23,-24,25,23,24,22,23,-24,25, 
00705      &-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,  
00706      &3,4,5,6,7,8,11,12,13,14,15,16,17,18,4*-1,4*-3,4*-5,4*-7,-11,-13,  
00707      &-15,-17,1,2,3,4,5,6,7,8,11,13,15,17,21,2*22,23,24,1000022,        
00708      &2*1000023,3*1000025,4*1000035,2*1000024,2*1000037,1000001,        
00709      &2000001,1000001,-1000001,1000002,2000002,1000002,-1000002,        
00710      &1000003,2000003,1000003,-1000003,1000004,2000004,1000004,         
00711      &-1000004,1000005,2000005,1000005,-1000005,1000006,2000006,        
00712      &1000006,-1000006,1000011,2000011,1000011,-1000011,1000012,        
00713      &2000012,1000012,-1000012,1000013,2000013,1000013,-1000013,        
00714      &1000014,2000014,1000014,-1000014,1000015,2000015,1000015,         
00715      &-1000015,1000016,2000016,1000016,-1000016,1,2,3,4,5,6,7,8,11,12,  
00716      &13,14,15,16,17,18,24,37,2*23,25,35,4*-1,4*-3,4*-5,4*-7,-11,-13,   
00717      &-15,-17,3*24,1,2,3,4,5,6,7,8,11,13,15,17,21,2*22,23,24,23,25,36,  
00718      &1000022,2*1000023,3*1000025,4*1000035,2*1000024,2*1000037,        
00719      &1000001,2000001,1000001,-1000001,1000002,2000002,1000002/         
00720       DATA (KFDP(I,1),I= 375, 587)/-1000002,1000003,2000003,1000003,    
00721      &-1000003,1000004,2000004,1000004,-1000004,1000005,2000005,        
00722      &1000005,-1000005,1000006,2000006,1000006,-1000006,1000011,        
00723      &2000011,1000011,-1000011,1000012,2000012,1000012,-1000012,        
00724      &1000013,2000013,1000013,-1000013,1000014,2000014,1000014,         
00725      &-1000014,1000015,2000015,1000015,-1000015,1000016,2000016,        
00726      &1000016,-1000016,1,2,3,4,5,6,7,8,11,13,15,17,21,2*22,23,24,23,    
00727      &1000022,2*1000023,3*1000025,4*1000035,2*1000024,2*1000037,        
00728      &1000001,2000001,1000001,-1000001,1000002,2000002,1000002,         
00729      &-1000002,1000003,2000003,1000003,-1000003,1000004,2000004,        
00730      &1000004,-1000004,1000005,2000005,1000005,-1000005,1000006,        
00731      &2000006,1000006,-1000006,1000011,2000011,1000011,-1000011,        
00732      &1000012,2000012,1000012,-1000012,1000013,2000013,1000013,         
00733      &-1000013,1000014,2000014,1000014,-1000014,1000015,2000015,        
00734      &1000015,-1000015,1000016,2000016,1000016,-1000016,-1,-3,-5,-7,    
00735      &-11,-13,-15,-17,24,2*1000022,2*1000023,2*1000025,2*1000035,       
00736      &1000006,2000006,1000006,2000006,-1000001,-1000003,-1000011,       
00737      &-1000013,-1000015,-2000015,5,6,21,2,1,2,3,4,5,6,11,13,15,3,4,5,6, 
00738      &11,13,15,21,2*4,24,-11,-13,-15,3,4,5,6,11,13,15,21,2*24,2*52,     
00739      &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/   
00740       DATA (KFDP(I,1),I= 588, 979)/4*-1,4*-3,4*-5,4*-7,-11,-13,-15,-17, 
00741      &22,23,22,23,24,52,24,52,1,2,3,4,5,6,7,8,11,12,13,14,15,16,17,18,  
00742      &3*-11,2*-13,-15,24,3*-11,2*-13,-15,63,3*-1,3*-3,3*-5,-11,-13,-15, 
00743      &82,-11,-13,2*2,-12,-14,-16,2*-2,2*-4,-2,-4,2*22,211,111,221,13,   
00744      &11,213,-213,221,223,321,130,310,111,331,111,211,-12,12,-14,14,    
00745      &211,111,22,-13,-11,2*211,213,113,221,223,321,211,331,22,111,211,  
00746      &2*22,211,22,111,211,22,211,221,111,11,211,111,2*211,321,130,310,  
00747      &221,111,211,111,130,310,321,2*311,321,311,323,313,323,313,321,    
00748      &3*311,-13,3*211,12,14,311,2*321,311,321,313,323,313,323,311,      
00749      &4*321,211,111,3*22,111,321,130,-213,113,213,211,22,111,11,13,211, 
00750      &321,130,310,221,211,111,11*-11,11*-13,-311,-313,-311,-313,-20313, 
00751      &2*-311,-313,-311,-313,2*111,2*221,2*331,2*113,2*223,2*333,-311,   
00752      &-313,2*-321,211,-311,-321,333,-311,-313,-321,211,2*-321,2*-311,   
00753      &-321,211,113,421,2*411,421,411,423,413,423,413,421,411,8*-11,     
00754      &8*-13,-321,-323,-321,-323,-311,2*-313,-311,-313,2*-311,-321,      
00755      &-10323,-321,-323,-321,-311,2*-313,211,111,333,3*-321,-311,-313,   
00756      &-321,-313,310,333,211,2*-321,-311,-313,-311,211,-321,3*-311,211,  
00757      &113,321,2*421,411,421,413,423,413,423,411,421,-15,5*-11,5*-13,    
00758      &221,331,333,221,331,333,10221,211,213,211,213,321,323,321,323,    
00759      &2212,221,331,333,221,2*2,2*431,421,411,423,413,82,11,13,82,443/   
00760       DATA (KFDP(I,1),I= 980,1419)/82,6*12,6*14,2*16,3*-411,3*-413,     
00761      &2*-411,2*-413,2*441,2*443,2*20443,2*2,2*4,2,4,511,521,511,523,    
00762      &513,523,513,521,511,6*12,6*14,2*16,3*-421,3*-423,2*-421,2*-423,   
00763      &2*441,2*443,2*20443,2*2,2*4,2,4,521,511,521,513,523,513,523,511,  
00764      &521,6*12,6*14,2*16,3*-431,3*-433,2*-431,2*-433,3*441,3*443,       
00765      &3*20443,2*2,2*4,2,4,531,521,511,523,513,16,2*4,2*12,2*14,2*16,    
00766      &4*2,4*4,2*-11,2*-13,2*-1,2*-3,2*-11,2*-13,2*-1,541,511,521,513,   
00767      &523,21,11,13,15,1,2,3,4,21,22,553,21,2112,2212,2*2112,2212,2112,  
00768      &2*2212,2112,-12,3122,3212,3112,2212,2*2112,-12,2*3122,3222,3112,  
00769      &2212,2112,2212,3122,3222,3212,3122,3112,-12,-14,-12,3322,3312,    
00770      &2*3122,3212,3322,3312,3122,3322,3312,-12,2*4122,7*-11,7*-13,      
00771      &2*2224,2*2212,2*2214,2*3122,2*3212,2*3214,5*3222,4*3224,2*3322,   
00772      &3324,2*2224,7*2212,5*2214,2*2112,2*2114,2*3122,2*3212,2*3214,     
00773      &2*3222,2*3224,4*2,3,2*2,1,2*2,-11,-13,2*2,4*4122,-11,-13,2*2,     
00774      &3*4132,3*4232,-11,-13,2*2,4332,-11,-13,2*2,-11,-13,2*2,-11,-13,   
00775      &2*2,-11,-13,2*2,-11,-13,2*2,-11,-13,2*2,-11,-13,2*2,2*5122,-12,   
00776      &-14,-16,5*4122,441,443,20443,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,    
00777      &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,4*5122,-12,-14,-16,2*-2,   
00778      &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,2*5132,2*5232,-12,-14,-16, 
00779      &2*-2,2*-4,-2,-4,5332,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16/     
00780       DATA (KFDP(I,1),I=1420,1739)/2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,    
00781      &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,  
00782      &-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,   
00783      &-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,  
00784      &2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,     
00785      &2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,  
00786      &-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,-12,   
00787      &-14,-16,2*-2,2*-4,-2,-4,-12,-14,-16,2*-2,2*-4,-2,-4,221,223,221,  
00788      &223,211,111,321,130,310,213,113,-213,321,311,321,311,323,313,     
00789      &2*311,321,311,321,313,323,321,211,111,321,130,310,2*211,313,-313, 
00790      &323,-323,421,411,423,413,411,421,413,423,411,421,423,413,443,     
00791      &2*82,521,511,523,513,511,521,513,523,521,511,523,513,511,521,513, 
00792      &523,553,2*21,213,-213,113,213,10211,10111,-10211,2*221,213,2*113, 
00793      &-213,2*321,2*311,113,323,2*313,323,313,-313,323,-323,423,2*413,   
00794      &2*423,413,443,82,523,2*513,2*523,2*513,523,553,21,11,13,82,4*443, 
00795      &10441,20443,445,441,11,13,15,1,2,3,4,21,22,2*553,10551,20553,555, 
00796      &1000039,-1000024,-1000037,1000022,1000023,1000025,1000035,        
00797      &1000002,2000002,1000002,2000002,1000021,1000039,1000024,1000037,  
00798      &1000022,1000023,1000025,1000035,1000001,2000001,1000001,2000001,  
00799      &1000021,1000039,-1000024,-1000037,1000022,1000023,1000025/        
00800       DATA (KFDP(I,1),I=1740,1907)/1000035,1000004,2000004,1000004,     
00801      &2000004,1000021,1000039,1000024,1000037,1000022,1000023,1000025,  
00802      &1000035,1000003,2000003,1000003,2000003,1000021,1000039,-1000024, 
00803      &-1000037,1000022,1000023,1000025,1000035,1000006,2000006,1000006, 
00804      &2000006,1000021,1000039,1000024,1000037,1000022,1000023,1000025,  
00805      &1000035,1000005,2000005,1000005,2000005,1000021,1000022,1000016,  
00806      &-1000015,1000039,-1000024,-1000037,1000022,1000023,1000025,       
00807      &1000035,1000012,2000012,1000012,2000012,1000039,1000024,1000037,  
00808      &1000022,1000023,1000025,1000035,1000011,2000011,1000011,2000011,  
00809      &1000039,-1000024,-1000037,1000022,1000023,1000025,1000035,        
00810      &1000014,2000014,1000014,2000014,1000039,1000024,1000037,1000022,  
00811      &1000023,1000025,1000035,1000013,2000013,1000013,2000013,1000039,  
00812      &-1000024,-1000037,1000022,1000023,1000025,1000035,1000016,        
00813      &2000016,1000016,2000016,1000039,1000024,1000037,1000022,1000023,  
00814      &1000025,1000035,1000015,2000015,1000015,2000015,1000039,1000001,  
00815      &-1000001,2000001,-2000001,1000002,-1000002,2000002,-2000002,      
00816      &1000003,-1000003,2000003,-2000003,1000004,-1000004,2000004,       
00817      &-2000004,1000005,-1000005,2000005,-2000005,1000006,-1000006,      
00818      &2000006,-2000006,6*1000022,6*1000023,6*1000025,6*1000035,1000024, 
00819      &-1000024,1000024,-1000024,1000024,-1000024,1000037,-1000037/      
00820       DATA (KFDP(I,1),I=1908,2126)/1000037,-1000037,1000037,-1000037,   
00821      &5*1000039,4,1,5*1000039,16*1000022,1000024,-1000024,1000024,      
00822      &-1000024,1000024,-1000024,1000024,-1000024,1000024,-1000024,      
00823      &1000024,-1000024,1000037,-1000037,1000037,-1000037,1000037,       
00824      &-1000037,1000037,-1000037,1000037,-1000037,1000037,-1000037,      
00825      &1000024,-1000024,1000037,-1000037,1000001,-1000001,2000001,       
00826      &-2000001,1000002,-1000002,2000002,-2000002,1000003,-1000003,      
00827      &2000003,-2000003,1000004,-1000004,2000004,-2000004,1000005,       
00828      &-1000005,2000005,-2000005,1000006,-1000006,2000006,-2000006,      
00829      &1000011,-1000011,2000011,-2000011,1000012,-1000012,2000012,       
00830      &-2000012,1000013,-1000013,2000013,-2000013,1000014,-1000014,      
00831      &2000014,-2000014,1000015,-1000015,2000015,-2000015,1000016,       
00832      &-1000016,2000016,-2000016,5*1000021,2*1000039,6*1000022,          
00833      &6*1000023,6*1000025,6*1000035,1000022,1000023,1000025,1000035,    
00834      &1000002,2000002,-1000001,-2000001,1000004,2000004,-1000003,       
00835      &-2000003,1000006,2000006,-1000005,-2000005,1000012,2000012,       
00836      &-1000011,-2000011,1000014,2000014,-1000013,-2000013,1000016,      
00837      &2000016,-1000015,-2000015,2*1000021,5*1000039,16*1000022,         
00838      &16*1000023,1000024,-1000024,1000024,-1000024,1000024,-1000024,    
00839      &1000024,-1000024,1000024,-1000024,1000024,-1000024,1000037/       
00840       DATA (KFDP(I,1),I=2127,2315)/-1000037,1000037,-1000037,1000037,   
00841      &-1000037,1000037,-1000037,1000037,-1000037,1000037,-1000037,      
00842      &1000024,-1000024,1000037,-1000037,1000001,-1000001,2000001,       
00843      &-2000001,1000002,-1000002,2000002,-2000002,1000003,-1000003,      
00844      &2000003,-2000003,1000004,-1000004,2000004,-2000004,1000005,       
00845      &-1000005,2000005,-2000005,1000006,-1000006,2000006,-2000006,      
00846      &1000011,-1000011,2000011,-2000011,1000012,-1000012,2000012,       
00847      &-2000012,1000013,-1000013,2000013,-2000013,1000014,-1000014,      
00848      &2000014,-2000014,1000015,-1000015,2000015,-2000015,1000016,       
00849      &-1000016,2000016,-2000016,5*1000021,5*1000039,16*1000022,         
00850      &16*1000023,16*1000025,1000024,-1000024,1000024,-1000024,1000024,  
00851      &-1000024,1000024,-1000024,1000024,-1000024,1000024,-1000024,      
00852      &1000037,-1000037,1000037,-1000037,1000037,-1000037,1000037,       
00853      &-1000037,1000037,-1000037,1000037,-1000037,1000024,-1000024,      
00854      &1000037,-1000037,1000001,-1000001,2000001,-2000001,1000002,       
00855      &-1000002,2000002,-2000002,1000003,-1000003,2000003,-2000003,      
00856      &1000004,-1000004,2000004,-2000004,1000005,-1000005,2000005,       
00857      &-2000005,1000006,-1000006,2000006,-2000006,1000011,-1000011,      
00858      &2000011,-2000011,1000012,-1000012,2000012,-2000012,1000013,       
00859      &-1000013,2000013,-2000013,1000014,-1000014,2000014,-2000014/      
00860       DATA (KFDP(I,1),I=2316,2516)/1000015,-1000015,2000015,-2000015,   
00861      &1000016,-1000016,2000016,-2000016,5*1000021,2*1000039,15*1000024, 
00862      &6*1000022,6*1000023,6*1000025,6*1000035,1000022,1000023,1000025,  
00863      &1000035,1000002,2000002,-1000001,-2000001,1000004,2000004,        
00864      &-1000003,-2000003,1000006,2000006,-1000005,-2000005,1000012,      
00865      &2000012,-1000011,-2000011,1000014,2000014,-1000013,-2000013,      
00866      &1000016,2000016,-1000015,-2000015,2*1000021,1000039,-1000024,     
00867      &-1000037,1000022,1000023,1000025,1000035,4*1000001,1000002,       
00868      &2000002,1000002,2000002,1000021,1000039,1000024,1000037,1000022,  
00869      &1000023,1000025,1000035,4*1000002,1000001,2000001,1000001,        
00870      &2000001,1000021,1000039,-1000024,-1000037,1000022,1000023,        
00871      &1000025,1000035,4*1000003,1000004,2000004,1000004,2000004,        
00872      &1000021,1000039,1000024,1000037,1000022,1000023,1000025,1000035,  
00873      &4*1000004,1000003,2000003,1000003,2000003,1000021,1000039,        
00874      &-1000024,-1000037,1000022,1000023,1000025,1000035,4*1000005,      
00875      &1000006,2000006,1000006,2000006,1000021,1000039,1000024,1000037,  
00876      &1000022,1000023,1000025,1000035,4*1000006,1000005,2000005,        
00877      &1000005,2000005,1000021,1000039,-1000024,-1000037,1000022,        
00878      &1000023,1000025,1000035,4*1000011,1000012,2000012,1000012,        
00879      &2000012,1000039,-1000024,-1000037,1000022,1000023,1000025/        
00880       DATA (KFDP(I,1),I=2517,4000)/1000035,4*1000013,1000014,2000014,   
00881      &1000014,2000014,1000039,-1000024,-1000037,1000022,1000023,        
00882      &1000025,1000035,4*1000015,1000016,2000016,1000016,2000016,21,22,  
00883      &23,-24,21,22,23,24,22,23,-24,23,24,1447*0/                        
00884       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, 
00885      &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,  
00886      &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, 
00887      &13,11,13,-211,-213,-211,-213,-211,-213,-211,-213,2*-211,-321,     
00888      &-323,-321,2*-323,3*-321,4*-211,-213,-211,-213,-211,-213,-211,     
00889      &-213,-211,-213,3*-211,-213,4*-211,-323,-321,2*-211,2*-321,3*-211, 
00890      &2*15,16,15,16,15,2*17,18,17,2*18,2*17,-1,-2,-3,-4,-5,-6,-7,-8,21, 
00891      &-1,-2,-3,-4,-5,-6,-7,-8,-11,-13,-15,-17,-1,-2,-3,-4,-5,-6,-7,-8,  
00892      &-11,-12,-13,-14,-15,-16,-17,-18,2,4,6,8,2,4,6,8,2,4,6,8,2,4,6,8,  
00893      &12,14,16,18,-1,-2,-3,-4,-5,-6,-7,-8,-11,-13,-15,-17,21,22,2*23,   
00894      &-24,2*1000022,1000023,1000022,1000023,1000025,1000022,1000023,    
00895      &1000025,1000035,-1000024,-1000037,-1000024,-1000037,-1000001,     
00896      &2*-2000001,2000001,-1000002,2*-2000002,2000002,-1000003,          
00897      &2*-2000003,2000003,-1000004,2*-2000004,2000004,-1000005,          
00898      &2*-2000005,2000005,-1000006,2*-2000006,2000006,-1000011,          
00899      &2*-2000011,2000011,-1000012,2*-2000012,2000012,-1000013,          
00900      &2*-2000013,2000013,-1000014,2*-2000014,2000014,-1000015,          
00901      &2*-2000015,2000015,-1000016,2*-2000016,2000016,-1,-2,-3,-4,-5,-6, 
00902      &-7,-8,-11,-12,-13,-14,-15,-16,-17,-18,-24,-37,22,25,2*36,2,4,6,8, 
00903      &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/   
00904       DATA (KFDP(I,2),I= 340, 526)/-7,-8,-11,-13,-15,-17,21,22,2*23,    
00905      &-24,2*25,36,2*1000022,1000023,1000022,1000023,1000025,1000022,    
00906      &1000023,1000025,1000035,-1000024,-1000037,-1000024,-1000037,      
00907      &-1000001,2*-2000001,2000001,-1000002,2*-2000002,2000002,-1000003, 
00908      &2*-2000003,2000003,-1000004,2*-2000004,2000004,-1000005,          
00909      &2*-2000005,2000005,-1000006,2*-2000006,2000006,-1000011,          
00910      &2*-2000011,2000011,-1000012,2*-2000012,2000012,-1000013,          
00911      &2*-2000013,2000013,-1000014,2*-2000014,2000014,-1000015,          
00912      &2*-2000015,2000015,-1000016,2*-2000016,2000016,-1,-2,-3,-4,-5,-6, 
00913      &-7,-8,-11,-13,-15,-17,21,22,2*23,-24,25,2*1000022,1000023,        
00914      &1000022,1000023,1000025,1000022,1000023,1000025,1000035,-1000024, 
00915      &-1000037,-1000024,-1000037,-1000001,2*-2000001,2000001,-1000002,  
00916      &2*-2000002,2000002,-1000003,2*-2000003,2000003,-1000004,          
00917      &2*-2000004,2000004,-1000005,2*-2000005,2000005,-1000006,          
00918      &2*-2000006,2000006,-1000011,2*-2000011,2000011,-1000012,          
00919      &2*-2000012,2000012,-1000013,2*-2000013,2000013,-1000014,          
00920      &2*-2000014,2000014,-1000015,2*-2000015,2000015,-1000016,          
00921      &2*-2000016,2000016,2,4,6,8,12,14,16,18,25,1000024,1000037,        
00922      &1000024,1000037,1000024,1000037,1000024,1000037,2*-1000005,       
00923      &2*-2000005,1000002,1000004,1000012,1000014,2*1000016,-5,-6,21,11/ 
00924       DATA (KFDP(I,2),I= 527, 931)/-3,-4,-5,-6,-7,-8,-13,-15,-17,-3,-4, 
00925      &-5,-6,-11,-13,-15,21,-3,-5,5,12,14,16,-3,-4,-5,-6,-11,-13,-15,21, 
00926      &-24,-52,-24,-52,51,53,51,53,-1,-2,-3,-4,-5,-6,-7,-8,-11,-12,-13,  
00927      &-14,-15,-16,-17,-18,23,51,23,51,22,53,2,4,6,8,2,4,6,8,2,4,6,8,2,  
00928      &4,6,8,12,14,16,18,2*51,2*53,-52,2*-24,-52,-1,-2,-3,-4,-5,-6,-7,   
00929      &-8,-11,-12,-13,-14,-15,-16,-17,-18,-11,-13,-15,-13,2*-15,24,-11,  
00930      &-13,-15,-13,2*-15,63,2,4,6,2,4,6,2,4,6,64,65,66,-82,12,14,-1,-3,  
00931      &11,13,15,1,4,3,4,1,3,22,11,-211,2*22,-13,-11,-211,211,111,211,    
00932      &-321,130,310,22,2*111,-211,11,-11,13,-13,-211,111,22,14,12,111,   
00933      &22,111,3*211,-311,22,211,22,111,-211,211,11,-211,13,22,-211,111,  
00934      &-211,22,111,-11,-211,111,2*-211,-321,130,310,221,111,-211,111,    
00935      &2*0,-211,111,22,-211,111,-211,111,-211,211,-213,113,223,221,14,   
00936      &111,211,111,-11,-13,211,111,22,211,111,211,111,2*211,213,113,223, 
00937      &221,22,-211,111,113,223,22,111,-321,310,211,111,2*-211,221,22,    
00938      &-11,-13,-211,-321,130,310,221,-211,111,11*12,11*14,2*211,2*213,   
00939      &211,20213,2*321,2*323,211,213,211,213,211,213,211,213,211,213,    
00940      &211,213,3*211,213,211,2*321,8*211,2*113,3*211,111,22,211,111,211, 
00941      &111,4*211,8*12,8*14,2*211,2*213,2*111,221,2*113,223,333,20213,    
00942      &211,2*321,323,2*311,313,-211,111,113,2*211,321,2*211,311,321,310, 
00943      &211,-211,4*211,321,4*211,113,2*211,-321,111,22,-211,111,-211,111/ 
00944       DATA (KFDP(I,2),I= 932,1317)/-211,211,-211,211,16,5*12,5*14,      
00945      &3*211,3*213,211,2*111,2*113,2*-311,2*-313,-2112,3*321,323,2*-1,   
00946      &22,111,321,311,321,311,-82,-11,-13,-82,22,-82,6*-11,6*-13,2*-15,  
00947      &211,213,20213,211,213,20213,431,433,431,433,311,313,311,313,311,  
00948      &313,-1,-4,-3,-4,-1,-3,22,-211,111,-211,111,-211,211,-211,211,     
00949      &6*-11,6*-13,2*-15,211,213,20213,211,213,20213,431,433,431,433,    
00950      &321,323,321,323,321,323,-1,-4,-3,-4,-1,-3,22,211,111,211,111,     
00951      &4*211,6*-11,6*-13,2*-15,211,213,20213,211,213,20213,431,433,431,  
00952      &433,221,331,333,221,331,333,221,331,333,-1,-4,-3,-4,-1,-3,22,     
00953      &-321,-311,-321,-311,-15,-3,-1,2*-11,2*-13,2*-15,-1,-4,-3,-4,-3,   
00954      &-4,-1,-4,2*12,2*14,2,3,2,3,2*12,2*14,2,1,22,411,421,411,421,21,   
00955      &-11,-13,-15,-1,-2,-3,-4,2*21,22,21,2*-211,111,22,111,211,22,211,  
00956      &-211,11,2*-211,111,-211,111,22,11,22,111,-211,211,111,211,22,211, 
00957      &111,211,-211,22,11,13,11,-211,2*111,2*22,111,211,-321,-211,111,   
00958      &11,2*-211,7*12,7*14,-321,-323,-311,-313,-311,-313,211,213,211,    
00959      &213,211,213,111,221,331,113,223,111,221,113,223,321,323,321,-211, 
00960      &-213,111,221,331,113,223,333,10221,111,221,331,113,223,211,213,   
00961      &211,213,321,323,321,323,321,323,311,313,311,313,2*-1,-3,-1,2203,  
00962      &3201,3203,2203,2101,2103,12,14,-1,-3,2*111,2*211,12,14,-1,-3,22,  
00963      &111,2*22,111,22,12,14,-1,-3,22,12,14,-1,-3,12,14,-1,-3,12,14,-1/  
00964       DATA (KFDP(I,2),I=1318,1756)/-3,12,14,-1,-3,12,14,-1,-3,12,14,-1, 
00965      &-3,12,14,-1,-3,2*-211,11,13,15,-211,-213,-20213,-431,-433,3*3122, 
00966      &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,      
00967      &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,  
00968      &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,  
00969      &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, 
00970      &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, 
00971      &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, 
00972      &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, 
00973      &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, 
00974      &3,2*111,2*211,-211,111,-321,130,310,-211,111,211,-211,111,-213,   
00975      &113,-211,111,223,211,111,213,113,211,111,223,-211,111,-321,130,   
00976      &310,2*-211,-311,311,-321,321,211,111,211,111,-211,111,-211,111,   
00977      &311,2*321,311,22,2*-82,-211,111,-211,111,211,111,211,111,-321,    
00978      &-311,-321,-311,411,421,411,421,22,2*21,-211,2*211,111,-211,111,   
00979      &2*211,111,-211,211,111,211,-321,2*-311,-321,22,-211,111,211,111,  
00980      &-311,311,-321,321,211,111,-211,111,321,311,22,-82,-211,111,211,   
00981      &111,-321,-311,411,421,22,21,-11,-13,-82,211,111,221,111,4*22,-11, 
00982      &-13,-15,-1,-2,-3,-4,2*21,211,111,3*22,1,2*2,4*1,2*-24,2*-37,1,2,  
00983      &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/  
00984       DATA (KFDP(I,2),I=1757,2220)/4,5,2*6,4*5,2*-24,2*-37,5,6,2*5,4*6, 
00985      &2*24,2*37,6,4,-15,16,11,2*12,4*11,2*-24,2*-37,12,2*11,4*12,2*24,  
00986      &2*37,13,2*14,4*13,2*-24,2*-37,14,2*13,4*14,2*24,2*37,15,2*16,     
00987      &4*15,2*-24,2*-37,16,2*15,4*16,2*24,2*37,21,-1,1,-1,1,-2,2,-2,2,   
00988      &-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,  
00989      &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,   
00990      &35,36,-1,-3,22,23,25,35,36,22,23,11,13,15,12,14,16,1,3,5,2,4,25,  
00991      &35,36,-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-24,24,11,-11,13,-13, 
00992      &15,-15,1,-1,3,-3,-37,37,-37,37,-1,1,-1,1,-2,2,-2,2,-3,3,-3,3,-4,  
00993      &4,-4,4,-5,5,-5,5,-6,6,-6,6,-11,11,-11,11,-12,12,-12,12,-13,13,    
00994      &-13,13,-14,14,-14,14,-15,15,-15,15,-16,16,-16,16,1,3,5,2,4,24,37, 
00995      &24,-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,   
00996      &24,-11,-13,-15,-1,-3,4*37,2*-1,2*2,2*-3,2*4,2*-5,2*6,2*-11,2*12,  
00997      &2*-13,2*14,2*-15,2*16,-1,-3,22,23,25,35,36,22,23,11,13,15,12,14,  
00998      &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, 
00999      &-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-24,24,11,-11,13,-13,15,    
01000      &-15,1,-1,3,-3,-37,37,-37,37,-1,1,-1,1,-2,2,-2,2,-3,3,-3,3,-4,4,   
01001      &-4,4,-5,5,-5,5,-6,6,-6,6,-11,11,-11,11,-12,12,-12,12,-13,13,-13,  
01002      &13,-14,14,-14,14,-15,15,-15,15,-16,16,-16,16,1,3,5,2,4,22,23,25,  
01003      &35,36,22,23,11,13,15,12,14,16,1,3,5,2,4,25,35,36,22,23,11,13,15/  
01004       DATA (KFDP(I,2),I=2221,4000)/12,14,16,1,3,5,2,4,25,35,36,22,23,   
01005      &11,13,15,12,14,16,1,3,5,2,4,25,35,36,-24,24,11,-11,13,-13,15,-15, 
01006      &1,-1,3,-3,-24,24,11,-11,13,-13,15,-15,1,-1,3,-3,-37,37,-37,37,-1, 
01007      &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,  
01008      &-11,11,-12,12,-12,12,-13,13,-13,13,-14,14,-14,14,-15,15,-15,15,   
01009      &-16,16,-16,16,1,3,5,2,4,24,37,23,11,13,15,12,14,16,1,3,5,2,4,25,  
01010      &35,36,24,-11,-13,-15,-1,-3,24,-11,-13,-15,-1,-3,24,-11,-13,-15,   
01011      &-1,-3,24,-11,-13,-15,-1,-3,4*37,2*-1,2*2,2*-3,2*4,2*-5,2*6,2*-11, 
01012      &2*12,2*-13,2*14,2*-15,2*16,-1,-3,1,2*2,4*1,23,25,35,36,2*-24,     
01013      &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,  
01014      &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,  
01015      &35,36,2*-24,2*-37,5,6,2*5,4*6,23,25,35,36,2*24,2*37,6,11,2*12,    
01016      &4*11,23,25,35,36,2*-24,2*-37,13,2*14,4*13,23,25,35,36,2*-24,      
01017      &2*-37,15,2*16,4*15,23,25,35,36,2*-24,2*-37,3*1,4*2,1,2*11,2*12,   
01018      &11,1447*0/                                                        
01019       DATA (KFDP(I,3),I=   1,1134)/81*0,14,6*0,2*16,2*0,6*111,310,130,  
01020      &2*0,3*111,310,130,321,113,211,223,221,2*113,2*211,2*223,2*221,    
01021      &2*113,221,2*113,2*213,-213,113,2*111,310,130,310,130,2*310,130,   
01022      &407*0,-5,112*0,4*3,4*4,1,4,3,2*2,0,-11,8*0,-211,5*0,2*111,211,    
01023      &-211,211,-211,10*0,111,4*0,2*111,-211,-11,11,-13,22,111,3*0,22,   
01024      &3*0,111,211,4*0,111,11*0,111,-211,6*0,-211,3*111,7*0,111,-211,    
01025      &5*0,2*221,3*0,111,5*0,111,11*0,-311,-313,-311,-321,-313,-323,111, 
01026      &221,331,113,223,-311,-313,-311,-321,-313,-323,111,221,331,113,    
01027      &223,22*0,111,113,2*211,-211,-311,211,111,3*211,-211,7*211,7*0,    
01028      &111,-211,111,-211,-321,-323,-311,-321,-313,-323,-211,-213,-321,   
01029      &-323,-311,-321,-313,-323,-211,-213,22*0,111,113,-311,2*-211,211,  
01030      &-211,310,-211,2*111,211,2*-211,-321,-211,2*211,-211,111,-211,     
01031      &2*211,6*0,111,-211,111,-211,0,221,331,333,321,311,221,331,333,    
01032      &321,311,20*0,3,13*0,-411,-413,-10413,-10411,-20413,-415,-411,     
01033      &-413,-10413,-10411,-20413,-415,-411,-413,16*0,-4,-1,-4,-3,2*-2,   
01034      &5*0,111,-211,111,-211,-421,-423,-10423,-10421,-20423,-425,-421,   
01035      &-423,-10423,-10421,-20423,-425,-421,-423,16*0,-4,-1,-4,-3,2*-2,   
01036      &5*0,111,-211,111,-211,-431,-433,-10433,-10431,-20433,-435,-431,   
01037      &-433,-10433,-10431,-20433,-435,-431,-433,19*0,-4,-1,-4,-3,2*-2,   
01038      &8*0,441,443,441,443,441,443,-4,-1,-4,-3,-4,-3,-4,-1,531,533,531/  
01039       DATA (KFDP(I,3),I=1135,2233)/533,3,2,3,2,511,513,511,513,1,2,     
01040      &13*0,2*21,11*0,2112,6*0,2212,12*0,2*3122,3212,10*0,3322,2*0,3122, 
01041      &3212,3214,2112,2114,2212,2112,3122,3212,3214,2112,2114,2212,2112, 
01042      &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, 
01043      &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,  
01044      &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,    
01045      &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,  
01046      &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,    
01047      &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,  
01048      &3,2*2,4*4,1,4,3,2*2,31*0,211,111,45*0,-211,2*111,-211,3*111,-211, 
01049      &111,211,30*0,-211,111,13*0,2*21,-211,111,76*0,2*5,91*0,-1,-3,-5,  
01050      &-2,-4,-6,-1,-3,-5,-2,-4,-6,-1,-3,-5,-2,-4,-6,-1,-3,-5,-2,-4,-6,   
01051      &-2,2,-4,4,-6,6,-2,2,-4,4,-6,6,5*0,11,12,7*0,-11,-13,-15,-12,-14,  
01052      &-16,-1,-3,-5,-2,-4,5*0,-12,12,-14,14,-16,16,-2,2,-4,4,2*0,-12,12, 
01053      &-14,14,-16,16,-2,2,-4,4,52*0,-1,-3,-5,-2,-4,3*0,12,14,16,2,4,0,   
01054      &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,  
01055      &-15,-12,-14,-16,-1,-3,-5,-2,-4,5*0,-11,-13,-15,-12,-14,-16,-1,-3, 
01056      &-5,-2,-4,5*0,-12,12,-14,14,-16,16,-2,2,-4,4,2*0,-12,12,-14,14,    
01057      &-16,16,-2,2,-4,4,52*0,-1,-3,-5,-2,-4,7*0,-11,-13,-15,-12,-14,-16, 
01058      &-1,-3,-5,-2,-4,5*0,-11,-13,-15,-12,-14,-16,-1,-3,-5,-2,-4,5*0/    
01059       DATA (KFDP(I,3),I=2234,4000)/-11,-13,-15,-12,-14,-16,-1,-3,-5,-2, 
01060      &-4,5*0,-12,12,-14,14,-16,16,-2,2,-4,4,2*0,-12,12,-14,14,-16,16,   
01061      &-2,2,-4,4,52*0,-1,-3,-5,-2,-4,3*0,-11,-13,-15,-12,-14,-16,-1,-3,  
01062      &-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,  
01063      &16,2,4,28*0,2,4,1601*0/                                           
01064       DATA (KFDP(I,4),I=   1,4000)/94*0,4*111,6*0,111,2*0,-211,0,-211,  
01065      &3*0,111,2*-211,0,111,0,2*111,113,221,2*111,-213,-211,211,113,     
01066      &6*111,310,2*130,520*0,13*81,41*0,-11,10*0,111,-211,4*0,111,62*0,  
01067      &111,211,111,211,7*0,111,211,111,211,35*0,2*-211,2*111,211,111,    
01068      &-211,2*211,2*-211,13*0,-211,111,-211,111,4*0,-211,111,-211,111,   
01069      &34*0,111,-211,3*111,3*-211,2*111,3*-211,14*0,-321,-311,3*0,-321,  
01070      &-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,    
01071      &2*-5,67*0,-211,111,5*0,-211,111,52*0,2101,2103,2*2101,6*0,4*81,   
01072      &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, 
01073      &162*81,31*0,-211,111,2398*0/                                      
01074       DATA (KFDP(I,5),I=   1,4000)/96*0,2*111,17*0,111,7*0,2*111,0,     
01075      &3*111,0,111,715*0,-211,2*111,-211,111,-211,111,65*0,111,-211,     
01076      &3*111,-211,111,3075*0/                                            
01077        
01078 C...PYDAT4, with particle names (character strings). 
01079       DATA (CHAF(I,1),I=   1, 185)/'d','u','s','c','b','t','b''','t''', 
01080      &2*' ','e-','nu_e','mu-','nu_mu','tau-','nu_tau','tau''-',         
01081      &'nu''_tau',2*' ','g','gamma','Z0','W+','h0',2*' ','reggeon',      
01082      &'pomeron',2*' ','Z''0','Z"0','W''+','H0','A0','H+','eta_tech0',   
01083      &'LQ_ue','R0',10*' ','pi_tech0','pi_tech+','pi''_tech0',           
01084      &'rho_tech0','rho_tech+','omega_tech',4*' ','H_L++','H_R++',       
01085      &'W_R+','nu_Re','nu_Rmu','nu_Rtau',14*' ','specflav','rndmflav',   
01086      &'phasespa','c-hadron','b-hadron',5*' ','cluster','string',        
01087      &'indep.','CMshower','SPHEaxis','THRUaxis','CLUSjet','CELLjet',    
01088      &'table',' ','rho_diff0','pi0','rho0','a_20','K_L0','pi_diffr+',   
01089      &'pi+','rho+','a_2+','omega_di','eta','omega','f_2','K_S0','K0',   
01090      &'K*0','K*_20','K+','K*+','K*_2+','phi_diff','eta''','phi',        
01091      &'f''_2','D+','D*+','D*_2+','D0','D*0','D*_20','D_s+','D*_s+',     
01092      &'D*_2s+','J/psi_di','eta_c','J/psi','chi_2c','B0','B*0','B*_20',  
01093      &'B+','B*+','B*_2+','B_s0','B*_s0','B*_2s0','B_c+','B*_c+',        
01094      &'B*_2c+','eta_b','Upsilon','chi_2b','dd_1','Delta-','ud_0',       
01095      &'ud_1','n_diffr0','n0','Delta0','uu_1','p_diffr+','p+','Delta+',  
01096      &'Delta++','sd_0','sd_1','Sigma-','Sigma*-','Lambda0','su_0',      
01097      &'su_1','Sigma0','Sigma*0','Sigma+','Sigma*+','ss_1','Xi-','Xi*-', 
01098      &'Xi0','Xi*0','Omega-','cd_0','cd_1','Sigma_c0','Sigma*_c0'/       
01099       DATA (CHAF(I,1),I= 186, 315)/'Lambda_c+','Xi_c0','cu_0','cu_1',   
01100      &'Sigma_c+','Sigma*_c+','Sigma_c++','Sigma*_c++','Xi_c+','cs_0',   
01101      &'cs_1','Xi''_c0','Xi*_c0','Xi''_c+','Xi*_c+','Omega_c0',          
01102      &'Omega*_c0','cc_1','Xi_cc+','Xi*_cc+','Xi_cc++','Xi*_cc++',       
01103      &'Omega_cc+','Omega*_cc+','Omega*_ccc++','bd_0','bd_1','Sigma_b-', 
01104      &'Sigma*_b-','Lambda_b0','Xi_b-','Xi_bc0','bu_0','bu_1',           
01105      &'Sigma_b0','Sigma*_b0','Sigma_b+','Sigma*_b+','Xi_b0','Xi_bc+',   
01106      &'bs_0','bs_1','Xi''_b-','Xi*_b-','Xi''_b0','Xi*_b0','Omega_b-',   
01107      &'Omega*_b-','Omega_bc0','bc_0','bc_1','Xi''_bc0','Xi*_bc0',       
01108      &'Xi''_bc+','Xi*_bc+','Omega''_bc0','Omega*_bc0','Omega_bcc+',     
01109      &'Omega*_bcc+','bb_1','Xi_bb-','Xi*_bb-','Xi_bb0','Xi*_bb0',       
01110      &'Omega_bb-','Omega*_bb-','Omega_bbc0','Omega*_bbc0',              
01111      &'Omega*_bbb-','a_00','b_10','a_0+','b_1+','f_0','h_1','K*_00',    
01112      &'K_10','K*_0+','K_1+','f''_0','h''_1','D*_0+','D_1+','D*_00',     
01113      &'D_10','D*_0s+','D_1s+','chi_0c','h_1c','B*_00','B_10','B*_0+',   
01114      &'B_1+','B*_0s0','B_1s0','B*_0c+','B_1c+','chi_0b','h_1b','a_10',  
01115      &'a_1+','f_1','K*_10','K*_1+','f''_1','D*_1+','D*_10','D*_1s+',    
01116      &'chi_1c','B*_10','B*_1+','B*_1s0','B*_1c+','chi_1b','psi''',      
01117      &'Upsilon''','~d_L','~u_L','~s_L','~c_L','~b_1','~t_1','~e_L-',    
01118      &'~nu_eL','~mu_L-','~nu_muL','~tau_1-','~nu_tauL','~g','~chi_10'/  
01119       DATA (CHAF(I,1),I= 316, 500)/'~chi_20','~chi_1+','~chi_30',       
01120      &'~chi_40','~chi_2+','~gravitino','~d_R','~u_R','~s_R','~c_R',     
01121      &'~b_2','~t_2','~e_R-','~nu_eR','~mu_R-','~nu_muR','~tau_2-',      
01122      &'~nu_tauR','d*','u*','e*-','nu*_e0',163*' '/                      
01123       DATA (CHAF(I,2),I=   1, 198)/'dbar','ubar','sbar','cbar','bbar',  
01124      &'tbar','b''bar','t''bar',2*' ','e+','nu_ebar','mu+','nu_mubar',   
01125      &'tau+','nu_taubar','tau''+','nu''_taubar',5*' ','W-',9*' ',       
01126      &'W''-',2*' ','H-',' ','LQ_uebar','Rbar0',11*' ','pi_tech-',2*' ', 
01127      &'rho_tech-',5*' ','H_L--','H_R--','W_R-','nu_Rebar','nu_Rmubar',  
01128      &'nu_Rtaubar',15*' ','rndmflavbar',' ','c-hadronbar',              
01129      &'b-hadronbar',20*' ','pi_diffr-','pi-','rho-','a_2-',5*' ',       
01130      &'Kbar0','K*bar0','K*_2bar0','K-','K*-','K*_2-',4*' ','D-','D*-',  
01131      &'D*_2-','Dbar0','D*bar0','D*_2bar0','D_s-','D*_s-','D*_2s-',      
01132      &4*' ','Bbar0','B*bar0','B*_2bar0','B-','B*-','B*_2-','B_sbar0',   
01133      &'B*_sbar0','B*_2sbar0','B_c-','B*_c-','B*_2c-',3*' ','dd_1bar',   
01134      &'Deltabar+','ud_0bar','ud_1bar','n_diffrbar0','nbar0',            
01135      &'Deltabar0','uu_1bar','p_diffrbar-','pbar-','Deltabar-',          
01136      &'Deltabar--','sd_0bar','sd_1bar','Sigmabar+','Sigma*bar+',        
01137      &'Lambdabar0','su_0bar','su_1bar','Sigmabar0','Sigma*bar0',        
01138      &'Sigmabar-','Sigma*bar-','ss_1bar','Xibar+','Xi*bar+','Xibar0',   
01139      &'Xi*bar0','Omegabar+','cd_0bar','cd_1bar','Sigma_cbar0',          
01140      &'Sigma*_cbar0','Lambda_cbar-','Xi_cbar0','cu_0bar','cu_1bar',     
01141      &'Sigma_cbar-','Sigma*_cbar-','Sigma_cbar--','Sigma*_cbar--',      
01142      &'Xi_cbar-','cs_0bar','cs_1bar','Xi''_cbar0','Xi*_cbar0'/          
01143       DATA (CHAF(I,2),I= 199, 308)/'Xi''_cbar-','Xi*_cbar-',            
01144      &'Omega_cbar0','Omega*_cbar0','cc_1bar','Xi_ccbar-','Xi*_ccbar-',  
01145      &'Xi_ccbar--','Xi*_ccbar--','Omega_ccbar-','Omega*_ccbar-',        
01146      &'Omega*_cccbar-','bd_0bar','bd_1bar','Sigma_bbar+',               
01147      &'Sigma*_bbar+','Lambda_bbar0','Xi_bbar+','Xi_bcbar0','bu_0bar',   
01148      &'bu_1bar','Sigma_bbar0','Sigma*_bbar0','Sigma_bbar-',             
01149      &'Sigma*_bbar-','Xi_bbar0','Xi_bcbar-','bs_0bar','bs_1bar',        
01150      &'Xi''_bbar+','Xi*_bbar+','Xi''_bbar0','Xi*_bbar0','Omega_bbar+',  
01151      &'Omega*_bbar+','Omega_bcbar0','bc_0bar','bc_1bar','Xi''_bcbar0',  
01152      &'Xi*_bcbar0','Xi''_bcbar-','Xi*_bcbar-','Omega''_bcba',           
01153      &'Omega*_bcbar0','Omega_bccbar-','Omega*_bccbar-','bb_1bar',       
01154      &'Xi_bbbar+','Xi*_bbbar+','Xi_bbbar0','Xi*_bbbar0','Omega_bbbar+', 
01155      &'Omega*_bbbar+','Omega_bbcbar0','Omega*_bbcbar0',                 
01156      &'Omega*_bbbbar+',2*' ','a_0-','b_1-',2*' ','K*_0bar0','K_1bar0',  
01157      &'K*_0-','K_1-',2*' ','D*_0-','D_1-','D*_0bar0','D_1bar0',         
01158      &'D*_0s-','D_1s-',2*' ','B*_0bar0','B_1bar0','B*_0-','B_1-',       
01159      &'B*_0sbar0','B_1sbar0','B*_0c-','B_1c-',3*' ','a_1-',' ',         
01160      &'K*_1bar0','K*_1-',' ','D*_1-','D*_1bar0','D*_1s-',' ',           
01161      &'B*_1bar0','B*_1-','B*_1sbar0','B*_1c-',3*' ','~d_Lbar',          
01162      &'~u_Lbar','~s_Lbar','~c_Lbar','~b_1bar','~t_1bar','~e_L+'/        
01163       DATA (CHAF(I,2),I= 309, 500)/'~nu_eLbar','~mu_L+','~nu_muLbar',   
01164      &'~tau_1+','~nu_tauLbar',3*' ','~chi_1-',2*' ','~chi_2-',' ',      
01165      &'~d_Rbar','~u_Rbar','~s_Rbar','~c_Rbar','~b_2bar','~t_2bar',      
01166      &'~e_R+','~nu_eRbar','~mu_R+','~nu_muRbar','~tau_2+',              
01167      &'~nu_tauRbar','d*bar','u*bar','e*bar+','nu*_ebar0',163*' '/       
01168        
01169 C...PYDATR, with initial values for the random number generator.
01170       DATA MRPY/19780503,0,0,97,33,0/
01171  
01172 C...Default values for allowed processes and kinematics constraints.
01173       DATA MSEL/1/
01174       DATA MSUB/500*0/
01175       DATA ((KFIN(I,J),J=-40,40),I=1,2)/16*0,4*1,4*0,6*1,5*0,5*1,0,
01176      &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,
01177      &6*1,4*0,4*1,16*0/
01178       DATA CKIN/
01179      &  2.0D0, -1.0D0,  0.0D0, -1.0D0,  1.0D0,
01180      &  1.0D0,  -10D0,   10D0,  -40D0,   40D0,
01181      1  -40D0,   40D0,  -40D0,   40D0,  -40D0,
01182      1   40D0, -1.0D0,  1.0D0, -1.0D0,  1.0D0,
01183      2  0.0D0,  1.0D0,  0.0D0,  1.0D0, -1.0D0,
01184      2  1.0D0, -1.0D0,  1.0D0,    0D0,    0D0,
01185      3  2.0D0, -1.0D0,    0D0,    0D0,  0.0D0,
01186      3 -1.0D0,  0.0D0, -1.0D0,  4.0D0, -1.0D0,
01187      4 12.0D0, -1.0D0, 12.0D0, -1.0D0, 12.0D0,
01188      4 -1.0D0, 12.0D0, -1.0D0,    0D0,    0D0,
01189      5  0.0D0, -1.0D0,  0.0D0, -1.0D0,  0.0D0,
01190      5 -1.0D0,    0D0,    0D0,    0D0,    0D0,
01191      6 0.0001D0, 0.99D0, 0.0001D0, 0.99D0,    0D0,
01192      6   -1D0,    0D0,   -1D0,    0D0,   -1D0,
01193      7    0D0,   -1D0, 0.0001D0, 0.99D0, 0.0001D0,
01194      7 0.99D0,    2D0,   -1D0,    0D0,    0D0,
01195      8  120*0D0/
01196  
01197 C...Default values for main switches and parameters. Reset information.
01198       DATA (MSTP(I),I=1,100)/
01199      &  3,    1,    2,    0,    0,    0,    0,    0,    0,    0,
01200      1  1,    0,    1,   30,    0,    1,    4,    3,    4,    3,
01201      2  1,    0,    1,    0,    0,    0,    0,    0,    0,    1,
01202      3  1,    8,    0,    1,    0,    2,    1,    5,    2,    0,
01203      4  1,    1,    3,    7,    3,    1,    1,    0,    1,    0,
01204      5  4,    1,    3,    1,    5,    1,    1,    5,    1,    7,
01205      6  1,    3,    2,    2,    1,    5,    2,    1,    0,    0,
01206      7  1,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01207      8  1,    1,  100,    0,    0,    2,    0,    0,    0,    0,
01208      9  1,    3,    1,    3,    0,    0,    0,    0,    0,    0/
01209       DATA (MSTP(I),I=101,200)/
01210      &  3,    1,    0,    0,    0,    0,    0,    0,    0,    0,
01211      1  1,    1,    1,    0,    0,    0,    0,    0,    0,    0,
01212      2  0,    1,    2,    1,    1,   50,    0,    0,   10,    0,
01213      3  0,    4,    0,    1,    0,    0,    0,    0,    0,    0,
01214      4  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01215      5  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01216      6  0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01217      7  0,    2,    0,    0,    0,    0,    0,    0,    0,    0,
01218      8  6,  152, 2000,   08,   17,    0,    0,    0,    0,    0,
01219      9  0,    0,    0,    0,    0,    0,    0,    0,    0,    0/
01220       DATA (PARP(I),I=1,100)/
01221      &  0.25D0,  10D0, 8*0D0,
01222      1  0D0, 0D0, 1.0D0, 0.01D0, 0.5D0, 1.0D0, 1.0D0, 0.4D0, 2*0D0,
01223      2  10*0D0,
01224      3  1.5D0,2.0D0,0.075D0,1.0D0,0.2D0,0D0,2.0D0,0.70D0,0.006D0,0D0,
01225      4  0.02D0,2.0D0,0.10D0,1000D0,2054D0, 123D0, 246D0, 50D0, 2*0D0,
01226      5  10*0D0,
01227      6  0.25D0, 1.0D0,0.25D0, 1.0D0, 2.0D0,1D-3, 1.0D0,1D-3,2*0D0,
01228      7  4.0D0, 0.25D0, 8*0D0,
01229      8  1.90D0, 2.10D0, 0.5D0, 0.2D0, 0.33D0, 
01230      8  0.66D0, 0.7D0, 0.5D0, 1000D0, 0.16D0,
01231      9  1.0D0,0.40D0,5.0D0,1.0D0,0D0,3.0D0,1.0D0,0.75D0,1.0D0,5.0D0/
01232       DATA (PARP(I),I=101,200)/
01233      &  0.5D0, 0.28D0,  1.0D0, 0.8D0, 6*0D0,
01234      1  2.0D0, 3*0D0, 1.5D0, 0.5D0, 0.6D0, 2.5D0, 2.0D0, 1.0D0,
01235      2  1.0D0,  0.4D0, 8*0D0,
01236      3  0.01D0, 8*0D0, 0D0,
01237      4  0.33333D0, 82D0, 1.33333D0, 4D0, 1D0, 
01238      4  1D0,  .0182D0, 1D0, 0D0, 1.33333D0,
01239      5  0D0,   0D0,   0D0,   0D0, 6*0D0,
01240      6  2.20D0, 23.6D0, 18.4D0, 11.5D0, 0.5D0, 0D0, 0D0, 0D0, 2*0D0,
01241      7  0D0,   0D0,   0D0,  1.0D0, 6*0D0,
01242      8  0.1D0, 0.01D0, 0.01D0, 0.01D0, 0.1D0, 0.01D0, 0.01D0, 0.01D0,
01243      8  0.3D0, 0.64D0,    
01244      9  0.64D0, 5.0D0, 8*0D0/
01245       DATA MSTI/200*0/
01246       DATA PARI/200*0D0/
01247       DATA MINT/400*0/
01248       DATA VINT/400*0D0/
01249  
01250 C...Constants for the generation of the various processes.
01251       DATA (ISET(I),I=1,100)/
01252      &  1,    1,    1,   -1,    3,   -1,   -1,    3,   -2,    2,
01253      1  2,    2,    2,    2,    2,    2,   -1,    2,    2,    2,
01254      2 -1,    2,    2,    2,    2,    2,   -1,    2,    2,    2,
01255      3  2,    2,    2,    2,    2,    2,   -1,   -1,   -1,   -1,
01256      4 -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
01257      5 -1,   -1,    2,    2,   -1,   -1,   -1,    2,   -1,   -1,
01258      6 -1,   -1,   -1,   -1,   -1,   -1,   -1,    2,    2,    2,
01259      7  4,    4,    4,   -1,   -1,    4,    4,   -1,   -1,    2,
01260      8  2,    2,    2,    2,    2,    2,    2,    2,    2,   -2,
01261      9  0,    0,    0,    0,    0,    9,   -2,   -2,    8,   -2/
01262       DATA (ISET(I),I=101,200)/
01263      & -1,    1,    1,    1,    1,    2,    2,    2,   -2,    2,
01264      1  2,    2,    2,    2,    2,   -1,   -1,   -1,   -2,   -2,
01265      2  5,    5,    5,    5,   -2,   -2,   -2,   -2,   -2,   -2,
01266      3  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
01267      4  1,    1,    1,    1,    1,    1,    1,    1,    1,   -2,
01268      5  1,    1,    1,   -2,   -2,    1,    1,    1,   -2,   -2,
01269      6  2,    2,    2,    2,    2,    2,    2,    2,    2,   -2,
01270      7  2,    2,    5,    5,   -2,    2,    2,    5,    5,   -2,
01271      8  5,    5,   -2,   -2,   -2,    5,    5,   -2,   -2,   -2,
01272      9  1,    1,    1,    2,    2,   -2,   -2,   -2,   -2,   -2/
01273       DATA (ISET(I),I=201,300)/
01274      &  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
01275      1  2,    2,    2,    2,   -2,    2,    2,    2,    2,    2,
01276      2  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
01277      3  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
01278      4  2,    2,    2,    2,   -1,    2,    2,    2,    2,    2,
01279      5  2,    2,    2,    2,   -1,    2,   -1,    2,    2,   -2,
01280      6  2,    2,    2,    2,    2,   -1,   -1,   -1,   -1,   -1,
01281      7  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
01282      8  2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
01283      9  2,    2,    2,    2,    2,    2,    2,    2,    2,    2/
01284       DATA (ISET(I),I=301,500)/
01285      &  2,   39*-2,
01286      4  1,    1,    2,    2,    2,    2,    2,    2,    2,    2,
01287      5  5,    5,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
01288      6  2,    2,    2,    2,    2,    2,    2,    2,   -1,    2,
01289      7  2,    2,    2,    2,    2,    2,    2,   -1,   -1,   -1,
01290      8  120*-2/
01291       DATA ((KFPR(I,J),J=1,2),I=1,50)/
01292      &  23,    0,   24,    0,   25,    0,   24,    0,   25,    0,
01293      &  24,    0,   23,    0,   25,    0,    0,    0,    0,    0,
01294      1   0,    0,    0,    0,   21,   21,   21,   22,   21,   23,
01295      1  21,   24,   21,   25,   22,   22,   22,   23,   22,   24,
01296      2  22,   25,   23,   23,   23,   24,   23,   25,   24,   24,
01297      2  24,   25,   25,   25,    0,   21,    0,   22,    0,   23,
01298      3   0,   24,    0,   25,    0,   21,    0,   22,    0,   23,
01299      3   0,   24,    0,   25,    0,   21,    0,   22,    0,   23,
01300      4   0,   24,    0,   25,    0,   21,    0,   22,    0,   23,
01301      4   0,   24,    0,   25,    0,   21,    0,   22,    0,   23/
01302       DATA ((KFPR(I,J),J=1,2),I=51,100)/
01303      5   0,   24,    0,   25,    0,    0,    0,    0,    0,    0,
01304      5   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01305      6   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01306      6   0,    0,    0,    0,   21,   21,   24,   24,   23,   24,
01307      7  23,   23,   24,   24,   23,   24,   23,   25,   22,   22,
01308      7  23,   23,   24,   24,   24,   25,   25,   25,    0,  211,
01309      8   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01310      8 443,   21,10441,   21,20443,   21,  445,   21,    0,    0,
01311      9   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01312      9   0,    0,    0,    0,    0,    0,    0,    0,    0,    0/
01313       DATA ((KFPR(I,J),J=1,2),I=101,150)/
01314      &  23,    0,   25,    0,   25,    0,10441,    0,  445,    0,
01315      & 443,   22,  443,   21,  443,   22,    0,    0,   22,   25,
01316      1  21,   25,    0,   25,   21,   25,   22,   22,   21,   22,
01317      1  22,   23,   23,   23,   24,   24,    0,    0,    0,    0,
01318      2  25,    6,   25,    6,   25,    0,   25,    0,    0,    0,
01319      2   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01320      3   0,   21,    0,   21,    0,   22,    0,   22,    0,    0,
01321      3   0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
01322      4  32,    0,   34,    0,   37,    0,   40,    0,   39,    0,
01323      4 4000011, 0, 4000001, 0, 4000002, 0,  38,    0,    0,    0/
01324       DATA ((KFPR(I,J),J=1,2),I=151,200)/
01325      5  35,    0,   35,    0,   35,    0,    0,    0,    0,    0,
01326      5  36,    0,   36,    0,   36,    0,    0,    0,    0,    0,
01327      6   6,   37,   39,    0,   39,   39,   39,   39,   11,    0,
01328      6  11,    0, 0, 4000001, 0, 4000002, 0, 4000011,    0,    0,
01329      7  23,   35,   24,   35,   35,    0,   35,    0,    0,    0,
01330      7  23,   36,   24,   36,   36,    0,   36,    0,    0,    0,
01331      8  35,    6,   35,    6,    0,    0,    0,    0,    0,    0,
01332      8  36,    6,   36,    6,    0,    0,    0,    0,    0,    0,
01333      9  54,    0,   55,    0,   56,    0,   11,    0,   11,    0,
01334      9   0,    0,    0,    0,    0,    0,    0,    0,    0,    0/
01335       DATA ((KFPR(I,J),J=1,2),I=201,250)/
01336      &  1000011,   1000011,   2000011,   2000011,   1000011,
01337      &  2000011,   1000013,   1000013,   2000013,   2000013,
01338      &  1000013,   2000013,   1000015,   1000015,   2000015,
01339      &  2000015,   1000015,   2000015,   1000011,   1000012,
01340      1  1000015,   1000016,   2000015,   1000016,   1000012,
01341      1  1000012,   1000016,   1000016,         0,         0,
01342      1  1000022,   1000022,   1000023,   1000023,   1000025,
01343      1  1000025,   1000035,   1000035,   1000022,   1000023,
01344      2  1000022,   1000025,   1000022,   1000035,   1000023,
01345      2  1000025,   1000023,   1000035,   1000025,   1000035,
01346      2  1000024,   1000024,   1000037,   1000037,   1000024,
01347      2  1000037,   1000022,   1000024,   1000023,   1000024,
01348      3  1000025,   1000024,   1000035,   1000024,   1000022,
01349      3  1000037,   1000023,   1000037,   1000025,   1000037,
01350      3  1000035,   1000037,   1000021,   1000022,   1000021,
01351      3  1000023,   1000021,   1000025,   1000021,   1000035,
01352      4  1000021,   1000024,   1000021,   1000037,   1000021,
01353      4  1000021,   1000021,   1000021,         0,         0,
01354      4  1000002,   1000022,   2000002,   1000022,   1000002,
01355      4  1000023,   2000002,   1000023,   1000002,   1000025/
01356       DATA ((KFPR(I,J),J=1,2),I=251,300)/
01357      5  2000002,   1000025,   1000002,   1000035,   2000002,
01358      5  1000035,   1000001,   1000024,   2000005,   1000024,
01359      5  1000001,   1000037,   2000005,   1000037,   1000002,
01360      5  1000021,   2000002,   1000021,         0,         0,
01361      6  1000006,   1000006,   2000006,   2000006,   1000006,
01362      6  2000006,   1000006,   1000006,   2000006,   2000006,
01363      6        0,         0,         0,         0,         0,
01364      6        0,         0,         0,         0,         0,
01365      7  1000002,   1000002,   2000002,   2000002,   1000002,
01366      7  2000002,   1000002,   1000002,   2000002,   2000002,
01367      7  1000002,   2000002,   1000002,   1000002,   2000002,
01368      7  2000002,   1000002,   1000002,   2000002,   2000002,
01369      8  1000005,   1000002,   2000005,   2000002,   1000005,
01370      8  2000002,   1000005,   1000002,   2000005,   2000002,
01371      8  1000005,   2000002,   1000005,   1000005,   2000005,
01372      8  2000005,   1000005,   1000005,   2000005,   2000005,
01373      9  1000005,   1000005,   2000005,   2000005,   1000005,
01374      9  2000005,   1000005,   1000021,   2000005,   1000021,
01375      9  1000005,   2000005,        37,        25,        37,
01376      9       35,        36,        25,        36,        35/
01377       DATA ((KFPR(I,J),J=1,2),I=301,500)/
01378      &       37,        37,      78*0,
01379      4       61,         0,        62,         0,        61,
01380      4       11,        62,        11,        61,        13,
01381      4       62,        13,        61,        15,        62,  
01382      4       15,        61,        61,        62,        62,
01383      5       61,         0,        62,         0,         0,
01384      5        0,         0,         0,         0,         0,
01385      5        0,         0,         0,         0,         0,
01386      5        0,         0,         0,         0,         0,
01387      6       24,        24,        24,        52,        52,        
01388      6       52,        22,        51,        22,        53,        
01389      6       23,        51,        23,        53,        24,        
01390      6       52,         0,         0,        24,        23,        
01391      7       24,        51,        52,        23,        52,        
01392      7       51,        22,        52,        23,        52,        
01393      7       24,        51,        24,        53,         0,         
01394      7        0,         0,         0,         0,         0,
01395      8    240*0/      
01396       DATA COEF/10000*0D0/
01397       DATA (((ICOL(I,J,K),K=1,2),J=1,4),I=1,40)/
01398      &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,
01399      &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,
01400      &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,
01401      &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,
01402      &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,
01403      &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,
01404      &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,
01405      &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,
01406      &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,
01407      &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/
01408  
01409 C...Treatment of resonances.
01410       DATA (MWID(I)  ,I=   1, 500)/5*0,3*1,8*0,1,5*0,3*1,6*0,1,0,7*1,   
01411      &10*0,6*1,4*0,3*1,238*0,19*2,0,7*2,0,2,0,2,0,4*1,163*0/            
01412  
01413 C...Character constants: name of processes.
01414       DATA PROC(0)/                    'All included subprocesses   '/
01415       DATA (PROC(I),I=1,20)/
01416      &'f + fbar -> gamma*/Z0       ',  'f + fbar'' -> W+/-           ',
01417      &'f + fbar -> h0              ',  'gamma + W+/- -> W+/-        ',
01418      &'Z0 + Z0 -> h0               ',  'Z0 + W+/- -> W+/-           ',
01419      &'                            ',  'W+ + W- -> h0               ',
01420      &'                            ',  'f + f'' -> f + f'' (QFD)      ',
01421      1'f + f'' -> f + f'' (QCD)      ','f + fbar -> f'' + fbar''      ',
01422      1'f + fbar -> g + g           ',  'f + fbar -> g + gamma       ',
01423      1'f + fbar -> g + Z0          ',  'f + fbar'' -> g + W+/-       ',
01424      1'f + fbar -> g + h0          ',  'f + fbar -> gamma + gamma   ',
01425      1'f + fbar -> gamma + Z0      ',  'f + fbar'' -> gamma + W+/-   '/
01426       DATA (PROC(I),I=21,40)/
01427      2'f + fbar -> gamma + h0      ',  'f + fbar -> Z0 + Z0         ',
01428      2'f + fbar'' -> Z0 + W+/-      ', 'f + fbar -> Z0 + h0         ',
01429      2'f + fbar -> W+ + W-         ',  'f + fbar'' -> W+/- + h0      ',
01430      2'f + fbar -> h0 + h0         ',  'f + g -> f + g              ',
01431      2'f + g -> f + gamma          ',  'f + g -> f + Z0             ',
01432      3'f + g -> f'' + W+/-          ', 'f + g -> f + h0             ',
01433      3'f + gamma -> f + g          ',  'f + gamma -> f + gamma      ',
01434      3'f + gamma -> f + Z0         ',  'f + gamma -> f'' + W+/-      ',
01435      3'f + gamma -> f + h0         ',  'f + Z0 -> f + g             ',
01436      3'f + Z0 -> f + gamma         ',  'f + Z0 -> f + Z0            '/
01437       DATA (PROC(I),I=41,60)/
01438      4'f + Z0 -> f'' + W+/-         ', 'f + Z0 -> f + h0            ',
01439      4'f + W+/- -> f'' + g          ', 'f + W+/- -> f'' + gamma      ',
01440      4'f + W+/- -> f'' + Z0         ', 'f + W+/- -> f'' + W+/-       ',
01441      4'f + W+/- -> f'' + h0         ', 'f + h0 -> f + g             ',
01442      4'f + h0 -> f + gamma         ',  'f + h0 -> f + Z0            ',
01443      5'f + h0 -> f'' + W+/-         ', 'f + h0 -> f + h0            ',
01444      5'g + g -> f + fbar           ',  'g + gamma -> f + fbar       ',
01445      5'g + Z0 -> f + fbar          ',  'g + W+/- -> f + fbar''       ',
01446      5'g + h0 -> f + fbar          ',  'gamma + gamma -> f + fbar   ',
01447      5'gamma + Z0 -> f + fbar      ',  'gamma + W+/- -> f + fbar''   '/
01448       DATA (PROC(I),I=61,80)/
01449      6'gamma + h0 -> f + fbar      ',  'Z0 + Z0 -> f + fbar         ',
01450      6'Z0 + W+/- -> f + fbar''      ', 'Z0 + h0 -> f + fbar         ',
01451      6'W+ + W- -> f + fbar         ',  'W+/- + h0 -> f + fbar''      ',
01452      6'h0 + h0 -> f + fbar         ',  'g + g -> g + g              ',
01453      6'gamma + gamma -> W+ + W-    ',  'gamma + W+/- -> Z0 + W+/-   ',
01454      7'Z0 + Z0 -> Z0 + Z0          ',  'Z0 + Z0 -> W+ + W-          ',
01455      7'Z0 + W+/- -> Z0 + W+/-      ',  'Z0 + Z0 -> Z0 + h0          ',
01456      7'W+ + W- -> gamma + gamma    ',  'W+ + W- -> Z0 + Z0          ',
01457      7'W+/- + W+/- -> W+/- + W+/-  ',  'W+/- + h0 -> W+/- + h0      ',
01458      7'h0 + h0 -> h0 + h0          ',  'q + gamma -> q'' + pi+/-     '/
01459       DATA (PROC(I),I=81,100)/
01460      8'q + qbar -> Q + Qbar, mass  ',  'g + g -> Q + Qbar, massive  ',
01461      8'f + q -> f'' + Q, massive    ', 'g + gamma -> Q + Qbar, mass ',
01462      8'gamma + gamma -> F + Fbar, m',  'g + g -> J/Psi + g          ',
01463      8'g + g -> chi_0c + g         ',  'g + g -> chi_1c + g         ',
01464      8'g + g -> chi_2c + g         ',  '                            ',
01465      9'Elastic scattering          ',  'Single diffractive (XB)     ',
01466      9'Single diffractive (AX)     ',  'Double  diffractive         ',
01467      9'Low-pT scattering           ',  'Semihard QCD 2 -> 2         ',
01468      9'                            ',  '                            ',
01469      9'q + gamma* -> q             ',  '                            '/
01470       DATA (PROC(I),I=101,120)/
01471      &'g + g -> gamma*/Z0          ',  'g + g -> h0                 ',
01472      &'gamma + gamma -> h0         ',  'g + g -> chi_0c             ',
01473      &'g + g -> chi_2c             ',  'g + g -> J/Psi + gamma      ',
01474      &'gamma + g -> J/Psi + g      ',  'gamma+gamma -> J/Psi + gamma',
01475      &'                            ',  'f + fbar -> gamma + h0      ',
01476      1'f + fbar -> g + h0          ',  'q + g -> q + h0             ',
01477      1'g + g -> g + h0             ',  'g + g -> gamma + gamma      ',
01478      1'g + g -> g + gamma          ',  'g + g -> gamma + Z0         ',
01479      1'g + g -> Z0 + Z0            ',  'g + g -> W+ + W-            ',
01480      1'                            ',  '                            '/
01481       DATA (PROC(I),I=121,140)/
01482      2'g + g -> Q + Qbar + h0      ',  'q + qbar -> Q + Qbar + h0   ',
01483      2'f + f'' -> f + f'' + h0       ',
01484      2'f + f'' -> f" + f"'' + h0     ',
01485      2'                            ',  '                            ',
01486      2'                            ',  '                            ',
01487      2'                            ',  '                            ',
01488      3'f + gamma*_T -> f + g       ',  'f + gamma*_L -> f + g       ',
01489      3'f + gamma*_T -> f + gamma   ',  'f + gamma*_L -> f + gamma   ',
01490      3'g + gamma*_T -> f + fbar    ',  'g + gamma*_L -> f + fbar    ',
01491      3'gamma*_T+gamma*_T -> f+fbar ',  'gamma*_T+gamma*_L -> f+fbar ',
01492      3'gamma*_L+gamma*_T -> f+fbar ',  'gamma*_L+gamma*_L -> f+fbar '/
01493       DATA (PROC(I),I=141,160)/
01494      4'f + fbar -> gamma*/Z0/Z''0   ', 'f + fbar'' -> W''+/-          ',
01495      4'f + fbar'' -> H+/-           ', 'f + fbar'' -> R              ',
01496      4'q + l -> LQ                 ',  'e + gamma -> e*             ',
01497      4'd + g -> d*                 ',  'u + g -> u*                 ',
01498      4'g + g -> eta_techni         ',  '                            ',
01499      5'f + fbar -> H0              ',  'g + g -> H0                 ',
01500      5'gamma + gamma -> H0         ',  '                            ',
01501      5'                            ',  'f + fbar -> A0              ',
01502      5'g + g -> A0                 ',  'gamma + gamma -> A0         ',
01503      5'                            ',  '                            '/
01504       DATA (PROC(I),I=161,180)/
01505      6'f + g -> f'' + H+/-          ', 'q + g -> LQ + lbar          ',
01506      6'g + g -> LQ + LQbar         ',  'q + qbar -> LQ + LQbar      ',
01507      6'f + fbar -> f'' + fbar'' (g/Z)',
01508      6'f +fbar'' -> f" + fbar"'' (W) ',
01509      6'q + q'' -> q" + d*           ',  'q + q'' -> q" + u*           ',
01510      6'q + qbar -> e + e*          ',  '                            ',
01511      7'f + fbar -> Z0 + H0         ', 'f + fbar'' -> W+/- + H0      ',
01512      7'f + f'' -> f + f'' + H0       ',
01513      7'f + f'' -> f" + f"'' + H0     ',
01514      7'                            ',  'f + fbar -> Z0 + A0         ',
01515      7'f + fbar'' -> W+/- + A0      ',
01516      7'f + f'' -> f + f'' + A0       ',
01517      7'f + f'' -> f" + f"'' + A0     ',
01518      7'                            '/
01519       DATA (PROC(I),I=181,200)/
01520      8'g + g -> Q + Qbar + H0      ',  'q + qbar -> Q + Qbar + H0   ',
01521      8'                            ',  '                            ',
01522      8'                            ',  'g + g -> Q + Qbar + A0      ',
01523      8'q + qbar -> Q + Qbar + A0   ',  '                            ',
01524      8'                            ',  '                            ',
01525      9'f + fbar -> rho_tech0       ',  'f + f'' -> rho_tech+/-       ',
01526      9'f + fbar -> omega_tech0     ',  'f+fbar -> f''+fbar'' (ETC)  ',
01527      9'f+fbar'' -> f"+fbar"'' (ETC)','                          ',
01528      9'                            ',  '                            ',
01529      9'                            ',  '                            '/
01530       DATA (PROC(I),I=201,220)/
01531      &'f + fbar -> ~e_L + ~e_Lbar  ',  'f + fbar -> ~e_R + ~e_Rbar  ',
01532      &'f + fbar -> ~e_R + ~e_Lbar  ',  'f + fbar -> ~mu_L + ~mu_Lbar',
01533      &'f + fbar -> ~mu_R + ~mu_Rbar',  'f + fbar -> ~mu_L + ~mu_Rbar',
01534      &'f+fbar -> ~tau_1 + ~tau_1bar',  'f+fbar -> ~tau_2 + ~tau_2bar',
01535      &'f+fbar -> ~tau_1 + ~tau_2bar',  'q + qbar'' -> ~l_L + ~nulbar ',
01536      1'q+qbar''-> ~tau_1 + ~nutaubar', 'q+qbar''-> ~tau_2 + ~nutaubar',
01537      1'f + fbar -> ~nul + ~nulbar  ',  'f+fbar -> ~nutau + ~nutaubar',
01538      1'                            ',  'f + fbar -> ~chi1 + ~chi1   ',
01539      1'f + fbar -> ~chi2 + ~chi2   ',  'f + fbar -> ~chi3 + ~chi3   ',
01540      1'f + fbar -> ~chi4 + ~chi4   ',  'f + fbar -> ~chi1 + ~chi2   '/
01541       DATA (PROC(I),I=221,240)/
01542      2'f + fbar -> ~chi1 + ~chi3   ',  'f + fbar -> ~chi1 + ~chi4   ',
01543      2'f + fbar -> ~chi2 + ~chi3   ',  'f + fbar -> ~chi2 + ~chi4   ',
01544      2'f + fbar -> ~chi3 + ~chi4   ',  'f+fbar -> ~chi+-1 + ~chi-+1 ',
01545      2'f+fbar -> ~chi+-2 + ~chi-+2 ',  'f+fbar -> ~chi+-1 + ~chi-+2 ',
01546      2'q + qbar'' -> ~chi1 + ~chi+-1', 'q + qbar'' -> ~chi2 + ~chi+-1',
01547      3'q + qbar'' -> ~chi3 + ~chi+-1', 'q + qbar'' -> ~chi4 + ~chi+-1',
01548      3'q + qbar'' -> ~chi1 + ~chi+-2', 'q + qbar'' -> ~chi2 + ~chi+-2',
01549      3'q + qbar'' -> ~chi3 + ~chi+-2', 'q + qbar'' -> ~chi4 + ~chi+-2',
01550      3'q + qbar -> ~chi1 + ~g      ',  'q + qbar -> ~chi2 + ~g      ',
01551      3'q + qbar -> ~chi3 + ~g      ',  'q + qbar -> ~chi4 + ~g      '/
01552       DATA (PROC(I),I=241,260)/
01553      4'q + qbar'' -> ~chi+-1 + ~g   ', 'q + qbar'' -> ~chi+-2 + ~g  ',
01554      4'q + qbar -> ~g + ~g         ',  'g + g -> ~g + ~g            ',
01555      4'                            ',  'qj + g -> ~qj_L + ~chi1     ',
01556      4'qj + g -> ~qj_R + ~chi1     ',  'qj + g -> ~qj_L + ~chi2     ',
01557      4'qj + g -> ~qj_R + ~chi2     ',  'qj + g -> ~qj_L + ~chi3     ',
01558      5'qj + g -> ~qj_R + ~chi3     ',  'qj + g -> ~qj_L + ~chi4     ',
01559      5'qj + g -> ~qj_R + ~chi4     ',  'qj + g -> ~qk_L + ~chi+-1   ',
01560      5'qj + g -> ~qk_R + ~chi+-1   ',  'qj + g -> ~qk_L + ~chi+-2   ',
01561      5'qj + g -> ~qk_R + ~chi+-2   ',  'qj + g -> ~qj_L + ~g        ',
01562      5'qj + g -> ~qj_R + ~g        ',  '                            '/
01563       DATA (PROC(I),I=261,300)/
01564      6'f + fbar -> ~t_1 + ~t_1bar  ',  'f + fbar -> ~t_2 + ~t_2bar  ',
01565      6'f + fbar -> ~t_1 + ~t_2bar  ',  'g + g -> ~t_1 + ~t_1bar     ',
01566      6'g + g -> ~t_2 + ~t_2bar     ',  '                            ',
01567      6'                            ',  '                            ',
01568      6'                            ',  '                            ',
01569      7'qi + qj -> ~qi_L + ~qj_L    ',  'qi + qj -> ~qi_R + ~qj_R    ',
01570      7'qi + qj -> ~qi_L + ~qj_R    ',  'qi+qjbar -> ~qi_L + ~qj_Lbar',
01571      7'qi+qjbar -> ~qi_R + ~qj_Rbar',  'qi+qjbar -> ~qi_L + ~qj_Rbar',
01572      7'f + fbar -> ~qi_L + ~qi_Lbar',  'f + fbar -> ~qi_R + ~qi_Rbar',
01573      7'g + g -> ~qi_L + ~qi_Lbar   ',  'g + g -> ~qi_R + ~qi_Rbar   ',
01574      8'b + qj -> ~b_1 + ~qj_L      ',  'b + qj -> ~b_2 + ~qj_R      ',
01575      8'b + qj -> ~b_1 + ~qj_R      ',  'b + qjbar -> ~b_1 + ~qj_Lbar',
01576      8'b + qjbar -> ~b_2 + ~qj_Rbar',  'b + qjbar -> ~b_1 + ~qj_Rbar',
01577      8'f + fbar -> ~b_1 + ~b_1bar  ',  'f + fbar -> ~b_2 + ~b_2bar  ',
01578      8'g + g -> ~b_1 + ~b_1bar     ',  'g + g -> ~b_2 + ~b_2bar     ',
01579      9'b + b -> ~b_1 + ~b_1        ',  'b + b -> ~b_2 + ~b_2        ',
01580      9'b + b -> ~b_1 + ~b_2        ',  'b + g -> ~b_1 + ~g          ',
01581      9'b + g -> ~b_2 + ~g          ',  'b + bbar -> ~b_1 + ~b_2bar  ',
01582      9'f + fbar'' -> H+/- + h0     ',  'f + fbar -> H+/- + H0       ',
01583      9'f + fbar -> A0 + h0         ',  'f + fbar -> A0 + H0         '/
01584       DATA (PROC(I),I=301,340)/
01585      &'f + fbar -> H+ + H-         ', 39*'                          '/
01586       DATA (PROC(I),I=341,500)/
01587      4'l + l -> H_L++/--           ',  'l + l -> H_R++/--           ',
01588      4'l + gamma -> H_L++/-- e-/+  ',  'l + gamma -> H_R++/-- e-/+  ',
01589      4'l + gamma -> H_L++/-- mu-/+ ',  'l + gamma -> H_R++/-- mu-/+ ',
01590      4'l + gamma -> H_L++/-- tau-/+',  'l + gamma -> H_R++/-- tau-/+',
01591      4'f + fbar -> H_L++ + H_L--   ',  'f + fbar -> H_R++ + H_R--   ',
01592      5'f + f -> f'' + f'' + H_L++/-- ',  
01593      5'f + f -> f'' + f'' + H_R++/-- ', 7*'                         ',
01594      6'                            ',  'f + fbar -> W_L+ W_L-       ',
01595      6'f + fbar -> W_L+/- pi_T-/+  ',  'f + fbar -> pi_T+ pi_T-     ',
01596      6'f + fbar -> gamma pi_T0     ',  'f + fbar -> gamma pi_T0''    ',
01597      6'f + fbar -> Z0 pi_T0        ',  'f + fbar -> Z0 pi_T0''       ',
01598      6'f + fbar -> W+/- pi_T-/+    ',  '                            ',
01599      7'f + fbar'' -> W_L+/- Z_L0    ', 'f + fbar'' -> W_L+/- pi_T0   ',
01600      7'f + fbar'' -> pi_T+/- Z_L0   ', 'f + fbar'' -> pi_T+/- pi_T0  ',
01601      7'f + fbar'' -> gamma pi_T+/-  ', 'f + fbar'' -> Z0 pi_T+/-     ',
01602      7'f + fbar'' -> W+/- pi_T0     ',  
01603      7'f + fbar'' -> W+/- pi_T0''    ',
01604      7'                            ','                              ',
01605      8 121*'                      '/    
01606  
01607 C...Cross sections and slope offsets.
01608       DATA SIGT/294*0D0/
01609  
01610 C...Supersymmetry switches and parameters.
01611       DATA IMSS/0,
01612      &  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,
01613      1  89*0/
01614       DATA RMSS/0D0,
01615      &  80D0,160D0,500D0,800D0,2D0,250D0,200D0,800D0,700D0,800D0,
01616      1  700D0,500D0,250D0,200D0,800D0,400D0,0D0,0.1D0,850D0,0.041D0,
01617      2   1D0,800D0,1D4,1D4,1D4,0D0,0D0,0D0,24D17,0D0,
01618      3  69*0D0/
01619  
01620 C...Data for histogramming routines.
01621       DATA IHIST/1000,20000,55,1/
01622       DATA INDX/1000*0/
01623  
01624       END
01625  
01626 C*********************************************************************
01627  
01628 C...PYTEST
01629 C...A simple program (disguised as subroutine) to run at installation
01630 C...as a check that the program works as intended.
01631  
01632       SUBROUTINE PYTEST(MTEST)
01633  
01634 C...Double precision and integer declarations.
01635       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
01636       IMPLICIT INTEGER(I-N)
01637       INTEGER PYK,PYCHGE,PYCOMP
01638 C...Commonblocks.
01639       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
01640       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
01641       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
01642       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
01643       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
01644       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
01645       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/
01646 C...Local arrays.
01647       DIMENSION PSUM(5),PINI(6),PFIN(6)
01648  
01649 C...Save defaults for values that are changed.
01650       MSTJ1=MSTJ(1)
01651       MSTJ3=MSTJ(3)
01652       MSTJ11=MSTJ(11)
01653       MSTJ42=MSTJ(42)
01654       MSTJ43=MSTJ(43)
01655       MSTJ44=MSTJ(44)
01656       PARJ17=PARJ(17)
01657       PARJ22=PARJ(22)
01658       PARJ43=PARJ(43)
01659       PARJ54=PARJ(54)
01660       MST101=MSTJ(101)
01661       MST104=MSTJ(104)
01662       MST105=MSTJ(105)
01663       MST107=MSTJ(107)
01664       MST116=MSTJ(116)
01665  
01666 C...First part: loop over simple events to be generated.
01667       IF(MTEST.GE.1) CALL PYTABU(20)
01668       NERR=0
01669       DO 180 IEV=1,500
01670  
01671 C...Reset parameter values. Switch on some nonstandard features.
01672         MSTJ(1)=1
01673         MSTJ(3)=0
01674         MSTJ(11)=1
01675         MSTJ(42)=2
01676         MSTJ(43)=4
01677         MSTJ(44)=2
01678         PARJ(17)=0.1D0
01679         PARJ(22)=1.5D0
01680         PARJ(43)=1D0
01681         PARJ(54)=-0.05D0
01682         MSTJ(101)=5
01683         MSTJ(104)=5
01684         MSTJ(105)=0
01685         MSTJ(107)=1
01686         IF(IEV.EQ.301.OR.IEV.EQ.351.OR.IEV.EQ.401) MSTJ(116)=3
01687  
01688 C...Ten events each for some single jets configurations.
01689         IF(IEV.LE.50) THEN
01690           ITY=(IEV+9)/10
01691           MSTJ(3)=-1
01692           IF(ITY.EQ.3.OR.ITY.EQ.4) MSTJ(11)=2
01693           IF(ITY.EQ.1) CALL PY1ENT(1,1,15D0,0D0,0D0)
01694           IF(ITY.EQ.2) CALL PY1ENT(1,3101,15D0,0D0,0D0)
01695           IF(ITY.EQ.3) CALL PY1ENT(1,-2203,15D0,0D0,0D0)
01696           IF(ITY.EQ.4) CALL PY1ENT(1,-4,30D0,0D0,0D0)
01697           IF(ITY.EQ.5) CALL PY1ENT(1,21,15D0,0D0,0D0)
01698  
01699 C...Ten events each for some simple jet systems; string fragmentation.
01700         ELSEIF(IEV.LE.130) THEN
01701           ITY=(IEV-41)/10
01702           IF(ITY.EQ.1) CALL PY2ENT(1,1,-1,40D0)
01703           IF(ITY.EQ.2) CALL PY2ENT(1,4,-4,30D0)
01704           IF(ITY.EQ.3) CALL PY2ENT(1,2,2103,100D0)
01705           IF(ITY.EQ.4) CALL PY2ENT(1,21,21,40D0)
01706           IF(ITY.EQ.5) CALL PY3ENT(1,2101,21,-3203,30D0,0.6D0,0.8D0)
01707           IF(ITY.EQ.6) CALL PY3ENT(1,5,21,-5,40D0,0.9D0,0.8D0)
01708           IF(ITY.EQ.7) CALL PY3ENT(1,21,21,21,60D0,0.7D0,0.5D0)
01709           IF(ITY.EQ.8) CALL PY4ENT(1,2,21,21,-2,40D0,
01710      &    0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
01711  
01712 C...Seventy events with independent fragmentation and momentum cons.
01713         ELSEIF(IEV.LE.200) THEN
01714           ITY=1+(IEV-131)/16
01715           MSTJ(2)=1+MOD(IEV-131,4)
01716           MSTJ(3)=1+MOD((IEV-131)/4,4)
01717           IF(ITY.EQ.1) CALL PY2ENT(1,4,-5,40D0)
01718           IF(ITY.EQ.2) CALL PY3ENT(1,3,21,-3,40D0,0.9D0,0.4D0)
01719           IF(ITY.EQ.3) CALL PY4ENT(1,2,21,21,-2,40D0,
01720      &    0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
01721           IF(ITY.GE.4) CALL PY4ENT(1,2,-3,3,-2,40D0,
01722      &    0.4D0,0.64D0,0.6D0,0.12D0,0.2D0)
01723  
01724 C...A hundred events with random jets (check invariant mass).
01725         ELSEIF(IEV.LE.300) THEN
01726   100     DO 110 J=1,5
01727             PSUM(J)=0D0
01728   110     CONTINUE
01729           NJET=2D0+6D0*PYR(0)
01730           DO 130 I=1,NJET
01731             KFL=21
01732             IF(I.EQ.1) KFL=INT(1D0+4D0*PYR(0))
01733             IF(I.EQ.NJET) KFL=-INT(1D0+4D0*PYR(0))
01734             EJET=5D0+20D0*PYR(0)
01735             THETA=ACOS(2D0*PYR(0)-1D0)
01736             PHI=6.2832D0*PYR(0)
01737             IF(I.LT.NJET) CALL PY1ENT(-I,KFL,EJET,THETA,PHI)
01738             IF(I.EQ.NJET) CALL PY1ENT(I,KFL,EJET,THETA,PHI)
01739             IF(I.EQ.1.OR.I.EQ.NJET) MSTJ(93)=1
01740             IF(I.EQ.1.OR.I.EQ.NJET) PSUM(5)=PSUM(5)+PYMASS(KFL)
01741             DO 120 J=1,4
01742               PSUM(J)=PSUM(J)+P(I,J)
01743   120       CONTINUE
01744   130     CONTINUE
01745           IF(PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2.LT.
01746      &    (PSUM(5)+PARJ(32))**2) GOTO 100
01747  
01748 C...Fifty e+e- continuum events with matrix elements.
01749         ELSEIF(IEV.LE.350) THEN
01750           MSTJ(101)=2
01751           CALL PYEEVT(0,40D0)
01752  
01753 C...Fifty e+e- continuum event with varying shower options.
01754         ELSEIF(IEV.LE.400) THEN
01755           MSTJ(42)=1+MOD(IEV,2)
01756           MSTJ(43)=1+MOD(IEV/2,4)
01757           MSTJ(44)=MOD(IEV/8,3)
01758           CALL PYEEVT(0,90D0)
01759  
01760 C...Fifty e+e- continuum events with coherent shower.
01761         ELSEIF(IEV.LE.450) THEN
01762           CALL PYEEVT(0,500D0)
01763  
01764 C...Fifty Upsilon decays to ggg or gammagg with coherent shower.
01765         ELSE
01766           CALL PYONIA(5,9.46D0)
01767         ENDIF
01768  
01769 C...Generate event. Find total momentum, energy and charge.
01770         DO 140 J=1,4
01771           PINI(J)=PYP(0,J)
01772   140   CONTINUE
01773         PINI(6)=PYP(0,6)
01774         CALL PYEXEC
01775         DO 150 J=1,4
01776           PFIN(J)=PYP(0,J)
01777   150   CONTINUE
01778         PFIN(6)=PYP(0,6)
01779  
01780 C...Check conservation of energy, momentum and charge;
01781 C...usually exact, but only approximate for single jets.
01782         MERR=0
01783         IF(IEV.LE.50) THEN
01784           IF((PFIN(1)-PINI(1))**2+(PFIN(2)-PINI(2))**2.GE.10D0)
01785      &    MERR=MERR+1
01786           EPZREM=PINI(4)+PINI(3)-PFIN(4)-PFIN(3)
01787           IF(EPZREM.LT.0D0.OR.EPZREM.GT.2D0*PARJ(31)) MERR=MERR+1
01788           IF(ABS(PFIN(6)-PINI(6)).GT.2.1D0) MERR=MERR+1
01789         ELSE
01790           DO 160 J=1,4
01791             IF(ABS(PFIN(J)-PINI(J)).GT.0.0001D0*PINI(4)) MERR=MERR+1
01792   160     CONTINUE
01793           IF(ABS(PFIN(6)-PINI(6)).GT.0.1D0) MERR=MERR+1
01794         ENDIF
01795         IF(MERR.NE.0) WRITE(MSTU(11),5000) (PINI(J),J=1,4),PINI(6),
01796      &  (PFIN(J),J=1,4),PFIN(6)
01797  
01798 C...Check that all KF codes are known ones, and that partons/particles
01799 C...satisfy energy-momentum-mass relation. Store particle statistics.
01800         DO 170 I=1,N
01801           IF(K(I,1).GT.20) GOTO 170
01802           IF(PYCOMP(K(I,2)).EQ.0) THEN
01803             WRITE(MSTU(11),5100) I
01804             MERR=MERR+1
01805           ENDIF
01806           PD=P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2-P(I,5)**2
01807           IF(ABS(PD).GT.MAX(0.1D0,0.001D0*P(I,4)**2).OR.P(I,4).LT.0D0)
01808      &    THEN
01809             WRITE(MSTU(11),5200) I
01810             MERR=MERR+1
01811           ENDIF
01812   170   CONTINUE
01813         IF(MTEST.GE.1) CALL PYTABU(21)
01814  
01815 C...List all erroneous events and some normal ones.
01816         IF(MERR.NE.0.OR.MSTU(24).NE.0.OR.MSTU(28).NE.0) THEN
01817           IF(MERR.GE.1) WRITE(MSTU(11),6400)
01818           CALL PYLIST(2)
01819         ELSEIF(MTEST.GE.1.AND.MOD(IEV-5,100).EQ.0) THEN
01820           CALL PYLIST(1)
01821         ENDIF
01822  
01823 C...Stop execution if too many errors.
01824         IF(MERR.NE.0) NERR=NERR+1
01825         IF(NERR.GE.10) THEN
01826           WRITE(MSTU(11),6300)
01827           CALL PYLIST(1)
01828           STOP
01829         ENDIF
01830   180 CONTINUE
01831  
01832 C...Summarize result of run.
01833       IF(MTEST.GE.1) CALL PYTABU(22)
01834  
01835 C...Reset commonblock variables changed during run.
01836       MSTJ(1)=MSTJ1
01837       MSTJ(3)=MSTJ3
01838       MSTJ(11)=MSTJ11
01839       MSTJ(42)=MSTJ42
01840       MSTJ(43)=MSTJ43
01841       MSTJ(44)=MSTJ44
01842       PARJ(17)=PARJ17
01843       PARJ(22)=PARJ22
01844       PARJ(43)=PARJ43
01845       PARJ(54)=PARJ54
01846       MSTJ(101)=MST101
01847       MSTJ(104)=MST104
01848       MSTJ(105)=MST105
01849       MSTJ(107)=MST107
01850       MSTJ(116)=MST116
01851  
01852 C...Second part: complete events of various kinds.
01853 C...Common initial values. Loop over initiating conditions.
01854       MSTP(122)=MAX(0,MIN(2,MTEST))
01855       MDCY(PYCOMP(111),1)=0
01856       DO 230 IPROC=1,8
01857  
01858 C...Reset process type, kinematics cuts, and the flags used.
01859         MSEL=0
01860         DO 190 ISUB=1,500
01861           MSUB(ISUB)=0
01862   190   CONTINUE
01863         CKIN(1)=2D0
01864         CKIN(3)=0D0
01865         MSTP(2)=1
01866         MSTP(11)=0
01867         MSTP(33)=0
01868         MSTP(81)=1
01869         MSTP(82)=1
01870         MSTP(111)=1
01871         MSTP(131)=0
01872         MSTP(133)=0
01873         PARP(131)=0.01D0
01874  
01875 C...Prompt photon production at fixed target.
01876         IF(IPROC.EQ.1) THEN
01877           PZSUM=300D0
01878           PESUM=SQRT(PZSUM**2+PYMASS(211)**2)+PYMASS(2212)
01879           PQSUM=2D0
01880           MSEL=10
01881           CKIN(3)=5D0
01882           CALL PYINIT('FIXT','pi+','p',PZSUM)
01883  
01884 C...QCD processes at ISR energies.
01885         ELSEIF(IPROC.EQ.2) THEN
01886           PESUM=63D0
01887           PZSUM=0D0
01888           PQSUM=2D0
01889           MSEL=1
01890           CKIN(3)=5D0
01891           CALL PYINIT('CMS','p','p',PESUM)
01892  
01893 C...W production + multiple interactions at CERN Collider.
01894         ELSEIF(IPROC.EQ.3) THEN
01895           PESUM=630D0
01896           PZSUM=0D0
01897           PQSUM=0D0
01898           MSEL=12
01899           CKIN(1)=20D0
01900           MSTP(82)=4
01901           MSTP(2)=2
01902           MSTP(33)=3
01903           CALL PYINIT('CMS','p','pbar',PESUM)
01904  
01905 C...W/Z gauge boson pairs + pileup events at the Tevatron.
01906         ELSEIF(IPROC.EQ.4) THEN
01907           PESUM=1800D0
01908           PZSUM=0D0
01909           PQSUM=0D0
01910           MSUB(22)=1
01911           MSUB(23)=1
01912           MSUB(25)=1
01913           CKIN(1)=200D0
01914           MSTP(111)=0
01915           MSTP(131)=1
01916           MSTP(133)=2
01917           PARP(131)=0.04D0
01918           CALL PYINIT('CMS','p','pbar',PESUM)
01919  
01920 C...Higgs production at LHC.
01921         ELSEIF(IPROC.EQ.5) THEN
01922           PESUM=15400D0
01923           PZSUM=0D0
01924           PQSUM=2D0
01925           MSUB(3)=1
01926           MSUB(102)=1
01927           MSUB(123)=1
01928           MSUB(124)=1
01929           PMAS(25,1)=300D0
01930           CKIN(1)=200D0
01931           MSTP(81)=0
01932           MSTP(111)=0
01933           CALL PYINIT('CMS','p','p',PESUM)
01934  
01935 C...Z' production at SSC.
01936         ELSEIF(IPROC.EQ.6) THEN
01937           PESUM=40000D0
01938           PZSUM=0D0
01939           PQSUM=2D0
01940           MSEL=21
01941           PMAS(32,1)=600D0
01942           CKIN(1)=400D0
01943           MSTP(81)=0
01944           MSTP(111)=0
01945           CALL PYINIT('CMS','p','p',PESUM)
01946  
01947 C...W pair production at 1 TeV e+e- collider.
01948         ELSEIF(IPROC.EQ.7) THEN
01949           PESUM=1000D0
01950           PZSUM=0D0
01951           PQSUM=0D0
01952           MSUB(25)=1
01953           MSUB(69)=1
01954           MSTP(11)=1
01955           CALL PYINIT('CMS','e+','e-',PESUM)
01956  
01957 C...Deep inelastic scattering at a LEP+LHC ep collider.
01958         ELSEIF(IPROC.EQ.8) THEN
01959           P(1,1)=0D0
01960           P(1,2)=0D0
01961           P(1,3)=8000D0
01962           P(2,1)=0D0
01963           P(2,2)=0D0
01964           P(2,3)=-80D0
01965           PESUM=8080D0
01966           PZSUM=7920D0
01967           PQSUM=0D0
01968           MSUB(10)=1
01969           CKIN(3)=50D0
01970           MSTP(111)=0
01971           CALL PYINIT('USER','p','e-',PESUM)
01972         ENDIF
01973  
01974 C...Generate 20 events of each required type.
01975         DO 220 IEV=1,20
01976           CALL PYEVNT
01977           PESUMM=PESUM
01978           IF(IPROC.EQ.4) PESUMM=MSTI(41)*PESUM
01979  
01980 C...Check conservation of energy/momentum/flavour.
01981           PINI(1)=0D0
01982           PINI(2)=0D0
01983           PINI(3)=PZSUM
01984           PINI(4)=PESUMM
01985           PINI(6)=PQSUM
01986           DO 200 J=1,4
01987             PFIN(J)=PYP(0,J)
01988   200     CONTINUE
01989           PFIN(6)=PYP(0,6)
01990           MERR=0
01991           DEVE=ABS(PFIN(4)-PINI(4))+ABS(PFIN(3)-PINI(3))
01992           DEVT=ABS(PFIN(1)-PINI(1))+ABS(PFIN(2)-PINI(2))
01993           DEVQ=ABS(PFIN(6)-PINI(6))
01994           IF(DEVE.GT.2D-3*PESUM.OR.DEVT.GT.MAX(0.01D0,1D-4*PESUM).OR.
01995      &    DEVQ.GT.0.1D0) MERR=1
01996           IF(MERR.NE.0) WRITE(MSTU(11),5000) (PINI(J),J=1,4),PINI(6),
01997      &    (PFIN(J),J=1,4),PFIN(6)
01998  
01999 C...Check that all KF codes are known ones, and that partons/particles
02000 C...satisfy energy-momentum-mass relation.
02001           DO 210 I=1,N
02002             IF(K(I,1).GT.20) GOTO 210
02003             IF(PYCOMP(K(I,2)).EQ.0) THEN
02004               WRITE(MSTU(11),5100) I
02005               MERR=MERR+1
02006             ENDIF
02007             PD=P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2-P(I,5)**2*
02008      &      SIGN(1D0,P(I,5))
02009             IF(ABS(PD).GT.MAX(0.1D0,0.002D0*P(I,4)**2,0.002D0*P(I,5)**2)
02010      &      .OR.(P(I,5).GE.0D0.AND.P(I,4).LT.0D0)) THEN
02011               WRITE(MSTU(11),5200) I
02012               MERR=MERR+1
02013             ENDIF
02014   210     CONTINUE
02015  
02016 C...Listing of erroneous events, and first event of each type.
02017           IF(MERR.GE.1) NERR=NERR+1
02018           IF(NERR.GE.10) THEN
02019             WRITE(MSTU(11),6300)
02020             CALL PYLIST(1)
02021             STOP
02022           ENDIF
02023           IF(MTEST.GE.1.AND.(MERR.GE.1.OR.IEV.EQ.1)) THEN
02024             IF(MERR.GE.1) WRITE(MSTU(11),6400)
02025             CALL PYLIST(1)
02026           ENDIF
02027   220   CONTINUE
02028  
02029 C...List statistics for each process type.
02030         IF(MTEST.GE.1) CALL PYSTAT(1)
02031   230 CONTINUE
02032  
02033 C...Summarize result of run.
02034       IF(NERR.EQ.0) WRITE(MSTU(11),6500)
02035       IF(NERR.GT.0) WRITE(MSTU(11),6600) NERR
02036  
02037 C...Format statements for output.
02038  5000 FORMAT(/' Momentum, energy and/or charge were not conserved ',
02039      &'in following event'/' sum of',9X,'px',11X,'py',11X,'pz',11X,
02040      &'E',8X,'charge'/' before',2X,4(1X,F12.5),1X,F8.2/' after',3X,
02041      &4(1X,F12.5),1X,F8.2)
02042  5100 FORMAT(/5X,'Entry no.',I4,' in following event not known code')
02043  5200 FORMAT(/5X,'Entry no.',I4,' in following event has faulty ',
02044      &'kinematics')
02045  6300 FORMAT(/5X,'This is the tenth error experienced! Something is ',
02046      &'wrong.'/5X,'Execution will be stopped after listing of event.')
02047  6400 FORMAT(5X,'Faulty event follows:')
02048  6500 FORMAT(//5X,'End result of PYTEST: no errors detected.')
02049  6600 FORMAT(//5X,'End result of PYTEST:',I2,' errors detected.'/
02050      &5X,'This should not have happened!')
02051  
02052       RETURN
02053       END
02054  
02055 C*********************************************************************
02056  
02057 C...PYHEPC
02058 C...Converts PYTHIA event record contents to or from
02059 C...the standard event record commonblock.
02060  
02061       SUBROUTINE PYHEPC(MCONV)
02062  
02063 C...Double precision and integer declarations.
02064       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
02065       IMPLICIT INTEGER(I-N)
02066       INTEGER PYK,PYCHGE,PYCOMP
02067 C...Commonblocks.
02068       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
02069       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
02070       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
02071       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
02072 C...HEPEVT commonblock.
02073       PARAMETER (NMXHEP=4000)
02074       COMMON/HEPEVT/NEVHEP,NHEP,ISTHEP(NMXHEP),IDHEP(NMXHEP),
02075      &JMOHEP(2,NMXHEP),JDAHEP(2,NMXHEP),PHEP(5,NMXHEP),VHEP(4,NMXHEP)
02076       DOUBLE PRECISION PHEP,VHEP
02077       SAVE /HEPEVT/
02078  
02079 C...Conversion from PYTHIA to standard, the easy part.
02080       IF(MCONV.EQ.1) THEN
02081         NEVHEP=0
02082         IF(N.GT.NMXHEP) CALL PYERRM(8,
02083      &  '(PYHEPC:) no more space in /HEPEVT/')
02084         NHEP=MIN(N,NMXHEP)
02085         DO 140 I=1,NHEP
02086           ISTHEP(I)=0
02087           IF(K(I,1).GE.1.AND.K(I,1).LE.10) ISTHEP(I)=1
02088           IF(K(I,1).GE.11.AND.K(I,1).LE.20) ISTHEP(I)=2
02089           IF(K(I,1).GE.21.AND.K(I,1).LE.30) ISTHEP(I)=3
02090           IF(K(I,1).GE.31.AND.K(I,1).LE.100) ISTHEP(I)=K(I,1)
02091           IDHEP(I)=K(I,2)
02092           JMOHEP(1,I)=K(I,3)
02093           JMOHEP(2,I)=0
02094           IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) THEN
02095             JDAHEP(1,I)=K(I,4)
02096             JDAHEP(2,I)=K(I,5)
02097           ELSE
02098             JDAHEP(1,I)=0
02099             JDAHEP(2,I)=0
02100           ENDIF
02101           DO 100 J=1,5
02102             PHEP(J,I)=P(I,J)
02103   100     CONTINUE
02104           DO 110 J=1,4
02105             VHEP(J,I)=V(I,J)
02106   110     CONTINUE
02107  
02108 C...Check if new event (from pileup).
02109           IF(I.EQ.1) THEN
02110             INEW=1
02111           ELSE
02112             IF(K(I,1).EQ.21.AND.K(I-1,1).NE.21) INEW=I
02113           ENDIF
02114  
02115 C...Fill in missing mother information.
02116           IF(I.GE.INEW+2.AND.K(I,1).EQ.21.AND.K(I,3).EQ.0) THEN
02117             IMO1=I-2
02118             IF(I.GE.INEW+3.AND.K(I-1,1).EQ.21.AND.K(I-1,3).EQ.0)
02119      &      IMO1=IMO1-1
02120             JMOHEP(1,I)=IMO1
02121             JMOHEP(2,I)=IMO1+1
02122           ELSEIF(K(I,2).GE.91.AND.K(I,2).LE.93) THEN
02123             I1=K(I,3)-1
02124   120       I1=I1+1
02125             IF(I1.GE.I) CALL PYERRM(8,
02126      &      '(PYHEPC:) translation of inconsistent event history')
02127             IF(I1.LT.I.AND.K(I1,1).NE.1.AND.K(I1,1).NE.11) GOTO 120
02128             KC=PYCOMP(K(I1,2))
02129             IF(I1.LT.I.AND.KC.EQ.0) GOTO 120
02130             IF(I1.LT.I.AND.KCHG(KC,2).EQ.0) GOTO 120
02131             JMOHEP(2,I)=I1
02132           ELSEIF(K(I,2).EQ.94) THEN
02133             NJET=2
02134             IF(NHEP.GE.I+3.AND.K(I+3,3).LE.I) NJET=3
02135             IF(NHEP.GE.I+4.AND.K(I+4,3).LE.I) NJET=4
02136             JMOHEP(2,I)=MOD(K(I+NJET,4)/MSTU(5),MSTU(5))
02137             IF(JMOHEP(2,I).EQ.JMOHEP(1,I)) JMOHEP(2,I)=
02138      &      MOD(K(I+1,4)/MSTU(5),MSTU(5))
02139           ENDIF
02140  
02141 C...Fill in missing daughter information.
02142           IF(K(I,2).EQ.94.AND.MSTU(16).NE.2) THEN
02143             DO 130 I1=JDAHEP(1,I),JDAHEP(2,I)
02144               I2=MOD(K(I1,4)/MSTU(5),MSTU(5))
02145               JDAHEP(1,I2)=I
02146   130       CONTINUE
02147           ENDIF
02148           IF(K(I,2).GE.91.AND.K(I,2).LE.94) GOTO 140
02149           I1=JMOHEP(1,I)
02150           IF(I1.LE.0.OR.I1.GT.NHEP) GOTO 140
02151           IF(K(I1,1).NE.13.AND.K(I1,1).NE.14) GOTO 140
02152           IF(JDAHEP(1,I1).EQ.0) THEN
02153             JDAHEP(1,I1)=I
02154           ELSE
02155             JDAHEP(2,I1)=I
02156           ENDIF
02157   140   CONTINUE
02158         DO 150 I=1,NHEP
02159           IF(K(I,1).NE.13.AND.K(I,1).NE.14) GOTO 150
02160           IF(JDAHEP(2,I).EQ.0) JDAHEP(2,I)=JDAHEP(1,I)
02161   150   CONTINUE
02162  
02163 C...Conversion from standard to PYTHIA, the easy part.
02164       ELSE
02165         IF(NHEP.GT.MSTU(4)) CALL PYERRM(8,
02166      &  '(PYHEPC:) no more space in /PYJETS/')
02167         N=MIN(NHEP,MSTU(4))
02168         NKQ=0
02169         KQSUM=0
02170         DO 180 I=1,N
02171           K(I,1)=0
02172           IF(ISTHEP(I).EQ.1) K(I,1)=1
02173           IF(ISTHEP(I).EQ.2) K(I,1)=11
02174           IF(ISTHEP(I).EQ.3) K(I,1)=21
02175           K(I,2)=IDHEP(I)
02176           K(I,3)=JMOHEP(1,I)
02177           K(I,4)=JDAHEP(1,I)
02178           K(I,5)=JDAHEP(2,I)
02179           DO 160 J=1,5
02180             P(I,J)=PHEP(J,I)
02181   160     CONTINUE
02182           DO 170 J=1,4
02183             V(I,J)=VHEP(J,I)
02184   170     CONTINUE
02185           V(I,5)=0D0
02186           IF(ISTHEP(I).EQ.2.AND.PHEP(4,I).GT.PHEP(5,I)) THEN
02187             I1=JDAHEP(1,I)
02188             IF(I1.GT.0.AND.I1.LE.NHEP) V(I,5)=(VHEP(4,I1)-VHEP(4,I))*
02189      &      PHEP(5,I)/PHEP(4,I)
02190           ENDIF
02191  
02192 C...Fill in missing information on colour connection in jet systems.
02193           IF(ISTHEP(I).EQ.1) THEN
02194             KC=PYCOMP(K(I,2))
02195             KQ=0
02196             IF(KC.NE.0) KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
02197             IF(KQ.NE.0) NKQ=NKQ+1
02198             IF(KQ.NE.2) KQSUM=KQSUM+KQ
02199             IF(KQ.NE.0.AND.KQSUM.NE.0) THEN
02200               K(I,1)=2
02201             ELSEIF(KQ.EQ.2.AND.I.LT.N) THEN
02202               IF(K(I+1,2).EQ.21) K(I,1)=2
02203             ENDIF
02204           ENDIF
02205   180   CONTINUE
02206         IF(NKQ.EQ.1.OR.KQSUM.NE.0) CALL PYERRM(8,
02207      &  '(PYHEPC:) input parton configuration not colour singlet')
02208       ENDIF
02209  
02210       END
02211  
02212 C*********************************************************************
02213  
02214 C...PYINIT
02215 C...Initializes the generation procedure; finds maxima of the
02216 C...differential cross-sections to be used for weighting.
02217  
02218       SUBROUTINE PYINIT(FRAME,BEAM,TARGET,WIN)
02219  
02220 C...Double precision and integer declarations.
02221       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
02222       IMPLICIT INTEGER(I-N)
02223       INTEGER PYK,PYCHGE,PYCOMP
02224 C...Commonblocks.
02225       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
02226       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
02227       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
02228       COMMON/PYDAT4/CHAF(500,2)
02229       CHARACTER CHAF*16
02230       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
02231       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
02232       COMMON/PYINT1/MINT(400),VINT(400)
02233       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
02234       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
02235       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYSUBS/,/PYPARS/,
02236      &/PYINT1/,/PYINT2/,/PYINT5/
02237 C...Local arrays and character variables.
02238       DIMENSION ALAMIN(20),NFIN(20)
02239       CHARACTER*(*) FRAME,BEAM,TARGET
02240       CHARACTER CHFRAM*12,CHBEAM*12,CHTARG*12,CHLH(2)*6
02241  
02242 C...Interface to PDFLIB.
02243       COMMON/W50512/QCDL4,QCDL5
02244       SAVE /W50512/
02245       DOUBLE PRECISION VALUE(20),QCDL4,QCDL5
02246       CHARACTER*20 PARM(20)
02247       DATA VALUE/20*0D0/,PARM/20*' '/
02248  
02249 C...Data:Lambda and n_f values for parton distributions..
02250       DATA ALAMIN/0.177D0,0.239D0,0.247D0,0.2322D0,0.248D0,0.248D0,
02251      &0.192D0,0.326D0,2*0.2D0,0.2D0,0.2D0,0.29D0,0.2D0,0.4D0,5*0.2D0/,
02252      &NFIN/20*4/
02253       DATA CHLH/'lepton','hadron'/
02254  
02255 C...Reset MINT and VINT arrays. Write headers.
02256       DO 100 J=1,400
02257         MINT(J)=0
02258         VINT(J)=0D0
02259   100 CONTINUE
02260       IF(MSTU(12).GE.1) CALL PYLIST(0)
02261       IF(MSTP(122).GE.1) WRITE(MSTU(11),5100)
02262  
02263 C...Maximum 4 generations; set maximum number of allowed flavours.
02264       MSTP(1)=MIN(4,MSTP(1))
02265       MSTU(114)=MIN(MSTU(114),2*MSTP(1))
02266       MSTP(58)=MIN(MSTP(58),2*MSTP(1))
02267  
02268 C...Sum up Cabibbo-Kobayashi-Maskawa factors for each quark/lepton.
02269       DO 120 I=-20,20
02270         VINT(180+I)=0D0
02271         IA=IABS(I)
02272         IF(IA.GE.1.AND.IA.LE.2*MSTP(1)) THEN
02273           DO 110 J=1,MSTP(1)
02274             IB=2*J-1+MOD(IA,2)
02275             IF(IB.GE.6.AND.MSTP(9).EQ.0) GOTO 110
02276             IPM=(5-ISIGN(1,I))/2
02277             IDC=J+MDCY(IA,2)+2
02278             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.IPM) VINT(180+I)=
02279      &      VINT(180+I)+VCKM((IA+1)/2,(IB+1)/2)
02280   110     CONTINUE
02281         ELSEIF(IA.GE.11.AND.IA.LE.10+2*MSTP(1)) THEN
02282           VINT(180+I)=1D0
02283         ENDIF
02284   120 CONTINUE
02285  
02286 C...Initialize parton distributions: PDFLIB.
02287       IF(MSTP(52).EQ.2) THEN
02288         PARM(1)='NPTYPE'
02289         VALUE(1)=1
02290         PARM(2)='NGROUP'
02291         VALUE(2)=MSTP(51)/1000
02292         PARM(3)='NSET'
02293         VALUE(3)=MOD(MSTP(51),1000)
02294         PARM(4)='TMAS'
02295         VALUE(4)=PMAS(6,1)
02296         CALL PDFSET(PARM,VALUE)
02297         MINT(93)=1000000+MSTP(51)
02298       ENDIF
02299  
02300 C...Choose Lambda value to use in alpha-strong.
02301       MSTU(111)=MSTP(2)
02302       IF(MSTP(3).GE.2) THEN
02303         ALAM=0.2D0
02304         NF=4
02305         IF(MSTP(52).EQ.1.AND.MSTP(51).GE.1.AND.MSTP(51).LE.20) THEN
02306           ALAM=ALAMIN(MSTP(51))
02307           NF=NFIN(MSTP(51))
02308         ELSEIF(MSTP(52).EQ.2) THEN
02309           ALAM=QCDL4
02310           NF=4
02311         ENDIF
02312         PARP(1)=ALAM
02313         PARP(61)=ALAM
02314         PARP(72)=ALAM
02315         PARU(112)=ALAM
02316         MSTU(112)=NF
02317         IF(MSTP(3).EQ.3) PARJ(81)=ALAM
02318       ENDIF
02319  
02320 C...Initialize the SUSY generation: couplings, masses,
02321 C...decay modes, branching ratios, and so on.
02322       CALL PYMSIN
02323  
02324 C...Initialize widths and partial widths for resonances.
02325       CALL PYINRE
02326 C...Set Z0 mass and width for e+e- routines.
02327       PARJ(123)=PMAS(23,1)
02328       PARJ(124)=PMAS(23,2)
02329  
02330 C...Identify beam and target particles and frame of process.
02331       CHFRAM=FRAME//' '
02332       CHBEAM=BEAM//' '
02333       CHTARG=TARGET//' '
02334       CALL PYINBM(CHFRAM,CHBEAM,CHTARG,WIN)
02335       IF(MINT(65).EQ.1) GOTO 170
02336  
02337 C...For gamma-p or gamma-gamma allow many (3 or 6) alternatives.
02338 C...For e-gamma allow 2 alternatives.
02339       MINT(121)=1
02340       IF(MSTP(14).EQ.10.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
02341         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
02342      &  (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=3
02343         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=6
02344         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
02345      &  (IABS(MINT(11)).EQ.11.OR.IABS(MINT(12)).EQ.11)) MINT(121)=2
02346       ELSEIF(MSTP(14).EQ.20.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
02347         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
02348      &  (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=3
02349         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=9
02350       ELSEIF(MSTP(14).EQ.25.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
02351         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
02352      &  (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=2
02353         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=4
02354       ELSEIF(MSTP(14).EQ.30.AND.(MSEL.EQ.1.OR.MSEL.EQ.2)) THEN
02355         IF((MINT(11).EQ.22.OR.MINT(12).EQ.22).AND.
02356      &  (IABS(MINT(11)).GE.28.OR.IABS(MINT(12)).GE.28)) MINT(121)=4
02357         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) MINT(121)=13
02358       ENDIF
02359       MINT(123)=MSTP(14)
02360       IF((MSTP(14).EQ.10.OR.MSTP(14).EQ.20.OR.MSTP(14).EQ.25.OR.
02361      &MSTP(14).EQ.30).AND.MSEL.NE.1.AND.MSEL.NE.2) MINT(123)=0
02362       IF(MSTP(14).GE.11.AND.MSTP(14).LE.19) THEN
02363         IF(MSTP(14).EQ.11) MINT(123)=0
02364         IF(MSTP(14).EQ.12.OR.MSTP(14).EQ.14) MINT(123)=5
02365         IF(MSTP(14).EQ.13.OR.MSTP(14).EQ.17) MINT(123)=6
02366         IF(MSTP(14).EQ.15) MINT(123)=2
02367         IF(MSTP(14).EQ.16.OR.MSTP(14).EQ.18) MINT(123)=7
02368         IF(MSTP(14).EQ.19) MINT(123)=3
02369       ELSEIF(MSTP(14).GE.21.AND.MSTP(14).LE.24) THEN
02370         IF(MSTP(14).EQ.21) MINT(123)=0
02371         IF(MSTP(14).EQ.22.OR.MSTP(14).EQ.23) MINT(123)=4
02372         IF(MSTP(14).EQ.24) MINT(123)=1
02373       ELSEIF(MSTP(14).GE.26.AND.MSTP(14).LE.29) THEN
02374         IF(MSTP(14).EQ.26.OR.MSTP(14).EQ.28) MINT(123)=8
02375         IF(MSTP(14).EQ.27.OR.MSTP(14).EQ.29) MINT(123)=9
02376       ENDIF
02377  
02378 C...Set up kinematics of process.
02379       CALL PYINKI(0)
02380  
02381 C...Set up kinematics for photons inside leptons.
02382       IF(MINT(141).NE.0.OR.MINT(142).NE.0) CALL PYGAGA(1,WTGAGA)
02383  
02384 C...Precalculate flavour selection weights.
02385       CALL PYKFIN
02386  
02387 C...Loop over gamma-p or gamma-gamma alternatives.
02388       CKIN3=CKIN(3)
02389       MSAV48=0  
02390       DO 160 IGA=1,MINT(121)
02391         CKIN(3)=CKIN3 
02392         MINT(122)=IGA
02393  
02394 C...Select partonic subprocesses to be included in the simulation.
02395         CALL PYINPR
02396         MINT(101)=1
02397         MINT(102)=1
02398         MINT(103)=MINT(11)
02399         MINT(104)=MINT(12)
02400   
02401 C...Count number of subprocesses on.
02402         MINT(48)=0
02403         DO 130 ISUB=1,500
02404           IF(MINT(50).EQ.0.AND.ISUB.GE.91.AND.ISUB.LE.96.AND.
02405      &    MSUB(ISUB).EQ.1.AND.MINT(121).GT.1) THEN
02406             MSUB(ISUB)=0 
02407           ELSEIF(MINT(50).EQ.0.AND.ISUB.GE.91.AND.ISUB.LE.96.AND.
02408      &    MSUB(ISUB).EQ.1) THEN
02409             WRITE(MSTU(11),5200) ISUB,CHLH(MINT(41)),CHLH(MINT(42))
02410             STOP
02411           ELSEIF(MSUB(ISUB).EQ.1.AND.ISET(ISUB).EQ.-1) THEN
02412             WRITE(MSTU(11),5300) ISUB
02413             STOP
02414           ELSEIF(MSUB(ISUB).EQ.1.AND.ISET(ISUB).LE.-2) THEN
02415             WRITE(MSTU(11),5400) ISUB
02416             STOP
02417           ELSEIF(MSUB(ISUB).EQ.1) THEN
02418             MINT(48)=MINT(48)+1
02419           ENDIF
02420   130   CONTINUE
02421         IF(MINT(121).EQ.1.AND.MINT(48).EQ.0) THEN
02422           WRITE(MSTU(11),5500)
02423           STOP
02424         ENDIF
02425         MINT(49)=MINT(48)-MSUB(91)-MSUB(92)-MSUB(93)-MSUB(94)
02426         MSAV48=MSAV48+MINT(48)
02427  
02428 C...Reset variables for cross-section calculation.
02429         DO 150 I=0,500
02430           DO 140 J=1,3
02431             NGEN(I,J)=0
02432             XSEC(I,J)=0D0
02433   140     CONTINUE
02434   150   CONTINUE
02435 
02436 C...Find parametrized total cross-sections.
02437         CALL PYXTOT
02438         VINT(318)=VINT(317)
02439  
02440 C...Maxima of differential cross-sections.
02441         IF(MSTP(121).LE.1) CALL PYMAXI
02442  
02443 C...Initialize possibility of pileup events.
02444         IF(MINT(121).GT.1) MSTP(131)=0
02445         IF(MSTP(131).NE.0) CALL PYPILE(1)
02446  
02447 C...Initialize multiple interactions with variable impact parameter.
02448         IF(MINT(50).EQ.1.AND.(MINT(49).NE.0.OR.MSTP(131).NE.0).AND.
02449      &  MSTP(82).GE.2) CALL PYMULT(1)
02450  
02451 C...Save results for gamma-p and gamma-gamma alternatives.
02452         IF(MINT(121).GT.1) CALL PYSAVE(1,IGA)
02453   160 CONTINUE
02454  
02455 C...Initialization finished.
02456       IF(MSAV48.EQ.0) THEN
02457         WRITE(MSTU(11),5500)
02458         STOP
02459       ENDIF
02460   170 IF(MSTP(122).GE.1) WRITE(MSTU(11),5600)
02461  
02462 C...Formats for initialization information.
02463  5100 FORMAT('1',18('*'),1X,'PYINIT: initialization of PYTHIA ',
02464      &'routines',1X,17('*'))
02465  5200 FORMAT(1X,'Error: process number ',I3,' not meaningful for ',A6,
02466      &'-',A6,' interactions.'/1X,'Execution stopped!')
02467  5300 FORMAT(1X,'Error: requested subprocess',I4,' not implemented.'/
02468      &1X,'Execution stopped!')
02469  5400 FORMAT(1X,'Error: requested subprocess',I4,' not existing.'/
02470      &1X,'Execution stopped!')
02471  5500 FORMAT(1X,'Error: no subprocess switched on.'/
02472      &1X,'Execution stopped.')
02473  5600 FORMAT(/1X,22('*'),1X,'PYINIT: initialization completed',1X,
02474      &22('*'))
02475  
02476       RETURN
02477       END
02478  
02479 C*********************************************************************
02480  
02481 C...PYEVNT
02482 C...Administers the generation of a high-pT event via calls to
02483 C...a number of subroutines.
02484  
02485       SUBROUTINE PYEVNT
02486  
02487 C...Double precision and integer declarations.
02488       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
02489       IMPLICIT INTEGER(I-N)
02490       INTEGER PYK,PYCHGE,PYCOMP
02491 C...Commonblocks.
02492       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
02493       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
02494       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
02495       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
02496       COMMON/PYINT1/MINT(400),VINT(400)
02497       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
02498       COMMON/PYINT4/MWID(500),WIDS(500,5)
02499       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
02500       COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
02501       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT2/,
02502      &/PYINT4/,/PYINT5/,/PYUPPR/
02503 C...Local array.
02504       DIMENSION VTX(4)
02505  
02506 C...Initial values for some counters.
02507       N=0
02508       MINT(5)=MINT(5)+1
02509       MINT(7)=0
02510       MINT(8)=0
02511       MINT(83)=0
02512       MINT(84)=MSTP(126)
02513       MSTU(24)=0
02514       MSTU70=0
02515       MSTJ14=MSTJ(14)
02516  
02517 C...If variable energies: redo incoming kinematics and cross-section.
02518       MSTI(61)=0
02519       IF(MSTP(171).EQ.1) THEN
02520         CALL PYINKI(1)
02521         IF(MSTI(61).EQ.1) THEN
02522           MINT(5)=MINT(5)-1
02523           RETURN
02524         ENDIF
02525         IF(MINT(121).GT.1) CALL PYSAVE(3,1)
02526         CALL PYXTOT
02527       ENDIF
02528  
02529 C...Loop over number of pileup events; check space left.
02530       IF(MSTP(131).LE.0) THEN
02531         NPILE=1
02532       ELSE
02533         CALL PYPILE(2)
02534         NPILE=MINT(81)
02535       ENDIF
02536       DO 260 IPILE=1,NPILE
02537         IF(MINT(84)+100.GE.MSTU(4)) THEN
02538           CALL PYERRM(11,
02539      &    '(PYEVNT:) no more space in PYJETS for pileup events')
02540           IF(MSTU(21).GE.1) GOTO 270
02541         ENDIF
02542         MINT(82)=IPILE
02543  
02544 C...Generate variables of hard scattering.
02545         MINT(51)=0
02546         MSTI(52)=0
02547   100   CONTINUE
02548         IF(MINT(51).NE.0.OR.MSTU(24).NE.0) MSTI(52)=MSTI(52)+1
02549         MINT(31)=0
02550         MINT(51)=0
02551         MINT(57)=0
02552         CALL PYRAND
02553         IF(MSTI(61).EQ.1) THEN
02554           MINT(5)=MINT(5)-1
02555           RETURN
02556         ENDIF
02557         IF(MINT(51).EQ.2) RETURN
02558         ISUB=MINT(1)
02559         IF(MSTP(111).EQ.-1) GOTO 250
02560  
02561         IF((ISUB.LE.90.OR.ISUB.GE.95).AND.ISUB.NE.99) THEN
02562 C...Hard scattering (including low-pT):
02563 C...reconstruct kinematics and colour flow of hard scattering.
02564           MINT31=MINT(31)
02565   110     MINT(31)=MINT31
02566           MINT(51)=0
02567           CALL PYSCAT
02568           IF(MINT(51).EQ.1) GOTO 100
02569           IPU1=MINT(84)+1
02570           IPU2=MINT(84)+2
02571           IF(ISUB.EQ.95) GOTO 130
02572  
02573 C...Showering of initial state partons (optional).
02574           ALAMSV=PARJ(81)
02575           PARJ(81)=PARP(72)
02576           IF(MSTP(61).GE.1.AND.MINT(47).GE.2) CALL PYSSPA(IPU1,IPU2)
02577           PARJ(81)=ALAMSV
02578           IF(MINT(51).EQ.1) GOTO 100
02579  
02580 C...Showering of final state partons (optional).
02581           ALAMSV=PARJ(81)
02582           PARJ(81)=PARP(72)
02583           IF(MSTP(71).GE.1.AND.ISET(ISUB).GE.2.AND.ISET(ISUB).LE.10)
02584      &    THEN
02585             IPU3=MINT(84)+3
02586             IPU4=MINT(84)+4
02587             IF(ISET(ISUB).EQ.5) IPU4=-3
02588             QMAX=VINT(55)
02589             IF(ISET(ISUB).EQ.2) QMAX=SQRT(PARP(71))*VINT(55)
02590             CALL PYSHOW(IPU3,IPU4,QMAX)
02591           ELSEIF(MSTP(71).GE.1.AND.ISET(ISUB).EQ.11.AND.NFUP.GE.1) THEN
02592             DO 120 IUP=1,NFUP
02593               IPU3=IFUP(IUP,1)+MINT(84)
02594               IPU4=IFUP(IUP,2)+MINT(84)
02595               QMAX=SQRT(MAX(0D0,Q2UP(IUP)))
02596               CALL PYSHOW(IPU3,IPU4,QMAX)
02597   120       CONTINUE
02598           ENDIF
02599           PARJ(81)=ALAMSV
02600  
02601 C...Decay of final state resonances.
02602           MINT(32)=0
02603           IF(MSTP(41).GE.1.AND.ISET(ISUB).LE.10) CALL PYRESD(0)
02604           IF(MINT(51).EQ.1) GOTO 100
02605           MINT(52)=N
02606  
02607 C...Multiple interactions.
02608           IF(MSTP(81).GE.1.AND.MINT(50).EQ.1) CALL PYMULT(6)
02609           MINT(53)=N
02610  
02611 C...Hadron remnants and primordial kT.
02612   130     CALL PYREMN(IPU1,IPU2)
02613           IF(MINT(51).EQ.1.AND.MINT(57).GE.1.AND.MINT(57).LE.5) GOTO 110
02614           IF(MINT(51).EQ.1) GOTO 100
02615  
02616          ELSEIF(ISUB.NE.99) THEN
02617 C...Diffractive and elastic scattering.
02618           CALL PYDIFF
02619 
02620         ELSE
02621 C...DIS scattering (photon flux external).
02622           CALL PYDISG
02623           IF(MINT(51).EQ.1) GOTO 100
02624         ENDIF
02625  
02626 C...Check that no odd resonance left undecayed.
02627         IF(MSTP(111).GE.1) THEN
02628           NFIX=N
02629           DO 140 I=MINT(84)+1,NFIX
02630             IF(K(I,1).GE.1.AND.K(I,1).LE.10.AND.K(I,2).NE.21.AND.
02631      &      K(I,2).NE.22) THEN
02632               IF(MWID(PYCOMP(K(I,2))).NE.0) THEN
02633                 CALL PYRESD(I)
02634                 IF(MINT(51).EQ.1) GOTO 100
02635               ENDIF
02636             ENDIF
02637   140     CONTINUE
02638         ENDIF
02639  
02640 C...Boost hadronic subsystem to overall rest frame.
02641 C..(Only relevant when photon inside lepton beam.)
02642         IF(MINT(141).NE.0.OR.MINT(142).NE.0) CALL PYGAGA(4,WTGAGA)
02643  
02644 C...Recalculate energies from momenta and masses (if desired).
02645         IF(MSTP(113).GE.1) THEN
02646           DO 150 I=MINT(83)+1,N
02647             IF(K(I,1).GT.0.AND.K(I,1).LE.10) P(I,4)=SQRT(P(I,1)**2+
02648      &      P(I,2)**2+P(I,3)**2+P(I,5)**2)
02649   150     CONTINUE
02650           NRECAL=N
02651         ENDIF
02652  
02653 C...Rearrange partons along strings, check invariant mass cuts.
02654         MSTU(28)=0
02655         IF(MSTP(111).LE.0) MSTJ(14)=-1
02656         CALL PYPREP(MINT(84)+1)
02657         MSTJ(14)=MSTJ14
02658         IF(MSTP(112).EQ.1.AND.MSTU(28).EQ.3) GOTO 100
02659         IF(MSTP(125).EQ.0.OR.MSTP(125).EQ.1) THEN
02660           DO 180 I=MINT(84)+1,N
02661             IF(K(I,2).EQ.94) THEN
02662               DO 170 I1=I+1,MIN(N,I+3)
02663                 IF(K(I1,3).EQ.I) THEN
02664                   K(I1,3)=MOD(K(I1,4)/MSTU(5),MSTU(5))
02665                   IF(K(I1,3).EQ.0) THEN
02666                     DO 160 II=MINT(84)+1,I-1
02667                         IF(K(II,2).EQ.K(I1,2)) THEN
02668                           IF(MOD(K(II,4),MSTU(5)).EQ.I1.OR.
02669      &                    MOD(K(II,5),MSTU(5)).EQ.I1) K(I1,3)=II
02670                         ENDIF
02671   160               CONTINUE
02672                     IF(K(I+1,3).EQ.0) K(I+1,3)=K(I,3)
02673                   ENDIF
02674                 ENDIF
02675   170         CONTINUE
02676             ENDIF
02677   180     CONTINUE
02678           CALL PYEDIT(12)
02679           CALL PYEDIT(14)
02680           IF(MSTP(125).EQ.0) CALL PYEDIT(15)
02681           IF(MSTP(125).EQ.0) MINT(4)=0
02682           DO 200 I=MINT(83)+1,N
02683             IF(K(I,1).EQ.11.AND.K(I,4).EQ.0.AND.K(I,5).EQ.0) THEN
02684               DO 190 I1=I+1,N
02685                 IF(K(I1,3).EQ.I.AND.K(I,4).EQ.0) K(I,4)=I1
02686                 IF(K(I1,3).EQ.I) K(I,5)=I1
02687   190         CONTINUE
02688             ENDIF
02689   200     CONTINUE
02690         ENDIF
02691  
02692 C...Introduce separators between sections in PYLIST event listing.
02693         IF(IPILE.EQ.1.AND.MSTP(125).LE.0) THEN
02694           MSTU70=1
02695           MSTU(71)=N
02696         ELSEIF(IPILE.EQ.1) THEN
02697           MSTU70=3
02698           MSTU(71)=2
02699           MSTU(72)=MINT(4)
02700           MSTU(73)=N
02701         ENDIF
02702  
02703 C...Go back to lab frame (needed for vertices, also in fragmentation).
02704         CALL PYFRAM(1)
02705  
02706 C...Set nonvanishing production vertex (optional).
02707         IF(MSTP(151).EQ.1) THEN
02708           DO 210 J=1,4
02709             VTX(J)=PARP(150+J)*SQRT(-2D0*LOG(MAX(1D-10,PYR(0))))*
02710      &      SIN(PARU(2)*PYR(0))
02711   210     CONTINUE
02712           DO 230 I=MINT(83)+1,N
02713             DO 220 J=1,4
02714               V(I,J)=V(I,J)+VTX(J)
02715   220       CONTINUE
02716   230     CONTINUE
02717         ENDIF
02718  
02719 C...Perform hadronization (if desired).
02720         IF(MSTP(111).GE.1) THEN
02721           CALL PYEXEC
02722           IF(MSTU(24).NE.0) GOTO 100
02723         ENDIF
02724         IF(MSTP(113).GE.1) THEN
02725           DO 240 I=NRECAL,N
02726             IF(P(I,5).GT.0D0) P(I,4)=SQRT(P(I,1)**2+
02727      &      P(I,2)**2+P(I,3)**2+P(I,5)**2)
02728   240     CONTINUE
02729         ENDIF
02730         IF(MSTP(125).EQ.0.OR.MSTP(125).EQ.1) CALL PYEDIT(14)
02731  
02732 C...Store event information and calculate Monte Carlo estimates of
02733 C...subprocess cross-sections.
02734   250   IF(IPILE.EQ.1) CALL PYDOCU
02735  
02736 C...Set counters for current pileup event and loop to next one.
02737         MSTI(41)=IPILE
02738         IF(IPILE.GE.2.AND.IPILE.LE.10) MSTI(40+IPILE)=ISUB
02739         IF(MSTU70.LT.10) THEN
02740           MSTU70=MSTU70+1
02741           MSTU(70+MSTU70)=N
02742         ENDIF
02743         MINT(83)=N
02744         MINT(84)=N+MSTP(126)
02745         IF(IPILE.LT.NPILE) CALL PYFRAM(2)
02746   260 CONTINUE
02747  
02748 C...Generic information on pileup events. Reconstruct missing history.
02749       IF(MSTP(131).EQ.1.AND.MSTP(133).GE.1) THEN
02750         PARI(91)=VINT(132)
02751         PARI(92)=VINT(133)
02752         PARI(93)=VINT(134)
02753         IF(MSTP(133).GE.2) PARI(93)=PARI(93)*XSEC(0,3)/VINT(131)
02754       ENDIF
02755       CALL PYEDIT(16)
02756  
02757 C...Transform to the desired coordinate frame.
02758   270 CALL PYFRAM(MSTP(124))
02759       MSTU(70)=MSTU70
02760       PARU(21)=VINT(1)
02761  
02762       RETURN
02763       END
02764  
02765 C***********************************************************************
02766  
02767 C...PYSTAT
02768 C...Prints out information about cross-sections, decay widths, branching
02769 C...ratios, kinematical limits, status codes and parameter values.
02770  
02771       SUBROUTINE PYSTAT(MSTAT)
02772  
02773 C...Double precision and integer declarations.
02774       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
02775       IMPLICIT INTEGER(I-N)
02776       INTEGER PYK,PYCHGE,PYCOMP
02777 C...Parameter statement to help give large particle numbers.
02778       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
02779 C...Commonblocks.
02780       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
02781       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
02782       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
02783       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
02784       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
02785       COMMON/PYINT1/MINT(400),VINT(400)
02786       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
02787       COMMON/PYINT4/MWID(500),WIDS(500,5)
02788       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
02789       COMMON/PYINT6/PROC(0:500)
02790       CHARACTER PROC*28
02791       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
02792       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
02793      &/PYINT2/,/PYINT4/,/PYINT5/,/PYINT6/,/PYMSSM/
02794 C...Local arrays, character variables and data.
02795       DIMENSION WDTP(0:200),WDTE(0:200,0:5)
02796       CHARACTER PROGA(6)*28,CHAU*16,CHKF*16,CHD1*16,CHD2*16,CHD3*16,
02797      &CHIN(2)*12,STATE(-1:5)*4,CHKIN(21)*18,DISGA(2)*28,
02798      &PROGG9(13)*28,PROGG4(4)*28,PROGG2(2)*28,PROGP4(4)*28
02799       DATA PROGA/
02800      &'VMD/hadron * VMD            ','VMD/hadron * direct         ',
02801      &'VMD/hadron * anomalous      ','direct * direct             ',
02802      &'direct * anomalous          ','anomalous * anomalous       '/
02803       DATA DISGA/'e * VMD','e * anomalous'/
02804       DATA PROGG9/
02805      &'direct * direct             ','direct * VMD                ',
02806      &'direct * anomalous          ','VMD * direct                ',
02807      &'VMD * VMD                   ','VMD * anomalous             ',
02808      &'anomalous * direct          ','anomalous * VMD             ',
02809      &'anomalous * anomalous       ','DIS * VMD                   ',
02810      &'DIS * anomalous             ','VMD * DIS                   ',
02811      &'anomalous * DIS             '/
02812       DATA PROGG4/
02813      &'direct * direct             ','direct * resolved           ',
02814      &'resolved * direct           ','resolved * resolved         '/
02815       DATA PROGG2/
02816      &'direct * hadron             ','resolved * hadron           '/
02817       DATA PROGP4/
02818      &'VMD * hadron                ','direct * hadron             ',
02819      &'anomalous * hadron          ','DIS * hadron                '/
02820       DATA STATE/'----','off ','on  ','on/+','on/-','on/1','on/2'/,
02821      &CHKIN/' m_hard (GeV/c^2) ',' p_T_hard (GeV/c) ',
02822      &'m_finite (GeV/c^2)','   y*_subsystem   ','     y*_large     ',
02823      &'     y*_small     ','    eta*_large    ','    eta*_small    ',
02824      &'cos(theta*)_large ','cos(theta*)_small ','       x_1        ',
02825      &'       x_2        ','       x_F        ',' cos(theta_hard)  ',
02826      &'m''_hard (GeV/c^2) ','       tau        ','        y*        ',
02827      &'cos(theta_hard^-) ','cos(theta_hard^+) ','      x_T^2       ',
02828      &'       tau''       '/
02829  
02830 C...Cross-sections.
02831       IF(MSTAT.LE.1) THEN
02832         IF(MINT(121).GT.1) CALL PYSAVE(5,0)
02833         WRITE(MSTU(11),5000)
02834         WRITE(MSTU(11),5100)
02835         WRITE(MSTU(11),5200) 0,PROC(0),NGEN(0,3),NGEN(0,1),XSEC(0,3)
02836         DO 100 I=1,500
02837           IF(MSUB(I).NE.1) GOTO 100
02838           WRITE(MSTU(11),5200) I,PROC(I),NGEN(I,3),NGEN(I,1),XSEC(I,3)
02839   100   CONTINUE
02840         IF(MINT(121).GT.1) THEN
02841           WRITE(MSTU(11),5300)
02842           DO 110 IGA=1,MINT(121)
02843             CALL PYSAVE(3,IGA)
02844             IF(MINT(121).EQ.2.AND.MSTP(14).EQ.10) THEN
02845               WRITE(MSTU(11),5200) IGA,DISGA(IGA),NGEN(0,3),NGEN(0,1),
02846      &        XSEC(0,3)
02847             ELSEIF(MINT(121).EQ.9.OR.MINT(121).EQ.13) THEN
02848               WRITE(MSTU(11),5200) IGA,PROGG9(IGA),NGEN(0,3),NGEN(0,1),
02849      &        XSEC(0,3)
02850             ELSEIF(MINT(121).EQ.4.AND.MSTP(14).EQ.30) THEN
02851               WRITE(MSTU(11),5200) IGA,PROGP4(IGA),NGEN(0,3),NGEN(0,1),
02852      &        XSEC(0,3)
02853             ELSEIF(MINT(121).EQ.4) THEN
02854               WRITE(MSTU(11),5200) IGA,PROGG4(IGA),NGEN(0,3),NGEN(0,1),
02855      &        XSEC(0,3)
02856             ELSEIF(MINT(121).EQ.2) THEN
02857               WRITE(MSTU(11),5200) IGA,PROGG2(IGA),NGEN(0,3),NGEN(0,1),
02858      &        XSEC(0,3)
02859             ELSE
02860               WRITE(MSTU(11),5200) IGA,PROGA(IGA),NGEN(0,3),NGEN(0,1),
02861      &        XSEC(0,3)
02862             ENDIF
02863   110     CONTINUE
02864           CALL PYSAVE(5,0)
02865         ENDIF
02866         WRITE(MSTU(11),5400) 1D0-DBLE(NGEN(0,3))/
02867      &  MAX(1D0,DBLE(NGEN(0,2)))
02868  
02869 C...Decay widths and branching ratios.
02870       ELSEIF(MSTAT.EQ.2) THEN
02871         WRITE(MSTU(11),5500)
02872         WRITE(MSTU(11),5600)
02873         DO 140 KC=1,500
02874           KF=KCHG(KC,4)
02875           CALL PYNAME(KF,CHKF)
02876           IOFF=0
02877           IF(KC.LE.22) THEN
02878             IF(KC.GT.2*MSTP(1).AND.KC.LE.10) GOTO 140
02879             IF(KC.GT.10+2*MSTP(1).AND.KC.LE.20) GOTO 140
02880             IF(KC.LE.5.OR.(KC.GE.11.AND.KC.LE.16)) IOFF=1
02881             IF(KC.EQ.18.AND.PMAS(18,1).LT.1D0) IOFF=1
02882             IF(KC.EQ.21.OR.KC.EQ.22) IOFF=1
02883           ELSE
02884             IF(MWID(KC).LE.0) GOTO 140
02885             IF(IMSS(1).LE.0.AND.(KF/KSUSY1.EQ.1.OR.
02886      &      KF/KSUSY1.EQ.2)) GOTO 140
02887           ENDIF
02888 C...Off-shell branchings.
02889           IF(IOFF.EQ.1) THEN
02890             NGP=0
02891             IF(KC.LE.20) NGP=(MOD(KC,10)+1)/2
02892             IF(NGP.LE.MSTP(1)) WRITE(MSTU(11),5700) KF,CHKF(1:10),
02893      &      PMAS(KC,1),0D0,0D0,STATE(MDCY(KC,1)),0D0
02894             DO 120 J=1,MDCY(KC,3)
02895               IDC=J+MDCY(KC,2)-1
02896               NGP1=0
02897               IF(IABS(KFDP(IDC,1)).LE.20) NGP1=
02898      &        (MOD(IABS(KFDP(IDC,1)),10)+1)/2
02899               NGP2=0
02900               IF(IABS(KFDP(IDC,2)).LE.20) NGP2=
02901      &        (MOD(IABS(KFDP(IDC,2)),10)+1)/2
02902               CALL PYNAME(KFDP(IDC,1),CHD1)
02903               CALL PYNAME(KFDP(IDC,2),CHD2)
02904               IF(KFDP(IDC,3).EQ.0) THEN
02905                 IF(MDME(IDC,2).EQ.102.AND.NGP1.LE.MSTP(1).AND.
02906      &          NGP2.LE.MSTP(1)) WRITE(MSTU(11),5800) IDC,CHD1(1:10),
02907      &          CHD2(1:10),0D0,0D0,STATE(MDME(IDC,1)),0D0
02908               ELSE
02909                 CALL PYNAME(KFDP(IDC,3),CHD3)
02910                 IF(MDME(IDC,2).EQ.102.AND.NGP1.LE.MSTP(1).AND.
02911      &          NGP2.LE.MSTP(1)) WRITE(MSTU(11),5900) IDC,CHD1(1:10),
02912      &          CHD2(1:10),CHD3(1:10),0D0,0D0,STATE(MDME(IDC,1)),0D0
02913               ENDIF
02914   120       CONTINUE
02915 C...On-shell decays.
02916           ELSE
02917             CALL PYWIDT(KF,PMAS(KC,1)**2,WDTP,WDTE)
02918             BRFIN=1D0
02919             IF(WDTE(0,0).LE.0D0) BRFIN=0D0
02920             WRITE(MSTU(11),5700) KF,CHKF(1:10),PMAS(KC,1),WDTP(0),1D0,
02921      &      STATE(MDCY(KC,1)),BRFIN
02922             DO 130 J=1,MDCY(KC,3)
02923               IDC=J+MDCY(KC,2)-1
02924               NGP1=0
02925               IF(IABS(KFDP(IDC,1)).LE.20) NGP1=
02926      &        (MOD(IABS(KFDP(IDC,1)),10)+1)/2
02927               NGP2=0
02928               IF(IABS(KFDP(IDC,2)).LE.20) NGP2=
02929      &        (MOD(IABS(KFDP(IDC,2)),10)+1)/2
02930               BRFIN=0D0
02931               IF(WDTE(0,0).GT.0D0) BRFIN=WDTE(J,0)/WDTE(0,0)
02932               CALL PYNAME(KFDP(IDC,1),CHD1)
02933               CALL PYNAME(KFDP(IDC,2),CHD2)
02934               IF(KFDP(IDC,3).EQ.0) THEN
02935                 IF(NGP1.LE.MSTP(1).AND.NGP2.LE.MSTP(1))
02936      &          WRITE(MSTU(11),5800) IDC,CHD1(1:10),
02937      &          CHD2(1:10),WDTP(J),WDTP(J)/WDTP(0),
02938      &          STATE(MDME(IDC,1)),BRFIN
02939               ELSE
02940                 CALL PYNAME(KFDP(IDC,3),CHD3)
02941                 IF(NGP1.LE.MSTP(1).AND.NGP2.LE.MSTP(1))
02942      &          WRITE(MSTU(11),5900) IDC,CHD1(1:10),
02943      &          CHD2(1:10),CHD3(1:10),WDTP(J),WDTP(J)/WDTP(0),
02944      &          STATE(MDME(IDC,1)),BRFIN
02945               ENDIF
02946   130       CONTINUE
02947           ENDIF
02948   140   CONTINUE
02949         WRITE(MSTU(11),6000)
02950  
02951 C...Allowed incoming partons/particles at hard interaction.
02952       ELSEIF(MSTAT.EQ.3) THEN
02953         WRITE(MSTU(11),6100)
02954         CALL PYNAME(MINT(11),CHAU)
02955         CHIN(1)=CHAU(1:12)
02956         CALL PYNAME(MINT(12),CHAU)
02957         CHIN(2)=CHAU(1:12)
02958         WRITE(MSTU(11),6200) CHIN(1),CHIN(2)
02959         DO 150 I=-20,22
02960           IF(I.EQ.0) GOTO 150
02961           IA=IABS(I)
02962           IF(IA.GT.MSTP(58).AND.IA.LE.10) GOTO 150
02963           IF(IA.GT.10+2*MSTP(1).AND.IA.LE.20) GOTO 150
02964           CALL PYNAME(I,CHAU)
02965           WRITE(MSTU(11),6300) CHAU,STATE(KFIN(1,I)),CHAU,
02966      &    STATE(KFIN(2,I))
02967   150   CONTINUE
02968         WRITE(MSTU(11),6400)
02969  
02970 C...User-defined limits on kinematical variables.
02971       ELSEIF(MSTAT.EQ.4) THEN
02972         WRITE(MSTU(11),6500)
02973         WRITE(MSTU(11),6600)
02974         SHRMAX=CKIN(2)
02975         IF(SHRMAX.LT.0D0) SHRMAX=VINT(1)
02976         WRITE(MSTU(11),6700) CKIN(1),CHKIN(1),SHRMAX
02977         PTHMIN=MAX(CKIN(3),CKIN(5))
02978         PTHMAX=CKIN(4)
02979         IF(PTHMAX.LT.0D0) PTHMAX=0.5D0*SHRMAX
02980         WRITE(MSTU(11),6800) CKIN(3),PTHMIN,CHKIN(2),PTHMAX
02981         WRITE(MSTU(11),6900) CHKIN(3),CKIN(6)
02982         DO 160 I=4,14
02983           WRITE(MSTU(11),6700) CKIN(2*I-1),CHKIN(I),CKIN(2*I)
02984   160   CONTINUE
02985         SPRMAX=CKIN(32)
02986         IF(SPRMAX.LT.0D0) SPRMAX=VINT(1)
02987         WRITE(MSTU(11),6700) CKIN(31),CHKIN(15),SPRMAX
02988         WRITE(MSTU(11),7000)
02989  
02990 C...Status codes and parameter values.
02991       ELSEIF(MSTAT.EQ.5) THEN
02992         WRITE(MSTU(11),7100)
02993         WRITE(MSTU(11),7200)
02994         DO 170 I=1,100
02995           WRITE(MSTU(11),7300) I,MSTP(I),PARP(I),100+I,MSTP(100+I),
02996      &    PARP(100+I)
02997   170   CONTINUE
02998  
02999 C...List of all processes implemented in the program.
03000       ELSEIF(MSTAT.EQ.6) THEN
03001         WRITE(MSTU(11),7400)
03002         WRITE(MSTU(11),7500)
03003         DO 180 I=1,500
03004           IF(ISET(I).LT.0) GOTO 180
03005           WRITE(MSTU(11),7600) I,PROC(I),ISET(I),KFPR(I,1),KFPR(I,2)
03006   180   CONTINUE
03007         WRITE(MSTU(11),7700)
03008       ENDIF
03009  
03010 C...Formats for printouts.
03011  5000 FORMAT('1',9('*'),1X,'PYSTAT:  Statistics on Number of ',
03012      &'Events and Cross-sections',1X,9('*'))
03013  5100 FORMAT(/1X,78('=')/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',12X,
03014      &'Subprocess',12X,'I',6X,'Number of points',6X,'I',4X,'Sigma',3X,
03015      &'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',34('-'),'I',28('-'),
03016      &'I',4X,'(mb)',4X,'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,'I',1X,
03017      &'N:o',1X,'Type',25X,'I',4X,'Generated',9X,'Tried',1X,'I',12X,
03018      &'I'/1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')/1X,'I',34X,'I',28X,
03019      &'I',12X,'I')
03020  5200 FORMAT(1X,'I',1X,I3,1X,A28,1X,'I',1X,I12,1X,I13,1X,'I',1X,1P,
03021      &D10.3,1X,'I')
03022  5300 FORMAT(1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')/
03023      &1X,'I',34X,'I',28X,'I',12X,'I')
03024  5400 FORMAT(1X,'I',34X,'I',28X,'I',12X,'I'/1X,78('=')//
03025      &1X,'********* Fraction of events that fail fragmentation ',
03026      &'cuts =',1X,F8.5,' *********'/)
03027  5500 FORMAT('1',27('*'),1X,'PYSTAT:  Decay Widths and Branching ',
03028      &'Ratios',1X,27('*'))
03029  5600 FORMAT(/1X,98('=')/1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/
03030      &1X,'I',5X,'Mother  -->  Branching/Decay Channel',8X,'I',1X,
03031      &'Width (GeV)',1X,'I',7X,'B.R.',1X,'I',1X,'Stat',1X,'I',2X,
03032      &'Eff. B.R.',1X,'I'/1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/
03033      &1X,98('='))
03034  5700 FORMAT(1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/1X,'I',1X,
03035      &I8,2X,A10,3X,'(m =',F10.3,')',2X,'-->',5X,'I',2X,1P,D10.3,0P,1X,
03036      &'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,1P,D10.3,0P,1X,'I')
03037  5800 FORMAT(1X,'I',1X,I8,2X,A10,1X,'+',1X,A10,15X,'I',2X,
03038      &1P,D10.3,0P,1X,'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,
03039      &1P,D10.3,0P,1X,'I')
03040  5900 FORMAT(1X,'I',1X,I8,2X,A10,1X,'+',1X,A10,1X,'+',1X,A10,2X,'I',2X,
03041      &1P,D10.3,0P,1X,'I',1X,1P,D10.3,0P,1X,'I',1X,A4,1X,'I',1X,
03042      &1P,D10.3,0P,1X,'I')
03043  6000 FORMAT(1X,'I',49X,'I',13X,'I',12X,'I',6X,'I',12X,'I'/1X,98('='))
03044  6100 FORMAT('1',7('*'),1X,'PYSTAT: Allowed Incoming Partons/',
03045      &'Particles at Hard Interaction',1X,7('*'))
03046  6200 FORMAT(/1X,78('=')/1X,'I',38X,'I',37X,'I'/1X,'I',1X,
03047      &'Beam particle:',1X,A12,10X,'I',1X,'Target particle:',1X,A12,7X,
03048      &'I'/1X,'I',38X,'I',37X,'I'/1X,'I',1X,'Content',6X,'State',19X,
03049      &'I',1X,'Content',6X,'State',18X,'I'/1X,'I',38X,'I',37X,'I'/1X,
03050      &78('=')/1X,'I',38X,'I',37X,'I')
03051  6300 FORMAT(1X,'I',1X,A9,5X,A4,19X,'I',1X,A9,5X,A4,18X,'I')
03052  6400 FORMAT(1X,'I',38X,'I',37X,'I'/1X,78('='))
03053  6500 FORMAT('1',12('*'),1X,'PYSTAT: User-Defined Limits on ',
03054      &'Kinematical Variables',1X,12('*'))
03055  6600 FORMAT(/1X,78('=')/1X,'I',76X,'I')
03056  6700 FORMAT(1X,'I',16X,1P,D10.3,0P,1X,'<',1X,A,1X,'<',1X,1P,D10.3,0P,
03057      &16X,'I')
03058  6800 FORMAT(1X,'I',3X,1P,D10.3,0P,1X,'(',1P,D10.3,0P,')',1X,'<',1X,A,
03059      &1X,'<',1X,1P,D10.3,0P,16X,'I')
03060  6900 FORMAT(1X,'I',29X,A,1X,'=',1X,1P,D10.3,0P,16X,'I')
03061  7000 FORMAT(1X,'I',76X,'I'/1X,78('='))
03062  7100 FORMAT('1',12('*'),1X,'PYSTAT: Summary of Status Codes and ',
03063      &'Parameter Values',1X,12('*'))
03064  7200 FORMAT(/3X,'I',4X,'MSTP(I)',9X,'PARP(I)',20X,'I',4X,'MSTP(I)',9X,
03065      &'PARP(I)'/)
03066  7300 FORMAT(1X,I3,5X,I6,6X,1P,D10.3,0P,18X,I3,5X,I6,6X,1P,D10.3)
03067  7400 FORMAT('1',13('*'),1X,'PYSTAT: List of implemented processes',
03068      &1X,13('*'))
03069  7500 FORMAT(/1X,65('=')/1X,'I',34X,'I',28X,'I'/1X,'I',12X,
03070      &'Subprocess',12X,'I',1X,'ISET',2X,'KFPR(I,1)',2X,'KFPR(I,2)',1X,
03071      &'I'/1X,'I',34X,'I',28X,'I'/1X,65('=')/1X,'I',34X,'I',28X,'I')
03072  7600 FORMAT(1X,'I',1X,I3,1X,A28,1X,'I',1X,I4,1X,I10,1X,I10,1X,'I')
03073  7700 FORMAT(1X,'I',34X,'I',28X,'I'/1X,65('='))
03074  
03075       RETURN
03076       END
03077  
03078 C*********************************************************************
03079  
03080 C...PYINRE
03081 C...Calculates full and effective widths of gauge bosons, stores
03082 C...masses and widths, rescales coefficients to be used for
03083 C...resonance production generation.
03084  
03085       SUBROUTINE PYINRE
03086  
03087 C...Double precision and integer declarations.
03088       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
03089       IMPLICIT INTEGER(I-N)
03090       INTEGER PYK,PYCHGE,PYCOMP
03091 C...Parameter statement to help give large particle numbers.
03092       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
03093 C...Commonblocks.
03094       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
03095       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
03096       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
03097       COMMON/PYDAT4/CHAF(500,2)
03098       CHARACTER CHAF*16
03099       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
03100       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
03101       COMMON/PYINT1/MINT(400),VINT(400)
03102       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
03103       COMMON/PYINT4/MWID(500),WIDS(500,5)
03104       COMMON/PYINT6/PROC(0:500)
03105       CHARACTER PROC*28
03106       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
03107       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYSUBS/,/PYPARS/,
03108      &/PYINT1/,/PYINT2/,/PYINT4/,/PYINT6/,/PYMSSM/
03109 C...Local arrays and data.
03110       DIMENSION WDTP(0:200),WDTE(0:200,0:5),WDTPM(0:200),
03111      &WDTEM(0:200,0:5),KCORD(500),PMORD(500)
03112  
03113 C...Born level couplings in MSSM Higgs doublet sector.
03114       XW=PARU(102)
03115       XWV=XW
03116       IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
03117       XW1=1D0-XW
03118       IF(MSTP(4).EQ.2) THEN
03119         TANBE=PARU(141)
03120         RATBE=((1D0-TANBE**2)/(1D0+TANBE**2))**2
03121         SQMZ=PMAS(23,1)**2
03122         SQMW=PMAS(24,1)**2
03123         SQMH=PMAS(25,1)**2
03124         SQMA=SQMH*(SQMZ-SQMH)/(SQMZ*RATBE-SQMH)
03125         SQMHP=0.5D0*(SQMA+SQMZ+SQRT((SQMA+SQMZ)**2-4D0*SQMA*SQMZ*RATBE))
03126         SQMHC=SQMA+SQMW
03127         IF(SQMH.GE.SQMZ.OR.MIN(SQMA,SQMHP,SQMHC).LE.0D0) THEN
03128           WRITE(MSTU(11),5000)
03129           STOP
03130         ENDIF
03131         PMAS(35,1)=SQRT(SQMHP)
03132         PMAS(36,1)=SQRT(SQMA)
03133         PMAS(37,1)=SQRT(SQMHC)
03134         ALSU=0.5D0*ATAN(2D0*TANBE*(SQMA+SQMZ)/((1D0-TANBE**2)*
03135      &  (SQMA-SQMZ)))
03136         BESU=ATAN(TANBE)
03137         PARU(142)=1D0
03138         PARU(143)=1D0
03139         PARU(161)=-SIN(ALSU)/COS(BESU)
03140         PARU(162)=COS(ALSU)/SIN(BESU)
03141         PARU(163)=PARU(161)
03142         PARU(164)=SIN(BESU-ALSU)
03143         PARU(165)=PARU(164)
03144         PARU(168)=SIN(BESU-ALSU)+0.5D0*COS(2D0*BESU)*SIN(BESU+ALSU)/XW
03145         PARU(171)=COS(ALSU)/COS(BESU)
03146         PARU(172)=SIN(ALSU)/SIN(BESU)
03147         PARU(173)=PARU(171)
03148         PARU(174)=COS(BESU-ALSU)
03149         PARU(175)=PARU(174)
03150         PARU(176)=COS(2D0*ALSU)*COS(BESU+ALSU)-2D0*SIN(2D0*ALSU)*
03151      &  SIN(BESU+ALSU)
03152         PARU(177)=COS(2D0*BESU)*COS(BESU+ALSU)
03153         PARU(178)=COS(BESU-ALSU)-0.5D0*COS(2D0*BESU)*COS(BESU+ALSU)/XW
03154         PARU(181)=TANBE
03155         PARU(182)=1D0/TANBE
03156         PARU(183)=PARU(181)
03157         PARU(184)=0D0
03158         PARU(185)=PARU(184)
03159         PARU(186)=COS(BESU-ALSU)
03160         PARU(187)=SIN(BESU-ALSU)
03161         PARU(188)=PARU(186)
03162         PARU(189)=PARU(187)
03163         PARU(190)=0D0
03164         PARU(195)=COS(BESU-ALSU)
03165       ENDIF
03166  
03167 C...Reset effective widths of gauge bosons.
03168       DO 110 I=1,500
03169         DO 100 J=1,5
03170           WIDS(I,J)=1D0
03171   100   CONTINUE
03172   110 CONTINUE
03173  
03174 C...Order resonances by increasing mass (except Z0 and W+/-).
03175       NRES=0
03176       DO 140 KC=1,500
03177         KF=KCHG(KC,4)
03178         IF(KF.EQ.0) GOTO 140
03179         IF(MWID(KC).EQ.0) GOTO 140
03180         IF(KC.EQ.7.OR.KC.EQ.8.OR.KC.EQ.17.OR.KC.EQ.18) THEN
03181           IF(MSTP(1).LE.3) GOTO 140
03182         ENDIF
03183         IF(KF/KSUSY1.EQ.1.OR.KF/KSUSY1.EQ.2) THEN
03184           IF(IMSS(1).LE.0) GOTO 140
03185         ENDIF
03186         NRES=NRES+1
03187         PMRES=PMAS(KC,1)
03188         IF(KC.EQ.23.OR.KC.EQ.24) PMRES=0D0
03189         DO 120 I1=NRES-1,1,-1
03190           IF(PMRES.GE.PMORD(I1)) GOTO 130
03191           KCORD(I1+1)=KCORD(I1)
03192           PMORD(I1+1)=PMORD(I1)
03193   120   CONTINUE
03194   130   KCORD(I1+1)=KC
03195         PMORD(I1+1)=PMRES
03196   140 CONTINUE
03197  
03198 C...Loop over possible resonances.
03199       DO 180 I=1,NRES
03200         KC=KCORD(I)
03201         KF=KCHG(KC,4)
03202  
03203 C...Check that no fourth generation channels on by mistake.
03204         IF(MSTP(1).LE.3) THEN
03205           DO 150 J=1,MDCY(KC,3)
03206             IDC=J+MDCY(KC,2)-1
03207             KFA1=IABS(KFDP(IDC,1))
03208             KFA2=IABS(KFDP(IDC,2))
03209             IF(KFA1.EQ.7.OR.KFA1.EQ.8.OR.KFA1.EQ.17.OR.KFA1.EQ.18.OR.
03210      &      KFA2.EQ.7.OR.KFA2.EQ.8.OR.KFA2.EQ.17.OR.KFA2.EQ.18)
03211      &      MDME(IDC,1)=-1
03212   150     CONTINUE
03213         ENDIF
03214  
03215 C...Check that no supersymmetric channels on by mistake.
03216         IF(IMSS(1).LE.0) THEN
03217           DO 160 J=1,MDCY(KC,3)
03218             IDC=J+MDCY(KC,2)-1
03219             KFA1S=IABS(KFDP(IDC,1))/KSUSY1
03220             KFA2S=IABS(KFDP(IDC,2))/KSUSY1
03221             IF(KFA1S.EQ.1.OR.KFA1S.EQ.2.OR.KFA2S.EQ.1.OR.KFA2S.EQ.2)
03222      &      MDME(IDC,1)=-1
03223   160     CONTINUE
03224         ENDIF
03225  
03226 C...Find mass and evaluate width.
03227         PMR=PMAS(KC,1)
03228         IF(KF.EQ.25.OR.KF.EQ.35.OR.KF.EQ.36) MINT(62)=1
03229         IF(MWID(KC).EQ.3) MINT(63)=1
03230         CALL PYWIDT(KF,PMR**2,WDTP,WDTE)
03231         MINT(51)=0
03232  
03233 C...Evaluate suppression factors due to non-simulated channels.
03234         IF(KCHG(KC,3).EQ.0) THEN
03235           WIDS(KC,1)=((WDTE(0,1)+WDTE(0,2))**2+
03236      &    2D0*(WDTE(0,1)+WDTE(0,2))*(WDTE(0,4)+WDTE(0,5))+
03237      &    2D0*WDTE(0,4)*WDTE(0,5))/WDTP(0)**2
03238           WIDS(KC,2)=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))/WDTP(0)
03239           WIDS(KC,3)=0D0
03240           WIDS(KC,4)=0D0
03241           WIDS(KC,5)=0D0
03242         ELSE
03243           IF(MWID(KC).EQ.3) MINT(63)=1
03244           CALL PYWIDT(-KF,PMR**2,WDTPM,WDTEM)
03245           MINT(51)=0
03246           WIDS(KC,1)=((WDTE(0,1)+WDTE(0,2))*(WDTEM(0,1)+WDTEM(0,3))+
03247      &    (WDTE(0,1)+WDTE(0,2))*(WDTEM(0,4)+WDTEM(0,5))+
03248      &    (WDTE(0,4)+WDTE(0,5))*(WDTEM(0,1)+WDTEM(0,3))+
03249      &    WDTE(0,4)*WDTEM(0,5)+WDTE(0,5)*WDTEM(0,4))/WDTP(0)**2
03250           WIDS(KC,2)=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))/WDTP(0)
03251           WIDS(KC,3)=(WDTEM(0,1)+WDTEM(0,3)+WDTEM(0,4))/WDTP(0)
03252           WIDS(KC,4)=((WDTE(0,1)+WDTE(0,2))**2+
03253      &    2D0*(WDTE(0,1)+WDTE(0,2))*(WDTE(0,4)+WDTE(0,5))+
03254      &    2D0*WDTE(0,4)*WDTE(0,5))/WDTP(0)**2
03255           WIDS(KC,5)=((WDTEM(0,1)+WDTEM(0,3))**2+
03256      &    2D0*(WDTEM(0,1)+WDTEM(0,3))*(WDTEM(0,4)+WDTEM(0,5))+
03257      &    2D0*WDTEM(0,4)*WDTEM(0,5))/WDTP(0)**2
03258         ENDIF
03259  
03260 C...Set resonance widths and branching ratios;
03261 C...also on/off switch for decays.
03262         IF(MWID(KC).EQ.1.OR.MWID(KC).EQ.3) THEN
03263           PMAS(KC,2)=WDTP(0)
03264           PMAS(KC,3)=MIN(0.9D0*PMAS(KC,1),10D0*PMAS(KC,2))
03265           MDCY(KC,1)=MSTP(41)
03266           DO 170 J=1,MDCY(KC,3)
03267             IDC=J+MDCY(KC,2)-1
03268             BRAT(IDC)=0D0
03269             IF(WDTP(0).GT.0D0) BRAT(IDC)=WDTP(J)/WDTP(0)
03270   170     CONTINUE
03271         ENDIF
03272   180 CONTINUE
03273  
03274 C...Flavours of leptoquark: redefine charge and name.
03275       KFLQQ=KFDP(MDCY(39,2),1)
03276       KFLQL=KFDP(MDCY(39,2),2)
03277       KCHG(39,1)=KCHG(PYCOMP(KFLQQ),1)*ISIGN(1,KFLQQ)+
03278      &KCHG(PYCOMP(KFLQL),1)*ISIGN(1,KFLQL)
03279       LL=1
03280       IF(IABS(KFLQL).EQ.13) LL=2
03281       IF(IABS(KFLQL).EQ.15) LL=3
03282       CHAF(39,1)='LQ_'//CHAF(IABS(KFLQQ),1)(1:1)//
03283      &CHAF(IABS(KFLQL),1)(1:LL)//' '
03284       CHAF(39,2)=CHAF(39,2)(1:4+LL)//'bar '
03285  
03286 C...Special cases in treatment of gamma*/Z0: redefine process name.
03287       IF(MSTP(43).EQ.1) THEN
03288         PROC(1)='f + fbar -> gamma*'
03289         PROC(15)='f + fbar -> g + gamma*'
03290         PROC(19)='f + fbar -> gamma + gamma*'
03291         PROC(30)='f + g -> f + gamma*'
03292         PROC(35)='f + gamma -> f + gamma*'
03293       ELSEIF(MSTP(43).EQ.2) THEN
03294         PROC(1)='f + fbar -> Z0'
03295         PROC(15)='f + fbar -> g + Z0'
03296         PROC(19)='f + fbar -> gamma + Z0'
03297         PROC(30)='f + g -> f + Z0'
03298         PROC(35)='f + gamma -> f + Z0'
03299       ELSEIF(MSTP(43).EQ.3) THEN
03300         PROC(1)='f + fbar -> gamma*/Z0'
03301         PROC(15)='f + fbar -> g + gamma*/Z0'
03302         PROC(19)='f + fbar -> gamma + gamma*/Z0'
03303         PROC(30)='f + g -> f + gamma*/Z0'
03304         PROC(35)='f + gamma -> f + gamma*/Z0'
03305       ENDIF
03306  
03307 C...Special cases in treatment of gamma*/Z0/Z'0: redefine process name.
03308       IF(MSTP(44).EQ.1) THEN
03309         PROC(141)='f + fbar -> gamma*'
03310       ELSEIF(MSTP(44).EQ.2) THEN
03311         PROC(141)='f + fbar -> Z0'
03312       ELSEIF(MSTP(44).EQ.3) THEN
03313         PROC(141)='f + fbar -> Z''0'
03314       ELSEIF(MSTP(44).EQ.4) THEN
03315         PROC(141)='f + fbar -> gamma*/Z0'
03316       ELSEIF(MSTP(44).EQ.5) THEN
03317         PROC(141)='f + fbar -> gamma*/Z''0'
03318       ELSEIF(MSTP(44).EQ.6) THEN
03319         PROC(141)='f + fbar -> Z0/Z''0'
03320       ELSEIF(MSTP(44).EQ.7) THEN
03321         PROC(141)='f + fbar -> gamma*/Z0/Z''0'
03322       ENDIF
03323  
03324 C...Special cases in treatment of WW -> WW: redefine process name.
03325       IF(MSTP(45).EQ.1) THEN
03326         PROC(77)='W+ + W+ -> W+ + W+'
03327       ELSEIF(MSTP(45).EQ.2) THEN
03328         PROC(77)='W+ + W- -> W+ + W-'
03329       ELSEIF(MSTP(45).EQ.3) THEN
03330         PROC(77)='W+/- + W+/- -> W+/- + W+/-'
03331       ENDIF
03332  
03333 C...Format for error information.
03334  5000 FORMAT(1X,'Error: unphysical input tan^2(beta) and m_H ',
03335      &'combination'/1X,'Execution stopped!')
03336  
03337       RETURN
03338       END
03339  
03340 C*********************************************************************
03341  
03342 C...PYINBM
03343 C...Identifies the two incoming particles and the choice of frame.
03344  
03345        SUBROUTINE PYINBM(CHFRAM,CHBEAM,CHTARG,WIN)
03346  
03347 C...Double precision and integer declarations.
03348       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
03349       IMPLICIT INTEGER(I-N)
03350       INTEGER PYK,PYCHGE,PYCOMP
03351 C...Commonblocks.
03352       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
03353       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
03354       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
03355       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
03356       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
03357       COMMON/PYINT1/MINT(400),VINT(400)
03358       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
03359 C...Local arrays, character variables and data.
03360       CHARACTER CHFRAM*12,CHBEAM*12,CHTARG*12,CHCOM(3)*12,CHALP(2)*26,
03361      &CHIDNT(3)*12,CHTEMP*12,CHCDE(35)*12,CHINIT*76
03362       DIMENSION LEN(3),KCDE(35),PM(2)
03363       DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
03364      &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
03365       DATA CHCDE/    'e-          ','e+          ','nu_e        ',
03366      &'nu_ebar     ','mu-         ','mu+         ','nu_mu       ',
03367      &'nu_mubar    ','tau-        ','tau+        ','nu_tau      ',
03368      &'nu_taubar   ','pi+         ','pi-         ','n0          ',
03369      &'nbar0       ','p+          ','pbar-       ','gamma       ',
03370      &'lambda0     ','sigma-      ','sigma0      ','sigma+      ',
03371      &'xi-         ','xi0         ','omega-      ','pi0         ',
03372      &'reggeon     ','pomeron     ','gamma/e-    ','gamma/e+    ',
03373      &'gamma/mu-   ','gamma/mu+   ','gamma/tau-  ','gamma/tau+  '/
03374       DATA KCDE/11,-11,12,-12,13,-13,14,-14,15,-15,16,-16,
03375      &211,-211,2112,-2112,2212,-2212,22,3122,3112,3212,3222,
03376      &3312,3322,3334,111,28,29,6*22/
03377  
03378 C...Store initial energy. Default frame.
03379       VINT(290)=WIN
03380       MINT(111)=0
03381  
03382 C...Convert character variables to lowercase and find their length.
03383       CHCOM(1)=CHFRAM
03384       CHCOM(2)=CHBEAM
03385       CHCOM(3)=CHTARG
03386       DO 130 I=1,3
03387         LEN(I)=12
03388         DO 110 LL=12,1,-1
03389           IF(LEN(I).EQ.LL.AND.CHCOM(I)(LL:LL).EQ.' ') LEN(I)=LL-1
03390           DO 100 LA=1,26
03391             IF(CHCOM(I)(LL:LL).EQ.CHALP(2)(LA:LA)) CHCOM(I)(LL:LL)=
03392      &      CHALP(1)(LA:LA)
03393   100     CONTINUE
03394   110   CONTINUE
03395         CHIDNT(I)=CHCOM(I)
03396  
03397 C...Fix up bar, underscore and charge in particle name (if needed).
03398         DO 120 LL=1,10
03399           IF(CHIDNT(I)(LL:LL).EQ.'~') THEN
03400             CHTEMP=CHIDNT(I)
03401             CHIDNT(I)=CHTEMP(1:LL-1)//'bar'//CHTEMP(LL+1:10)//'  '
03402           ENDIF
03403   120   CONTINUE
03404         IF(CHIDNT(I)(1:2).EQ.'nu'.AND.CHIDNT(I)(3:3).NE.'_') THEN
03405           CHTEMP=CHIDNT(I)
03406           CHIDNT(I)='nu_'//CHTEMP(3:7)
03407         ELSEIF(CHIDNT(I)(1:2).EQ.'n ') THEN
03408           CHIDNT(I)(1:3)='n0 '
03409         ELSEIF(CHIDNT(I)(1:4).EQ.'nbar') THEN
03410           CHIDNT(I)(1:5)='nbar0'
03411         ELSEIF(CHIDNT(I)(1:2).EQ.'p ') THEN
03412           CHIDNT(I)(1:3)='p+ '
03413         ELSEIF(CHIDNT(I)(1:4).EQ.'pbar'.OR.
03414      &    CHIDNT(I)(1:2).EQ.'p-') THEN
03415           CHIDNT(I)(1:5)='pbar-'
03416         ELSEIF(CHIDNT(I)(1:6).EQ.'lambda') THEN
03417           CHIDNT(I)(7:7)='0'
03418         ELSEIF(CHIDNT(I)(1:3).EQ.'reg') THEN
03419           CHIDNT(I)(1:7)='reggeon'
03420         ELSEIF(CHIDNT(I)(1:3).EQ.'pom') THEN
03421           CHIDNT(I)(1:7)='pomeron'
03422         ENDIF
03423   130 CONTINUE
03424  
03425 C...Identify free initialization.
03426       IF(CHCOM(1)(1:2).EQ.'no') THEN
03427         MINT(65)=1
03428         RETURN
03429       ENDIF
03430  
03431 C...Identify incoming beam and target particles.
03432       DO 160 I=1,2
03433         DO 140 J=1,35
03434           IF(CHIDNT(I+1).EQ.CHCDE(J)) MINT(10+I)=KCDE(J)
03435   140   CONTINUE
03436         PM(I)=PYMASS(MINT(10+I))
03437         VINT(2+I)=PM(I)
03438         MINT(140+I)=0
03439         IF(MINT(10+I).EQ.22.AND.CHIDNT(I+1)(6:6).EQ.'/') THEN
03440           CHTEMP=CHIDNT(I+1)(7:12)//' '
03441           DO 150 J=1,12
03442             IF(CHTEMP.EQ.CHCDE(J)) MINT(140+I)=KCDE(J)
03443   150     CONTINUE
03444           PM(I)=PYMASS(MINT(140+I))
03445           VINT(302+I)=PM(I)
03446         ENDIF
03447   160 CONTINUE
03448       IF(MINT(11).EQ.0) WRITE(MSTU(11),5000) CHBEAM(1:LEN(2))
03449       IF(MINT(12).EQ.0) WRITE(MSTU(11),5100) CHTARG(1:LEN(3))
03450       IF(MINT(11).EQ.0.OR.MINT(12).EQ.0) STOP
03451  
03452 C...Identify choice of frame and input energies.
03453       CHINIT=' '
03454  
03455 C...Events defined in the CM frame.
03456       IF(CHCOM(1)(1:2).EQ.'cm') THEN
03457         MINT(111)=1
03458         S=WIN**2
03459         IF(MSTP(122).GE.1) THEN
03460           IF(CHCOM(2)(1:1).NE.'e') THEN
03461             LOFFS=(31-(LEN(2)+LEN(3)))/2
03462             CHINIT(LOFFS+1:76)='PYTHIA will be initialized for a '//
03463      &      CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
03464      &      ' collider'//' '
03465           ELSE
03466             LOFFS=(30-(LEN(2)+LEN(3)))/2
03467             CHINIT(LOFFS+1:76)='PYTHIA will be initialized for an '//
03468      &      CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
03469      &      ' collider'//' '
03470           ENDIF
03471           WRITE(MSTU(11),5200) CHINIT
03472           WRITE(MSTU(11),5300) WIN
03473         ENDIF
03474  
03475 C...Events defined in fixed target frame.
03476       ELSEIF(CHCOM(1)(1:3).EQ.'fix') THEN
03477         MINT(111)=2
03478         S=PM(1)**2+PM(2)**2+2D0*PM(2)*SQRT(PM(1)**2+WIN**2)
03479         IF(MSTP(122).GE.1) THEN
03480           LOFFS=(29-(LEN(2)+LEN(3)))/2
03481           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
03482      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
03483      &    ' fixed target'//' '
03484           WRITE(MSTU(11),5200) CHINIT
03485           WRITE(MSTU(11),5400) WIN
03486           WRITE(MSTU(11),5500) SQRT(S)
03487         ENDIF
03488  
03489 C...Frame defined by user three-vectors.
03490       ELSEIF(CHCOM(1)(1:3).EQ.'use') THEN
03491         MINT(111)=3
03492         P(1,5)=PM(1)
03493         P(2,5)=PM(2)
03494         P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
03495         P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
03496         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
03497      &  (P(1,3)+P(2,3))**2
03498         IF(MSTP(122).GE.1) THEN
03499           LOFFS=(22-(LEN(2)+LEN(3)))/2
03500           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
03501      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
03502      &    ' user configuration'//' '
03503           WRITE(MSTU(11),5200) CHINIT
03504           WRITE(MSTU(11),5600)
03505           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
03506           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
03507           WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
03508         ENDIF
03509  
03510 C...Frame defined by user four-vectors.
03511       ELSEIF(CHCOM(1)(1:4).EQ.'four') THEN
03512         MINT(111)=4
03513         PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
03514         P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
03515         PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
03516         P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
03517         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
03518      &  (P(1,3)+P(2,3))**2
03519         IF(MSTP(122).GE.1) THEN
03520           LOFFS=(22-(LEN(2)+LEN(3)))/2
03521           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
03522      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
03523      &    ' user configuration'//' '
03524           WRITE(MSTU(11),5200) CHINIT
03525           WRITE(MSTU(11),5600)
03526           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
03527           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
03528           WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
03529         ENDIF
03530  
03531 C...Frame defined by user five-vectors.
03532       ELSEIF(CHCOM(1)(1:4).EQ.'five') THEN
03533         MINT(111)=5
03534         S=(P(1,4)+P(2,4))**2-(P(1,1)+P(2,1))**2-(P(1,2)+P(2,2))**2-
03535      &  (P(1,3)+P(2,3))**2
03536         IF(MSTP(122).GE.1) THEN
03537           LOFFS=(22-(LEN(2)+LEN(3)))/2
03538           CHINIT(LOFFS+1:76)='PYTHIA will be initialized for '//
03539      &    CHCOM(2)(1:LEN(2))//' on '//CHCOM(3)(1:LEN(3))//
03540      &    ' user configuration'//' '
03541           WRITE(MSTU(11),5200) CHINIT
03542           WRITE(MSTU(11),5600)
03543           WRITE(MSTU(11),5700) CHCOM(2),P(1,1),P(1,2),P(1,3),P(1,4)
03544           WRITE(MSTU(11),5700) CHCOM(3),P(2,1),P(2,2),P(2,3),P(2,4)
03545           WRITE(MSTU(11),5500) SQRT(MAX(0D0,S))
03546         ENDIF
03547  
03548 C...Unknown frame. Error for too low CM energy.
03549       ELSE
03550         WRITE(MSTU(11),5800) CHFRAM(1:LEN(1))
03551         STOP
03552       ENDIF
03553       IF(S.LT.PARP(2)**2) THEN
03554         WRITE(MSTU(11),5900) SQRT(S)
03555         STOP
03556       ENDIF
03557  
03558 C...Formats for initialization and error information.
03559  5000 FORMAT(1X,'Error: unrecognized beam particle ''',A,'''D0'/
03560      &1X,'Execution stopped!')
03561  5100 FORMAT(1X,'Error: unrecognized target particle ''',A,'''D0'/
03562      &1X,'Execution stopped!')
03563  5200 FORMAT(/1X,78('=')/1X,'I',76X,'I'/1X,'I',A76,'I')
03564  5300 FORMAT(1X,'I',18X,'at',1X,F10.3,1X,'GeV center-of-mass energy',
03565      &19X,'I'/1X,'I',76X,'I'/1X,78('='))
03566  5400 FORMAT(1X,'I',22X,'at',1X,F10.3,1X,'GeV/c lab-momentum',22X,'I')
03567  5500 FORMAT(1X,'I',76X,'I'/1X,'I',11X,'corresponding to',1X,F10.3,1X,
03568      &'GeV center-of-mass energy',12X,'I'/1X,'I',76X,'I'/1X,78('='))
03569  5600 FORMAT(1X,'I',76X,'I'/1X,'I',18X,'px (GeV/c)',3X,'py (GeV/c)',3X,
03570      &'pz (GeV/c)',6X,'E (GeV)',9X,'I')
03571  5700 FORMAT(1X,'I',8X,A8,4(2X,F10.3,1X),8X,'I')
03572  5800 FORMAT(1X,'Error: unrecognized coordinate frame ''',A,'''D0'/
03573      &1X,'Execution stopped!')
03574  5900 FORMAT(1X,'Error: too low CM energy,',F8.3,' GeV for event ',
03575      &'generation.'/1X,'Execution stopped!')
03576  
03577       RETURN
03578       END
03579  
03580 C*********************************************************************
03581  
03582 C...PYINKI
03583 C...Sets up kinematics, including rotations and boosts to/from CM frame.
03584  
03585       SUBROUTINE PYINKI(MODKI)
03586  
03587 C...Double precision and integer declarations.
03588       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
03589       IMPLICIT INTEGER(I-N)
03590       INTEGER PYK,PYCHGE,PYCOMP
03591 C...Commonblocks.
03592       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
03593       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
03594       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
03595       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
03596       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
03597       COMMON/PYINT1/MINT(400),VINT(400)
03598       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
03599  
03600 C...Set initial flavour state.
03601       N=2
03602       DO 100 I=1,2
03603         K(I,1)=1
03604         K(I,2)=MINT(10+I)
03605         IF(MINT(140+I).NE.0) K(I,2)=MINT(140+I)
03606   100 CONTINUE
03607  
03608 C...Reset boost. Do kinematics for various cases.
03609       DO 110 J=6,10
03610         VINT(J)=0D0
03611   110 CONTINUE
03612  
03613 C...Set up kinematics for events defined in CM frame.
03614       IF(MINT(111).EQ.1) THEN
03615         WIN=VINT(290)
03616         IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
03617         S=WIN**2
03618         P(1,5)=VINT(3)
03619         P(2,5)=VINT(4)
03620         IF(MINT(141).NE.0) P(1,5)=VINT(303)
03621         IF(MINT(142).NE.0) P(2,5)=VINT(304)
03622         P(1,1)=0D0
03623         P(1,2)=0D0
03624         P(2,1)=0D0
03625         P(2,2)=0D0
03626         P(1,3)=SQRT(((S-P(1,5)**2-P(2,5)**2)**2-(2D0*P(1,5)*P(2,5))**2)/
03627      &  (4D0*S))
03628         P(2,3)=-P(1,3)
03629         P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
03630         P(2,4)=SQRT(P(2,3)**2+P(2,5)**2)
03631  
03632 C...Set up kinematics for fixed target events.
03633       ELSEIF(MINT(111).EQ.2) THEN
03634         WIN=VINT(290)
03635         IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
03636         P(1,5)=VINT(3)
03637         P(2,5)=VINT(4)
03638         IF(MINT(141).NE.0) P(1,5)=VINT(303)
03639         IF(MINT(142).NE.0) P(2,5)=VINT(304)
03640         P(1,1)=0D0
03641         P(1,2)=0D0
03642         P(2,1)=0D0
03643         P(2,2)=0D0
03644         P(1,3)=WIN
03645         P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
03646         P(2,3)=0D0
03647         P(2,4)=P(2,5)
03648         S=P(1,5)**2+P(2,5)**2+2D0*P(2,4)*P(1,4)
03649         VINT(10)=P(1,3)/(P(1,4)+P(2,4))
03650         CALL PYROBO(0,0,0D0,0D0,0D0,0D0,-VINT(10))
03651  
03652 C...Set up kinematics for events in user-defined frame.
03653       ELSEIF(MINT(111).EQ.3) THEN
03654         P(1,5)=VINT(3)
03655         P(2,5)=VINT(4)
03656         IF(MINT(141).NE.0) P(1,5)=VINT(303)
03657         IF(MINT(142).NE.0) P(2,5)=VINT(304)
03658         P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
03659         P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
03660         DO 120 J=1,3
03661           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
03662   120   CONTINUE
03663         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
03664         VINT(7)=PYANGL(P(1,1),P(1,2))
03665         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
03666         VINT(6)=PYANGL(P(1,3),P(1,1))
03667         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
03668         S=P(1,5)**2+P(2,5)**2+2D0*(P(1,4)*P(2,4)-P(1,3)*P(2,3))
03669  
03670 C...Set up kinematics for events with user-defined four-vectors.
03671       ELSEIF(MINT(111).EQ.4) THEN
03672         PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
03673         P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
03674         PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
03675         P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
03676         DO 130 J=1,3
03677           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
03678   130   CONTINUE
03679         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
03680         VINT(7)=PYANGL(P(1,1),P(1,2))
03681         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
03682         VINT(6)=PYANGL(P(1,3),P(1,1))
03683         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
03684         S=(P(1,4)+P(2,4))**2
03685  
03686 C...Set up kinematics for events with user-defined five-vectors.
03687       ELSEIF(MINT(111).EQ.5) THEN
03688         DO 140 J=1,3
03689           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
03690   140   CONTINUE
03691         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
03692         VINT(7)=PYANGL(P(1,1),P(1,2))
03693         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
03694         VINT(6)=PYANGL(P(1,3),P(1,1))
03695         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
03696         S=(P(1,4)+P(2,4))**2
03697       ENDIF
03698  
03699 C...Return or error for too low CM energy.
03700       IF(MODKI.EQ.1.AND.S.LT.PARP(2)**2) THEN
03701         IF(MSTP(172).LE.1) THEN
03702           CALL PYERRM(23,
03703      &    '(PYINKI:) too low invariant mass in this event')
03704         ELSE
03705           MSTI(61)=1
03706           RETURN
03707         ENDIF
03708       ENDIF
03709  
03710 C...Save information on incoming particles.
03711       VINT(1)=SQRT(S)
03712       VINT(2)=S
03713       IF(MINT(111).GE.4) THEN
03714         IF(MINT(141).EQ.0) THEN
03715           VINT(3)=P(1,5)
03716           IF(MINT(11).EQ.22.AND.P(1,5).LT.0) VINT(307)=P(1,5)**2
03717         ELSE
03718           VINT(303)=P(1,5)
03719         ENDIF
03720         IF(MINT(142).EQ.0) THEN
03721           VINT(4)=P(2,5)
03722           IF(MINT(12).EQ.22.AND.P(2,5).LT.0) VINT(308)=P(2,5)**2
03723         ELSE
03724           VINT(304)=P(2,5)
03725         ENDIF
03726       ENDIF
03727       VINT(5)=P(1,3)
03728       IF(MODKI.EQ.0) VINT(289)=S
03729       DO 150 J=1,5
03730         V(1,J)=0D0
03731         V(2,J)=0D0
03732         VINT(290+J)=P(1,J)
03733         VINT(295+J)=P(2,J)
03734   150 CONTINUE
03735  
03736 C...Store pT cut-off and related constants to be used in generation.
03737       IF(MODKI.EQ.0) VINT(285)=CKIN(3)
03738       IF(MSTP(82).LE.1) THEN
03739         PTMN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
03740       ELSE
03741         PTMN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
03742       ENDIF
03743       VINT(149)=4D0*PTMN**2/S
03744       VINT(154)=PTMN
03745  
03746       RETURN
03747       END
03748  
03749 C*********************************************************************
03750  
03751 C...PYINPR
03752 C...Selects partonic subprocesses to be included in the simulation.
03753  
03754       SUBROUTINE PYINPR
03755  
03756 C...Double precision and integer declarations.
03757       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
03758       IMPLICIT INTEGER(I-N)
03759       INTEGER PYK,PYCHGE,PYCOMP
03760 C...Commonblocks.
03761       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
03762       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
03763       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
03764       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
03765       COMMON/PYINT1/MINT(400),VINT(400)
03766       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
03767       SAVE /PYDAT1/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/
03768  
03769 C...Reset processes to be included.
03770       IF(MSEL.NE.0) THEN
03771         DO 100 I=1,500
03772           MSUB(I)=0
03773   100   CONTINUE
03774       ENDIF
03775 
03776 C...Set running pTmin scale.
03777       IF(MSTP(82).LE.1) THEN
03778         PTMRUN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
03779       ELSE
03780         PTMRUN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
03781       ENDIF
03782 
03783 C...Begin by assuming incoming photon to enter subprocess.
03784       IF(MINT(11).EQ.22) MINT(15)=22
03785       IF(MINT(12).EQ.22) MINT(16)=22
03786  
03787 C...For e-gamma with MSTP(14)=10 allow mixture of VMD and anomalous.
03788       IF(MINT(121).EQ.2.AND.MSTP(14).EQ.10) THEN
03789         MSUB(10)=1
03790         MINT(123)=MINT(122)+1
03791  
03792 C...For gamma-p or gamma-gamma with MSTP(14) = 10, 20, 25 or 30 
03793 C...allow mixture.
03794 C...Here also set a few parameters otherwise normally not touched.
03795       ELSEIF(MINT(121).GT.1) THEN
03796  
03797 C...Parton distributions dampened at small Q2; go to low energies,
03798 C...alpha_s <1; no minimum pT cut-off a priori.
03799         IF(MSTP(18).EQ.2) THEN
03800           MSTP(57)=3
03801           PARP(2)=2D0
03802           PARU(115)=1D0
03803           CKIN(5)=0.2D0
03804           CKIN(6)=0.2D0
03805         ENDIF 
03806  
03807 C...Define pT cut-off parameters and whether run involves low-pT.
03808         PTMVMD=PTMRUN
03809         VINT(154)=PTMVMD
03810         PTMDIR=PTMVMD
03811         IF(MSTP(18).EQ.2) PTMDIR=PARP(15)
03812         PTMANO=PTMVMD
03813         IF(MSTP(15).EQ.5) PTMANO=0.60D0+
03814      &  0.125D0*LOG(1D0+0.10D0*VINT(1))**2
03815         IPTL=1
03816         IF(VINT(285).GT.MAX(PTMVMD,PTMDIR,PTMANO)) IPTL=0
03817         IF(MSEL.EQ.2) IPTL=1
03818  
03819 C...Set up for p/gamma * gamma; real or virtual photons.
03820         IF(MINT(121).EQ.3.OR.MINT(121).EQ.6.OR.(MINT(121).EQ.4.AND.
03821      &  MSTP(14).EQ.30)) THEN
03822  
03823 C...Set up for p/VMD * VMD.
03824         IF(MINT(122).EQ.1) THEN
03825           MINT(123)=2
03826           MSUB(11)=1
03827           MSUB(12)=1
03828           MSUB(13)=1
03829           MSUB(28)=1
03830           MSUB(53)=1
03831           MSUB(68)=1
03832           IF(IPTL.EQ.1) MSUB(95)=1
03833           IF(MSEL.EQ.2) THEN
03834             MSUB(91)=1
03835             MSUB(92)=1
03836             MSUB(93)=1
03837             MSUB(94)=1
03838           ENDIF
03839           IF(IPTL.EQ.1) CKIN(3)=0D0
03840  
03841 C...Set up for p/VMD * direct gamma.
03842         ELSEIF(MINT(122).EQ.2) THEN
03843           MINT(123)=0
03844           IF(MINT(121).EQ.6) MINT(123)=5
03845           MSUB(131)=1
03846           MSUB(132)=1
03847           MSUB(135)=1
03848           MSUB(136)=1
03849           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
03850  
03851 C...Set up for p/VMD * anomalous gamma.
03852         ELSEIF(MINT(122).EQ.3) THEN
03853           MINT(123)=3
03854           IF(MINT(121).EQ.6) MINT(123)=7
03855           MSUB(11)=1
03856           MSUB(12)=1
03857           MSUB(13)=1
03858           MSUB(28)=1
03859           MSUB(53)=1
03860           MSUB(68)=1
03861           IF(IPTL.EQ.1) MSUB(95)=1
03862           IF(MSEL.EQ.2) THEN
03863             MSUB(91)=1
03864             MSUB(92)=1
03865             MSUB(93)=1
03866             MSUB(94)=1
03867           ENDIF
03868           IF(IPTL.EQ.1) CKIN(3)=0D0
03869 
03870 C...Set up for DIS * p.
03871         ELSEIF(MINT(122).EQ.4.AND.(IABS(MINT(11)).GE.28.OR.
03872      &  IABS(MINT(12)).GE.28)) THEN
03873           MINT(123)=8
03874           IF(IPTL.EQ.1) MSUB(99)=1
03875  
03876 C...Set up for direct * direct gamma (switch off leptons).
03877         ELSEIF(MINT(122).EQ.4) THEN
03878           MINT(123)=0
03879           MSUB(137)=1
03880           MSUB(138)=1
03881           MSUB(139)=1
03882           MSUB(140)=1
03883           DO 110 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
03884             IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
03885   110     CONTINUE
03886           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
03887  
03888 C...Set up for direct * anomalous gamma.
03889         ELSEIF(MINT(122).EQ.5) THEN
03890           MINT(123)=6
03891           MSUB(131)=1
03892           MSUB(132)=1
03893           MSUB(135)=1
03894           MSUB(136)=1
03895           IF(IPTL.EQ.1) CKIN(3)=PTMANO
03896  
03897 C...Set up for anomalous * anomalous gamma.
03898         ELSEIF(MINT(122).EQ.6) THEN
03899           MINT(123)=3
03900           MSUB(11)=1
03901           MSUB(12)=1
03902           MSUB(13)=1
03903           MSUB(28)=1
03904           MSUB(53)=1
03905           MSUB(68)=1
03906           IF(IPTL.EQ.1) MSUB(95)=1
03907           IF(MSEL.EQ.2) THEN
03908             MSUB(91)=1
03909             MSUB(92)=1
03910             MSUB(93)=1
03911             MSUB(94)=1
03912           ENDIF
03913           IF(IPTL.EQ.1) CKIN(3)=0D0
03914         ENDIF
03915  
03916 C...Set up for gamma* * gamma*; virtual photons = dir, VMD, anom.
03917         ELSEIF(MINT(121).EQ.9.OR.MINT(121).EQ.13) THEN
03918  
03919 C...Set up for direct * direct gamma (switch off leptons).
03920         IF(MINT(122).EQ.1) THEN
03921           MINT(123)=0
03922           MSUB(137)=1
03923           MSUB(138)=1
03924           MSUB(139)=1
03925           MSUB(140)=1
03926           DO 120 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
03927             IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
03928   120     CONTINUE
03929           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
03930  
03931 C...Set up for direct * VMD and VMD * direct gamma.
03932         ELSEIF(MINT(122).EQ.2.OR.MINT(122).EQ.4) THEN
03933           MINT(123)=5
03934           MSUB(131)=1
03935           MSUB(132)=1
03936           MSUB(135)=1
03937           MSUB(136)=1
03938           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
03939  
03940 C...Set up for direct * anomalous and anomalous * direct gamma.
03941         ELSEIF(MINT(122).EQ.3.OR.MINT(122).EQ.7) THEN
03942           MINT(123)=6
03943           MSUB(131)=1
03944           MSUB(132)=1
03945           MSUB(135)=1
03946           MSUB(136)=1
03947           IF(IPTL.EQ.1) CKIN(3)=PTMANO
03948  
03949 C...Set up for VMD*VMD.
03950         ELSEIF(MINT(122).EQ.5) THEN
03951           MINT(123)=2
03952           MSUB(11)=1
03953           MSUB(12)=1
03954           MSUB(13)=1
03955           MSUB(28)=1
03956           MSUB(53)=1
03957           MSUB(68)=1
03958           IF(IPTL.EQ.1) MSUB(95)=1
03959           IF(MSEL.EQ.2) THEN
03960             MSUB(91)=1
03961             MSUB(92)=1
03962             MSUB(93)=1
03963             MSUB(94)=1
03964           ENDIF
03965           IF(IPTL.EQ.1) CKIN(3)=0D0
03966  
03967 C...Set up for VMD * anomalous and anomalous * VMD gamma.
03968         ELSEIF(MINT(122).EQ.6.OR.MINT(122).EQ.8) THEN
03969           MINT(123)=7
03970           MSUB(11)=1
03971           MSUB(12)=1
03972           MSUB(13)=1
03973           MSUB(28)=1
03974           MSUB(53)=1
03975           MSUB(68)=1
03976           IF(IPTL.EQ.1) MSUB(95)=1
03977           IF(MSEL.EQ.2) THEN
03978             MSUB(91)=1
03979             MSUB(92)=1
03980             MSUB(93)=1
03981             MSUB(94)=1
03982           ENDIF
03983           IF(IPTL.EQ.1) CKIN(3)=0D0
03984  
03985 C...Set up for anomalous * anomalous gamma.
03986         ELSEIF(MINT(122).EQ.9) THEN
03987           MINT(123)=3
03988           MSUB(11)=1
03989           MSUB(12)=1
03990           MSUB(13)=1
03991           MSUB(28)=1
03992           MSUB(53)=1
03993           MSUB(68)=1
03994           IF(IPTL.EQ.1) MSUB(95)=1
03995           IF(MSEL.EQ.2) THEN
03996             MSUB(91)=1
03997             MSUB(92)=1
03998             MSUB(93)=1
03999             MSUB(94)=1
04000           ENDIF
04001           IF(IPTL.EQ.1) CKIN(3)=0D0
04002  
04003 C...Set up for DIS * VMD and VMD * DIS gamma.
04004         ELSEIF(MINT(122).EQ.10.OR.MINT(122).EQ.12) THEN
04005           MINT(123)=8
04006           IF(IPTL.EQ.1) MSUB(99)=1
04007  
04008 C...Set up for DIS * anomalous and anomalous * DIS gamma.
04009         ELSEIF(MINT(122).EQ.11.OR.MINT(122).EQ.13) THEN
04010           MINT(123)=9
04011           IF(IPTL.EQ.1) MSUB(99)=1
04012         ENDIF
04013  
04014 C...Set up for gamma* * p; virtual photons = dir, res.
04015         ELSEIF(MINT(121).EQ.2) THEN
04016  
04017 C...Set up for direct * p.
04018         IF(MINT(122).EQ.1) THEN
04019           MINT(123)=0
04020           MSUB(131)=1
04021           MSUB(132)=1
04022           MSUB(135)=1
04023           MSUB(136)=1
04024           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
04025  
04026 C...Set up for resolved * p.
04027         ELSEIF(MINT(122).EQ.2) THEN
04028           MINT(123)=1
04029           MSUB(11)=1
04030           MSUB(12)=1
04031           MSUB(13)=1
04032           MSUB(28)=1
04033           MSUB(53)=1
04034           MSUB(68)=1
04035           IF(IPTL.EQ.1) MSUB(95)=1
04036           IF(MSEL.EQ.2) THEN
04037             MSUB(91)=1
04038             MSUB(92)=1
04039             MSUB(93)=1
04040             MSUB(94)=1
04041           ENDIF
04042           IF(IPTL.EQ.1) CKIN(3)=0D0
04043         ENDIF
04044  
04045 C...Set up for gamma* * gamma*; virtual photons = dir, res.
04046         ELSEIF(MINT(121).EQ.4) THEN
04047  
04048 C...Set up for direct * direct gamma (switch off leptons).
04049         IF(MINT(122).EQ.1) THEN
04050           MINT(123)=0
04051           MSUB(137)=1
04052           MSUB(138)=1
04053           MSUB(139)=1
04054           MSUB(140)=1
04055           DO 130 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
04056             IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
04057   130     CONTINUE
04058           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
04059  
04060 C...Set up for direct * resolved and resolved * direct gamma.
04061         ELSEIF(MINT(122).EQ.2.OR.MINT(122).EQ.3) THEN
04062           MINT(123)=5
04063           MSUB(131)=1
04064           MSUB(132)=1
04065           MSUB(135)=1
04066           MSUB(136)=1
04067           IF(IPTL.EQ.1) CKIN(3)=PTMDIR
04068  
04069 C...Set up for resolved * resolved gamma.
04070         ELSEIF(MINT(122).EQ.4) THEN
04071           MINT(123)=2
04072           MSUB(11)=1
04073           MSUB(12)=1
04074           MSUB(13)=1
04075           MSUB(28)=1
04076           MSUB(53)=1
04077           MSUB(68)=1
04078           IF(IPTL.EQ.1) MSUB(95)=1
04079           IF(MSEL.EQ.2) THEN
04080             MSUB(91)=1
04081             MSUB(92)=1
04082             MSUB(93)=1
04083             MSUB(94)=1
04084           ENDIF
04085           IF(IPTL.EQ.1) CKIN(3)=0D0
04086         ENDIF
04087  
04088 C...End of special set up for gamma-p and gamma-gamma.
04089         ENDIF
04090         CKIN(1)=2D0*CKIN(3)
04091       ENDIF
04092  
04093 C...Flavour information for individual beams.
04094       DO 140 I=1,2
04095         MINT(40+I)=1
04096         IF(MINT(123).GE.1.AND.MINT(10+I).EQ.22) MINT(40+I)=2
04097         IF(IABS(MINT(10+I)).GT.100) MINT(40+I)=2
04098         IF(MINT(10+I).EQ.28.OR.MINT(10+I).EQ.29) MINT(40+I)=2
04099         MINT(44+I)=MINT(40+I)
04100         IF(MSTP(11).GE.1.AND.(IABS(MINT(10+I)).EQ.11.OR.
04101      &  IABS(MINT(10+I)).EQ.13.OR.IABS(MINT(10+I)).EQ.15)) MINT(44+I)=3
04102   140 CONTINUE
04103  
04104 C...If two real gammas, whereof one direct, pick the first.
04105 C...For two virtual photons, keep requested order.
04106       IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) THEN
04107         IF(MSTP(14).LE.10.AND.MINT(123).GE.4.AND.MINT(123).LE.6) THEN
04108           MINT(41)=1
04109           MINT(45)=1
04110         ELSEIF(MSTP(14).EQ.12.OR.MSTP(14).EQ.13.OR.MSTP(14).EQ.22.OR.
04111      &  MSTP(14).EQ.26.OR.MSTP(14).EQ.27) THEN
04112           MINT(41)=1
04113           MINT(45)=1
04114         ELSEIF(MSTP(14).EQ.14.OR.MSTP(14).EQ.17.OR.MSTP(14).EQ.23.OR.
04115      &  MSTP(14).EQ.28.OR.MSTP(14).EQ.29) THEN
04116           MINT(42)=1
04117           MINT(46)=1
04118         ELSEIF((MSTP(14).EQ.20.OR.MSTP(14).EQ.30).AND.(MINT(122).EQ.2
04119      &  .OR.MINT(122).EQ.3.OR.MINT(122).EQ.10.OR.MINT(122).EQ.11)) THEN
04120           MINT(41)=1
04121           MINT(45)=1
04122         ELSEIF((MSTP(14).EQ.20.OR.MSTP(14).EQ.30).AND.(MINT(122).EQ.4
04123      &  .OR.MINT(122).EQ.7.OR.MINT(122).EQ.12.OR.MINT(122).EQ.13)) THEN
04124           MINT(42)=1
04125           MINT(46)=1
04126         ELSEIF(MSTP(14).EQ.25.AND.MINT(122).EQ.2) THEN
04127           MINT(41)=1
04128           MINT(45)=1
04129         ELSEIF(MSTP(14).EQ.25.AND.MINT(122).EQ.3) THEN
04130           MINT(42)=1
04131           MINT(46)=1
04132         ENDIF
04133       ELSEIF(MINT(11).EQ.22.OR.MINT(12).EQ.22) THEN
04134         IF(MSTP(14).EQ.26.OR.MSTP(14).EQ.28.OR.MINT(122).EQ.4) THEN
04135           IF(MINT(11).EQ.22) THEN
04136             MINT(41)=1
04137             MINT(45)=1
04138           ELSE
04139             MINT(42)=1
04140             MINT(46)=1
04141           ENDIF
04142         ENDIF 
04143         IF(MINT(123).GE.4.AND.MINT(123).LE.7) CALL PYERRM(26,
04144      &  '(PYINPR:) unallowed MSTP(14) code for single photon')
04145       ENDIF
04146  
04147 C...Flavour information on combination of incoming particles.
04148       MINT(43)=2*MINT(41)+MINT(42)-2
04149       MINT(44)=MINT(43)
04150       IF(MINT(123).LE.0) THEN
04151         IF(MINT(11).EQ.22) MINT(43)=MINT(43)+2
04152         IF(MINT(12).EQ.22) MINT(43)=MINT(43)+1
04153       ELSEIF(MINT(123).LE.3) THEN
04154         IF(MINT(11).EQ.22) MINT(44)=MINT(44)-2
04155         IF(MINT(12).EQ.22) MINT(44)=MINT(44)-1
04156       ELSEIF(MINT(11).EQ.22.AND.MINT(12).EQ.22) THEN
04157         MINT(43)=4
04158         MINT(44)=1
04159       ENDIF
04160       MINT(47)=2*MIN(2,MINT(45))+MIN(2,MINT(46))-2
04161       IF(MIN(MINT(45),MINT(46)).EQ.3) MINT(47)=5
04162       IF(MINT(45).EQ.1.AND.MINT(46).EQ.3) MINT(47)=6
04163       IF(MINT(45).EQ.3.AND.MINT(46).EQ.1) MINT(47)=7
04164       MINT(50)=0
04165       IF(MINT(41).EQ.2.AND.MINT(42).EQ.2) MINT(50)=1
04166       MINT(107)=0
04167       MINT(108)=0
04168       IF(MINT(121).EQ.9.OR.MINT(121).EQ.13) THEN
04169         IF((MINT(122).GE.4.AND.MINT(122).LE.6).OR.MINT(122).EQ.12) 
04170      &  MINT(107)=2
04171         IF((MINT(122).GE.7.AND.MINT(122).LE.9).OR.MINT(122).EQ.13) 
04172      &  MINT(107)=3
04173         IF(MINT(122).EQ.10.OR.MINT(122).EQ.11) MINT(107)=4
04174         IF(MINT(122).EQ.2.OR.MINT(122).EQ.5.OR.MINT(122).EQ.8.OR.
04175      &  MINT(122).EQ.10) MINT(108)=2
04176         IF(MINT(122).EQ.3.OR.MINT(122).EQ.6.OR.MINT(122).EQ.9.OR.
04177      &  MINT(122).EQ.11) MINT(108)=3
04178         IF(MINT(122).EQ.12.OR.MINT(122).EQ.13) MINT(108)=4
04179       ELSEIF(MINT(121).EQ.4.AND.MSTP(14).EQ.25) THEN
04180         IF(MINT(122).GE.3) MINT(107)=1
04181         IF(MINT(122).EQ.2.OR.MINT(122).EQ.4) MINT(108)=1
04182       ELSEIF(MINT(121).EQ.2) THEN
04183         IF(MINT(122).EQ.2.AND.MINT(11).EQ.22) MINT(107)=1
04184         IF(MINT(122).EQ.2.AND.MINT(12).EQ.22) MINT(108)=1
04185       ELSE
04186         IF(MINT(11).EQ.22) THEN
04187           MINT(107)=MINT(123)
04188           IF(MINT(123).GE.4) MINT(107)=0
04189           IF(MINT(123).EQ.7) MINT(107)=2
04190           IF(MSTP(14).EQ.26.OR.MSTP(14).EQ.27) MINT(107)=4
04191           IF(MSTP(14).EQ.28) MINT(107)=2
04192           IF(MSTP(14).EQ.29) MINT(107)=3
04193           IF(MSTP(14).EQ.30.AND.MINT(121).EQ.4.AND.MINT(122).EQ.4) 
04194      &    MINT(107)=4
04195         ENDIF
04196         IF(MINT(12).EQ.22) THEN
04197           MINT(108)=MINT(123)
04198           IF(MINT(123).GE.4) MINT(108)=MINT(123)-3
04199           IF(MINT(123).EQ.7) MINT(108)=3
04200           IF(MSTP(14).EQ.26) MINT(108)=2
04201           IF(MSTP(14).EQ.27) MINT(108)=3
04202           IF(MSTP(14).EQ.28.OR.MSTP(14).EQ.29) MINT(108)=4
04203           IF(MSTP(14).EQ.30.AND.MINT(121).EQ.4.AND.MINT(122).EQ.4) 
04204      &    MINT(108)=4
04205         ENDIF
04206         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22.AND.(MSTP(14).EQ.14.OR.
04207      &  MSTP(14).EQ.17.OR.MSTP(14).EQ.18.OR.MSTP(14).EQ.23)) THEN
04208           MINTTP=MINT(107)
04209           MINT(107)=MINT(108)
04210           MINT(108)=MINTTP
04211         ENDIF
04212       ENDIF
04213       IF(MINT(15).EQ.22.AND.MINT(41).EQ.2) MINT(15)=0
04214       IF(MINT(16).EQ.22.AND.MINT(42).EQ.2) MINT(16)=0
04215  
04216 C...Select default processes according to incoming beams
04217 C...(already done for gamma-p and gamma-gamma with 
04218 C...MSTP(14) = 10, 20, 25 or 30).
04219       IF(MINT(121).GT.1) THEN
04220       ELSEIF(MSEL.EQ.1.OR.MSEL.EQ.2) THEN
04221  
04222         IF(MINT(43).EQ.1) THEN
04223 C...Lepton + lepton -> gamma/Z0 or W.
04224           IF(MINT(11)+MINT(12).EQ.0) MSUB(1)=1
04225           IF(MINT(11)+MINT(12).NE.0) MSUB(2)=1
04226  
04227         ELSEIF(MINT(43).LE.3.AND.MINT(123).EQ.0.AND.
04228      &    (MINT(11).EQ.22.OR.MINT(12).EQ.22)) THEN
04229 C...Unresolved photon + lepton: Compton scattering.
04230           MSUB(133)=1
04231           MSUB(134)=1
04232 
04233         ELSEIF((MINT(123).EQ.8.OR.MINT(123).EQ.9).AND.(MINT(11).EQ.22
04234      &  .OR.MINT(12).EQ.22)) THEN
04235 C...DIS as pure gamma* + f -> f process.
04236           MSUB(99)=1  
04237  
04238         ELSEIF(MINT(43).LE.3) THEN
04239 C...Lepton + hadron: deep inelastic scattering.
04240           MSUB(10)=1
04241  
04242         ELSEIF(MINT(123).EQ.0.AND.MINT(11).EQ.22.AND.
04243      &    MINT(12).EQ.22) THEN
04244 C...Two unresolved photons: fermion pair production, 
04245 C...exclude lepton pairs.
04246           DO 150 ISUB=137,140
04247             MSUB(ISUB)=1
04248   150     CONTINUE
04249           DO 155 II=MDCY(22,2),MDCY(22,2)+MDCY(22,3)-1
04250             IF(IABS(KFDP(II,1)).GE.10) MDME(II,1)=MIN(0,MDME(II,1))
04251   155     CONTINUE
04252           PTMDIR=PTMRUN
04253           IF(MSTP(18).EQ.2) PTMDIR=PARP(15)
04254           IF(CKIN(3).LT.PTMRUN.OR.MSEL.EQ.2) CKIN(3)=PTMDIR
04255           CKIN(1)=MAX(CKIN(1),2D0*CKIN(3)) 
04256  
04257         ELSEIF((MINT(123).EQ.0.AND.(MINT(11).EQ.22.OR.MINT(12).EQ.22))
04258      &    .OR.(MINT(123).GE.4.AND.MINT(123).LE.6.AND.MINT(11).EQ.22.AND.
04259      &    MINT(12).EQ.22)) THEN
04260 C...Unresolved photon + hadron: photon-parton scattering.
04261           DO 160 ISUB=131,136
04262             MSUB(ISUB)=1
04263   160     CONTINUE
04264  
04265         ELSEIF(MSEL.EQ.1) THEN
04266 C...High-pT QCD processes:
04267           MSUB(11)=1
04268           MSUB(12)=1
04269           MSUB(13)=1
04270           MSUB(28)=1
04271           MSUB(53)=1
04272           MSUB(68)=1
04273           PTMN=PTMRUN
04274           VINT(154)=PTMN
04275           IF(CKIN(3).LT.PTMN) MSUB(95)=1
04276           IF(MSUB(95).EQ.1.AND.MINT(50).EQ.0) MSUB(95)=0
04277  
04278         ELSE
04279 C...All QCD processes:
04280           MSUB(11)=1
04281           MSUB(12)=1
04282           MSUB(13)=1
04283           MSUB(28)=1
04284           MSUB(53)=1
04285           MSUB(68)=1
04286           MSUB(91)=1
04287           MSUB(92)=1
04288           MSUB(93)=1
04289           MSUB(94)=1
04290           MSUB(95)=1
04291         ENDIF
04292  
04293       ELSEIF(MSEL.GE.4.AND.MSEL.LE.8) THEN
04294 C...Heavy quark production.
04295         MSUB(81)=1
04296         MSUB(82)=1
04297         MSUB(84)=1
04298         DO 170 J=1,MIN(8,MDCY(21,3))
04299           MDME(MDCY(21,2)+J-1,1)=0
04300   170   CONTINUE
04301         MDME(MDCY(21,2)+MSEL-1,1)=1
04302         MSUB(85)=1
04303         DO 180 J=1,MIN(12,MDCY(22,3))
04304           MDME(MDCY(22,2)+J-1,1)=0
04305   180   CONTINUE
04306         MDME(MDCY(22,2)+MSEL-1,1)=1
04307  
04308       ELSEIF(MSEL.EQ.10) THEN
04309 C...Prompt photon production:
04310         MSUB(14)=1
04311         MSUB(18)=1
04312         MSUB(29)=1
04313  
04314       ELSEIF(MSEL.EQ.11) THEN
04315 C...Z0/gamma* production:
04316         MSUB(1)=1
04317  
04318       ELSEIF(MSEL.EQ.12) THEN
04319 C...W+/- production:
04320         MSUB(2)=1
04321  
04322       ELSEIF(MSEL.EQ.13) THEN
04323 C...Z0 + jet:
04324         MSUB(15)=1
04325         MSUB(30)=1
04326  
04327       ELSEIF(MSEL.EQ.14) THEN
04328 C...W+/- + jet:
04329         MSUB(16)=1
04330         MSUB(31)=1
04331  
04332       ELSEIF(MSEL.EQ.15) THEN
04333 C...Z0 & W+/- pair production:
04334         MSUB(19)=1
04335         MSUB(20)=1
04336         MSUB(22)=1
04337         MSUB(23)=1
04338         MSUB(25)=1
04339  
04340       ELSEIF(MSEL.EQ.16) THEN
04341 C...h0 production:
04342         MSUB(3)=1
04343         MSUB(102)=1
04344         MSUB(103)=1
04345         MSUB(123)=1
04346         MSUB(124)=1
04347  
04348       ELSEIF(MSEL.EQ.17) THEN
04349 C...h0 & Z0 or W+/- pair production:
04350         MSUB(24)=1
04351         MSUB(26)=1
04352  
04353       ELSEIF(MSEL.EQ.18) THEN
04354 C...h0 production; interesting processes in e+e-.
04355         MSUB(24)=1
04356         MSUB(103)=1
04357         MSUB(123)=1
04358         MSUB(124)=1
04359  
04360       ELSEIF(MSEL.EQ.19) THEN
04361 C...h0, H0 and A0 production; interesting processes in e+e-.
04362         MSUB(24)=1
04363         MSUB(103)=1
04364         MSUB(123)=1
04365         MSUB(124)=1
04366         MSUB(153)=1
04367         MSUB(171)=1
04368         MSUB(173)=1
04369         MSUB(174)=1
04370         MSUB(158)=1
04371         MSUB(176)=1
04372         MSUB(178)=1
04373         MSUB(179)=1
04374  
04375       ELSEIF(MSEL.EQ.21) THEN
04376 C...Z'0 production:
04377         MSUB(141)=1
04378  
04379       ELSEIF(MSEL.EQ.22) THEN
04380 C...W'+/- production:
04381         MSUB(142)=1
04382  
04383       ELSEIF(MSEL.EQ.23) THEN
04384 C...H+/- production:
04385         MSUB(143)=1
04386  
04387       ELSEIF(MSEL.EQ.24) THEN
04388 C...R production:
04389         MSUB(144)=1
04390  
04391       ELSEIF(MSEL.EQ.25) THEN
04392 C...LQ (leptoquark) production.
04393         MSUB(145)=1
04394         MSUB(162)=1
04395         MSUB(163)=1
04396         MSUB(164)=1
04397  
04398       ELSEIF(MSEL.GE.35.AND.MSEL.LE.38) THEN
04399 C...Production of one heavy quark (W exchange):
04400         MSUB(83)=1
04401         DO 190 J=1,MIN(8,MDCY(21,3))
04402           MDME(MDCY(21,2)+J-1,1)=0
04403   190   CONTINUE
04404         MDME(MDCY(21,2)+MSEL-31,1)=1
04405  
04406 CMRENNA++Define SUSY alternatives.
04407       ELSEIF(MSEL.EQ.39) THEN
04408 C...Turn on all SUSY processes.
04409         IF(MINT(43).EQ.4) THEN
04410 C...Hadron-hadron processes.
04411           DO 200 I=201,301
04412             IF(ISET(I).GE.0) MSUB(I)=1
04413   200     CONTINUE
04414         ELSEIF(MINT(43).EQ.1) THEN
04415 C...Lepton-lepton processes: QED production of squarks.
04416           DO 210 I=201,214
04417             MSUB(I)=1
04418   210     CONTINUE
04419           MSUB(210)=0
04420           MSUB(211)=0
04421           MSUB(212)=0
04422           DO 220 I=216,228
04423             MSUB(I)=1
04424   220     CONTINUE
04425           DO 230 I=261,263
04426             MSUB(I)=1
04427   230     CONTINUE
04428           MSUB(277)=1
04429           MSUB(278)=1
04430         ENDIF
04431  
04432       ELSEIF(MSEL.EQ.40) THEN
04433 C...Gluinos and squarks.
04434         IF(MINT(43).EQ.4) THEN
04435           MSUB(243)=1
04436           MSUB(244)=1
04437           MSUB(258)=1
04438           MSUB(259)=1
04439           MSUB(261)=1
04440           MSUB(262)=1
04441           MSUB(264)=1
04442           MSUB(265)=1
04443           DO 240 I=271,296
04444             MSUB(I)=1
04445   240     CONTINUE
04446         ELSEIF(MINT(43).EQ.1) THEN
04447           MSUB(277)=1
04448           MSUB(278)=1
04449         ENDIF
04450  
04451       ELSEIF(MSEL.EQ.41) THEN
04452 C...Stop production.
04453         MSUB(261)=1
04454         MSUB(262)=1
04455         MSUB(263)=1
04456         IF(MINT(43).EQ.4) THEN
04457           MSUB(264)=1
04458           MSUB(265)=1
04459         ENDIF
04460  
04461       ELSEIF(MSEL.EQ.42) THEN
04462 C...Slepton production.
04463         DO 250 I=201,214
04464           MSUB(I)=1
04465   250   CONTINUE
04466         IF(MINT(43).NE.4) THEN
04467           MSUB(210)=0
04468           MSUB(211)=0
04469           MSUB(212)=0
04470         ENDIF
04471  
04472       ELSEIF(MSEL.EQ.43) THEN
04473 C...Neutralino/Chargino + Gluino/Squark.
04474         IF(MINT(43).EQ.4) THEN
04475           DO 260 I=237,242
04476             MSUB(I)=1
04477   260     CONTINUE
04478           DO 270 I=246,257
04479             MSUB(I)=1
04480   270     CONTINUE
04481         ENDIF
04482  
04483       ELSEIF(MSEL.EQ.44) THEN
04484 C...Neutralino/Chargino pair production.
04485         IF(MINT(43).EQ.4) THEN
04486           DO 280 I=216,236
04487             MSUB(I)=1
04488   280     CONTINUE
04489         ELSEIF(MINT(43).EQ.1) THEN
04490           DO 290 I=216,228
04491             MSUB(I)=1
04492   290     CONTINUE
04493         ENDIF
04494  
04495       ELSEIF(MSEL.EQ.45) THEN
04496 C...Sbottom production.
04497         MSUB(287)=1
04498         MSUB(288)=1
04499         IF(MINT(43).EQ.4) THEN
04500           DO 300 I=281,296
04501             MSUB(I)=1
04502   300     CONTINUE
04503         ENDIF
04504 
04505       ELSEIF(MSEL.EQ.50) THEN
04506         DO 305 I=361,368
04507           MSUB(I)=1
04508   305   CONTINUE
04509         IF(MINT(43).EQ.4) THEN
04510           DO 307 I=370,377
04511             MSUB(I)=1
04512   307     CONTINUE
04513         ENDIF
04514 
04515       ENDIF
04516  
04517 C...Find heaviest new quark flavour allowed in processes 81-84.
04518       KFLQM=1
04519       DO 310 I=1,MIN(8,MDCY(21,3))
04520         IDC=I+MDCY(21,2)-1
04521         IF(MDME(IDC,1).LE.0) GOTO 310
04522         KFLQM=I
04523   310 CONTINUE
04524       IF(MSTP(7).GE.1.AND.MSTP(7).LE.8.AND.(MSEL.LE.3.OR.MSEL.GE.9))
04525      &KFLQM=MSTP(7)
04526       MINT(55)=KFLQM
04527       KFPR(81,1)=KFLQM
04528       KFPR(81,2)=KFLQM
04529       KFPR(82,1)=KFLQM
04530       KFPR(82,2)=KFLQM
04531       KFPR(83,1)=KFLQM
04532       KFPR(84,1)=KFLQM
04533       KFPR(84,2)=KFLQM
04534  
04535 C...Find heaviest new fermion flavour allowed in process 85.
04536       KFLFM=1
04537       DO 320 I=1,MIN(12,MDCY(22,3))
04538         IDC=I+MDCY(22,2)-1
04539         IF(MDME(IDC,1).LE.0) GOTO 320
04540         KFLFM=KFDP(IDC,1)
04541   320 CONTINUE
04542       IF(((MSTP(7).GE.1.AND.MSTP(7).LE.8).OR.(MSTP(7).GE.11.AND.
04543      &MSTP(7).LE.18)).AND.(MSEL.LE.3.OR.MSEL.GE.9)) KFLFM=MSTP(7)
04544       MINT(56)=KFLFM
04545       KFPR(85,1)=KFLFM
04546       KFPR(85,2)=KFLFM
04547  
04548       RETURN
04549       END
04550  
04551 C*********************************************************************
04552  
04553 C...PYXTOT
04554 C...Parametrizes total, elastic and diffractive cross-sections
04555 C...for different energies and beams. Donnachie-Landshoff for
04556 C...total and Schuler-Sjostrand for elastic and diffractive.
04557 C...Process code IPROC:
04558 C...=  1 : p + p;
04559 C...=  2 : pbar + p;
04560 C...=  3 : pi+ + p;
04561 C...=  4 : pi- + p;
04562 C...=  5 : pi0 + p;
04563 C...=  6 : phi + p;
04564 C...=  7 : J/psi + p;
04565 C...= 11 : rho + rho;
04566 C...= 12 : rho + phi;
04567 C...= 13 : rho + J/psi;
04568 C...= 14 : phi + phi;
04569 C...= 15 : phi + J/psi;
04570 C...= 16 : J/psi + J/psi;
04571 C...= 21 : gamma + p (DL);
04572 C...= 22 : gamma + p (VDM).
04573 C...= 23 : gamma + pi (DL);
04574 C...= 24 : gamma + pi (VDM);
04575 C...= 25 : gamma + gamma (DL);
04576 C...= 26 : gamma + gamma (VDM).
04577  
04578       SUBROUTINE PYXTOT
04579  
04580 C...Double precision and integer declarations.
04581       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
04582       IMPLICIT INTEGER(I-N)
04583       INTEGER PYK,PYCHGE,PYCOMP
04584 C...Commonblocks.
04585       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
04586       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
04587       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
04588       COMMON/PYINT1/MINT(400),VINT(400)
04589       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
04590       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
04591       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT5/,/PYINT7/
04592 C...Local arrays.
04593       DIMENSION NPROC(30),XPAR(30),YPAR(30),IHADA(20),IHADB(20),
04594      &PMHAD(4),BHAD(4),BETP(4),IFITSD(20),IFITDD(20),CEFFS(10,8),
04595      &CEFFD(10,9),SIGTMP(6,0:5)
04596  
04597 C...Common constants.
04598       DATA EPS/0.0808D0/, ETA/-0.4525D0/, ALP/0.25D0/, CRES/2D0/,
04599      &PMRC/1.062D0/, SMP/0.880D0/, FACEL/0.0511D0/, FACSD/0.0336D0/,
04600      &FACDD/0.0084D0/
04601  
04602 C...Number of multiple processes to be evaluated (= 0 : undefined).
04603       DATA NPROC/7*1,3*0,6*1,4*0,4*3,2*6,4*0/
04604 C...X and Y parameters of sigmatot = X * s**epsilon + Y * s**(-eta).
04605       DATA XPAR/2*21.70D0,3*13.63D0,10.01D0,0.970D0,3*0D0,
04606      &8.56D0,6.29D0,0.609D0,4.62D0,0.447D0,0.0434D0,4*0D0,
04607      &0.0677D0,0.0534D0,0.0425D0,0.0335D0,2.11D-4,1.31D-4,4*0D0/
04608       DATA YPAR/
04609      &56.08D0,98.39D0,27.56D0,36.02D0,31.79D0,-1.51D0,-0.146D0,3*0D0,
04610      &13.08D0,-0.62D0,-0.060D0,0.030D0,-0.0028D0,0.00028D0,4*0D0,
04611      &0.129D0,0.115D0,0.081D0,0.072D0,2.15D-4,1.70D-4,4*0D0/
04612  
04613 C...Beam and target hadron class:
04614 C...= 1 : p/n ; = 2 : pi/rho/omega; = 3 : phi; = 4 : J/psi.
04615       DATA IHADA/2*1,3*2,3,4,3*0,3*2,2*3,4,4*0/
04616       DATA IHADB/7*1,3*0,2,3,4,3,2*4,4*0/
04617 C...Characteristic class masses, slope parameters, beta = sqrt(X).
04618       DATA PMHAD/0.938D0,0.770D0,1.020D0,3.097D0/
04619       DATA BHAD/2.3D0,1.4D0,1.4D0,0.23D0/
04620       DATA BETP/4.658D0,2.926D0,2.149D0,0.208D0/
04621  
04622 C...Fitting constants used in parametrizations of diffractive results.
04623       DATA IFITSD/2*1,3*2,3,4,3*0,5,6,7,8,9,10,4*0/
04624       DATA IFITDD/2*1,3*2,3,4,3*0,5,6,7,8,9,10,4*0/
04625       DATA ((CEFFS(J1,J2),J2=1,8),J1=1,10)/
04626      &0.213D0, 0.0D0, -0.47D0, 150D0, 0.213D0, 0.0D0, -0.47D0, 150D0,
04627      &0.213D0, 0.0D0, -0.47D0, 150D0, 0.267D0, 0.0D0, -0.47D0, 100D0,
04628      &0.213D0, 0.0D0, -0.47D0, 150D0, 0.232D0, 0.0D0, -0.47D0, 110D0,
04629      &0.213D0, 7.0D0, -0.55D0, 800D0, 0.115D0, 0.0D0, -0.47D0, 110D0,
04630      &0.267D0, 0.0D0, -0.46D0,  75D0, 0.267D0, 0.0D0, -0.46D0,  75D0,
04631      &0.232D0, 0.0D0, -0.46D0,  85D0, 0.267D0, 0.0D0, -0.48D0, 100D0,
04632      &0.115D0, 0.0D0, -0.50D0,  90D0, 0.267D0, 6.0D0, -0.56D0, 420D0,
04633      &0.232D0, 0.0D0, -0.48D0, 110D0, 0.232D0, 0.0D0, -0.48D0, 110D0,
04634      &0.115D0, 0.0D0, -0.52D0, 120D0, 0.232D0, 6.0D0, -0.56D0, 470D0,
04635      &0.115D0, 5.5D0, -0.58D0, 570D0, 0.115D0, 5.5D0, -0.58D0, 570D0/
04636       DATA ((CEFFD(J1,J2),J2=1,9),J1=1,10)/
04637      &3.11D0, -7.34D0,  9.71D0, 0.068D0, -0.42D0,  1.31D0,
04638      &-1.37D0,  35.0D0,  118D0,  3.11D0, -7.10D0,  10.6D0,
04639      &0.073D0, -0.41D0, 1.17D0, -1.41D0,  31.6D0,   95D0,
04640      &3.12D0, -7.43D0,  9.21D0, 0.067D0, -0.44D0,  1.41D0,
04641      &-1.35D0,  36.5D0,  132D0,  3.13D0, -8.18D0, -4.20D0,
04642      &0.056D0, -0.71D0, 3.12D0, -1.12D0,  55.2D0, 1298D0,
04643      &3.11D0, -6.90D0,  11.4D0, 0.078D0, -0.40D0,  1.05D0,
04644      &-1.40D0,  28.4D0,   78D0,  3.11D0, -7.13D0,  10.0D0,
04645      &0.071D0, -0.41D0, 1.23D0, -1.34D0,  33.1D0,  105D0,
04646      &3.12D0, -7.90D0, -1.49D0, 0.054D0, -0.64D0,  2.72D0,
04647      &-1.13D0,  53.1D0,  995D0,  3.11D0, -7.39D0,  8.22D0,
04648      &0.065D0, -0.44D0, 1.45D0, -1.36D0,  38.1D0,  148D0,
04649      &3.18D0, -8.95D0, -3.37D0, 0.057D0, -0.76D0,  3.32D0,
04650      &-1.12D0,  55.6D0, 1472D0,  4.18D0, -29.2D0,  56.2D0,
04651      &0.074D0, -1.36D0, 6.67D0, -1.14D0, 116.2D0, 6532D0/
04652  
04653 C...Parameters. Combinations of the energy.
04654       AEM=PARU(101)
04655       PMTH=PARP(102)
04656       S=VINT(2)
04657       SRT=VINT(1)
04658       SEPS=S**EPS
04659       SETA=S**ETA
04660       SLOG=LOG(S)
04661  
04662 C...Ratio of gamma/pi (for rescaling in parton distributions).
04663       VINT(281)=(XPAR(22)*SEPS+YPAR(22)*SETA)/
04664      &(XPAR(5)*SEPS+YPAR(5)*SETA)
04665       VINT(317)=1D0 
04666       IF(MINT(50).NE.1) RETURN
04667  
04668 C...Order flavours of incoming particles: KF1 < KF2.
04669       IF(IABS(MINT(11)).LE.IABS(MINT(12))) THEN
04670         KF1=IABS(MINT(11))
04671         KF2=IABS(MINT(12))
04672         IORD=1
04673       ELSE
04674         KF1=IABS(MINT(12))
04675         KF2=IABS(MINT(11))
04676         IORD=2
04677       ENDIF
04678       ISGN12=ISIGN(1,MINT(11)*MINT(12))
04679  
04680 C...Find process number (for lookup tables).
04681       IF(KF1.GT.1000) THEN
04682         IPROC=1
04683         IF(ISGN12.LT.0) IPROC=2
04684       ELSEIF(KF1.GT.100.AND.KF2.GT.1000) THEN
04685         IPROC=3
04686         IF(ISGN12.LT.0) IPROC=4
04687         IF(KF1.EQ.111) IPROC=5
04688       ELSEIF(KF1.GT.100) THEN
04689         IPROC=11
04690       ELSEIF(KF2.GT.1000) THEN
04691         IPROC=21
04692         IF(MINT(123).EQ.2.OR.MINT(123).EQ.3) IPROC=22
04693       ELSEIF(KF2.GT.100) THEN
04694         IPROC=23
04695         IF(MINT(123).EQ.2.OR.MINT(123).EQ.3) IPROC=24
04696       ELSE
04697         IPROC=25
04698         IF(MINT(123).EQ.2.OR.MINT(123).EQ.3.OR.MINT(123).EQ.7) IPROC=26
04699       ENDIF
04700  
04701 C... Number of multiple processes to be stored; beam/target side.
04702       NPR=NPROC(IPROC)
04703       MINT(101)=1
04704       MINT(102)=1
04705       IF(NPR.EQ.3) THEN
04706         MINT(100+IORD)=4
04707       ELSEIF(NPR.EQ.6) THEN
04708         MINT(101)=4
04709         MINT(102)=4
04710       ENDIF
04711       N1=0
04712       IF(MINT(101).EQ.4) N1=4
04713       N2=0
04714       IF(MINT(102).EQ.4) N2=4
04715  
04716 C...Do not do any more for user-set or undefined cross-sections.
04717       IF(MSTP(31).LE.0) RETURN
04718       IF(NPR.EQ.0) CALL PYERRM(26,
04719      &'(PYXTOT:) cross section for this process not yet implemented')
04720  
04721 C...Parameters. Combinations of the energy.
04722       AEM=PARU(101)
04723       PMTH=PARP(102)
04724       S=VINT(2)
04725       SRT=VINT(1)
04726       SEPS=S**EPS
04727       SETA=S**ETA
04728       SLOG=LOG(S)
04729  
04730 C...Loop over multiple processes (for VDM).
04731       DO 110 I=1,NPR
04732         IF(NPR.EQ.1) THEN
04733           IPR=IPROC
04734         ELSEIF(NPR.EQ.3) THEN
04735           IPR=I+4
04736           IF(KF2.LT.1000) IPR=I+10
04737         ELSEIF(NPR.EQ.6) THEN
04738           IPR=I+10
04739         ENDIF
04740  
04741 C...Evaluate hadron species, mass, slope contribution and fit number.
04742         IHA=IHADA(IPR)
04743         IHB=IHADB(IPR)
04744         PMA=PMHAD(IHA)
04745         PMB=PMHAD(IHB)
04746         BHA=BHAD(IHA)
04747         BHB=BHAD(IHB)
04748         ISD=IFITSD(IPR)
04749         IDD=IFITDD(IPR)
04750  
04751 C...Skip if energy too low relative to masses.
04752         DO 100 J=0,5
04753           SIGTMP(I,J)=0D0
04754   100   CONTINUE
04755         IF(SRT.LT.PMA+PMB+PARP(104)) GOTO 110
04756  
04757 C...Total cross-section. Elastic slope parameter and cross-section.
04758         SIGTMP(I,0)=XPAR(IPR)*SEPS+YPAR(IPR)*SETA
04759         BEL=2D0*BHA+2D0*BHB+4D0*SEPS-4.2D0
04760         SIGTMP(I,1)=FACEL*SIGTMP(I,0)**2/BEL
04761  
04762 C...Diffractive scattering A + B -> X + B.
04763         BSD=2D0*BHB
04764         SQML=(PMA+PMTH)**2
04765         SQMU=S*CEFFS(ISD,1)+CEFFS(ISD,2)
04766         SUM1=LOG((BSD+2D0*ALP*LOG(S/SQML))/
04767      &  (BSD+2D0*ALP*LOG(S/SQMU)))/(2D0*ALP)
04768         BXB=CEFFS(ISD,3)+CEFFS(ISD,4)/S
04769         SUM2=CRES*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)/
04770      &  (BSD+2D0*ALP*LOG(S/((PMA+PMTH)*(PMA+PMRC)))+BXB)
04771         SIGTMP(I,2)=FACSD*XPAR(IPR)*BETP(IHB)*MAX(0D0,SUM1+SUM2)
04772  
04773 C...Diffractive scattering A + B -> A + X.
04774         BSD=2D0*BHA
04775         SQML=(PMB+PMTH)**2
04776         SQMU=S*CEFFS(ISD,5)+CEFFS(ISD,6)
04777         SUM1=LOG((BSD+2D0*ALP*LOG(S/SQML))/
04778      &  (BSD+2D0*ALP*LOG(S/SQMU)))/(2D0*ALP)
04779         BAX=CEFFS(ISD,7)+CEFFS(ISD,8)/S
04780         SUM2=CRES*LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)/
04781      &  (BSD+2D0*ALP*LOG(S/((PMB+PMTH)*(PMB+PMRC)))+BAX)
04782         SIGTMP(I,3)=FACSD*XPAR(IPR)*BETP(IHA)*MAX(0D0,SUM1+SUM2)
04783  
04784 C...Order single diffractive correctly.
04785         IF(IORD.EQ.2) THEN
04786           SIGSAV=SIGTMP(I,2)
04787           SIGTMP(I,2)=SIGTMP(I,3)
04788           SIGTMP(I,3)=SIGSAV
04789         ENDIF
04790  
04791 C...Double diffractive scattering A + B -> X1 + X2.
04792         YEFF=LOG(S*SMP/((PMA+PMTH)*(PMB+PMTH))**2)
04793         DEFF=CEFFD(IDD,1)+CEFFD(IDD,2)/SLOG+CEFFD(IDD,3)/SLOG**2
04794         SUM1=DEFF+YEFF*(LOG(MAX(1D-10,YEFF/DEFF))-1D0)/(2D0*ALP)
04795         IF(YEFF.LE.0) SUM1=0D0
04796         SQMU=S*(CEFFD(IDD,4)+CEFFD(IDD,5)/SLOG+CEFFD(IDD,6)/SLOG**2)
04797         SLUP=LOG(MAX(1.1D0,S/(ALP*(PMA+PMTH)**2*(PMB+PMTH)*(PMB+PMRC))))
04798         SLDN=LOG(MAX(1.1D0,S/(ALP*SQMU*(PMB+PMTH)*(PMB+PMRC))))
04799         SUM2=CRES*LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)*LOG(SLUP/SLDN)/
04800      &  (2D0*ALP)
04801         SLUP=LOG(MAX(1.1D0,S/(ALP*(PMB+PMTH)**2*(PMA+PMTH)*(PMA+PMRC))))
04802         SLDN=LOG(MAX(1.1D0,S/(ALP*SQMU*(PMA+PMTH)*(PMA+PMRC))))
04803         SUM3=CRES*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)*LOG(SLUP/SLDN)/
04804      &  (2D0*ALP)
04805         BXX=CEFFD(IDD,7)+CEFFD(IDD,8)/SRT+CEFFD(IDD,9)/S
04806         SLRR=LOG(S/(ALP*(PMA+PMTH)*(PMA+PMRC)*(PMB+PMTH)*(PMB*PMRC)))
04807         SUM4=CRES**2*LOG(1D0+((PMA+PMRC)/(PMA+PMTH))**2)*
04808      &  LOG(1D0+((PMB+PMRC)/(PMB+PMTH))**2)/MAX(0.1D0,2D0*ALP*SLRR+BXX)
04809         SIGTMP(I,4)=FACDD*XPAR(IPR)*MAX(0D0,SUM1+SUM2+SUM3+SUM4)
04810  
04811 C...Non-diffractive by unitarity.
04812         SIGTMP(I,5)=SIGTMP(I,0)-SIGTMP(I,1)-SIGTMP(I,2)-SIGTMP(I,3)-
04813      &  SIGTMP(I,4)
04814   110 CONTINUE
04815  
04816 C...Put temporary results in output array: only one process.
04817       IF(MINT(101).EQ.1.AND.MINT(102).EQ.1) THEN
04818         DO 120 J=0,5
04819           SIGT(0,0,J)=SIGTMP(1,J)
04820   120   CONTINUE
04821  
04822 C...Beam multiple processes.
04823       ELSEIF(MINT(101).EQ.4.AND.MINT(102).EQ.1) THEN
04824         IF(MINT(107).EQ.2) THEN
04825           VINT(317)=(PMHAD(2)**2/(PMHAD(2)**2+VINT(307)))**2
04826         ELSE
04827           VINT(317)=16D0*PARP(15)**2*VINT(154)**2/
04828      &    ((4D0*PARP(15)**2+VINT(307))*(4D0*VINT(154)**2+VINT(307)))
04829         ENDIF
04830         IF(MSTP(20).GT.0) THEN
04831           VINT(317)=VINT(317)*(VINT(2)/(VINT(2)+VINT(307)))**MSTP(20)
04832         ENDIF
04833         DO 140 I=1,4
04834           IF(MINT(107).EQ.2) THEN
04835             CONV=(AEM/PARP(160+I))*VINT(317)
04836           ELSEIF(VINT(154).GT.PARP(15)) THEN
04837             CONV=(AEM/PARU(1))*(KCHG(I,1)/3D0)**2*PARP(18)**2*
04838      &      (1D0/PARP(15)**2-1D0/VINT(154)**2)*VINT(317)
04839           ELSE
04840             CONV=0D0
04841           ENDIF
04842           I1=MAX(1,I-1)
04843           DO 130 J=0,5
04844             SIGT(I,0,J)=CONV*SIGTMP(I1,J)
04845   130     CONTINUE
04846   140   CONTINUE
04847         DO 150 J=0,5
04848           SIGT(0,0,J)=SIGT(1,0,J)+SIGT(2,0,J)+SIGT(3,0,J)+SIGT(4,0,J)
04849   150   CONTINUE
04850  
04851 C...Target multiple processes.
04852       ELSEIF(MINT(101).EQ.1.AND.MINT(102).EQ.4) THEN
04853         IF(MINT(108).EQ.2) THEN
04854           VINT(317)=(PMHAD(2)**2/(PMHAD(2)**2+VINT(308)))**2
04855         ELSE
04856           VINT(317)=16D0*PARP(15)**2*VINT(154)**2/
04857      &    ((4D0*PARP(15)**2+VINT(308))*(4D0*VINT(154)**2+VINT(308)))
04858         ENDIF
04859         IF(MSTP(20).GT.0) THEN
04860           VINT(317)=VINT(317)*(VINT(2)/(VINT(2)+VINT(308)))**MSTP(20)
04861         ENDIF
04862         DO 170 I=1,4
04863           IF(MINT(108).EQ.2) THEN
04864             CONV=(AEM/PARP(160+I))*VINT(317)
04865           ELSEIF(VINT(154).GT.PARP(15)) THEN
04866             CONV=(AEM/PARU(1))*(KCHG(I,1)/3D0)**2*PARP(18)**2*
04867      &      (1D0/PARP(15)**2-1D0/VINT(154)**2)*VINT(317)
04868           ELSE
04869             CONV=0D0
04870           ENDIF
04871           IV=MAX(1,I-1)
04872           DO 160 J=0,5
04873             SIGT(0,I,J)=CONV*SIGTMP(IV,J)
04874   160     CONTINUE
04875   170   CONTINUE
04876         DO 180 J=0,5
04877           SIGT(0,0,J)=SIGT(0,1,J)+SIGT(0,2,J)+SIGT(0,3,J)+SIGT(0,4,J)
04878   180   CONTINUE
04879  
04880 C...Both beam and target multiple processes.
04881       ELSE
04882         IF(MINT(107).EQ.2) THEN
04883           VINT(317)=(PMHAD(2)**2/(PMHAD(2)**2+VINT(307)))**2
04884         ELSE
04885           VINT(317)=16D0*PARP(15)**2*VINT(154)**2/
04886      &    ((4D0*PARP(15)**2+VINT(307))*(4D0*VINT(154)**2+VINT(307)))
04887         ENDIF
04888         IF(MINT(108).EQ.2) THEN
04889           VINT(317)=VINT(317)*(PMHAD(2)**2/(PMHAD(2)**2+VINT(308)))**2
04890         ELSE
04891           VINT(317)=VINT(317)*16D0*PARP(15)**2*VINT(154)**2/
04892      &    ((4D0*PARP(15)**2+VINT(308))*(4D0*VINT(154)**2+VINT(308)))
04893         ENDIF
04894         IF(MSTP(20).GT.0) THEN
04895           VINT(317)=VINT(317)*(VINT(2)/(VINT(2)+VINT(307)+
04896      &    VINT(308)))**MSTP(20)
04897         ENDIF
04898         DO 210 I1=1,4
04899           DO 200 I2=1,4
04900             IF(MINT(107).EQ.2) THEN
04901               CONV=(AEM/PARP(160+I1))*VINT(317)
04902             ELSEIF(VINT(154).GT.PARP(15)) THEN
04903               CONV=(AEM/PARU(1))*(KCHG(I1,1)/3D0)**2*PARP(18)**2*
04904      &        (1D0/PARP(15)**2-1D0/VINT(154)**2)*VINT(317)
04905             ELSE
04906               CONV=0D0
04907             ENDIF
04908             IF(MINT(108).EQ.2) THEN
04909               CONV=CONV*(AEM/PARP(160+I2))
04910             ELSEIF(VINT(154).GT.PARP(15)) THEN
04911               CONV=CONV*(AEM/PARU(1))*(KCHG(I2,1)/3D0)**2*PARP(18)**2*
04912      &        (1D0/PARP(15)**2-1D0/VINT(154)**2)
04913             ELSE
04914               CONV=0D0
04915             ENDIF
04916             IF(I1.LE.2) THEN
04917               IV=MAX(1,I2-1)
04918             ELSEIF(I2.LE.2) THEN
04919               IV=MAX(1,I1-1)
04920             ELSEIF(I1.EQ.I2) THEN
04921               IV=2*I1-2
04922             ELSE
04923               IV=5
04924             ENDIF
04925             DO 190 J=0,5
04926               JV=J
04927               IF(I2.GT.I1.AND.(J.EQ.2.OR.J.EQ.3)) JV=5-J
04928               SIGT(I1,I2,J)=CONV*SIGTMP(IV,JV)
04929   190       CONTINUE
04930   200     CONTINUE
04931   210   CONTINUE
04932         DO 230 J=0,5
04933           DO 220 I=1,4
04934             SIGT(I,0,J)=SIGT(I,1,J)+SIGT(I,2,J)+SIGT(I,3,J)+SIGT(I,4,J)
04935             SIGT(0,I,J)=SIGT(1,I,J)+SIGT(2,I,J)+SIGT(3,I,J)+SIGT(4,I,J)
04936   220     CONTINUE
04937           SIGT(0,0,J)=SIGT(1,0,J)+SIGT(2,0,J)+SIGT(3,0,J)+SIGT(4,0,J)
04938   230   CONTINUE
04939       ENDIF
04940  
04941 C...Scale up uniformly for Donnachie-Landshoff parametrization.
04942       IF(IPROC.EQ.21.OR.IPROC.EQ.23.OR.IPROC.EQ.25) THEN
04943         RFAC=(XPAR(IPROC)*SEPS+YPAR(IPROC)*SETA)/SIGT(0,0,0)
04944         DO 260 I1=0,N1
04945           DO 250 I2=0,N2
04946             DO 240 J=0,5
04947               SIGT(I1,I2,J)=RFAC*SIGT(I1,I2,J)
04948   240       CONTINUE
04949   250     CONTINUE
04950   260   CONTINUE
04951       ENDIF
04952  
04953       RETURN
04954       END
04955  
04956 C*********************************************************************
04957  
04958 C...PYMAXI
04959 C...Finds optimal set of coefficients for kinematical variable selection
04960 C...and the maximum of the part of the differential cross-section used
04961 C...in the event weighting.
04962  
04963       SUBROUTINE PYMAXI
04964  
04965 C...Double precision and integer declarations.
04966       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
04967       IMPLICIT INTEGER(I-N)
04968       INTEGER PYK,PYCHGE,PYCOMP
04969 C...Parameter statement to help give large particle numbers.
04970       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
04971 C...Commonblocks.
04972       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
04973       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
04974       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
04975       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
04976       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
04977       COMMON/PYINT1/MINT(400),VINT(400)
04978       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
04979       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
04980       COMMON/PYINT4/MWID(500),WIDS(500,5)
04981       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
04982       COMMON/PYINT6/PROC(0:500)
04983       CHARACTER PROC*28
04984       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
04985       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
04986      &/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT6/,/PYINT7/
04987 C...Local arrays, character variables and data.
04988       CHARACTER CVAR(4)*4
04989       DIMENSION NPTS(4),MVARPT(500,4),VINTPT(500,30),SIGSPT(500),
04990      &NAREL(7),WTREL(7),WTMAT(7,7),WTRELN(7),COEFU(7),COEFO(7),
04991      &IACCMX(4),SIGSMX(4),SIGSSM(3),PMMN(2)
04992       DATA CVAR/'tau ','tau''','y*  ','cth '/
04993       DATA SIGSSM/3*0D0/
04994  
04995 C...Initial values and loop over subprocesses.
04996       NPOSI=0
04997       VINT(143)=1D0
04998       VINT(144)=1D0
04999       XSEC(0,1)=0D0
05000       DO 460 ISUB=1,500
05001         MINT(1)=ISUB
05002         MINT(51)=0
05003  
05004 C...Find maximum weight factors for photon flux.
05005         IF(MSUB(ISUB).EQ.1.OR.(ISUB.GE.91.AND.ISUB.LE.100)) THEN
05006           IF(MINT(141).NE.0.OR.MINT(142).NE.0) CALL PYGAGA(2,WTGAGA)
05007         ENDIF 
05008 
05009 C...Select subprocess to study: skip cases not applicable.
05010         IF(ISET(ISUB).EQ.11) THEN
05011           IF(MSUB(ISUB).NE.1) GOTO 460
05012           XSEC(ISUB,1)=1.00001D0*COEF(ISUB,1)
05013           IF(MINT(141).NE.0.OR.MINT(142).NE.0) XSEC(ISUB,1)=
05014      &    WTGAGA*XSEC(ISUB,1)
05015           NPOSI=NPOSI+1
05016           GOTO 450
05017         ELSEIF(ISUB.GE.91.AND.ISUB.LE.95) THEN
05018           CALL PYSIGH(NCHN,SIGS)
05019           XSEC(ISUB,1)=SIGS
05020           IF(MINT(141).NE.0.OR.MINT(142).NE.0) XSEC(ISUB,1)=
05021      &    WTGAGA*XSEC(ISUB,1)
05022           IF(MSUB(ISUB).NE.1) GOTO 460
05023           NPOSI=NPOSI+1
05024           GOTO 450
05025         ELSEIF(ISUB.EQ.99.AND.MSUB(ISUB).EQ.1) THEN
05026           CALL PYSIGH(NCHN,SIGS)
05027           XSEC(ISUB,1)=SIGS
05028           IF(MINT(141).NE.0.OR.MINT(142).NE.0) XSEC(ISUB,1)=
05029      &    WTGAGA*XSEC(ISUB,1)
05030           IF(XSEC(ISUB,1).EQ.0D0) THEN
05031             MSUB(ISUB)=0
05032           ELSE
05033             NPOSI=NPOSI+1
05034           ENDIF
05035           GOTO 450
05036         ELSEIF(ISUB.EQ.96) THEN
05037           IF(MINT(50).EQ.0) GOTO 460
05038           IF(MSUB(95).NE.1.AND.MSTP(81).LE.0.AND.MSTP(131).LE.0)
05039      &    GOTO 460
05040           IF(MINT(49).EQ.0.AND.MSTP(131).EQ.0) GOTO 460
05041         ELSEIF(ISUB.EQ.11.OR.ISUB.EQ.12.OR.ISUB.EQ.13.OR.ISUB.EQ.28.OR.
05042      &    ISUB.EQ.53.OR.ISUB.EQ.68) THEN
05043           IF(MSUB(ISUB).NE.1.OR.MSUB(95).EQ.1) GOTO 460
05044         ELSE
05045           IF(MSUB(ISUB).NE.1) GOTO 460
05046         ENDIF
05047         ISTSB=ISET(ISUB)
05048         IF(ISUB.EQ.96) ISTSB=2
05049         IF(MSTP(122).GE.2) WRITE(MSTU(11),5000) ISUB
05050         MWTXS=0
05051         IF(MSTP(142).GE.1.AND.ISUB.NE.96.AND.MSUB(91)+MSUB(92)+MSUB(93)+
05052      &  MSUB(94)+MSUB(95).EQ.0) MWTXS=1
05053  
05054 C...Find resonances (explicit or implicit in cross-section).
05055         MINT(72)=0
05056         KFR1=0
05057         IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
05058           KFR1=KFPR(ISUB,1)
05059         ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.25.OR.ISUB.EQ.110.OR.ISUB.EQ.165
05060      &    .OR.ISUB.EQ.171.OR.ISUB.EQ.176) THEN
05061           KFR1=23
05062         ELSEIF(ISUB.EQ.23.OR.ISUB.EQ.26.OR.ISUB.EQ.166.OR.ISUB.EQ.172
05063      &    .OR.ISUB.EQ.177) THEN
05064           KFR1=24
05065         ELSEIF(ISUB.GE.71.AND.ISUB.LE.77) THEN
05066           KFR1=25
05067           IF(MSTP(46).EQ.5) THEN
05068             KFR1=30
05069             PMAS(30,1)=PARP(45)
05070             PMAS(30,2)=PARP(45)**3/(96D0*PARU(1)*PARP(47)**2)
05071           ENDIF
05072         ELSEIF(ISUB.EQ.194) THEN
05073           KFR1=54
05074         ELSEIF(ISUB.EQ.195) THEN
05075           KFR1=55
05076         ELSEIF(ISUB.GE.361.AND.ISUB.LE.368) THEN
05077           KFR1=54
05078         ELSEIF(ISUB.GE.370.AND.ISUB.LE.377) THEN
05079           KFR1=55
05080         ENDIF
05081         CKMX=CKIN(2)
05082         IF(CKMX.LE.0D0) CKMX=VINT(1)
05083         KCR1=PYCOMP(KFR1)
05084         IF(KFR1.NE.0) THEN
05085           IF(CKIN(1).GT.PMAS(KCR1,1)+20D0*PMAS(KCR1,2).OR.
05086      &    CKMX.LT.PMAS(KCR1,1)-20D0*PMAS(KCR1,2)) KFR1=0
05087         ENDIF
05088         IF(KFR1.NE.0) THEN
05089           TAUR1=PMAS(KCR1,1)**2/VINT(2)
05090           IF(KFR1.EQ.54) THEN
05091             CALL PYTECM(S1,S2)
05092             TAUR1=S1/VINT(2)
05093           ENDIF
05094           GAMR1=PMAS(KCR1,1)*PMAS(KCR1,2)/VINT(2)
05095           MINT(72)=1
05096           MINT(73)=KFR1
05097           VINT(73)=TAUR1
05098           VINT(74)=GAMR1
05099         ENDIF
05100         KFR2=0
05101         IF(ISUB.EQ.141.OR.ISUB.EQ.194.OR.(ISUB.GE.364.AND.ISUB.LE.368))
05102      $  THEN
05103           KFR2=23
05104           IF(ISUB.EQ.194) THEN
05105             KFR2=56
05106           ELSEIF(ISUB.GE.364.AND.ISUB.LE.368) THEN
05107             KFR2=56
05108           ENDIF
05109           KCR2=PYCOMP(KFR2)
05110           TAUR2=PMAS(KCR2,1)**2/VINT(2)
05111           IF(KFR2.EQ.56) THEN
05112             CALL PYTECM(S1,S2)
05113             TAUR2=S2/VINT(2)
05114           ENDIF
05115           GAMR2=PMAS(KCR2,1)*PMAS(KCR2,2)/VINT(2)
05116           IF(CKIN(1).GT.PMAS(KCR2,1)+20D0*PMAS(KCR2,2).OR.
05117      &    CKMX.LT.PMAS(KCR2,1)-20D0*PMAS(KCR2,2)) KFR2=0
05118           IF(KFR2.NE.0.AND.KFR1.NE.0) THEN
05119             MINT(72)=2
05120             MINT(74)=KFR2
05121             VINT(75)=TAUR2
05122             VINT(76)=GAMR2
05123           ELSEIF(KFR2.NE.0) THEN
05124             KFR1=KFR2
05125             TAUR1=TAUR2
05126             GAMR1=GAMR2
05127             MINT(72)=1
05128             MINT(73)=KFR1
05129             VINT(73)=TAUR1
05130             VINT(74)=GAMR1
05131             KFR2=0
05132           ENDIF
05133         ENDIF
05134  
05135 C...Find product masses and minimum pT of process.
05136         SQM3=0D0
05137         SQM4=0D0
05138         MINT(71)=0
05139         VINT(71)=CKIN(3)
05140         VINT(80)=1D0
05141         IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
05142           NBW=0
05143           DO 110 I=1,2
05144             PMMN(I)=0D0
05145             IF(KFPR(ISUB,I).EQ.0) THEN
05146             ELSEIF(MSTP(42).LE.0.OR.PMAS(PYCOMP(KFPR(ISUB,I)),2).LT.
05147      &        PARP(41)) THEN
05148               IF(I.EQ.1) SQM3=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
05149               IF(I.EQ.2) SQM4=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
05150             ELSE
05151               NBW=NBW+1
05152 C...This prevents SUSY/t particles from becoming too light.
05153               KFLW=KFPR(ISUB,I)
05154               IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
05155                 KCW=PYCOMP(KFLW)
05156                 PMMN(I)=PMAS(KCW,1)
05157                 DO 100 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
05158                   IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
05159                     PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
05160      &              PMAS(PYCOMP(KFDP(IDC,2)),1)
05161                     IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
05162      &              PMAS(PYCOMP(KFDP(IDC,3)),1)
05163                     PMMN(I)=MIN(PMMN(I),PMSUM)
05164                   ENDIF
05165   100           CONTINUE
05166               ELSEIF(KFLW.EQ.6) THEN
05167                 PMMN(I)=PMAS(24,1)+PMAS(5,1)
05168               ENDIF
05169             ENDIF
05170   110     CONTINUE
05171           IF(NBW.GE.1) THEN
05172             CKIN41=CKIN(41)
05173             CKIN43=CKIN(43)
05174             CKIN(41)=MAX(PMMN(1),CKIN(41))
05175             CKIN(43)=MAX(PMMN(2),CKIN(43))
05176             CALL PYOFSH(3,0,KFPR(ISUB,1),KFPR(ISUB,2),0D0,PQM3,PQM4)
05177             CKIN(41)=CKIN41
05178             CKIN(43)=CKIN43
05179             IF(MINT(51).EQ.1) THEN
05180               WRITE(MSTU(11),5100) ISUB
05181               MSUB(ISUB)=0
05182               GOTO 460
05183             ENDIF
05184             SQM3=PQM3**2
05185             SQM4=PQM4**2
05186           ENDIF
05187           IF(MIN(SQM3,SQM4).LT.CKIN(6)**2) MINT(71)=1
05188           IF(MINT(71).EQ.1) VINT(71)=MAX(CKIN(3),CKIN(5))
05189           IF(ISUB.EQ.96.AND.MSTP(82).LE.1) THEN
05190             VINT(71)=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
05191           ELSEIF(ISUB.EQ.96) THEN
05192             VINT(71)=0.08D0*PARP(82)*(VINT(1)/PARP(89))**PARP(90)
05193           ENDIF
05194         ENDIF
05195         VINT(63)=SQM3
05196         VINT(64)=SQM4
05197  
05198 C...Prepare for additional variable choices in 2 -> 3.
05199         IF(ISTSB.EQ.5) THEN
05200           VINT(201)=0D0
05201           IF(KFPR(ISUB,2).GT.0) VINT(201)=PMAS(PYCOMP(KFPR(ISUB,2)),1)
05202           VINT(206)=VINT(201)
05203           VINT(204)=PMAS(23,1)
05204           IF(ISUB.EQ.124.OR.ISUB.EQ.351) VINT(204)=PMAS(24,1)
05205           IF(ISUB.EQ.352) VINT(204)=PMAS(63,1)
05206           IF(ISUB.EQ.121.OR.ISUB.EQ.122.OR.ISUB.EQ.181.OR.ISUB.EQ.182
05207      &    .OR.ISUB.EQ.186.OR.ISUB.EQ.187) VINT(204)=VINT(201)
05208           VINT(209)=VINT(204)
05209         ENDIF
05210  
05211 C...Number of points for each variable: tau, tau', y*, cos(theta-hat).
05212         NPTS(1)=2+2*MINT(72)
05213         IF(MINT(47).EQ.1) THEN
05214           IF(ISTSB.EQ.1.OR.ISTSB.EQ.2) NPTS(1)=1
05215         ELSEIF(MINT(47).GE.5) THEN
05216           IF(ISTSB.LE.2.OR.ISTSB.GT.5) NPTS(1)=NPTS(1)+1
05217         ENDIF
05218         NPTS(2)=1
05219         IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
05220           IF(MINT(47).GE.2) NPTS(2)=2
05221           IF(MINT(47).GE.5) NPTS(2)=3
05222         ENDIF
05223         NPTS(3)=1
05224         IF(MINT(47).EQ.4.OR.MINT(47).EQ.5) THEN
05225           NPTS(3)=3
05226           IF(MINT(45).EQ.3) NPTS(3)=NPTS(3)+1
05227           IF(MINT(46).EQ.3) NPTS(3)=NPTS(3)+1
05228         ENDIF
05229         NPTS(4)=1
05230         IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) NPTS(4)=5
05231         NTRY=NPTS(1)*NPTS(2)*NPTS(3)*NPTS(4)
05232  
05233 C...Reset coefficients of cross-section weighting.
05234         DO 120 J=1,20
05235           COEF(ISUB,J)=0D0
05236   120   CONTINUE
05237         COEF(ISUB,1)=1D0
05238         COEF(ISUB,8)=0.5D0
05239         COEF(ISUB,9)=0.5D0
05240         COEF(ISUB,13)=1D0
05241         COEF(ISUB,18)=1D0
05242         MCTH=0
05243         MTAUP=0
05244         METAUP=0
05245         VINT(23)=0D0
05246         VINT(26)=0D0
05247         SIGSAM=0D0
05248  
05249 C...Find limits and select tau, y*, cos(theta-hat) and tau' values,
05250 C...in grid of phase space points.
05251         CALL PYKLIM(1)
05252         METAU=MINT(51)
05253         NACC=0
05254         DO 150 ITRY=1,NTRY
05255           MINT(51)=0
05256           IF(METAU.EQ.1) GOTO 150
05257           IF(MOD(ITRY-1,NPTS(2)*NPTS(3)*NPTS(4)).EQ.0) THEN
05258             MTAU=1+(ITRY-1)/(NPTS(2)*NPTS(3)*NPTS(4))
05259             IF(MTAU.GT.2+2*MINT(72)) MTAU=7
05260             RTAU=0.5D0
05261 C...Special case when both resonances have same mass,
05262 C...as is often the case in process 194.
05263             IF(MINT(72).EQ.2) THEN
05264               IF(ABS(PMAS(KCR2,1)-PMAS(KCR1,1)).LT.
05265      &        0.01D0*(PMAS(KCR2,1)+PMAS(KCR1,1))) THEN
05266                 IF(MTAU.EQ.3.OR.MTAU.EQ.4) THEN
05267                   RTAU=0.4D0
05268                 ELSEIF(MTAU.EQ.5.OR.MTAU.EQ.6) THEN
05269                   RTAU=0.6D0
05270                 ENDIF
05271               ENDIF
05272             ENDIF
05273             CALL PYKMAP(1,MTAU,RTAU)
05274             IF(ISTSB.GE.3.AND.ISTSB.LE.5) CALL PYKLIM(4)
05275             METAUP=MINT(51)
05276           ENDIF
05277           IF(METAUP.EQ.1) GOTO 150
05278           IF(ISTSB.GE.3.AND.ISTSB.LE.5.AND.MOD(ITRY-1,NPTS(3)*NPTS(4))
05279      &    .EQ.0) THEN
05280             MTAUP=1+MOD((ITRY-1)/(NPTS(3)*NPTS(4)),NPTS(2))
05281             CALL PYKMAP(4,MTAUP,0.5D0)
05282           ENDIF
05283           IF(MOD(ITRY-1,NPTS(3)*NPTS(4)).EQ.0) THEN
05284             CALL PYKLIM(2)
05285             MEYST=MINT(51)
05286           ENDIF
05287           IF(MEYST.EQ.1) GOTO 150
05288           IF(MOD(ITRY-1,NPTS(4)).EQ.0) THEN
05289             MYST=1+MOD((ITRY-1)/NPTS(4),NPTS(3))
05290             IF(MYST.EQ.4.AND.MINT(45).NE.3) MYST=5
05291             CALL PYKMAP(2,MYST,0.5D0)
05292             CALL PYKLIM(3)
05293             MECTH=MINT(51)
05294           ENDIF
05295           IF(MECTH.EQ.1) GOTO 150
05296           IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
05297             MCTH=1+MOD(ITRY-1,NPTS(4))
05298             CALL PYKMAP(3,MCTH,0.5D0)
05299           ENDIF
05300           IF(ISUB.EQ.96) VINT(25)=VINT(21)*(1D0-VINT(23)**2)
05301  
05302 C...Store position and limits.
05303           MINT(51)=0
05304           CALL PYKLIM(0)
05305           IF(MINT(51).EQ.1) GOTO 150
05306           NACC=NACC+1
05307           MVARPT(NACC,1)=MTAU
05308           MVARPT(NACC,2)=MTAUP
05309           MVARPT(NACC,3)=MYST
05310           MVARPT(NACC,4)=MCTH
05311           DO 130 J=1,30
05312             VINTPT(NACC,J)=VINT(10+J)
05313   130     CONTINUE
05314  
05315 C...Normal case: calculate cross-section.
05316           IF(ISTSB.NE.5) THEN
05317             CALL PYSIGH(NCHN,SIGS)
05318             IF(MWTXS.EQ.1) THEN
05319               CALL PYEVWT(WTXS)
05320               SIGS=WTXS*SIGS
05321             ENDIF
05322  
05323 C..2 -> 3: find highest value out of a number of tries.
05324           ELSE
05325             SIGS=0D0
05326             DO 140 IKIN3=1,MSTP(129)
05327               CALL PYKMAP(5,0,0D0)
05328               IF(MINT(51).EQ.1) GOTO 140
05329               CALL PYSIGH(NCHN,SIGTMP)
05330               IF(MWTXS.EQ.1) THEN
05331                 CALL PYEVWT(WTXS)
05332                 SIGTMP=WTXS*SIGTMP
05333               ENDIF
05334               IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
05335   140       CONTINUE
05336           ENDIF
05337  
05338 C...Store cross-section.
05339           SIGSPT(NACC)=SIGS
05340           IF(SIGS.GT.SIGSAM) SIGSAM=SIGS
05341           IF(MSTP(122).GE.2) WRITE(MSTU(11),5200) MTAU,MYST,MCTH,MTAUP,
05342      &    VINT(21),VINT(22),VINT(23),VINT(26),SIGS
05343   150   CONTINUE
05344         IF(NACC.EQ.0) THEN
05345           WRITE(MSTU(11),5100) ISUB
05346           MSUB(ISUB)=0
05347           GOTO 460
05348         ELSEIF(SIGSAM.EQ.0D0) THEN
05349           WRITE(MSTU(11),5300) ISUB
05350           MSUB(ISUB)=0
05351           GOTO 460
05352         ENDIF
05353         IF(ISUB.NE.96) NPOSI=NPOSI+1
05354  
05355 C...Calculate integrals in tau over maximal phase space limits.
05356         TAUMIN=VINT(11)
05357         TAUMAX=VINT(31)
05358         ATAU1=LOG(TAUMAX/TAUMIN)
05359         IF(NPTS(1).GE.2) THEN
05360           ATAU2=(TAUMAX-TAUMIN)/(TAUMAX*TAUMIN)
05361         ENDIF
05362         IF(NPTS(1).GE.4) THEN
05363           ATAU3=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR1)/(TAUMAX+TAUR1))/TAUR1
05364           ATAU4=(ATAN((TAUMAX-TAUR1)/GAMR1)-ATAN((TAUMIN-TAUR1)/GAMR1))/
05365      &    GAMR1
05366         ENDIF
05367         IF(NPTS(1).GE.6) THEN
05368           ATAU5=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR2)/(TAUMAX+TAUR2))/TAUR2
05369           ATAU6=(ATAN((TAUMAX-TAUR2)/GAMR2)-ATAN((TAUMIN-TAUR2)/GAMR2))/
05370      &    GAMR2
05371         ENDIF
05372         IF(NPTS(1).GT.2+2*MINT(72)) THEN
05373           ATAU7=LOG(MAX(2D-10,1D0-TAUMIN)/MAX(2D-10,1D0-TAUMAX))
05374         ENDIF
05375  
05376 C...Reset. Sum up cross-sections in points calculated.
05377         DO 320 IVAR=1,4
05378           IF(NPTS(IVAR).EQ.1) GOTO 320
05379           IF(ISUB.EQ.96.AND.IVAR.EQ.4) GOTO 320
05380           NBIN=NPTS(IVAR)
05381           DO 170 J1=1,NBIN
05382             NAREL(J1)=0
05383             WTREL(J1)=0D0
05384             COEFU(J1)=0D0
05385             DO 160 J2=1,NBIN
05386               WTMAT(J1,J2)=0D0
05387   160       CONTINUE
05388   170     CONTINUE
05389           DO 180 IACC=1,NACC
05390             IBIN=MVARPT(IACC,IVAR)
05391             IF(IVAR.EQ.1.AND.IBIN.EQ.7) IBIN=3+2*MINT(72)
05392             IF(IVAR.EQ.3.AND.IBIN.EQ.5.AND.MINT(45).NE.3) IBIN=4
05393             NAREL(IBIN)=NAREL(IBIN)+1
05394             WTREL(IBIN)=WTREL(IBIN)+SIGSPT(IACC)
05395  
05396 C...Sum up tau cross-section pieces in points used.
05397             IF(IVAR.EQ.1) THEN
05398               TAU=VINTPT(IACC,11)
05399               WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
05400               WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ATAU1/ATAU2)/TAU
05401               IF(NBIN.GE.4) THEN
05402                 WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ATAU1/ATAU3)/(TAU+TAUR1)
05403                 WTMAT(IBIN,4)=WTMAT(IBIN,4)+(ATAU1/ATAU4)*TAU/
05404      &          ((TAU-TAUR1)**2+GAMR1**2)
05405               ENDIF
05406               IF(NBIN.GE.6) THEN
05407                 WTMAT(IBIN,5)=WTMAT(IBIN,5)+(ATAU1/ATAU5)/(TAU+TAUR2)
05408                 WTMAT(IBIN,6)=WTMAT(IBIN,6)+(ATAU1/ATAU6)*TAU/
05409      &          ((TAU-TAUR2)**2+GAMR2**2)
05410               ENDIF
05411               IF(NBIN.GT.2+2*MINT(72)) THEN
05412                 WTMAT(IBIN,NBIN)=WTMAT(IBIN,NBIN)+(ATAU1/ATAU7)*
05413      &          TAU/MAX(2D-10,1D0-TAU)
05414               ENDIF
05415  
05416 C...Sum up tau' cross-section pieces in points used.
05417             ELSEIF(IVAR.EQ.2) THEN
05418               TAU=VINTPT(IACC,11)
05419               TAUP=VINTPT(IACC,16)
05420               TAUPMN=VINTPT(IACC,6)
05421               TAUPMX=VINTPT(IACC,26)
05422               ATAUP1=LOG(TAUPMX/TAUPMN)
05423               ATAUP2=((1D0-TAU/TAUPMX)**4-(1D0-TAU/TAUPMN)**4)/(4D0*TAU)
05424               WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
05425               WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ATAUP1/ATAUP2)*
05426      &        (1D0-TAU/TAUP)**3/TAUP
05427               IF(NBIN.GE.3) THEN
05428                 ATAUP3=LOG(MAX(2D-10,1D0-TAUPMN)/MAX(2D-10,1D0-TAUPMX))
05429                 WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ATAUP1/ATAUP3)*
05430      &          TAUP/MAX(2D-10,1D0-TAUP)
05431               ENDIF
05432  
05433 C...Sum up y* cross-section pieces in points used.
05434             ELSEIF(IVAR.EQ.3) THEN
05435               YST=VINTPT(IACC,12)
05436               YSTMIN=VINTPT(IACC,2)
05437               YSTMAX=VINTPT(IACC,22)
05438               AYST0=YSTMAX-YSTMIN
05439               AYST1=0.5D0*(YSTMAX-YSTMIN)**2
05440               AYST2=AYST1
05441               AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
05442               WTMAT(IBIN,1)=WTMAT(IBIN,1)+(AYST0/AYST1)*(YST-YSTMIN)
05443               WTMAT(IBIN,2)=WTMAT(IBIN,2)+(AYST0/AYST2)*(YSTMAX-YST)
05444               WTMAT(IBIN,3)=WTMAT(IBIN,3)+(AYST0/AYST3)/COSH(YST)
05445               IF(MINT(45).EQ.3) THEN
05446                 TAUE=VINTPT(IACC,11)
05447                 IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINTPT(IACC,16)
05448                 YST0=-0.5D0*LOG(TAUE)
05449                 AYST4=LOG(MAX(1D-10,EXP(YST0-YSTMIN)-1D0)/
05450      &          MAX(1D-10,EXP(YST0-YSTMAX)-1D0))
05451                 WTMAT(IBIN,4)=WTMAT(IBIN,4)+(AYST0/AYST4)/
05452      &          MAX(1D-10,1D0-EXP(YST-YST0))
05453               ENDIF
05454               IF(MINT(46).EQ.3) THEN
05455                 TAUE=VINTPT(IACC,11)
05456                 IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINTPT(IACC,16)
05457                 YST0=-0.5D0*LOG(TAUE)
05458                 AYST5=LOG(MAX(1D-10,EXP(YST0+YSTMAX)-1D0)/
05459      &          MAX(1D-10,EXP(YST0+YSTMIN)-1D0))
05460                 WTMAT(IBIN,NBIN)=WTMAT(IBIN,NBIN)+(AYST0/AYST5)/
05461      &          MAX(1D-10,1D0-EXP(-YST-YST0))
05462               ENDIF
05463  
05464 C...Sum up cos(theta-hat) cross-section pieces in points used.
05465             ELSE
05466               RM34=MAX(1D-20,2D0*SQM3*SQM4/(VINTPT(IACC,11)*VINT(2))**2)
05467               RSQM=1D0+RM34
05468               CTHMAX=SQRT(1D0-4D0*VINT(71)**2/(TAUMAX*VINT(2)))
05469               CTHMIN=-CTHMAX
05470               IF(CTHMAX.GT.0.9999D0) RM34=MAX(RM34,2D0*VINT(71)**2/
05471      &        (TAUMAX*VINT(2)))
05472               ACTH1=CTHMAX-CTHMIN
05473               ACTH2=LOG(MAX(RM34,RSQM-CTHMIN)/MAX(RM34,RSQM-CTHMAX))
05474               ACTH3=LOG(MAX(RM34,RSQM+CTHMAX)/MAX(RM34,RSQM+CTHMIN))
05475               ACTH4=1D0/MAX(RM34,RSQM-CTHMAX)-1D0/MAX(RM34,RSQM-CTHMIN)
05476               ACTH5=1D0/MAX(RM34,RSQM+CTHMIN)-1D0/MAX(RM34,RSQM+CTHMAX)
05477               CTH=VINTPT(IACC,13)
05478               WTMAT(IBIN,1)=WTMAT(IBIN,1)+1D0
05479               WTMAT(IBIN,2)=WTMAT(IBIN,2)+(ACTH1/ACTH2)/
05480      &        MAX(RM34,RSQM-CTH)
05481               WTMAT(IBIN,3)=WTMAT(IBIN,3)+(ACTH1/ACTH3)/
05482      &        MAX(RM34,RSQM+CTH)
05483               WTMAT(IBIN,4)=WTMAT(IBIN,4)+(ACTH1/ACTH4)/
05484      &        MAX(RM34,RSQM-CTH)**2
05485               WTMAT(IBIN,5)=WTMAT(IBIN,5)+(ACTH1/ACTH5)/
05486      &        MAX(RM34,RSQM+CTH)**2
05487             ENDIF
05488   180     CONTINUE
05489  
05490 C...Check that equation system solvable.
05491           IF(MSTP(122).GE.2) WRITE(MSTU(11),5400) CVAR(IVAR)
05492           MSOLV=1
05493           WTRELS=0D0
05494           DO 190 IBIN=1,NBIN
05495             IF(MSTP(122).GE.2) WRITE(MSTU(11),5500) (WTMAT(IBIN,IRED),
05496      &      IRED=1,NBIN),WTREL(IBIN)
05497             IF(NAREL(IBIN).EQ.0) MSOLV=0
05498             WTRELS=WTRELS+WTREL(IBIN)
05499   190     CONTINUE
05500           IF(ABS(WTRELS).LT.1D-20) MSOLV=0
05501  
05502 C...Solve to find relative importance of cross-section pieces.
05503           IF(MSOLV.EQ.1) THEN
05504             DO 200 IBIN=1,NBIN
05505               WTRELN(IBIN)=MAX(0.1D0,WTREL(IBIN)/WTRELS)
05506   200       CONTINUE
05507             DO 230 IRED=1,NBIN-1
05508               DO 220 IBIN=IRED+1,NBIN
05509                 IF(ABS(WTMAT(IRED,IRED)).LT.1D-20) THEN
05510                   MSOLV=0
05511                   GOTO 260
05512                 ENDIF
05513                 RQT=WTMAT(IBIN,IRED)/WTMAT(IRED,IRED)
05514                 WTREL(IBIN)=WTREL(IBIN)-RQT*WTREL(IRED)
05515                 DO 210 ICOE=IRED,NBIN
05516                   WTMAT(IBIN,ICOE)=WTMAT(IBIN,ICOE)-RQT*WTMAT(IRED,ICOE)
05517   210           CONTINUE
05518   220         CONTINUE
05519   230       CONTINUE
05520             DO 250 IRED=NBIN,1,-1
05521               DO 240 ICOE=IRED+1,NBIN
05522                 WTREL(IRED)=WTREL(IRED)-WTMAT(IRED,ICOE)*COEFU(ICOE)
05523   240         CONTINUE
05524               COEFU(IRED)=WTREL(IRED)/WTMAT(IRED,IRED)
05525   250       CONTINUE
05526           ENDIF
05527  
05528 C...Share evenly if failure.
05529   260     IF(MSOLV.EQ.0) THEN
05530             DO 270 IBIN=1,NBIN
05531               COEFU(IBIN)=1D0
05532               WTRELN(IBIN)=0.1D0
05533               IF(WTRELS.GT.0D0) WTRELN(IBIN)=MAX(0.1D0,
05534      &        WTREL(IBIN)/WTRELS)
05535   270       CONTINUE
05536           ENDIF
05537  
05538 C...Normalize coefficients, with piece shared democratically.
05539           COEFSU=0D0
05540           WTRELS=0D0
05541           DO 280 IBIN=1,NBIN
05542             COEFU(IBIN)=MAX(0D0,COEFU(IBIN))
05543             COEFSU=COEFSU+COEFU(IBIN)
05544             WTRELS=WTRELS+WTRELN(IBIN)
05545   280     CONTINUE
05546           IF(COEFSU.GT.0D0) THEN
05547             DO 290 IBIN=1,NBIN
05548               COEFO(IBIN)=PARP(122)/NBIN+(1D0-PARP(122))*0.5D0*
05549      &        (COEFU(IBIN)/COEFSU+WTRELN(IBIN)/WTRELS)
05550   290       CONTINUE
05551           ELSE
05552             DO 300 IBIN=1,NBIN
05553               COEFO(IBIN)=1D0/NBIN
05554   300       CONTINUE
05555           ENDIF
05556           IF(IVAR.EQ.1) IOFF=0
05557           IF(IVAR.EQ.2) IOFF=17
05558           IF(IVAR.EQ.3) IOFF=7
05559           IF(IVAR.EQ.4) IOFF=12
05560           DO 310 IBIN=1,NBIN
05561             ICOF=IOFF+IBIN
05562             IF(IVAR.EQ.1.AND.IBIN.GT.2+2*MINT(72)) ICOF=7
05563             IF(IVAR.EQ.3.AND.IBIN.EQ.4.AND.MINT(45).NE.3) ICOF=ICOF+1
05564             COEF(ISUB,ICOF)=COEFO(IBIN)
05565   310     CONTINUE
05566           IF(MSTP(122).GE.2) WRITE(MSTU(11),5600) CVAR(IVAR),
05567      &    (COEFO(IBIN),IBIN=1,NBIN)
05568   320   CONTINUE
05569  
05570 C...Find two most promising maxima among points previously determined.
05571         DO 330 J=1,4
05572           IACCMX(J)=0
05573           SIGSMX(J)=0D0
05574   330   CONTINUE
05575         NMAX=0
05576         DO 390 IACC=1,NACC
05577           DO 340 J=1,30
05578             VINT(10+J)=VINTPT(IACC,J)
05579   340     CONTINUE
05580           IF(ISTSB.NE.5) THEN
05581             CALL PYSIGH(NCHN,SIGS)
05582             IF(MWTXS.EQ.1) THEN
05583               CALL PYEVWT(WTXS)
05584               SIGS=WTXS*SIGS
05585             ENDIF
05586           ELSE
05587             SIGS=0D0
05588             DO 350 IKIN3=1,MSTP(129)
05589               CALL PYKMAP(5,0,0D0)
05590               IF(MINT(51).EQ.1) GOTO 350
05591               CALL PYSIGH(NCHN,SIGTMP)
05592               IF(MWTXS.EQ.1) THEN
05593                 CALL PYEVWT(WTXS)
05594                 SIGTMP=WTXS*SIGTMP
05595               ENDIF
05596               IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
05597   350       CONTINUE
05598           ENDIF
05599           IEQ=0
05600           DO 360 IMV=1,NMAX
05601             IF(ABS(SIGS-SIGSMX(IMV)).LT.1D-4*(SIGS+SIGSMX(IMV))) IEQ=IMV
05602   360     CONTINUE
05603           IF(IEQ.EQ.0) THEN
05604             DO 370 IMV=NMAX,1,-1
05605               IIN=IMV+1
05606               IF(SIGS.LE.SIGSMX(IMV)) GOTO 380
05607               IACCMX(IMV+1)=IACCMX(IMV)
05608               SIGSMX(IMV+1)=SIGSMX(IMV)
05609   370       CONTINUE
05610             IIN=1
05611   380       IACCMX(IIN)=IACC
05612             SIGSMX(IIN)=SIGS
05613             IF(NMAX.LE.1) NMAX=NMAX+1
05614           ENDIF
05615   390   CONTINUE
05616  
05617 C...Read out starting position for search.
05618         IF(MSTP(122).GE.2) WRITE(MSTU(11),5700)
05619         SIGSAM=SIGSMX(1)
05620         DO 440 IMAX=1,NMAX
05621           IACC=IACCMX(IMAX)
05622           MTAU=MVARPT(IACC,1)
05623           MTAUP=MVARPT(IACC,2)
05624           MYST=MVARPT(IACC,3)
05625           MCTH=MVARPT(IACC,4)
05626           VTAU=0.5D0
05627           VYST=0.5D0
05628           VCTH=0.5D0
05629           VTAUP=0.5D0
05630  
05631 C...Starting point and step size in parameter space.
05632           DO 430 IRPT=1,2
05633             DO 420 IVAR=1,4
05634               IF(NPTS(IVAR).EQ.1) GOTO 420
05635               IF(IVAR.EQ.1) VVAR=VTAU
05636               IF(IVAR.EQ.2) VVAR=VTAUP
05637               IF(IVAR.EQ.3) VVAR=VYST
05638               IF(IVAR.EQ.4) VVAR=VCTH
05639               IF(IVAR.EQ.1) MVAR=MTAU
05640               IF(IVAR.EQ.2) MVAR=MTAUP
05641               IF(IVAR.EQ.3) MVAR=MYST
05642               IF(IVAR.EQ.4) MVAR=MCTH
05643               IF(IRPT.EQ.1) VDEL=0.1D0
05644               IF(IRPT.EQ.2) VDEL=MAX(0.01D0,MIN(0.05D0,VVAR-0.02D0,
05645      &        0.98D0-VVAR))
05646               IF(IRPT.EQ.1) VMAR=0.02D0
05647               IF(IRPT.EQ.2) VMAR=0.002D0
05648               IMOV0=1
05649               IF(IRPT.EQ.1.AND.IVAR.EQ.1) IMOV0=0
05650               DO 410 IMOV=IMOV0,8
05651  
05652 C...Define new point in parameter space.
05653                 IF(IMOV.EQ.0) THEN
05654                   INEW=2
05655                   VNEW=VVAR
05656                 ELSEIF(IMOV.EQ.1) THEN
05657                   INEW=3
05658                   VNEW=VVAR+VDEL
05659                 ELSEIF(IMOV.EQ.2) THEN
05660                   INEW=1
05661                   VNEW=VVAR-VDEL
05662                 ELSEIF(SIGSSM(3).GE.MAX(SIGSSM(1),SIGSSM(2)).AND.
05663      &            VVAR+2D0*VDEL.LT.1D0-VMAR) THEN
05664                   VVAR=VVAR+VDEL
05665                   SIGSSM(1)=SIGSSM(2)
05666                   SIGSSM(2)=SIGSSM(3)
05667                   INEW=3
05668                   VNEW=VVAR+VDEL
05669                 ELSEIF(SIGSSM(1).GE.MAX(SIGSSM(2),SIGSSM(3)).AND.
05670      &            VVAR-2D0*VDEL.GT.VMAR) THEN
05671                   VVAR=VVAR-VDEL
05672                   SIGSSM(3)=SIGSSM(2)
05673                   SIGSSM(2)=SIGSSM(1)
05674                   INEW=1
05675                   VNEW=VVAR-VDEL
05676                 ELSEIF(SIGSSM(3).GE.SIGSSM(1)) THEN
05677                   VDEL=0.5D0*VDEL
05678                   VVAR=VVAR+VDEL
05679                   SIGSSM(1)=SIGSSM(2)
05680                   INEW=2
05681                   VNEW=VVAR
05682                 ELSE
05683                   VDEL=0.5D0*VDEL
05684                   VVAR=VVAR-VDEL
05685                   SIGSSM(3)=SIGSSM(2)
05686                   INEW=2
05687                   VNEW=VVAR
05688                 ENDIF
05689  
05690 C...Convert to relevant variables and find derived new limits.
05691                 ILERR=0
05692                 IF(IVAR.EQ.1) THEN
05693                   VTAU=VNEW
05694                   CALL PYKMAP(1,MTAU,VTAU)
05695                   IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
05696                     CALL PYKLIM(4)
05697                     IF(MINT(51).EQ.1) ILERR=1
05698                   ENDIF
05699                 ENDIF
05700                 IF(IVAR.LE.2.AND.ISTSB.GE.3.AND.ISTSB.LE.5.AND.
05701      &          ILERR.EQ.0) THEN
05702                   IF(IVAR.EQ.2) VTAUP=VNEW
05703                   CALL PYKMAP(4,MTAUP,VTAUP)
05704                 ENDIF
05705                 IF(IVAR.LE.2.AND.ILERR.EQ.0) THEN
05706                   CALL PYKLIM(2)
05707                   IF(MINT(51).EQ.1) ILERR=1
05708                 ENDIF
05709                 IF(IVAR.LE.3.AND.ILERR.EQ.0) THEN
05710                   IF(IVAR.EQ.3) VYST=VNEW
05711                   CALL PYKMAP(2,MYST,VYST)
05712                   CALL PYKLIM(3)
05713                   IF(MINT(51).EQ.1) ILERR=1
05714                 ENDIF
05715                 IF((ISTSB.EQ.2.OR.ISTSB.EQ.4.OR.ISTSB.EQ.6).AND.
05716      &          ILERR.EQ.0) THEN
05717                   IF(IVAR.EQ.4) VCTH=VNEW
05718                   CALL PYKMAP(3,MCTH,VCTH)
05719                 ENDIF
05720                 IF(ISUB.EQ.96) VINT(25)=VINT(21)*(1.-VINT(23)**2)
05721  
05722 C...Evaluate cross-section. Save new maximum. Final maximum.
05723                 IF(ILERR.NE.0) THEN
05724                    SIGS=0.
05725                 ELSEIF(ISTSB.NE.5) THEN
05726                   CALL PYSIGH(NCHN,SIGS)
05727                   IF(MWTXS.EQ.1) THEN
05728                     CALL PYEVWT(WTXS)
05729                     SIGS=WTXS*SIGS
05730                   ENDIF
05731                 ELSE
05732                   SIGS=0D0
05733                   DO 400 IKIN3=1,MSTP(129)
05734                     CALL PYKMAP(5,0,0D0)
05735                     IF(MINT(51).EQ.1) GOTO 400
05736                     CALL PYSIGH(NCHN,SIGTMP)
05737                     IF(MWTXS.EQ.1) THEN
05738                         CALL PYEVWT(WTXS)
05739                         SIGTMP=WTXS*SIGTMP
05740                     ENDIF
05741                     IF(SIGTMP.GT.SIGS) SIGS=SIGTMP
05742   400             CONTINUE
05743                 ENDIF
05744                 SIGSSM(INEW)=SIGS
05745                 IF(SIGS.GT.SIGSAM) SIGSAM=SIGS
05746                 IF(MSTP(122).GE.2) WRITE(MSTU(11),5800) IMAX,IVAR,MVAR,
05747      &          IMOV,VNEW,VINT(21),VINT(22),VINT(23),VINT(26),SIGS
05748   410         CONTINUE
05749   420       CONTINUE
05750   430     CONTINUE
05751   440   CONTINUE
05752         IF(MSTP(121).EQ.1) SIGSAM=PARP(121)*SIGSAM
05753         XSEC(ISUB,1)=1.05D0*SIGSAM
05754         IF(MINT(141).NE.0.OR.MINT(142).NE.0) XSEC(ISUB,1)=
05755      &  WTGAGA*XSEC(ISUB,1)
05756   450   CONTINUE
05757         IF(MSTP(173).EQ.1.AND.ISUB.NE.96) XSEC(ISUB,1)=
05758      &  PARP(174)*XSEC(ISUB,1)
05759         IF(ISUB.NE.96) XSEC(0,1)=XSEC(0,1)+XSEC(ISUB,1)
05760   460 CONTINUE
05761       MINT(51)=0
05762  
05763 C...Print summary table.
05764       IF(MINT(121).EQ.1.AND.NPOSI.EQ.0) THEN
05765         WRITE(MSTU(11),5900)
05766         STOP
05767       ENDIF
05768       IF(MSTP(122).GE.1) THEN
05769         WRITE(MSTU(11),6000)
05770         WRITE(MSTU(11),6100)
05771         DO 470 ISUB=1,500
05772           IF(MSUB(ISUB).NE.1.AND.ISUB.NE.96) GOTO 470
05773           IF(ISUB.EQ.96.AND.MINT(50).EQ.0) GOTO 470
05774           IF(ISUB.EQ.96.AND.MSUB(95).NE.1.AND.MSTP(81).LE.0) GOTO 470
05775           IF(ISUB.EQ.96.AND.MINT(49).EQ.0.AND.MSTP(131).EQ.0) GOTO 470
05776           IF(MSUB(95).EQ.1.AND.(ISUB.EQ.11.OR.ISUB.EQ.12.OR.ISUB.EQ.13
05777      &    .OR.ISUB.EQ.28.OR.ISUB.EQ.53.OR.ISUB.EQ.68)) GOTO 470
05778           WRITE(MSTU(11),6200) ISUB,PROC(ISUB),XSEC(ISUB,1)
05779   470   CONTINUE
05780         WRITE(MSTU(11),6300)
05781       ENDIF
05782  
05783 C...Format statements for maximization results.
05784  5000 FORMAT(/1X,'Coefficient optimization and maximum search for ',
05785      &'subprocess no',I4/1X,'Coefficient modes     tau',10X,'y*',9X,
05786      &'cth',9X,'tau''',7X,'sigma')
05787  5100 FORMAT(1X,'Warning: requested subprocess ',I3,' has no allowed ',
05788      &'phase space.'/1X,'Process switched off!')
05789  5200 FORMAT(1X,4I4,F12.8,F12.6,F12.7,F12.8,1P,D12.4)
05790  5300 FORMAT(1X,'Warning: requested subprocess ',I3,' has vanishing ',
05791      &'cross-section.'/1X,'Process switched off!')
05792  5400 FORMAT(1X,'Coefficients of equation system to be solved for ',A4)
05793  5500 FORMAT(1X,1P,8D11.3)
05794  5600 FORMAT(1X,'Result for ',A4,':',7F9.4)
05795  5700 FORMAT(1X,'Maximum search for given coefficients'/2X,'MAX VAR ',
05796      &'MOD MOV   VNEW',7X,'tau',7X,'y*',8X,'cth',7X,'tau''',7X,'sigma')
05797  5800 FORMAT(1X,4I4,F8.4,F11.7,F9.3,F11.6,F11.7,1P,D12.4)
05798  5900 FORMAT(1X,'Error: no requested process has non-vanishing ',
05799      &'cross-section.'/1X,'Execution stopped!')
05800  6000 FORMAT(/1X,8('*'),1X,'PYMAXI: summary of differential ',
05801      &'cross-section maximum search',1X,8('*'))
05802  6100 FORMAT(/11X,58('=')/11X,'I',38X,'I',17X,'I'/11X,'I  ISUB  ',
05803      &'Subprocess name',15X,'I  Maximum value  I'/11X,'I',38X,'I',
05804      &17X,'I'/11X,58('=')/11X,'I',38X,'I',17X,'I')
05805  6200 FORMAT(11X,'I',2X,I3,3X,A28,2X,'I',2X,1P,D12.4,3X,'I')
05806  6300 FORMAT(11X,'I',38X,'I',17X,'I'/11X,58('='))
05807  
05808       RETURN
05809       END
05810  
05811 C*********************************************************************
05812  
05813 C...PYPILE
05814 C...Initializes multiplicity distribution and selects mutliplicity
05815 C...of pileup events, i.e. several events occuring at the same
05816 C...beam crossing.
05817  
05818       SUBROUTINE PYPILE(MPILE)
05819  
05820 C...Double precision and integer declarations.
05821       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
05822       IMPLICIT INTEGER(I-N)
05823       INTEGER PYK,PYCHGE,PYCOMP
05824 C...Commonblocks.
05825       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
05826       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
05827       COMMON/PYINT1/MINT(400),VINT(400)
05828       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
05829       SAVE /PYDAT1/,/PYPARS/,/PYINT1/,/PYINT7/
05830 C...Local arrays and saved variables.
05831       DIMENSION WTI(0:200)
05832       SAVE IMIN,IMAX,WTI,WTS
05833  
05834 C...Sum of allowed cross-sections for pileup events.
05835       IF(MPILE.EQ.1) THEN
05836         VINT(131)=SIGT(0,0,5)
05837         IF(MSTP(132).GE.2) VINT(131)=VINT(131)+SIGT(0,0,4)
05838         IF(MSTP(132).GE.3) VINT(131)=VINT(131)+SIGT(0,0,2)+SIGT(0,0,3)
05839         IF(MSTP(132).GE.4) VINT(131)=VINT(131)+SIGT(0,0,1)
05840         IF(MSTP(133).LE.0) RETURN
05841  
05842 C...Initialize multiplicity distribution at maximum.
05843         XNAVE=VINT(131)*PARP(131)
05844         IF(XNAVE.GT.120D0) WRITE(MSTU(11),5000) XNAVE
05845         INAVE=MAX(1,MIN(200,NINT(XNAVE)))
05846         WTI(INAVE)=1D0
05847         WTS=WTI(INAVE)
05848         WTN=WTI(INAVE)*INAVE
05849  
05850 C...Find shape of multiplicity distribution below maximum.
05851         IMIN=INAVE
05852         DO 100 I=INAVE-1,1,-1
05853           IF(MSTP(133).EQ.1) WTI(I)=WTI(I+1)*(I+1)/XNAVE
05854           IF(MSTP(133).GE.2) WTI(I)=WTI(I+1)*I/XNAVE
05855           IF(WTI(I).LT.1D-6) GOTO 110
05856           WTS=WTS+WTI(I)
05857           WTN=WTN+WTI(I)*I
05858           IMIN=I
05859   100   CONTINUE
05860  
05861 C...Find shape of multiplicity distribution above maximum.
05862   110   IMAX=INAVE
05863         DO 120 I=INAVE+1,200
05864           IF(MSTP(133).EQ.1) WTI(I)=WTI(I-1)*XNAVE/I
05865           IF(MSTP(133).GE.2) WTI(I)=WTI(I-1)*XNAVE/(I-1)
05866           IF(WTI(I).LT.1D-6) GOTO 130
05867           WTS=WTS+WTI(I)
05868           WTN=WTN+WTI(I)*I
05869           IMAX=I
05870   120   CONTINUE
05871   130   VINT(132)=XNAVE
05872         VINT(133)=WTN/WTS
05873         IF(MSTP(133).EQ.1.AND.IMIN.EQ.1) VINT(134)=
05874      &  WTS/(WTS+WTI(1)/XNAVE)
05875         IF(MSTP(133).EQ.1.AND.IMIN.GT.1) VINT(134)=1D0
05876         IF(MSTP(133).GE.2) VINT(134)=XNAVE
05877  
05878 C...Pick multiplicity of pileup events.
05879       ELSE
05880         IF(MSTP(133).LE.0) THEN
05881           MINT(81)=MAX(1,MSTP(134))
05882         ELSE
05883           WTR=WTS*PYR(0)
05884           DO 140 I=IMIN,IMAX
05885             MINT(81)=I
05886             WTR=WTR-WTI(I)
05887             IF(WTR.LE.0D0) GOTO 150
05888   140     CONTINUE
05889   150     CONTINUE
05890         ENDIF
05891       ENDIF
05892  
05893 C...Format statement for error message.
05894  5000 FORMAT(1X,'Warning: requested average number of events per bunch',
05895      &'crossing too large, ',1P,D12.4)
05896  
05897       RETURN
05898       END
05899  
05900 C*********************************************************************
05901  
05902 C...PYSAVE
05903 C...Saves and restores parameter and cross section values for the
05904 C...3 gamma-p and 6 (or 4, or 9, or 13) gamma-gamma alnternatives.
05905 C...Also makes random choice between alternatives.
05906  
05907       SUBROUTINE PYSAVE(ISAVE,IGA)
05908  
05909 C...Double precision and integer declarations.
05910       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
05911       IMPLICIT INTEGER(I-N)
05912       INTEGER PYK,PYCHGE,PYCOMP
05913 C...Commonblocks.
05914       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
05915       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
05916       COMMON/PYINT1/MINT(400),VINT(400)
05917       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
05918       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
05919       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
05920       SAVE /PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT5/,/PYINT7/
05921 C...Local arrays and saved variables.
05922       DIMENSION NCP(15),NSUBCP(15,20),MSUBCP(15,20),COEFCP(15,20,20),
05923      &NGENCP(15,0:20,3),XSECCP(15,0:20,3),SIGTCP(15,0:6,0:6,0:5),
05924      &INTCP(15,20),RECP(15,20)
05925       SAVE NCP,NSUBCP,MSUBCP,COEFCP,NGENCP,XSECCP,SIGTCP,INTCP,RECP
05926  
05927 C...Save list of subprocesses and cross-section information.
05928       IF(ISAVE.EQ.1) THEN
05929         ICP=0
05930         DO 120 I=1,500
05931           IF(MSUB(I).EQ.0.AND.I.NE.96.AND.I.NE.97) GOTO 120
05932           ICP=ICP+1
05933           NSUBCP(IGA,ICP)=I
05934           MSUBCP(IGA,ICP)=MSUB(I)
05935           DO 100 J=1,20
05936             COEFCP(IGA,ICP,J)=COEF(I,J)
05937   100     CONTINUE
05938           DO 110 J=1,3
05939             NGENCP(IGA,ICP,J)=NGEN(I,J)
05940             XSECCP(IGA,ICP,J)=XSEC(I,J)
05941   110     CONTINUE
05942   120   CONTINUE
05943         NCP(IGA)=ICP
05944         DO 130 J=1,3
05945           NGENCP(IGA,0,J)=NGEN(0,J)
05946           XSECCP(IGA,0,J)=XSEC(0,J)
05947   130   CONTINUE
05948         DO 136 I1=0,6
05949           DO 134 I2=0,6
05950             DO 132 J=0,5
05951               SIGTCP(IGA,I1,I2,J)=SIGT(I1,I2,J)
05952   132       CONTINUE
05953   134     CONTINUE
05954   136   CONTINUE
05955 
05956 C...Save various common process variables.
05957         DO 140 J=1,10
05958           INTCP(IGA,J)=MINT(40+J)
05959   140   CONTINUE
05960         INTCP(IGA,11)=MINT(101)
05961         INTCP(IGA,12)=MINT(102)
05962         INTCP(IGA,13)=MINT(107)
05963         INTCP(IGA,14)=MINT(108)
05964         INTCP(IGA,15)=MINT(123)
05965         RECP(IGA,1)=CKIN(3)
05966         RECP(IGA,2)=VINT(318)
05967  
05968 C...Save cross-section information only.
05969       ELSEIF(ISAVE.EQ.2) THEN
05970         DO 160 ICP=1,NCP(IGA)
05971           I=NSUBCP(IGA,ICP)
05972           DO 150 J=1,3
05973             NGENCP(IGA,ICP,J)=NGEN(I,J)
05974             XSECCP(IGA,ICP,J)=XSEC(I,J)
05975   150     CONTINUE
05976   160   CONTINUE
05977         DO 170 J=1,3
05978           NGENCP(IGA,0,J)=NGEN(0,J)
05979           XSECCP(IGA,0,J)=XSEC(0,J)
05980   170   CONTINUE
05981  
05982 C...Choose between allowed alternatives.
05983       ELSEIF(ISAVE.EQ.3.OR.ISAVE.EQ.4) THEN
05984         IF(ISAVE.EQ.4) THEN
05985           XSUMCP=0D0
05986           DO 180 IG=1,MINT(121)
05987             XSUMCP=XSUMCP+XSECCP(IG,0,1)
05988   180     CONTINUE
05989           XSUMCP=XSUMCP*PYR(0)
05990           DO 190 IG=1,MINT(121)
05991             IGA=IG
05992             XSUMCP=XSUMCP-XSECCP(IG,0,1)
05993             IF(XSUMCP.LE.0D0) GOTO 200
05994   190     CONTINUE
05995   200     CONTINUE
05996         ENDIF
05997  
05998 C...Restore cross-section information.
05999         DO 210 I=1,500
06000           MSUB(I)=0
06001   210   CONTINUE
06002         DO 240 ICP=1,NCP(IGA)
06003           I=NSUBCP(IGA,ICP)
06004           MSUB(I)=MSUBCP(IGA,ICP)
06005           DO 220 J=1,20
06006             COEF(I,J)=COEFCP(IGA,ICP,J)
06007   220     CONTINUE
06008           DO 230 J=1,3
06009             NGEN(I,J)=NGENCP(IGA,ICP,J)
06010             XSEC(I,J)=XSECCP(IGA,ICP,J)
06011   230     CONTINUE
06012   240   CONTINUE
06013         DO 250 J=1,3
06014           NGEN(0,J)=NGENCP(IGA,0,J)
06015           XSEC(0,J)=XSECCP(IGA,0,J)
06016   250   CONTINUE
06017         DO 256 I1=0,6
06018           DO 254 I2=0,6
06019             DO 252 J=0,5
06020               SIGT(I1,I2,J)=SIGTCP(IGA,I1,I2,J)
06021   252       CONTINUE
06022   254     CONTINUE
06023   256   CONTINUE
06024  
06025 C...Restore various common process variables.
06026         DO 260 J=1,10
06027           MINT(40+J)=INTCP(IGA,J)
06028   260   CONTINUE
06029         MINT(101)=INTCP(IGA,11)
06030         MINT(102)=INTCP(IGA,12)
06031         MINT(107)=INTCP(IGA,13)
06032         MINT(108)=INTCP(IGA,14)
06033         MINT(123)=INTCP(IGA,15)
06034         CKIN(3)=RECP(IGA,1)
06035         CKIN(1)=2D0*CKIN(3)
06036         VINT(318)=RECP(IGA,2)
06037  
06038 C...Sum up cross-section info (for PYSTAT).
06039       ELSEIF(ISAVE.EQ.5) THEN
06040         DO 270 I=1,500
06041           MSUB(I)=0
06042           NGEN(I,1)=0
06043           NGEN(I,3)=0
06044           XSEC(I,3)=0D0
06045   270   CONTINUE
06046         NGEN(0,1)=0
06047         NGEN(0,2)=0
06048         NGEN(0,3)=0
06049         XSEC(0,3)=0
06050         DO 290 IG=1,MINT(121)
06051           DO 280 ICP=1,NCP(IG)
06052             I=NSUBCP(IG,ICP)
06053             IF(MSUBCP(IG,ICP).EQ.1) MSUB(I)=1
06054             NGEN(I,1)=NGEN(I,1)+NGENCP(IG,ICP,1)
06055             NGEN(I,3)=NGEN(I,3)+NGENCP(IG,ICP,3)
06056             XSEC(I,3)=XSEC(I,3)+XSECCP(IG,ICP,3)
06057   280     CONTINUE
06058           NGEN(0,1)=NGEN(0,1)+NGENCP(IG,0,1)
06059           NGEN(0,2)=NGEN(0,2)+NGENCP(IG,0,2)
06060           NGEN(0,3)=NGEN(0,3)+NGENCP(IG,0,3)
06061           XSEC(0,3)=XSEC(0,3)+XSECCP(IG,0,3)
06062   290   CONTINUE
06063       ENDIF
06064  
06065       RETURN
06066       END
06067  
06068 C*********************************************************************
06069  
06070 C...PYGAGA
06071 C...For lepton beams it gives photon-hadron or photon-photon systems
06072 C...to be treated with the ordinary machinery and combines this with a
06073 C...description of the lepton -> lepton + photon branching.
06074  
06075       SUBROUTINE PYGAGA(IGAGA,WTGAGA)
06076  
06077 C...Double precision and integer declarations.
06078       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
06079       IMPLICIT INTEGER(I-N)
06080       INTEGER PYK,PYCHGE,PYCOMP
06081 C...Commonblocks.
06082       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
06083       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
06084       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
06085       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
06086       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
06087       COMMON/PYINT1/MINT(400),VINT(400)
06088       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
06089       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,
06090      &/PYINT5/
06091 C...Local variables and data statement.
06092       DIMENSION PMS(2),XMIN(2),XMAX(2),Q2MIN(2),Q2MAX(2),PMC(3),
06093      &X(2),Q2(2),Y(2),THETA(2),PHI(2),PT(2),BETA(3)
06094       SAVE PMS,XMIN,XMAX,Q2MIN,Q2MAX,PMC,X,Q2,THETA,PHI,PT,W2MIN
06095       DATA EPS/1D-4/
06096  
06097 C...Initialize generation of photons inside leptons.
06098       IF(IGAGA.EQ.1) THEN
06099  
06100 C...Save quantities on incoming lepton system.
06101         VINT(301)=VINT(1)
06102         VINT(302)=VINT(2)
06103         PMS(1)=VINT(303)**2
06104         IF(MINT(141).EQ.0) PMS(1)=SIGN(VINT(3)**2,VINT(3))
06105         PMS(2)=VINT(304)**2
06106         IF(MINT(142).EQ.0) PMS(2)=SIGN(VINT(4)**2,VINT(4))
06107         PMC(3)=VINT(302)-PMS(1)-PMS(2)
06108         W2MIN=MAX(CKIN(77),2D0*CKIN(3),2D0*CKIN(5))**2
06109  
06110 C...Calculate range of x and Q2 values allowed in generation.
06111         DO 100 I=1,2
06112           PMC(I)=VINT(302)+PMS(I)-PMS(3-I)
06113           IF(MINT(140+I).NE.0) THEN
06114             XMIN(I)=MAX(CKIN(59+2*I),EPS)
06115             XMAX(I)=MIN(CKIN(60+2*I),1D0-2D0*VINT(301)*SQRT(PMS(I))/
06116      &      PMC(I),1D0-EPS)
06117             YMIN=MAX(CKIN(71+2*I),EPS)
06118             YMAX=MIN(CKIN(72+2*I),1D0-EPS)
06119             IF(CKIN(64+2*I).GT.0D0) XMIN(I)=MAX(XMIN(I),
06120      &      (YMIN*PMC(3)-CKIN(64+2*I))/PMC(I))
06121             XMAX(I)=MIN(XMAX(I),(YMAX*PMC(3)-CKIN(63+2*I))/PMC(I))
06122             THEMIN=MAX(CKIN(67+2*I),0D0)
06123             THEMAX=MIN(CKIN(68+2*I),PARU(1))
06124             IF(CKIN(68+2*I).LT.0D0) THEMAX=PARU(1)
06125             Q2MIN(I)=MAX(CKIN(63+2*I),XMIN(I)**2*PMS(I)/(1D0-XMIN(I))+
06126      &      ((1D0-XMAX(I))*(VINT(302)-2D0*PMS(3-I))-
06127      &      2D0*PMS(I)/(1D0-XMAX(I)))*SIN(THEMIN/2D0)**2,0D0)
06128             Q2MAX(I)=XMAX(I)**2*PMS(I)/(1D0-XMAX(I))+
06129      &      ((1D0-XMIN(I))*(VINT(302)-2D0*PMS(3-I))-
06130      &      2D0*PMS(I)/(1D0-XMIN(I)))*SIN(THEMAX/2D0)**2
06131             IF(CKIN(64+2*I).GT.0D0) Q2MAX(I)=MIN(CKIN(64+2*I),Q2MAX(I))
06132 C...W limits when lepton on one side only.
06133             IF(MINT(143-I).EQ.0) THEN
06134               XMIN(I)=MAX(XMIN(I),(W2MIN-PMS(3-I))/PMC(I))
06135               IF(CKIN(78).GT.0D0) XMAX(I)=MIN(XMAX(I),
06136      &        (CKIN(78)**2-PMS(3-I))/PMC(I))
06137             ENDIF
06138           ENDIF
06139   100   CONTINUE
06140  
06141 C...W limits when lepton on both sides.
06142         IF(MINT(141).NE.0.AND.MINT(142).NE.0) THEN
06143           IF(CKIN(78).GT.0D0) XMAX(1)=MIN(XMAX(1),
06144      &    (CKIN(78)**2+PMC(3)-PMC(2)*XMIN(2))/PMC(1))
06145           IF(CKIN(78).GT.0D0) XMAX(2)=MIN(XMAX(2),
06146      &    (CKIN(78)**2+PMC(3)-PMC(1)*XMIN(1))/PMC(2))
06147           IF(IABS(MINT(141)).NE.IABS(MINT(142))) THEN
06148             XMIN(1)=MAX(XMIN(1),(PMS(1)-PMS(2)+VINT(302)*(W2MIN-
06149      &      PMS(1)-PMS(2))/(PMC(2)*XMAX(2)+PMS(1)-PMS(2)))/PMC(1))
06150             XMIN(2)=MAX(XMIN(2),(PMS(2)-PMS(1)+VINT(302)*(W2MIN-
06151      &      PMS(1)-PMS(2))/(PMC(1)*XMAX(1)+PMS(2)-PMS(1)))/PMC(2))
06152           ELSE
06153             XMIN(1)=MAX(XMIN(1),W2MIN/(VINT(302)*XMAX(2)))
06154             XMIN(2)=MAX(XMIN(2),W2MIN/(VINT(302)*XMAX(1)))
06155           ENDIF
06156         ENDIF
06157  
06158 C...Q2 and W values and photon flux weight factors for initialization.
06159       ELSEIF(IGAGA.EQ.2) THEN
06160         ISUB=MINT(1)
06161         MINT(15)=0
06162         MINT(16)=0
06163  
06164 C...W value for photon on one or both sides, and for processes
06165 C...with gamma-gamma cross section peaked at small shat.
06166         IF(MINT(141).NE.0.AND.MINT(142).EQ.0) THEN
06167           VINT(2)=VINT(302)+PMS(1)-PMC(1)*(1D0-XMAX(1))
06168         ELSEIF(MINT(141).EQ.0.AND.MINT(142).NE.0) THEN
06169           VINT(2)=VINT(302)+PMS(2)-PMC(2)*(1D0-XMAX(2))
06170         ELSEIF(ISUB.GE.137.AND.ISUB.LE.140) THEN
06171           VINT(2)=MAX(CKIN(77)**2,12D0*MAX(CKIN(3),CKIN(5))**2)
06172           IF(CKIN(78).GT.0D0) VINT(2)=MIN(VINT(2),CKIN(78)**2)
06173         ELSE
06174           VINT(2)=XMAX(1)*XMAX(2)*VINT(302)
06175           IF(CKIN(78).GT.0D0) VINT(2)=MIN(VINT(2),CKIN(78)**2)
06176         ENDIF
06177         VINT(1)=SQRT(MAX(0D0,VINT(2)))
06178  
06179 C...Upper estimate of photon flux weight factor.
06180 C...Initialization Q2 scale. Flag incoming unresolved photon.
06181         WTGAGA=1D0
06182         DO 110 I=1,2
06183           IF(MINT(140+I).NE.0) THEN
06184             WTGAGA=WTGAGA*2D0*(PARU(101)/PARU(2))*
06185      &      LOG(XMAX(I)/XMIN(I))*LOG(Q2MAX(I)/Q2MIN(I))
06186             IF(ISUB.EQ.99.AND.MINT(106+I).EQ.4.AND.MINT(109-I).EQ.3) 
06187      &      THEN
06188               Q2INIT=5D0+Q2MIN(3-I)
06189             ELSEIF(ISUB.EQ.99.AND.MINT(106+I).EQ.4) THEN
06190               Q2INIT=PMAS(PYCOMP(113),1)**2+Q2MIN(3-I)
06191             ELSEIF(ISUB.EQ.132.OR.ISUB.EQ.134.OR.ISUB.EQ.136) THEN
06192               Q2INIT=MAX(CKIN(1),2D0*CKIN(3),2D0*CKIN(5))**2/3D0
06193             ELSEIF((ISUB.EQ.138.AND.I.EQ.2).OR.
06194      &      (ISUB.EQ.139.AND.I.EQ.1)) THEN
06195               Q2INIT=VINT(2)/3D0
06196             ELSEIF(ISUB.EQ.140) THEN
06197               Q2INIT=VINT(2)/2D0
06198             ELSE
06199               Q2INIT=Q2MIN(I)
06200             ENDIF
06201             VINT(2+I)=-SQRT(MAX(Q2MIN(I),MIN(Q2MAX(I),Q2INIT)))
06202             IF(MSTP(14).EQ.0.OR.(ISUB.GE.131.AND.ISUB.LE.140)) 
06203      &      MINT(14+I)=22
06204             VINT(306+I)=VINT(2+I)**2
06205           ENDIF
06206   110   CONTINUE
06207         VINT(320)=WTGAGA
06208 
06209 C...Update pTmin and cross section information.
06210         IF(MSTP(82).LE.1) THEN
06211           PTMN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
06212         ELSE
06213           PTMN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
06214         ENDIF
06215         VINT(149)=4D0*PTMN**2/VINT(2)
06216         VINT(154)=PTMN 
06217         CALL PYXTOT
06218         VINT(318)=VINT(317)
06219  
06220 C...Generate photons inside leptons and
06221 C...calculate photon flux weight factors.
06222       ELSEIF(IGAGA.EQ.3) THEN
06223         ISUB=MINT(1)
06224         MINT(15)=0
06225         MINT(16)=0
06226  
06227 C...Generate phase space point and check against cuts.
06228         LOOP=0
06229   120   LOOP=LOOP+1
06230         DO 130 I=1,2
06231           IF(MINT(140+I).NE.0) THEN
06232 C...Pick x and Q2
06233             X(I)=XMIN(I)*(XMAX(I)/XMIN(I))**PYR(0)
06234             Q2(I)=Q2MIN(I)*(Q2MAX(I)/Q2MIN(I))**PYR(0)
06235 C...Cuts on internal consistency in x and Q2.
06236             IF(Q2(I).LT.X(I)**2*PMS(I)/(1D0-X(I))) GOTO 120
06237             IF(Q2(I).GT.(1D0-X(I))*(VINT(302)-2D0*PMS(3-I))-
06238      &      (2D0-X(I)**2)*PMS(I)/(1D0-X(I))) GOTO 120
06239 C...Cuts on y and theta.
06240             Y(I)=(PMC(I)*X(I)+Q2(I))/PMC(3)
06241             IF(Y(I).LT.CKIN(71+2*I).OR.Y(I).GT.CKIN(72+2*I)) GOTO 120
06242             RAT=((1D0-X(I))*Q2(I)-X(I)**2*PMS(I))/
06243      &      ((1D0-X(I))**2*(VINT(302)-2D0*PMS(3-I)-2D0*PMS(I)))
06244             THETA(I)=2D0*ASIN(SQRT(MAX(0D0,MIN(1D0,RAT))))
06245             IF(THETA(I).LT.CKIN(67+2*I)) GOTO 120
06246             IF(CKIN(68+2*I).GT.0D0.AND.THETA(I).GT.CKIN(68+2*I))
06247      &      GOTO 120
06248  
06249 C...Phi angle isotropic. Reconstruct pT.
06250             PHI(I)=PARU(2)*PYR(0)
06251             PT(I)=SQRT(((1D0-X(I))*PMC(I))**2/(4D0*VINT(302))-
06252      &      PMS(I))*SIN(THETA(I))
06253  
06254 C...Store info on variables selected, for documentation purposes.
06255             VINT(2+I)=-SQRT(Q2(I))
06256             VINT(304+I)=X(I)
06257             VINT(306+I)=Q2(I)
06258             VINT(308+I)=Y(I)
06259             VINT(310+I)=THETA(I)
06260             VINT(312+I)=PHI(I)
06261           ELSE
06262             VINT(304+I)=1D0
06263             VINT(306+I)=0D0
06264             VINT(308+I)=1D0
06265             VINT(310+I)=0D0
06266             VINT(312+I)=0D0
06267           ENDIF
06268   130   CONTINUE
06269  
06270 C...Cut on W combines info from two sides.
06271         IF(MINT(141).NE.0.AND.MINT(142).NE.0) THEN
06272           W2=-Q2(1)-Q2(2)+0.5D0*X(1)*PMC(1)*X(2)*PMC(2)/VINT(302)-
06273      &    2D0*PT(1)*PT(2)*COS(PHI(1)-PHI(2))+2D0*
06274      &    SQRT((0.5D0*X(1)*PMC(1)/VINT(301))**2+Q2(1)-PT(1)**2)*
06275      &    SQRT((0.5D0*X(2)*PMC(2)/VINT(301))**2+Q2(2)-PT(2)**2)
06276           IF(W2.LT.W2MIN) GOTO 120
06277           IF(CKIN(78).GT.0D0.AND.W2.GT.CKIN(78)**2) GOTO 120
06278           PMS1=-Q2(1)
06279           PMS2=-Q2(2)
06280         ELSEIF(MINT(141).NE.0) THEN
06281           W2=(VINT(302)+PMS(1))*X(1)+PMS(2)*(1D0-X(1))
06282           PMS1=-Q2(1)
06283           PMS2=PMS(2)
06284         ELSEIF(MINT(142).NE.0) THEN
06285           W2=(VINT(302)+PMS(2))*X(2)+PMS(1)*(1D0-X(2))
06286           PMS1=PMS(1)
06287           PMS2=-Q2(2)
06288         ENDIF
06289  
06290 C...Store kinematics info for photon(s) in subsystem cm frame.
06291         VINT(2)=W2
06292         VINT(1)=SQRT(W2)
06293         VINT(291)=0D0
06294         VINT(292)=0D0
06295         VINT(293)=0.5D0*SQRT((W2-PMS1-PMS2)**2-4D0*PMS1*PMS2)/VINT(1)
06296         VINT(294)=0.5D0*(W2+PMS1-PMS2)/VINT(1)
06297         VINT(295)=SIGN(SQRT(ABS(PMS1)),PMS1)
06298         VINT(296)=0D0
06299         VINT(297)=0D0
06300         VINT(298)=-VINT(293)
06301         VINT(299)=0.5D0*(W2+PMS2-PMS1)/VINT(1)
06302         VINT(300)=SIGN(SQRT(ABS(PMS2)),PMS2)
06303  
06304 C...Assign weight for photon flux; different for transverse and
06305 C...longitudinal photons. Flag incoming unresolved photon.
06306         WTGAGA=1D0
06307         DO 140 I=1,2
06308           IF(MINT(140+I).NE.0) THEN
06309             WTGAGA=WTGAGA*2D0*(PARU(101)/PARU(2))*
06310      &      LOG(XMAX(I)/XMIN(I))*LOG(Q2MAX(I)/Q2MIN(I))
06311             IF(MSTP(16).EQ.0) THEN 
06312               XY=X(I)
06313             ELSE
06314               WTGAGA=WTGAGA*X(I)/Y(I)
06315               XY=Y(I)
06316             ENDIF
06317             IF(ISUB.EQ.132.OR.ISUB.EQ.134.OR.ISUB.EQ.136) THEN
06318               WTGAGA=WTGAGA*(1D0-XY)
06319             ELSEIF(I.EQ.1.AND.(ISUB.EQ.139.OR.ISUB.EQ.140)) THEN
06320               WTGAGA=WTGAGA*(1D0-XY)
06321             ELSEIF(I.EQ.2.AND.(ISUB.EQ.138.OR.ISUB.EQ.140)) THEN
06322               WTGAGA=WTGAGA*(1D0-XY)
06323             ELSE
06324               WTGAGA=WTGAGA*(0.5D0*(1D0+(1D0-XY)**2)-
06325      &        PMS(I)*XY**2/Q2(I))
06326             ENDIF
06327             IF(MINT(106+I).EQ.0) MINT(14+I)=22  
06328           ENDIF
06329   140   CONTINUE
06330         VINT(319)=WTGAGA
06331         MINT(143)=LOOP
06332 
06333 C...Update pTmin and cross section information.
06334         IF(MSTP(82).LE.1) THEN
06335           PTMN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
06336         ELSE
06337           PTMN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
06338         ENDIF
06339         VINT(149)=4D0*PTMN**2/VINT(2)
06340         VINT(154)=PTMN
06341         CALL PYXTOT
06342  
06343 C...Reconstruct kinematics of photons inside leptons.
06344       ELSEIF(IGAGA.EQ.4) THEN
06345  
06346 C...Make place for incoming particles and scattered leptons.
06347         MOVE=3
06348         IF(MINT(141).NE.0.AND.MINT(142).NE.0) MOVE=4
06349         MINT(4)=MINT(4)+MOVE
06350         DO 160 I=MINT(84)-MOVE,MINT(83)+1,-1
06351           IF(K(I,1).EQ.21) THEN
06352             DO 150 J=1,5
06353               K(I+MOVE,J)=K(I,J)
06354               P(I+MOVE,J)=P(I,J)
06355               V(I+MOVE,J)=V(I,J)
06356   150       CONTINUE
06357             IF(K(I,3).GT.MINT(83).AND.K(I,3).LE.MINT(84))
06358      &      K(I+MOVE,3)=K(I,3)+MOVE
06359             IF(K(I,4).GT.MINT(83).AND.K(I,4).LE.MINT(84))
06360      &      K(I+MOVE,4)=K(I,4)+MOVE
06361             IF(K(I,5).GT.MINT(83).AND.K(I,5).LE.MINT(84))
06362      &      K(I+MOVE,5)=K(I,5)+MOVE
06363           ENDIF
06364   160   CONTINUE
06365         DO 170 I=MINT(84)+1,N
06366           IF(K(I,3).GT.MINT(83).AND.K(I,3).LE.MINT(84))
06367      &    K(I,3)=K(I,3)+MOVE
06368   170   CONTINUE
06369  
06370 C...Fill in incoming particles.
06371         DO 190 I=MINT(83)+1,MINT(83)+MOVE
06372           DO 180 J=1,5
06373             K(I,J)=0
06374             P(I,J)=0D0
06375             V(I,J)=0D0
06376   180     CONTINUE
06377   190   CONTINUE
06378         DO 200 I=1,2
06379           K(MINT(83)+I,1)=21
06380           IF(MINT(140+I).NE.0) THEN
06381             K(MINT(83)+I,2)=MINT(140+I)
06382             P(MINT(83)+I,5)=VINT(302+I)
06383           ELSE
06384             K(MINT(83)+I,2)=MINT(10+I)
06385             P(MINT(83)+I,5)=VINT(2+I)
06386           ENDIF
06387           P(MINT(83)+I,3)=0.5D0*SQRT((PMC(3)**2-4D0*PMS(1)*PMS(2))/
06388      &    VINT(302))*(-1D0)**(I+1)
06389           P(MINT(83)+I,4)=0.5D0*PMC(I)/VINT(301)
06390   200   CONTINUE
06391  
06392 C...New mother-daughter relations in documentation section.
06393         IF(MINT(141).NE.0.AND.MINT(142).NE.0) THEN
06394           K(MINT(83)+1,4)=MINT(83)+3
06395           K(MINT(83)+1,5)=MINT(83)+5
06396           K(MINT(83)+2,4)=MINT(83)+4
06397           K(MINT(83)+2,5)=MINT(83)+6
06398           K(MINT(83)+3,3)=MINT(83)+1
06399           K(MINT(83)+5,3)=MINT(83)+1
06400           K(MINT(83)+4,3)=MINT(83)+2
06401           K(MINT(83)+6,3)=MINT(83)+2
06402         ELSEIF(MINT(141).NE.0) THEN
06403           K(MINT(83)+1,4)=MINT(83)+3
06404           K(MINT(83)+1,5)=MINT(83)+4
06405           K(MINT(83)+2,4)=MINT(83)+5
06406           K(MINT(83)+3,3)=MINT(83)+1
06407           K(MINT(83)+4,3)=MINT(83)+1
06408           K(MINT(83)+5,3)=MINT(83)+2
06409         ELSEIF(MINT(142).NE.0) THEN
06410           K(MINT(83)+1,4)=MINT(83)+4
06411           K(MINT(83)+2,4)=MINT(83)+3
06412           K(MINT(83)+2,5)=MINT(83)+5
06413           K(MINT(83)+3,3)=MINT(83)+2
06414           K(MINT(83)+4,3)=MINT(83)+1
06415           K(MINT(83)+5,3)=MINT(83)+2
06416         ENDIF
06417  
06418 C...Fill scattered lepton(s).
06419         DO 210 I=1,2
06420           IF(MINT(140+I).NE.0) THEN
06421             LSC=MINT(83)+MIN(I+2,MOVE)
06422             K(LSC,1)=21
06423             K(LSC,2)=MINT(140+I)
06424             P(LSC,1)=PT(I)*COS(PHI(I))
06425             P(LSC,2)=PT(I)*SIN(PHI(I))
06426             P(LSC,4)=(1D0-X(I))*P(MINT(83)+I,4)
06427             P(LSC,3)=SQRT(P(LSC,4)**2-PMS(I))*COS(THETA(I))*
06428      &      (-1D0)**(I-1)
06429             P(LSC,5)=VINT(302+I)
06430           ENDIF
06431   210   CONTINUE
06432  
06433 C...Find incoming four-vectors to subprocess.
06434         K(N+1,1)=21
06435         IF(MINT(141).NE.0) THEN
06436           DO 220 J=1,4
06437             P(N+1,J)=P(MINT(83)+1,J)-P(MINT(83)+3,J)
06438   220     CONTINUE
06439         ELSE
06440           DO 230 J=1,4
06441             P(N+1,J)=P(MINT(83)+1,J)
06442   230     CONTINUE
06443         ENDIF
06444         K(N+2,1)=21
06445         IF(MINT(142).NE.0) THEN
06446           DO 240 J=1,4
06447             P(N+2,J)=P(MINT(83)+2,J)-P(MINT(83)+MOVE,J)
06448   240     CONTINUE
06449         ELSE
06450           DO 250 J=1,4
06451             P(N+2,J)=P(MINT(83)+2,J)
06452   250     CONTINUE
06453         ENDIF
06454  
06455 C...Define boost and rotation between hadronic subsystem and
06456 C...collision rest frame; boost hadronic subsystem to this frame.
06457         DO 260 J=1,3
06458           BETA(J)=(P(N+1,J)+P(N+2,J))/(P(N+1,4)+P(N+2,4))
06459   260   CONTINUE
06460         CALL PYROBO(N+1,N+2,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
06461         BPHI=PYANGL(P(N+1,1),P(N+1,2))
06462         CALL PYROBO(N+1,N+2,0D0,-BPHI,0D0,0D0,0D0)
06463         BTHETA=PYANGL(P(N+1,3),P(N+1,1))
06464         CALL PYROBO(MINT(83)+MOVE+1,N,BTHETA,BPHI,BETA(1),BETA(2),
06465      &  BETA(3))
06466  
06467 C...Add on scattered leptons to final state.
06468         DO 280 I=1,2
06469           IF(MINT(140+I).NE.0) THEN
06470             LSC=MINT(83)+MIN(I+2,MOVE)
06471             N=N+1
06472             DO 270 J=1,5
06473               K(N,J)=K(LSC,J)
06474               P(N,J)=P(LSC,J)
06475               V(N,J)=V(LSC,J)
06476   270       CONTINUE
06477             K(N,1)=1
06478             K(N,3)=LSC
06479           ENDIF
06480   280   CONTINUE
06481       ENDIF
06482  
06483       RETURN
06484       END
06485  
06486 C*********************************************************************
06487  
06488 C...PYRAND
06489 C...Generates quantities characterizing the high-pT scattering at the
06490 C...parton level according to the matrix elements. Chooses incoming,
06491 C...reacting partons, their momentum fractions and one of the possible
06492 C...subprocesses.
06493  
06494       SUBROUTINE PYRAND
06495  
06496 C...Double precision and integer declarations.
06497       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
06498       IMPLICIT INTEGER(I-N)
06499       INTEGER PYK,PYCHGE,PYCOMP
06500 C...Parameter statement to help give large particle numbers.
06501       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
06502 C...Commonblocks.
06503       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
06504       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
06505       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
06506       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
06507       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
06508       COMMON/PYINT1/MINT(400),VINT(400)
06509       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
06510       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
06511       COMMON/PYINT4/MWID(500),WIDS(500,5)
06512       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
06513       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
06514       COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
06515       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
06516       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
06517      &/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT7/,/PYUPPR/,/PYMSSM/
06518 C...Local arrays.
06519       DIMENSION XPQ(-25:25),PMM(2),PDIF(4),BHAD(4),PMMN(2)
06520  
06521 C...Parameters and data used in elastic/diffractive treatment.
06522       DATA EPS/0.0808D0/, ALP/0.25D0/, CRES/2D0/, PMRC/1.062D0/,
06523      &SMP/0.880D0/, BHAD/2.3D0,1.4D0,1.4D0,0.23D0/
06524  
06525 C...Initial values, specifically for (first) semihard interaction.
06526       MINT(10)=0
06527       MINT(17)=0
06528       MINT(18)=0
06529       VINT(143)=1D0
06530       VINT(144)=1D0
06531       VINT(157)=0D0
06532       VINT(158)=0D0
06533       MFAIL=0
06534       IF(MSTP(171).EQ.1.AND.MSTP(172).EQ.2) MFAIL=1
06535       ISUB=0
06536       LOOP=0
06537   100 LOOP=LOOP+1
06538       MINT(51)=0
06539       MINT(143)=1
06540 
06541 C...Start by assuming incoming photon is entering subprocess.
06542       IF(MINT(11).EQ.22) THEN
06543          MINT(15)=22
06544          VINT(307)=VINT(3)**2
06545       ENDIF
06546       IF(MINT(12).EQ.22) THEN
06547          MINT(16)=22
06548          VINT(308)=VINT(4)**2
06549       ENDIF
06550       MINT(103)=MINT(11)
06551       MINT(104)=MINT(12)
06552  
06553 C...Choice of process type - first event of pileup.
06554       INMULT=0 
06555       IF(MINT(82).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GT.96)) THEN
06556  
06557 C...For gamma-p or gamma-gamma first pick between alternatives.
06558         IGA=0
06559         IF(MINT(121).GT.1) CALL PYSAVE(4,IGA)
06560         MINT(122)=IGA
06561  
06562 C...For real gamma + gamma with different nature, flip at random.
06563         IF(MINT(11).EQ.22.AND.MINT(12).EQ.22.AND.MINT(123).GE.4.AND.
06564      &  MSTP(14).LE.10.AND.PYR(0).GT.0.5D0) THEN
06565           MINTSV=MINT(41)
06566           MINT(41)=MINT(42)
06567           MINT(42)=MINTSV
06568           MINTSV=MINT(45)
06569           MINT(45)=MINT(46)
06570           MINT(46)=MINTSV
06571           MINTSV=MINT(107)
06572           MINT(107)=MINT(108)
06573           MINT(108)=MINTSV
06574           IF(MINT(47).EQ.2.OR.MINT(47).EQ.3) MINT(47)=5-MINT(47)
06575         ENDIF
06576  
06577 C...Pick process type.
06578         RSUB=XSEC(0,1)*PYR(0)
06579         DO 110 I=1,500
06580           IF(MSUB(I).NE.1) GOTO 110
06581           ISUB=I
06582           RSUB=RSUB-XSEC(I,1)
06583           IF(RSUB.LE.0D0) GOTO 120
06584   110   CONTINUE
06585   120   IF(ISUB.EQ.95) ISUB=96
06586         IF(ISUB.EQ.96) INMULT=1
06587  
06588 C...Choice of inclusive process type - pileup events.
06589       ELSEIF(MINT(82).GE.2.AND.ISUB.EQ.0) THEN
06590         RSUB=VINT(131)*PYR(0)
06591         ISUB=96
06592         IF(RSUB.GT.SIGT(0,0,5)) ISUB=94
06593         IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)) ISUB=93
06594         IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)+SIGT(0,0,3)) ISUB=92
06595         IF(RSUB.GT.SIGT(0,0,5)+SIGT(0,0,4)+SIGT(0,0,3)+SIGT(0,0,2))
06596      &  ISUB=91
06597         IF(ISUB.EQ.96) INMULT=1
06598       ENDIF
06599  
06600 C...Choice of photon energy and flux factor inside lepton.
06601       IF(MINT(141).NE.0.OR.MINT(142).NE.0) THEN
06602         CALL PYGAGA(3,WTGAGA)
06603         IF(ISUB.GE.131.AND.ISUB.LE.140) THEN
06604           CKIN(3)=MAX(VINT(285),VINT(154))
06605           CKIN(1)=2D0*CKIN(3)
06606         ENDIF
06607 C...When necessary set direct/resolved photon by hand.
06608       ELSEIF(MINT(15).EQ.22.OR.MINT(16).EQ.22) THEN
06609         IF(MINT(15).EQ.22.AND.MINT(41).EQ.2) MINT(15)=0
06610         IF(MINT(16).EQ.22.AND.MINT(42).EQ.2) MINT(16)=0
06611       ENDIF
06612 
06613 C...Restrict direct*resolved processes to pTmin >= Q, 
06614 C...to avoid doublecounting  with DIS.
06615       IF(MSTP(18).EQ.3.AND.ISUB.GE.131.AND.ISUB.LE.136) THEN
06616         IF(MINT(15).EQ.22) THEN
06617           CKIN(3)=MAX(VINT(285),VINT(154),ABS(VINT(3))) 
06618         ELSE
06619           CKIN(3)=MAX(VINT(285),VINT(154),ABS(VINT(4))) 
06620         ENDIF 
06621         CKIN(1)=2D0*CKIN(3)        
06622       ENDIF
06623 
06624 C...Set up for multiple interactions.
06625       IF(INMULT.EQ.1) CALL PYMULT(2)
06626 
06627 C...Loopback point for minimum bias in photon physics.
06628       LOOP2=0
06629   125 LOOP2=LOOP2+1 
06630       IF(MINT(82).EQ.1) NGEN(0,1)=NGEN(0,1)+MINT(143)
06631       IF(MINT(82).EQ.1) NGEN(ISUB,1)=NGEN(ISUB,1)+MINT(143)
06632       IF(ISUB.EQ.96.AND.LOOP2.EQ.1.AND.MINT(82).EQ.1)
06633      &NGEN(97,1)=NGEN(97,1)+MINT(143)
06634       MINT(1)=ISUB
06635       ISTSB=ISET(ISUB)
06636  
06637 C...Random choice of flavour for some SUSY processes.
06638       IF(ISUB.GE.201.AND.ISUB.LE.301) THEN
06639 C...~e_L ~nu_e or ~mu_L ~nu_mu.
06640         IF(ISUB.EQ.210) THEN
06641           KFPR(ISUB,1)=KSUSY1+11+2*INT(0.5D0+PYR(0))
06642           KFPR(ISUB,2)=KFPR(ISUB,1)+1
06643 C...~nu_e ~nu_e(bar) or ~nu_mu ~nu_mu(bar).
06644         ELSEIF(ISUB.EQ.213) THEN
06645           KFPR(ISUB,1)=KSUSY1+12+2*INT(0.5D0+PYR(0))
06646           KFPR(ISUB,2)=KFPR(ISUB,1)
06647 C...~q ~chi/~g; ~q = ~d, ~u, ~s, ~c or ~b.
06648         ELSEIF(ISUB.GE.246.AND.ISUB.LE.259) THEN
06649           IF(ISUB.GE.258) THEN
06650             RKF=4D0
06651           ELSE
06652             RKF=5D0
06653           ENDIF
06654           IF(MOD(ISUB,2).EQ.0) THEN
06655             KFPR(ISUB,1)=KSUSY1+1+INT(RKF*PYR(0))
06656           ELSE
06657             KFPR(ISUB,1)=KSUSY2+1+INT(RKF*PYR(0))
06658           ENDIF
06659 C...~q1 ~q2; ~q = ~d, ~u, ~s, or ~c.
06660         ELSEIF(ISUB.GE.271.AND.ISUB.LE.276) THEN
06661           IF(ISUB.EQ.271.OR.ISUB.EQ.274) THEN
06662             KSU1=KSUSY1
06663             KSU2=KSUSY1
06664           ELSEIF(ISUB.EQ.272.OR.ISUB.EQ.275) THEN
06665             KSU1=KSUSY2
06666             KSU2=KSUSY2
06667           ELSEIF(PYR(0).LT.0.5D0) THEN
06668             KSU1=KSUSY1
06669             KSU2=KSUSY2
06670           ELSE
06671             KSU1=KSUSY2
06672             KSU2=KSUSY1
06673           ENDIF
06674           KFPR(ISUB,1)=KSU1+1+INT(4D0*PYR(0))
06675           KFPR(ISUB,2)=KSU2+1+INT(4D0*PYR(0))
06676 C...~q ~q(bar);  ~q = ~d, ~u, ~s, or ~c.
06677         ELSEIF(ISUB.EQ.277.OR.ISUB.EQ.279) THEN
06678           KFPR(ISUB,1)=KSUSY1+1+INT(4D0*PYR(0))
06679           KFPR(ISUB,2)=KFPR(ISUB,1)
06680         ELSEIF(ISUB.EQ.278.OR.ISUB.EQ.280) THEN
06681           KFPR(ISUB,1)=KSUSY2+1+INT(4D0*PYR(0))
06682           KFPR(ISUB,2)=KFPR(ISUB,1)
06683 C...~q1 ~q2; ~q = ~d, ~u, ~s, or ~c.
06684         ELSEIF(ISUB.GE.281.AND.ISUB.LE.286) THEN
06685           IF(ISUB.EQ.281.OR.ISUB.EQ.284) THEN
06686             KSU1=KSUSY1
06687             KSU2=KSUSY1
06688           ELSEIF(ISUB.EQ.282.OR.ISUB.EQ.285) THEN
06689             KSU1=KSUSY2
06690             KSU2=KSUSY2
06691           ELSEIF(PYR(0).LT.0.5D0) THEN
06692             KSU1=KSUSY1
06693             KSU2=KSUSY2
06694           ELSE
06695             KSU1=KSUSY2
06696             KSU2=KSUSY1
06697           ENDIF
06698           IF(ISUB.EQ.281.OR.ISUB.LE.283) THEN
06699             RKF=5D0
06700           ELSE
06701             RKF=4D0
06702           ENDIF
06703           KFPR(ISUB,2)=KSU2+1+INT(RKF*PYR(0))
06704         ENDIF
06705       ENDIF
06706  
06707 C...Find resonances (explicit or implicit in cross-section).
06708       MINT(72)=0
06709       KFR1=0
06710       IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
06711         KFR1=KFPR(ISUB,1)
06712       ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.25.OR.ISUB.EQ.110.OR.ISUB.EQ.165.OR.
06713      &  ISUB.EQ.171.OR.ISUB.EQ.176) THEN
06714         KFR1=23
06715       ELSEIF(ISUB.EQ.23.OR.ISUB.EQ.26.OR.ISUB.EQ.166.OR.ISUB.EQ.172.OR.
06716      &  ISUB.EQ.177) THEN
06717         KFR1=24
06718       ELSEIF(ISUB.GE.71.AND.ISUB.LE.77) THEN
06719         KFR1=25
06720         IF(MSTP(46).EQ.5) THEN
06721           KFR1=30
06722           PMAS(30,1)=PARP(45)
06723           PMAS(30,2)=PARP(45)**3/(96D0*PARU(1)*PARP(47)**2)
06724         ENDIF
06725       ELSEIF(ISUB.EQ.194) THEN
06726         KFR1=54
06727       ELSEIF(ISUB.EQ.195) THEN
06728         KFR1=55
06729       ELSEIF(ISUB.GE.361.AND.ISUB.LE.368) THEN
06730         KFR1=54
06731       ELSEIF(ISUB.GE.370.AND.ISUB.LE.377) THEN
06732         KFR1=55
06733       ENDIF
06734       CKMX=CKIN(2)
06735       IF(CKMX.LE.0D0) CKMX=VINT(1)
06736       KCR1=PYCOMP(KFR1)
06737       IF(KFR1.NE.0) THEN
06738         IF(CKIN(1).GT.PMAS(KCR1,1)+20D0*PMAS(KCR1,2).OR.
06739      &  CKMX.LT.PMAS(KCR1,1)-20D0*PMAS(KCR1,2)) KFR1=0
06740       ENDIF
06741       IF(KFR1.NE.0) THEN
06742         TAUR1=PMAS(KCR1,1)**2/VINT(2)
06743         IF(KFR1.EQ.54) THEN
06744           CALL PYTECM(S1,S2)
06745           TAUR1=S1/VINT(2)
06746         ENDIF
06747         GAMR1=PMAS(KCR1,1)*PMAS(KCR1,2)/VINT(2)
06748         MINT(72)=1
06749         MINT(73)=KFR1
06750         VINT(73)=TAUR1
06751         VINT(74)=GAMR1
06752       ENDIF
06753       IF(ISUB.EQ.141.OR.ISUB.EQ.194.OR.(ISUB.GE.364.AND.ISUB.LE.368))
06754      $THEN
06755         KFR2=23
06756         IF(ISUB.EQ.194) THEN
06757           KFR2=56
06758         ELSEIF(ISUB.GE.364.AND.ISUB.LE.368) THEN
06759           KFR2=56
06760         ENDIF
06761         KCR2=PYCOMP(KFR2)
06762         TAUR2=PMAS(KCR2,1)**2/VINT(2)
06763         IF(KFR2.EQ.56) THEN
06764           CALL PYTECM(S1,S2)
06765           TAUR2=S2/VINT(2)
06766         ENDIF
06767         GAMR2=PMAS(KCR2,1)*PMAS(KCR2,2)/VINT(2)
06768         IF(CKIN(1).GT.PMAS(KCR2,1)+20D0*PMAS(KCR2,2).OR.
06769      &  CKMX.LT.PMAS(KCR2,1)-20D0*PMAS(KCR2,2)) KFR2=0
06770         IF(KFR2.NE.0.AND.KFR1.NE.0) THEN
06771           MINT(72)=2
06772           MINT(74)=KFR2
06773           VINT(75)=TAUR2
06774           VINT(76)=GAMR2
06775         ELSEIF(KFR2.NE.0) THEN
06776           KFR1=KFR2
06777           TAUR1=TAUR2
06778           GAMR1=GAMR2
06779           MINT(72)=1
06780           MINT(73)=KFR1
06781           VINT(73)=TAUR1
06782           VINT(74)=GAMR1
06783         ENDIF
06784       ENDIF
06785  
06786 C...Find product masses and minimum pT of process,
06787 C...optionally with broadening according to a truncated Breit-Wigner.
06788       VINT(63)=0D0
06789       VINT(64)=0D0
06790       MINT(71)=0
06791       VINT(71)=CKIN(3)
06792       IF(MINT(82).GE.2) VINT(71)=0D0
06793       VINT(80)=1D0
06794       IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
06795         NBW=0
06796         DO 140 I=1,2
06797           PMMN(I)=0D0
06798           IF(KFPR(ISUB,I).EQ.0) THEN
06799           ELSEIF(MSTP(42).LE.0.OR.PMAS(PYCOMP(KFPR(ISUB,I)),2).LT.
06800      &      PARP(41)) THEN
06801             VINT(62+I)=PMAS(PYCOMP(KFPR(ISUB,I)),1)**2
06802           ELSE
06803             NBW=NBW+1
06804 C...This prevents SUSY/t particles from becoming too light.
06805             KFLW=KFPR(ISUB,I)
06806             IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
06807               KCW=PYCOMP(KFLW)
06808               PMMN(I)=PMAS(KCW,1)
06809               DO 130 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
06810                 IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
06811                   PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
06812      &            PMAS(PYCOMP(KFDP(IDC,2)),1)
06813                   IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
06814      &            PMAS(PYCOMP(KFDP(IDC,3)),1)
06815                   PMMN(I)=MIN(PMMN(I),PMSUM)
06816                 ENDIF
06817   130         CONTINUE
06818             ELSEIF(KFLW.EQ.6) THEN
06819               PMMN(I)=PMAS(24,1)+PMAS(5,1)
06820             ENDIF
06821           ENDIF
06822   140   CONTINUE
06823         IF(NBW.GE.1) THEN
06824           CKIN41=CKIN(41)
06825           CKIN43=CKIN(43)
06826           CKIN(41)=MAX(PMMN(1),CKIN(41))
06827           CKIN(43)=MAX(PMMN(2),CKIN(43))
06828           CALL PYOFSH(4,0,KFPR(ISUB,1),KFPR(ISUB,2),0D0,PQM3,PQM4)
06829           CKIN(41)=CKIN41
06830           CKIN(43)=CKIN43
06831           IF(MINT(51).EQ.1) THEN
06832             IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
06833             IF(MFAIL.EQ.1) THEN
06834               MSTI(61)=1
06835               RETURN
06836             ENDIF
06837             GOTO 100
06838           ENDIF
06839           VINT(63)=PQM3**2
06840           VINT(64)=PQM4**2
06841         ENDIF
06842         IF(MIN(VINT(63),VINT(64)).LT.CKIN(6)**2) MINT(71)=1
06843         IF(MINT(71).EQ.1) VINT(71)=MAX(CKIN(3),CKIN(5))
06844       ENDIF
06845  
06846 C...Prepare for additional variable choices in 2 -> 3.
06847       IF(ISTSB.EQ.5) THEN
06848         VINT(201)=0D0
06849         IF(KFPR(ISUB,2).GT.0) VINT(201)=PMAS(PYCOMP(KFPR(ISUB,2)),1)
06850         VINT(206)=VINT(201)
06851         VINT(204)=PMAS(23,1)
06852         IF(ISUB.EQ.124.OR.ISUB.EQ.351) VINT(204)=PMAS(24,1)
06853         IF(ISUB.EQ.352) VINT(204)=PMAS(63,1)
06854         IF(ISUB.EQ.121.OR.ISUB.EQ.122.OR.ISUB.EQ.181.OR.ISUB.EQ.182.OR.
06855      &  ISUB.EQ.186.OR.ISUB.EQ.187) VINT(204)=VINT(201)
06856         VINT(209)=VINT(204)
06857       ENDIF
06858  
06859 C...Select incoming VDM particle (rho/omega/phi/J/psi).
06860       IF(ISTSB.NE.0.AND.(MINT(101).GE.2.OR.MINT(102).GE.2).AND.
06861      &(MINT(123).EQ.2.OR.MINT(123).EQ.3.OR.MINT(123).EQ.7)) THEN
06862         VRN=PYR(0)*SIGT(0,0,5)
06863         IF(MINT(101).LE.1) THEN
06864           I1MN=0
06865           I1MX=0
06866         ELSE
06867           I1MN=1
06868           I1MX=MINT(101)
06869         ENDIF
06870         IF(MINT(102).LE.1) THEN
06871           I2MN=0
06872           I2MX=0
06873         ELSE
06874           I2MN=1
06875           I2MX=MINT(102)
06876         ENDIF
06877         DO 160 I1=I1MN,I1MX
06878           KFV1=110*I1+3
06879           DO 150 I2=I2MN,I2MX
06880             KFV2=110*I2+3
06881             VRN=VRN-SIGT(I1,I2,5)
06882             IF(VRN.LE.0D0) GOTO 170
06883   150     CONTINUE
06884   160   CONTINUE
06885   170   IF(MINT(101).GE.2) MINT(103)=KFV1
06886         IF(MINT(102).GE.2) MINT(104)=KFV2
06887       ENDIF
06888  
06889       IF(ISTSB.EQ.0) THEN
06890 C...Elastic scattering or single or double diffractive scattering.
06891  
06892 C...Select incoming particle (rho/omega/phi/J/psi for VDM) and mass.
06893         MINT(103)=MINT(11)
06894         MINT(104)=MINT(12)
06895         PMM(1)=VINT(3)
06896         PMM(2)=VINT(4)
06897         IF(MINT(101).GE.2.OR.MINT(102).GE.2) THEN
06898           JJ=ISUB-90
06899           VRN=PYR(0)*SIGT(0,0,JJ)
06900           IF(MINT(101).LE.1) THEN
06901             I1MN=0
06902             I1MX=0
06903           ELSE
06904             I1MN=1
06905             I1MX=MINT(101)
06906           ENDIF
06907           IF(MINT(102).LE.1) THEN
06908             I2MN=0
06909             I2MX=0
06910           ELSE
06911             I2MN=1
06912             I2MX=MINT(102)
06913           ENDIF
06914           DO 190 I1=I1MN,I1MX
06915             KFV1=110*I1+3
06916             DO 180 I2=I2MN,I2MX
06917               KFV2=110*I2+3
06918               VRN=VRN-SIGT(I1,I2,JJ)
06919               IF(VRN.LE.0D0) GOTO 200
06920   180       CONTINUE
06921   190     CONTINUE
06922   200     IF(MINT(101).GE.2) THEN
06923             MINT(103)=KFV1
06924             PMM(1)=PYMASS(KFV1)
06925           ENDIF
06926           IF(MINT(102).GE.2) THEN
06927             MINT(104)=KFV2
06928             PMM(2)=PYMASS(KFV2)
06929           ENDIF
06930         ENDIF
06931         VINT(67)=PMM(1)
06932         VINT(68)=PMM(2)
06933 
06934 C...Select mass for GVMD states (rejecting previous assignment).
06935         Q0S=4D0*PARP(15)**2
06936         Q1S=4D0*VINT(154)**2
06937         LOOP3=0
06938   202   LOOP3=LOOP3+1
06939         DO 208 JT=1,2
06940           IF(MINT(106+JT).EQ.3) THEN 
06941             PS=VINT(2+JT)**2
06942             PMM(JT)=(Q0S+PS)*(Q1S+PS)/
06943      &      (Q0S+PYR(0)*(Q1S-Q0S)+PS)-PS
06944             IF(MINT(102+JT).GE.333) PMM(JT)=PMM(JT)-
06945      &      PMAS(PYCOMP(113),1)+PMAS(PYCOMP(MINT(102+JT)),1)
06946           ENDIF
06947   208   CONTINUE
06948         IF(PMM(1)+PMM(2)+PARP(104).GE.VINT(1)) THEN
06949           IF(LOOP3.LT.100.AND.(MINT(107).EQ.3.OR.MINT(108).EQ.3)) 
06950      &    GOTO 202
06951           GOTO 100
06952         ENDIF
06953  
06954 C...Side/sides of diffractive system.
06955         MINT(17)=0
06956         MINT(18)=0
06957         IF(ISUB.EQ.92.OR.ISUB.EQ.94) MINT(17)=1
06958         IF(ISUB.EQ.93.OR.ISUB.EQ.94) MINT(18)=1
06959  
06960 C...Find masses of particles and minimal masses of diffractive states.
06961         DO 210 JT=1,2
06962           PDIF(JT)=PMM(JT)
06963           VINT(68+JT)=PDIF(JT)
06964           IF(MINT(16+JT).EQ.1) PDIF(JT)=PDIF(JT)+PARP(102)
06965   210   CONTINUE
06966         SH=VINT(2)
06967         SQM1=PMM(1)**2
06968         SQM2=PMM(2)**2
06969         SQM3=PDIF(1)**2
06970         SQM4=PDIF(2)**2
06971         SMRES1=(PMM(1)+PMRC)**2
06972         SMRES2=(PMM(2)+PMRC)**2
06973  
06974 C...Find elastic slope and lower limit diffractive slope.
06975         IHA=MAX(2,IABS(MINT(103))/110)
06976         IF(IHA.GE.5) IHA=1
06977         IHB=MAX(2,IABS(MINT(104))/110)
06978         IF(IHB.GE.5) IHB=1
06979         IF(ISUB.EQ.91) THEN
06980           BMN=2D0*BHAD(IHA)+2D0*BHAD(IHB)+4D0*SH**EPS-4.2D0
06981         ELSEIF(ISUB.EQ.92) THEN
06982           BMN=MAX(2D0,2D0*BHAD(IHB))
06983         ELSEIF(ISUB.EQ.93) THEN
06984           BMN=MAX(2D0,2D0*BHAD(IHA))
06985         ELSEIF(ISUB.EQ.94) THEN
06986           BMN=2D0*ALP*4D0
06987         ENDIF
06988  
06989 C...Determine maximum possible t range and coefficient of generation.
06990         SQLA12=(SH-SQM1-SQM2)**2-4D0*SQM1*SQM2
06991         SQLA34=(SH-SQM3-SQM4)**2-4D0*SQM3*SQM4
06992         THA=SH-(SQM1+SQM2+SQM3+SQM4)+(SQM1-SQM2)*(SQM3-SQM4)/SH
06993         THB=SQRT(MAX(0D0,SQLA12))*SQRT(MAX(0D0,SQLA34))/SH
06994         THC=(SQM3-SQM1)*(SQM4-SQM2)+(SQM1+SQM4-SQM2-SQM3)*
06995      &  (SQM1*SQM4-SQM2*SQM3)/SH
06996         THL=-0.5D0*(THA+THB)
06997         THU=THC/THL
06998         THRND=EXP(MAX(-50D0,BMN*(THL-THU)))-1D0
06999  
07000 C...Select diffractive mass/masses according to dm^2/m^2.
07001         LOOP3=0
07002   220   LOOP3=LOOP3+1
07003         DO 230 JT=1,2
07004           IF(MINT(16+JT).EQ.0) THEN
07005             PDIF(2+JT)=PDIF(JT)
07006           ELSE
07007             PMMIN=PDIF(JT)
07008             PMMAX=MAX(VINT(2+JT),VINT(1)-PDIF(3-JT))
07009             PDIF(2+JT)=PMMIN*(PMMAX/PMMIN)**PYR(0)
07010           ENDIF
07011   230   CONTINUE
07012         SQM3=PDIF(3)**2
07013         SQM4=PDIF(4)**2
07014  
07015 C..Additional mass factors, including resonance enhancement.
07016         IF(PDIF(3)+PDIF(4).GE.VINT(1)) THEN
07017           IF(LOOP3.LT.100) GOTO 220
07018           GOTO 100
07019         ENDIF
07020         IF(ISUB.EQ.92) THEN
07021           FSD=(1D0-SQM3/SH)*(1D0+CRES*SMRES1/(SMRES1+SQM3))
07022           IF(FSD.LT.PYR(0)*(1D0+CRES)) GOTO 220
07023         ELSEIF(ISUB.EQ.93) THEN
07024           FSD=(1D0-SQM4/SH)*(1D0+CRES*SMRES2/(SMRES2+SQM4))
07025           IF(FSD.LT.PYR(0)*(1D0+CRES)) GOTO 220
07026         ELSEIF(ISUB.EQ.94) THEN
07027           FDD=(1D0-(PDIF(3)+PDIF(4))**2/SH)*(SH*SMP/
07028      &    (SH*SMP+SQM3*SQM4))*(1D0+CRES*SMRES1/(SMRES1+SQM3))*
07029      &    (1D0+CRES*SMRES2/(SMRES2+SQM4))
07030           IF(FDD.LT.PYR(0)*(1D0+CRES)**2) GOTO 220
07031         ENDIF
07032  
07033 C...Select t according to exp(Bmn*t) and correct to right slope.
07034         TH=THU+LOG(1D0+THRND*PYR(0))/BMN
07035         IF(ISUB.GE.92) THEN
07036           IF(ISUB.EQ.92) THEN
07037             BADD=2D0*ALP*LOG(SH/SQM3)
07038             IF(BHAD(IHB).LT.1D0) BADD=MAX(0D0,BADD+2D0*BHAD(IHB)-2D0)
07039           ELSEIF(ISUB.EQ.93) THEN
07040             BADD=2D0*ALP*LOG(SH/SQM4)
07041             IF(BHAD(IHA).LT.1D0) BADD=MAX(0D0,BADD+2D0*BHAD(IHA)-2D0)
07042           ELSEIF(ISUB.EQ.94) THEN
07043             BADD=2D0*ALP*(LOG(EXP(4D0)+SH/(ALP*SQM3*SQM4))-4D0)
07044           ENDIF
07045           IF(EXP(MAX(-50D0,BADD*(TH-THU))).LT.PYR(0)) GOTO 220
07046         ENDIF
07047  
07048 C...Check whether m^2 and t choices are consistent.
07049         SQLA34=(SH-SQM3-SQM4)**2-4D0*SQM3*SQM4
07050         THA=SH-(SQM1+SQM2+SQM3+SQM4)+(SQM1-SQM2)*(SQM3-SQM4)/SH
07051         THB=SQRT(MAX(0D0,SQLA12))*SQRT(MAX(0D0,SQLA34))/SH
07052         IF(THB.LE.1D-8) GOTO 220
07053         THC=(SQM3-SQM1)*(SQM4-SQM2)+(SQM1+SQM4-SQM2-SQM3)*
07054      &  (SQM1*SQM4-SQM2*SQM3)/SH
07055         THLM=-0.5D0*(THA+THB)
07056         THUM=THC/THLM
07057         IF(TH.LT.THLM.OR.TH.GT.THUM) GOTO 220
07058  
07059 C...Information to output.
07060         VINT(21)=1D0
07061         VINT(22)=0D0
07062         VINT(23)=MIN(1D0,MAX(-1D0,(THA+2D0*TH)/THB))
07063         VINT(45)=TH
07064         VINT(59)=2D0*SQRT(MAX(0D0,-(THC+THA*TH+TH**2)))/THB
07065         VINT(63)=PDIF(3)**2
07066         VINT(64)=PDIF(4)**2
07067         VINT(283)=PMM(1)**2/4D0
07068         VINT(284)=PMM(2)**2/4D0
07069  
07070 C...Note: in the following, by In is meant the integral over the
07071 C...quantity multiplying coefficient cn.
07072 C...Choose tau according to h1(tau)/tau, where
07073 C...h1(tau) = c1 + I1/I2*c2*1/tau + I1/I3*c3*1/(tau+tau_R) +
07074 C...I1/I4*c4*tau/((s*tau-m^2)^2+(m*Gamma)^2) +
07075 C...I1/I5*c5*1/(tau+tau_R') +
07076 C...I1/I6*c6*tau/((s*tau-m'^2)^2+(m'*Gamma')^2) +
07077 C...I1/I7*c7*tau/(1.-tau), and
07078 C...c1 + c2 + c3 + c4 + c5 + c6 + c7 = 1.
07079       ELSEIF(ISTSB.GE.1.AND.ISTSB.LE.5) THEN
07080         CALL PYKLIM(1)
07081         IF(MINT(51).NE.0) THEN
07082           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07083           IF(MFAIL.EQ.1) THEN
07084             MSTI(61)=1
07085             RETURN
07086           ENDIF
07087           GOTO 100
07088         ENDIF
07089         RTAU=PYR(0)
07090         MTAU=1
07091         IF(RTAU.GT.COEF(ISUB,1)) MTAU=2
07092         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)) MTAU=3
07093         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)) MTAU=4
07094         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4))
07095      &  MTAU=5
07096         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4)+
07097      &  COEF(ISUB,5)) MTAU=6
07098         IF(RTAU.GT.COEF(ISUB,1)+COEF(ISUB,2)+COEF(ISUB,3)+COEF(ISUB,4)+
07099      &  COEF(ISUB,5)+COEF(ISUB,6)) MTAU=7
07100         CALL PYKMAP(1,MTAU,PYR(0))
07101  
07102 C...2 -> 3, 4 processes:
07103 C...Choose tau' according to h4(tau,tau')/tau', where
07104 C...h4(tau,tau') = c1 + I1/I2*c2*(1 - tau/tau')^3/tau' +
07105 C...I1/I3*c3*1/(1 - tau'), and c1 + c2 + c3 = 1.
07106         IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
07107           CALL PYKLIM(4)
07108           IF(MINT(51).NE.0) THEN
07109             IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07110             IF(MFAIL.EQ.1) THEN
07111               MSTI(61)=1
07112               RETURN
07113             ENDIF
07114             GOTO 100
07115           ENDIF
07116           RTAUP=PYR(0)
07117           MTAUP=1
07118           IF(RTAUP.GT.COEF(ISUB,18)) MTAUP=2
07119           IF(RTAUP.GT.COEF(ISUB,18)+COEF(ISUB,19)) MTAUP=3
07120           CALL PYKMAP(4,MTAUP,PYR(0))
07121         ENDIF
07122  
07123 C...Choose y* according to h2(y*), where
07124 C...h2(y*) = I0/I1*c1*(y*-y*min) + I0/I2*c2*(y*max-y*) +
07125 C...I0/I3*c3*1/cosh(y*) + I0/I4*c4*1/(1-exp(y*-y*max)) +
07126 C...I0/I5*c5*1/(1-exp(-y*-y*min)), I0 = y*max-y*min,
07127 C...and c1 + c2 + c3 + c4 + c5 = 1.
07128         CALL PYKLIM(2)
07129         IF(MINT(51).NE.0) THEN
07130           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07131           IF(MFAIL.EQ.1) THEN
07132             MSTI(61)=1
07133             RETURN
07134           ENDIF
07135           GOTO 100
07136         ENDIF
07137         RYST=PYR(0)
07138         MYST=1
07139         IF(RYST.GT.COEF(ISUB,8)) MYST=2
07140         IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
07141         IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)+COEF(ISUB,10)) MYST=4
07142         IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)+COEF(ISUB,10)+
07143      &  COEF(ISUB,11)) MYST=5
07144         CALL PYKMAP(2,MYST,PYR(0))
07145  
07146 C...2 -> 2 processes:
07147 C...Choose cos(theta-hat) (cth) according to h3(cth), where
07148 C...h3(cth) = c0 + I0/I1*c1*1/(A - cth) + I0/I2*c2*1/(A + cth) +
07149 C...I0/I3*c3*1/(A - cth)^2 + I0/I4*c4*1/(A + cth)^2,
07150 C...A = 1 + 2*(m3*m4/sh)^2 (= 1 for massless products),
07151 C...and c0 + c1 + c2 + c3 + c4 = 1.
07152         CALL PYKLIM(3)
07153         IF(MINT(51).NE.0) THEN
07154           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07155           IF(MFAIL.EQ.1) THEN
07156             MSTI(61)=1
07157             RETURN
07158           ENDIF
07159           GOTO 100
07160         ENDIF
07161         IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
07162           RCTH=PYR(0)
07163           MCTH=1
07164           IF(RCTH.GT.COEF(ISUB,13)) MCTH=2
07165           IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)) MCTH=3
07166           IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)+COEF(ISUB,15)) MCTH=4
07167           IF(RCTH.GT.COEF(ISUB,13)+COEF(ISUB,14)+COEF(ISUB,15)+
07168      &    COEF(ISUB,16)) MCTH=5
07169           CALL PYKMAP(3,MCTH,PYR(0))
07170         ENDIF
07171  
07172 C...2 -> 3 : select pT1, phi1, pT2, phi2, y3 for 3 outgoing.
07173         IF(ISTSB.EQ.5) THEN
07174           CALL PYKMAP(5,0,0D0)
07175           IF(MINT(51).NE.0) THEN
07176             IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07177             IF(MFAIL.EQ.1) THEN
07178               MSTI(61)=1
07179               RETURN
07180             ENDIF
07181             GOTO 100
07182           ENDIF
07183         ENDIF
07184 
07185 C...DIS as f + gamma* -> f process: set dummy values.
07186       ELSEIF(ISTSB.EQ.8) THEN  
07187         VINT(21)=0.9D0
07188         VINT(22)=0D0
07189         VINT(23)=0D0 
07190         VINT(47)=0D0
07191         VINT(48)=0D0         
07192  
07193 C...Low-pT or multiple interactions (first semihard interaction).
07194       ELSEIF(ISTSB.EQ.9) THEN
07195         CALL PYMULT(3)
07196         ISUB=MINT(1)
07197  
07198 C...Generate user-defined process: kinematics plus weight.
07199       ELSEIF(ISTSB.EQ.11) THEN
07200         MSTI(51)=0
07201         CALL PYUPEV(ISUB,SIGS)
07202         IF(NUP.LE.0) THEN
07203           MINT(51)=2
07204           MSTI(51)=1
07205           IF(MINT(82).EQ.1) THEN
07206             NGEN(0,1)=NGEN(0,1)-1
07207             NGEN(0,2)=NGEN(0,2)-1
07208             NGEN(ISUB,1)=NGEN(ISUB,1)-1
07209           ENDIF
07210           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07211           RETURN
07212         ENDIF
07213  
07214 C...Construct 'trivial' kinematical variables needed.
07215         KFL1=KUP(1,2)
07216         KFL2=KUP(2,2)
07217         VINT(41)=2D0*PUP(1,4)/VINT(1)
07218         VINT(42)=2D0*PUP(2,4)/VINT(1)
07219         VINT(21)=VINT(41)*VINT(42)
07220         VINT(22)=0.5D0*LOG(VINT(41)/VINT(42))
07221         VINT(44)=VINT(21)*VINT(2)
07222         VINT(43)=SQRT(MAX(0D0,VINT(44)))
07223         VINT(56)=Q2UP(0)
07224         VINT(55)=SQRT(MAX(0D0,VINT(56)))
07225  
07226 C...Construct other kinematical variables needed (approximately).
07227         VINT(23)=0D0
07228         VINT(26)=VINT(21)
07229         VINT(45)=-0.5D0*VINT(44)
07230         VINT(46)=-0.5D0*VINT(44)
07231         VINT(49)=VINT(43)
07232         VINT(50)=VINT(44)
07233         VINT(51)=VINT(55)
07234         VINT(52)=VINT(56)
07235         VINT(53)=VINT(55)
07236         VINT(54)=VINT(56)
07237         VINT(25)=0D0
07238         VINT(48)=0D0
07239         DO 240 IUP=3,NUP
07240           IF(KUP(IUP,1).EQ.1) VINT(25)=VINT(25)+2D0*(PUP(IUP,5)**2+
07241      &    PUP(IUP,1)**2+PUP(IUP,2)**2)/VINT(2)
07242           IF(KUP(IUP,1).EQ.1) VINT(48)=VINT(48)+0.5D0*(PUP(IUP,1)**2+
07243      &    PUP(IUP,2)**2)
07244   240   CONTINUE
07245         VINT(47)=SQRT(VINT(48))
07246  
07247 C...Calculate parton distribution weights.
07248         IF(MINT(47).GE.2) THEN
07249           DO 260 I=3-MIN(2,MINT(45)),MIN(2,MINT(46))
07250             MINT(105)=MINT(102+I)
07251             MINT(109)=MINT(106+I)
07252             VINT(120)=VINT(2+I)
07253             IF(MSTP(57).LE.1) THEN
07254               CALL PYPDFU(MINT(10+I),VINT(40+I),Q2UP(0),XPQ)
07255             ELSE
07256               CALL PYPDFL(MINT(10+I),VINT(40+I),Q2UP(0),XPQ)
07257             ENDIF
07258             DO 250 KFL=-25,25
07259               XSFX(I,KFL)=XPQ(KFL)
07260   250       CONTINUE
07261   260     CONTINUE
07262         ENDIF
07263       ENDIF
07264  
07265 C...Choose azimuthal angle.
07266       VINT(24)=PARU(2)*PYR(0)
07267  
07268 C...Check against user cuts on kinematics at parton level.
07269       MINT(51)=0
07270       IF((ISUB.LE.90.OR.ISUB.GT.100).AND.ISTSB.LE.10) CALL PYKLIM(0)
07271       IF(MINT(51).NE.0) THEN
07272         IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07273         IF(MFAIL.EQ.1) THEN
07274           MSTI(61)=1
07275           RETURN
07276         ENDIF
07277         GOTO 100
07278       ENDIF
07279       IF(MINT(82).EQ.1.AND.MSTP(141).GE.1.AND.ISTSB.LE.10) THEN
07280         MCUT=0
07281         IF(MSUB(91)+MSUB(92)+MSUB(93)+MSUB(94)+MSUB(95).EQ.0)
07282      &  CALL PYKCUT(MCUT)
07283         IF(MCUT.NE.0) THEN
07284           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07285           IF(MFAIL.EQ.1) THEN
07286             MSTI(61)=1
07287             RETURN
07288           ENDIF
07289           GOTO 100
07290         ENDIF
07291       ENDIF
07292  
07293 C...Calculate differential cross-section for different subprocesses.
07294       IF(ISTSB.LE.10) CALL PYSIGH(NCHN,SIGS)  
07295       SIGSOR=SIGS
07296       SIGLPT=SIGT(0,0,5)*VINT(315)*VINT(316)
07297  
07298 C...Multiply cross section by lepton -> photon flux factor.
07299       IF(MINT(141).NE.0.OR.MINT(142).NE.0) THEN
07300         SIGS=WTGAGA*SIGS
07301         DO 270 ICHN=1,NCHN
07302           SIGH(ICHN)=WTGAGA*SIGH(ICHN)
07303   270   CONTINUE
07304         SIGLPT=WTGAGA*SIGLPT
07305       ENDIF
07306  
07307 C...Multiply cross-section by user-defined weights.
07308       IF(MSTP(173).EQ.1) THEN
07309         SIGS=PARP(173)*SIGS
07310         DO 280 ICHN=1,NCHN
07311           SIGH(ICHN)=PARP(173)*SIGH(ICHN)
07312   280   CONTINUE
07313         SIGLPT=PARP(173)*SIGLPT
07314       ENDIF
07315       WTXS=1D0
07316       SIGSWT=SIGS
07317       VINT(99)=1D0
07318       VINT(100)=1D0
07319       IF(MINT(82).EQ.1.AND.MSTP(142).GE.1) THEN
07320         IF(ISUB.NE.96.AND.MSUB(91)+MSUB(92)+MSUB(93)+MSUB(94)+
07321      &  MSUB(95).EQ.0) CALL PYEVWT(WTXS)
07322         SIGSWT=WTXS*SIGS
07323         VINT(99)=WTXS
07324         IF(MSTP(142).EQ.1) VINT(100)=1D0/WTXS
07325       ENDIF
07326  
07327 C...Calculations for Monte Carlo estimate of all cross-sections.
07328       IF(MINT(82).EQ.1.AND.ISUB.LE.90.OR.ISUB.GE.96) THEN
07329         IF(MSTP(142).LE.1) THEN
07330           XSEC(ISUB,2)=XSEC(ISUB,2)+SIGS
07331         ELSE
07332           XSEC(ISUB,2)=XSEC(ISUB,2)+SIGSWT
07333         ENDIF
07334       ELSEIF(MINT(82).EQ.1) THEN
07335         XSEC(ISUB,2)=XSEC(ISUB,2)+SIGS
07336       ENDIF
07337       IF((ISUB.EQ.95.OR.ISUB.EQ.96).AND.LOOP2.EQ.1.AND.
07338      &MINT(82).EQ.1) XSEC(97,2)=XSEC(97,2)+SIGLPT
07339  
07340 C...Multiple interactions: store results of cross-section calculation.
07341       IF(MINT(50).EQ.1.AND.MSTP(82).GE.3) THEN
07342         VINT(153)=SIGSOR
07343         CALL PYMULT(4)
07344       ENDIF
07345  
07346 C...Check that weight not negative.
07347       VIOL=SIGSWT/XSEC(ISUB,1)
07348       IF(ISUB.EQ.96.AND.MSTP(173).EQ.1) VIOL=VIOL/PARP(174)
07349       IF(MSTP(123).LE.0) THEN
07350         IF(VIOL.LT.-1D-3) THEN
07351           WRITE(MSTU(11),5000) VIOL,NGEN(0,3)+1
07352           IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) ISUB,VINT(21),
07353      &    VINT(22),VINT(23),VINT(26)
07354           STOP
07355         ENDIF
07356       ELSE
07357         IF(VIOL.LT.MIN(-1D-3,VINT(109))) THEN
07358           VINT(109)=VIOL
07359           WRITE(MSTU(11),5200) VIOL,NGEN(0,3)+1
07360           IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) ISUB,VINT(21),
07361      &    VINT(22),VINT(23),VINT(26)
07362         ENDIF
07363       ENDIF
07364  
07365 C...Weighting using estimate of maximum of differential cross-section.
07366       IF(MFAIL.EQ.0.AND.ISUB.NE.95.AND.ISUB.NE.96) THEN
07367         IF(VIOL.LT.PYR(0)) THEN
07368           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07369           IF(ISUB.GE.91.AND.ISUB.LE.94) ISUB=0
07370           GOTO 100
07371         ENDIF
07372       ELSEIF(MFAIL.EQ.0) THEN
07373         RATND=SIGLPT/XSEC(95,1)
07374         IF(LOOP2.EQ.1.AND.RATND.LT.PYR(0)) THEN
07375           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07376           ISUB=0
07377           GOTO 100
07378         ENDIF
07379         VIOL=VIOL/RATND
07380         IF(VIOL.LT.PYR(0)) THEN
07381           GOTO 125
07382         ENDIF
07383       ELSEIF(ISUB.NE.95.AND.ISUB.NE.96) THEN
07384         IF(VIOL.LT.PYR(0)) THEN
07385           MSTI(61)=1
07386           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07387           RETURN
07388         ENDIF
07389       ELSE
07390         RATND=SIGLPT/XSEC(95,1)
07391         IF(LOOP.EQ.1.AND.RATND.LT.PYR(0)) THEN
07392           MSTI(61)=1
07393           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07394           RETURN
07395         ENDIF
07396         VIOL=VIOL/RATND
07397         IF(VIOL.LT.PYR(0)) THEN
07398           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07399           GOTO 100
07400         ENDIF
07401       ENDIF
07402  
07403 C...Check for possible violation of estimated maximum of differential
07404 C...cross-section used in weighting.
07405       IF(MSTP(123).LE.0) THEN
07406         IF(VIOL.GT.1D0) THEN
07407           WRITE(MSTU(11),5300) VIOL,NGEN(0,3)+1
07408           IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
07409      &    VINT(22),VINT(23),VINT(26)
07410           STOP
07411         ENDIF
07412       ELSEIF(MSTP(123).EQ.1) THEN
07413         IF(VIOL.GT.VINT(108)) THEN
07414           VINT(108)=VIOL
07415           IF(VIOL.GT.1D0) THEN
07416             MINT(10)=1
07417             WRITE(MSTU(11),5400) VIOL,NGEN(0,3)+1
07418             IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
07419      &      VINT(22),VINT(23),VINT(26)
07420           ENDIF
07421         ENDIF
07422       ELSEIF(VIOL.GT.VINT(108)) THEN
07423         VINT(108)=VIOL
07424         IF(VIOL.GT.1D0) THEN
07425           MINT(10)=1
07426           XDIF=XSEC(ISUB,1)*(VIOL-1D0)
07427           XSEC(ISUB,1)=XSEC(ISUB,1)+XDIF
07428           IF(MSUB(ISUB).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GT.96))
07429      &    XSEC(0,1)=XSEC(0,1)+XDIF
07430           WRITE(MSTU(11),5400) VIOL,NGEN(0,3)+1
07431           IF(MSTP(122).GE.2) WRITE(MSTU(11),5100) ISUB,VINT(21),
07432      &    VINT(22),VINT(23),VINT(26)
07433           IF(ISUB.LE.9) THEN
07434             WRITE(MSTU(11),5500) ISUB,XSEC(ISUB,1)
07435           ELSEIF(ISUB.LE.99) THEN
07436             WRITE(MSTU(11),5600) ISUB,XSEC(ISUB,1)
07437           ELSE
07438             WRITE(MSTU(11),5700) ISUB,XSEC(ISUB,1)
07439           ENDIF
07440           VINT(108)=1D0
07441         ENDIF
07442       ENDIF
07443  
07444 C...Multiple interactions: choose impact parameter.
07445       VINT(148)=1D0
07446       IF(MINT(50).EQ.1.AND.(ISUB.LE.90.OR.ISUB.GE.96).AND.
07447      &MSTP(82).GE.3) THEN
07448         CALL PYMULT(5)
07449         IF(VINT(150).LT.PYR(0)) THEN
07450           IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07451           IF(MFAIL.EQ.1) THEN
07452             MSTI(61)=1
07453             RETURN
07454           ENDIF
07455           GOTO 100
07456         ENDIF
07457       ENDIF
07458       IF(MINT(82).EQ.1) NGEN(0,2)=NGEN(0,2)+1
07459       IF(MINT(82).EQ.1.AND.MSUB(95).EQ.1) THEN
07460         IF(ISUB.LE.90.OR.ISUB.GE.95) NGEN(95,1)=NGEN(95,1)+MINT(143)
07461         IF(ISUB.LE.90.OR.ISUB.GE.96) NGEN(96,2)=NGEN(96,2)+1
07462       ENDIF
07463       IF(ISUB.LE.90.OR.ISUB.GE.96) MINT(31)=MINT(31)+1
07464  
07465 C...Choose flavour of reacting partons (and subprocess).
07466       IF(ISTSB.GE.11) GOTO 300
07467       RSIGS=SIGS*PYR(0)
07468       QT2=VINT(48)
07469       RQQBAR=PARP(87)*(1D0-(QT2/(QT2+(PARP(88)*PARP(82)*
07470      &(VINT(1)/PARP(89))**PARP(90))**2))**2)
07471       IF(ISUB.NE.95.AND.(ISUB.NE.96.OR.MSTP(82).LE.1.OR.
07472      &PYR(0).GT.RQQBAR)) THEN
07473         DO 290 ICHN=1,NCHN
07474           KFL1=ISIG(ICHN,1)
07475           KFL2=ISIG(ICHN,2)
07476           MINT(2)=ISIG(ICHN,3)
07477           RSIGS=RSIGS-SIGH(ICHN)
07478           IF(RSIGS.LE.0D0) GOTO 300
07479   290   CONTINUE
07480  
07481 C...Multiple interactions: choose qqbar preferentially at small pT.
07482       ELSEIF(ISUB.EQ.96) THEN
07483         MINT(105)=MINT(103)
07484         MINT(109)=MINT(107)
07485         CALL PYSPLI(MINT(11),21,KFL1,KFLDUM)
07486         MINT(105)=MINT(104)
07487         MINT(109)=MINT(108)
07488         CALL PYSPLI(MINT(12),21,KFL2,KFLDUM)
07489         MINT(1)=11
07490         MINT(2)=1
07491         IF(KFL1.EQ.KFL2.AND.PYR(0).LT.0.5D0) MINT(2)=2
07492  
07493 C...Low-pT: choose string drawing configuration.
07494       ELSE
07495         KFL1=21
07496         KFL2=21
07497         RSIGS=6D0*PYR(0)
07498         MINT(2)=1
07499         IF(RSIGS.GT.1D0) MINT(2)=2
07500         IF(RSIGS.GT.2D0) MINT(2)=3
07501       ENDIF
07502  
07503 C...Reassign QCD process. Partons before initial state radiation.
07504   300 IF(MINT(2).GT.10) THEN
07505         MINT(1)=MINT(2)/10
07506         MINT(2)=MOD(MINT(2),10)
07507       ENDIF
07508       IF(MINT(82).EQ.1.AND.MSTP(111).GE.0) NGEN(MINT(1),2)=
07509      &NGEN(MINT(1),2)+1
07510       MINT(15)=KFL1
07511       MINT(16)=KFL2
07512       MINT(13)=MINT(15)
07513       MINT(14)=MINT(16)
07514       VINT(141)=VINT(41)
07515       VINT(142)=VINT(42)
07516       VINT(151)=0D0
07517       VINT(152)=0D0
07518  
07519 C...Calculate x value of photon for parton inside photon inside e.
07520       DO 330 JT=1,2
07521         MINT(18+JT)=0
07522         VINT(154+JT)=0D0
07523         MSPLI=0
07524         IF(JT.EQ.1.AND.MINT(43).LE.2) MSPLI=1
07525         IF(JT.EQ.2.AND.MOD(MINT(43),2).EQ.1) MSPLI=1
07526         IF(IABS(MINT(14+JT)).LE.8.OR.MINT(14+JT).EQ.21) MSPLI=MSPLI+1
07527         IF(MSPLI.EQ.2) THEN
07528           KFLH=MINT(14+JT)
07529           XHRD=VINT(140+JT)
07530           Q2HRD=VINT(54)
07531           MINT(105)=MINT(102+JT)
07532           MINT(109)=MINT(106+JT)
07533           VINT(120)=VINT(2+JT)
07534           IF(MSTP(57).LE.1) THEN
07535             CALL PYPDFU(22,XHRD,Q2HRD,XPQ)
07536           ELSE
07537             CALL PYPDFL(22,XHRD,Q2HRD,XPQ)
07538           ENDIF
07539           WTMX=4D0*XPQ(KFLH)
07540           IF(MSTP(13).EQ.2) THEN
07541             Q2PMS=Q2HRD/PMAS(11,1)**2
07542             WTMX=WTMX*LOG(MAX(2D0,Q2PMS*(1D0-XHRD)/XHRD**2))
07543           ENDIF
07544   310     XE=XHRD**PYR(0)
07545           XG=MIN(1D0-1D-10,XHRD/XE)
07546           IF(MSTP(57).LE.1) THEN
07547             CALL PYPDFU(22,XG,Q2HRD,XPQ)
07548           ELSE
07549             CALL PYPDFL(22,XG,Q2HRD,XPQ)
07550           ENDIF
07551           WT=(1D0+(1D0-XE)**2)*XPQ(KFLH)
07552           IF(MSTP(13).EQ.2) WT=WT*LOG(MAX(2D0,Q2PMS*(1D0-XE)/XE**2))
07553           IF(WT.LT.PYR(0)*WTMX) GOTO 310
07554           MINT(18+JT)=1
07555           VINT(154+JT)=XE
07556           DO 320 KFLS=-25,25
07557             XSFX(JT,KFLS)=XPQ(KFLS)
07558   320     CONTINUE
07559         ENDIF
07560   330 CONTINUE
07561  
07562 C...Pick scale where photon is resolved.
07563       Q0S=PARP(15)**2
07564       Q1S=VINT(154)**2
07565       VINT(283)=0D0
07566       IF(MINT(107).EQ.3) THEN
07567         IF(MSTP(66).EQ.1) THEN
07568           VINT(283)=Q0S*(VINT(54)/Q0S)**PYR(0)
07569         ELSEIF(MSTP(66).EQ.2) THEN
07570           PS=VINT(3)**2
07571           Q2EFF=VINT(54)*((Q0S+PS)/(VINT(54)+PS))*
07572      &    EXP(PS*(VINT(54)-Q0S)/((VINT(54)+PS)*(Q0S+PS)))
07573           Q2INT=SQRT(Q0S*Q2EFF)
07574           VINT(283)=Q2INT*(VINT(54)/Q2INT)**PYR(0)
07575         ELSEIF(MSTP(66).EQ.3) THEN
07576           VINT(283)=Q0S*(Q1S/Q0S)**PYR(0)
07577         ELSEIF(MSTP(66).GE.4) THEN
07578           PS=0.25D0*VINT(3)**2
07579           VINT(283)=(Q0S+PS)*(Q1S+PS)/
07580      &    (Q0S+PYR(0)*(Q1S-Q0S)+PS)-PS
07581         ENDIF
07582       ENDIF 
07583       VINT(284)=0D0
07584       IF(MINT(108).EQ.3) THEN
07585         IF(MSTP(66).EQ.1) THEN
07586           VINT(284)=Q0S*(VINT(54)/Q0S)**PYR(0)
07587         ELSEIF(MSTP(66).EQ.2) THEN
07588           PS=VINT(4)**2
07589           Q2EFF=VINT(54)*((Q0S+PS)/(VINT(54)+PS))*
07590      &    EXP(PS*(VINT(54)-Q0S)/((VINT(54)+PS)*(Q0S+PS)))
07591           Q2INT=SQRT(Q0S*Q2EFF)
07592           VINT(284)=Q2INT*(VINT(54)/Q2INT)**PYR(0)
07593         ELSEIF(MSTP(66).EQ.3) THEN
07594           VINT(284)=Q0S*(Q1S/Q0S)**PYR(0)
07595         ELSEIF(MSTP(66).GE.4) THEN
07596           PS=0.25D0*VINT(4)**2
07597           VINT(284)=(Q0S+PS)*(Q1S+PS)/
07598      &    (Q0S+PYR(0)*(Q1S-Q0S)+PS)-PS
07599         ENDIF
07600       ENDIF
07601       IF(MINT(121).GT.1) CALL PYSAVE(2,IGA)
07602  
07603 C...Format statements for differential cross-section maximum violations.
07604  5000 FORMAT(/1X,'Error: negative cross-section fraction',1P,D11.3,1X,
07605      &'in event',1X,I7,'D0'/1X,'Execution stopped!')
07606  5100 FORMAT(1X,'ISUB = ',I3,'; Point of violation:'/1X,'tau =',1P,
07607      &D11.3,', y* =',D11.3,', cthe = ',0P,F11.7,', tau'' =',1P,D11.3)
07608  5200 FORMAT(/1X,'Warning: negative cross-section fraction',1P,D11.3,1X,
07609      &'in event',1X,I7)
07610  5300 FORMAT(/1X,'Error: maximum violated by',1P,D11.3,1X,
07611      &'in event',1X,I7,'D0'/1X,'Execution stopped!')
07612  5400 FORMAT(/1X,'Advisory warning: maximum violated by',1P,D11.3,1X,
07613      &'in event',1X,I7)
07614  5500 FORMAT(1X,'XSEC(',I1,',1) increased to',1P,D11.3)
07615  5600 FORMAT(1X,'XSEC(',I2,',1) increased to',1P,D11.3)
07616  5700 FORMAT(1X,'XSEC(',I3,',1) increased to',1P,D11.3)
07617  
07618       RETURN
07619       END
07620  
07621 C*********************************************************************
07622  
07623 C...PYSCAT
07624 C...Finds outgoing flavours and event type; sets up the kinematics
07625 C...and colour flow of the hard scattering
07626  
07627       SUBROUTINE PYSCAT
07628  
07629 C...Double precision and integer declarations
07630       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
07631       IMPLICIT INTEGER(I-N)
07632       INTEGER PYK,PYCHGE,PYCOMP
07633 C...Parameter statement to help give large particle numbers.
07634       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
07635 C...Commonblocks
07636       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
07637       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
07638       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
07639       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
07640       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
07641       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
07642       COMMON/PYINT1/MINT(400),VINT(400)
07643       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
07644       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
07645       COMMON/PYINT4/MWID(500),WIDS(500,5)
07646       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
07647       COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
07648       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
07649      &SFMIX(16,4)
07650       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
07651      &/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYUPPR/,/PYSSMT/
07652 C...Local arrays and saved variables
07653       DIMENSION WDTP(0:200),WDTE(0:200,0:5),PMQ(2),Z(2),CTHE(2),
07654      &PHI(2),KUPPO(20),VINTSV(41:66)
07655       SAVE VINTSV
07656  
07657 C...Read out process
07658       ISUB=MINT(1)
07659       ISUBSV=ISUB
07660  
07661 C...Restore information for low-pT processes
07662       IF(ISUB.EQ.95.AND.MINT(57).GE.1) THEN
07663         DO 100 J=41,66
07664   100   VINT(J)=VINTSV(J)
07665       ENDIF
07666  
07667 C...Convert H' or A process into equivalent H one
07668       IHIGG=1
07669       KFHIGG=25
07670       IF((ISUB.GE.151.AND.ISUB.LE.160).OR.(ISUB.GE.171.AND.
07671      &ISUB.LE.190)) THEN
07672         IHIGG=2
07673         IF(MOD(ISUB-1,10).GE.5) IHIGG=3
07674         KFHIGG=33+IHIGG
07675         IF(ISUB.EQ.151.OR.ISUB.EQ.156) ISUB=3
07676         IF(ISUB.EQ.152.OR.ISUB.EQ.157) ISUB=102
07677         IF(ISUB.EQ.153.OR.ISUB.EQ.158) ISUB=103
07678         IF(ISUB.EQ.171.OR.ISUB.EQ.176) ISUB=24
07679         IF(ISUB.EQ.172.OR.ISUB.EQ.177) ISUB=26
07680         IF(ISUB.EQ.173.OR.ISUB.EQ.178) ISUB=123
07681         IF(ISUB.EQ.174.OR.ISUB.EQ.179) ISUB=124
07682         IF(ISUB.EQ.181.OR.ISUB.EQ.186) ISUB=121
07683         IF(ISUB.EQ.182.OR.ISUB.EQ.187) ISUB=122
07684       ENDIF
07685  
07686 C...Choice of subprocess, number of documentation lines
07687       IDOC=6+ISET(ISUB)
07688       IF(ISUB.EQ.95) IDOC=8
07689       IF(ISET(ISUB).EQ.5) IDOC=9
07690       IF(ISET(ISUB).EQ.11) IDOC=4+NUP
07691       MINT(3)=IDOC-6
07692       IF(IDOC.GE.9.AND.ISET(ISUB).LE.4) IDOC=IDOC+2
07693       MINT(4)=IDOC
07694       IPU1=MINT(84)+1
07695       IPU2=MINT(84)+2
07696       IPU3=MINT(84)+3
07697       IPU4=MINT(84)+4
07698       IPU5=MINT(84)+5
07699       IPU6=MINT(84)+6
07700  
07701 C...Reset K, P and V vectors. Store incoming particles
07702       DO 120 JT=1,MSTP(126)+20
07703         I=MINT(83)+JT
07704         DO 110 J=1,5
07705           K(I,J)=0
07706           P(I,J)=0D0
07707           V(I,J)=0D0
07708   110   CONTINUE
07709   120 CONTINUE
07710       DO 140 JT=1,2
07711         I=MINT(83)+JT
07712         K(I,1)=21
07713         K(I,2)=MINT(10+JT)
07714         DO 130 J=1,5
07715           P(I,J)=VINT(285+5*JT+J)
07716   130   CONTINUE
07717   140 CONTINUE
07718       MINT(6)=2
07719       KFRES=0
07720  
07721 C...Store incoming partons in their CM-frame
07722       SH=VINT(44)
07723       SHR=SQRT(SH)
07724       SHP=VINT(26)*VINT(2)
07725       SHPR=SQRT(SHP)
07726       SHUSER=SHR
07727       IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) SHUSER=SHPR
07728       DO 150 JT=1,2
07729         I=MINT(84)+JT
07730         K(I,1)=14
07731         K(I,2)=MINT(14+JT)
07732         K(I,3)=MINT(83)+2+JT
07733         P(I,3)=0.5D0*SHUSER*(-1D0)**(JT-1)
07734         P(I,4)=0.5D0*SHUSER
07735   150 CONTINUE
07736  
07737 C...Copy incoming partons to documentation lines
07738       DO 170 JT=1,2
07739         I1=MINT(83)+4+JT
07740         I2=MINT(84)+JT
07741         K(I1,1)=21
07742         K(I1,2)=K(I2,2)
07743         K(I1,3)=I1-2
07744         DO 160 J=1,5
07745           P(I1,J)=P(I2,J)
07746   160   CONTINUE
07747   170 CONTINUE
07748  
07749 C...Choose new quark/lepton flavour for relevant annihilation graphs
07750       IF(ISUB.EQ.12.OR.ISUB.EQ.53.OR.ISUB.EQ.54.OR.ISUB.EQ.58.OR.
07751      &(ISUB.GE.135.AND.ISUB.LE.140)) THEN
07752         IGLGA=21
07753         IF(ISUB.EQ.58.OR.(ISUB.GE.137.AND.ISUB.LE.140)) IGLGA=22
07754         CALL PYWIDT(IGLGA,SH,WDTP,WDTE)
07755   180   RKFL=(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))*PYR(0)
07756         DO 190 I=1,MDCY(IGLGA,3)
07757           KFLF=KFDP(I+MDCY(IGLGA,2)-1,1)
07758           RKFL=RKFL-(WDTE(I,1)+WDTE(I,2)+WDTE(I,4))
07759           IF(RKFL.LE.0D0) GOTO 200
07760   190   CONTINUE
07761   200   CONTINUE
07762         IF(ISUB.EQ.12.AND.MSTP(5).EQ.1.AND.IABS(MINT(15)).LE.2.AND.
07763      &  IABS(KFLF).GE.3) THEN
07764           FACQQB=VINT(58)**2*4D0/9D0*(VINT(45)**2+VINT(46)**2)/
07765      &    VINT(44)**2
07766           FACCIB=VINT(46)**2/PARU(155)**4
07767           IF(FACQQB/(FACQQB+FACCIB).LT.PYR(0)) GOTO 180
07768         ELSEIF(ISUB.EQ.54.OR.ISUB.EQ.135.OR.ISUB.EQ.136) THEN
07769           IF((KCHG(PYCOMP(KFLF),1)/2D0)**2.LT.PYR(0)) GOTO 180
07770         ELSEIF(ISUB.EQ.58.OR.(ISUB.GE.137.AND.ISUB.LE.140)) THEN
07771           IF((KCHG(PYCOMP(KFLF),1)/3D0)**2.LT.PYR(0)) GOTO 180
07772         ENDIF
07773       ENDIF
07774  
07775 C...Final state flavours and colour flow: default values
07776       JS=1
07777       MINT(21)=MINT(15)
07778       MINT(22)=MINT(16)
07779       MINT(23)=0
07780       MINT(24)=0
07781       KCC=20
07782       KCS=ISIGN(1,MINT(15))
07783  
07784       IF(ISET(ISUB).EQ.11) THEN
07785 C...User-defined processes: find products
07786         IRUP=0
07787         DO 210 IUP=3,NUP
07788           IF(KUP(IUP,1).NE.1) THEN
07789           ELSEIF(IRUP.LE.5) THEN
07790             IRUP=IRUP+1
07791             MINT(20+IRUP)=KUP(IUP,2)
07792           ENDIF
07793   210   CONTINUE
07794  
07795       ELSEIF(ISUB.LE.10) THEN
07796         IF(ISUB.EQ.1) THEN
07797 C...f + fbar -> gamma*/Z0
07798           KFRES=23
07799  
07800         ELSEIF(ISUB.EQ.2) THEN
07801 C...f + fbar' -> W+/-
07802           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
07803           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
07804           KFRES=ISIGN(24,KCH1+KCH2)
07805  
07806         ELSEIF(ISUB.EQ.3) THEN
07807 C...f + fbar -> h0 (or H0, or A0)
07808           KFRES=KFHIGG
07809  
07810         ELSEIF(ISUB.EQ.4) THEN
07811 C...gamma + W+/- -> W+/-
07812  
07813         ELSEIF(ISUB.EQ.5) THEN
07814 C...Z0 + Z0 -> h0
07815           XH=SH/SHP
07816           MINT(21)=MINT(15)
07817           MINT(22)=MINT(16)
07818           PMQ(1)=PYMASS(MINT(21))
07819           PMQ(2)=PYMASS(MINT(22))
07820   220     JT=INT(1.5D0+PYR(0))
07821           ZMIN=2D0*PMQ(JT)/SHPR
07822           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
07823      &    (SHPR*(SHPR-PMQ(3-JT)))
07824           ZMAX=MIN(1D0-XH,ZMAX)
07825           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
07826           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
07827      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 220
07828           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
07829           IF(SQC1.LT.1D-8) GOTO 220
07830           C1=SQRT(SQC1)
07831           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
07832           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
07833           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
07834           Z(3-JT)=1D0-XH/(1D0-Z(JT))
07835           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
07836           IF(SQC1.LT.1D-8) GOTO 220
07837           C1=SQRT(SQC1)
07838           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
07839           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
07840           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
07841           PHIR=PARU(2)*PYR(0)
07842           CPHI=COS(PHIR)
07843           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
07844      &    SQRT(1D0-CTHE(2)**2)*CPHI
07845           Z1=2D0-Z(JT)
07846           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
07847           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
07848           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
07849      &    PMQ(3-JT)**2/SHP))
07850           ZMIN=2D0*PMQ(3-JT)/SHPR
07851           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
07852           ZMAX=MIN(1D0-XH,ZMAX)
07853           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 220
07854           KCC=22
07855           KFRES=25
07856  
07857         ELSEIF(ISUB.EQ.6) THEN
07858 C...Z0 + W+/- -> W+/-
07859  
07860         ELSEIF(ISUB.EQ.7) THEN
07861 C...W+ + W- -> Z0
07862  
07863         ELSEIF(ISUB.EQ.8) THEN
07864 C...W+ + W- -> h0
07865           XH=SH/SHP
07866   230     DO 260 JT=1,2
07867             I=MINT(14+JT)
07868             IA=IABS(I)
07869             IF(IA.LE.10) THEN
07870               RVCKM=VINT(180+I)*PYR(0)
07871               DO 240 J=1,MSTP(1)
07872                 IB=2*J-1+MOD(IA,2)
07873                 IPM=(5-ISIGN(1,I))/2
07874                 IDC=J+MDCY(IA,2)+2
07875                 IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 240
07876                 MINT(20+JT)=ISIGN(IB,I)
07877                 RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
07878                 IF(RVCKM.LE.0D0) GOTO 250
07879   240         CONTINUE
07880             ELSE
07881               IB=2*((IA+1)/2)-1+MOD(IA,2)
07882               MINT(20+JT)=ISIGN(IB,I)
07883             ENDIF
07884   250       PMQ(JT)=PYMASS(MINT(20+JT))
07885   260     CONTINUE
07886           JT=INT(1.5D0+PYR(0))
07887           ZMIN=2D0*PMQ(JT)/SHPR
07888           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
07889      &    (SHPR*(SHPR-PMQ(3-JT)))
07890           ZMAX=MIN(1D0-XH,ZMAX)
07891           IF(ZMIN.GE.ZMAX) GOTO 230
07892           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
07893           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
07894      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 230
07895           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
07896           IF(SQC1.LT.1D-8) GOTO 230
07897           C1=SQRT(SQC1)
07898           C2=1D0+2D0*(PMAS(24,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
07899           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
07900           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
07901           Z(3-JT)=1D0-XH/(1D0-Z(JT))
07902           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
07903           IF(SQC1.LT.1D-8) GOTO 230
07904           C1=SQRT(SQC1)
07905           C2=1D0+2D0*(PMAS(24,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
07906           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
07907           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
07908           PHIR=PARU(2)*PYR(0)
07909           CPHI=COS(PHIR)
07910           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
07911      &    SQRT(1D0-CTHE(2)**2)*CPHI
07912           Z1=2D0-Z(JT)
07913           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
07914           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
07915           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
07916      &    PMQ(3-JT)**2/SHP))
07917           ZMIN=2D0*PMQ(3-JT)/SHPR
07918           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
07919           ZMAX=MIN(1D0-XH,ZMAX)
07920           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 230
07921           KCC=22
07922           KFRES=25
07923  
07924         ELSEIF(ISUB.EQ.10) THEN
07925 C...f + f' -> f + f' (gamma/Z/W exchange); th = (p(f)-p(f))**2
07926           IF(MINT(2).EQ.1) THEN
07927             KCC=22
07928           ELSE
07929 C...W exchange: need to mix flavours according to CKM matrix
07930             DO 280 JT=1,2
07931               I=MINT(14+JT)
07932               IA=IABS(I)
07933               IF(IA.LE.10) THEN
07934                 RVCKM=VINT(180+I)*PYR(0)
07935                 DO 270 J=1,MSTP(1)
07936                   IB=2*J-1+MOD(IA,2)
07937                   IPM=(5-ISIGN(1,I))/2
07938                   IDC=J+MDCY(IA,2)+2
07939                   IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 270
07940                   MINT(20+JT)=ISIGN(IB,I)
07941                   RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
07942                   IF(RVCKM.LE.0D0) GOTO 280
07943   270           CONTINUE
07944               ELSE
07945                 IB=2*((IA+1)/2)-1+MOD(IA,2)
07946                 MINT(20+JT)=ISIGN(IB,I)
07947               ENDIF
07948   280       CONTINUE
07949             KCC=22
07950           ENDIF
07951         ENDIF
07952  
07953       ELSEIF(ISUB.LE.20) THEN
07954         IF(ISUB.EQ.11) THEN
07955 C...f + f' -> f + f' (g exchange); th = (p(f)-p(f))**2
07956           KCC=MINT(2)
07957           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
07958  
07959         ELSEIF(ISUB.EQ.12) THEN
07960 C...f + fbar -> f' + fbar'; th = (p(f)-p(f'))**2
07961           MINT(21)=ISIGN(KFLF,MINT(15))
07962           MINT(22)=-MINT(21)
07963           KCC=4
07964  
07965         ELSEIF(ISUB.EQ.13) THEN
07966 C...f + fbar -> g + g; th arbitrary
07967           MINT(21)=21
07968           MINT(22)=21
07969           KCC=MINT(2)+4
07970  
07971         ELSEIF(ISUB.EQ.14) THEN
07972 C...f + fbar -> g + gamma; th arbitrary
07973           IF(PYR(0).GT.0.5D0) JS=2
07974           MINT(20+JS)=21
07975           MINT(23-JS)=22
07976           KCC=17+JS
07977  
07978         ELSEIF(ISUB.EQ.15) THEN
07979 C...f + fbar -> g + Z0; th arbitrary
07980           IF(PYR(0).GT.0.5D0) JS=2
07981           MINT(20+JS)=21
07982           MINT(23-JS)=23
07983           KCC=17+JS
07984  
07985         ELSEIF(ISUB.EQ.16) THEN
07986 C...f + fbar' -> g + W+/-; th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
07987           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
07988           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
07989           IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
07990           MINT(20+JS)=21
07991           MINT(23-JS)=ISIGN(24,KCH1+KCH2)
07992           KCC=17+JS
07993  
07994         ELSEIF(ISUB.EQ.17) THEN
07995 C...f + fbar -> g + h0; th arbitrary
07996           IF(PYR(0).GT.0.5D0) JS=2
07997           MINT(20+JS)=21
07998           MINT(23-JS)=25
07999           KCC=17+JS
08000  
08001         ELSEIF(ISUB.EQ.18) THEN
08002 C...f + fbar -> gamma + gamma; th arbitrary
08003           MINT(21)=22
08004           MINT(22)=22
08005  
08006         ELSEIF(ISUB.EQ.19) THEN
08007 C...f + fbar -> gamma + Z0; th arbitrary
08008           IF(PYR(0).GT.0.5D0) JS=2
08009           MINT(20+JS)=22
08010           MINT(23-JS)=23
08011  
08012         ELSEIF(ISUB.EQ.20) THEN
08013 C...f + fbar' -> gamma + W+/-; th = (p(f)-p(W-))**2 or
08014 C...(p(fbar')-p(W+))**2
08015           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08016           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08017           IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
08018           MINT(20+JS)=22
08019           MINT(23-JS)=ISIGN(24,KCH1+KCH2)
08020         ENDIF
08021  
08022       ELSEIF(ISUB.LE.30) THEN
08023         IF(ISUB.EQ.21) THEN
08024 C...f + fbar -> gamma + h0; th arbitrary
08025           IF(PYR(0).GT.0.5D0) JS=2
08026           MINT(20+JS)=22
08027           MINT(23-JS)=25
08028  
08029         ELSEIF(ISUB.EQ.22) THEN
08030 C...f + fbar -> Z0 + Z0; th arbitrary
08031           MINT(21)=23
08032           MINT(22)=23
08033  
08034         ELSEIF(ISUB.EQ.23) THEN
08035 C...f + fbar' -> Z0 + W+/-; th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
08036           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08037           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08038           IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
08039           MINT(20+JS)=23
08040           MINT(23-JS)=ISIGN(24,KCH1+KCH2)
08041  
08042         ELSEIF(ISUB.EQ.24) THEN
08043 C...f + fbar -> Z0 + h0 (or H0, or A0); th arbitrary
08044           IF(PYR(0).GT.0.5D0) JS=2
08045           MINT(20+JS)=23
08046           MINT(23-JS)=KFHIGG
08047  
08048         ELSEIF(ISUB.EQ.25) THEN
08049 C...f + fbar -> W+ + W-; th = (p(f)-p(W-))**2
08050           MINT(21)=-ISIGN(24,MINT(15))
08051           MINT(22)=-MINT(21)
08052  
08053         ELSEIF(ISUB.EQ.26) THEN
08054 C...f + fbar' -> W+/- + h0 (or H0, or A0);
08055 C...th = (p(f)-p(W-))**2 or (p(fbar')-p(W+))**2
08056           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08057           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08058           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
08059           MINT(20+JS)=ISIGN(24,KCH1+KCH2)
08060           MINT(23-JS)=KFHIGG
08061  
08062         ELSEIF(ISUB.EQ.27) THEN
08063 C...f + fbar -> h0 + h0
08064  
08065         ELSEIF(ISUB.EQ.28) THEN
08066 C...f + g -> f + g; th = (p(f)-p(f))**2
08067           KCC=MINT(2)+6
08068           IF(MINT(15).EQ.21) KCC=KCC+2
08069           IF(MINT(15).NE.21) KCS=ISIGN(1,MINT(15))
08070           IF(MINT(16).NE.21) KCS=ISIGN(1,MINT(16))
08071  
08072         ELSEIF(ISUB.EQ.29) THEN
08073 C...f + g -> f + gamma; th = (p(f)-p(f))**2
08074           IF(MINT(15).EQ.21) JS=2
08075           MINT(23-JS)=22
08076           KCC=15+JS
08077           KCS=ISIGN(1,MINT(14+JS))
08078  
08079         ELSEIF(ISUB.EQ.30) THEN
08080 C...f + g -> f + Z0; th = (p(f)-p(f))**2
08081           IF(MINT(15).EQ.21) JS=2
08082           MINT(23-JS)=23
08083           KCC=15+JS
08084           KCS=ISIGN(1,MINT(14+JS))
08085         ENDIF
08086  
08087       ELSEIF(ISUB.LE.40) THEN
08088         IF(ISUB.EQ.31) THEN
08089 C...f + g -> f' + W+/-; th = (p(f)-p(f'))**2; choose flavour f'
08090           IF(MINT(15).EQ.21) JS=2
08091           I=MINT(14+JS)
08092           IA=IABS(I)
08093           MINT(23-JS)=ISIGN(24,KCHG(IA,1)*I)
08094           RVCKM=VINT(180+I)*PYR(0)
08095           DO 290 J=1,MSTP(1)
08096             IB=2*J-1+MOD(IA,2)
08097             IPM=(5-ISIGN(1,I))/2
08098             IDC=J+MDCY(IA,2)+2
08099             IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 290
08100             MINT(20+JS)=ISIGN(IB,I)
08101             RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
08102             IF(RVCKM.LE.0D0) GOTO 300
08103   290     CONTINUE
08104   300     KCC=15+JS
08105           KCS=ISIGN(1,MINT(14+JS))
08106  
08107         ELSEIF(ISUB.EQ.32) THEN
08108 C...f + g -> f + h0; th = (p(f)-p(f))**2
08109           IF(MINT(15).EQ.21) JS=2
08110           MINT(23-JS)=25
08111           KCC=15+JS
08112           KCS=ISIGN(1,MINT(14+JS))
08113  
08114         ELSEIF(ISUB.EQ.33) THEN
08115 C...f + gamma -> f + g; th=(p(f)-p(f))**2
08116           IF(MINT(15).EQ.22) JS=2
08117           MINT(23-JS)=21
08118           KCC=24+JS
08119           KCS=ISIGN(1,MINT(14+JS))
08120  
08121         ELSEIF(ISUB.EQ.34) THEN
08122 C...f + gamma -> f + gamma; th=(p(f)-p(f))**2
08123           IF(MINT(15).EQ.22) JS=2
08124           KCC=22
08125           KCS=ISIGN(1,MINT(14+JS))
08126  
08127         ELSEIF(ISUB.EQ.35) THEN
08128 C...f + gamma -> f + Z0; th=(p(f)-p(f))**2
08129           IF(MINT(15).EQ.22) JS=2
08130           MINT(23-JS)=23
08131           KCC=22
08132  
08133         ELSEIF(ISUB.EQ.36) THEN
08134 C...f + gamma -> f' + W+/-; th=(p(f)-p(f'))**2
08135           IF(MINT(15).EQ.22) JS=2
08136           I=MINT(14+JS)
08137           IA=IABS(I)
08138           MINT(23-JS)=ISIGN(24,KCHG(IA,1)*I)
08139           IF(IA.LE.10) THEN
08140             RVCKM=VINT(180+I)*PYR(0)
08141             DO 310 J=1,MSTP(1)
08142               IB=2*J-1+MOD(IA,2)
08143               IPM=(5-ISIGN(1,I))/2
08144               IDC=J+MDCY(IA,2)+2
08145               IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 310
08146               MINT(20+JS)=ISIGN(IB,I)
08147               RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
08148               IF(RVCKM.LE.0D0) GOTO 320
08149   310       CONTINUE
08150           ELSE
08151             IB=2*((IA+1)/2)-1+MOD(IA,2)
08152             MINT(20+JS)=ISIGN(IB,I)
08153           ENDIF
08154   320     KCC=22
08155  
08156         ELSEIF(ISUB.EQ.37) THEN
08157 C...f + gamma -> f + h0
08158  
08159         ELSEIF(ISUB.EQ.38) THEN
08160 C...f + Z0 -> f + g
08161  
08162         ELSEIF(ISUB.EQ.39) THEN
08163 C...f + Z0 -> f + gamma
08164  
08165         ELSEIF(ISUB.EQ.40) THEN
08166 C...f + Z0 -> f + Z0
08167         ENDIF
08168  
08169       ELSEIF(ISUB.LE.50) THEN
08170         IF(ISUB.EQ.41) THEN
08171 C...f + Z0 -> f' + W+/-
08172  
08173         ELSEIF(ISUB.EQ.42) THEN
08174 C...f + Z0 -> f + h0
08175  
08176         ELSEIF(ISUB.EQ.43) THEN
08177 C...f + W+/- -> f' + g
08178  
08179         ELSEIF(ISUB.EQ.44) THEN
08180 C...f + W+/- -> f' + gamma
08181  
08182         ELSEIF(ISUB.EQ.45) THEN
08183 C...f + W+/- -> f' + Z0
08184  
08185         ELSEIF(ISUB.EQ.46) THEN
08186 C...f + W+/- -> f' + W+/-
08187  
08188         ELSEIF(ISUB.EQ.47) THEN
08189 C...f + W+/- -> f' + h0
08190  
08191         ELSEIF(ISUB.EQ.48) THEN
08192 C...f + h0 -> f + g
08193  
08194         ELSEIF(ISUB.EQ.49) THEN
08195 C...f + h0 -> f + gamma
08196  
08197         ELSEIF(ISUB.EQ.50) THEN
08198 C...f + h0 -> f + Z0
08199         ENDIF
08200  
08201       ELSEIF(ISUB.LE.60) THEN
08202         IF(ISUB.EQ.51) THEN
08203 C...f + h0 -> f' + W+/-
08204  
08205         ELSEIF(ISUB.EQ.52) THEN
08206 C...f + h0 -> f + h0
08207  
08208         ELSEIF(ISUB.EQ.53) THEN
08209 C...g + g -> f + fbar; th arbitrary
08210           KCS=(-1)**INT(1.5D0+PYR(0))
08211           MINT(21)=ISIGN(KFLF,KCS)
08212           MINT(22)=-MINT(21)
08213           KCC=MINT(2)+10
08214  
08215         ELSEIF(ISUB.EQ.54) THEN
08216 C...g + gamma -> f + fbar; th arbitrary
08217           KCS=(-1)**INT(1.5D0+PYR(0))
08218           MINT(21)=ISIGN(KFLF,KCS)
08219           MINT(22)=-MINT(21)
08220           KCC=27
08221           IF(MINT(16).EQ.21) KCC=28
08222  
08223         ELSEIF(ISUB.EQ.55) THEN
08224 C...g + Z0 -> f + fbar
08225  
08226         ELSEIF(ISUB.EQ.56) THEN
08227 C...g + W+/- -> f + fbar'
08228  
08229         ELSEIF(ISUB.EQ.57) THEN
08230 C...g + h0 -> f + fbar
08231  
08232         ELSEIF(ISUB.EQ.58) THEN
08233 C...gamma + gamma -> f + fbar; th arbitrary
08234           KCS=(-1)**INT(1.5D0+PYR(0))
08235           MINT(21)=ISIGN(KFLF,KCS)
08236           MINT(22)=-MINT(21)
08237           KCC=21
08238  
08239         ELSEIF(ISUB.EQ.59) THEN
08240 C...gamma + Z0 -> f + fbar
08241  
08242         ELSEIF(ISUB.EQ.60) THEN
08243 C...gamma + W+/- -> f + fbar'
08244         ENDIF
08245  
08246       ELSEIF(ISUB.LE.70) THEN
08247         IF(ISUB.EQ.61) THEN
08248 C...gamma + h0 -> f + fbar
08249  
08250         ELSEIF(ISUB.EQ.62) THEN
08251 C...Z0 + Z0 -> f + fbar
08252  
08253         ELSEIF(ISUB.EQ.63) THEN
08254 C...Z0 + W+/- -> f + fbar'
08255  
08256         ELSEIF(ISUB.EQ.64) THEN
08257 C...Z0 + h0 -> f + fbar
08258  
08259         ELSEIF(ISUB.EQ.65) THEN
08260 C...W+ + W- -> f + fbar
08261  
08262         ELSEIF(ISUB.EQ.66) THEN
08263 C...W+/- + h0 -> f + fbar'
08264  
08265         ELSEIF(ISUB.EQ.67) THEN
08266 C...h0 + h0 -> f + fbar
08267  
08268         ELSEIF(ISUB.EQ.68) THEN
08269 C...g + g -> g + g; th arbitrary
08270           KCC=MINT(2)+12
08271           KCS=(-1)**INT(1.5D0+PYR(0))
08272  
08273         ELSEIF(ISUB.EQ.69) THEN
08274 C...gamma + gamma -> W+ + W-; th arbitrary
08275           MINT(21)=24
08276           MINT(22)=-24
08277           KCC=21
08278  
08279         ELSEIF(ISUB.EQ.70) THEN
08280 C...gamma + W+/- -> Z0 + W+/-; th=(p(W)-p(W))**2
08281           IF(MINT(15).EQ.22) MINT(21)=23
08282           IF(MINT(16).EQ.22) MINT(22)=23
08283           KCC=21
08284         ENDIF
08285  
08286       ELSEIF(ISUB.LE.80) THEN
08287         IF(ISUB.EQ.71.OR.ISUB.EQ.72) THEN
08288 C...Z0 + Z0 -> Z0 + Z0; Z0 + Z0 -> W+ + W-
08289           XH=SH/SHP
08290           MINT(21)=MINT(15)
08291           MINT(22)=MINT(16)
08292           PMQ(1)=PYMASS(MINT(21))
08293           PMQ(2)=PYMASS(MINT(22))
08294   330     JT=INT(1.5D0+PYR(0))
08295           ZMIN=2D0*PMQ(JT)/SHPR
08296           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
08297      &    (SHPR*(SHPR-PMQ(3-JT)))
08298           ZMAX=MIN(1D0-XH,ZMAX)
08299           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
08300           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
08301      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 330
08302           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
08303           IF(SQC1.LT.1D-8) GOTO 330
08304           C1=SQRT(SQC1)
08305           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
08306           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
08307           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
08308           Z(3-JT)=1D0-XH/(1D0-Z(JT))
08309           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
08310           IF(SQC1.LT.1D-8) GOTO 330
08311           C1=SQRT(SQC1)
08312           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
08313           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
08314           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
08315           PHIR=PARU(2)*PYR(0)
08316           CPHI=COS(PHIR)
08317           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
08318      &    SQRT(1D0-CTHE(2)**2)*CPHI
08319           Z1=2D0-Z(JT)
08320           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
08321           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
08322           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
08323      &    PMQ(3-JT)**2/SHP))
08324           ZMIN=2D0*PMQ(3-JT)/SHPR
08325           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
08326           ZMAX=MIN(1D0-XH,ZMAX)
08327           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 330
08328           KCC=22
08329  
08330         ELSEIF(ISUB.EQ.73) THEN
08331 C...Z0 + W+/- -> Z0 + W+/-
08332           JS=MINT(2)
08333           XH=SH/SHP
08334   340     JT=3-MINT(2)
08335           I=MINT(14+JT)
08336           IA=IABS(I)
08337           IF(IA.LE.10) THEN
08338             RVCKM=VINT(180+I)*PYR(0)
08339             DO 350 J=1,MSTP(1)
08340               IB=2*J-1+MOD(IA,2)
08341               IPM=(5-ISIGN(1,I))/2
08342               IDC=J+MDCY(IA,2)+2
08343               IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 350
08344               MINT(20+JT)=ISIGN(IB,I)
08345               RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
08346               IF(RVCKM.LE.0D0) GOTO 360
08347   350       CONTINUE
08348           ELSE
08349             IB=2*((IA+1)/2)-1+MOD(IA,2)
08350             MINT(20+JT)=ISIGN(IB,I)
08351           ENDIF
08352   360     PMQ(JT)=PYMASS(MINT(20+JT))
08353           MINT(23-JT)=MINT(17-JT)
08354           PMQ(3-JT)=PYMASS(MINT(23-JT))
08355           JT=INT(1.5D0+PYR(0))
08356           ZMIN=2D0*PMQ(JT)/SHPR
08357           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
08358      &    (SHPR*(SHPR-PMQ(3-JT)))
08359           ZMAX=MIN(1D0-XH,ZMAX)
08360           IF(ZMIN.GE.ZMAX) GOTO 340
08361           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
08362           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
08363      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 340
08364           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
08365           IF(SQC1.LT.1D-8) GOTO 340
08366           C1=SQRT(SQC1)
08367           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
08368           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
08369           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
08370           Z(3-JT)=1D0-XH/(1D0-Z(JT))
08371           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
08372           IF(SQC1.LT.1D-8) GOTO 340
08373           C1=SQRT(SQC1)
08374           C2=1D0+2D0*(PMAS(23,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
08375           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
08376           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
08377           PHIR=PARU(2)*PYR(0)
08378           CPHI=COS(PHIR)
08379           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
08380      &    SQRT(1D0-CTHE(2)**2)*CPHI
08381           Z1=2D0-Z(JT)
08382           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
08383           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
08384           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
08385      &    PMQ(3-JT)**2/SHP))
08386           ZMIN=2D0*PMQ(3-JT)/SHPR
08387           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
08388           ZMAX=MIN(1D0-XH,ZMAX)
08389           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 340
08390           KCC=22
08391  
08392         ELSEIF(ISUB.EQ.74) THEN
08393 C...Z0 + h0 -> Z0 + h0
08394  
08395         ELSEIF(ISUB.EQ.75) THEN
08396 C...W+ + W- -> gamma + gamma
08397  
08398         ELSEIF(ISUB.EQ.76.OR.ISUB.EQ.77) THEN
08399 C...W+ + W- -> Z0 + Z0; W+ + W- -> W+ + W-
08400           XH=SH/SHP
08401   370     DO 400 JT=1,2
08402             I=MINT(14+JT)
08403             IA=IABS(I)
08404             IF(IA.LE.10) THEN
08405               RVCKM=VINT(180+I)*PYR(0)
08406               DO 380 J=1,MSTP(1)
08407                 IB=2*J-1+MOD(IA,2)
08408                 IPM=(5-ISIGN(1,I))/2
08409                 IDC=J+MDCY(IA,2)+2
08410                 IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 380
08411                 MINT(20+JT)=ISIGN(IB,I)
08412                 RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
08413                 IF(RVCKM.LE.0D0) GOTO 390
08414   380         CONTINUE
08415             ELSE
08416               IB=2*((IA+1)/2)-1+MOD(IA,2)
08417               MINT(20+JT)=ISIGN(IB,I)
08418             ENDIF
08419   390       PMQ(JT)=PYMASS(MINT(20+JT))
08420   400     CONTINUE
08421           JT=INT(1.5D0+PYR(0))
08422           ZMIN=2D0*PMQ(JT)/SHPR
08423           ZMAX=1D0-PMQ(3-JT)/SHPR-(SH-PMQ(JT)**2)/
08424      &    (SHPR*(SHPR-PMQ(3-JT)))
08425           ZMAX=MIN(1D0-XH,ZMAX)
08426           IF(ZMIN.GE.ZMAX) GOTO 370
08427           Z(JT)=ZMIN+(ZMAX-ZMIN)*PYR(0)
08428           IF(-1D0+(1D0+XH)/(1D0-Z(JT))-XH/(1D0-Z(JT))**2.LT.
08429      &    (1D0-XH)**2/(4D0*XH)*PYR(0)) GOTO 370
08430           SQC1=1D0-4D0*PMQ(JT)**2/(Z(JT)**2*SHP)
08431           IF(SQC1.LT.1D-8) GOTO 370
08432           C1=SQRT(SQC1)
08433           C2=1D0+2D0*(PMAS(24,1)**2-PMQ(JT)**2)/(Z(JT)*SHP)
08434           CTHE(JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
08435           CTHE(JT)=MIN(1D0,MAX(-1D0,CTHE(JT)))
08436           Z(3-JT)=1D0-XH/(1D0-Z(JT))
08437           SQC1=1D0-4D0*PMQ(3-JT)**2/(Z(3-JT)**2*SHP)
08438           IF(SQC1.LT.1D-8) GOTO 370
08439           C1=SQRT(SQC1)
08440           C2=1D0+2D0*(PMAS(24,1)**2-PMQ(3-JT)**2)/(Z(3-JT)*SHP)
08441           CTHE(3-JT)=(C2-(C2**2-C1**2)/(C2+(2D0*PYR(0)-1D0)*C1))/C1
08442           CTHE(3-JT)=MIN(1D0,MAX(-1D0,CTHE(3-JT)))
08443           PHIR=PARU(2)*PYR(0)
08444           CPHI=COS(PHIR)
08445           ANG=CTHE(1)*CTHE(2)-SQRT(1D0-CTHE(1)**2)*
08446      &    SQRT(1D0-CTHE(2)**2)*CPHI
08447           Z1=2D0-Z(JT)
08448           Z2=ANG*SQRT(Z(JT)**2-4D0*PMQ(JT)**2/SHP)
08449           Z3=1D0-Z(JT)-XH+(PMQ(1)**2+PMQ(2)**2)/SHP
08450           Z(3-JT)=2D0/(Z1**2-Z2**2)*(Z1*Z3+Z2*SQRT(Z3**2-(Z1**2-Z2**2)*
08451      &    PMQ(3-JT)**2/SHP))
08452           ZMIN=2D0*PMQ(3-JT)/SHPR
08453           ZMAX=1D0-PMQ(JT)/SHPR-(SH-PMQ(3-JT)**2)/(SHPR*(SHPR-PMQ(JT)))
08454           ZMAX=MIN(1D0-XH,ZMAX)
08455           IF(Z(3-JT).LT.ZMIN.OR.Z(3-JT).GT.ZMAX) GOTO 370
08456           KCC=22
08457  
08458         ELSEIF(ISUB.EQ.78) THEN
08459 C...W+/- + h0 -> W+/- + h0
08460  
08461         ELSEIF(ISUB.EQ.79) THEN
08462 C...h0 + h0 -> h0 + h0
08463  
08464         ELSEIF(ISUB.EQ.80) THEN
08465 C...q + gamma -> q' + pi+/-; th=(p(q)-p(q'))**2
08466           IF(MINT(15).EQ.22) JS=2
08467           I=MINT(14+JS)
08468           IA=IABS(I)
08469           MINT(23-JS)=ISIGN(211,KCHG(IA,1)*I)
08470           IB=3-IA
08471           MINT(20+JS)=ISIGN(IB,I)
08472           KCC=22
08473         ENDIF
08474  
08475       ELSEIF(ISUB.LE.90) THEN
08476         IF(ISUB.EQ.81) THEN
08477 C...q + qbar -> Q + Qbar; th = (p(q)-p(Q))**2
08478           MINT(21)=ISIGN(MINT(55),MINT(15))
08479           MINT(22)=-MINT(21)
08480           KCC=4
08481  
08482         ELSEIF(ISUB.EQ.82) THEN
08483 C...g + g -> Q + Qbar; th arbitrary
08484           KCS=(-1)**INT(1.5D0+PYR(0))
08485           MINT(21)=ISIGN(MINT(55),KCS)
08486           MINT(22)=-MINT(21)
08487           KCC=MINT(2)+10
08488  
08489         ELSEIF(ISUB.EQ.83) THEN
08490 C...f + q -> f' + Q; th = (p(f) - p(f'))**2
08491           KFOLD=MINT(16)
08492           IF(MINT(2).EQ.2) KFOLD=MINT(15)
08493           KFAOLD=IABS(KFOLD)
08494           IF(KFAOLD.GT.10) THEN
08495             KFANEW=KFAOLD+2*MOD(KFAOLD,2)-1
08496           ELSE
08497             RCKM=VINT(180+KFOLD)*PYR(0)
08498             IPM=(5-ISIGN(1,KFOLD))/2
08499             KFANEW=-MOD(KFAOLD+1,2)
08500   410       KFANEW=KFANEW+2
08501             IDC=MDCY(KFAOLD,2)+(KFANEW+1)/2+2
08502             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.IPM) THEN
08503               IF(MOD(KFAOLD,2).EQ.0) RCKM=RCKM-
08504      &        VCKM(KFAOLD/2,(KFANEW+1)/2)
08505               IF(MOD(KFAOLD,2).EQ.1) RCKM=RCKM-
08506      &        VCKM(KFANEW/2,(KFAOLD+1)/2)
08507             ENDIF
08508             IF(KFANEW.LE.6.AND.RCKM.GT.0D0) GOTO 410
08509           ENDIF
08510           IF(MINT(2).EQ.1) THEN
08511             MINT(21)=ISIGN(MINT(55),MINT(15))
08512             MINT(22)=ISIGN(KFANEW,MINT(16))
08513           ELSE
08514             MINT(21)=ISIGN(KFANEW,MINT(15))
08515             MINT(22)=ISIGN(MINT(55),MINT(16))
08516             JS=2
08517           ENDIF
08518           KCC=22
08519  
08520         ELSEIF(ISUB.EQ.84) THEN
08521 C...g + gamma -> Q + Qbar; th arbitary
08522           KCS=(-1)**INT(1.5D0+PYR(0))
08523           MINT(21)=ISIGN(MINT(55),KCS)
08524           MINT(22)=-MINT(21)
08525           KCC=27
08526           IF(MINT(16).EQ.21) KCC=28
08527  
08528         ELSEIF(ISUB.EQ.85) THEN
08529 C...gamma + gamma -> F + Fbar; th arbitary
08530           KCS=(-1)**INT(1.5D0+PYR(0))
08531           MINT(21)=ISIGN(MINT(56),KCS)
08532           MINT(22)=-MINT(21)
08533           KCC=21
08534  
08535         ELSEIF(ISUB.GE.86.AND.ISUB.LE.89) THEN
08536 C...g + g -> (J/Psi, chi_0c, chi_1c or chi_2c) + g
08537           MINT(21)=KFPR(ISUB,1)
08538           MINT(22)=KFPR(ISUB,2)
08539           KCC=24
08540           KCS=(-1)**INT(1.5D0+PYR(0))
08541         ENDIF
08542  
08543       ELSEIF(ISUB.LE.100) THEN
08544         IF(ISUB.EQ.95) THEN
08545 C...Low-pT ( = energyless g + g -> g + g)
08546           KCC=MINT(2)+12
08547           KCS=(-1)**INT(1.5D0+PYR(0))
08548  
08549         ELSEIF(ISUB.EQ.96) THEN
08550 C...Multiple interactions (should be reassigned to QCD process)
08551         ENDIF
08552  
08553       ELSEIF(ISUB.LE.110) THEN
08554         IF(ISUB.EQ.101) THEN
08555 C...g + g -> gamma*/Z0
08556           KCC=21
08557           KFRES=22
08558  
08559         ELSEIF(ISUB.EQ.102) THEN
08560 C...g + g -> h0 (or H0, or A0)
08561           KCC=21
08562           KFRES=KFHIGG
08563  
08564         ELSEIF(ISUB.EQ.103) THEN
08565 C...gamma + gamma -> h0 (or H0, or A0)
08566           KCC=21
08567           KFRES=KFHIGG
08568  
08569         ELSEIF(ISUB.EQ.104.OR.ISUB.EQ.105) THEN
08570 C...g + g -> chi_0c or chi_2c.
08571           KCC=21
08572           KFRES=KFPR(ISUB,1)
08573  
08574         ELSEIF(ISUB.EQ.106) THEN
08575 C...g + g -> J/Psi + gamma
08576           MINT(21)=KFPR(ISUB,1)
08577           MINT(22)=KFPR(ISUB,2)
08578           KCC=21
08579  
08580         ELSEIF(ISUB.EQ.107) THEN
08581 C...g + gamma -> J/Psi + g
08582           MINT(21)=KFPR(ISUB,1)
08583           MINT(22)=KFPR(ISUB,2)
08584           KCC=22
08585           IF(MINT(16).EQ.22) KCC=33
08586  
08587         ELSEIF(ISUB.EQ.108) THEN
08588 C...gamma + gamma -> J/Psi + gamma
08589           MINT(21)=KFPR(ISUB,1)
08590           MINT(22)=KFPR(ISUB,2)
08591  
08592         ELSEIF(ISUB.EQ.110) THEN
08593 C...f + fbar -> gamma + h0; th arbitrary
08594           IF(PYR(0).GT.0.5D0) JS=2
08595           MINT(20+JS)=22
08596           MINT(23-JS)=KFHIGG
08597         ENDIF
08598  
08599       ELSEIF(ISUB.LE.120) THEN
08600         IF(ISUB.EQ.111) THEN
08601 C...f + fbar -> g + h0; th arbitrary
08602           IF(PYR(0).GT.0.5D0) JS=2
08603           MINT(20+JS)=21
08604           MINT(23-JS)=25
08605           KCC=17+JS
08606  
08607         ELSEIF(ISUB.EQ.112) THEN
08608 C...f + g -> f + h0; th = (p(f) - p(f))**2
08609           IF(MINT(15).EQ.21) JS=2
08610           MINT(23-JS)=25
08611           KCC=15+JS
08612           KCS=ISIGN(1,MINT(14+JS))
08613  
08614         ELSEIF(ISUB.EQ.113) THEN
08615 C...g + g -> g + h0; th arbitrary
08616           IF(PYR(0).GT.0.5D0) JS=2
08617           MINT(23-JS)=25
08618           KCC=22+JS
08619           KCS=(-1)**INT(1.5D0+PYR(0))
08620  
08621         ELSEIF(ISUB.EQ.114) THEN
08622 C...g + g -> gamma + gamma; th arbitrary
08623           IF(PYR(0).GT.0.5D0) JS=2
08624           MINT(21)=22
08625           MINT(22)=22
08626           KCC=21
08627  
08628         ELSEIF(ISUB.EQ.115) THEN
08629 C...g + g -> g + gamma; th arbitrary
08630           IF(PYR(0).GT.0.5D0) JS=2
08631           MINT(23-JS)=22
08632           KCC=22+JS
08633           KCS=(-1)**INT(1.5D0+PYR(0))
08634  
08635         ELSEIF(ISUB.EQ.116) THEN
08636 C...g + g -> gamma + Z0
08637  
08638         ELSEIF(ISUB.EQ.117) THEN
08639 C...g + g -> Z0 + Z0
08640  
08641         ELSEIF(ISUB.EQ.118) THEN
08642 C...g + g -> W+ + W-
08643         ENDIF
08644  
08645       ELSEIF(ISUB.LE.140) THEN
08646         IF(ISUB.EQ.121) THEN
08647 C...g + g -> Q + Qbar + h0
08648           KCS=(-1)**INT(1.5D0+PYR(0))
08649           MINT(21)=ISIGN(KFPR(ISUBSV,2),KCS)
08650           MINT(22)=-MINT(21)
08651           KCC=11+INT(0.5D0+PYR(0))
08652           KFRES=KFHIGG
08653  
08654         ELSEIF(ISUB.EQ.122) THEN
08655 C...q + qbar -> Q + Qbar + h0
08656           MINT(21)=ISIGN(KFPR(ISUBSV,2),MINT(15))
08657           MINT(22)=-MINT(21)
08658           KCC=4
08659           KFRES=KFHIGG
08660  
08661         ELSEIF(ISUB.EQ.123) THEN
08662 C...f + f' -> f + f' + h0 (or H0, or A0) (Z0 + Z0 -> h0 as
08663 C...inner process)
08664           KCC=22
08665           KFRES=KFHIGG
08666  
08667         ELSEIF(ISUB.EQ.124) THEN
08668 C...f + f' -> f" + f"' + h0 (or H0, or A) (W+ + W- -> h0 as
08669 C...inner process)
08670           DO 430 JT=1,2
08671             I=MINT(14+JT)
08672             IA=IABS(I)
08673             IF(IA.LE.10) THEN
08674               RVCKM=VINT(180+I)*PYR(0)
08675               DO 420 J=1,MSTP(1)
08676                 IB=2*J-1+MOD(IA,2)
08677                 IPM=(5-ISIGN(1,I))/2
08678                 IDC=J+MDCY(IA,2)+2
08679                 IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 420
08680                 MINT(20+JT)=ISIGN(IB,I)
08681                 RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
08682                 IF(RVCKM.LE.0D0) GOTO 430
08683   420         CONTINUE
08684             ELSE
08685               IB=2*((IA+1)/2)-1+MOD(IA,2)
08686               MINT(20+JT)=ISIGN(IB,I)
08687             ENDIF
08688   430     CONTINUE
08689           KCC=22
08690           KFRES=KFHIGG
08691  
08692         ELSEIF(ISUB.EQ.131.OR.ISUB.EQ.132) THEN
08693 C...f + gamma*_(T,L) -> f + g; th=(p(f)-p(f))**2
08694           IF(MINT(15).EQ.22) JS=2
08695           MINT(23-JS)=21
08696           KCC=24+JS
08697           KCS=ISIGN(1,MINT(14+JS))
08698  
08699         ELSEIF(ISUB.EQ.133.OR.ISUB.EQ.134) THEN
08700 C...f + gamma*_(T,L) -> f + gamma; th=(p(f)-p(f))**2
08701           IF(MINT(15).EQ.22) JS=2
08702           KCC=22
08703           KCS=ISIGN(1,MINT(14+JS))
08704  
08705         ELSEIF(ISUB.EQ.135.OR.ISUB.EQ.136) THEN
08706 C...g + gamma*_(T,L) -> f + fbar; th arbitrary
08707           KCS=(-1)**INT(1.5D0+PYR(0))
08708           MINT(21)=ISIGN(KFLF,KCS)
08709           MINT(22)=-MINT(21)
08710           KCC=27
08711           IF(MINT(16).EQ.21) KCC=28
08712  
08713         ELSEIF(ISUB.GE.137.AND.ISUB.LE.140) THEN
08714 C...gamma*_(T,L) + gamma*_(T,L) -> f + fbar; th arbitrary
08715           KCS=(-1)**INT(1.5D0+PYR(0))
08716           MINT(21)=ISIGN(KFLF,KCS)
08717           MINT(22)=-MINT(21)
08718           KCC=21
08719  
08720         ENDIF
08721  
08722       ELSEIF(ISUB.LE.160) THEN
08723         IF(ISUB.EQ.141) THEN
08724 C...f + fbar -> gamma*/Z0/Z'0
08725           KFRES=32
08726  
08727         ELSEIF(ISUB.EQ.142) THEN
08728 C...f + fbar' -> W'+/-
08729           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08730           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08731           KFRES=ISIGN(34,KCH1+KCH2)
08732  
08733         ELSEIF(ISUB.EQ.143) THEN
08734 C...f + fbar' -> H+/-
08735           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08736           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08737           KFRES=ISIGN(37,KCH1+KCH2)
08738  
08739         ELSEIF(ISUB.EQ.144) THEN
08740 C...f + fbar' -> R
08741           KFRES=ISIGN(40,MINT(15)+MINT(16))
08742  
08743         ELSEIF(ISUB.EQ.145) THEN
08744 C...q + l -> LQ (leptoquark)
08745           IF(IABS(MINT(16)).LE.8) JS=2
08746           KFRES=ISIGN(39,MINT(14+JS))
08747           KCC=28+JS
08748           KCS=ISIGN(1,MINT(14+JS))
08749 
08750         ELSEIF(ISUB.EQ.146) THEN
08751 C...e + gamma -> e* (excited lepton)
08752           IF(MINT(15).EQ.22) JS=2
08753           KFRES=ISIGN(KFPR(ISUB,1),MINT(14+JS))
08754           KCC=22
08755  
08756         ELSEIF(ISUB.EQ.147.OR.ISUB.EQ.148) THEN
08757 C...q + g -> q* (excited quark)
08758           IF(MINT(15).EQ.21) JS=2
08759           KFRES=ISIGN(KFPR(ISUB,1),MINT(14+JS))
08760           KCC=30+JS
08761           KCS=ISIGN(1,MINT(14+JS))
08762  
08763         ELSEIF(ISUB.EQ.149) THEN
08764 C...g + g -> eta_techni
08765           KFRES=38
08766           KCC=23
08767           KCS=(-1)**INT(1.5D0+PYR(0))
08768         ENDIF
08769  
08770       ELSEIF(ISUB.LE.200) THEN
08771         IF(ISUB.EQ.161) THEN
08772 C...f + g -> f' + H+/-; th = (p(f)-p(f'))**2
08773           IF(MINT(15).EQ.21) JS=2
08774           I=MINT(14+JS)
08775           IA=IABS(I)
08776           MINT(23-JS)=ISIGN(37,KCHG(IA,1)*I)
08777           IB=IA+MOD(IA,2)-MOD(IA+1,2)
08778           MINT(20+JS)=ISIGN(IB,I)
08779           KCC=15+JS
08780           KCS=ISIGN(1,MINT(14+JS))
08781  
08782         ELSEIF(ISUB.EQ.162) THEN
08783 C...q + g -> LQ + lbar; LQ=leptoquark; th=(p(q)-p(LQ))^2
08784           IF(MINT(15).EQ.21) JS=2
08785           MINT(20+JS)=ISIGN(39,MINT(14+JS))
08786           KFLQL=KFDP(MDCY(39,2),2)
08787           MINT(23-JS)=-ISIGN(KFLQL,MINT(14+JS))
08788           KCC=15+JS
08789           KCS=ISIGN(1,MINT(14+JS))
08790  
08791         ELSEIF(ISUB.EQ.163) THEN
08792 C...g + g -> LQ + LQbar; LQ=leptoquark; th arbitrary
08793           KCS=(-1)**INT(1.5D0+PYR(0))
08794           MINT(21)=ISIGN(39,KCS)
08795           MINT(22)=-MINT(21)
08796           KCC=MINT(2)+10
08797  
08798         ELSEIF(ISUB.EQ.164) THEN
08799 C...q + qbar -> LQ + LQbar; LQ=leptoquark; th=(p(q)-p(LQ))**2
08800           MINT(21)=ISIGN(39,MINT(15))
08801           MINT(22)=-MINT(21)
08802           KCC=4
08803  
08804         ELSEIF(ISUB.EQ.165) THEN
08805 C...q + qbar -> l- + l+; th=(p(q)-p(l-))**2
08806           MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
08807           MINT(22)=-MINT(21)
08808  
08809         ELSEIF(ISUB.EQ.166) THEN
08810 C...q + qbar' -> l + nu; th=(p(u)-p(nu))**2 or (p(ubar)-p(nubar))**2
08811           IF(MOD(MINT(15),2).EQ.0) THEN
08812             MINT(21)=ISIGN(KFPR(ISUB,1)+1,MINT(15))
08813             MINT(22)=ISIGN(KFPR(ISUB,1),MINT(16))
08814           ELSE
08815             MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
08816             MINT(22)=ISIGN(KFPR(ISUB,1)+1,MINT(16))
08817           ENDIF
08818  
08819         ELSEIF(ISUB.EQ.167.OR.ISUB.EQ.168) THEN
08820 C...q + q' -> q" + q* (excited quark)
08821           KFQSTR=KFPR(ISUB,2)
08822           KFQEXC=MOD(KFQSTR,KEXCIT)
08823           JS=MINT(2)
08824           MINT(20+JS)=ISIGN(KFQSTR,MINT(14+JS))
08825           IF(IABS(MINT(15)).NE.KFQEXC.AND.IABS(MINT(16)).NE.KFQEXC)
08826      &    MINT(23-JS)=ISIGN(KFQEXC,MINT(17-JS))
08827           KCC=22
08828  
08829         ELSEIF(ISUB.EQ.169) THEN
08830 C...q + qbar -> e + e* (excited lepton)
08831           KFQSTR=KFPR(ISUB,2)
08832           KFQEXC=MOD(KFQSTR,KEXCIT)
08833           JS=MINT(2)
08834           MINT(20+JS)=ISIGN(KFQSTR,MINT(14+JS))
08835           MINT(23-JS)=ISIGN(KFQEXC,MINT(17-JS))
08836  
08837         ELSEIF(ISUB.EQ.191) THEN
08838 C...f + fbar -> rho_tech0.
08839           KFRES=54
08840  
08841         ELSEIF(ISUB.EQ.192) THEN
08842 C...f + fbar' -> rho_tech+/-
08843           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08844           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08845           KFRES=ISIGN(55,KCH1+KCH2)
08846  
08847         ELSEIF(ISUB.EQ.193) THEN
08848 C...f + fbar -> omega_tech0.
08849           KFRES=56
08850  
08851         ELSEIF(ISUB.EQ.194) THEN
08852 C...f + fbar -> f' + fbar' via mixture of s-channel
08853 C...rho_tech and omega_tech; th=(p(f)-p(f'))**2
08854           MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
08855           MINT(22)=-MINT(21)
08856 
08857         ELSEIF(ISUB.EQ.195) THEN
08858 C...f + fbar' -> f'' + fbar''' via s-channel
08859 C...rho_tech+ th=(p(f)-p(f'))**2
08860 C...q + qbar' -> l + nu; th=(p(u)-p(nu))**2 or (p(ubar)-p(nubar))**2
08861           IF(MOD(MINT(15),2).EQ.0) THEN
08862             MINT(21)=ISIGN(KFPR(ISUB,1)+1,MINT(15))
08863             MINT(22)=ISIGN(KFPR(ISUB,1),MINT(16))
08864           ELSE
08865             MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
08866             MINT(22)=ISIGN(KFPR(ISUB,1)+1,MINT(16))
08867           ENDIF
08868         ENDIF
08869  
08870 CMRENNA++
08871       ELSEIF(ISUB.LE.215) THEN
08872         IF(ISUB.EQ.201) THEN
08873 C...f + fbar -> ~e_L + ~e_Lbar
08874           MINT(21)=ISIGN(KSUSY1+11,KCS)
08875           MINT(22)=-MINT(21)
08876  
08877         ELSEIF(ISUB.EQ.202) THEN
08878 C...f + fbar -> ~e_R + ~e_Rbar
08879           MINT(21)=ISIGN(KSUSY2+11,KCS)
08880           MINT(22)=-MINT(21)
08881  
08882         ELSEIF(ISUB.EQ.203) THEN
08883 C...f + fbar -> ~e_R + ~e_Lbar
08884           KCSG=1
08885           IF(MINT(2).EQ.2) KCSG=-1
08886           MINT(21)=ISIGN(KSUSY1+11,KCSG)
08887           MINT(22)=-ISIGN(KSUSY2+11,KCSG)
08888  
08889         ELSEIF(ISUB.EQ.204) THEN
08890 C...f + fbar -> ~mu_L + ~mu_Lbar
08891           MINT(21)=ISIGN(KSUSY1+13,KCS)
08892           MINT(22)=-MINT(21)
08893  
08894         ELSEIF(ISUB.EQ.205) THEN
08895 C...f + fbar -> ~mu_R + ~mu_Rbar
08896           MINT(21)=ISIGN(KSUSY2+13,KCS)
08897           MINT(22)=-MINT(21)
08898  
08899         ELSEIF(ISUB.EQ.206) THEN
08900 C...f + fbar -> ~mu_L + ~mu_Rbar
08901           KCSG=1
08902           IF(MINT(2).EQ.2) KCSG=-1
08903           MINT(21)=ISIGN(KSUSY1+13,KCSG)
08904           MINT(22)=-ISIGN(KSUSY2+13,KCSG)
08905  
08906         ELSEIF(ISUB.EQ.207) THEN
08907 C...f + fbar -> ~tau_1 + ~tau_1bar
08908           MINT(21)=ISIGN(KSUSY1+15,KCS)
08909           MINT(22)=-MINT(21)
08910  
08911         ELSEIF(ISUB.EQ.208) THEN
08912 C...f + fbar -> ~tau_2 + ~tau_2bar
08913           MINT(21)=ISIGN(KSUSY2+15,KCS)
08914           MINT(22)=-MINT(21)
08915  
08916         ELSEIF(ISUB.EQ.209) THEN
08917 C...f + fbar -> ~tau_1 + ~tau_2bar
08918           KCSG=1
08919           IF(MINT(2).EQ.2) KCSG=-1
08920           MINT(21)=ISIGN(KSUSY1+15,KCSG)
08921           MINT(22)=-ISIGN(KSUSY2+15,KCSG)
08922  
08923         ELSEIF(ISUB.EQ.210) THEN
08924 C...q + qbar' -> ~l_L + ~nulbar; th arbitrary
08925           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08926           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08927           MINT(21)=-ISIGN(KFPR(ISUB,1),KCH1+KCH2)
08928           MINT(22)=ISIGN(KFPR(ISUB,2),KCH1+KCH2)
08929  
08930         ELSEIF(ISUB.EQ.211) THEN
08931 C...q + qbar'-> ~tau_1 + ~nutaubar; th arbitrary
08932           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08933           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08934           MINT(21)=-ISIGN(KSUSY1+15,KCH1+KCH2)
08935           MINT(22)=ISIGN(KSUSY1+16,KCH1+KCH2)
08936  
08937         ELSEIF(ISUB.EQ.212) THEN
08938 C...q + qbar'-> ~tau_2 + ~nutaubar; th arbitrary
08939           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
08940           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
08941           MINT(21)=-ISIGN(KSUSY2+15,KCH1+KCH2)
08942           MINT(22)=ISIGN(KSUSY1+16,KCH1+KCH2)
08943  
08944         ELSEIF(ISUB.EQ.213) THEN
08945 C...f + fbar -> ~nul + ~nulbar
08946           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
08947           MINT(22)=-MINT(21)
08948  
08949         ELSEIF(ISUB.EQ.214) THEN
08950 C...f + fbar -> ~nutau + ~nutaubar
08951           MINT(21)=ISIGN(KSUSY1+16,KCS)
08952           MINT(22)=-MINT(21)
08953         ENDIF
08954  
08955       ELSEIF(ISUB.LE.225) THEN
08956         IF(ISUB.EQ.216) THEN
08957 C...f + fbar -> ~chi01 + ~chi01
08958           MINT(21)=KSUSY1+22
08959           MINT(22)=KSUSY1+22
08960  
08961         ELSEIF(ISUB.EQ.217) THEN
08962 C...f + fbar -> ~chi02 + ~chi02
08963           MINT(21)=KSUSY1+23
08964           MINT(22)=KSUSY1+23
08965  
08966         ELSEIF(ISUB.EQ.218 ) THEN
08967 C...f + fbar -> ~chi03 + ~chi03
08968           MINT(21)=KSUSY1+25
08969           MINT(22)=KSUSY1+25
08970  
08971         ELSEIF(ISUB.EQ.219 ) THEN
08972 C...f + fbar -> ~chi04 + ~chi04
08973           MINT(21)=KSUSY1+35
08974           MINT(22)=KSUSY1+35
08975  
08976         ELSEIF(ISUB.EQ.220 ) THEN
08977 C...f + fbar -> ~chi01 + ~chi02
08978           IF(PYR(0).GT.0.5D0) JS=2
08979           MINT(20+JS)=KSUSY1+22
08980           MINT(23-JS)=KSUSY1+23
08981  
08982         ELSEIF(ISUB.EQ.221 ) THEN
08983 C...f + fbar -> ~chi01 + ~chi03
08984           IF(PYR(0).GT.0.5D0) JS=2
08985           MINT(20+JS)=KSUSY1+22
08986           MINT(23-JS)=KSUSY1+25
08987  
08988         ELSEIF(ISUB.EQ.222) THEN
08989 C...f + fbar -> ~chi01 + ~chi04
08990           IF(PYR(0).GT.0.5D0) JS=2
08991           MINT(20+JS)=KSUSY1+22
08992           MINT(23-JS)=KSUSY1+35
08993  
08994         ELSEIF(ISUB.EQ.223) THEN
08995 C...f + fbar -> ~chi02 + ~chi03
08996           IF(PYR(0).GT.0.5D0) JS=2
08997           MINT(20+JS)=KSUSY1+23
08998           MINT(23-JS)=KSUSY1+25
08999  
09000         ELSEIF(ISUB.EQ.224) THEN
09001 C...f + fbar -> ~chi02 + ~chi04
09002           IF(PYR(0).GT.0.5D0) JS=2
09003           MINT(20+JS)=KSUSY1+23
09004           MINT(23-JS)=KSUSY1+35
09005  
09006         ELSEIF(ISUB.EQ.225) THEN
09007 C...f + fbar -> ~chi03 + ~chi04
09008           IF(PYR(0).GT.0.5D0) JS=2
09009           MINT(20+JS)=KSUSY1+25
09010           MINT(23-JS)=KSUSY1+35
09011         ENDIF
09012  
09013       ELSEIF(ISUB.LE.236) THEN
09014         IF(ISUB.EQ.226) THEN
09015 C...f + fbar -> ~chi+-1 + ~chi-+1
09016 C...th=(p(q)-p(chi+))**2 or (p(qbar)-p(chi-))**2
09017           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09018           MINT(21)=ISIGN(KSUSY1+24,KCH1)
09019           MINT(22)=-MINT(21)
09020  
09021         ELSEIF(ISUB.EQ.227) THEN
09022 C...f + fbar -> ~chi+-2 + ~chi-+2
09023           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09024           MINT(21)=ISIGN(KSUSY1+37,KCH1)
09025           MINT(22)=-MINT(21)
09026  
09027         ELSEIF(ISUB.EQ.228) THEN
09028 C...f + fbar -> ~chi+-1 + ~chi-+2
09029 C...th=(p(q)-p(chi1+))**2 or th=(p(qbar)-p(chi1-))**2
09030 C...js=1 if pyr<.5, js=2 if pyr>.5
09031 C...if 15=q, 16=qbar and js=1, chi1+ + chi2-, th=(q-chi1+)**2
09032 C...if 15=qbar, 16=q and js=1, chi2- + chi1+, th=(q-chi1+)**2
09033 C...if 15=q, 16=qbar and js=2, chi1- + chi2+, th=(qbar-chi1-)**2
09034 C...if 15=qbar, 16=q and js=2, chi2+ + chi1-, th=(q-chi1-)**2
09035           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09036 C          KCH1=ISIGN(1,MINT(15))
09037           KCH2=INT(1-KCH1)/2
09038           IF(MINT(2).EQ.1) THEN
09039             MINT(22-KCH2)= -(KSUSY1+24)
09040             MINT(21+KCH2)= KSUSY1+37
09041             IF(KCH2.EQ.0) JS=2
09042           ELSE
09043             MINT(21+KCH2)= KSUSY1+24
09044             MINT(22-KCH2)= -(KSUSY1+37)
09045             IF(KCH2.EQ.1) JS=2
09046           ENDIF
09047  
09048         ELSEIF(ISUB.EQ.229) THEN
09049 C...q + qbar' -> ~chi01 + ~chi+-1
09050 C...th=(p(u)-p(chi+))**2 or (p(ubar)-p(chi-))**2
09051           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09052           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09053 C...CHECK THIS
09054           IF(MOD(MINT(15),2).NE.0) JS=2
09055           MINT(20+JS)=KSUSY1+22
09056           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
09057  
09058         ELSEIF(ISUB.EQ.230) THEN
09059 C...q + qbar' -> ~chi02 + ~chi+-1
09060           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09061           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09062           IF(MOD(MINT(15),2).NE.0) JS=2
09063           MINT(20+JS)=KSUSY1+23
09064           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
09065  
09066         ELSEIF(ISUB.EQ.231) THEN
09067 C...q + qbar' -> ~chi03 + ~chi+-1
09068           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09069           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09070           IF(MOD(MINT(15),2).NE.0) JS=2
09071           MINT(20+JS)=KSUSY1+25
09072           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
09073  
09074         ELSEIF(ISUB.EQ.232) THEN
09075 C...q + qbar' -> ~chi04 + ~chi+-1
09076           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09077           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09078           IF(MOD(MINT(15),2).NE.0) JS=2
09079           MINT(20+JS)=KSUSY1+35
09080           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
09081  
09082         ELSEIF(ISUB.EQ.233) THEN
09083 C...q + qbar' -> ~chi01 + ~chi+-2
09084           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09085           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09086           IF(MOD(MINT(15),2).NE.0) JS=2
09087           MINT(20+JS)=KSUSY1+22
09088           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
09089  
09090         ELSEIF(ISUB.EQ.234) THEN
09091 C...q + qbar' -> ~chi02 + ~chi+-2
09092           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09093           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09094           IF(MOD(MINT(15),2).NE.0) JS=2
09095           MINT(20+JS)=KSUSY1+23
09096           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
09097  
09098         ELSEIF(ISUB.EQ.235) THEN
09099 C...q + qbar' -> ~chi03 + ~chi+-2
09100           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09101           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09102           IF(MOD(MINT(15),2).NE.0) JS=2
09103           MINT(20+JS)=KSUSY1+25
09104           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
09105  
09106         ELSEIF(ISUB.EQ.236) THEN
09107 C...q + qbar' -> ~chi04 + ~chi+-2
09108           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09109           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09110           IF(MOD(MINT(15),2).NE.0) JS=2
09111           MINT(20+JS)=KSUSY1+35
09112           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
09113         ENDIF
09114  
09115       ELSEIF(ISUB.LE.245) THEN
09116         IF(ISUB.EQ.237) THEN
09117 C...q + qbar -> ~chi01 + ~g
09118 C...th arbitrary
09119           IF(PYR(0).GT.0.5D0) JS=2
09120           MINT(20+JS)=KSUSY1+21
09121           MINT(23-JS)=KSUSY1+22
09122           KCC=17+JS
09123  
09124         ELSEIF(ISUB.EQ.238) THEN
09125 C...q + qbar -> ~chi02 + ~g
09126 C...th arbitrary
09127           IF(PYR(0).GT.0.5D0) JS=2
09128           MINT(20+JS)=KSUSY1+21
09129           MINT(23-JS)=KSUSY1+23
09130           KCC=17+JS
09131  
09132         ELSEIF(ISUB.EQ.239) THEN
09133 C...q + qbar -> ~chi03 + ~g
09134 C...th arbitrary
09135           IF(PYR(0).GT.0.5D0) JS=2
09136           MINT(20+JS)=KSUSY1+21
09137           MINT(23-JS)=KSUSY1+25
09138           KCC=17+JS
09139  
09140         ELSEIF(ISUB.EQ.240) THEN
09141 C...q + qbar -> ~chi04 + ~g
09142 C...th arbitrary
09143           IF(PYR(0).GT.0.5D0) JS=2
09144           MINT(20+JS)=KSUSY1+21
09145           MINT(23-JS)=KSUSY1+35
09146           KCC=17+JS
09147  
09148         ELSEIF(ISUB.EQ.241) THEN
09149 C...q + qbar' -> ~chi+-1 + ~g
09150 C...if 15=u, 16=dbar, then (kch1+kch2)>0, js=1, chi+
09151 C...if 15=d, 16=ubar, then (kch1+kch2)<0, js=2, chi-
09152 C...if 15=ubar, 16=d, then (kch1+kch2)<0, js=1, chi-
09153 C...if 15=dbar, 16=u, then (kch1+kch2)>0, js=2, chi+
09154 C...th=(p(q)-p(chi+))**2 or (p(qbar')-p(chi-))**2
09155           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09156           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09157           JS=1
09158           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
09159           MINT(20+JS)=KSUSY1+21
09160           MINT(23-JS)=ISIGN(KSUSY1+24,KCH1+KCH2)
09161           KCC=17+JS
09162  
09163         ELSEIF(ISUB.EQ.242) THEN
09164 C...q + qbar' -> ~chi+-2 + ~g
09165 C...if 15=u, 16=dbar, then (kch1+kch2)>0, js=1, chi+
09166 C...if 15=d, 16=ubar, then (kch1+kch2)<0, js=2, chi-
09167 C...if 15=ubar, 16=d, then (kch1+kch2)<0, js=1, chi-
09168 C...if 15=dbar, 16=u, then (kch1+kch2)>0, js=2, chi+
09169 C...th=(p(q)-p(chi+))**2 or (p(qbar')-p(chi-))**2
09170           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09171           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09172           JS=1
09173           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
09174           MINT(20+JS)=KSUSY1+21
09175           MINT(23-JS)=ISIGN(KSUSY1+37,KCH1+KCH2)
09176           KCC=17+JS
09177  
09178         ELSEIF(ISUB.EQ.243) THEN
09179 C...q + qbar -> ~g + ~g ; th arbitrary
09180           MINT(21)=KSUSY1+21
09181           MINT(22)=KSUSY1+21
09182           KCC=MINT(2)+4
09183  
09184         ELSEIF(ISUB.EQ.244) THEN
09185 C...g + g -> ~g + ~g ; th arbitrary
09186           KCC=MINT(2)+12
09187           KCS=(-1)**INT(1.5D0+PYR(0))
09188           MINT(21)=KSUSY1+21
09189           MINT(22)=KSUSY1+21
09190         ENDIF
09191  
09192       ELSEIF(ISUB.LE.260) THEN
09193         IF(ISUB.EQ.246) THEN
09194 C...qj + g -> ~qj_L + ~chi01
09195           IF(MINT(15).EQ.21) JS=2
09196           I=MINT(14+JS)
09197           IA=IABS(I)
09198           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
09199           MINT(23-JS)=KSUSY1+22
09200           KCC=15+JS
09201           KCS=ISIGN(1,MINT(14+JS))
09202  
09203         ELSEIF(ISUB.EQ.247) THEN
09204 C...qj + g -> ~qj_R + ~chi01
09205           IF(MINT(15).EQ.21) JS=2
09206           I=MINT(14+JS)
09207           IA=IABS(I)
09208           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
09209           MINT(23-JS)=KSUSY1+22
09210           KCC=15+JS
09211           KCS=ISIGN(1,MINT(14+JS))
09212  
09213         ELSEIF(ISUB.EQ.248) THEN
09214 C...qj + g -> ~qj_L + ~chi02
09215           IF(MINT(15).EQ.21) JS=2
09216           I=MINT(14+JS)
09217           IA=IABS(I)
09218           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
09219           MINT(23-JS)=KSUSY1+23
09220           KCC=15+JS
09221           KCS=ISIGN(1,MINT(14+JS))
09222  
09223         ELSEIF(ISUB.EQ.249) THEN
09224 C...qj + g -> ~qj_R + ~chi02
09225           IF(MINT(15).EQ.21) JS=2
09226           I=MINT(14+JS)
09227           IA=IABS(I)
09228           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
09229           MINT(23-JS)=KSUSY1+23
09230           KCC=15+JS
09231           KCS=ISIGN(1,MINT(14+JS))
09232  
09233         ELSEIF(ISUB.EQ.250) THEN
09234 C...qj + g -> ~qj_L + ~chi03
09235           IF(MINT(15).EQ.21) JS=2
09236           I=MINT(14+JS)
09237           IA=IABS(I)
09238           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
09239           MINT(23-JS)=KSUSY1+25
09240           KCC=15+JS
09241           KCS=ISIGN(1,MINT(14+JS))
09242  
09243         ELSEIF(ISUB.EQ.251) THEN
09244 C...qj + g -> ~qj_R + ~chi03
09245           IF(MINT(15).EQ.21) JS=2
09246           I=MINT(14+JS)
09247           IA=IABS(I)
09248           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
09249           MINT(23-JS)=KSUSY1+25
09250           KCC=15+JS
09251           KCS=ISIGN(1,MINT(14+JS))
09252  
09253         ELSEIF(ISUB.EQ.252) THEN
09254 C...qj + g -> ~qj_L + ~chi04
09255           IF(MINT(15).EQ.21) JS=2
09256           I=MINT(14+JS)
09257           IA=IABS(I)
09258           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
09259           MINT(23-JS)=KSUSY1+35
09260           KCC=15+JS
09261           KCS=ISIGN(1,MINT(14+JS))
09262  
09263         ELSEIF(ISUB.EQ.253) THEN
09264 C...qj + g -> ~qj_R + ~chi04
09265           IF(MINT(15).EQ.21) JS=2
09266           I=MINT(14+JS)
09267           IA=IABS(I)
09268           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
09269           MINT(23-JS)=KSUSY1+35
09270           KCC=15+JS
09271           KCS=ISIGN(1,MINT(14+JS))
09272  
09273         ELSEIF(ISUB.EQ.254) THEN
09274 C...qj + g -> ~qk_L + ~chi+-1
09275           IF(MINT(15).EQ.21) JS=2
09276           I=MINT(14+JS)
09277           IA=IABS(I)
09278           MINT(23-JS)=ISIGN(KSUSY1+24,KCHG(IA,1)*I)
09279           IB=-IA+INT((IA+1)/2)*4-1
09280           MINT(20+JS)=ISIGN(KSUSY1+IB,I)
09281           KCC=15+JS
09282           KCS=ISIGN(1,MINT(14+JS))
09283  
09284         ELSEIF(ISUB.EQ.255) THEN
09285 C...qj + g -> ~qk_L + ~chi+-1
09286           IF(MINT(15).EQ.21) JS=2
09287           I=MINT(14+JS)
09288           IA=IABS(I)
09289           MINT(23-JS)=ISIGN(KSUSY1+24,KCHG(IA,1)*I)
09290           IB=-IA+INT((IA+1)/2)*4-1
09291           MINT(20+JS)=ISIGN(KSUSY2+IB,I)
09292           KCC=15+JS
09293           KCS=ISIGN(1,MINT(14+JS))
09294  
09295         ELSEIF(ISUB.EQ.256) THEN
09296 C...qj + g -> ~qk_L + ~chi+-2
09297           IF(MINT(15).EQ.21) JS=2
09298           I=MINT(14+JS)
09299           IA=IABS(I)
09300           IB=-IA+INT((IA+1)/2)*4-1
09301           MINT(20+JS)=ISIGN(KSUSY1+IB,I)
09302           MINT(23-JS)=ISIGN(KSUSY1+37,KCHG(IA,1)*I)
09303           KCC=15+JS
09304           KCS=ISIGN(1,MINT(14+JS))
09305  
09306         ELSEIF(ISUB.EQ.257) THEN
09307 C...qj + g -> ~qk_R + ~chi+-2
09308           IF(MINT(15).EQ.21) JS=2
09309           I=MINT(14+JS)
09310           IA=IABS(I)
09311           IB=-IA+INT((IA+1)/2)*4-1
09312           MINT(20+JS)=ISIGN(KSUSY2+IB,I)
09313           MINT(23-JS)=ISIGN(KSUSY1+37,KCHG(IA,1)*I)
09314           KCC=15+JS
09315           KCS=ISIGN(1,MINT(14+JS))
09316  
09317         ELSEIF(ISUB.EQ.258) THEN
09318 C...qj + g -> ~qj_L + ~g
09319           IF(MINT(15).EQ.21) JS=2
09320           I=MINT(14+JS)
09321           IA=IABS(I)
09322           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
09323           MINT(23-JS)=KSUSY1+21
09324           KCC=MINT(2)+6
09325           IF(JS.EQ.2) KCC=KCC+2
09326           KCS=ISIGN(1,I)
09327  
09328         ELSEIF(ISUB.EQ.259) THEN
09329 C...qj + g -> ~qj_R + ~g
09330           IF(MINT(15).EQ.21) JS=2
09331           I=MINT(14+JS)
09332           IA=IABS(I)
09333           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
09334           MINT(23-JS)=KSUSY1+21
09335           KCC=MINT(2)+6
09336           IF(JS.EQ.2) KCC=KCC+2
09337           KCS=ISIGN(1,I)
09338         ENDIF
09339  
09340       ELSEIF(ISUB.LE.270) THEN
09341         IF(ISUB.EQ.261) THEN
09342 C...f + fbar -> ~t_1 + ~t_1bar; th = (p(q)-p(sq))**2
09343           ISGN=1
09344           IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
09345           MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
09346           MINT(22)=-MINT(21)
09347 C...Correct color combination
09348           IF(MINT(43).EQ.4) KCC=4
09349  
09350         ELSEIF(ISUB.EQ.262) THEN
09351 C...f + fbar -> ~t_2 + ~t_2bar; th = (p(q)-p(sq))**2
09352           ISGN=1
09353           IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
09354           MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
09355           MINT(22)=-MINT(21)
09356 C...Correct color combination
09357           IF(MINT(43).EQ.4) KCC=4
09358  
09359         ELSEIF(ISUB.EQ.263) THEN
09360 C...f + fbar -> ~t_1 + ~t_2bar; th = (p(q)-p(sq))**2
09361           IF((KCS.GT.0.AND.MINT(2).EQ.1).OR.
09362      &    (KCS.LT.0.AND.MINT(2).EQ.2)) THEN
09363             MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
09364             MINT(22)=-ISIGN(KFPR(ISUB,2),KCS)
09365           ELSE
09366             JS=2
09367             MINT(21)=ISIGN(KFPR(ISUB,2),KCS)
09368             MINT(22)=-ISIGN(KFPR(ISUB,1),KCS)
09369           ENDIF
09370 C...Correct color combination
09371           IF(MINT(43).EQ.4) KCC=4
09372  
09373         ELSEIF(ISUB.EQ.264) THEN
09374 C...g + g -> ~t_1 + ~t_1bar; th arbitrary
09375           KCS=(-1)**INT(1.5D0+PYR(0))
09376           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
09377           MINT(22)=-MINT(21)
09378           KCC=MINT(2)+10
09379  
09380         ELSEIF(ISUB.EQ.265) THEN
09381 C...g + g -> ~t_2 + ~t_2bar; th arbitrary
09382           KCS=(-1)**INT(1.5D0+PYR(0))
09383           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
09384           MINT(22)=-MINT(21)
09385           KCC=MINT(2)+10
09386         ENDIF
09387  
09388       ELSEIF(ISUB.LE.296) THEN
09389         IF(ISUB.EQ.271.OR.ISUB.EQ.281.OR.ISUB.EQ.291) THEN
09390 C...qi + qj -> ~qi_L + ~qj_L
09391           KCC=MINT(2)
09392           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
09393           MINT(21)=ISIGN(KSUSY1+IABS(MINT(15)),MINT(15))
09394           MINT(22)=ISIGN(KSUSY1+IABS(MINT(16)),MINT(16))
09395  
09396         ELSEIF(ISUB.EQ.272.OR.ISUB.EQ.282.OR.ISUB.EQ.292) THEN
09397 C...qi + qj -> ~qi_R + ~qj_R
09398           KCC=MINT(2)
09399           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
09400           MINT(21)=ISIGN(KSUSY2+IABS(MINT(15)),MINT(15))
09401           MINT(22)=ISIGN(KSUSY2+IABS(MINT(16)),MINT(16))
09402  
09403         ELSEIF(ISUB.EQ.273.OR.ISUB.EQ.283.OR.ISUB.EQ.293) THEN
09404 C...qi + qj -> ~qi_L + ~qj_R
09405           MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
09406           MINT(22)=ISIGN(KFPR(ISUB,2),MINT(16))
09407           KCC=MINT(2)
09408           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
09409  
09410         ELSEIF(ISUB.EQ.274.OR.ISUB.EQ.284) THEN
09411 C...qi + qjbar -> ~qi_L + ~qj_Lbar; th = (p(f)-p(sf'))**2
09412           MINT(21)=ISIGN(KSUSY1+IABS(MINT(15)),MINT(15))
09413           MINT(22)=ISIGN(KSUSY1+IABS(MINT(16)),MINT(16))
09414           KCC=MINT(2)
09415           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
09416  
09417         ELSEIF(ISUB.EQ.275.OR.ISUB.EQ.285) THEN
09418 C...qi + qjbar -> ~qi_R + ~qj_Rbar ; th = (p(f)-p(sf'))**2
09419           MINT(21)=ISIGN(KSUSY2+IABS(MINT(15)),MINT(15))
09420           MINT(22)=ISIGN(KSUSY2+IABS(MINT(16)),MINT(16))
09421           KCC=MINT(2)
09422           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
09423  
09424         ELSEIF(ISUB.EQ.276.OR.ISUB.EQ.286.OR.ISUB.EQ.296) THEN
09425 C...qi + qjbar -> ~qi_L + ~qj_Rbar ; th = (p(f)-p(sf'))**2
09426           MINT(21)=ISIGN(KFPR(ISUB,1),MINT(15))
09427           MINT(22)=ISIGN(KFPR(ISUB,2),MINT(16))
09428           KCC=MINT(2)
09429           IF(MINT(15)*MINT(16).LT.0) KCC=KCC+2
09430  
09431         ELSEIF(ISUB.EQ.277.OR.ISUB.EQ.287) THEN
09432 C...f + fbar -> ~qi_L + ~qi_Lbar ; th = (p(q)-p(sq))**2
09433           ISGN=1
09434           IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
09435           MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
09436           MINT(22)=-MINT(21)
09437           IF(MINT(43).EQ.4) KCC=4
09438  
09439         ELSEIF(ISUB.EQ.278.OR.ISUB.EQ.288) THEN
09440 C...f + fbar -> ~qi_R + ~qi_Rbar; th = (p(q)-p(sq))**2
09441           ISGN=1
09442           IF(MINT(43).EQ.1.AND.PYR(0).GT.0.5D0) ISGN=-1
09443           MINT(21)=ISGN*ISIGN(KFPR(ISUB,1),KCS)
09444           MINT(22)=-MINT(21)
09445           IF(MINT(43).EQ.4) KCC=4
09446  
09447         ELSEIF(ISUB.EQ.279.OR.ISUB.EQ.289) THEN
09448 C...g + g -> ~qi_L + ~qi_Lbar ; th arbitrary
09449 C...pure LL + RR
09450           KCS=(-1)**INT(1.5D0+PYR(0))
09451           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
09452           MINT(22)=-MINT(21)
09453           KCC=MINT(2)+10
09454  
09455         ELSEIF(ISUB.EQ.280.OR.ISUB.EQ.290) THEN
09456 C...g + g -> ~qi_R + ~qi_Rbar ; th arbitrary
09457           KCS=(-1)**INT(1.5D0+PYR(0))
09458           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
09459           MINT(22)=-MINT(21)
09460           KCC=MINT(2)+10
09461  
09462         ELSEIF(ISUB.EQ.294) THEN
09463 C...qj + g -> ~qj_L + ~g
09464           IF(MINT(15).EQ.21) JS=2
09465           I=MINT(14+JS)
09466           IA=IABS(I)
09467           MINT(20+JS)=ISIGN(KSUSY1+IA,I)
09468           MINT(23-JS)=KSUSY1+21
09469           KCC=MINT(2)+6
09470           IF(JS.EQ.2) KCC=KCC+2
09471           KCS=ISIGN(1,I)
09472  
09473         ELSEIF(ISUB.EQ.295) THEN
09474 C...qj + g -> ~qj_R + ~g
09475           IF(MINT(15).EQ.21) JS=2
09476           I=MINT(14+JS)
09477           IA=IABS(I)
09478           MINT(20+JS)=ISIGN(KSUSY2+IA,I)
09479           MINT(23-JS)=KSUSY1+21
09480           KCC=MINT(2)+6
09481           IF(JS.EQ.2) KCC=KCC+2
09482           KCS=ISIGN(1,I)
09483         ENDIF
09484 
09485       ELSEIF(ISUB.LE.340) THEN
09486 
09487         IF(ISUB.EQ.297.OR.ISUB.EQ.298) THEN
09488 C...q + qbar' -> H+ + H0
09489           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09490           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09491           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
09492           MINT(20+JS)=ISIGN(37,KCH1+KCH2)
09493           MINT(23-JS)=KFPR(ISUB,2)
09494         ELSEIF(ISUB.EQ.299.OR.ISUB.EQ.300) THEN
09495 C...f + fbar -> A0 + H0; th arbitrary
09496           IF(PYR(0).GT.0.5D0) JS=2
09497           MINT(20+JS)=KFPR(ISUB,1)
09498           MINT(23-JS)=KFPR(ISUB,2)
09499         ELSEIF(ISUB.EQ.301) THEN
09500 C...f + fbar -> H+ H-
09501           MINT(21)=ISIGN(KFPR(ISUB,1),KCS)
09502           MINT(22)=-MINT(21)
09503         ENDIF
09504 CMRENNA--
09505 
09506       ELSEIF(ISUB.LE.360) THEN
09507 
09508         IF(ISUB.EQ.341.OR.ISUB.EQ.342) THEN
09509 C...l + l -> H_L++/--, H_R++/--
09510           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09511           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09512           KFRES=ISIGN(KFPR(ISUB,1),KCH1+KCH2)
09513  
09514         ELSEIF(ISUB.GE.343.AND.ISUB.LE.348) THEN
09515 C...l + gamma -> l' + H++/--; th=(p(l)-p(H))**2
09516           IF(MINT(15).EQ.22) JS=2
09517           MINT(20+JS)=ISIGN(KFPR(ISUB,1),-MINT(14+JS))
09518           MINT(23-JS)=ISIGN(KFPR(ISUB,2),-MINT(14+JS))
09519           KCC=22
09520  
09521         ELSEIF(ISUB.EQ.349.OR.ISUB.EQ.350) THEN
09522 C...f + fbar -> H++ + H--; th = (p(f)-p(H--))**2
09523           MINT(21)=-ISIGN(KFPR(ISUB,1),MINT(15))
09524           MINT(22)=-MINT(21)
09525 
09526         ELSEIF(ISUB.EQ.351.OR.ISUB.EQ.352) THEN
09527 C...f + f' -> f" + f"' + H++/-- (W+/- + W+/- -> H++/-- 
09528 C...as inner process).
09529           DO 432 JT=1,2
09530             I=MINT(14+JT)
09531             IA=IABS(I)
09532             IF(IA.LE.10) THEN
09533               RVCKM=VINT(180+I)*PYR(0)
09534               DO 422 J=1,MSTP(1)
09535                 IB=2*J-1+MOD(IA,2)
09536                 IPM=(5-ISIGN(1,I))/2
09537                 IDC=J+MDCY(IA,2)+2
09538                 IF(MDME(IDC,1).NE.1.AND.MDME(IDC,1).NE.IPM) GOTO 422
09539                 MINT(20+JT)=ISIGN(IB,I)
09540                 RVCKM=RVCKM-VCKM((IA+1)/2,(IB+1)/2)
09541                 IF(RVCKM.LE.0D0) GOTO 432
09542   422         CONTINUE
09543             ELSE
09544               IB=2*((IA+1)/2)-1+MOD(IA,2)
09545               MINT(20+JT)=ISIGN(IB,I)
09546             ENDIF
09547   432     CONTINUE
09548           KCC=22
09549           KFRES=ISIGN(KFPR(ISUB,1),MINT(15))
09550           IF(MOD(MINT(15),2).EQ.1) KFRES=-KFRES
09551 
09552         ENDIF
09553 
09554       ELSEIF(ISUB.LE.380) THEN
09555         IF(ISUB.LE.363.OR.ISUB.EQ.368) THEN
09556 C...f + fbar -> pi+ pi-
09557           KSW=(-1)**INT(1.5D0+PYR(0))
09558           MINT(21)=ISIGN(KFPR(ISUB,1),KSW)
09559           MINT(22)=-ISIGN(KFPR(ISUB,2),KSW)
09560 C...f + fbar -> neutral neutral
09561         ELSEIF(ISUB.LE.367) THEN
09562           MINT(21)=KFPR(ISUB,1)
09563           MINT(22)=KFPR(ISUB,2)
09564 C...f + fbar' -> charged neutral
09565         ELSEIF(ISUB.EQ.374.OR.ISUB.EQ.375) THEN
09566           IN=1
09567           IC=2
09568           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09569           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09570           IF(MINT(15)*(KCH1+KCH2).LT.0) JS=2
09571 c         MINT(20+JS)=ISIGN(KFPR(ISUB,IC),KCH1+KCH2)
09572 c         MINT(23-JS)=KFPR(ISUB,IN)
09573           MINT(23-JS)=ISIGN(KFPR(ISUB,IC),KCH1+KCH2)
09574           MINT(20+JS)=KFPR(ISUB,IN)
09575 
09576         ELSEIF(ISUB.GE.370.AND.ISUB.LE.377) THEN
09577           IN=2
09578           IC=1
09579           KCH1=KCHG(IABS(MINT(15)),1)*ISIGN(1,MINT(15))
09580           KCH2=KCHG(IABS(MINT(16)),1)*ISIGN(1,MINT(16))
09581           IF(MINT(15)*(KCH1+KCH2).GT.0) JS=2
09582           MINT(20+JS)=ISIGN(KFPR(ISUB,IC),KCH1+KCH2)
09583           MINT(23-JS)=KFPR(ISUB,IN)
09584         ENDIF
09585       ENDIF
09586  
09587       IF(ISET(ISUB).EQ.11) THEN
09588 C...Store documentation for user-defined processes
09589         BEZUP=(PUP(1,4)-PUP(2,4))/(PUP(1,4)+PUP(2,4))
09590         KUPPO(1)=MINT(83)+5
09591         KUPPO(2)=MINT(83)+6
09592         I=MINT(83)+6
09593         DO 450 IUP=3,NUP
09594           KUPPO(IUP)=0
09595           IF(MSTP(128).GE.2.AND.KUP(IUP,3).NE.0) THEN
09596             IDOC=IDOC-1
09597             MINT(4)=MINT(4)-1
09598             GOTO 450
09599           ENDIF
09600           I=I+1
09601           KUPPO(IUP)=I
09602           K(I,1)=21
09603           K(I,2)=KUP(IUP,2)
09604           K(I,3)=0
09605           IF(KUP(IUP,3).NE.0) K(I,3)=KUPPO(KUP(IUP,3))
09606           K(I,4)=0
09607           K(I,5)=0
09608           DO 440 J=1,5
09609             P(I,J)=PUP(IUP,J)
09610   440     CONTINUE
09611   450   CONTINUE
09612         CALL PYROBO(MINT(83)+7,MINT(83)+4+NUP,0D0,VINT(24),0D0,0D0,
09613      &  -BEZUP)
09614  
09615 C...Store final state partons for user-defined processes
09616         N=IPU2
09617         DO 470 IUP=3,NUP
09618           N=N+1
09619           K(N,1)=1
09620           IF(KUP(IUP,1).NE.1) K(N,1)=11
09621           K(N,2)=KUP(IUP,2)
09622           IF(MSTP(128).LE.0.OR.KUP(IUP,3).EQ.0) THEN
09623             K(N,3)=KUPPO(IUP)
09624           ELSE
09625             K(N,3)=MINT(84)+KUP(IUP,3)
09626           ENDIF
09627           K(N,4)=0
09628           K(N,5)=0
09629           DO 460 J=1,5
09630             P(N,J)=PUP(IUP,J)
09631   460     CONTINUE
09632   470   CONTINUE
09633         CALL PYROBO(IPU3,N,0D0,VINT(24),0D0,0D0,-BEZUP)
09634  
09635 C...Arrange colour flow for user-defined processes
09636         N=MINT(84)
09637         DO 480 IUP=1,NUP
09638           N=N+1
09639           IF(KCHG(PYCOMP(K(N,2)),2).EQ.0) GOTO 480
09640           IF(K(N,1).EQ.1) K(N,1)=3
09641           IF(K(N,1).EQ.11) K(N,1)=14
09642           IF(KUP(IUP,4).NE.0) K(N,4)=K(N,4)+MSTU(5)*(KUP(IUP,4)+
09643      &    MINT(84))
09644           IF(KUP(IUP,5).NE.0) K(N,5)=K(N,5)+MSTU(5)*(KUP(IUP,5)+
09645      &    MINT(84))
09646           IF(KUP(IUP,6).NE.0) K(N,4)=K(N,4)+KUP(IUP,6)+MINT(84)
09647           IF(KUP(IUP,7).NE.0) K(N,5)=K(N,5)+KUP(IUP,7)+MINT(84)
09648   480   CONTINUE
09649  
09650       ELSEIF(IDOC.EQ.7) THEN
09651 C...Resonance not decaying; store kinematics
09652         I=MINT(83)+7
09653         K(IPU3,1)=1
09654         K(IPU3,2)=KFRES
09655         K(IPU3,3)=I
09656         P(IPU3,4)=SHUSER
09657         P(IPU3,5)=SHUSER
09658         K(I,1)=21
09659         K(I,2)=KFRES
09660         P(I,4)=SHUSER
09661         P(I,5)=SHUSER
09662         N=IPU3
09663         MINT(21)=KFRES
09664         MINT(22)=0
09665  
09666 C...Special cases: colour flow in coloured resonances
09667         KCRES=PYCOMP(KFRES)
09668         IF(KCHG(KCRES,2).NE.0) THEN
09669           K(IPU3,1)=3
09670           DO 490 J=1,2
09671             JC=J
09672             IF(KCS.EQ.-1) JC=3-J
09673             IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
09674      &      MINT(84)+ICOL(KCC,1,JC)
09675             IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
09676      &      MINT(84)+ICOL(KCC,2,JC)
09677             IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU3,1).EQ.3) K(IPU3,J+3)=
09678      &      MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
09679   490     CONTINUE
09680         ELSE
09681           K(IPU1,4)=IPU2
09682           K(IPU1,5)=IPU2
09683           K(IPU2,4)=IPU1
09684           K(IPU2,5)=IPU1
09685         ENDIF
09686  
09687       ELSEIF(IDOC.EQ.8) THEN
09688 C...2 -> 2 processes: store outgoing partons in their CM-frame
09689         DO 500 JT=1,2
09690           I=MINT(84)+2+JT
09691           KCA=PYCOMP(MINT(20+JT))
09692           K(I,1)=1
09693           IF(KCHG(KCA,2).NE.0) K(I,1)=3
09694           K(I,2)=MINT(20+JT)
09695           K(I,3)=MINT(83)+IDOC+JT-2
09696           KFAA=IABS(K(I,2))
09697           IF(KFPR(ISUBSV,1+MOD(JS+JT,2)).NE.0) THEN
09698             P(I,5)=SQRT(VINT(63+MOD(JS+JT,2)))
09699           ELSE
09700             P(I,5)=PYMASS(K(I,2))
09701           ENDIF
09702           IF((KFAA.EQ.6.OR.KFAA.EQ.7.OR.KFAA.EQ.8).AND.
09703      &    P(I,5).LT.PARP(42)) P(I,5)=PYMASS(K(I,2))
09704   500   CONTINUE
09705         IF(P(IPU3,5)+P(IPU4,5).GE.SHR) THEN
09706           KFA1=IABS(MINT(21))
09707           KFA2=IABS(MINT(22))
09708           IF((KFA1.GT.3.AND.KFA1.NE.21).OR.(KFA2.GT.3.AND.KFA2.NE.21))
09709      &    THEN
09710             MINT(51)=1
09711             RETURN
09712           ENDIF
09713           P(IPU3,5)=0D0
09714           P(IPU4,5)=0D0
09715         ENDIF
09716         P(IPU3,4)=0.5D0*(SHR+(P(IPU3,5)**2-P(IPU4,5)**2)/SHR)
09717         P(IPU3,3)=SQRT(MAX(0D0,P(IPU3,4)**2-P(IPU3,5)**2))
09718         P(IPU4,4)=SHR-P(IPU3,4)
09719         P(IPU4,3)=-P(IPU3,3)
09720         N=IPU4
09721         MINT(7)=MINT(83)+7
09722         MINT(8)=MINT(83)+8
09723  
09724 C...Rotate outgoing partons using cos(theta)=(th-uh)/lam(sh,sqm3,sqm4)
09725         CALL PYROBO(IPU3,IPU4,ACOS(VINT(23)),VINT(24),0D0,0D0,0D0)
09726  
09727       ELSEIF(IDOC.EQ.9) THEN
09728 C...2 -> 3 processes: store outgoing partons in their CM frame
09729         DO 510 JT=1,2
09730           I=MINT(84)+2+JT
09731           KCA=PYCOMP(MINT(20+JT))
09732           K(I,1)=1
09733           IF(KCHG(KCA,2).NE.0) K(I,1)=3
09734           K(I,2)=MINT(20+JT)
09735           K(I,3)=MINT(83)+IDOC+JT-3
09736           IF(IABS(K(I,2)).LE.22) THEN
09737             P(I,5)=PYMASS(K(I,2))
09738           ELSE
09739             P(I,5)=SQRT(VINT(63+MOD(JS+JT,2)))
09740           ENDIF
09741           PT=SQRT(MAX(0D0,VINT(197+5*JT)-P(I,5)**2+VINT(196+5*JT)**2))
09742           P(I,1)=PT*COS(VINT(198+5*JT))
09743           P(I,2)=PT*SIN(VINT(198+5*JT))
09744   510   CONTINUE
09745         K(IPU5,1)=1
09746         K(IPU5,2)=KFRES
09747         K(IPU5,3)=MINT(83)+IDOC
09748         P(IPU5,5)=SHR
09749         P(IPU5,1)=-P(IPU3,1)-P(IPU4,1)
09750         P(IPU5,2)=-P(IPU3,2)-P(IPU4,2)
09751         PMS1=P(IPU3,5)**2+P(IPU3,1)**2+P(IPU3,2)**2
09752         PMS2=P(IPU4,5)**2+P(IPU4,1)**2+P(IPU4,2)**2
09753         PMS3=P(IPU5,5)**2+P(IPU5,1)**2+P(IPU5,2)**2
09754         PMT3=SQRT(PMS3)
09755         P(IPU5,3)=PMT3*SINH(VINT(211))
09756         P(IPU5,4)=PMT3*COSH(VINT(211))
09757         PMS12=(SHPR-P(IPU5,4))**2-P(IPU5,3)**2
09758         SQL12=(PMS12-PMS1-PMS2)**2-4D0*PMS1*PMS2
09759         IF(SQL12.LE.0D0) THEN
09760           MINT(51)=1
09761           RETURN
09762         ENDIF
09763         P(IPU3,3)=(-P(IPU5,3)*(PMS12+PMS1-PMS2)+
09764      &  VINT(213)*(SHPR-P(IPU5,4))*SQRT(SQL12))/(2D0*PMS12)
09765         P(IPU4,3)=-P(IPU3,3)-P(IPU5,3)
09766         P(IPU3,4)=SQRT(PMS1+P(IPU3,3)**2)
09767         P(IPU4,4)=SQRT(PMS2+P(IPU4,3)**2)
09768         MINT(23)=KFRES
09769         N=IPU5
09770         MINT(7)=MINT(83)+7
09771         MINT(8)=MINT(83)+8
09772  
09773       ELSEIF(IDOC.EQ.11) THEN
09774 C...Z0 + Z0 -> h0, W+ + W- -> h0: store Higgs and outgoing partons
09775         PHI(1)=PARU(2)*PYR(0)
09776         PHI(2)=PHI(1)-PHIR
09777         DO 520 JT=1,2
09778           I=MINT(84)+2+JT
09779           K(I,1)=1
09780           IF(KCHG(PYCOMP(MINT(20+JT)),2).NE.0) K(I,1)=3
09781           K(I,2)=MINT(20+JT)
09782           K(I,3)=MINT(83)+IDOC+JT-2
09783           P(I,5)=PYMASS(K(I,2))
09784           IF(0.5D0*SHPR*Z(JT).LE.P(I,5)) THEN
09785             MINT(51)=1
09786             RETURN
09787           ENDIF
09788           PABS=SQRT(MAX(0D0,(0.5D0*SHPR*Z(JT))**2-P(I,5)**2))
09789           PTABS=PABS*SQRT(MAX(0D0,1D0-CTHE(JT)**2))
09790           P(I,1)=PTABS*COS(PHI(JT))
09791           P(I,2)=PTABS*SIN(PHI(JT))
09792           P(I,3)=PABS*CTHE(JT)*(-1)**(JT+1)
09793           P(I,4)=0.5D0*SHPR*Z(JT)
09794           IZW=MINT(83)+6+JT
09795           K(IZW,1)=21
09796           K(IZW,2)=23
09797           IF(ISUB.EQ.8) K(IZW,2)=ISIGN(24,PYCHGE(MINT(14+JT)))
09798           K(IZW,3)=IZW-2
09799           P(IZW,1)=-P(I,1)
09800           P(IZW,2)=-P(I,2)
09801           P(IZW,3)=(0.5D0*SHPR-PABS*CTHE(JT))*(-1)**(JT+1)
09802           P(IZW,4)=0.5D0*SHPR*(1D0-Z(JT))
09803           P(IZW,5)=-SQRT(MAX(0D0,P(IZW,3)**2+PTABS**2-P(IZW,4)**2))
09804   520   CONTINUE
09805         I=MINT(83)+9
09806         K(IPU5,1)=1
09807         K(IPU5,2)=KFRES
09808         K(IPU5,3)=I
09809         P(IPU5,5)=SHR
09810         P(IPU5,1)=-P(IPU3,1)-P(IPU4,1)
09811         P(IPU5,2)=-P(IPU3,2)-P(IPU4,2)
09812         P(IPU5,3)=-P(IPU3,3)-P(IPU4,3)
09813         P(IPU5,4)=SHPR-P(IPU3,4)-P(IPU4,4)
09814         K(I,1)=21
09815         K(I,2)=KFRES
09816         DO 530 J=1,5
09817           P(I,J)=P(IPU5,J)
09818   530   CONTINUE
09819         N=IPU5
09820         MINT(23)=KFRES
09821  
09822       ELSEIF(IDOC.EQ.12) THEN
09823 C...Z0 and W+/- scattering: store bosons and outgoing partons
09824         PHI(1)=PARU(2)*PYR(0)
09825         PHI(2)=PHI(1)-PHIR
09826         JTRAN=INT(1.5D0+PYR(0))
09827         DO 540 JT=1,2
09828           I=MINT(84)+2+JT
09829           K(I,1)=1
09830           IF(KCHG(PYCOMP(MINT(20+JT)),2).NE.0) K(I,1)=3
09831           K(I,2)=MINT(20+JT)
09832           K(I,3)=MINT(83)+IDOC+JT-2
09833           P(I,5)=PYMASS(K(I,2))
09834           IF(0.5D0*SHPR*Z(JT).LE.P(I,5)) P(I,5)=0D0
09835           PABS=SQRT(MAX(0D0,(0.5D0*SHPR*Z(JT))**2-P(I,5)**2))
09836           PTABS=PABS*SQRT(MAX(0D0,1D0-CTHE(JT)**2))
09837           P(I,1)=PTABS*COS(PHI(JT))
09838           P(I,2)=PTABS*SIN(PHI(JT))
09839           P(I,3)=PABS*CTHE(JT)*(-1)**(JT+1)
09840           P(I,4)=0.5D0*SHPR*Z(JT)
09841           IZW=MINT(83)+6+JT
09842           K(IZW,1)=21
09843           IF(MINT(14+JT).EQ.MINT(20+JT)) THEN
09844             K(IZW,2)=23
09845           ELSE
09846             K(IZW,2)=ISIGN(24,PYCHGE(MINT(14+JT))-PYCHGE(MINT(20+JT)))
09847           ENDIF
09848           K(IZW,3)=IZW-2
09849           P(IZW,1)=-P(I,1)
09850           P(IZW,2)=-P(I,2)
09851           P(IZW,3)=(0.5D0*SHPR-PABS*CTHE(JT))*(-1)**(JT+1)
09852           P(IZW,4)=0.5D0*SHPR*(1D0-Z(JT))
09853           P(IZW,5)=-SQRT(MAX(0D0,P(IZW,3)**2+PTABS**2-P(IZW,4)**2))
09854           IPU=MINT(84)+4+JT
09855           K(IPU,1)=3
09856           K(IPU,2)=KFPR(ISUB,JT)
09857           IF(ISUB.EQ.72.AND.JT.EQ.JTRAN) K(IPU,2)=-K(IPU,2)
09858           IF(ISUB.EQ.73.OR.ISUB.EQ.77) K(IPU,2)=K(IZW,2)
09859           K(IPU,3)=MINT(83)+8+JT
09860           IF(IABS(K(IPU,2)).LE.10.OR.K(IPU,2).EQ.21) THEN
09861             P(IPU,5)=PYMASS(K(IPU,2))
09862           ELSE
09863             P(IPU,5)=SQRT(VINT(63+MOD(JS+JT,2)))
09864           ENDIF
09865           MINT(22+JT)=K(IPU,2)
09866   540   CONTINUE
09867 C...Find rotation and boost for hard scattering subsystem
09868         I1=MINT(83)+7
09869         I2=MINT(83)+8
09870         BEXCM=(P(I1,1)+P(I2,1))/(P(I1,4)+P(I2,4))
09871         BEYCM=(P(I1,2)+P(I2,2))/(P(I1,4)+P(I2,4))
09872         BEZCM=(P(I1,3)+P(I2,3))/(P(I1,4)+P(I2,4))
09873         GAMCM=(P(I1,4)+P(I2,4))/SHR
09874         BEPCM=BEXCM*P(I1,1)+BEYCM*P(I1,2)+BEZCM*P(I1,3)
09875         PX=P(I1,1)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEXCM
09876         PY=P(I1,2)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEYCM
09877         PZ=P(I1,3)+GAMCM*(GAMCM/(1D0+GAMCM)*BEPCM-P(I1,4))*BEZCM
09878         THECM=PYANGL(PZ,SQRT(PX**2+PY**2))
09879         PHICM=PYANGL(PX,PY)
09880 C...Store hard scattering subsystem. Rotate and boost it
09881         SQLAM=(SH-P(IPU5,5)**2-P(IPU6,5)**2)**2-4D0*P(IPU5,5)**2*
09882      &  P(IPU6,5)**2
09883         PABS=SQRT(MAX(0D0,SQLAM/(4D0*SH)))
09884         CTHWZ=VINT(23)
09885         STHWZ=SQRT(MAX(0D0,1D0-CTHWZ**2))
09886         PHIWZ=VINT(24)-PHICM
09887         P(IPU5,1)=PABS*STHWZ*COS(PHIWZ)
09888         P(IPU5,2)=PABS*STHWZ*SIN(PHIWZ)
09889         P(IPU5,3)=PABS*CTHWZ
09890         P(IPU5,4)=SQRT(PABS**2+P(IPU5,5)**2)
09891         P(IPU6,1)=-P(IPU5,1)
09892         P(IPU6,2)=-P(IPU5,2)
09893         P(IPU6,3)=-P(IPU5,3)
09894         P(IPU6,4)=SQRT(PABS**2+P(IPU6,5)**2)
09895         CALL PYROBO(IPU5,IPU6,THECM,PHICM,BEXCM,BEYCM,BEZCM)
09896         DO 560 JT=1,2
09897           I1=MINT(83)+8+JT
09898           I2=MINT(84)+4+JT
09899           K(I1,1)=21
09900           K(I1,2)=K(I2,2)
09901           DO 550 J=1,5
09902             P(I1,J)=P(I2,J)
09903   550     CONTINUE
09904   560   CONTINUE
09905         N=IPU6
09906         MINT(7)=MINT(83)+9
09907         MINT(8)=MINT(83)+10
09908       ENDIF
09909  
09910       IF(ISET(ISUB).EQ.11) THEN
09911       ELSEIF(IDOC.GE.8) THEN
09912 C...Store colour connection indices
09913         DO 570 J=1,2
09914           JC=J
09915           IF(KCS.EQ.-1) JC=3-J
09916           IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
09917      &    K(IPU1,J+3)+MINT(84)+ICOL(KCC,1,JC)
09918           IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
09919      &    K(IPU2,J+3)+MINT(84)+ICOL(KCC,2,JC)
09920           IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU3,1).EQ.3) K(IPU3,J+3)=
09921      &    MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
09922           IF(ICOL(KCC,4,JC).NE.0.AND.K(IPU4,1).EQ.3) K(IPU4,J+3)=
09923      &    MSTU(5)*(MINT(84)+ICOL(KCC,4,JC))
09924   570   CONTINUE
09925  
09926 C...Copy outgoing partons to documentation lines
09927         IMAX=2
09928         IF(IDOC.EQ.9) IMAX=3
09929         DO 590 I=1,IMAX
09930           I1=MINT(83)+IDOC-IMAX+I
09931           I2=MINT(84)+2+I
09932           K(I1,1)=21
09933           K(I1,2)=K(I2,2)
09934           IF(IDOC.LE.9) K(I1,3)=0
09935           IF(IDOC.GE.11) K(I1,3)=MINT(83)+2+I
09936           DO 580 J=1,5
09937             P(I1,J)=P(I2,J)
09938   580     CONTINUE
09939   590   CONTINUE
09940  
09941       ELSEIF(IDOC.EQ.9) THEN
09942 C...Store colour connection indices
09943         DO 600 J=1,2
09944           JC=J
09945           IF(KCS.EQ.-1) JC=3-J
09946           IF(ICOL(KCC,1,JC).NE.0.AND.K(IPU1,1).EQ.14) K(IPU1,J+3)=
09947      &    K(IPU1,J+3)+MINT(84)+ICOL(KCC,1,JC)+
09948      &    MAX(0,MIN(1,ICOL(KCC,1,JC)-2))
09949           IF(ICOL(KCC,2,JC).NE.0.AND.K(IPU2,1).EQ.14) K(IPU2,J+3)=
09950      &    K(IPU2,J+3)+MINT(84)+ICOL(KCC,2,JC)+
09951      &    MAX(0,MIN(1,ICOL(KCC,2,JC)-2))
09952           IF(ICOL(KCC,3,JC).NE.0.AND.K(IPU4,1).EQ.3) K(IPU4,J+3)=
09953      &    MSTU(5)*(MINT(84)+ICOL(KCC,3,JC))
09954           IF(ICOL(KCC,4,JC).NE.0.AND.K(IPU5,1).EQ.3) K(IPU5,J+3)=
09955      &    MSTU(5)*(MINT(84)+ICOL(KCC,4,JC))
09956   600   CONTINUE
09957  
09958 C...Copy outgoing partons to documentation lines
09959         DO 620 I=1,3
09960           I1=MINT(83)+IDOC-3+I
09961           I2=MINT(84)+2+I
09962           K(I1,1)=21
09963           K(I1,2)=K(I2,2)
09964           K(I1,3)=0
09965           DO 610 J=1,5
09966             P(I1,J)=P(I2,J)
09967   610     CONTINUE
09968   620   CONTINUE
09969       ENDIF
09970  
09971 C...Low-pT events: remove gluons used for string drawing purposes
09972       IF(ISUB.EQ.95) THEN
09973         K(IPU3,1)=K(IPU3,1)+10
09974         K(IPU4,1)=K(IPU4,1)+10
09975         DO 630 J=41,66
09976           VINTSV(J)=VINT(J)
09977           VINT(J)=0D0
09978   630   CONTINUE
09979         DO 650 I=MINT(83)+5,MINT(83)+8
09980           DO 640 J=1,5
09981             P(I,J)=0D0
09982   640     CONTINUE
09983   650   CONTINUE
09984       ENDIF
09985  
09986       RETURN
09987       END
09988  
09989 C*********************************************************************
09990  
09991 C...PYSSPA
09992 C...Generates spacelike parton showers.
09993  
09994       SUBROUTINE PYSSPA(IPU1,IPU2)
09995  
09996 C...Double precision and integer declarations.
09997       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
09998       IMPLICIT INTEGER(I-N)
09999       INTEGER PYK,PYCHGE,PYCOMP
10000 C...Commonblocks.
10001       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
10002       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
10003       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
10004       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
10005       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
10006       COMMON/PYINT1/MINT(400),VINT(400)
10007       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
10008       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
10009       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,
10010      &/PYINT2/,/PYINT3/
10011 C...Local arrays and data.
10012       DIMENSION KFLS(4),IS(2),XS(2),ZS(2),Q2S(2),TEVCSV(2),TEVESV(2),
10013      &XFS(2,-25:25),XFA(-25:25),XFB(-25:25),XFN(-25:25),WTAPC(-25:25),
10014      &WTAPE(-25:25),WTSF(-25:25),THE2(2),ALAM(2),DQ2(3),DPC(3),DPD(4),
10015      &DPB(4),ROBO(5),MORE(2),KFBEAM(2),Q2MNCS(2),KCFI(2),NFIS(2),
10016      &THEFIS(2,2),ISFI(2)
10017       DATA IS/2*0/
10018  
10019 C...Read out basic information; set global Q^2 scale.
10020       IPUS1=IPU1
10021       IPUS2=IPU2
10022       ISUB=MINT(1)
10023       Q2MX=VINT(56)
10024       IF(ISET(ISUB).EQ.2) Q2MX=MIN(VINT(2),PARP(67)*VINT(56))
10025       MECOR=0
10026       IF(MSTP(68).EQ.1.AND.(ISUB.EQ.1.OR.ISUB.EQ.2.OR.
10027      &ISUB.EQ.141.OR.ISUB.EQ.142.OR.ISUB.EQ.144)) MECOR=1      
10028       FCQ2MX=1D0
10029  
10030 C...Initialize QCD evolution and check phase space.
10031       Q2MNC=PARP(62)**2
10032       Q2MNCS(1)=Q2MNC
10033       Q2MNCS(2)=Q2MNC
10034       IF(MINT(107).EQ.2.AND.MSTP(66).EQ.2) THEN
10035         Q0S=PARP(15)**2
10036         PS=VINT(3)**2
10037         Q2EFF=VINT(54)*((Q0S+PS)/(VINT(54)+PS))*
10038      &  EXP(PS*(VINT(54)-Q0S)/((VINT(54)+PS)*(Q0S+PS)))
10039         Q2INT=SQRT(Q0S*Q2EFF)
10040         Q2MNCS(1)=MAX(Q2MNC,Q2INT)
10041       ELSEIF(MINT(107).EQ.3.AND.MSTP(66).GE.1) THEN
10042         Q2MNCS(1)=MAX(Q2MNC,VINT(283))
10043       ENDIF 
10044       IF(MINT(108).EQ.2.AND.MSTP(66).EQ.2) THEN
10045         Q0S=PARP(15)**2
10046         PS=VINT(4)**2
10047         Q2EFF=VINT(54)*((Q0S+PS)/(VINT(54)+PS))*
10048      &  EXP(PS*(VINT(54)-Q0S)/((VINT(54)+PS)*(Q0S+PS)))
10049         Q2INT=SQRT(Q0S*Q2EFF)
10050         Q2MNCS(2)=MAX(Q2MNC,Q2INT)
10051       ELSEIF(MINT(108).EQ.3.AND.MSTP(66).GE.1) THEN
10052         Q2MNCS(2)=MAX(Q2MNC,VINT(284))
10053       ENDIF
10054       MCEV=0
10055       ALAMS=PARU(112)
10056       PARU(112)=PARP(61)
10057       FQ2C=1D0
10058       TCMX=0D0
10059       IF(MINT(47).GE.2.AND.(MINT(47).LT.5.OR.MSTP(12).GE.1)) THEN
10060         MCEV=1
10061         IF(MSTP(64).EQ.1) FQ2C=PARP(63)
10062         IF(MSTP(64).EQ.2) FQ2C=PARP(64)
10063         TCMX=LOG(FQ2C*Q2MX/PARP(61)**2)
10064         IF(Q2MX.LT.MAX(Q2MNC,2D0*PARP(61)**2).OR.TCMX.LT.0.2D0)
10065      &  MCEV=0
10066       ENDIF
10067  
10068 C...Initialize QED evolution and check phase space.
10069       MEEV=0
10070       XEE=1D-10
10071       SPME=PMAS(11,1)**2
10072       IF(IABS(MINT(11)).EQ.13.OR.IABS(MINT(12)).EQ.13)
10073      &SPME=PMAS(13,1)**2
10074       IF(IABS(MINT(11)).EQ.15.OR.IABS(MINT(12)).EQ.15)
10075      &SPME=PMAS(15,1)**2
10076       Q2MNE=MAX(PARP(68)**2,2D0*SPME)
10077       TEMX=0D0
10078       FWTE=10D0
10079       IF(MINT(45).EQ.3.OR.MINT(46).EQ.3) THEN
10080         MEEV=1
10081         TEMX=LOG(Q2MX/SPME)
10082         IF(Q2MX.LE.Q2MNE.OR.TEMX.LT.0.2D0) MEEV=0
10083       ENDIF
10084       IF(MCEV.EQ.0.AND.MEEV.EQ.0) RETURN
10085  
10086 C...Loopback point in case of failure to reconstruct kinematics.  
10087       NS=N
10088       LOOP=0
10089   100 LOOP=LOOP+1
10090       IF(LOOP.GT.100) THEN
10091         MINT(51)=1
10092         RETURN
10093       ENDIF
10094       N=NS
10095 
10096 C...Initial values: flavours, momenta, virtualities.
10097       DO 120 JT=1,2
10098         MORE(JT)=1
10099         KFBEAM(JT)=MINT(10+JT)
10100         IF(MINT(18+JT).EQ.1)KFBEAM(JT)=22
10101         KFLS(JT)=MINT(14+JT)
10102         KFLS(JT+2)=KFLS(JT)
10103         XS(JT)=VINT(40+JT)
10104         IF(MINT(18+JT).EQ.1) XS(JT)=VINT(40+JT)/VINT(154+JT)
10105         ZS(JT)=1D0
10106         Q2S(JT)=FCQ2MX*Q2MX
10107         TEVCSV(JT)=TCMX
10108         ALAM(JT)=PARP(61)
10109         THE2(JT)=1D0
10110         TEVESV(JT)=TEMX
10111         DO 110 KFL=-25,25
10112           XFS(JT,KFL)=XSFX(JT,KFL)
10113   110   CONTINUE
10114 C...Special kinematics check for c/b quarks (that g -> c cbar or
10115 C...b bbar kinematically possible).
10116       KFLCB=IABS(KFLS(JT))
10117       IF(KFBEAM(JT).NE.22.AND.(KFLCB.EQ.4.OR.KFLCB.EQ.5)) THEN
10118         IF(XS(JT).GT.0.9D0*Q2S(JT)/(PMAS(KFLCB,1)**2+Q2S(JT))) THEN
10119           MINT(51)=1
10120           RETURN
10121         ENDIF
10122       ENDIF 
10123   120 CONTINUE
10124       DSH=VINT(44)
10125       IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) DSH=VINT(26)*VINT(2)
10126  
10127 C...Find if interference with final state partons.
10128       MFIS=0
10129       IF(MSTP(67).GE.1.AND.MSTP(67).LE.3) MFIS=MSTP(67)
10130       IF(MFIS.NE.0) THEN
10131         DO 140 I=1,2
10132           KCFI(I)=0
10133           KCA=PYCOMP(IABS(KFLS(I)))
10134           IF(KCA.NE.0) KCFI(I)=KCHG(KCA,2)*ISIGN(1,KFLS(I))
10135           NFIS(I)=0
10136           IF(KCFI(I).NE.0) THEN
10137             IF(I.EQ.1) IPFS=IPUS1
10138             IF(I.EQ.2) IPFS=IPUS2
10139             DO 130 J=1,2
10140               ICSI=MOD(K(IPFS,3+J),MSTU(5))
10141               IF(ICSI.GT.0.AND.ICSI.NE.IPUS1.AND.ICSI.NE.IPUS2.AND.
10142      &        (KCFI(I).EQ.(-1)**(J+1).OR.KCFI(I).EQ.2)) THEN
10143                 NFIS(I)=NFIS(I)+1
10144                 THEFIS(I,NFIS(I))=PYANGL(P(ICSI,3),SQRT(P(ICSI,1)**2+
10145      &          P(ICSI,2)**2))
10146                 IF(I.EQ.2) THEFIS(I,NFIS(I))=PARU(1)-THEFIS(I,NFIS(I))
10147               ENDIF
10148   130       CONTINUE
10149           ENDIF
10150   140   CONTINUE
10151         IF(NFIS(1)+NFIS(2).EQ.0) MFIS=0
10152       ENDIF
10153  
10154 C...Pick up leg with highest virtuality.
10155   150 N=N+1
10156       JT=1
10157       IF(N.GT.NS+1.AND.Q2S(2).GT.Q2S(1)) JT=2
10158       IF(MORE(JT).EQ.0) JT=3-JT
10159       KFLB=KFLS(JT)
10160       XB=XS(JT)
10161       DO 160 KFL=-25,25
10162         XFB(KFL)=XFS(JT,KFL)
10163   160 CONTINUE
10164       DSHR=2D0*SQRT(DSH)
10165       DSHZ=DSH/ZS(JT)
10166  
10167 C...Check if allowed to branch.
10168       MCEV=0
10169       IF(IABS(KFLB).LE.10.OR.KFLB.EQ.21) THEN
10170         MCEV=1
10171         XEC=MAX(PARP(65)*DSHR/VINT(2),XB*(1D0/(1D0-PARP(66))-1D0))
10172         IF(XB.GE.1D0-2D0*XEC) MCEV=0
10173       ENDIF
10174       MEEV=0
10175       IF(MINT(44+JT).EQ.3) THEN
10176         MEEV=1
10177         IF(XB.GE.1D0-2D0*XEE) MEEV=0
10178         IF((IABS(KFLB).LE.10.OR.KFLB.EQ.21).AND.XB.GE.1D0-2D0*XEC)
10179      &  MEEV=0
10180 C***Currently kill QED shower for resolved photoproduction.
10181         IF(MINT(18+JT).EQ.1) MEEV=0
10182 C***Currently kill shower for W inside electron.
10183         IF(IABS(KFLB).EQ.24) THEN
10184           MCEV=0
10185           MEEV=0
10186         ENDIF
10187       ENDIF
10188       IF(MCEV.EQ.0.AND.MEEV.EQ.0) THEN
10189         Q2B=0D0
10190         GOTO 250
10191       ENDIF
10192  
10193 C...Maximum Q2 with or without Q2 ordering. Effective Lambda and n_f.
10194       Q2B=Q2S(JT)
10195       TEVCB=TEVCSV(JT)
10196       TEVEB=TEVESV(JT)
10197       IF(MSTP(62).LE.1) THEN
10198         IF(ZS(JT).GT.0.99999D0) THEN
10199           Q2B=Q2S(JT)
10200         ELSE
10201           Q2B=0.5D0*(1D0/ZS(JT)+1D0)*Q2S(JT)+0.5D0*(1D0/ZS(JT)-1D0)*
10202      &    (Q2S(3-JT)-DSH+SQRT((DSH+Q2S(1)+Q2S(2))**2+
10203      &    8D0*Q2S(1)*Q2S(2)*ZS(JT)/(1D0-ZS(JT))))
10204         ENDIF
10205         IF(MCEV.EQ.1) TEVCB=LOG(FQ2C*Q2B/ALAM(JT)**2)
10206         IF(MEEV.EQ.1) TEVEB=LOG(Q2B/SPME)
10207       ENDIF
10208       IF(MCEV.EQ.1) THEN
10209         ALSDUM=PYALPS(FQ2C*Q2B)
10210         TEVCB=TEVCB+2D0*LOG(ALAM(JT)/PARU(117))
10211         ALAM(JT)=PARU(117)
10212         B0=(33D0-2D0*MSTU(118))/6D0
10213       ENDIF
10214       TEVCBS=TEVCB
10215       TEVEBS=TEVEB
10216  
10217 C...Select side for interference with final state partons.
10218       IF(MFIS.GE.1.AND.N.LE.NS+2) THEN
10219         IFI=N-NS
10220         ISFI(IFI)=0
10221         IF(IABS(KCFI(IFI)).EQ.1.AND.NFIS(IFI).EQ.1) THEN
10222           ISFI(IFI)=1
10223         ELSEIF(KCFI(IFI).EQ.2.AND.NFIS(IFI).EQ.1) THEN
10224           IF(PYR(0).GT.0.5D0) ISFI(IFI)=1
10225         ELSEIF(KCFI(IFI).EQ.2.AND.NFIS(IFI).EQ.2) THEN
10226           ISFI(IFI)=1
10227           IF(PYR(0).GT.0.5D0) ISFI(IFI)=2
10228         ENDIF
10229       ENDIF
10230  
10231 C...Calculate Altarelli-Parisi weights.
10232       DO 170 KFL=-25,25
10233         WTAPC(KFL)=0D0
10234         WTAPE(KFL)=0D0
10235         WTSF(KFL)=0D0
10236   170 CONTINUE
10237 C...q -> q, g -> q.
10238       IF(IABS(KFLB).LE.10) THEN
10239         WTAPC(KFLB)=(8D0/3D0)*LOG((1D0-XEC-XB)*(XB+XEC)/(XEC*(1D0-XEC)))
10240         WTAPC(21)=0.5D0*(XB/(XB+XEC)-XB/(1D0-XEC))
10241         IF(MECOR.EQ.1.AND.(N.EQ.NS+1.OR.N.EQ.NS+2)) 
10242      &  WTAPC(21)=3D0*WTAPC(21)
10243 C...f -> f, gamma -> f.
10244       ELSEIF(IABS(KFLB).LE.20) THEN
10245         WTAPF1=LOG((1D0-XEE-XB)*(XB+XEE)/(XEE*(1D0-XEE)))
10246         WTAPF2=LOG((1D0-XEE-XB)*(1D0-XEE)/(XEE*(XB+XEE)))
10247         WTAPE(KFLB)=2D0*(WTAPF1+WTAPF2)
10248         IF(MSTP(12).GE.1) WTAPE(22)=XB/(XB+XEE)-XB/(1D0-XEE)
10249         IF(MECOR.EQ.1.AND.(N.EQ.NS+1.OR.N.EQ.NS+2)) 
10250      &  WTAPE(22)=3D0*WTAPE(22)
10251 C...f -> g, g -> g.
10252       ELSEIF(KFLB.EQ.21) THEN
10253         WTAPQ=(16D0/3D0)*(SQRT((1D0-XEC)/XB)-SQRT((XB+XEC)/XB))
10254         DO 180 KFL=1,MSTP(58)
10255           WTAPC(KFL)=WTAPQ
10256           WTAPC(-KFL)=WTAPQ
10257   180   CONTINUE
10258         WTAPC(21)=6D0*LOG((1D0-XEC-XB)/XEC)
10259 C...f -> gamma, W+, W-.
10260       ELSEIF(KFLB.EQ.22) THEN
10261         WTAPF=LOG((1D0-XEE-XB)*(1D0-XEE)/(XEE*(XB+XEE)))/XB
10262         WTAPE(11)=WTAPF
10263         WTAPE(-11)=WTAPF
10264       ELSEIF(KFLB.EQ.24) THEN
10265         WTAPE(-11)=1D0/(4D0*PARU(102))*LOG((1D0-XEE-XB)*(1D0-XEE)/
10266      &  (XEE*(XB+XEE)))/XB
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       ENDIF
10271  
10272 C...Calculate parton distribution weights and sum.
10273       NTRY=0
10274   190 NTRY=NTRY+1
10275       IF(NTRY.GT.500) THEN
10276         MINT(51)=1
10277         RETURN
10278       ENDIF
10279       WTSUMC=0D0
10280       WTSUME=0D0
10281       XFBO=MAX(1D-10,XFB(KFLB))
10282       DO 200 KFL=-25,25
10283         WTSF(KFL)=XFB(KFL)/XFBO
10284         WTSUMC=WTSUMC+WTAPC(KFL)*WTSF(KFL)
10285         WTSUME=WTSUME+WTAPE(KFL)*WTSF(KFL)
10286   200 CONTINUE
10287       WTSUMC=MAX(0.0001D0,WTSUMC)
10288       WTSUME=MAX(0.0001D0/FWTE,WTSUME)
10289  
10290 C...Choose new t: fix alpha_s, alpha_s(Q^2), alpha_s(k_T^2).
10291       NTRY2=0
10292   210 NTRY2=NTRY2+1
10293       IF(NTRY2.GT.500) THEN
10294         MINT(51)=1
10295         RETURN
10296       ENDIF
10297       IF(MCEV.EQ.1) THEN
10298         IF(MSTP(64).LE.0) THEN
10299           TEVCB=TEVCB+LOG(PYR(0))*PARU(2)/(PARU(111)*WTSUMC)
10300         ELSEIF(MSTP(64).EQ.1) THEN
10301           TEVCB=TEVCB*EXP(MAX(-50D0,LOG(PYR(0))*B0/WTSUMC))
10302         ELSE
10303           TEVCB=TEVCB*EXP(MAX(-50D0,LOG(PYR(0))*B0/(5D0*WTSUMC)))
10304         ENDIF
10305       ENDIF
10306       IF(MEEV.EQ.1) THEN
10307         TEVEB=TEVEB*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/
10308      &  (PARU(101)*FWTE*WTSUME*TEMX)))
10309       ENDIF
10310  
10311 C...Translate t into Q2 scale; choose between QCD and QED evolution.
10312   220 IF(MCEV.EQ.1) Q2CB=ALAM(JT)**2*EXP(MAX(-50D0,TEVCB))/FQ2C
10313       IF(MEEV.EQ.1) Q2EB=SPME*EXP(MAX(-50D0,TEVEB))
10314 C...Ensure that Q2 is above threshold for charm/bottom.
10315       KFLCB=IABS(KFLB) 
10316       IF(KFBEAM(JT).NE.22.AND.(KFLCB.EQ.4.OR.KFLCB.EQ.5).AND.
10317      &MCEV.EQ.1) THEN
10318         IF(Q2CB.LT.PMAS(KFLCB,1)**2) THEN
10319           Q2CB=1.1*PMAS(KFLCB,1)**2 
10320           TEVCB=LOG(FQ2C*Q2B/ALAM(JT)**2)
10321           FCQ2MX=MIN(2D0,1.05D0*FCQ2MX)
10322         ENDIF
10323       ENDIF
10324       MCE=0
10325       IF(MCEV.EQ.0.AND.MEEV.EQ.0) THEN
10326       ELSEIF(MCEV.EQ.1.AND.MEEV.EQ.0) THEN
10327         IF(Q2CB.GT.Q2MNCS(JT)) MCE=1
10328       ELSEIF(MCEV.EQ.0.AND.MEEV.EQ.1) THEN
10329         IF(Q2EB.GT.Q2MNE) MCE=2
10330       ELSEIF(Q2MNCS(JT).GT.Q2MNE) THEN
10331         MCE=1
10332         IF(Q2EB.GT.Q2CB.OR.Q2CB.LE.Q2MNCS(JT)) MCE=2
10333         IF(MCE.EQ.2.AND.Q2EB.LE.Q2MNE) MCE=0
10334       ELSE
10335         MCE=2
10336         IF(Q2CB.GT.Q2EB.OR.Q2EB.LE.Q2MNE) MCE=1
10337         IF(MCE.EQ.1.AND.Q2CB.LE.Q2MNCS(JT)) MCE=0
10338       ENDIF
10339  
10340 C...Evolution possibly ended. Update t values.
10341       IF(MCE.EQ.0) THEN
10342         Q2B=0D0
10343         GOTO 250
10344       ELSEIF(MCE.EQ.1) THEN
10345         Q2B=Q2CB
10346         Q2REF=FQ2C*Q2B
10347         IF(MEEV.EQ.1) TEVEB=LOG(Q2B/SPME)
10348       ELSE
10349         Q2B=Q2EB
10350         Q2REF=Q2B
10351         IF(MCEV.EQ.1) TEVCB=LOG(FQ2C*Q2B/ALAM(JT)**2)
10352       ENDIF
10353  
10354 C...Select flavour for branching parton.
10355       IF(MCE.EQ.1) WTRAN=PYR(0)*WTSUMC
10356       IF(MCE.EQ.2) WTRAN=PYR(0)*WTSUME
10357       KFLA=-25
10358   230 KFLA=KFLA+1
10359       IF(MCE.EQ.1) WTRAN=WTRAN-WTAPC(KFLA)*WTSF(KFLA)
10360       IF(MCE.EQ.2) WTRAN=WTRAN-WTAPE(KFLA)*WTSF(KFLA)
10361       IF(KFLA.LE.24.AND.WTRAN.GT.0D0) GOTO 230
10362       IF(KFLA.EQ.25) THEN
10363         Q2B=0D0
10364         GOTO 250
10365       ENDIF
10366  
10367 C...Choose z value and corrective weight.
10368       WTZ=0D0
10369 C...q -> q + g.
10370       IF(IABS(KFLA).LE.10.AND.IABS(KFLB).LE.10) THEN
10371         Z=1D0-((1D0-XB-XEC)/(1D0-XEC))*
10372      &  (XEC*(1D0-XEC)/((XB+XEC)*(1D0-XB-XEC)))**PYR(0)
10373         WTZ=0.5D0*(1D0+Z**2)
10374 C...q -> g + q.
10375       ELSEIF(IABS(KFLA).LE.10.AND.KFLB.EQ.21) THEN
10376         Z=XB/(SQRT(XB+XEC)+PYR(0)*(SQRT(1D0-XEC)-SQRT(XB+XEC)))**2
10377         WTZ=0.5D0*(1D0+(1D0-Z)**2)*SQRT(Z)
10378 C...f -> f + gamma.
10379       ELSEIF(IABS(KFLA).LE.20.AND.IABS(KFLB).LE.20) THEN
10380         IF(WTAPF1.GT.PYR(0)*(WTAPF1+WTAPF2)) THEN
10381           Z=1D0-((1D0-XB-XEE)/(1D0-XEE))*
10382      &    (XEE*(1D0-XEE)/((XB+XEE)*(1D0-XB-XEE)))**PYR(0)
10383         ELSE
10384           Z=XB+XB*(XEE/(1D0-XEE))*
10385      &    ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
10386         ENDIF
10387         WTZ=0.5D0*(1D0+Z**2)*(Z-XB)/(1D0-XB)
10388 C...f -> gamma + f.
10389       ELSEIF(IABS(KFLA).LE.20.AND.KFLB.EQ.22) THEN
10390         Z=XB+XB*(XEE/(1D0-XEE))*
10391      &  ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
10392         WTZ=0.5D0*(1D0+(1D0-Z)**2)*XB*(Z-XB)/Z
10393 C...f -> W+- + f'.
10394       ELSEIF(IABS(KFLA).LE.20.AND.IABS(KFLB).EQ.24) THEN
10395         Z=XB+XB*(XEE/(1D0-XEE))*
10396      &  ((1D0-XB-XEE)*(1D0-XEE)/(XEE*(XB+XEE)))**PYR(0)
10397         WTZ=0.5D0*(1D0+(1D0-Z)**2)*(XB*(Z-XB)/Z)*
10398      &  (Q2B/(Q2B+PMAS(24,1)**2))
10399 C...g -> q + qbar.
10400       ELSEIF(KFLA.EQ.21.AND.IABS(KFLB).LE.10) THEN
10401         Z=XB/(1D0-XEC)+PYR(0)*(XB/(XB+XEC)-XB/(1D0-XEC))
10402         WTZ=1D0-2D0*Z*(1D0-Z)
10403 C...g -> g + g.
10404       ELSEIF(KFLA.EQ.21.AND.KFLB.EQ.21) THEN
10405         Z=1D0/(1D0+((1D0-XEC-XB)/XB)*(XEC/(1D0-XEC-XB))**PYR(0))
10406         WTZ=(1D0-Z*(1D0-Z))**2
10407 C...gamma -> f + fbar.
10408       ELSEIF(KFLA.EQ.22.AND.IABS(KFLB).LE.20) THEN
10409         Z=XB/(1D0-XEE)+PYR(0)*(XB/(XB+XEE)-XB/(1D0-XEE))
10410         WTZ=1D0-2D0*Z*(1D0-Z)
10411       ENDIF
10412       IF(MCE.EQ.2) WTZ=(WTZ/FWTE)*(TEVEB/TEMX)
10413  
10414 C...Option with resummation of soft gluon emission as effective z shift.
10415       IF(MCE.EQ.1) THEN
10416         IF(MSTP(65).GE.1) THEN
10417           RSOFT=6D0
10418           IF(KFLB.NE.21) RSOFT=8D0/3D0
10419           Z=Z*(TEVCB/TEVCSV(JT))**(RSOFT*XEC/((XB+XEC)*B0))
10420           IF(Z.LE.XB) GOTO 210
10421         ENDIF
10422  
10423 C...Option with alpha_s(k_T^2): demand k_T^2 > cutoff, reweight.
10424         IF(MSTP(64).GE.2) THEN
10425           IF((1D0-Z)*Q2B.LT.Q2MNCS(JT)) GOTO 210
10426           ALPRAT=TEVCB/(TEVCB+LOG(1D0-Z))
10427           IF(ALPRAT.LT.5D0*PYR(0)) GOTO 210
10428           IF(ALPRAT.GT.5D0) WTZ=WTZ*ALPRAT/5D0
10429         ENDIF
10430       ENDIF 
10431 
10432 C...Remove kinematically impossible branchings.
10433       UHAT=Q2B-DSH*(1D0-Z)/Z
10434       IF(MSTP(68).GE.0.AND.UHAT.GT.0D0) GOTO 210
10435 
10436 C...Matrix-element corrections for s-channel resonance production.
10437       IF(MECOR.EQ.1.AND.(N.EQ.NS+1.OR.N.EQ.NS+2)) THEN
10438         SHAT=DSH/Z
10439         THAT=-Q2B
10440         IF(IABS(KFLA).LE.20.AND.IABS(KFLB).LE.20) THEN
10441           RMEPS=(THAT**2+UHAT**2+2D0*DSH*SHAT)/(SHAT**2+DSH**2)
10442           WTZ=WTZ*RMEPS
10443         ELSEIF((KFLA.EQ.21.OR.KFLA.EQ.22).AND.IABS(KFLB).LE.20) THEN
10444           RMEPS=(SHAT**2+UHAT**2+2D0*DSH*THAT)/((SHAT-DSH)**2+DSH**2)
10445           WTZ=WTZ*RMEPS/3D0
10446         ENDIF 
10447       ENDIF
10448  
10449 C...Impose angular constraint in first branching from interference
10450 C...with final state partons.
10451       IF(MCE.EQ.1) THEN
10452         IF(MFIS.GE.1.AND.N.LE.NS+2.AND.NTRY2.LT.200) THEN
10453           THE2D=(4D0*Q2B)/(DSH*(1D0-Z))
10454           IF(N.EQ.NS+1.AND.ISFI(1).GE.1) THEN
10455             IF(THE2D.GT.THEFIS(1,ISFI(1))**2) GOTO 210
10456           ELSEIF(N.EQ.NS+2.AND.ISFI(2).GE.1) THEN
10457             IF(THE2D.GT.THEFIS(2,ISFI(2))**2) GOTO 210
10458           ENDIF
10459         ENDIF
10460  
10461 C...Option with angular ordering requirement.
10462         IF(MSTP(62).GE.3.AND.NTRY2.LT.200) THEN
10463           THE2T=(4D0*Z**2*Q2B)/(4D0*Z**2*Q2B+(1D0-Z)*XB**2*VINT(2))
10464           IF(THE2T.GT.THE2(JT)) GOTO 210
10465         ENDIF
10466       ENDIF
10467  
10468 C...Weighting with new parton distributions.
10469       MINT(105)=MINT(102+JT)
10470       MINT(109)=MINT(106+JT)
10471       VINT(120)=VINT(2+JT)
10472       IF(MSTP(57).LE.1) THEN
10473         CALL PYPDFU(KFBEAM(JT),XB,Q2REF,XFN)
10474       ELSE
10475         CALL PYPDFL(KFBEAM(JT),XB,Q2REF,XFN)
10476       ENDIF
10477       XFBN=XFN(KFLB)
10478       IF(XFBN.LT.1D-20) THEN
10479         IF(KFLA.EQ.KFLB) THEN
10480           TEVCB=TEVCBS
10481           TEVEB=TEVEBS
10482           WTAPC(KFLB)=0D0
10483           WTAPE(KFLB)=0D0
10484           GOTO 190
10485         ELSEIF(MCE.EQ.1.AND.TEVCBS-TEVCB.GT.0.2D0) THEN
10486           TEVCB=0.5D0*(TEVCBS+TEVCB)
10487           GOTO 220
10488         ELSEIF(MCE.EQ.2.AND.TEVEBS-TEVEB.GT.0.2D0) THEN
10489           TEVEB=0.5D0*(TEVEBS+TEVEB)
10490           GOTO 220
10491         ELSE
10492           XFBN=1D-10
10493           XFN(KFLB)=XFBN
10494         ENDIF
10495       ENDIF
10496       DO 240 KFL=-25,25
10497         XFB(KFL)=XFN(KFL)
10498   240 CONTINUE
10499       XA=XB/Z
10500       IF(MSTP(57).LE.1) THEN
10501         CALL PYPDFU(KFBEAM(JT),XA,Q2REF,XFA)
10502       ELSE
10503         CALL PYPDFL(KFBEAM(JT),XA,Q2REF,XFA)
10504       ENDIF
10505       XFAN=XFA(KFLA)
10506       IF(XFAN.LT.1D-20) GOTO 190
10507       WTSFA=WTSF(KFLA)
10508       IF(WTZ*XFAN/XFBN.LT.PYR(0)*WTSFA) GOTO 190
10509  
10510 C...Define two hard scatterers in their CM-frame.
10511   250 IF(N.EQ.NS+2) THEN
10512         DQ2(JT)=Q2B
10513         DPLCM=SQRT((DSH+DQ2(1)+DQ2(2))**2-4D0*DQ2(1)*DQ2(2))/DSHR
10514         DO 270 JR=1,2
10515           I=NS+JR
10516           IF(JR.EQ.1) IPO=IPUS1
10517           IF(JR.EQ.2) IPO=IPUS2
10518           DO 260 J=1,5
10519             K(I,J)=0
10520             P(I,J)=0D0
10521             V(I,J)=0D0
10522   260     CONTINUE
10523           K(I,1)=14
10524           K(I,2)=KFLS(JR+2)
10525           K(I,4)=IPO
10526           K(I,5)=IPO
10527           P(I,3)=DPLCM*(-1)**(JR+1)
10528           P(I,4)=(DSH+DQ2(3-JR)-DQ2(JR))/DSHR
10529           P(I,5)=-SQRT(DQ2(JR))
10530           K(IPO,1)=14
10531           K(IPO,3)=I
10532           K(IPO,4)=MOD(K(IPO,4),MSTU(5))+MSTU(5)*I
10533           K(IPO,5)=MOD(K(IPO,5),MSTU(5))+MSTU(5)*I
10534   270   CONTINUE
10535  
10536 C...Find maximum allowed mass of timelike parton.
10537       ELSEIF(N.GT.NS+2) THEN
10538         JR=3-JT
10539         DQ2(3)=Q2B
10540         DPC(1)=P(IS(1),4)
10541         DPC(2)=P(IS(2),4)
10542         DPC(3)=0.5D0*(ABS(P(IS(1),3))+ABS(P(IS(2),3)))
10543         DPD(1)=DSH+DQ2(JR)+DQ2(JT)
10544         DPD(2)=DSHZ+DQ2(JR)+DQ2(3)
10545         DPD(3)=SQRT(DPD(1)**2-4D0*DQ2(JR)*DQ2(JT))
10546         DPD(4)=SQRT(DPD(2)**2-4D0*DQ2(JR)*DQ2(3))
10547         IKIN=0
10548         IF(Q2S(JR).GE.0.25D0*Q2MNC.AND.DPD(1)-DPD(3).GE.
10549      &  1D-10*DPD(1)) IKIN=1
10550         IF(IKIN.EQ.0) DMSMA=(DQ2(JT)/ZS(JT)-DQ2(3))*
10551      &  (DSH/(DSH+DQ2(JT))-DSH/(DSHZ+DQ2(3)))
10552         IF(IKIN.EQ.1) DMSMA=(DPD(1)*DPD(2)-DPD(3)*DPD(4))/
10553      &  (2D0*DQ2(JR))-DQ2(JT)-DQ2(3)
10554  
10555 C...Generate timelike parton shower (if required).
10556         IT=N
10557         DO 280 J=1,5
10558           K(IT,J)=0
10559           P(IT,J)=0D0
10560           V(IT,J)=0D0
10561   280   CONTINUE
10562 C...f -> f + g (gamma).
10563         IF(IABS(KFLB).LE.20.AND.IABS(KFLS(JT+2)).LE.20) THEN
10564           K(IT,2)=21
10565           IF(IABS(KFLB).GE.11) K(IT,2)=22
10566 C...f -> g (gamma, W+-) + f.
10567         ELSEIF(IABS(KFLB).LE.20.AND.IABS(KFLS(JT+2)).GT.20) THEN
10568           K(IT,2)=KFLB
10569           IF(KFLS(JT+2).EQ.24) THEN
10570             K(IT,2)=-12
10571           ELSEIF(KFLS(JT+2).EQ.-24) THEN
10572             K(IT,2)=12
10573           ENDIF
10574 C...g (gamma) -> f + fbar, g + g.
10575         ELSE
10576           K(IT,2)=-KFLS(JT+2)
10577           IF(KFLS(JT+2).GT.20) K(IT,2)=KFLS(JT+2)
10578         ENDIF
10579         K(IT,1)=3
10580         IF((IABS(K(IT,2)).GE.11.AND.IABS(K(IT,2)).LE.18).OR.
10581      &  IABS(K(IT,2)).EQ.22) K(IT,1)=1
10582         P(IT,5)=PYMASS(K(IT,2))
10583         IF(DMSMA.LE.P(IT,5)**2) GOTO 100
10584         IF(MSTP(63).GE.1.AND.MCE.EQ.1) THEN
10585           MSTJ48=MSTJ(48)
10586           PARJ85=PARJ(85)
10587           P(IT,4)=(DSHZ-DSH-P(IT,5)**2)/DSHR
10588           P(IT,3)=SQRT(P(IT,4)**2-P(IT,5)**2)
10589           IF(MSTP(63).EQ.1) THEN
10590             Q2TIM=DMSMA
10591           ELSEIF(MSTP(63).EQ.2) THEN
10592             Q2TIM=MIN(DMSMA,PARP(71)*Q2S(JT))
10593           ELSE
10594             Q2TIM=DMSMA
10595             MSTJ(48)=1
10596             IF(IKIN.EQ.0) DPT2=DMSMA*(DSHZ+DQ2(3))/(DSH+DQ2(JT))
10597             IF(IKIN.EQ.1) DPT2=DMSMA*(0.5D0*DPD(1)*DPD(2)+0.5D0*DPD(3)*
10598      &      DPD(4)-DQ2(JR)*(DQ2(JT)+DQ2(3)))/(4D0*DSH*DPC(3)**2)
10599             PARJ(85)=SQRT(MAX(0D0,DPT2))*
10600      &      (1D0/P(IT,4)+1D0/P(IS(JT),4))
10601           ENDIF
10602           CALL PYSHOW(IT,0,SQRT(Q2TIM))
10603           MSTJ(48)=MSTJ48
10604           PARJ(85)=PARJ85
10605           IF(N.GE.IT+1) P(IT,5)=P(IT+1,5)
10606         ENDIF
10607  
10608 C...Reconstruct kinematics of branching: timelike parton shower.
10609         DMS=P(IT,5)**2
10610         IF(IKIN.EQ.0) DPT2=(DMSMA-DMS)*(DSHZ+DQ2(3))/(DSH+DQ2(JT))
10611         IF(IKIN.EQ.1) DPT2=(DMSMA-DMS)*(0.5D0*DPD(1)*DPD(2)+
10612      &  0.5D0*DPD(3)*DPD(4)-DQ2(JR)*(DQ2(JT)+DQ2(3)+DMS))/
10613      &  (4D0*DSH*DPC(3)**2)
10614         IF(DPT2.LT.0D0) GOTO 100
10615         DPB(1)=(0.5D0*DPD(2)-DPC(JR)*(DSHZ+DQ2(JR)-DQ2(JT)-DMS)/
10616      &  DSHR)/DPC(3)-DPC(3)
10617         P(IT,1)=SQRT(DPT2)
10618         P(IT,3)=DPB(1)*(-1)**(JT+1)
10619         P(IT,4)=SQRT(DPT2+DPB(1)**2+DMS)
10620         IF(N.GE.IT+1) THEN
10621           DPB(1)=SQRT(DPB(1)**2+DPT2)
10622           DPB(2)=SQRT(DPB(1)**2+DMS)
10623           DPB(3)=P(IT+1,3)
10624           DPB(4)=SQRT(DPB(3)**2+DMS)
10625           DBEZ=(DPB(4)*DPB(1)-DPB(3)*DPB(2))/(DPB(4)*DPB(2)-DPB(3)*
10626      &    DPB(1))
10627           CALL PYROBO(IT+1,N,0D0,0D0,0D0,0D0,DBEZ)
10628           THE=PYANGL(P(IT,3),P(IT,1))
10629           CALL PYROBO(IT+1,N,THE,0D0,0D0,0D0,0D0)
10630         ENDIF
10631  
10632 C...Reconstruct kinematics of branching: spacelike parton.
10633         DO 290 J=1,5
10634           K(N+1,J)=0
10635           P(N+1,J)=0D0
10636           V(N+1,J)=0D0
10637   290   CONTINUE
10638         K(N+1,1)=14
10639         K(N+1,2)=KFLB
10640         P(N+1,1)=P(IT,1)
10641         P(N+1,3)=P(IT,3)+P(IS(JT),3)
10642         P(N+1,4)=P(IT,4)+P(IS(JT),4)
10643         P(N+1,5)=-SQRT(DQ2(3))
10644  
10645 C...Define colour flow of branching.
10646         K(IS(JT),3)=N+1
10647         K(IT,3)=N+1
10648         IM1=N+1
10649         IM2=N+1
10650 C...f -> f + gamma (Z, W).
10651         IF(IABS(K(IT,2)).GE.22) THEN
10652           K(IT,1)=1
10653           ID1=IS(JT)
10654           ID2=IS(JT)
10655 C...f -> gamma (Z, W) + f.
10656         ELSEIF(IABS(K(IS(JT),2)).GE.22) THEN
10657           ID1=IT
10658           ID2=IT
10659 C...gamma -> q + qbar, g + g.
10660         ELSEIF(K(N+1,2).EQ.22) THEN
10661           ID1=IS(JT)
10662           ID2=IT
10663           IM1=ID2
10664           IM2=ID1
10665 C...q -> q + g.
10666         ELSEIF(K(N+1,2).GT.0.AND.K(N+1,2).NE.21.AND.K(IT,2).EQ.21) THEN
10667           ID1=IT
10668           ID2=IS(JT)
10669 C...q -> g + q.
10670         ELSEIF(K(N+1,2).GT.0.AND.K(N+1,2).NE.21) THEN
10671           ID1=IS(JT)
10672           ID2=IT
10673 C...qbar -> qbar + g.
10674         ELSEIF(K(N+1,2).LT.0.AND.K(IT,2).EQ.21) THEN
10675           ID1=IS(JT)
10676           ID2=IT
10677 C...qbar -> g + qbar.
10678         ELSEIF(K(N+1,2).LT.0) THEN
10679           ID1=IT
10680           ID2=IS(JT)
10681 C...g -> g + g; g -> q + qbar.
10682         ELSEIF((K(IT,2).EQ.21.AND.PYR(0).GT.0.5D0).OR.K(IT,2).LT.0) THEN
10683           ID1=IS(JT)
10684           ID2=IT
10685         ELSE
10686           ID1=IT
10687           ID2=IS(JT)
10688         ENDIF
10689         IF(IM1.EQ.N+1) K(IM1,4)=K(IM1,4)+ID1
10690         IF(IM2.EQ.N+1) K(IM2,5)=K(IM2,5)+ID2
10691         K(ID1,4)=K(ID1,4)+MSTU(5)*IM1
10692         K(ID2,5)=K(ID2,5)+MSTU(5)*IM2
10693         IF(ID1.NE.ID2) THEN
10694           K(ID1,5)=K(ID1,5)+MSTU(5)*ID2
10695           K(ID2,4)=K(ID2,4)+MSTU(5)*ID1
10696         ENDIF
10697         N=N+1
10698  
10699 C...Boost to new CM-frame.
10700         DBSVX=(P(N,1)+P(IS(JR),1))/(P(N,4)+P(IS(JR),4))
10701         DBSVZ=(P(N,3)+P(IS(JR),3))/(P(N,4)+P(IS(JR),4))
10702         IF(DBSVX**2+DBSVZ**2.GE.1D0) GOTO 100
10703         CALL PYROBO(NS+1,N,0D0,0D0,-DBSVX,0D0,-DBSVZ)
10704         IR=N+(JT-1)*(IS(1)-N)
10705         CALL PYROBO(NS+1,N,-PYANGL(P(IR,3),P(IR,1)),PARU(2)*PYR(0),
10706      &  0D0,0D0,0D0)
10707       ENDIF
10708  
10709 C...Update kinematics variables.
10710       IS(JT)=N
10711       DQ2(JT)=Q2B
10712       IF(MSTP(62).GE.3.AND.NTRY2.LT.200) THE2(JT)=THE2T
10713       DSH=DSHZ
10714  
10715 C...Save quantities; loop back.
10716       Q2S(JT)=Q2B
10717       IF((MCEV.EQ.1.AND.Q2B.GE.0.25D0*Q2MNC).OR.
10718      &(MEEV.EQ.1.AND.Q2B.GE.Q2MNE)) THEN
10719         KFLS(JT+2)=KFLS(JT)
10720         KFLS(JT)=KFLA
10721         XS(JT)=XA
10722         ZS(JT)=Z
10723         DO 300 KFL=-25,25
10724           XFS(JT,KFL)=XFA(KFL)
10725   300   CONTINUE
10726         TEVCSV(JT)=TEVCB
10727         TEVESV(JT)=TEVEB
10728       ELSE
10729         MORE(JT)=0
10730         IF(JT.EQ.1) IPU1=N
10731         IF(JT.EQ.2) IPU2=N
10732       ENDIF
10733       IF(N.GT.MSTU(4)-MSTU(32)-10) THEN
10734         CALL PYERRM(11,'(PYSSPA:) no more memory left in PYJETS')
10735         IF(MSTU(21).GE.1) N=NS
10736         IF(MSTU(21).GE.1) RETURN
10737       ENDIF
10738       IF(MORE(1).EQ.1.OR.MORE(2).EQ.1) GOTO 150
10739  
10740 C...Boost hard scattering partons to frame of shower initiators.
10741       DO 310 J=1,3
10742         ROBO(J+2)=(P(NS+1,J)+P(NS+2,J))/(P(NS+1,4)+P(NS+2,4))
10743   310 CONTINUE
10744       K(N+2,1)=1
10745       DO 320 J=1,5
10746         P(N+2,J)=P(NS+1,J)
10747   320 CONTINUE
10748       CALL PYROBO(N+2,N+2,0D0,0D0,-ROBO(3),-ROBO(4),-ROBO(5))
10749       ROBO(2)=PYANGL(P(N+2,1),P(N+2,2))
10750       ROBO(1)=PYANGL(P(N+2,3),SQRT(P(N+2,1)**2+P(N+2,2)**2))
10751       CALL PYROBO(MINT(83)+5,NS,ROBO(1),ROBO(2),ROBO(3),ROBO(4),
10752      &ROBO(5))
10753  
10754 C...Store user information. Reset Lambda value.
10755       K(IPU1,3)=MINT(83)+3
10756       K(IPU2,3)=MINT(83)+4
10757       DO 330 JT=1,2
10758         MINT(12+JT)=KFLS(JT)
10759         VINT(140+JT)=XS(JT)
10760         IF(MINT(18+JT).EQ.1) VINT(140+JT)=VINT(154+JT)*XS(JT)
10761   330 CONTINUE
10762       PARU(112)=ALAMS
10763  
10764       RETURN
10765       END
10766  
10767 C*********************************************************************
10768  
10769 C...PYRESD
10770 C...Allows resonances to decay (including parton showers for hadronic
10771 C...channels).
10772  
10773       SUBROUTINE PYRESD(IRES)
10774  
10775 C...Double precision and integer declarations.
10776       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
10777       IMPLICIT INTEGER(I-N)
10778       INTEGER PYK,PYCHGE,PYCOMP
10779 C...Parameter statement to help give large particle numbers.
10780       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
10781 C...Commonblocks.
10782       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
10783       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
10784       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
10785       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
10786       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
10787       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
10788       COMMON/PYINT1/MINT(400),VINT(400)
10789       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
10790       COMMON/PYINT4/MWID(500),WIDS(500,5)
10791       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
10792      &/PYINT1/,/PYINT2/,/PYINT4/
10793 C...Local arrays and complex and character variables.
10794       DIMENSION IREF(50,8),KDCY(3),KFL1(3),KFL2(3),KFL3(3),KEQL(3),
10795      &KCQM(3),KCQ1(3),KCQ2(3),KCQ3(3),NSD(3),PMMN(3),ILIN(6),
10796      &HGZ(3,3),COUP(6,4),CORL(2,2,2),PK(6,4),PKK(6,6),CTHE(3),
10797      &PHI(3),WDTP(0:200),WDTE(0:200,0:5),DBEZQQ(3),DPMO(5),XM(5),
10798      &VDCY(4)
10799       COMPLEX FGK,HA(6,6),HC(6,6)
10800       REAL TIR,UIR
10801       CHARACTER CODE*9,MASS*9
10802  
10803 C...The F, Xi and Xj functions of Gunion and Kunszt
10804 C...(Phys. Rev. D33, 665, plus errata from the authors).
10805       FGK(I1,I2,I3,I4,I5,I6)=4.*HA(I1,I3)*HC(I2,I6)*(HA(I1,I5)*
10806      &HC(I1,I4)+HA(I3,I5)*HC(I3,I4))
10807       DIGK(DT,DU)=-4D0*D34*D56+DT*(3D0*DT+4D0*DU)+DT**2*(DT*DU/
10808      &(D34*D56)-2D0*(1D0/D34+1D0/D56)*(DT+DU)+2D0*(D34/D56+D56/D34))
10809       DJGK(DT,DU)=8D0*(D34+D56)**2-8D0*(D34+D56)*(DT+DU)-6D0*DT*DU-
10810      &2D0*DT*DU*(DT*DU/(D34*D56)-2D0*(1D0/D34+1D0/D56)*(DT+DU)+
10811      &2D0*(D34/D56+D56/D34))
10812  
10813 C...Some general constants.
10814       XW=PARU(102)
10815       XWV=XW
10816       IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
10817       XW1=1D0-XW
10818       SQMZ=PMAS(23,1)**2
10819       GMMZ=PMAS(23,1)*PMAS(23,2)
10820       SQMW=PMAS(24,1)**2
10821       GMMW=PMAS(24,1)*PMAS(24,2)
10822       SH=VINT(44)
10823  
10824 C...Reset original resonance configuration.
10825       DO 100 JT=1,8
10826         IREF(1,JT)=0
10827   100 CONTINUE
10828  
10829 C...Define initial one, two or three objects for subprocess.
10830       IF(IRES.EQ.0) THEN
10831         ISUB=MINT(1)
10832         IF(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.3) THEN
10833           IREF(1,1)=MINT(84)+2+ISET(ISUB)
10834           IREF(1,4)=MINT(83)+6+ISET(ISUB)
10835           JTMAX=1
10836         ELSEIF(ISET(ISUB).EQ.2.OR.ISET(ISUB).EQ.4) THEN
10837           IREF(1,1)=MINT(84)+1+ISET(ISUB)
10838           IREF(1,2)=MINT(84)+2+ISET(ISUB)
10839           IREF(1,4)=MINT(83)+5+ISET(ISUB)
10840           IREF(1,5)=MINT(83)+6+ISET(ISUB)
10841           JTMAX=2
10842         ELSEIF(ISET(ISUB).EQ.5) THEN
10843           IREF(1,1)=MINT(84)+3
10844           IREF(1,2)=MINT(84)+4
10845           IREF(1,3)=MINT(84)+5
10846           IREF(1,4)=MINT(83)+7
10847           IREF(1,5)=MINT(83)+8
10848           IREF(1,6)=MINT(83)+9
10849           JTMAX=3
10850         ENDIF
10851  
10852 C...Define original resonance for odd cases.
10853       ELSE
10854         ISUB=0
10855         IREF(1,1)=IRES
10856         JTMAX=1
10857       ENDIF
10858  
10859 C...Check if initial resonance has been moved (in resonance + jet).
10860       DO 120 JT=1,3
10861         IF(IREF(1,JT).GT.0) THEN
10862           IF(K(IREF(1,JT),1).GT.10) THEN
10863             KFA=IABS(K(IREF(1,JT),2))
10864             IF(KFA.GE.6.AND.KCHG(PYCOMP(KFA),2).NE.0) THEN
10865               DO 110 I=IREF(1,JT)+1,N
10866                 IF(K(I,1).LE.10.AND.K(I,2).EQ.K(IREF(1,JT),2))
10867      &          IREF(1,JT)=I
10868   110         CONTINUE
10869             ELSE
10870               KDA=MOD(K(IREF(1,JT),4),MSTU(4))
10871               IF(MWID(PYCOMP(KFA)).NE.0.AND.KDA.GT.1) IREF(1,JT)=KDA
10872             ENDIF
10873           ENDIF
10874         ENDIF
10875   120 CONTINUE
10876  
10877 C.....Set decay vertex for initial resonances
10878       DO 140 JT=1,JTMAX
10879         DO 130 I=1,4
10880           V(IREF(1,JT),I)=0D0
10881   130   CONTINUE
10882   140 CONTINUE
10883  
10884 C...Loop over decay history.
10885       NP=1
10886       IP=0
10887   150 IP=IP+1
10888       NINH=0
10889       JTMAX=2
10890       IF(IREF(IP,2).EQ.0) JTMAX=1
10891       IF(IREF(IP,3).NE.0) JTMAX=3
10892       IT4=0
10893       NSAV=N
10894  
10895 C...Start treatment of one, two or three resonances in parallel.
10896   160 N=NSAV
10897       DO 250 JT=1,JTMAX
10898         ID=IREF(IP,JT)
10899         KDCY(JT)=0
10900         KFL1(JT)=0
10901         KFL2(JT)=0
10902         KFL3(JT)=0
10903         KEQL(JT)=0
10904         NSD(JT)=ID
10905  
10906 C...Check whether particle can/is allowed to decay.
10907         IF(ID.EQ.0) GOTO 240
10908         KFA=IABS(K(ID,2))
10909         KCA=PYCOMP(KFA)
10910         IF(MWID(KCA).EQ.0) GOTO 240
10911         IF(K(ID,1).GT.10.OR.MDCY(KCA,1).EQ.0) GOTO 240
10912         IF(KFA.EQ.6.OR.KFA.EQ.7.OR.KFA.EQ.8.OR.KFA.EQ.17.OR.
10913      &  KFA.EQ.18) IT4=IT4+1
10914         K(ID,4)=MSTU(5)*(K(ID,4)/MSTU(5))
10915         K(ID,5)=MSTU(5)*(K(ID,5)/MSTU(5))
10916  
10917 C...Choose lifetime and determine decay vertex.
10918         IF(K(ID,1).EQ.5) THEN
10919           V(ID,5)=0D0
10920         ELSEIF(K(ID,1).NE.4) THEN
10921           V(ID,5)=-PMAS(KCA,4)*LOG(PYR(0))
10922         ENDIF
10923         DO 170 J=1,4
10924           VDCY(J)=V(ID,J)+V(ID,5)*P(ID,J)/P(ID,5)
10925   170   CONTINUE
10926  
10927 C...Determine whether decay allowed or not.
10928         MOUT=0
10929         IF(MSTJ(22).EQ.2) THEN
10930           IF(PMAS(KCA,4).GT.PARJ(71)) MOUT=1
10931         ELSEIF(MSTJ(22).EQ.3) THEN
10932           IF(VDCY(1)**2+VDCY(2)**2+VDCY(3)**2.GT.PARJ(72)**2) MOUT=1
10933         ELSEIF(MSTJ(22).EQ.4) THEN
10934           IF(VDCY(1)**2+VDCY(2)**2.GT.PARJ(73)**2) MOUT=1
10935           IF(ABS(VDCY(3)).GT.PARJ(74)) MOUT=1
10936         ENDIF
10937         IF(MOUT.EQ.1.AND.K(ID,1).NE.5) THEN
10938           K(ID,1)=4
10939           GOTO 240
10940         ENDIF
10941  
10942 C...Info for selection of decay channel: sign, pairings.
10943         IF(KCHG(KCA,3).EQ.0) THEN
10944           IPM=2
10945         ELSE
10946           IPM=(5-ISIGN(1,K(ID,2)))/2
10947         ENDIF
10948         KFB=0
10949         IF(JTMAX.EQ.2) THEN
10950           KFB=IABS(K(IREF(IP,3-JT),2))
10951         ELSEIF(JTMAX.EQ.3) THEN
10952           JT2=JT+1-3*(JT/3)
10953           KFB=IABS(K(IREF(IP,JT2),2))
10954           IF(KFB.NE.KFA) THEN
10955             JT2=JT+2-3*((JT+1)/3)
10956             KFB=IABS(K(IREF(IP,JT2),2))
10957           ENDIF
10958         ENDIF
10959  
10960 C...Select decay channel.
10961         IF(ISUB.EQ.1.OR.ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.
10962      &  ISUB.EQ.30.OR.ISUB.EQ.35.OR.ISUB.EQ.141) MINT(61)=1
10963         CALL PYWIDT(KFA,P(ID,5)**2,WDTP,WDTE)
10964         WDTE0S=WDTE(0,1)+WDTE(0,IPM)+WDTE(0,4)
10965         IF(KFB.EQ.KFA) WDTE0S=WDTE0S+WDTE(0,5)
10966         IF(WDTE0S.LE.0D0) GOTO 240
10967         RKFL=WDTE0S*PYR(0)
10968         IDL=0
10969   180   IDL=IDL+1
10970         IDC=IDL+MDCY(KCA,2)-1
10971         RKFL=RKFL-(WDTE(IDL,1)+WDTE(IDL,IPM)+WDTE(IDL,4))
10972         IF(KFB.EQ.KFA) RKFL=RKFL-WDTE(IDL,5)
10973         IF(IDL.LT.MDCY(KCA,3).AND.RKFL.GT.0D0) GOTO 180
10974  
10975 C...Read out flavours and colour charges of decay channel chosen.
10976         KCQM(JT)=KCHG(KCA,2)*ISIGN(1,K(ID,2))
10977         IF(KCQM(JT).EQ.-2) KCQM(JT)=2
10978         KFL1(JT)=KFDP(IDC,1)*ISIGN(1,K(ID,2))
10979         KFC1A=PYCOMP(IABS(KFL1(JT)))
10980         IF(KCHG(KFC1A,3).EQ.0) KFL1(JT)=IABS(KFL1(JT))
10981         KCQ1(JT)=KCHG(KFC1A,2)*ISIGN(1,KFL1(JT))
10982         IF(KCQ1(JT).EQ.-2) KCQ1(JT)=2
10983         KFL2(JT)=KFDP(IDC,2)*ISIGN(1,K(ID,2))
10984         KFC2A=PYCOMP(IABS(KFL2(JT)))
10985         IF(KCHG(KFC2A,3).EQ.0) KFL2(JT)=IABS(KFL2(JT))
10986         KCQ2(JT)=KCHG(KFC2A,2)*ISIGN(1,KFL2(JT))
10987         IF(KCQ2(JT).EQ.-2) KCQ2(JT)=2
10988         KFL3(JT)=KFDP(IDC,3)*ISIGN(1,K(ID,2))
10989         IF(KFL3(JT).NE.0) THEN
10990           KFC3A=PYCOMP(IABS(KFL3(JT)))
10991           IF(KCHG(KFC3A,3).EQ.0) KFL3(JT)=IABS(KFL3(JT))
10992           KCQ3(JT)=KCHG(KFC3A,2)*ISIGN(1,KFL3(JT))
10993           IF(KCQ3(JT).EQ.-2) KCQ3(JT)=2
10994         ENDIF
10995  
10996 C...Set/save further info on channel.
10997         KDCY(JT)=1
10998         IF(KFB.EQ.KFA) KEQL(JT)=MDME(IDC,1)
10999         NSD(JT)=N
11000         HGZ(JT,1)=VINT(111)
11001         HGZ(JT,2)=VINT(112)
11002         HGZ(JT,3)=VINT(114)
11003         JTZ=JT   
11004  
11005 C...Select masses; to begin with assume resonances narrow.
11006         DO 200 I=1,3
11007           P(N+I,5)=0D0
11008           PMMN(I)=0D0
11009           IF(I.EQ.1) THEN
11010             KFLW=IABS(KFL1(JT))
11011             KCW=KFC1A
11012           ELSEIF(I.EQ.2) THEN
11013             KFLW=IABS(KFL2(JT))
11014             KCW=KFC2A
11015           ELSEIF(I.EQ.3) THEN
11016             IF(KFL3(JT).EQ.0) GOTO 200
11017             KFLW=IABS(KFL3(JT))
11018             KCW=KFC3A
11019           ENDIF
11020           P(N+I,5)=PMAS(KCW,1)
11021 CMRENNA++
11022 C...This prevents SUSY/t particles from becoming too light.
11023           IF(KFLW/KSUSY1.EQ.1.OR.KFLW/KSUSY1.EQ.2) THEN
11024             PMMN(I)=PMAS(KCW,1)
11025             DO 190 IDC=MDCY(KCW,2),MDCY(KCW,2)+MDCY(KCW,3)-1
11026               IF(MDME(IDC,1).GT.0.AND.BRAT(IDC).GT.1E-4) THEN
11027                 PMSUM=PMAS(PYCOMP(KFDP(IDC,1)),1)+
11028      &          PMAS(PYCOMP(KFDP(IDC,2)),1)
11029                 IF(KFDP(IDC,3).NE.0) PMSUM=PMSUM+
11030      &          PMAS(PYCOMP(KFDP(IDC,3)),1)
11031                 PMMN(I)=MIN(PMMN(I),PMSUM)
11032               ENDIF
11033   190       CONTINUE
11034 CMRENNA--
11035           ELSEIF(KFLW.EQ.6) THEN
11036             PMMN(I)=PMAS(24,1)+PMAS(5,1)
11037           ENDIF
11038   200   CONTINUE
11039  
11040 C...Check which two out of three are widest.
11041         IWID1=1
11042         IWID2=2
11043         PWID1=PMAS(KFC1A,2)
11044         PWID2=PMAS(KFC2A,2)
11045         KFLW1=IABS(KFL1(JT))
11046         KFLW2=IABS(KFL2(JT))
11047         IF(KFL3(JT).NE.0) THEN
11048           PWID3=PMAS(KFC3A,2)
11049           IF(PWID3.GT.PWID1.AND.PWID2.GE.PWID1) THEN
11050             IWID1=3
11051             PWID1=PWID3
11052             KFLW1=IABS(KFL3(JT))
11053           ELSEIF(PWID3.GT.PWID2) THEN
11054             IWID2=3
11055             PWID2=PWID3
11056             KFLW2=IABS(KFL3(JT))
11057           ENDIF
11058         ENDIF
11059  
11060 C...If all narrow then only check that masses consistent.
11061         IF(MSTP(42).LE.0.OR.(PWID1.LT.PARP(41).AND.
11062      &  PWID2.LT.PARP(41))) THEN
11063 CMRENNA++
11064 C....Handle near degeneracy cases.
11065           IF(KFA/KSUSY1.EQ.1.OR.KFA/KSUSY1.EQ.2) THEN
11066             IF(P(N+1,5)+P(N+2,5)+P(N+3,5).GT.P(ID,5)) THEN
11067               P(N+1,5)=P(ID,5)-P(N+2,5)-0.5D0
11068               IF(P(N+1,5).LT.0D0) P(N+1,5)=0D0
11069             ENDIF
11070           ENDIF
11071 CMRENNA--
11072           IF(P(N+1,5)+P(N+2,5)+P(N+3,5).GT.P(ID,5)) THEN
11073             CALL PYERRM(13,'(PYRESD:) daughter masses too large')
11074             MINT(51)=1
11075             RETURN
11076           ELSEIF(P(N+1,5)+P(N+2,5)+P(N+3,5)+PARJ(64).GT.P(ID,5)) THEN
11077             CALL PYERRM(3,'(PYRESD:) daughter masses too large')
11078             MINT(51)=1
11079             RETURN
11080           ENDIF
11081  
11082 C...For three wide resonances select narrower of three
11083 C...according to BW decoupled from rest.
11084         ELSE
11085           PMTOT=P(ID,5)
11086           IF(KFL3(JT).NE.0) THEN
11087             IWID3=6-IWID1-IWID2
11088             KFLW3=IABS(KFL1(JT))+IABS(KFL2(JT))+IABS(KFL3(JT))-
11089      &      KFLW1-KFLW2
11090             LOOP=0
11091   210       LOOP=LOOP+1
11092             P(N+IWID3,5)=PYMASS(KFLW3)
11093             IF(LOOP.LE.10.AND. P(N+IWID3,5).LE.PMMN(IWID3)) GOTO 210
11094             PMTOT=PMTOT-P(N+IWID3,5)
11095           ENDIF
11096 C...Select other two correlated within remaining phase space.
11097           IF(IP.EQ.1) THEN
11098             CKIN45=CKIN(45)
11099             CKIN47=CKIN(47)
11100             CKIN(45)=MAX(PMMN(IWID1),CKIN(45))
11101             CKIN(47)=MAX(PMMN(IWID2),CKIN(47))
11102             CALL PYOFSH(2,KFA,KFLW1,KFLW2,PMTOT,P(N+IWID1,5),
11103      &      P(N+IWID2,5))
11104             CKIN(45)=CKIN45
11105             CKIN(47)=CKIN47
11106           ELSE
11107             CKIN(49)=PMMN(IWID1)
11108             CKIN(50)=PMMN(IWID2)
11109             CALL PYOFSH(5,KFA,KFLW1,KFLW2,PMTOT,P(N+IWID1,5),
11110      &      P(N+IWID2,5))
11111             CKIN(49)=0D0
11112             CKIN(50)=0D0
11113           ENDIF
11114           IF(MINT(51).EQ.1) RETURN
11115         ENDIF
11116  
11117 C...Begin fill decay products, with colour flow for coloured objects.
11118         MSTU10=MSTU(10)
11119         MSTU(10)=1
11120         MSTU(19)=1
11121  
11122 CMRENNA++
11123 C...1) Three-body decays of SUSY particles (plus special case top).
11124         IF(KFL3(JT).NE.0) THEN
11125           DO 230 I=N+1,N+3
11126             DO 220 J=1,5
11127               K(I,J)=0
11128 C              V(I,J)=0D0
11129   220       CONTINUE
11130   230     CONTINUE
11131           XM(1)=P(N+1,5)
11132           XM(2)=P(N+2,5)
11133           XM(3)=P(N+3,5)
11134           XM(5)=P(ID,5)
11135           CALL PYTBDY(XM)
11136           K(N+1,1)=1
11137           K(N+1,2)=KFL1(JT)
11138           K(N+2,1)=1
11139           K(N+2,2)=KFL2(JT)
11140           K(N+3,1)=1
11141           K(N+3,2)=KFL3(JT)
11142  
11143 C...Set colour flow for t -> W + b + Z.
11144           IF(KFA.EQ.6) THEN
11145             K(N+2,1)=3
11146             ISID=4
11147             IF(KCQM(JT).EQ.-1) ISID=5
11148             IDAU=N+2
11149             K(ID,ISID)=K(ID,ISID)+IDAU
11150             K(IDAU,ISID)=MSTU(5)*ID
11151  
11152 C...Set colour flow in three-body decays - programmed as special cases.
11153           ELSEIF(KFC2A.LE.6) THEN
11154             K(N+2,1)=3
11155             K(N+3,1)=3
11156             ISID=4
11157             IF(KFL2(JT).LT.0) ISID=5
11158             K(N+2,ISID)=MSTU(5)*(N+3)
11159             K(N+3,9-ISID)=MSTU(5)*(N+2)
11160           ENDIF
11161           IF(KFL1(JT).EQ.KSUSY1+21) THEN
11162             K(N+1,1)=3
11163             K(N+2,1)=3
11164             K(N+3,1)=3
11165             ISID=4
11166             IF(KFL2(JT).LT.0) ISID=5
11167             K(N+1,ISID)=MSTU(5)*(N+2)
11168             K(N+1,9-ISID)=MSTU(5)*(N+3)
11169             K(N+2,ISID)=MSTU(5)*(N+1)
11170             K(N+3,9-ISID)=MSTU(5)*(N+1)
11171           ENDIF
11172           IF(KFA.EQ.KSUSY1+21) THEN
11173             K(N+2,1)=3
11174             K(N+3,1)=3
11175             ISID=4
11176             IF(KFL2(JT).LT.0) ISID=5
11177             K(ID,ISID)=K(ID,ISID)+(N+2)
11178             K(ID,9-ISID)=K(ID,9-ISID)+(N+3)
11179             K(N+2,ISID)=MSTU(5)*ID
11180             K(N+3,9-ISID)=MSTU(5)*ID
11181           ENDIF
11182           N=N+3
11183 CMRENNA--
11184  
11185 C...2) Everything else two-body decay.
11186         ELSE
11187           CALL PY2ENT(N+1,KFL1(JT),KFL2(JT),P(ID,5))
11188 C...First set colour flow as if mother colour singlet.
11189           IF(KCQ1(JT).NE.0) THEN
11190             K(N-1,1)=3
11191             IF(KCQ1(JT).NE.-1) K(N-1,4)=MSTU(5)*N
11192             IF(KCQ1(JT).NE.1) K(N-1,5)=MSTU(5)*N
11193           ENDIF
11194           IF(KCQ2(JT).NE.0) THEN
11195             K(N,1)=3
11196             IF(KCQ2(JT).NE.-1) K(N,4)=MSTU(5)*(N-1)
11197             IF(KCQ2(JT).NE.1) K(N,5)=MSTU(5)*(N-1)
11198           ENDIF
11199 C...Then redirect colour flow if mother (anti)triplet.
11200           IF(KCQM(JT).EQ.0) THEN
11201           ELSEIF(KCQM(JT).NE.2) THEN
11202             ISID=4
11203             IF(KCQM(JT).EQ.-1) ISID=5
11204             IDAU=N-1
11205             IF(KCQ1(JT).EQ.0.OR.KCQ2(JT).EQ.2) IDAU=N
11206             K(ID,ISID)=K(ID,ISID)+IDAU
11207             K(IDAU,ISID)=MSTU(5)*ID
11208 C...Then redirect colour flow if mother octet.
11209           ELSEIF(KCQ1(JT).EQ.0.OR.KCQ2(JT).EQ.0) THEN
11210             IDAU=N-1
11211             IF(KCQ1(JT).EQ.0) IDAU=N
11212             K(ID,4)=K(ID,4)+IDAU
11213             K(ID,5)=K(ID,5)+IDAU
11214             K(IDAU,4)=MSTU(5)*ID
11215             K(IDAU,5)=MSTU(5)*ID
11216           ELSE
11217             ISID=4
11218             IF(KCQ1(JT).EQ.-1) ISID=5
11219             IF(KCQ1(JT).EQ.2) ISID=INT(4.5D0+PYR(0))
11220             K(ID,ISID)=K(ID,ISID)+(N-1)
11221             K(ID,9-ISID)=K(ID,9-ISID)+N
11222             K(N-1,ISID)=MSTU(5)*ID
11223             K(N,9-ISID)=MSTU(5)*ID
11224           ENDIF
11225         ENDIF
11226  
11227 C...End loop over resonances for daughter flavour and mass selection.
11228         MSTU(10)=MSTU10
11229   240   IF(MWID(KCA).NE.0.AND.(KFL1(JT).EQ.0.OR.KFL3(JT).NE.0))
11230      &  NINH=NINH+1
11231         IF(IRES.GT.0.AND.MWID(KCA).NE.0.AND.KFL1(JT).EQ.0) THEN
11232           WRITE(CODE,'(I9)') K(ID,2)
11233           WRITE(MASS,'(F9.3)') P(ID,5)
11234           CALL PYERRM(3,'(PYRESD:) Failed to decay particle'//
11235      &    CODE//' with mass'//MASS)
11236           MINT(51)=1
11237           RETURN
11238         ENDIF
11239   250 CONTINUE
11240  
11241 C...Check for allowed combinations. Skip if no decays.
11242       IF(JTMAX.EQ.1) THEN
11243         IF(KDCY(1).EQ.0) GOTO 620
11244       ELSEIF(JTMAX.EQ.2) THEN
11245         IF(KDCY(1).EQ.0.AND.KDCY(2).EQ.0) GOTO 620
11246         IF(KEQL(1).EQ.4.AND.KEQL(2).EQ.4) GOTO 160
11247         IF(KEQL(1).EQ.5.AND.KEQL(2).EQ.5) GOTO 160
11248       ELSEIF(JTMAX.EQ.3) THEN
11249         IF(KDCY(1).EQ.0.AND.KDCY(2).EQ.0.AND.KDCY(3).EQ.0) GOTO 620
11250         IF(KEQL(1).EQ.4.AND.KEQL(2).EQ.4) GOTO 160
11251         IF(KEQL(1).EQ.4.AND.KEQL(3).EQ.4) GOTO 160
11252         IF(KEQL(2).EQ.4.AND.KEQL(3).EQ.4) GOTO 160
11253         IF(KEQL(1).EQ.5.AND.KEQL(2).EQ.5) GOTO 160
11254         IF(KEQL(1).EQ.5.AND.KEQL(3).EQ.5) GOTO 160
11255         IF(KEQL(2).EQ.5.AND.KEQL(3).EQ.5) GOTO 160
11256       ENDIF
11257  
11258 C...Special case: matrix element option for Z0 decay to quarks.
11259       IF(MSTP(48).EQ.1.AND.ISUB.EQ.1.AND.JTMAX.EQ.1.AND.
11260      &IABS(MINT(11)).EQ.11.AND.IABS(KFL1(1)).LE.5) THEN
11261  
11262 C...Check consistency of MSTJ options set.
11263         IF(MSTJ(109).EQ.2.AND.MSTJ(110).NE.1) THEN
11264           CALL PYERRM(6,
11265      &    '(PYRESD:) MSTJ(109) value requires MSTJ(110) = 1')
11266           MSTJ(110)=1
11267         ENDIF
11268         IF(MSTJ(109).EQ.2.AND.MSTJ(111).NE.0) THEN
11269           CALL PYERRM(6,
11270      &    '(PYRESD:) MSTJ(109) value requires MSTJ(111) = 0')
11271           MSTJ(111)=0
11272         ENDIF
11273  
11274 C...Select alpha_strong behaviour.
11275         MST111=MSTU(111)
11276         PAR112=PARU(112)
11277         MSTU(111)=MSTJ(108)
11278         IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
11279      &  MSTU(111)=1
11280         PARU(112)=PARJ(121)
11281         IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
11282  
11283 C...Find axial fraction in total cross section for scalar gluon model.
11284         PARJ(171)=0D0
11285         IF((IABS(MSTJ(101)).EQ.1.AND.MSTJ(109).EQ.1).OR.
11286      &  (MSTJ(101).EQ.5.AND.MSTJ(49).EQ.1)) THEN
11287           POLL=1D0-PARJ(131)*PARJ(132)
11288           SFF=1D0/(16D0*XW*XW1)
11289           SFW=P(ID,5)**4/((P(ID,5)**2-PARJ(123)**2)**2+
11290      &    (PARJ(123)*PARJ(124))**2)
11291           SFI=SFW*(1D0-(PARJ(123)/P(ID,5))**2)
11292           VE=4D0*XW-1D0
11293           HF1I=SFI*SFF*(VE*POLL+PARJ(132)-PARJ(131))
11294           HF1W=SFW*SFF**2*((VE**2+1D0)*POLL+2D0*VE*
11295      &    (PARJ(132)-PARJ(131)))
11296           KFLC=IABS(KFL1(1))
11297           PMQ=PYMASS(KFLC)
11298           QF=KCHG(KFLC,1)/3D0
11299           VQ=1D0
11300           IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,
11301      &    1D0-(2D0*PMQ/P(ID,5))**2))
11302           VF=SIGN(1D0,QF)-4D0*QF*XW
11303           RFV=0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-2D0*QF*VF*HF1I+
11304      &    VF**2*HF1W)+VQ**3*HF1W
11305           IF(RFV.GT.0D0) PARJ(171)=MIN(1D0,VQ**3*HF1W/RFV)
11306         ENDIF
11307  
11308 C...Choice of jet configuration.
11309         CALL PYXJET(P(ID,5),NJET,CUT)
11310         KFLC=IABS(KFL1(1))
11311         KFLN=21
11312         IF(NJET.EQ.4) THEN
11313           CALL PYX4JT(NJET,CUT,KFLC,P(ID,5),KFLN,X1,X2,X4,X12,X14)
11314         ELSEIF(NJET.EQ.3) THEN
11315           CALL PYX3JT(NJET,CUT,KFLC,P(ID,5),X1,X3)
11316         ELSE
11317           MSTJ(120)=1
11318         ENDIF
11319  
11320 C...Fill jet configuration; return if incorrect kinematics.
11321         NC=N-2
11322         IF(NJET.EQ.2.AND.MSTJ(101).NE.5) THEN
11323           CALL PY2ENT(NC+1,KFLC,-KFLC,P(ID,5))
11324         ELSEIF(NJET.EQ.2) THEN
11325           CALL PY2ENT(-(NC+1),KFLC,-KFLC,P(ID,5))
11326         ELSEIF(NJET.EQ.3) THEN
11327           CALL PY3ENT(NC+1,KFLC,21,-KFLC,P(ID,5),X1,X3)
11328         ELSEIF(KFLN.EQ.21) THEN
11329           CALL PY4ENT(NC+1,KFLC,KFLN,KFLN,-KFLC,P(ID,5),X1,X2,X4,
11330      &    X12,X14)
11331         ELSE
11332           CALL PY4ENT(NC+1,KFLC,-KFLN,KFLN,-KFLC,P(ID,5),X1,X2,X4,
11333      &    X12,X14)
11334         ENDIF
11335         IF(MSTU(24).NE.0) THEN
11336           MINT(51)=1
11337           MSTU(111)=MST111
11338           PARU(112)=PAR112
11339           RETURN
11340         ENDIF
11341  
11342 C...Angular orientation according to matrix element.
11343         IF(MSTJ(106).EQ.1) THEN
11344           CALL PYXDIF(NC,NJET,KFLC,P(ID,5),CHIZ,THEZ,PHIZ)
11345           IF(MINT(11).LT.0) THEZ=PARU(1)-THEZ
11346           CTHE(1)=COS(THEZ)
11347           CALL PYROBO(NC+1,N,0D0,CHIZ,0D0,0D0,0D0)
11348           CALL PYROBO(NC+1,N,THEZ,PHIZ,0D0,0D0,0D0)
11349         ENDIF
11350  
11351 C...Boost partons to Z0 rest frame.
11352         CALL PYROBO(NC+1,N,0D0,0D0,P(ID,1)/P(ID,4),
11353      &  P(ID,2)/P(ID,4),P(ID,3)/P(ID,4))
11354  
11355 C...Mark decayed resonance and add documentation lines,
11356         K(ID,1)=K(ID,1)+10
11357         IDOC=MINT(83)+MINT(4)
11358         DO 270 I=NC+1,N
11359           I1=MINT(83)+MINT(4)+1
11360           K(I,3)=I1
11361           IF(MSTP(128).GE.1) K(I,3)=ID
11362           IF(MSTP(128).LE.1.AND.MINT(4).LT.MSTP(126)) THEN
11363             MINT(4)=MINT(4)+1
11364             K(I1,1)=21
11365             K(I1,2)=K(I,2)
11366             K(I1,3)=IREF(IP,4)
11367             DO 260 J=1,5
11368               P(I1,J)=P(I,J)
11369   260       CONTINUE
11370           ENDIF
11371   270   CONTINUE
11372  
11373 C...Generate parton shower.
11374         IF(MSTJ(101).EQ.5) CALL PYSHOW(N-1,N,P(ID,5))
11375  
11376 C... End special case for Z0: skip ahead.
11377         MSTU(111)=MST111
11378         PARU(112)=PAR112
11379         GOTO 610
11380       ENDIF
11381  
11382 C...Order incoming partons and outgoing resonances.
11383       IF(JTMAX.EQ.2.AND.ISUB.NE.0.AND.MSTP(47).GE.1.AND.
11384      &NINH.EQ.0) THEN
11385         ILIN(1)=MINT(84)+1
11386         IF(K(MINT(84)+1,2).GT.0) ILIN(1)=MINT(84)+2
11387         IF(K(ILIN(1),2).EQ.21.OR.K(ILIN(1),2).EQ.22) 
11388      &  ILIN(1)=2*MINT(84)+3-ILIN(1)
11389         ILIN(2)=2*MINT(84)+3-ILIN(1)
11390         IMIN=1
11391         IF(IREF(IP,7).EQ.25.OR.IREF(IP,7).EQ.35.OR.IREF(IP,7)
11392      &  .EQ.36) IMIN=3
11393         IMAX=2
11394         IORD=1
11395         IF(K(IREF(IP,1),2).EQ.23) IORD=2
11396         IF(K(IREF(IP,1),2).EQ.24.AND.K(IREF(IP,2),2).EQ.-24) IORD=2
11397         IAKIPD=IABS(K(IREF(IP,IORD),2))
11398         IF(IAKIPD.EQ.25.OR.IAKIPD.EQ.35.OR.IAKIPD.EQ.36) IORD=3-IORD
11399         IF(KDCY(IORD).EQ.0) IORD=3-IORD
11400  
11401 C...Order decay products of resonances.
11402         DO 280 JT=IORD,3-IORD,3-2*IORD
11403           IF(KDCY(JT).EQ.0) THEN
11404             ILIN(IMAX+1)=NSD(JT)
11405             IMAX=IMAX+1
11406           ELSEIF(K(NSD(JT)+1,2).GT.0) THEN
11407             ILIN(IMAX+1)=N+2*JT-1
11408             ILIN(IMAX+2)=N+2*JT
11409             IMAX=IMAX+2
11410             K(N+2*JT-1,2)=K(NSD(JT)+1,2)
11411             K(N+2*JT,2)=K(NSD(JT)+2,2)
11412           ELSE
11413             ILIN(IMAX+1)=N+2*JT
11414             ILIN(IMAX+2)=N+2*JT-1
11415             IMAX=IMAX+2
11416             K(N+2*JT-1,2)=K(NSD(JT)+1,2)
11417             K(N+2*JT,2)=K(NSD(JT)+2,2)
11418           ENDIF
11419   280   CONTINUE
11420  
11421 C...Find charge, isospin, left- and righthanded couplings.
11422         DO 300 I=IMIN,IMAX
11423           DO 290 J=1,4
11424             COUP(I,J)=0D0
11425   290     CONTINUE
11426           KFA=IABS(K(ILIN(I),2))
11427           IF(KFA.EQ.0.OR.KFA.GT.20) GOTO 300
11428           COUP(I,1)=KCHG(KFA,1)/3D0
11429           COUP(I,2)=(-1)**MOD(KFA,2)
11430           COUP(I,4)=-2D0*COUP(I,1)*XWV
11431           COUP(I,3)=COUP(I,2)+COUP(I,4)
11432   300   CONTINUE
11433  
11434 C...Full propagator dependence and flavour correlations for 2 gamma*/Z.
11435         IF(ISUB.EQ.22) THEN
11436           DO 330 I=3,5,2
11437             I1=IORD
11438             IF(I.EQ.5) I1=3-IORD
11439             DO 320 J1=1,2
11440               DO 310 J2=1,2
11441                 CORL(I/2,J1,J2)=COUP(1,1)**2*HGZ(I1,1)*COUP(I,1)**2/
11442      &          16D0+COUP(1,1)*COUP(1,J1+2)*HGZ(I1,2)*COUP(I,1)*
11443      &          COUP(I,J2+2)/4D0+COUP(1,J1+2)**2*HGZ(I1,3)*
11444      &          COUP(I,J2+2)**2
11445   310         CONTINUE
11446   320       CONTINUE
11447   330     CONTINUE
11448           COWT12=(CORL(1,1,1)+CORL(1,1,2))*(CORL(2,1,1)+CORL(2,1,2))+
11449      &    (CORL(1,2,1)+CORL(1,2,2))*(CORL(2,2,1)+CORL(2,2,2))
11450           COMX12=(CORL(1,1,1)+CORL(1,1,2)+CORL(1,2,1)+CORL(1,2,2))*
11451      &    (CORL(2,1,1)+CORL(2,1,2)+CORL(2,2,1)+CORL(2,2,2))
11452           IF(COWT12.LT.PYR(0)*COMX12) GOTO 160
11453         ENDIF
11454       ENDIF
11455  
11456 C...Select angular orientation type - Z'/W' only.
11457       MZPWP=0
11458       IF(ISUB.EQ.141) THEN
11459         IF(PYR(0).LT.PARU(130)) MZPWP=1
11460         IF(IP.EQ.2) THEN
11461           IF(IABS(K(IREF(2,1),2)).EQ.37) MZPWP=2
11462           IAKIR=IABS(K(IREF(2,2),2))
11463           IF(IAKIR.EQ.25.OR.IAKIR.EQ.35.OR.IAKIR.EQ.36) MZPWP=2
11464           IF(IAKIR.LE.20) MZPWP=2
11465         ENDIF
11466         IF(IP.GE.3) MZPWP=2
11467       ELSEIF(ISUB.EQ.142) THEN
11468         IF(PYR(0).LT.PARU(136)) MZPWP=1
11469         IF(IP.EQ.2) THEN
11470           IAKIR=IABS(K(IREF(2,2),2))
11471           IF(IAKIR.EQ.25.OR.IAKIR.EQ.35.OR.IAKIR.EQ.36) MZPWP=2
11472           IF(IAKIR.LE.20) MZPWP=2
11473         ENDIF
11474         IF(IP.GE.3) MZPWP=2
11475       ENDIF
11476  
11477 C...Select random angles (begin of weighting procedure).
11478   340 DO 350 JT=1,JTMAX
11479         IF(KDCY(JT).EQ.0) GOTO 350
11480         IF(JTMAX.EQ.1.AND.ISUB.NE.0) THEN
11481           CTHE(JT)=VINT(13)+(VINT(33)-VINT(13)+VINT(34)-VINT(14))*PYR(0)
11482           IF(CTHE(JT).GT.VINT(33)) CTHE(JT)=CTHE(JT)+VINT(14)-VINT(33)
11483           PHI(JT)=VINT(24)
11484         ELSE
11485           CTHE(JT)=2D0*PYR(0)-1D0
11486           PHI(JT)=PARU(2)*PYR(0)
11487         ENDIF
11488   350 CONTINUE
11489  
11490       IF(JTMAX.EQ.2.AND.MSTP(47).GE.1.AND.NINH.EQ.0) THEN
11491 C...Construct massless four-vectors.
11492         DO 370 I=N+1,N+4
11493           K(I,1)=1
11494           DO 360 J=1,5
11495             P(I,J)=0D0
11496 C            V(I,J)=0D0
11497   360     CONTINUE
11498   370   CONTINUE
11499         DO 380 JT=1,JTMAX
11500           IF(KDCY(JT).EQ.0) GOTO 380
11501           ID=IREF(IP,JT)
11502           P(N+2*JT-1,3)=0.5D0*P(ID,5)
11503           P(N+2*JT-1,4)=0.5D0*P(ID,5)
11504           P(N+2*JT,3)=-0.5D0*P(ID,5)
11505           P(N+2*JT,4)=0.5D0*P(ID,5)
11506           CALL PYROBO(N+2*JT-1,N+2*JT,ACOS(CTHE(JT)),PHI(JT),
11507      &    P(ID,1)/P(ID,4),P(ID,2)/P(ID,4),P(ID,3)/P(ID,4))
11508   380   CONTINUE
11509  
11510 C...Store incoming and outgoing momenta, with random rotation to
11511 C...avoid accidental zeroes in HA expressions.
11512         IF(ISUB.NE.0) THEN 
11513           DO 400 I=1,IMAX
11514             K(N+4+I,1)=1
11515             P(N+4+I,4)=SQRT(P(ILIN(I),1)**2+P(ILIN(I),2)**2+
11516      &      P(ILIN(I),3)**2+P(ILIN(I),5)**2)
11517             P(N+4+I,5)=P(ILIN(I),5)
11518             DO 390 J=1,3
11519               P(N+4+I,J)=P(ILIN(I),J)
11520   390       CONTINUE
11521   400     CONTINUE
11522   410     THERR=ACOS(2D0*PYR(0)-1D0)
11523           PHIRR=PARU(2)*PYR(0)
11524           CALL PYROBO(N+5,N+4+IMAX,THERR,PHIRR,0D0,0D0,0D0)
11525           DO 430 I=1,IMAX
11526             IF(P(N+4+I,1)**2+P(N+4+I,2)**2.LT.1D-4*P(N+4+I,4)**2) 
11527      &      GOTO 410
11528             DO 420 J=1,4
11529               PK(I,J)=P(N+4+I,J)
11530   420       CONTINUE
11531   430     CONTINUE
11532         ENDIF
11533  
11534 C...Calculate internal products.
11535         IF(ISUB.EQ.22.OR.ISUB.EQ.23.OR.ISUB.EQ.25.OR.ISUB.EQ.141.OR.
11536      &  ISUB.EQ.142) THEN
11537           DO 450 I1=IMIN,IMAX-1
11538             DO 440 I2=I1+1,IMAX
11539               HA(I1,I2)=SNGL(SQRT((PK(I1,4)-PK(I1,3))*(PK(I2,4)+
11540      &        PK(I2,3))/(1D-20+PK(I1,1)**2+PK(I1,2)**2)))*
11541      &        CMPLX(SNGL(PK(I1,1)),SNGL(PK(I1,2)))-
11542      &        SNGL(SQRT((PK(I1,4)+PK(I1,3))*(PK(I2,4)-PK(I2,3))/
11543      &        (1D-20+PK(I2,1)**2+PK(I2,2)**2)))*
11544      &        CMPLX(SNGL(PK(I2,1)),SNGL(PK(I2,2)))
11545               HC(I1,I2)=CONJG(HA(I1,I2))
11546               IF(I1.LE.2) HA(I1,I2)=CMPLX(0.,1.)*HA(I1,I2)
11547               IF(I1.LE.2) HC(I1,I2)=CMPLX(0.,1.)*HC(I1,I2)
11548               HA(I2,I1)=-HA(I1,I2)
11549               HC(I2,I1)=-HC(I1,I2)
11550   440       CONTINUE
11551   450     CONTINUE
11552         ENDIF
11553 
11554 C...Calculate four-products.
11555         IF(ISUB.NE.0) THEN
11556           DO 470 I=1,2
11557             DO 460 J=1,4
11558               PK(I,J)=-PK(I,J)
11559   460       CONTINUE
11560   470     CONTINUE
11561           DO 490 I1=IMIN,IMAX-1
11562             DO 480 I2=I1+1,IMAX
11563               PKK(I1,I2)=2D0*(PK(I1,4)*PK(I2,4)-PK(I1,1)*PK(I2,1)-
11564      &        PK(I1,2)*PK(I2,2)-PK(I1,3)*PK(I2,3))
11565               PKK(I2,I1)=PKK(I1,I2)
11566   480       CONTINUE
11567   490     CONTINUE
11568         ENDIF
11569       ENDIF
11570  
11571       KFAGM=IABS(IREF(IP,7))
11572       IF(MSTP(47).LE.0.OR.NINH.NE.0) THEN
11573 C...Isotropic decay selected by user.
11574         WT=1D0
11575         WTMAX=1D0
11576  
11577       ELSEIF(JTMAX.EQ.3) THEN
11578 C...Isotropic decay when three mother particles.
11579         WT=1D0
11580         WTMAX=1D0
11581  
11582       ELSEIF(IT4.GE.1) THEN
11583 C... Isotropic decay t -> b + W etc for 4th generation q and l.
11584         WT=1D0
11585         WTMAX=1D0
11586  
11587       ELSEIF(IREF(IP,7).EQ.25.OR.IREF(IP,7).EQ.35.OR.
11588      &  IREF(IP,7).EQ.36) THEN
11589 C...Angular weight for h0 -> Z0 + Z0 or W+ + W- -> 4 quarks/leptons.
11590         IF(IP.EQ.1) WTMAX=SH**2
11591         IF(IP.GE.2) WTMAX=P(IREF(IP,8),5)**4
11592         KFA=IABS(K(IREF(IP,1),2))
11593         IF(KFA.EQ.23) THEN
11594           KFLF1A=IABS(KFL1(1))
11595           EF1=KCHG(KFLF1A,1)/3D0
11596           AF1=SIGN(1D0,EF1+0.1D0)
11597           VF1=AF1-4D0*EF1*XWV
11598           KFLF2A=IABS(KFL1(2))
11599           EF2=KCHG(KFLF2A,1)/3D0
11600           AF2=SIGN(1D0,EF2+0.1D0)
11601           VF2=AF2-4D0*EF2*XWV
11602           VA12AS=4D0*VF1*AF1*VF2*AF2/((VF1**2+AF1**2)*(VF2**2+AF2**2))
11603           WT=8D0*(1D0+VA12AS)*PKK(3,5)*PKK(4,6)+
11604      &    8D0*(1D0-VA12AS)*PKK(3,6)*PKK(4,5)
11605         ELSEIF(KFA.EQ.24) THEN
11606           WT=16D0*PKK(3,5)*PKK(4,6)
11607         ELSE
11608           WT=WTMAX
11609         ENDIF
11610  
11611       ELSEIF((KFAGM.EQ.6.OR.KFAGM.EQ.7.OR.KFAGM.EQ.8.OR.
11612      &  KFAGM.EQ.17.OR.KFAGM.EQ.18).AND.IABS(K(IREF(IP,1),2)).EQ.24)
11613      &  THEN
11614 C...Angular correlation in f -> f' + W -> f' + 2 quarks/leptons.
11615         I1=IREF(IP,8)
11616         IF(MOD(KFAGM,2).EQ.0) THEN
11617           I2=N+1
11618           I3=N+2
11619         ELSE
11620           I2=N+2
11621           I3=N+1
11622         ENDIF
11623         I4=IREF(IP,2)
11624         WT=(P(I1,4)*P(I2,4)-P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-
11625      &  P(I1,3)*P(I2,3))*(P(I3,4)*P(I4,4)-P(I3,1)*P(I4,1)-
11626      &  P(I3,2)*P(I4,2)-P(I3,3)*P(I4,3))
11627         WTMAX=(P(I1,5)**4-P(IREF(IP,1),5)**4)/8D0
11628  
11629       ELSEIF(ISUB.EQ.1) THEN
11630 C...Angular weight for gamma*/Z0 -> 2 quarks/leptons.
11631         EI=KCHG(IABS(MINT(15)),1)/3D0
11632         AI=SIGN(1D0,EI+0.1D0)
11633         VI=AI-4D0*EI*XWV
11634         EF=KCHG(IABS(KFL1(1)),1)/3D0
11635         AF=SIGN(1D0,EF+0.1D0)
11636         VF=AF-4D0*EF*XWV
11637         RMF=MIN(1D0,4D0*PMAS(IABS(KFL1(1)),1)**2/SH)
11638         WT1=EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
11639      &  (VI**2+AI**2)*VINT(114)*(VF**2+(1D0-RMF)*AF**2)
11640         WT2=RMF*(EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
11641      &  (VI**2+AI**2)*VINT(114)*VF**2)
11642         WT3=SQRT(1D0-RMF)*(EI*AI*VINT(112)*EF*AF+
11643      &  4D0*VI*AI*VINT(114)*VF*AF)
11644         WT=WT1*(1D0+CTHE(1)**2)+WT2*(1D0-CTHE(1)**2)+
11645      &  2D0*WT3*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))
11646         WTMAX=2D0*(WT1+ABS(WT3))
11647  
11648       ELSEIF(ISUB.EQ.2) THEN
11649 C...Angular weight for W+/- -> 2 quarks/leptons.
11650         WT=(1D0+CTHE(1)*ISIGN(1,MINT(15)*KFL1(1)))**2
11651         WTMAX=4D0
11652  
11653       ELSEIF(ISUB.EQ.15.OR.ISUB.EQ.19) THEN
11654 C...Angular weight for f + fbar -> gluon/gamma + (gamma*/Z0) ->
11655 C...-> gluon/gamma + 2 quarks/leptons.
11656         CLILF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11657      &  COUP(1,1)*COUP(1,3)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,3)/4D0+
11658      &  COUP(1,3)**2*HGZ(JTZ,3)*COUP(3,3)**2
11659         CLIRF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11660      &  COUP(1,1)*COUP(1,3)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,4)/4D0+
11661      &  COUP(1,3)**2*HGZ(JTZ,3)*COUP(3,4)**2
11662         CRILF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11663      &  COUP(1,1)*COUP(1,4)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,3)/4D0+
11664      &  COUP(1,4)**2*HGZ(JTZ,3)*COUP(3,3)**2
11665         CRIRF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11666      &  COUP(1,1)*COUP(1,4)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,4)/4D0+
11667      &  COUP(1,4)**2*HGZ(JTZ,3)*COUP(3,4)**2
11668         WT=(CLILF+CRIRF)*(PKK(1,3)**2+PKK(2,4)**2)+
11669      &  (CLIRF+CRILF)*(PKK(1,4)**2+PKK(2,3)**2)
11670         WTMAX=(CLILF+CLIRF+CRILF+CRIRF)*
11671      &  ((PKK(1,3)+PKK(1,4))**2+(PKK(2,3)+PKK(2,4))**2)
11672  
11673       ELSEIF(ISUB.EQ.16.OR.ISUB.EQ.20) THEN
11674 C...Angular weight for f + fbar' -> gluon/gamma + W+/- ->
11675 C...-> gluon/gamma + 2 quarks/leptons.
11676         WT=PKK(1,3)**2+PKK(2,4)**2
11677         WTMAX=(PKK(1,3)+PKK(1,4))**2+(PKK(2,3)+PKK(2,4))**2
11678  
11679       ELSEIF(ISUB.EQ.22) THEN
11680 C...Angular weight for f + fbar -> Z0 + Z0 -> 4 quarks/leptons.
11681         S34=P(IREF(IP,IORD),5)**2
11682         S56=P(IREF(IP,3-IORD),5)**2
11683         TI=PKK(1,3)+PKK(1,4)+S34
11684         UI=PKK(1,5)+PKK(1,6)+S56
11685         TIR=REAL(TI)
11686         UIR=REAL(UI)
11687         FGK135=ABS(FGK(1,2,3,4,5,6)/TIR+FGK(1,2,5,6,3,4)/UIR)**2
11688         FGK145=ABS(FGK(1,2,4,3,5,6)/TIR+FGK(1,2,5,6,4,3)/UIR)**2
11689         FGK136=ABS(FGK(1,2,3,4,6,5)/TIR+FGK(1,2,6,5,3,4)/UIR)**2
11690         FGK146=ABS(FGK(1,2,4,3,6,5)/TIR+FGK(1,2,6,5,4,3)/UIR)**2
11691         FGK253=ABS(FGK(2,1,5,6,3,4)/TIR+FGK(2,1,3,4,5,6)/UIR)**2
11692         FGK263=ABS(FGK(2,1,6,5,3,4)/TIR+FGK(2,1,3,4,6,5)/UIR)**2
11693         FGK254=ABS(FGK(2,1,5,6,4,3)/TIR+FGK(2,1,4,3,5,6)/UIR)**2
11694         FGK264=ABS(FGK(2,1,6,5,4,3)/TIR+FGK(2,1,4,3,6,5)/UIR)**2
11695         WT=
11696      &  CORL(1,1,1)*CORL(2,1,1)*FGK135+CORL(1,1,2)*CORL(2,1,1)*FGK145+
11697      &  CORL(1,1,1)*CORL(2,1,2)*FGK136+CORL(1,1,2)*CORL(2,1,2)*FGK146+
11698      &  CORL(1,2,1)*CORL(2,2,1)*FGK253+CORL(1,2,2)*CORL(2,2,1)*FGK263+
11699      &  CORL(1,2,1)*CORL(2,2,2)*FGK254+CORL(1,2,2)*CORL(2,2,2)*FGK264
11700         WTMAX=16D0*((CORL(1,1,1)+CORL(1,1,2))*(CORL(2,1,1)+CORL(2,1,2))+
11701      &  (CORL(1,2,1)+CORL(1,2,2))*(CORL(2,2,1)+CORL(2,2,2)))*S34*S56*
11702      &  ((TI**2+UI**2+2D0*SH*(S34+S56))/(TI*UI)-S34*S56*(1D0/TI**2+
11703      &  1D0/UI**2))
11704  
11705       ELSEIF(ISUB.EQ.23) THEN
11706 C...Angular weight for f + fbar' -> Z0 + W+/- -> 4 quarks/leptons.
11707         D34=P(IREF(IP,IORD),5)**2
11708         D56=P(IREF(IP,3-IORD),5)**2
11709         DT=PKK(1,3)+PKK(1,4)+D34
11710         DU=PKK(1,5)+PKK(1,6)+D56
11711         FACBW=1D0/((SH-SQMW)**2+GMMW**2)
11712         CAWZ=COUP(2,3)/DT-2D0*XW1*COUP(1,2)*(SH-SQMW)*FACBW
11713         CBWZ=COUP(1,3)/DU+2D0*XW1*COUP(1,2)*(SH-SQMW)*FACBW
11714         FGK135=ABS(REAL(CAWZ)*FGK(1,2,3,4,5,6)+
11715      &  REAL(CBWZ)*FGK(1,2,5,6,3,4))
11716         FGK136=ABS(REAL(CAWZ)*FGK(1,2,3,4,6,5)+
11717      &  REAL(CBWZ)*FGK(1,2,6,5,3,4))
11718         WT=(COUP(5,3)*FGK135)**2+(COUP(5,4)*FGK136)**2
11719         WTMAX=4D0*D34*D56*(COUP(5,3)**2+COUP(5,4)**2)*(CAWZ**2*
11720      &  DIGK(DT,DU)+CBWZ**2*DIGK(DU,DT)+CAWZ*CBWZ*DJGK(DT,DU))
11721  
11722       ELSEIF(ISUB.EQ.24.OR.ISUB.EQ.171.OR.ISUB.EQ.176) THEN
11723 C...Angular weight for f + fbar -> Z0 + h0 -> 2 quarks/leptons + h0
11724 C...(or H0, or A0).
11725         WT=((COUP(1,3)*COUP(3,3))**2+(COUP(1,4)*COUP(3,4))**2)*
11726      &  PKK(1,3)*PKK(2,4)+((COUP(1,3)*COUP(3,4))**2+(COUP(1,4)*
11727      &  COUP(3,3))**2)*PKK(1,4)*PKK(2,3)
11728         WTMAX=(COUP(1,3)**2+COUP(1,4)**2)*(COUP(3,3)**2+COUP(3,4)**2)*
11729      &  (PKK(1,3)+PKK(1,4))*(PKK(2,3)+PKK(2,4))
11730  
11731       ELSEIF(ISUB.EQ.25) THEN
11732 C...Angular weight for f + fbar -> W+ + W- -> 4 quarks/leptons.
11733         D34=P(IREF(IP,IORD),5)**2
11734         D56=P(IREF(IP,3-IORD),5)**2
11735         DT=PKK(1,3)+PKK(1,4)+D34
11736         DU=PKK(1,5)+PKK(1,6)+D56
11737         FACBW=1D0/((SH-SQMZ)**2+SQMZ*PMAS(23,2)**2)
11738         CDWW=(COUP(1,3)*SQMZ*(SH-SQMZ)*FACBW+COUP(1,2))/SH
11739         CAWW=CDWW+0.5D0*(COUP(1,2)+1D0)/DT
11740         CBWW=CDWW+0.5D0*(COUP(1,2)-1D0)/DU
11741         CCWW=COUP(1,4)*SQMZ*(SH-SQMZ)*FACBW/SH
11742         FGK135=ABS(REAL(CAWW)*FGK(1,2,3,4,5,6)-
11743      &  REAL(CBWW)*FGK(1,2,5,6,3,4))
11744         FGK253=ABS(FGK(2,1,5,6,3,4)-FGK(2,1,3,4,5,6))
11745         WT=FGK135**2+(CCWW*FGK253)**2
11746         WTMAX=4D0*D34*D56*(CAWW**2*DIGK(DT,DU)+CBWW**2*DIGK(DU,DT)-CAWW*
11747      &  CBWW*DJGK(DT,DU)+CCWW**2*(DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU)))
11748  
11749       ELSEIF(ISUB.EQ.26.OR.ISUB.EQ.172.OR.ISUB.EQ.177) THEN
11750 C...Angular weight for f + fbar' -> W+/- + h0 -> 2 quarks/leptons + h0
11751 C...(or H0, or A0).
11752         WT=PKK(1,3)*PKK(2,4)
11753         WTMAX=(PKK(1,3)+PKK(1,4))*(PKK(2,3)+PKK(2,4))
11754  
11755       ELSEIF(ISUB.EQ.30.OR.ISUB.EQ.35) THEN
11756 C...Angular weight for f + g/gamma -> f + (gamma*/Z0)
11757 C...-> f + 2 quarks/leptons.
11758         CLILF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11759      &  COUP(1,1)*COUP(1,3)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,3)/4D0+
11760      &  COUP(1,3)**2*HGZ(JTZ,3)*COUP(3,3)**2
11761         CLIRF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11762      &  COUP(1,1)*COUP(1,3)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,4)/4D0+
11763      &  COUP(1,3)**2*HGZ(JTZ,3)*COUP(3,4)**2
11764         CRILF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11765      &  COUP(1,1)*COUP(1,4)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,3)/4D0+
11766      &  COUP(1,4)**2*HGZ(JTZ,3)*COUP(3,3)**2
11767         CRIRF=COUP(1,1)**2*HGZ(JTZ,1)*COUP(3,1)**2/16D0+
11768      &  COUP(1,1)*COUP(1,4)*HGZ(JTZ,2)*COUP(3,1)*COUP(3,4)/4D0+
11769      &  COUP(1,4)**2*HGZ(JTZ,3)*COUP(3,4)**2
11770         IF(K(ILIN(1),2).GT.0) WT=(CLILF+CRIRF)*(PKK(1,4)**2+
11771      &  PKK(3,5)**2)+(CLIRF+CRILF)*(PKK(1,3)**2+PKK(4,5)**2)
11772         IF(K(ILIN(1),2).LT.0) WT=(CLILF+CRIRF)*(PKK(1,3)**2+
11773      &  PKK(4,5)**2)+(CLIRF+CRILF)*(PKK(1,4)**2+PKK(3,5)**2)
11774         WTMAX=(CLILF+CLIRF+CRILF+CRIRF)*
11775      &  ((PKK(1,3)+PKK(1,4))**2+(PKK(3,5)+PKK(4,5))**2)
11776  
11777       ELSEIF(ISUB.EQ.31.OR.ISUB.EQ.36) THEN
11778 C...Angular weight for f + g/gamma -> f' + W+/- -> f' + 2 fermions.
11779         IF(K(ILIN(1),2).GT.0) WT=PKK(1,4)**2+PKK(3,5)**2
11780         IF(K(ILIN(1),2).LT.0) WT=PKK(1,3)**2+PKK(4,5)**2
11781         WTMAX=(PKK(1,3)+PKK(1,4))**2+(PKK(3,5)+PKK(4,5))**2
11782  
11783       ELSEIF(ISUB.EQ.71.OR.ISUB.EQ.72.OR.ISUB.EQ.73.OR.ISUB.EQ.76.OR.
11784      &  ISUB.EQ.77) THEN
11785 C...Angular weight for V_L1 + V_L2 -> V_L3 + V_L4 (V = Z/W).
11786         WT=16D0*PKK(3,5)*PKK(4,6)
11787         WTMAX=SH**2
11788  
11789       ELSEIF(ISUB.EQ.110) THEN
11790 C...Angular weight for f + fbar -> gamma + h0 -> gamma + X is isotropic.
11791         WT=1D0
11792         WTMAX=1D0
11793  
11794       ELSEIF(ISUB.EQ.141) THEN
11795         IF(IP.EQ.1.AND.IABS(KFL1(1)).LT.20) THEN
11796 C...Angular weight for f + fbar -> gamma*/Z0/Z'0 -> 2 quarks/leptons.
11797 C...Couplings of incoming flavour.
11798           KFAI=IABS(MINT(15))
11799           EI=KCHG(KFAI,1)/3D0
11800           AI=SIGN(1D0,EI+0.1D0)
11801           VI=AI-4D0*EI*XWV
11802           KFAIC=1
11803           IF(KFAI.LE.10.AND.MOD(KFAI,2).EQ.0) KFAIC=2
11804           IF(KFAI.GT.10.AND.MOD(KFAI,2).NE.0) KFAIC=3
11805           IF(KFAI.GT.10.AND.MOD(KFAI,2).EQ.0) KFAIC=4
11806           IF(KFAI.LE.2.OR.KFAI.EQ.11.OR.KFAI.EQ.12) THEN
11807             VPI=PARU(119+2*KFAIC)
11808             API=PARU(120+2*KFAIC)
11809           ELSEIF(KFAI.LE.4.OR.KFAI.EQ.13.OR.KFAI.EQ.14) THEN
11810             VPI=PARJ(178+2*KFAIC)
11811             API=PARJ(179+2*KFAIC)
11812           ELSE
11813             VPI=PARJ(186+2*KFAIC)
11814             API=PARJ(187+2*KFAIC)
11815           ENDIF
11816 C...Couplings of final flavour.
11817           KFAF=IABS(KFL1(1))
11818           EF=KCHG(KFAF,1)/3D0
11819           AF=SIGN(1D0,EF+0.1D0)
11820           VF=AF-4D0*EF*XWV
11821           KFAFC=1
11822           IF(KFAF.LE.10.AND.MOD(KFAF,2).EQ.0) KFAFC=2
11823           IF(KFAF.GT.10.AND.MOD(KFAF,2).NE.0) KFAFC=3
11824           IF(KFAF.GT.10.AND.MOD(KFAF,2).EQ.0) KFAFC=4
11825           IF(KFAF.LE.2.OR.KFAF.EQ.11.OR.KFAF.EQ.12) THEN
11826             VPF=PARU(119+2*KFAFC)
11827             APF=PARU(120+2*KFAFC)
11828           ELSEIF(KFAF.LE.4.OR.KFAF.EQ.13.OR.KFAF.EQ.14) THEN
11829             VPF=PARJ(178+2*KFAFC)
11830             APF=PARJ(179+2*KFAFC)
11831           ELSE
11832             VPF=PARJ(186+2*KFAFC)
11833             APF=PARJ(187+2*KFAFC)
11834           ENDIF
11835 C...Asymmetry and weight.
11836           ASYM=2D0*(EI*AI*VINT(112)*EF*AF+EI*API*VINT(113)*EF*APF+
11837      &    4D0*VI*AI*VINT(114)*VF*AF+(VI*API+VPI*AI)*VINT(115)*
11838      &    (VF*APF+VPF*AF)+4D0*VPI*API*VINT(116)*VPF*APF)/
11839      &    (EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*EF*VF+
11840      &    EI*VPI*VINT(113)*EF*VPF+(VI**2+AI**2)*VINT(114)*
11841      &    (VF**2+AF**2)+(VI*VPI+AI*API)*VINT(115)*(VF*VPF+AF*APF)+
11842      &    (VPI**2+API**2)*VINT(116)*(VPF**2+APF**2))
11843           WT=1D0+ASYM*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))+CTHE(1)**2
11844           WTMAX=2D0+ABS(ASYM)
11845         ELSEIF(IP.EQ.1.AND.IABS(KFL1(1)).EQ.24) THEN
11846 C...Angular weight for f + fbar -> Z' -> W+ + W-.
11847           RM1=P(NSD(1)+1,5)**2/SH
11848           RM2=P(NSD(1)+2,5)**2/SH
11849           CCOS2=-(1D0/16D0)*((1D0-RM1-RM2)**2-4D0*RM1*RM2)*
11850      &    (1D0-2D0*RM1-2D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
11851           CFLAT=-CCOS2+0.5D0*(RM1+RM2)*(1D0-2D0*RM1-2D0*RM2+
11852      &    (RM2-RM1)**2)
11853           WT=CFLAT+CCOS2*CTHE(1)**2
11854           WTMAX=CFLAT+MAX(0D0,CCOS2)
11855         ELSEIF(IP.EQ.1.AND.(KFL1(1).EQ.25.OR.KFL1(1).EQ.35.OR.
11856      &    IABS(KFL1(1)).EQ.37)) THEN
11857 C...Angular weight for f + fbar -> Z' -> h0 + A0, H0 + A0, H+ + H-.
11858           WT=1D0-CTHE(1)**2
11859           WTMAX=1D0
11860         ELSEIF(IP.EQ.1.AND.KFL2(1).EQ.25) THEN
11861 C...Angular weight for f + fbar -> Z' -> Z0 + h0.
11862           RM1=P(NSD(1)+1,5)**2/SH
11863           RM2=P(NSD(1)+2,5)**2/SH
11864           FLAM2=MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2)
11865           WT=1D0+FLAM2*(1D0-CTHE(1)**2)/(8D0*RM1)
11866           WTMAX=1D0+FLAM2/(8D0*RM1)
11867         ELSEIF(MZPWP.EQ.0) THEN
11868 C...Angular weight for f + fbar -> Z' -> W+ + W- -> 4 quarks/leptons
11869 C...(W:s like if intermediate Z).
11870           D34=P(IREF(IP,IORD),5)**2
11871           D56=P(IREF(IP,3-IORD),5)**2
11872           DT=PKK(1,3)+PKK(1,4)+D34
11873           DU=PKK(1,5)+PKK(1,6)+D56
11874           FGK135=ABS(FGK(1,2,3,4,5,6)-FGK(1,2,5,6,3,4))
11875           FGK253=ABS(FGK(2,1,5,6,3,4)-FGK(2,1,3,4,5,6))
11876           WT=(COUP(1,3)*FGK135)**2+(COUP(1,4)*FGK253)**2
11877           WTMAX=4D0*D34*D56*(COUP(1,3)**2+COUP(1,4)**2)*
11878      &    (DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU))
11879         ELSEIF(MZPWP.EQ.1) THEN
11880 C...Angular weight for f + fbar -> Z' -> W+ + W- -> 4 quarks/leptons
11881 C...(W:s approximately longitudinal, like if intermediate H).
11882           WT=16D0*PKK(3,5)*PKK(4,6)
11883           WTMAX=SH**2
11884         ELSE
11885 C...Angular weight for f + fbar -> Z' -> H+ + H-, Z0 + h0, h0 + A0,
11886 C...H0 + A0 -> 4 quarks/leptons, t + tbar -> b + W+ + bbar + W- .
11887           WT=1D0
11888           WTMAX=1D0
11889         ENDIF
11890  
11891       ELSEIF(ISUB.EQ.142) THEN
11892         IF(IP.EQ.1.AND.IABS(KFL1(1)).LT.20) THEN
11893 C...Angular weight for f + fbar' -> W'+/- -> 2 quarks/leptons.
11894           KFAI=IABS(MINT(15))
11895           KFAIC=1
11896           IF(KFAI.GT.10) KFAIC=2
11897           VI=PARU(129+2*KFAIC)
11898           AI=PARU(130+2*KFAIC)
11899           KFAF=IABS(KFL1(1))
11900           KFAFC=1
11901           IF(KFAF.GT.10) KFAFC=2
11902           VF=PARU(129+2*KFAFC)
11903           AF=PARU(130+2*KFAFC)
11904           ASYM=8D0*VI*AI*VF*AF/((VI**2+AI**2)*(VF**2+AF**2))
11905           WT=1D0+ASYM*CTHE(1)*ISIGN(1,MINT(15)*KFL1(1))+CTHE(1)**2
11906           WTMAX=2D0+ABS(ASYM)
11907         ELSEIF(IP.EQ.1.AND.IABS(KFL2(1)).EQ.23) THEN
11908 C...Angular weight for f + fbar' -> W'+/- -> W+/- + Z0.
11909           RM1=P(NSD(1)+1,5)**2/SH
11910           RM2=P(NSD(1)+2,5)**2/SH
11911           CCOS2=-(1D0/16D0)*((1D0-RM1-RM2)**2-4D0*RM1*RM2)*
11912      &    (1D0-2D0*RM1-2D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
11913           CFLAT=-CCOS2+0.5D0*(RM1+RM2)*(1D0-2D0*RM1-2D0*RM2+
11914      &    (RM2-RM1)**2)
11915           WT=CFLAT+CCOS2*CTHE(1)**2
11916           WTMAX=CFLAT+MAX(0D0,CCOS2)
11917         ELSEIF(IP.EQ.1.AND.KFL2(1).EQ.25) THEN
11918 C...Angular weight for f + fbar -> W'+/- -> W+/- + h0.
11919           RM1=P(NSD(1)+1,5)**2/SH
11920           RM2=P(NSD(1)+2,5)**2/SH
11921           FLAM2=MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2)
11922           WT=1D0+FLAM2*(1D0-CTHE(1)**2)/(8D0*RM1)
11923           WTMAX=1D0+FLAM2/(8D0*RM1)
11924         ELSEIF(MZPWP.EQ.0) THEN
11925 C...Angular weight for f + fbar' -> W' -> W + Z0 -> 4 quarks/leptons
11926 C...(W/Z like if intermediate W).
11927           D34=P(IREF(IP,IORD),5)**2
11928           D56=P(IREF(IP,3-IORD),5)**2
11929           DT=PKK(1,3)+PKK(1,4)+D34
11930           DU=PKK(1,5)+PKK(1,6)+D56
11931           FGK135=ABS(FGK(1,2,3,4,5,6)-FGK(1,2,5,6,3,4))
11932           FGK136=ABS(FGK(1,2,3,4,6,5)-FGK(1,2,6,5,3,4))
11933           WT=(COUP(5,3)*FGK135)**2+(COUP(5,4)*FGK136)**2
11934           WTMAX=4D0*D34*D56*(COUP(5,3)**2+COUP(5,4)**2)*
11935      &    (DIGK(DT,DU)+DIGK(DU,DT)-DJGK(DT,DU))
11936         ELSEIF(MZPWP.EQ.1) THEN
11937 C...Angular weight for f + fbar' -> W' -> W + Z0 -> 4 quarks/leptons
11938 C...(W/Z approximately longitudinal, like if intermediate H).
11939           WT=16D0*PKK(3,5)*PKK(4,6)
11940           WTMAX=SH**2
11941         ELSE
11942 C...Angular weight for f + fbar -> W' -> W + h0 -> whatever, 
11943 C...t + bbar -> t + W + bbar. 
11944           WT=1D0
11945           WTMAX=1D0
11946         ENDIF
11947  
11948       ELSEIF(ISUB.EQ.145.OR.ISUB.EQ.162.OR.ISUB.EQ.163.OR.ISUB.EQ.164)
11949      &  THEN
11950 C...Isotropic decay of leptoquarks (assumed spin 0).
11951         WT=1D0
11952         WTMAX=1D0
11953  
11954       ELSEIF(ISUB.GE.146.AND.ISUB.LE.148) THEN
11955 C...Decays of (spin 1/2) q*/e* -> q/e + (g,gamma) or (Z0,W+-).
11956         SIDE=1D0
11957         IF(MINT(16).EQ.21.OR.MINT(16).EQ.22) SIDE=-1D0
11958         IF(IP.EQ.1.AND.(KFL1(1).EQ.21.OR.KFL1(1).EQ.22)) THEN
11959           WT=1D0+SIDE*CTHE(1)
11960           WTMAX=2D0
11961         ELSEIF(IP.EQ.1) THEN
11962           RM1=P(NSD(1)+1,5)**2/SH
11963           WT=1D0+SIDE*CTHE(1)*(1D0-0.5D0*RM1)/(1D0+0.5D0*RM1)
11964           WTMAX=1D0+(1D0-0.5D0*RM1)/(1D0+0.5D0*RM1)
11965         ELSE
11966 C...W/Z decay assumed isotropic, since not known.
11967           WT=1D0
11968           WTMAX=1D0
11969         ENDIF
11970  
11971       ELSEIF(ISUB.EQ.149) THEN
11972 C...Isotropic decay of techni-eta.
11973         WT=1D0
11974         WTMAX=1D0
11975  
11976       ELSEIF(ISUB.EQ.191) THEN
11977         IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
11978 C...Angular weight for f + fbar -> rho_tech0 -> W+ W-,
11979 C...W+ pi_tech-, pi_tech+ W- or pi_tech+ pi_tech-.
11980           WT=1D0-CTHE(1)**2
11981           WTMAX=1D0
11982         ELSEIF(IP.EQ.1) THEN
11983 C...Angular weight for f + fbar -> rho_tech0 -> f fbar.
11984           CTHESG=CTHE(1)*ISIGN(1,MINT(15))
11985           XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
11986           BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
11987           BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
11988           KFAI=IABS(MINT(15))
11989           EI=KCHG(KFAI,1)/3D0
11990           AI=SIGN(1D0,EI+0.1D0)
11991           VI=AI-4D0*EI*XWV
11992           VALI=0.5D0*(VI+AI)
11993           VARI=0.5D0*(VI-AI)
11994           ALEFTI=(EI+VALI*BWZR)**2+(VALI*BWZI)**2
11995           ARIGHI=(EI+VARI*BWZR)**2+(VARI*BWZI)**2
11996           KFAF=IABS(KFL1(1))
11997           EF=KCHG(KFAF,1)/3D0
11998           AF=SIGN(1D0,EF+0.1D0)
11999           VF=AF-4D0*EF*XWV
12000           VALF=0.5D0*(VF+AF)
12001           VARF=0.5D0*(VF-AF)
12002           ALEFTF=(EF+VALF*BWZR)**2+(VALF*BWZI)**2
12003           ARIGHF=(EF+VARF*BWZR)**2+(VARF*BWZI)**2
12004           ASAME=ALEFTI*ALEFTF+ARIGHI*ARIGHF
12005           AFLIP=ALEFTI*ARIGHF+ARIGHI*ALEFTF
12006           WT=ASAME*(1D0+CTHESG)**2+AFLIP*(1D0-CTHESG)**2
12007           WTMAX=4D0*MAX(ASAME,AFLIP)
12008         ELSE
12009 C...Isotropic decay of W/pi_tech produced in rho_tech decay.
12010           WT=1D0
12011           WTMAX=1D0
12012         ENDIF
12013  
12014       ELSEIF(ISUB.EQ.192) THEN
12015         IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
12016 C...Angular weight for f + fbar' -> rho_tech+ -> W+ Z0,
12017 C...W+ pi_tech0, pi_tech+ Z0 or pi_tech+ pi_tech0.
12018           WT=1D0-CTHE(1)**2
12019           WTMAX=1D0
12020         ELSEIF(IP.EQ.1) THEN
12021 C...Angular weight for f + fbar' -> rho_tech+ -> f fbar'.
12022           CTHESG=CTHE(1)*ISIGN(1,MINT(15))
12023           WT=(1D0+CTHESG)**2
12024           WTMAX=4D0
12025         ELSE
12026 C...Isotropic decay of W/Z/pi_tech produced in rho_tech+ decay.
12027           WT=1D0
12028           WTMAX=1D0
12029         ENDIF
12030  
12031       ELSEIF(ISUB.EQ.193) THEN
12032         IF(IP.EQ.1.AND.IABS(KFL1(1)).GT.21) THEN
12033 C...Angular weight for f + fbar -> omega_tech0 ->
12034 C...gamma pi_tech0 or Z0 pi_tech0.
12035           WT=1D0+CTHE(1)**2
12036           WTMAX=2D0
12037         ELSEIF(IP.EQ.1) THEN
12038 C...Angular weight for f + fbar -> omega_tech0 -> f fbar.
12039           CTHESG=CTHE(1)*ISIGN(1,MINT(15))
12040           BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
12041           BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
12042           KFAI=IABS(MINT(15))
12043           EI=KCHG(KFAI,1)/3D0
12044           AI=SIGN(1D0,EI+0.1D0)
12045           VI=AI-4D0*EI*XWV
12046           VALI=0.5D0*(VI+AI)
12047           VARI=0.5D0*(VI-AI)
12048           BLEFTI=(EI-VALI*BWZR)**2+(VALI*BWZI)**2
12049           BRIGHI=(EI-VARI*BWZR)**2+(VARI*BWZI)**2
12050           KFAF=IABS(KFL1(1))
12051           EF=KCHG(KFAF,1)/3D0
12052           AF=SIGN(1D0,EF+0.1D0)
12053           VF=AF-4D0*EF*XWV
12054           VALF=0.5D0*(VF+AF)
12055           VARF=0.5D0*(VF-AF)
12056           BLEFTF=(EF-VALF*BWZR)**2+(VALF*BWZI)**2
12057           BRIGHF=(EF-VARF*BWZR)**2+(VARF*BWZI)**2
12058           BSAME=BLEFTI*BLEFTF+BRIGHI*BRIGHF
12059           BFLIP=BLEFTI*BRIGHF+BRIGHI*BLEFTF
12060           WT=BSAME*(1D0+CTHESG)**2+BFLIP*(1D0-CTHESG)**2
12061           WTMAX=4D0*MAX(BSAME,BFLIP)
12062         ELSE
12063 C...Isotropic decay of Z/pi_tech produced in omega_tech decay.
12064           WT=1D0
12065           WTMAX=1D0
12066         ENDIF
12067  
12068 C...Obtain correct angular distribution by rejection techniques.
12069       ELSE
12070         WT=1D0
12071         WTMAX=1D0
12072       ENDIF
12073       IF(WT.LT.PYR(0)*WTMAX) GOTO 340
12074  
12075 C...Construct massive four-vectors using angles chosen.
12076   500 DO 600 JT=1,JTMAX
12077         IF(KDCY(JT).EQ.0) GOTO 600
12078         ID=IREF(IP,JT)
12079         DO 510 J=1,5
12080           DPMO(J)=P(ID,J)
12081   510   CONTINUE
12082         DPMO(4)=SQRT(DPMO(1)**2+DPMO(2)**2+DPMO(3)**2+DPMO(5)**2)
12083 CMRENNA++
12084         IF(KFL3(JT).EQ.0) THEN
12085           CALL PYROBO(NSD(JT)+1,NSD(JT)+2,ACOS(CTHE(JT)),PHI(JT),
12086      &    DPMO(1)/DPMO(4),DPMO(2)/DPMO(4),DPMO(3)/DPMO(4))
12087           N0=NSD(JT)+2
12088         ELSE
12089           CALL PYROBO(NSD(JT)+1,NSD(JT)+3,ACOS(CTHE(JT)),PHI(JT),
12090      &    DPMO(1)/DPMO(4),DPMO(2)/DPMO(4),DPMO(3)/DPMO(4))
12091           N0=NSD(JT)+3
12092         ENDIF
12093  
12094         DO 520 J=1,4
12095           VDCY(J)=V(ID,J)+V(ID,5)*P(ID,J)/P(ID,5)
12096   520   CONTINUE
12097 C...Fill in position of decay vertex.
12098         DO 540 I=NSD(JT)+1,N0
12099           DO 530 J=1,4
12100             V(I,J)=VDCY(J)
12101   530     CONTINUE
12102           V(I,5)=0D0
12103   540   CONTINUE
12104 CMRENNA--
12105  
12106 C...Mark decayed resonances; trace history.
12107         K(ID,1)=K(ID,1)+10
12108         KFA=IABS(K(ID,2))
12109         KCA=PYCOMP(KFA)
12110         IF(KCQM(JT).NE.0) THEN
12111 C...Do not kill colour flow through coloured resonance!
12112         ELSE
12113           K(ID,4)=NSD(JT)+1
12114           K(ID,5)=NSD(JT)+2
12115           IF(KFL3(JT).NE.0) K(ID,5)=NSD(JT)+3
12116         ENDIF
12117  
12118 C...Add documentation lines.
12119         IF(ISUB.NE.0) THEN
12120           IDOC=MINT(83)+MINT(4)
12121 CMRENNA+++
12122           IHI=NSD(JT)+2
12123           IF(KFL3(JT).NE.0) IHI=IHI+1
12124           DO 560 I=NSD(JT)+1,IHI
12125 CMRENNA---
12126             I1=MINT(83)+MINT(4)+1
12127             K(I,3)=I1
12128             IF(MSTP(128).GE.1) K(I,3)=ID
12129             IF(MSTP(128).LE.1.AND.MINT(4).LT.MSTP(126)) THEN
12130               MINT(4)=MINT(4)+1
12131               K(I1,1)=21
12132               K(I1,2)=K(I,2)
12133               K(I1,3)=IREF(IP,JT+3)
12134               DO 550 J=1,5
12135                 P(I1,J)=P(I,J)
12136   550         CONTINUE
12137             ENDIF
12138   560     CONTINUE
12139         ELSE
12140           K(NSD(JT)+1,3)=ID
12141           K(NSD(JT)+2,3)=ID
12142           IF(KFL3(JT).NE.0) K(NSD(JT)+3,3)=ID
12143         ENDIF
12144  
12145 C...Do showering if any of the two/three products can shower.
12146         NSHBEF=N
12147         IF(MSTP(71).GE.1) THEN
12148           ISHOW1=0
12149           KFL1A=IABS(KFL1(JT))
12150           IF(KFL1A.LE.22) ISHOW1=1
12151           ISHOW2=0
12152           KFL2A=IABS(KFL2(JT))
12153           IF(KFL2A.LE.22) ISHOW2=1
12154           ISHOW3=0
12155           IF(KFL3(JT).NE.0) THEN
12156             KFL3A=IABS(KFL3(JT))
12157             IF(KFL3A.LE.22) ISHOW3=1
12158           ENDIF
12159           IF(ISHOW1.EQ.0.AND.ISHOW2.EQ.0.AND.ISHOW3.EQ.0) THEN
12160           ELSEIF(KFL3(JT).EQ.0) THEN
12161             CALL PYSHOW(NSD(JT)+1,NSD(JT)+2,P(ID,5))
12162           ELSE
12163             NSD1=NSD(JT)+1
12164             NSD2=NSD(JT)+2
12165             IF(ISHOW1.EQ.0.AND.ISHOW3.NE.0) THEN
12166               NSD1=NSD(JT)+3
12167             ELSEIF(ISHOW2.EQ.0.AND.ISHOW3.NE.0) THEN
12168               NSD2=NSD(JT)+3
12169             ENDIF
12170             PMSHOW=SQRT(MAX(0D0,(P(NSD1,4)+P(NSD2,4))**2-
12171      &      (P(NSD1,1)+P(NSD2,1))**2-(P(NSD1,2)+P(NSD2,2))**2-
12172      &      (P(NSD1,3)+P(NSD2,3))**2))
12173             CALL PYSHOW(NSD1,NSD2,PMSHOW)
12174           ENDIF
12175         ENDIF
12176         NSHAFT=N
12177         IF(JT.EQ.1) NAFT1=N
12178  
12179 C...Check if decay products moved by shower.
12180         NSD1=NSD(JT)+1
12181         NSD2=NSD(JT)+2
12182         NSD3=NSD(JT)+3
12183         IF(NSHAFT.GT.NSHBEF) THEN
12184           IF(K(NSD1,1).GT.10) THEN
12185             DO 570 I=NSHBEF+1,NSHAFT
12186               IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD1,2)) NSD1=I
12187   570       CONTINUE
12188           ENDIF
12189           IF(K(NSD2,1).GT.10) THEN
12190             DO 580 I=NSHBEF+1,NSHAFT
12191               IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD2,2).AND.
12192      &        I.NE.NSD1) NSD2=I
12193   580       CONTINUE
12194           ENDIF
12195           IF(KFL3(JT).NE.0.AND.K(NSD3,1).GT.10) THEN
12196             DO 590 I=NSHBEF+1,NSHAFT
12197               IF(K(I,1).LT.10.AND.K(I,2).EQ.K(NSD3,2).AND.
12198      &        I.NE.NSD1.AND.I.NE.NSD2) NSD3=I
12199   590       CONTINUE
12200           ENDIF
12201         ENDIF
12202  
12203 C...Store decay products for further treatment.
12204         NP=NP+1
12205         IREF(NP,1)=NSD1
12206         IREF(NP,2)=NSD2
12207         IREF(NP,3)=0
12208         IF(KFL3(JT).NE.0) IREF(NP,3)=NSD3
12209         IREF(NP,4)=IDOC+1
12210         IREF(NP,5)=IDOC+2
12211         IREF(NP,6)=0
12212         IF(KFL3(JT).NE.0) IREF(NP,6)=IDOC+3
12213         IREF(NP,7)=K(IREF(IP,JT),2)
12214         IREF(NP,8)=IREF(IP,JT)
12215   600 CONTINUE
12216  
12217 C...Fill information for 2 -> 1 -> 2.
12218   610 IF(JTMAX.EQ.1.AND.KDCY(1).NE.0.AND.ISUB.NE.0) THEN
12219         MINT(7)=MINT(83)+6+2*ISET(ISUB)
12220         MINT(8)=MINT(83)+7+2*ISET(ISUB)
12221         MINT(25)=KFL1(1)
12222         MINT(26)=KFL2(1)
12223         VINT(23)=CTHE(1)
12224         RM3=P(N-1,5)**2/SH
12225         RM4=P(N,5)**2/SH
12226         BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
12227         VINT(45)=-0.5D0*SH*(1D0-RM3-RM4-BE34*CTHE(1))
12228         VINT(46)=-0.5D0*SH*(1D0-RM3-RM4+BE34*CTHE(1))
12229         VINT(48)=0.25D0*SH*BE34**2*MAX(0D0,1D0-CTHE(1)**2)
12230         VINT(47)=SQRT(VINT(48))
12231       ENDIF
12232  
12233 C...Possibility of colour rearrangement in W+W- events.
12234       IF((ISUB.EQ.25.OR.ISUB.EQ.22).AND.MSTP(115).GE.1) THEN
12235         IAKF1=IABS(KFL1(1))
12236         IAKF2=IABS(KFL1(2))
12237         IAKF3=IABS(KFL2(1))
12238         IAKF4=IABS(KFL2(2))
12239         IF(MIN(IAKF1,IAKF2,IAKF3,IAKF4).GE.1.AND.
12240      &  MAX(IAKF1,IAKF2,IAKF3,IAKF4).LE.5) CALL
12241      &  PYRECO(IREF(1,1),IREF(1,2),NSD(1),NAFT1)
12242       ENDIF
12243  
12244 C...Loop back if needed.
12245   620 IF(IP.LT.NP) GOTO 150
12246  
12247       RETURN
12248       END
12249  
12250 C*********************************************************************
12251  
12252 C...PYMULT
12253 C...Initializes treatment of multiple interactions, selects kinematics
12254 C...of hardest interaction if low-pT physics included in run, and
12255 C...generates all non-hardest interactions.
12256  
12257       SUBROUTINE PYMULT(MMUL)
12258  
12259 C...Double precision and integer declarations.
12260       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
12261       IMPLICIT INTEGER(I-N)
12262       INTEGER PYK,PYCHGE,PYCOMP
12263 C...Commonblocks.
12264       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
12265       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
12266       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
12267       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
12268       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
12269       COMMON/PYINT1/MINT(400),VINT(400)
12270       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
12271       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
12272       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
12273       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
12274       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,
12275      &/PYINT2/,/PYINT3/,/PYINT5/,/PYINT7/
12276 C...Local arrays and saved variables.
12277       DIMENSION NMUL(20),SIGM(20),KSTR(500,2),VINTSV(80)
12278       SAVE XT2,XT2FAC,XC2,XTS,IRBIN,RBIN,NMUL,SIGM
12279  
12280 C...Initialization of multiple interaction treatment.
12281       IF(MMUL.EQ.1) THEN
12282         IF(MSTP(122).GE.1) WRITE(MSTU(11),5000) MSTP(82)
12283         ISUB=96
12284         MINT(1)=96
12285         VINT(63)=0D0
12286         VINT(64)=0D0
12287         VINT(143)=1D0
12288         VINT(144)=1D0
12289  
12290 C...Loop over phase space points: xT2 choice in 20 bins.
12291   100   SIGSUM=0D0
12292         DO 120 IXT2=1,20
12293           NMUL(IXT2)=MSTP(83)
12294           SIGM(IXT2)=0D0
12295           DO 110 ITRY=1,MSTP(83)
12296             RSCA=0.05D0*((21-IXT2)-PYR(0))
12297             XT2=VINT(149)*(1D0+VINT(149))/(VINT(149)+RSCA)-VINT(149)
12298             XT2=MAX(0.01D0*VINT(149),XT2)
12299             VINT(25)=XT2
12300  
12301 C...Choose tau and y*. Calculate cos(theta-hat).
12302             IF(PYR(0).LE.COEF(ISUB,1)) THEN
12303               TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
12304               TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
12305             ELSE
12306               TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
12307             ENDIF
12308             VINT(21)=TAU
12309             CALL PYKLIM(2)
12310             RYST=PYR(0)
12311             MYST=1
12312             IF(RYST.GT.COEF(ISUB,8)) MYST=2
12313             IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
12314             CALL PYKMAP(2,MYST,PYR(0))
12315             VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
12316  
12317 C...Calculate differential cross-section.
12318             VINT(71)=0.5D0*VINT(1)*SQRT(XT2)
12319             CALL PYSIGH(NCHN,SIGS)
12320             SIGM(IXT2)=SIGM(IXT2)+SIGS
12321   110     CONTINUE
12322           SIGSUM=SIGSUM+SIGM(IXT2)
12323   120   CONTINUE
12324         SIGSUM=SIGSUM/(20D0*MSTP(83))
12325  
12326 C...Reject result if sigma(parton-parton) is smaller than hadronic one.
12327         IF(SIGSUM.LT.1.1D0*SIGT(0,0,5)) THEN
12328           IF(MSTP(122).GE.1) WRITE(MSTU(11),5100) 
12329      &    PARP(82)*(VINT(1)/PARP(89))**PARP(90),SIGSUM
12330           PARP(82)=0.9D0*PARP(82)
12331           VINT(149)=4D0*(PARP(82)*(VINT(1)/PARP(89))**PARP(90))**2/
12332      &    VINT(2)
12333           GOTO 100
12334         ENDIF
12335         IF(MSTP(122).GE.1) WRITE(MSTU(11),5200) 
12336      &  PARP(82)*(VINT(1)/PARP(89))**PARP(90), SIGSUM
12337  
12338 C...Start iteration to find k factor.
12339         YKE=SIGSUM/MAX(1D-10,SIGT(0,0,5))
12340         SO=0.5D0
12341         XI=0D0
12342         YI=0D0
12343         XF=0D0
12344         YF=0D0
12345         XK=0.5D0
12346         IIT=0
12347   130   IF(IIT.EQ.0) THEN
12348           XK=2D0*XK
12349         ELSEIF(IIT.EQ.1) THEN
12350           XK=0.5D0*XK
12351         ELSE
12352           XK=XI+(YKE-YI)*(XF-XI)/(YF-YI)
12353         ENDIF
12354  
12355 C...Evaluate overlap integrals.
12356         IF(MSTP(82).EQ.2) THEN
12357           SP=0.5D0*PARU(1)*(1D0-EXP(-XK))
12358           SOP=SP/PARU(1)
12359         ELSE
12360           IF(MSTP(82).EQ.3) DELTAB=0.02D0
12361           IF(MSTP(82).EQ.4) DELTAB=MIN(0.01D0,0.05D0*PARP(84))
12362           SP=0D0
12363           SOP=0D0
12364           B=-0.5D0*DELTAB
12365   140     B=B+DELTAB
12366           IF(MSTP(82).EQ.3) THEN
12367             OV=EXP(-B**2)/PARU(2)
12368           ELSE
12369             CQ2=PARP(84)**2
12370             OV=((1D0-PARP(83))**2*EXP(-MIN(50D0,B**2))+
12371      &      2D0*PARP(83)*(1D0-PARP(83))*2D0/(1D0+CQ2)*
12372      &      EXP(-MIN(50D0,B**2*2D0/(1D0+CQ2)))+
12373      &      PARP(83)**2/CQ2*EXP(-MIN(50D0,B**2/CQ2)))/PARU(2)
12374           ENDIF
12375           PACC=1D0-EXP(-MIN(50D0,PARU(1)*XK*OV))
12376           SP=SP+PARU(2)*B*DELTAB*PACC
12377           SOP=SOP+PARU(2)*B*DELTAB*OV*PACC
12378           IF(B.LT.1D0.OR.B*PACC.GT.1D-6) GOTO 140
12379         ENDIF
12380         YK=PARU(1)*XK*SO/SP
12381  
12382 C...Continue iteration until convergence.
12383         IF(YK.LT.YKE) THEN
12384           XI=XK
12385           YI=YK
12386           IF(IIT.EQ.1) IIT=2
12387         ELSE
12388           XF=XK
12389           YF=YK
12390           IF(IIT.EQ.0) IIT=1
12391         ENDIF
12392         IF(ABS(YK-YKE).GE.1D-5*YKE) GOTO 130
12393  
12394 C...Store some results for subsequent use.
12395         VINT(145)=SIGSUM
12396         VINT(146)=SOP/SO
12397         VINT(147)=SOP/SP
12398  
12399 C...Initialize iteration in xT2 for hardest interaction.
12400       ELSEIF(MMUL.EQ.2) THEN
12401         IF(MSTP(82).LE.0) THEN
12402         ELSEIF(MSTP(82).EQ.1) THEN
12403           XT2=1D0
12404           SIGRAT=XSEC(96,1)/MAX(1D-10,VINT(315)*VINT(316)*SIGT(0,0,5))
12405           IF(MINT(141).NE.0.OR.MINT(142).NE.0) SIGRAT=SIGRAT*
12406      &    VINT(317)/(VINT(318)*VINT(320))
12407           XT2FAC=SIGRAT*VINT(149)/(1D0-VINT(149))
12408         ELSEIF(MSTP(82).EQ.2) THEN
12409           XT2=1D0
12410           XT2FAC=VINT(146)*XSEC(96,1)/MAX(1D-10,SIGT(0,0,5))*
12411      &    VINT(149)*(1D0+VINT(149))
12412         ELSE
12413           XC2=4D0*CKIN(3)**2/VINT(2)
12414           IF(CKIN(3).LE.CKIN(5).OR.MINT(82).GE.2) XC2=0D0
12415         ENDIF
12416  
12417       ELSEIF(MMUL.EQ.3) THEN
12418 C...Low-pT or multiple interactions (first semihard interaction):
12419 C...choose xT2 according to dpT2/pT2**2*exp(-(sigma above pT2)/norm)
12420 C...or (MSTP(82)>=2) dpT2/(pT2+pT0**2)**2*exp(-....).
12421         ISUB=MINT(1)
12422         IF(MSTP(82).LE.0) THEN
12423           XT2=0D0
12424         ELSEIF(MSTP(82).EQ.1) THEN
12425           XT2=XT2FAC*XT2/(XT2FAC-XT2*LOG(PYR(0)))
12426         ELSEIF(MSTP(82).EQ.2) THEN
12427           IF(XT2.LT.1D0.AND.EXP(-XT2FAC*XT2/(VINT(149)*(XT2+
12428      &    VINT(149)))).GT.PYR(0)) XT2=1D0
12429           IF(XT2.GE.1D0) THEN
12430             XT2=(1D0+VINT(149))*XT2FAC/(XT2FAC-(1D0+VINT(149))*LOG(1D0-
12431      &      PYR(0)*(1D0-EXP(-XT2FAC/(VINT(149)*(1D0+VINT(149)))))))-
12432      &      VINT(149)
12433           ELSE
12434             XT2=-XT2FAC/LOG(EXP(-XT2FAC/(XT2+VINT(149)))+PYR(0)*
12435      &      (EXP(-XT2FAC/VINT(149))-EXP(-XT2FAC/(XT2+VINT(149)))))-
12436      &      VINT(149)
12437           ENDIF
12438           XT2=MAX(0.01D0*VINT(149),XT2)
12439         ELSE
12440           XT2=(XC2+VINT(149))*(1D0+VINT(149))/(1D0+VINT(149)-
12441      &    PYR(0)*(1D0-XC2))-VINT(149)
12442           XT2=MAX(0.01D0*VINT(149),XT2)
12443         ENDIF
12444         VINT(25)=XT2
12445  
12446 C...Low-pT: choose xT2, tau, y* and cos(theta-hat) fixed.
12447         IF(MSTP(82).LE.1.AND.XT2.LT.VINT(149)) THEN
12448           IF(MINT(82).EQ.1) NGEN(0,1)=NGEN(0,1)-1
12449           IF(MINT(82).EQ.1) NGEN(ISUB,1)=NGEN(ISUB,1)-1
12450           ISUB=95
12451           MINT(1)=ISUB
12452           VINT(21)=0.01D0*VINT(149)
12453           VINT(22)=0D0
12454           VINT(23)=0D0
12455           VINT(25)=0.01D0*VINT(149)
12456  
12457         ELSE
12458 C...Multiple interactions (first semihard interaction).
12459 C...Choose tau and y*. Calculate cos(theta-hat).
12460           IF(PYR(0).LE.COEF(ISUB,1)) THEN
12461             TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
12462             TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
12463           ELSE
12464             TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
12465           ENDIF
12466           VINT(21)=TAU
12467           CALL PYKLIM(2)
12468           RYST=PYR(0)
12469           MYST=1
12470           IF(RYST.GT.COEF(ISUB,8)) MYST=2
12471           IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
12472           CALL PYKMAP(2,MYST,PYR(0))
12473           VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
12474         ENDIF
12475         VINT(71)=0.5D0*VINT(1)*SQRT(VINT(25))
12476  
12477 C...Store results of cross-section calculation.
12478       ELSEIF(MMUL.EQ.4) THEN
12479         ISUB=MINT(1)
12480         XTS=VINT(25)
12481         IF(ISET(ISUB).EQ.1) XTS=VINT(21)
12482         IF(ISET(ISUB).EQ.2)
12483      &  XTS=(4D0*VINT(48)+2D0*VINT(63)+2D0*VINT(64))/VINT(2)
12484         IF(ISET(ISUB).GE.3.AND.ISET(ISUB).LE.5) XTS=VINT(26)
12485         RBIN=MAX(0.000001D0,MIN(0.999999D0,XTS*(1D0+VINT(149))/
12486      &  (XTS+VINT(149))))
12487         IRBIN=INT(1D0+20D0*RBIN)
12488         IF(ISUB.EQ.96.AND.MSTP(171).EQ.0) THEN
12489           NMUL(IRBIN)=NMUL(IRBIN)+1
12490           SIGM(IRBIN)=SIGM(IRBIN)+VINT(153)
12491         ENDIF
12492  
12493 C...Choose impact parameter.
12494       ELSEIF(MMUL.EQ.5) THEN
12495         ISUB=MINT(1)
12496   145   IF(MSTP(82).EQ.3) THEN
12497           VINT(148)=PYR(0)/(PARU(2)*VINT(147))
12498         ELSE
12499           RTYPE=PYR(0)
12500           CQ2=PARP(84)**2
12501           IF(RTYPE.LT.(1D0-PARP(83))**2) THEN
12502             B2=-LOG(PYR(0))
12503           ELSEIF(RTYPE.LT.1D0-PARP(83)**2) THEN
12504             B2=-0.5D0*(1D0+CQ2)*LOG(PYR(0))
12505           ELSE
12506             B2=-CQ2*LOG(PYR(0))
12507           ENDIF
12508           VINT(148)=((1D0-PARP(83))**2*EXP(-MIN(50D0,B2))+2D0*PARP(83)*
12509      &    (1D0-PARP(83))*2D0/(1D0+CQ2)*EXP(-MIN(50D0,B2*2D0/(1D0+CQ2)))+
12510      &    PARP(83)**2/CQ2*EXP(-MIN(50D0,B2/CQ2)))/(PARU(2)*VINT(147))
12511         ENDIF
12512  
12513 C...Multiple interactions (variable impact parameter) : reject with
12514 C...probability exp(-overlap*cross-section above pT/normalization).
12515         RNCOR=(IRBIN-20D0*RBIN)*NMUL(IRBIN)
12516         SIGCOR=(IRBIN-20D0*RBIN)*SIGM(IRBIN)
12517         DO 150 IBIN=IRBIN+1,20
12518           RNCOR=RNCOR+NMUL(IBIN)
12519           SIGCOR=SIGCOR+SIGM(IBIN)
12520   150   CONTINUE
12521         SIGABV=(SIGCOR/RNCOR)*VINT(149)*(1D0-XTS)/(XTS+VINT(149))
12522         IF(MSTP(171).EQ.1) SIGABV=SIGABV*VINT(2)/VINT(289)
12523         VINT(150)=EXP(-MIN(50D0,VINT(146)*VINT(148)*
12524      &  SIGABV/MAX(1D-10,SIGT(0,0,5))))
12525         IF(MSTP(86).EQ.3.OR.(MSTP(86).EQ.2.AND.ISUB.NE.11.AND.
12526      &  ISUB.NE.12.AND.ISUB.NE.13.AND.ISUB.NE.28.AND.ISUB.NE.53
12527      &  .AND.ISUB.NE.68.AND.ISUB.NE.95.AND.ISUB.NE.96)) THEN
12528           IF(VINT(150).LT.PYR(0)) GOTO 145
12529           VINT(150)=1D0
12530         ENDIF 
12531  
12532 C...Generate additional multiple semihard interactions.
12533       ELSEIF(MMUL.EQ.6) THEN
12534         ISUBSV=MINT(1)
12535         DO 160 J=11,80
12536           VINTSV(J)=VINT(J)
12537   160   CONTINUE
12538         ISUB=96
12539         MINT(1)=96
12540         VINT(151)=0D0
12541         VINT(152)=0D0
12542  
12543 C...Reconstruct strings in hard scattering.
12544         NMAX=MINT(84)+4
12545         IF(ISET(ISUBSV).EQ.1) NMAX=MINT(84)+2
12546         IF(ISET(ISUBSV).EQ.11) NMAX=MINT(84)+2+MINT(3)
12547         NSTR=0
12548         DO 180 I=MINT(84)+1,NMAX
12549           KCS=KCHG(PYCOMP(K(I,2)),2)*ISIGN(1,K(I,2))
12550           IF(KCS.EQ.0) GOTO 180
12551           DO 170 J=1,4
12552             IF(KCS.EQ.1.AND.(J.EQ.2.OR.J.EQ.4)) GOTO 170
12553             IF(KCS.EQ.-1.AND.(J.EQ.1.OR.J.EQ.3)) GOTO 170
12554             IF(J.LE.2) THEN
12555               IST=MOD(K(I,J+3)/MSTU(5),MSTU(5))
12556             ELSE
12557               IST=MOD(K(I,J+1),MSTU(5))
12558             ENDIF
12559             IF(IST.LT.MINT(84).OR.IST.GT.I) GOTO 170
12560             IF(KCHG(PYCOMP(K(IST,2)),2).EQ.0) GOTO 170
12561             NSTR=NSTR+1
12562             IF(J.EQ.1.OR.J.EQ.4) THEN
12563               KSTR(NSTR,1)=I
12564               KSTR(NSTR,2)=IST
12565             ELSE
12566               KSTR(NSTR,1)=IST
12567               KSTR(NSTR,2)=I
12568             ENDIF
12569   170     CONTINUE
12570   180   CONTINUE
12571  
12572 C...Set up starting values for iteration in xT2.
12573         IF(MSTP(86).EQ.3.OR.(MSTP(86).EQ.2.AND.ISUBSV.NE.11.AND.
12574      &  ISUBSV.NE.12.AND.ISUBSV.NE.13.AND.ISUBSV.NE.28.AND.
12575      &  ISUBSV.NE.53.AND.ISUBSV.NE.68.AND.ISUBSV.NE.95.AND.
12576      &  ISUBSV.NE.96)) THEN
12577           XT2=(1D0-VINT(141))*(1D0-VINT(142))
12578         ELSE
12579           XT2=VINT(25)
12580           IF(ISET(ISUBSV).EQ.1) XT2=VINT(21)
12581           IF(ISET(ISUBSV).EQ.2)
12582      &    XT2=(4D0*VINT(48)+2D0*VINT(63)+2D0*VINT(64))/VINT(2)
12583           IF(ISET(ISUBSV).GE.3.AND.ISET(ISUBSV).LE.5) XT2=VINT(26)
12584         ENDIF 
12585         IF(MSTP(82).LE.1) THEN
12586           SIGRAT=XSEC(ISUB,1)/MAX(1D-10,VINT(315)*VINT(316)*SIGT(0,0,5))
12587           IF(MINT(141).NE.0.OR.MINT(142).NE.0) SIGRAT=SIGRAT*
12588      &    VINT(317)/(VINT(318)*VINT(320))
12589           XT2FAC=SIGRAT*VINT(149)/(1D0-VINT(149))
12590         ELSE
12591           XT2FAC=VINT(146)*VINT(148)*XSEC(ISUB,1)/
12592      &    MAX(1D-10,SIGT(0,0,5))*VINT(149)*(1D0+VINT(149))
12593         ENDIF
12594         VINT(63)=0D0
12595         VINT(64)=0D0
12596         VINT(143)=1D0-VINT(141)
12597         VINT(144)=1D0-VINT(142)
12598  
12599 C...Iterate downwards in xT2.
12600   190   IF(MSTP(82).LE.1) THEN
12601           XT2=XT2FAC*XT2/(XT2FAC-XT2*LOG(PYR(0)))
12602           IF(XT2.LT.VINT(149)) GOTO 240
12603         ELSE
12604           IF(XT2.LE.0.01001D0*VINT(149)) GOTO 240
12605           XT2=XT2FAC*(XT2+VINT(149))/(XT2FAC-(XT2+VINT(149))*
12606      &    LOG(PYR(0)))-VINT(149)
12607           IF(XT2.LE.0D0) GOTO 240
12608           XT2=MAX(0.01D0*VINT(149),XT2)
12609         ENDIF
12610         VINT(25)=XT2
12611  
12612 C...Choose tau and y*. Calculate cos(theta-hat).
12613         IF(PYR(0).LE.COEF(ISUB,1)) THEN
12614           TAUT=(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)**PYR(0)
12615           TAU=XT2*(1D0+TAUT)**2/(4D0*TAUT)
12616         ELSE
12617           TAU=XT2*(1D0+TAN(PYR(0)*ATAN(SQRT(1D0/XT2-1D0)))**2)
12618         ENDIF
12619         VINT(21)=TAU
12620         CALL PYKLIM(2)
12621         RYST=PYR(0)
12622         MYST=1
12623         IF(RYST.GT.COEF(ISUB,8)) MYST=2
12624         IF(RYST.GT.COEF(ISUB,8)+COEF(ISUB,9)) MYST=3
12625         CALL PYKMAP(2,MYST,PYR(0))
12626         VINT(23)=SQRT(MAX(0D0,1D0-XT2/TAU))*(-1)**INT(1.5D0+PYR(0))
12627  
12628 C...Check that x not used up. Accept or reject kinematical variables.
12629         X1M=SQRT(TAU)*EXP(VINT(22))
12630         X2M=SQRT(TAU)*EXP(-VINT(22))
12631         IF(VINT(143)-X1M.LT.0.01D0.OR.VINT(144)-X2M.LT.0.01D0) GOTO 190
12632         VINT(71)=0.5D0*VINT(1)*SQRT(XT2)
12633         CALL PYSIGH(NCHN,SIGS)
12634         IF(MINT(141).NE.0.OR.MINT(142).NE.0) SIGS=SIGS*VINT(320)
12635         IF(SIGS.LT.XSEC(ISUB,1)*PYR(0)) GOTO 190
12636  
12637 C...Reset K, P and V vectors. Select some variables.
12638         DO 210 I=N+1,N+2
12639           DO 200 J=1,5
12640             K(I,J)=0
12641             P(I,J)=0D0
12642             V(I,J)=0D0
12643   200     CONTINUE
12644   210   CONTINUE
12645         RFLAV=PYR(0)
12646         PT=0.5D0*VINT(1)*SQRT(XT2)
12647         PHI=PARU(2)*PYR(0)
12648         CTH=VINT(23)
12649  
12650 C...Add first parton to event record.
12651         K(N+1,1)=3
12652         K(N+1,2)=21
12653         IF(RFLAV.GE.MAX(PARP(85),PARP(86))) K(N+1,2)=
12654      &  1+INT((2D0+PARJ(2))*PYR(0))
12655         P(N+1,1)=PT*COS(PHI)
12656         P(N+1,2)=PT*SIN(PHI)
12657         P(N+1,3)=0.25D0*VINT(1)*(VINT(41)*(1D0+CTH)-VINT(42)*(1D0-CTH))
12658         P(N+1,4)=0.25D0*VINT(1)*(VINT(41)*(1D0+CTH)+VINT(42)*(1D0-CTH))
12659         P(N+1,5)=0D0
12660  
12661 C...Add second parton to event record.
12662         K(N+2,1)=3
12663         K(N+2,2)=21
12664         IF(K(N+1,2).NE.21) K(N+2,2)=-K(N+1,2)
12665         P(N+2,1)=-P(N+1,1)
12666         P(N+2,2)=-P(N+1,2)
12667         P(N+2,3)=0.25D0*VINT(1)*(VINT(41)*(1D0-CTH)-VINT(42)*(1D0+CTH))
12668         P(N+2,4)=0.25D0*VINT(1)*(VINT(41)*(1D0-CTH)+VINT(42)*(1D0+CTH))
12669         P(N+2,5)=0D0
12670  
12671         IF(RFLAV.LT.PARP(85).AND.NSTR.GE.1) THEN
12672 C....Choose relevant string pieces to place gluons on.
12673           DO 230 I=N+1,N+2
12674             DMIN=1D8
12675             DO 220 ISTR=1,NSTR
12676               I1=KSTR(ISTR,1)
12677               I2=KSTR(ISTR,2)
12678               DIST=(P(I,4)*P(I1,4)-P(I,1)*P(I1,1)-P(I,2)*P(I1,2)-
12679      &        P(I,3)*P(I1,3))*(P(I,4)*P(I2,4)-P(I,1)*P(I2,1)-
12680      &        P(I,2)*P(I2,2)-P(I,3)*P(I2,3))/MAX(1D0,P(I1,4)*P(I2,4)-
12681      &        P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-P(I1,3)*P(I2,3))
12682               IF(ISTR.EQ.1.OR.DIST.LT.DMIN) THEN
12683                 DMIN=DIST
12684                 IST1=I1
12685                 IST2=I2
12686                 ISTM=ISTR
12687               ENDIF
12688   220       CONTINUE
12689  
12690 C....Colour flow adjustments, new string pieces.
12691             IF(K(IST1,4)/MSTU(5).EQ.IST2) K(IST1,4)=MSTU(5)*I+
12692      &      MOD(K(IST1,4),MSTU(5))
12693             IF(MOD(K(IST1,5),MSTU(5)).EQ.IST2) K(IST1,5)=
12694      &      MSTU(5)*(K(IST1,5)/MSTU(5))+I
12695             K(I,5)=MSTU(5)*IST1
12696             K(I,4)=MSTU(5)*IST2
12697             IF(K(IST2,5)/MSTU(5).EQ.IST1) K(IST2,5)=MSTU(5)*I+
12698      &      MOD(K(IST2,5),MSTU(5))
12699             IF(MOD(K(IST2,4),MSTU(5)).EQ.IST1) K(IST2,4)=
12700      &      MSTU(5)*(K(IST2,4)/MSTU(5))+I
12701             KSTR(ISTM,2)=I
12702             KSTR(NSTR+1,1)=I
12703             KSTR(NSTR+1,2)=IST2
12704             NSTR=NSTR+1
12705   230     CONTINUE
12706  
12707 C...String drawing and colour flow for gluon loop.
12708         ELSEIF(K(N+1,2).EQ.21) THEN
12709           K(N+1,4)=MSTU(5)*(N+2)
12710           K(N+1,5)=MSTU(5)*(N+2)
12711           K(N+2,4)=MSTU(5)*(N+1)
12712           K(N+2,5)=MSTU(5)*(N+1)
12713           KSTR(NSTR+1,1)=N+1
12714           KSTR(NSTR+1,2)=N+2
12715           KSTR(NSTR+2,1)=N+2
12716           KSTR(NSTR+2,2)=N+1
12717           NSTR=NSTR+2
12718  
12719 C...String drawing and colour flow for qqbar pair.
12720         ELSE
12721           K(N+1,4)=MSTU(5)*(N+2)
12722           K(N+2,5)=MSTU(5)*(N+1)
12723           KSTR(NSTR+1,1)=N+1
12724           KSTR(NSTR+1,2)=N+2
12725           NSTR=NSTR+1
12726         ENDIF
12727  
12728 C...Update remaining energy; iterate.
12729         N=N+2
12730         IF(N.GT.MSTU(4)-MSTU(32)-10) THEN
12731           CALL PYERRM(11,'(PYMULT:) no more memory left in PYJETS')
12732           IF(MSTU(21).GE.1) RETURN
12733         ENDIF
12734         MINT(31)=MINT(31)+1
12735         VINT(151)=VINT(151)+VINT(41)
12736         VINT(152)=VINT(152)+VINT(42)
12737         VINT(143)=VINT(143)-VINT(41)
12738         VINT(144)=VINT(144)-VINT(42)
12739         IF(MINT(31).LT.240) GOTO 190
12740   240   CONTINUE
12741         MINT(1)=ISUBSV
12742         DO 250 J=11,80
12743           VINT(J)=VINTSV(J)
12744   250   CONTINUE
12745       ENDIF
12746  
12747 C...Format statements for printout.
12748  5000 FORMAT(/1X,'****** PYMULT: initialization of multiple inter',
12749      &'actions for MSTP(82) =',I2,' ******')
12750  5100 FORMAT(8X,'pT0 =',F5.2,' GeV gives sigma(parton-parton) =',1P,
12751      &D9.2,' mb: rejected')
12752  5200 FORMAT(8X,'pT0 =',F5.2,' GeV gives sigma(parton-parton) =',1P,
12753      &D9.2,' mb: accepted')
12754  
12755       RETURN
12756       END
12757  
12758 C*********************************************************************
12759  
12760 C...PYREMN
12761 C...Adds on target remnants (one or two from each side) and
12762 C...includes primordial kT for hadron beams.
12763  
12764       SUBROUTINE PYREMN(IPU1,IPU2)
12765  
12766 C...Double precision and integer declarations.
12767       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
12768       IMPLICIT INTEGER(I-N)
12769       INTEGER PYK,PYCHGE,PYCOMP
12770 C...Commonblocks.
12771       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
12772       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
12773       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
12774       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
12775       COMMON/PYINT1/MINT(400),VINT(400)
12776       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
12777 C...Local arrays.
12778       DIMENSION KFLCH(2),KFLSP(2),CHI(2),PMS(0:6),IS(2),ISN(2),ROBO(5),
12779      &PSYS(0:2,5),PMIN(0:2),QOLD(4),QNEW(4),DBE(3),PSUM(4)
12780  
12781 C...Find event type and remaining energy.
12782       ISUB=MINT(1)
12783       NS=N
12784       IF(MINT(50).EQ.0.OR.MSTP(81).LE.0) THEN
12785         VINT(143)=1D0-VINT(141)
12786         VINT(144)=1D0-VINT(142)
12787       ENDIF
12788  
12789 C...Define initial partons.
12790       NTRY=0
12791   100 NTRY=NTRY+1
12792       DO 130 JT=1,2
12793         I=MINT(83)+JT+2
12794         IF(JT.EQ.1) IPU=IPU1
12795         IF(JT.EQ.2) IPU=IPU2
12796         K(I,1)=21
12797         K(I,2)=K(IPU,2)
12798         K(I,3)=I-2
12799         PMS(JT)=0D0
12800         VINT(156+JT)=0D0
12801         VINT(158+JT)=0D0
12802         IF(MINT(47).EQ.1) THEN
12803           DO 110 J=1,5
12804             P(I,J)=P(I-2,J)
12805   110     CONTINUE
12806         ELSEIF(ISUB.EQ.95) THEN
12807           K(I,2)=21
12808         ELSE
12809           P(I,5)=P(IPU,5)
12810  
12811 C...No primordial kT, or chosen according to truncated Gaussian or
12812 C...exponential, or (for photon) predetermined or power law.
12813   120     IF(MINT(40+JT).EQ.2.AND.MINT(10+JT).NE.22) THEN
12814             IF(MSTP(91).LE.0) THEN
12815               PT=0D0
12816             ELSEIF(MSTP(91).EQ.1) THEN
12817               PT=PARP(91)*SQRT(-LOG(PYR(0)))
12818             ELSE
12819               RPT1=PYR(0)
12820               RPT2=PYR(0)
12821               PT=-PARP(92)*LOG(RPT1*RPT2)
12822             ENDIF
12823             IF(PT.GT.PARP(93)) GOTO 120
12824           ELSEIF(MINT(106+JT).EQ.3) THEN
12825             PTA=SQRT(VINT(282+JT))
12826             PTB=0D0
12827             IF(MSTP(66).EQ.5.AND.MSTP(93).EQ.1) THEN
12828               PTB=PARP(99)*SQRT(-LOG(PYR(0)))
12829             ELSEIF(MSTP(66).EQ.5.AND.MSTP(93).EQ.2) THEN
12830               RPT1=PYR(0)
12831               RPT2=PYR(0)
12832               PTB=-PARP(99)*LOG(RPT1*RPT2)
12833             ENDIF
12834             IF(PTB.GT.PARP(100)) GOTO 120
12835             PT=SQRT(PTA**2+PTB**2+2D0*PTA*PTB*COS(PARU(2)*PYR(0)))
12836             PT=PT*0.8D0**MINT(57)
12837             IF(NTRY.GT.10) PT=PT*0.8D0**(NTRY-10)
12838           ELSEIF(IABS(MINT(14+JT)).LE.8.OR.MINT(14+JT).EQ.21) THEN
12839             IF(MSTP(93).LE.0) THEN
12840               PT=0D0
12841             ELSEIF(MSTP(93).EQ.1) THEN
12842               PT=PARP(99)*SQRT(-LOG(PYR(0)))
12843             ELSEIF(MSTP(93).EQ.2) THEN
12844               RPT1=PYR(0)
12845               RPT2=PYR(0)
12846               PT=-PARP(99)*LOG(RPT1*RPT2)
12847             ELSEIF(MSTP(93).EQ.3) THEN
12848               HA=PARP(99)**2
12849               HB=PARP(100)**2
12850               PT=SQRT(MAX(0D0,HA*(HA+HB)/(HA+HB-PYR(0)*HB)-HA))
12851             ELSE
12852               HA=PARP(99)**2
12853               HB=PARP(100)**2
12854               IF(MSTP(93).EQ.5) HB=MIN(VINT(48),PARP(100)**2)
12855               PT=SQRT(MAX(0D0,HA*((HA+HB)/HA)**PYR(0)-HA))
12856             ENDIF
12857             IF(PT.GT.PARP(100)) GOTO 120
12858           ELSE
12859             PT=0D0
12860           ENDIF
12861           VINT(156+JT)=PT
12862           PHI=PARU(2)*PYR(0)
12863           P(I,1)=PT*COS(PHI)
12864           P(I,2)=PT*SIN(PHI)
12865           PMS(JT)=P(I,5)**2+P(I,1)**2+P(I,2)**2
12866         ENDIF
12867   130 CONTINUE
12868       IF(MINT(47).EQ.1) RETURN
12869  
12870 C...Kinematics construction for initial partons.
12871       I1=MINT(83)+3
12872       I2=MINT(83)+4
12873       IF(ISUB.EQ.95) THEN
12874         SHS=0D0
12875         SHR=0D0
12876       ELSE
12877         SHS=VINT(141)*VINT(142)*VINT(2)+(P(I1,1)+P(I2,1))**2+
12878      &  (P(I1,2)+P(I2,2))**2
12879         SHR=SQRT(MAX(0D0,SHS))
12880         IF((SHS-PMS(1)-PMS(2))**2-4D0*PMS(1)*PMS(2).LE.0D0) GOTO 100
12881         P(I1,4)=0.5D0*(SHR+(PMS(1)-PMS(2))/SHR)
12882         P(I1,3)=SQRT(MAX(0D0,P(I1,4)**2-PMS(1)))
12883         P(I2,4)=SHR-P(I1,4)
12884         P(I2,3)=-P(I1,3)
12885  
12886 C...Transform partons to overall CM-frame.
12887         ROBO(3)=(P(I1,1)+P(I2,1))/SHR
12888         ROBO(4)=(P(I1,2)+P(I2,2))/SHR
12889         CALL PYROBO(I1,I2,0D0,0D0,-ROBO(3),-ROBO(4),0D0)
12890         ROBO(2)=PYANGL(P(I1,1),P(I1,2))
12891         CALL PYROBO(I1,I2,0D0,-ROBO(2),0D0,0D0,0D0)
12892         ROBO(1)=PYANGL(P(I1,3),P(I1,1))
12893         CALL PYROBO(I1,I2,-ROBO(1),0D0,0D0,0D0,0D0)
12894         CALL PYROBO(I1,MINT(52),ROBO(1),ROBO(2),ROBO(3),ROBO(4),0D0)
12895         ROBO(5)=(VINT(141)-VINT(142))/(VINT(141)+VINT(142))
12896         CALL PYROBO(I1,MINT(52),0D0,0D0,0D0,0D0,ROBO(5))
12897       ENDIF
12898  
12899 C...Optionally fix up x and Q2 definitions for leptoproduction.
12900       IDISXQ=0
12901       IF((MINT(43).EQ.2.OR.MINT(43).EQ.3).AND.((ISUB.EQ.10.AND.
12902      &MSTP(23).GE.1).OR.(ISUB.EQ.83.AND.MSTP(23).GE.2))) IDISXQ=1
12903       IF(IDISXQ.EQ.1) THEN
12904  
12905 C...Find where incoming and outgoing leptons/partons are sitting.
12906         LESD=1
12907         IF(MINT(42).EQ.1) LESD=2
12908         LPIN=MINT(83)+3-LESD
12909         LEIN=MINT(84)+LESD
12910         LQIN=MINT(84)+3-LESD
12911         LEOUT=MINT(84)+2+LESD
12912         LQOUT=MINT(84)+5-LESD
12913         IF(K(LEIN,3).GT.LEIN) LEIN=K(LEIN,3)
12914         IF(K(LQIN,3).GT.LQIN) LQIN=K(LQIN,3)
12915         LSCMS=0
12916         DO 140 I=MINT(84)+5,N
12917           IF(K(I,2).EQ.94) THEN
12918             LSCMS=I
12919             LEOUT=I+LESD
12920             LQOUT=I+3-LESD
12921           ENDIF
12922   140   CONTINUE
12923         LQBG=IPU1
12924         IF(LESD.EQ.1) LQBG=IPU2
12925  
12926 C...Calculate actual and wanted momentum transfer.
12927         XNOM=VINT(43-LESD)
12928         Q2NOM=-VINT(45)
12929         HPK=2D0*(P(LPIN,4)*P(LEIN,4)-P(LPIN,1)*P(LEIN,1)-
12930      &  P(LPIN,2)*P(LEIN,2)-P(LPIN,3)*P(LEIN,3))*
12931      &  (P(MINT(83)+LESD,4)*VINT(40+LESD)/P(LEIN,4))
12932         HPT2=MAX(0D0,Q2NOM*(1D0-Q2NOM/(XNOM*HPK)))
12933         FAC=SQRT(HPT2/(P(LEOUT,1)**2+P(LEOUT,2)**2))
12934         P(N+1,1)=FAC*P(LEOUT,1)
12935         P(N+1,2)=FAC*P(LEOUT,2)
12936         P(N+1,3)=0.25D0*((HPK-Q2NOM/XNOM)/P(LPIN,4)-
12937      &  Q2NOM/(P(MINT(83)+LESD,4)*VINT(40+LESD)))*(-1)**(LESD+1)
12938         P(N+1,4)=SQRT(P(LEOUT,5)**2+P(N+1,1)**2+P(N+1,2)**2+
12939      &  P(N+1,3)**2)
12940         DO 150 J=1,4
12941           QOLD(J)=P(LEIN,J)-P(LEOUT,J)
12942           QNEW(J)=P(LEIN,J)-P(N+1,J)
12943   150   CONTINUE
12944  
12945 C...Boost outgoing electron and daughters.
12946         IF(LSCMS.EQ.0) THEN
12947           DO 160 J=1,4
12948             P(LEOUT,J)=P(N+1,J)
12949   160     CONTINUE
12950         ELSE
12951           DO 170 J=1,3
12952             P(N+2,J)=(P(N+1,J)-P(LEOUT,J))/(P(N+1,4)+P(LEOUT,4))
12953   170     CONTINUE
12954           PINV=2D0/(1D0+P(N+2,1)**2+P(N+2,2)**2+P(N+2,3)**2)
12955           DO 180 J=1,3
12956             DBE(J)=PINV*P(N+2,J)
12957   180     CONTINUE
12958           DO 200 I=LSCMS+1,N
12959             IORIG=I
12960   190       IORIG=K(IORIG,3)
12961             IF(IORIG.GT.LEOUT) GOTO 190
12962             IF(I.EQ.LEOUT.OR.IORIG.EQ.LEOUT)
12963      &      CALL PYROBO(I,I,0D0,0D0,DBE(1),DBE(2),DBE(3))
12964   200     CONTINUE
12965         ENDIF
12966  
12967 C...Copy shower initiator and all outgoing partons.
12968         NCOP=N+1
12969         K(NCOP,3)=LQBG
12970         DO 210 J=1,5
12971           P(NCOP,J)=P(LQBG,J)
12972   210   CONTINUE
12973         DO 240 I=MINT(84)+1,N
12974           ICOP=0
12975           IF(K(I,1).GT.10) GOTO 240
12976           IF(I.EQ.LQBG.OR.I.EQ.LQOUT) THEN
12977             ICOP=I
12978           ELSE
12979             IORIG=I
12980   220       IORIG=K(IORIG,3)
12981             IF(IORIG.EQ.LQBG.OR.IORIG.EQ.LQOUT) THEN
12982               ICOP=IORIG
12983             ELSEIF(IORIG.GT.MINT(84).AND.IORIG.LE.N) THEN
12984               GOTO 220
12985             ENDIF
12986           ENDIF
12987           IF(ICOP.NE.0) THEN
12988             NCOP=NCOP+1
12989             K(NCOP,3)=I
12990             DO 230 J=1,5
12991               P(NCOP,J)=P(I,J)
12992   230       CONTINUE
12993           ENDIF
12994   240   CONTINUE
12995  
12996 C...Calculate relative rescaling factors.
12997         SLC=3-2*LESD
12998         PLCSUM=0D0
12999         DO 250 I=N+2,NCOP
13000           PLCSUM=PLCSUM+(P(I,4)+SLC*P(I,3))
13001   250   CONTINUE
13002         DO 260 I=N+2,NCOP
13003           V(I,1)=(P(I,4)+SLC*P(I,3))/PLCSUM
13004   260   CONTINUE
13005  
13006 C...Transfer extra three-momentum of current.
13007         DO 280 I=N+2,NCOP
13008           DO 270 J=1,3
13009             P(I,J)=P(I,J)+V(I,1)*(QNEW(J)-QOLD(J))
13010   270     CONTINUE
13011           P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
13012   280   CONTINUE
13013  
13014 C...Iterate change of initiator momentum to get energy right.
13015         ITER=0
13016   290   ITER=ITER+1
13017         PEEX=-P(N+1,4)-QNEW(4)
13018         PEMV=-P(N+1,3)/P(N+1,4)
13019         DO 300 I=N+2,NCOP
13020           PEEX=PEEX+P(I,4)
13021           PEMV=PEMV+V(I,1)*P(I,3)/P(I,4)
13022   300   CONTINUE
13023         IF(ABS(PEMV).LT.1D-10) THEN
13024           MINT(51)=1
13025           MINT(57)=MINT(57)+1
13026           RETURN
13027         ENDIF
13028         PZCH=-PEEX/PEMV
13029         P(N+1,3)=P(N+1,3)+PZCH
13030         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)
13031         DO 310 I=N+2,NCOP
13032           P(I,3)=P(I,3)+V(I,1)*PZCH
13033           P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
13034   310   CONTINUE
13035         IF(ITER.LT.10.AND.ABS(PEEX).GT.1D-6*P(N+1,4)) GOTO 290
13036  
13037 C...Modify momenta in event record.
13038         HBE=2D0*(P(N+1,4)+P(LQBG,4))*(P(N+1,3)-P(LQBG,3))/
13039      &  ((P(N+1,4)+P(LQBG,4))**2+(P(N+1,3)-P(LQBG,3))**2)
13040         IF(ABS(HBE).GE.1D0) THEN
13041           MINT(51)=1
13042           MINT(57)=MINT(57)+1
13043           RETURN
13044         ENDIF
13045         I=MINT(83)+5-LESD
13046         CALL PYROBO(I,I,0D0,0D0,0D0,0D0,HBE)
13047         DO 330 I=N+1,NCOP
13048           ICOP=K(I,3)
13049           DO 320 J=1,4
13050             P(ICOP,J)=P(I,J)
13051   320     CONTINUE
13052   330   CONTINUE
13053       ENDIF
13054  
13055 C...Check minimum invariant mass of remnant system(s).
13056       PSYS(0,4)=P(I1,4)+P(I2,4)+0.5D0*VINT(1)*(VINT(151)+VINT(152))
13057       PSYS(0,3)=P(I1,3)+P(I2,3)+0.5D0*VINT(1)*(VINT(151)-VINT(152))
13058       PMS(0)=MAX(0D0,PSYS(0,4)**2-PSYS(0,3)**2)
13059       PMIN(0)=SQRT(PMS(0))
13060       DO 340 JT=1,2
13061         PSYS(JT,4)=0.5D0*VINT(1)*VINT(142+JT)
13062         PSYS(JT,3)=PSYS(JT,4)*(-1)**(JT-1)
13063         PMIN(JT)=0D0
13064         IF(MINT(44+JT).EQ.1) GOTO 340
13065         MINT(105)=MINT(102+JT)
13066         MINT(109)=MINT(106+JT)
13067         CALL PYSPLI(MINT(10+JT),MINT(12+JT),KFLCH(JT),KFLSP(JT))
13068         IF(MINT(51).NE.0) THEN
13069           MINT(57)=MINT(57)+1
13070           RETURN
13071         ENDIF           
13072         IF(KFLCH(JT).NE.0) PMIN(JT)=PMIN(JT)+PYMASS(KFLCH(JT))
13073         IF(KFLSP(JT).NE.0) PMIN(JT)=PMIN(JT)+PYMASS(KFLSP(JT))
13074         IF(KFLCH(JT)*KFLSP(JT).NE.0) PMIN(JT)=PMIN(JT)+0.5D0*PARP(111)
13075         PMIN(JT)=SQRT(PMIN(JT)**2+P(MINT(83)+JT+2,1)**2+
13076      &  P(MINT(83)+JT+2,2)**2)
13077   340 CONTINUE
13078       IF(PMIN(0)+PMIN(1)+PMIN(2).GT.VINT(1).OR.(MINT(45).GE.2.AND.
13079      &PMIN(1).GT.PSYS(1,4)).OR.(MINT(46).GE.2.AND.PMIN(2).GT.
13080      &PSYS(2,4))) THEN
13081         MINT(51)=1
13082         MINT(57)=MINT(57)+1
13083         RETURN
13084       ENDIF
13085  
13086 C...Loop over two remnants; skip if none there.
13087       I=NS
13088       DO 410 JT=1,2
13089         ISN(JT)=0
13090         IF(MINT(44+JT).EQ.1) GOTO 410
13091         IF(JT.EQ.1) IPU=IPU1
13092         IF(JT.EQ.2) IPU=IPU2
13093  
13094 C...Store first remnant parton.
13095         I=I+1
13096         IS(JT)=I
13097         ISN(JT)=1
13098         DO 350 J=1,5
13099           K(I,J)=0
13100           P(I,J)=0D0
13101           V(I,J)=0D0
13102   350   CONTINUE
13103         K(I,1)=1
13104         K(I,2)=KFLSP(JT)
13105         K(I,3)=MINT(83)+JT
13106         P(I,5)=PYMASS(K(I,2))
13107  
13108 C...First parton colour connections and kinematics.
13109         KCOL=KCHG(PYCOMP(KFLSP(JT)),2)
13110         IF(KCOL.EQ.2) THEN
13111           K(I,1)=3
13112           K(I,4)=MSTU(5)*IPU+IPU
13113           K(I,5)=MSTU(5)*IPU+IPU
13114           K(IPU,4)=MOD(K(IPU,4),MSTU(5))+MSTU(5)*I
13115           K(IPU,5)=MOD(K(IPU,5),MSTU(5))+MSTU(5)*I
13116         ELSEIF(KCOL.NE.0) THEN
13117           K(I,1)=3
13118           KFLS=(3-KCOL*ISIGN(1,KFLSP(JT)))/2
13119           K(I,KFLS+3)=IPU
13120           K(IPU,6-KFLS)=MOD(K(IPU,6-KFLS),MSTU(5))+MSTU(5)*I
13121         ENDIF
13122         IF(KFLCH(JT).EQ.0) THEN
13123           P(I,1)=-P(MINT(83)+JT+2,1)
13124           P(I,2)=-P(MINT(83)+JT+2,2)
13125           PMS(JT)=P(I,5)**2+P(I,1)**2+P(I,2)**2
13126           PSYS(JT,3)=SQRT(MAX(0D0,PSYS(JT,4)**2-PMS(JT)))*(-1)**(JT-1)
13127           P(I,3)=PSYS(JT,3)
13128           P(I,4)=PSYS(JT,4)
13129  
13130 C...When extra remnant parton or hadron: store extra remnant.
13131         ELSE
13132           I=I+1
13133           ISN(JT)=2
13134           DO 360 J=1,5
13135             K(I,J)=0
13136             P(I,J)=0D0
13137             V(I,J)=0D0
13138   360     CONTINUE
13139           K(I,1)=1
13140           K(I,2)=KFLCH(JT)
13141           K(I,3)=MINT(83)+JT
13142           P(I,5)=PYMASS(K(I,2))
13143  
13144 C...Find parton colour connections of extra remnant.
13145           KCOL=KCHG(PYCOMP(KFLCH(JT)),2)
13146           IF(KCOL.EQ.2) THEN
13147             K(I,1)=3
13148             K(I,4)=MSTU(5)*IPU+IPU
13149             K(I,5)=MSTU(5)*IPU+IPU
13150             K(IPU,4)=MOD(K(IPU,4),MSTU(5))+MSTU(5)*I
13151             K(IPU,5)=MOD(K(IPU,5),MSTU(5))+MSTU(5)*I
13152           ELSEIF(KCOL.NE.0) THEN
13153             K(I,1)=3
13154             KFLS=(3-KCOL*ISIGN(1,KFLCH(JT)))/2
13155             K(I,KFLS+3)=IPU
13156             K(IPU,6-KFLS)=MOD(K(IPU,6-KFLS),MSTU(5))+MSTU(5)*I
13157           ENDIF
13158  
13159 C...Relative transverse momentum when two remnants.
13160           LOOP=0
13161   370     LOOP=LOOP+1
13162           CALL PYPTDI(1,P(I-1,1),P(I-1,2))
13163           IF(IABS(MINT(10+JT)).LT.20) THEN
13164             P(I-1,1)=0D0
13165             P(I-1,2)=0D0
13166           ELSE
13167             P(I-1,1)=P(I-1,1)-0.5D0*P(MINT(83)+JT+2,1)
13168             P(I-1,2)=P(I-1,2)-0.5D0*P(MINT(83)+JT+2,2)        
13169           ENDIF
13170           PMS(JT+2)=P(I-1,5)**2+P(I-1,1)**2+P(I-1,2)**2
13171           P(I,1)=-P(MINT(83)+JT+2,1)-P(I-1,1)
13172           P(I,2)=-P(MINT(83)+JT+2,2)-P(I-1,2)
13173           PMS(JT+4)=P(I,5)**2+P(I,1)**2+P(I,2)**2
13174  
13175 C...Meson or baryon; photon as meson. For splitup below.
13176           IMB=1
13177           IF(MOD(MINT(10+JT)/1000,10).NE.0) IMB=2
13178  
13179 C***Relative distribution for electron into two electrons. Temporary!
13180           IF(IABS(MINT(10+JT)).LT.20.AND.MINT(14+JT).EQ.-MINT(10+JT))
13181      &    THEN
13182             CHI(JT)=PYR(0)
13183  
13184 C...Relative distribution of electron energy into electron plus parton.
13185           ELSEIF(IABS(MINT(10+JT)).LT.20) THEN
13186             XHRD=VINT(140+JT)
13187             XE=VINT(154+JT)
13188             CHI(JT)=(XE-XHRD)/(1D0-XHRD)
13189  
13190 C...Relative distribution of energy for particle into two jets.
13191           ELSEIF(IABS(KFLCH(JT)).LE.10.OR.KFLCH(JT).EQ.21) THEN
13192             CHIK=PARP(92+2*IMB)
13193             IF(MSTP(92).LE.1) THEN
13194               IF(IMB.EQ.1) CHI(JT)=PYR(0)
13195               IF(IMB.EQ.2) CHI(JT)=1D0-SQRT(PYR(0))
13196             ELSEIF(MSTP(92).EQ.2) THEN
13197               CHI(JT)=1D0-PYR(0)**(1D0/(1D0+CHIK))
13198             ELSEIF(MSTP(92).EQ.3) THEN
13199               CUT=2D0*0.3D0/VINT(1)
13200   380         CHI(JT)=PYR(0)**2
13201               IF((CHI(JT)**2/(CHI(JT)**2+CUT**2))**0.25D0*
13202      &        (1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 380
13203             ELSEIF(MSTP(92).EQ.4) THEN
13204               CUT=2D0*0.3D0/VINT(1)
13205               CUTR=(1D0+SQRT(1D0+CUT**2))/CUT
13206   390         CHIR=CUT*CUTR**PYR(0)
13207               CHI(JT)=(CHIR**2-CUT**2)/(2D0*CHIR)
13208               IF((1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 390
13209             ELSE
13210               CUT=2D0*0.3D0/VINT(1)
13211               CUTA=CUT**(1D0-PARP(98))
13212               CUTB=(1D0+CUT)**(1D0-PARP(98))
13213   400         CHI(JT)=(CUTA+PYR(0)*(CUTB-CUTA))**(1D0/(1D0-PARP(98)))
13214               IF(((CHI(JT)+CUT)**2/(2D0*(CHI(JT)**2+CUT**2)))**
13215      &        (0.5D0*PARP(98))*(1D0-CHI(JT))**CHIK.LT.PYR(0)) GOTO 400
13216             ENDIF
13217  
13218 C...Relative distribution of energy for particle into jet plus particle.
13219           ELSE
13220             IF(MSTP(94).LE.1) THEN
13221               IF(IMB.EQ.1) CHI(JT)=PYR(0)
13222               IF(IMB.EQ.2) CHI(JT)=1D0-SQRT(PYR(0))
13223               IF(MOD(KFLCH(JT)/1000,10).NE.0) CHI(JT)=1D0-CHI(JT)
13224             ELSEIF(MSTP(94).EQ.2) THEN
13225               CHI(JT)=1D0-PYR(0)**(1D0/(1D0+PARP(93+2*IMB)))
13226               IF(MOD(KFLCH(JT)/1000,10).NE.0) CHI(JT)=1D0-CHI(JT)
13227             ELSEIF(MSTP(94).EQ.3) THEN
13228               CALL PYZDIS(1,0,PMS(JT+4),ZZ)
13229               CHI(JT)=ZZ
13230             ELSE
13231               CALL PYZDIS(1000,0,PMS(JT+4),ZZ)
13232               CHI(JT)=ZZ
13233             ENDIF
13234           ENDIF
13235  
13236 C...Construct total transverse mass; reject if too large.
13237           CHI(JT)=MAX(1D-8,MIN(1D0-1D-8,CHI(JT))) 
13238           PMS(JT)=PMS(JT+4)/CHI(JT)+PMS(JT+2)/(1D0-CHI(JT))
13239           IF(PMS(JT).GT.PSYS(JT,4)**2) THEN
13240             IF(LOOP.LT.10) THEN
13241               GOTO 370
13242             ELSE
13243               MINT(51)=1
13244               MINT(57)=MINT(57)+1
13245               RETURN
13246             ENDIF
13247           ENDIF
13248           PSYS(JT,3)=SQRT(MAX(0D0,PSYS(JT,4)**2-PMS(JT)))*(-1)**(JT-1)
13249           VINT(158+JT)=CHI(JT)
13250  
13251 C...Subdivide longitudinal momentum according to value selected above.
13252           PW1=CHI(JT)*(PSYS(JT,4)+ABS(PSYS(JT,3)))
13253           P(IS(JT)+1,4)=0.5D0*(PW1+PMS(JT+4)/PW1)
13254           P(IS(JT)+1,3)=0.5D0*(PW1-PMS(JT+4)/PW1)*(-1)**(JT-1)
13255           P(IS(JT),4)=PSYS(JT,4)-P(IS(JT)+1,4)
13256           P(IS(JT),3)=PSYS(JT,3)-P(IS(JT)+1,3)
13257         ENDIF
13258   410 CONTINUE
13259       N=I
13260  
13261 C...Check if longitudinal boosts needed - if so pick two systems.
13262       PDEV=ABS(PSYS(0,4)+PSYS(1,4)+PSYS(2,4)-VINT(1))+
13263      &ABS(PSYS(0,3)+PSYS(1,3)+PSYS(2,3))
13264       IF(PDEV.LE.1D-6*VINT(1)) RETURN
13265       IF(ISN(1).EQ.0) THEN
13266         IR=0
13267         IL=2
13268       ELSEIF(ISN(2).EQ.0) THEN
13269         IR=1
13270         IL=0
13271       ELSEIF(VINT(143).GT.0.2D0.AND.VINT(144).GT.0.2D0) THEN
13272         IR=1
13273         IL=2
13274       ELSEIF(VINT(143).GT.0.2D0) THEN
13275         IR=1
13276         IL=0
13277       ELSEIF(VINT(144).GT.0.2D0) THEN
13278         IR=0
13279         IL=2
13280       ELSEIF(PMS(1)/PSYS(1,4)**2.GT.PMS(2)/PSYS(2,4)**2) THEN
13281         IR=1
13282         IL=0
13283       ELSE
13284         IR=0
13285         IL=2
13286       ENDIF
13287       IG=3-IR-IL
13288  
13289 C...E+-pL wanted for system to be modified.
13290       IF((IG.EQ.1.AND.ISN(1).EQ.0).OR.(IG.EQ.2.AND.ISN(2).EQ.0)) THEN
13291         PPB=VINT(1)
13292         PNB=VINT(1)
13293       ELSE
13294         PPB=VINT(1)-(PSYS(IG,4)+PSYS(IG,3))
13295         PNB=VINT(1)-(PSYS(IG,4)-PSYS(IG,3))
13296       ENDIF
13297  
13298 C...To keep x and Q2 in leptoproduction: do not count scattered lepton.
13299       IF(IDISXQ.EQ.1.AND.IG.NE.0) THEN
13300         PMTB=PPB*PNB
13301         PMTR=PMS(IR)
13302         PMTL=PMS(IL)
13303         SQLAM=SQRT(MAX(0D0,(PMTB-PMTR-PMTL)**2-4D0*PMTR*PMTL))
13304         SQSGN=SIGN(1D0,PSYS(IR,3)*PSYS(IL,4)-PSYS(IL,3)*PSYS(IR,4))
13305         RKR=(PMTB+PMTR-PMTL+SQLAM*SQSGN)/(2D0*(PSYS(IR,4)+PSYS(IR,3))
13306      &  *PNB)
13307         RKL=(PMTB+PMTL-PMTR+SQLAM*SQSGN)/(2D0*(PSYS(IL,4)-PSYS(IL,3))
13308      &  *PPB)
13309         BER=(RKR**2-1D0)/(RKR**2+1D0)
13310         BEL=-(RKL**2-1D0)/(RKL**2+1D0)
13311         PPB=PPB-(PSYS(0,4)+PSYS(0,3))
13312         PNB=PNB-(PSYS(0,4)-PSYS(0,3))
13313         DO 420 J=1,4
13314           PSYS(0,J)=0D0
13315   420   CONTINUE
13316         DO 450 I=MINT(84)+1,NS
13317           IF(K(I,1).GT.10) GOTO 450
13318           INCL=0
13319           IORIG=I
13320   430     IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
13321           IORIG=K(IORIG,3)
13322           IF(IORIG.GT.LPIN) GOTO 430
13323           IF(INCL.EQ.0) GOTO 450
13324           DO 440 J=1,4
13325             PSYS(0,J)=PSYS(0,J)+P(I,J)
13326   440     CONTINUE
13327   450   CONTINUE
13328         PMS(0)=MAX(0D0,PSYS(0,4)**2-PSYS(0,3)**2)
13329         PPB=PPB+(PSYS(0,4)+PSYS(0,3))
13330         PNB=PNB+(PSYS(0,4)-PSYS(0,3))
13331       ENDIF
13332  
13333 C...Construct longitudinal boosts.
13334       DPMTB=PPB*PNB
13335       DPMTR=PMS(IR)
13336       DPMTL=PMS(IL)
13337       DSQLAM=SQRT(MAX(0D0,(DPMTB-DPMTR-DPMTL)**2-4D0*DPMTR*DPMTL))
13338       IF(DSQLAM.LE.1D-6*DPMTB) THEN
13339         MINT(51)=1
13340         MINT(57)=MINT(57)+1
13341         RETURN
13342       ENDIF
13343       DSQSGN=SIGN(1D0,PSYS(IR,3)*PSYS(IL,4)-PSYS(IL,3)*PSYS(IR,4))
13344       DRKR=(DPMTB+DPMTR-DPMTL+DSQLAM*DSQSGN)/
13345      &(2D0*(PSYS(IR,4)+PSYS(IR,3))*PNB)
13346       DRKL=(DPMTB+DPMTL-DPMTR+DSQLAM*DSQSGN)/
13347      &(2D0*(PSYS(IL,4)-PSYS(IL,3))*PPB)
13348       DBER=(DRKR**2-1D0)/(DRKR**2+1D0)
13349       DBEL=-(DRKL**2-1D0)/(DRKL**2+1D0)
13350  
13351 C...Perform longitudinal boosts.
13352       IF(IR.EQ.1.AND.ISN(1).EQ.1.AND.DBER.LE.-0.99999999D0) THEN
13353         P(IS(1),3)=0D0
13354         P(IS(1),4)=SQRT(P(IS(1),5)**2+P(IS(1),1)**2+P(IS(1),2)**2)
13355       ELSEIF(IR.EQ.1) THEN
13356         CALL PYROBO(IS(1),IS(1)+ISN(1)-1,0D0,0D0,0D0,0D0,DBER)
13357       ELSEIF(IDISXQ.EQ.1) THEN
13358         DO 470 I=I1,NS
13359           INCL=0
13360           IORIG=I
13361   460     IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
13362           IORIG=K(IORIG,3)
13363           IF(IORIG.GT.LPIN) GOTO 460
13364           IF(INCL.EQ.1) CALL PYROBO(I,I,0D0,0D0,0D0,0D0,DBER)
13365   470   CONTINUE
13366       ELSE
13367         CALL PYROBO(I1,NS,0D0,0D0,0D0,0D0,DBER)
13368       ENDIF
13369       IF(IL.EQ.2.AND.ISN(2).EQ.1.AND.DBEL.GE.0.99999999D0) THEN
13370         P(IS(2),3)=0D0
13371         P(IS(2),4)=SQRT(P(IS(2),5)**2+P(IS(2),1)**2+P(IS(2),2)**2)
13372       ELSEIF(IL.EQ.2) THEN
13373         CALL PYROBO(IS(2),IS(2)+ISN(2)-1,0D0,0D0,0D0,0D0,DBEL)
13374       ELSEIF(IDISXQ.EQ.1) THEN
13375         DO 490 I=I1,NS
13376           INCL=0
13377           IORIG=I
13378   480     IF(IORIG.EQ.LQOUT.OR.IORIG.EQ.LPIN+2) INCL=1
13379           IORIG=K(IORIG,3)
13380           IF(IORIG.GT.LPIN) GOTO 480
13381           IF(INCL.EQ.1) CALL PYROBO(I,I,0D0,0D0,0D0,0D0,DBEL)
13382   490   CONTINUE
13383       ELSE
13384         CALL PYROBO(I1,NS,0D0,0D0,0D0,0D0,DBEL)
13385       ENDIF
13386  
13387 C...Final check that energy-momentum conservation worked.
13388       PESUM=0D0
13389       PZSUM=0D0
13390       DO 500 I=MINT(84)+1,N
13391         IF(K(I,1).GT.10) GOTO 500
13392         PESUM=PESUM+P(I,4)
13393         PZSUM=PZSUM+P(I,3)
13394   500 CONTINUE
13395       PDEV=ABS(PESUM-VINT(1))+ABS(PZSUM)
13396       IF(PDEV.GT.1D-4*VINT(1)) THEN
13397         MINT(51)=1
13398         MINT(57)=MINT(57)+1
13399         RETURN
13400       ENDIF
13401  
13402 C...Calculate rotation and boost from overall CM frame to
13403 C...hadronic CM frame in leptoproduction.
13404       MINT(91)=0
13405       IF(MINT(82).EQ.1.AND.(MINT(43).EQ.2.OR.MINT(43).EQ.3)) THEN
13406         MINT(91)=1
13407         LESD=1
13408         IF(MINT(42).EQ.1) LESD=2
13409         LPIN=MINT(83)+3-LESD
13410  
13411 C...Sum upp momenta of everything not lepton or photon to define boost.
13412         DO 510 J=1,4
13413           PSUM(J)=0D0
13414   510   CONTINUE
13415         DO 530 I=1,N
13416           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 530
13417           IF(IABS(K(I,2)).GE.11.AND.IABS(K(I,2)).LE.20) GOTO 530
13418           IF(K(I,2).EQ.22) GOTO 530
13419           DO 520 J=1,4
13420             PSUM(J)=PSUM(J)+P(I,J)
13421   520     CONTINUE
13422   530   CONTINUE
13423         VINT(223)=-PSUM(1)/PSUM(4)
13424         VINT(224)=-PSUM(2)/PSUM(4)
13425         VINT(225)=-PSUM(3)/PSUM(4)
13426  
13427 C...Boost incoming hadron to hadronic CM frame to determine rotations.
13428         K(N+1,1)=1
13429         DO 540 J=1,5
13430           P(N+1,J)=P(LPIN,J)
13431           V(N+1,J)=V(LPIN,J)
13432   540   CONTINUE
13433         CALL PYROBO(N+1,N+1,0D0,0D0,VINT(223),VINT(224),VINT(225))
13434         VINT(222)=-PYANGL(P(N+1,1),P(N+1,2))
13435         CALL PYROBO(N+1,N+1,0D0,VINT(222),0D0,0D0,0D0)
13436         IF(LESD.EQ.2) THEN
13437           VINT(221)=-PYANGL(P(N+1,3),P(N+1,1))
13438         ELSE
13439           VINT(221)=PYANGL(-P(N+1,3),P(N+1,1))
13440         ENDIF
13441       ENDIF
13442  
13443       RETURN
13444       END
13445  
13446 C*********************************************************************
13447  
13448 C...PYDIFF
13449 C...Handles diffractive and elastic scattering.
13450  
13451       SUBROUTINE PYDIFF
13452  
13453 C...Double precision and integer declarations.
13454       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
13455       IMPLICIT INTEGER(I-N)
13456       INTEGER PYK,PYCHGE,PYCOMP
13457 C...Commonblocks.
13458       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
13459       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
13460       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
13461       COMMON/PYINT1/MINT(400),VINT(400)
13462       SAVE /PYJETS/,/PYDAT1/,/PYPARS/,/PYINT1/
13463  
13464 C...Reset K, P and V vectors. Store incoming particles.
13465       DO 110 JT=1,MSTP(126)+10
13466         I=MINT(83)+JT
13467         DO 100 J=1,5
13468           K(I,J)=0
13469           P(I,J)=0D0
13470           V(I,J)=0D0
13471   100   CONTINUE
13472   110 CONTINUE
13473       N=MINT(84)
13474       MINT(3)=0
13475       MINT(21)=0
13476       MINT(22)=0
13477       MINT(23)=0
13478       MINT(24)=0
13479       MINT(4)=4
13480       DO 130 JT=1,2
13481         I=MINT(83)+JT
13482         K(I,1)=21
13483         K(I,2)=MINT(10+JT)
13484         DO 120 J=1,5
13485           P(I,J)=VINT(285+5*JT+J)
13486   120   CONTINUE
13487   130 CONTINUE
13488       MINT(6)=2
13489  
13490 C...Subprocess; kinematics.
13491       SQLAM=(VINT(2)-VINT(63)-VINT(64))**2-4D0*VINT(63)*VINT(64)
13492       PZ=SQRT(SQLAM)/(2D0*VINT(1))
13493       DO 200 JT=1,2
13494         I=MINT(83)+JT
13495         PE=(VINT(2)+VINT(62+JT)-VINT(65-JT))/(2D0*VINT(1))
13496         KFH=MINT(102+JT)
13497  
13498 C...Elastically scattered particle. (Except elastic GVMD states.)
13499         IF(MINT(16+JT).LE.0.AND.(MINT(10+JT).NE.22.OR.
13500      &  MINT(106+JT).NE.3)) THEN
13501           N=N+1
13502           K(N,1)=1
13503           K(N,2)=KFH
13504           K(N,3)=I+2
13505           P(N,3)=PZ*(-1)**(JT+1)
13506           P(N,4)=PE
13507           P(N,5)=SQRT(VINT(62+JT))
13508  
13509 C...Decay rho from elastic scattering of gamma with sin**2(theta)
13510 C...distribution of decay products (in rho rest frame).
13511           IF(KFH.EQ.113.AND.MINT(10+JT).EQ.22.AND.MSTP(102).EQ.1) THEN
13512             NSAV=N
13513             DBETAZ=P(N,3)/SQRT(P(N,3)**2+P(N,5)**2)
13514             P(N,3)=0D0
13515             P(N,4)=P(N,5)
13516             CALL PYDECY(NSAV)
13517             IF(N.EQ.NSAV+2.AND.IABS(K(NSAV+1,2)).EQ.211) THEN
13518               PHI=PYANGL(P(NSAV+1,1),P(NSAV+1,2))
13519               CALL PYROBO(NSAV+1,NSAV+2,0D0,-PHI,0D0,0D0,0D0)
13520               THE=PYANGL(P(NSAV+1,3),P(NSAV+1,1))
13521               CALL PYROBO(NSAV+1,NSAV+2,-THE,0D0,0D0,0D0,0D0)
13522   140         CTHE=2D0*PYR(0)-1D0
13523               IF(1D0-CTHE**2.LT.PYR(0)) GOTO 140
13524               CALL PYROBO(NSAV+1,NSAV+2,ACOS(CTHE),PHI,0D0,0D0,0D0)
13525             ENDIF
13526             CALL PYROBO(NSAV,NSAV+2,0D0,0D0,0D0,0D0,DBETAZ)
13527           ENDIF
13528  
13529 C...Diffracted particle: low-mass system to two particles.
13530         ELSEIF(VINT(62+JT).LT.(VINT(66+JT)+PARP(103))**2) THEN
13531           N=N+2
13532           K(N-1,1)=1
13533           K(N,1)=1
13534           K(N-1,3)=I+2
13535           K(N,3)=I+2
13536           PMMAS=SQRT(VINT(62+JT))
13537           NTRY=0
13538   150     NTRY=NTRY+1
13539           IF(NTRY.LT.20) THEN
13540             MINT(105)=MINT(102+JT)
13541             MINT(109)=MINT(106+JT)
13542             CALL PYSPLI(KFH,21,KFL1,KFL2)
13543             CALL PYKFDI(KFL1,0,KFL3,KF1)
13544             IF(KF1.EQ.0) GOTO 150
13545             CALL PYKFDI(KFL2,-KFL3,KFLDUM,KF2)
13546             IF(KF2.EQ.0) GOTO 150
13547           ELSE
13548             KF1=KFH
13549             KF2=111
13550           ENDIF
13551           PM1=PYMASS(KF1)
13552           PM2=PYMASS(KF2)
13553           IF(PM1+PM2+PARJ(64).GT.PMMAS) GOTO 150
13554           K(N-1,2)=KF1
13555           K(N,2)=KF2
13556           P(N-1,5)=PM1
13557           P(N,5)=PM2
13558           PZP=SQRT(MAX(0D0,(PMMAS**2-PM1**2-PM2**2)**2-
13559      &    4D0*PM1**2*PM2**2))/(2D0*PMMAS)
13560           P(N-1,3)=PZP
13561           P(N,3)=-PZP
13562           P(N-1,4)=SQRT(PM1**2+PZP**2)
13563           P(N,4)=SQRT(PM2**2+PZP**2)
13564           CALL PYROBO(N-1,N,ACOS(2D0*PYR(0)-1D0),PARU(2)*PYR(0),
13565      &    0D0,0D0,0D0)
13566           DBETAZ=PZ*(-1)**(JT+1)/SQRT(PZ**2+PMMAS**2)
13567           CALL PYROBO(N-1,N,0D0,0D0,0D0,0D0,DBETAZ)
13568  
13569 C...Diffracted particle: valence quark kicked out.
13570         ELSEIF(MSTP(101).EQ.1.OR.(MSTP(101).EQ.3.AND.PYR(0).LT.
13571      &    PARP(101))) THEN
13572           N=N+2
13573           K(N-1,1)=2
13574           K(N,1)=1
13575           K(N-1,3)=I+2
13576           K(N,3)=I+2
13577           MINT(105)=MINT(102+JT)
13578           MINT(109)=MINT(106+JT)
13579           CALL PYSPLI(KFH,21,K(N,2),K(N-1,2))
13580           P(N-1,5)=PYMASS(K(N-1,2))
13581           P(N,5)=PYMASS(K(N,2))
13582           SQLAM=(VINT(62+JT)-P(N-1,5)**2-P(N,5)**2)**2-
13583      &    4D0*P(N-1,5)**2*P(N,5)**2
13584           P(N-1,3)=(PE*SQRT(SQLAM)+PZ*(VINT(62+JT)+P(N-1,5)**2-
13585      &    P(N,5)**2))/(2D0*VINT(62+JT))*(-1)**(JT+1)
13586           P(N-1,4)=SQRT(P(N-1,3)**2+P(N-1,5)**2)
13587           P(N,3)=PZ*(-1)**(JT+1)-P(N-1,3)
13588           P(N,4)=SQRT(P(N,3)**2+P(N,5)**2)
13589  
13590 C...Diffracted particle: gluon kicked out.
13591         ELSE
13592           N=N+3
13593           K(N-2,1)=2
13594           K(N-1,1)=2
13595           K(N,1)=1
13596           K(N-2,3)=I+2
13597           K(N-1,3)=I+2
13598           K(N,3)=I+2
13599           MINT(105)=MINT(102+JT)
13600           MINT(109)=MINT(106+JT)
13601           CALL PYSPLI(KFH,21,K(N,2),K(N-2,2))
13602           K(N-1,2)=21
13603           P(N-2,5)=PYMASS(K(N-2,2))
13604           P(N-1,5)=0D0
13605           P(N,5)=PYMASS(K(N,2))
13606 C...Energy distribution for particle into two jets.
13607   160     IMB=1
13608           IF(MOD(KFH/1000,10).NE.0) IMB=2
13609           CHIK=PARP(92+2*IMB)
13610           IF(MSTP(92).LE.1) THEN
13611             IF(IMB.EQ.1) CHI=PYR(0)
13612             IF(IMB.EQ.2) CHI=1D0-SQRT(PYR(0))
13613           ELSEIF(MSTP(92).EQ.2) THEN
13614             CHI=1D0-PYR(0)**(1D0/(1D0+CHIK))
13615           ELSEIF(MSTP(92).EQ.3) THEN
13616             CUT=2D0*0.3D0/VINT(1)
13617   170       CHI=PYR(0)**2
13618             IF((CHI**2/(CHI**2+CUT**2))**0.25D0*(1D0-CHI)**CHIK.LT.
13619      &      PYR(0)) GOTO 170
13620           ELSEIF(MSTP(92).EQ.4) THEN
13621             CUT=2D0*0.3D0/VINT(1)
13622             CUTR=(1D0+SQRT(1D0+CUT**2))/CUT
13623   180       CHIR=CUT*CUTR**PYR(0)
13624             CHI=(CHIR**2-CUT**2)/(2D0*CHIR)
13625             IF((1D0-CHI)**CHIK.LT.PYR(0)) GOTO 180
13626           ELSE
13627             CUT=2D0*0.3D0/VINT(1)
13628             CUTA=CUT**(1D0-PARP(98))
13629             CUTB=(1D0+CUT)**(1D0-PARP(98))
13630   190       CHI=(CUTA+PYR(0)*(CUTB-CUTA))**(1D0/(1D0-PARP(98)))
13631             IF(((CHI+CUT)**2/(2D0*(CHI**2+CUT**2)))**
13632      &      (0.5D0*PARP(98))*(1D0-CHI)**CHIK.LT.PYR(0)) GOTO 190
13633           ENDIF
13634           IF(CHI.LT.P(N,5)**2/VINT(62+JT).OR.CHI.GT.1D0-P(N-2,5)**2/
13635      &    VINT(62+JT)) GOTO 160
13636           SQM=P(N-2,5)**2/(1D0-CHI)+P(N,5)**2/CHI
13637           PZI=(PE*(VINT(62+JT)-SQM)+PZ*(VINT(62+JT)+SQM))/
13638      &    (2D0*VINT(62+JT))
13639           PEI=SQRT(PZI**2+SQM)
13640           PQQP=(1D0-CHI)*(PEI+PZI)
13641           P(N-2,3)=0.5D0*(PQQP-P(N-2,5)**2/PQQP)*(-1)**(JT+1)
13642           P(N-2,4)=SQRT(P(N-2,3)**2+P(N-2,5)**2)
13643           P(N-1,4)=0.5D0*(VINT(62+JT)-SQM)/(PEI+PZI)
13644           P(N-1,3)=P(N-1,4)*(-1)**JT
13645           P(N,3)=PZI*(-1)**(JT+1)-P(N-2,3)
13646           P(N,4)=SQRT(P(N,3)**2+P(N,5)**2)
13647         ENDIF
13648  
13649 C...Documentation lines.
13650         K(I+2,1)=21
13651         IF(MINT(16+JT).EQ.0) K(I+2,2)=KFH
13652         IF(MINT(16+JT).NE.0.OR.(MINT(10+JT).EQ.22.AND.
13653      &  MINT(106+JT).EQ.3)) K(I+2,2)=10*(KFH/10)
13654         K(I+2,3)=I
13655         P(I+2,3)=PZ*(-1)**(JT+1)
13656         P(I+2,4)=PE
13657         P(I+2,5)=SQRT(VINT(62+JT))
13658   200 CONTINUE
13659  
13660 C...Rotate outgoing partons/particles using cos(theta).
13661       IF(VINT(23).LT.0.9D0) THEN
13662         CALL PYROBO(MINT(83)+3,N,ACOS(VINT(23)),VINT(24),0D0,0D0,0D0)
13663       ELSE
13664         CALL PYROBO(MINT(83)+3,N,ASIN(VINT(59)),VINT(24),0D0,0D0,0D0)
13665       ENDIF
13666  
13667       RETURN
13668       END
13669  
13670 C*********************************************************************
13671  
13672 C...PYDISG
13673 C...Set up a DIS process as gamma* + f -> f, with beam remnant
13674 C...and showering added consecutively. Photon flux by the PYGAGA
13675 C...routine (if at all).
13676  
13677       SUBROUTINE PYDISG
13678  
13679 C...Double precision and integer declarations.
13680       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
13681       IMPLICIT INTEGER(I-N)
13682       INTEGER PYK,PYCHGE,PYCOMP
13683 C...Parameter statement to help give large particle numbers.
13684       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
13685 C...Commonblocks.
13686       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
13687       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
13688       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
13689       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
13690       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
13691       COMMON/PYINT1/MINT(400),VINT(400)
13692       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
13693 C...Local arrays.
13694       DIMENSION PMS(4)
13695 
13696 C...Choice of subprocess, number of documentation lines
13697       IDOC=7
13698       MINT(3)=IDOC-6
13699       MINT(4)=IDOC
13700       IPU1=MINT(84)+1
13701       IPU2=MINT(84)+2
13702       IPU3=MINT(84)+3
13703       ISIDE=1
13704       IF(MINT(107).EQ.4) ISIDE=2   
13705  
13706 C...Reset K, P and V vectors. Store incoming particles
13707       DO 120 JT=1,MSTP(126)+20
13708         I=MINT(83)+JT
13709         DO 110 J=1,5
13710           K(I,J)=0
13711           P(I,J)=0D0
13712           V(I,J)=0D0
13713   110   CONTINUE
13714   120 CONTINUE
13715       DO 140 JT=1,2
13716         I=MINT(83)+JT
13717         K(I,1)=21
13718         K(I,2)=MINT(10+JT)
13719         DO 130 J=1,5
13720           P(I,J)=VINT(285+5*JT+J)
13721   130   CONTINUE
13722   140 CONTINUE
13723       MINT(6)=2
13724  
13725 C...Store incoming partons in hadronic CM-frame
13726       DO 150 JT=1,2
13727         I=MINT(84)+JT
13728         K(I,1)=14
13729         K(I,2)=MINT(14+JT)
13730         K(I,3)=MINT(83)+2+JT
13731   150 CONTINUE
13732       IF(MINT(15).EQ.22) THEN
13733         P(MINT(84)+1,3)=0.5D0*(VINT(1)+VINT(307)/VINT(1))     
13734         P(MINT(84)+1,4)=0.5D0*(VINT(1)-VINT(307)/VINT(1)) 
13735         P(MINT(84)+1,5)=-SQRT(VINT(307))    
13736         P(MINT(84)+2,3)=-0.5D0*VINT(307)/VINT(1)     
13737         P(MINT(84)+2,4)=0.5D0*VINT(307)/VINT(1) 
13738         KFRES=MINT(16) 
13739         ISIDE=2   
13740       ELSE
13741         P(MINT(84)+1,3)=0.5D0*VINT(308)/VINT(1)     
13742         P(MINT(84)+1,4)=0.5D0*VINT(308)/VINT(1)
13743         P(MINT(84)+2,3)=-0.5D0*(VINT(1)+VINT(308)/VINT(1))     
13744         P(MINT(84)+2,4)=0.5D0*(VINT(1)-VINT(308)/VINT(1)) 
13745         P(MINT(84)+1,5)=-SQRT(VINT(308))    
13746         KFRES=MINT(15)
13747         ISIDE=1    
13748       ENDIF
13749       SIDESG=(-1D0)**(ISIDE-1)     
13750  
13751 C...Copy incoming partons to documentation lines.
13752       DO 170 JT=1,2
13753         I1=MINT(83)+4+JT
13754         I2=MINT(84)+JT
13755         K(I1,1)=21
13756         K(I1,2)=K(I2,2)
13757         K(I1,3)=I1-2
13758         DO 160 J=1,5
13759           P(I1,J)=P(I2,J)
13760   160   CONTINUE
13761 
13762 C...Second copy for partons before ISR shower, since no such.
13763         I1=MINT(83)+2+JT
13764         K(I1,1)=21
13765         K(I1,2)=K(I2,2)
13766         K(I1,3)=I1-2
13767         DO 165 J=1,5
13768           P(I1,J)=P(I2,J)
13769   165   CONTINUE
13770   170 CONTINUE
13771 
13772 C...Define initial partons.
13773       NTRY=0
13774   200 NTRY=NTRY+1
13775       IF(NTRY.GT.100) THEN
13776         MINT(51)=1
13777         RETURN
13778       ENDIF 
13779 
13780 C...Scattered quark in hadronic CM frame.
13781       I=MINT(83)+7
13782       K(IPU3,1)=3
13783       K(IPU3,2)=KFRES
13784       K(IPU3,3)=I
13785       P(IPU3,5)=PYMASS(KFRES)
13786       P(IPU3,3)=P(IPU1,3)+P(IPU2,3)
13787       P(IPU3,4)=P(IPU1,4)+P(IPU2,4)
13788       P(IPU3,5)=0D0
13789       K(I,1)=21
13790       K(I,2)=KFRES
13791       K(I,3)=MINT(83)+4+ISIDE
13792       P(I,3)=P(IPU3,3)
13793       P(I,4)=P(IPU3,4)
13794       P(I,5)=P(IPU3,5)
13795       N=IPU3
13796       MINT(21)=KFRES
13797       MINT(22)=0
13798 
13799 C...No primordial kT, or chosen according to truncated Gaussian or
13800 C...exponential, or (for photon) predetermined or power law.
13801   220 IF(MINT(40+ISIDE).EQ.2.AND.MINT(10+ISIDE).NE.22) THEN
13802         IF(MSTP(91).LE.0) THEN
13803           PT=0D0
13804         ELSEIF(MSTP(91).EQ.1) THEN
13805           PT=PARP(91)*SQRT(-LOG(PYR(0)))
13806         ELSE
13807           RPT1=PYR(0)
13808           RPT2=PYR(0)
13809           PT=-PARP(92)*LOG(RPT1*RPT2)
13810         ENDIF
13811         IF(PT.GT.PARP(93)) GOTO 220
13812       ELSEIF(MINT(106+ISIDE).EQ.3) THEN
13813         PTA=SQRT(VINT(282+ISIDE))
13814         PTB=0D0
13815         IF(MSTP(66).EQ.5.AND.MSTP(93).EQ.1) THEN
13816           PTB=PARP(99)*SQRT(-LOG(PYR(0)))
13817         ELSEIF(MSTP(66).EQ.5.AND.MSTP(93).EQ.2) THEN
13818           RPT1=PYR(0)
13819           RPT2=PYR(0)
13820           PTB=-PARP(99)*LOG(RPT1*RPT2)
13821         ENDIF
13822         IF(PTB.GT.PARP(100)) GOTO 220
13823         PT=SQRT(PTA**2+PTB**2+2D0*PTA*PTB*COS(PARU(2)*PYR(0)))
13824         IF(NTRY.GT.10) PT=PT*0.8D0**(NTRY-10)
13825       ELSEIF(IABS(MINT(14+ISIDE)).LE.8.OR.MINT(14+ISIDE).EQ.21) THEN
13826         IF(MSTP(93).LE.0) THEN
13827           PT=0D0
13828         ELSEIF(MSTP(93).EQ.1) THEN
13829           PT=PARP(99)*SQRT(-LOG(PYR(0)))
13830         ELSEIF(MSTP(93).EQ.2) THEN
13831           RPT1=PYR(0)
13832           RPT2=PYR(0)
13833           PT=-PARP(99)*LOG(RPT1*RPT2)
13834         ELSEIF(MSTP(93).EQ.3) THEN
13835           HA=PARP(99)**2
13836           HB=PARP(100)**2
13837           PT=SQRT(MAX(0D0,HA*(HA+HB)/(HA+HB-PYR(0)*HB)-HA))
13838         ELSE
13839           HA=PARP(99)**2
13840           HB=PARP(100)**2
13841           IF(MSTP(93).EQ.5) HB=MIN(VINT(48),PARP(100)**2)
13842           PT=SQRT(MAX(0D0,HA*((HA+HB)/HA)**PYR(0)-HA))
13843         ENDIF
13844         IF(PT.GT.PARP(100)) GOTO 220
13845       ELSE
13846         PT=0D0
13847       ENDIF
13848       VINT(156+ISIDE)=PT
13849       PHI=PARU(2)*PYR(0)
13850       P(IPU3,1)=PT*COS(PHI)
13851       P(IPU3,2)=PT*SIN(PHI)
13852       P(IPU3,4)=SQRT(P(IPU3,5)**2+PT**2+P(IPU3,3)**2)  
13853       PMS(3-ISIDE)=P(IPU3,5)**2+P(IPU3,1)**2+P(IPU3,2)**2 
13854       PCP=P(IPU3,4)+ABS(P(IPU3,3))
13855 
13856 C...Find one or two beam remnants.
13857       MINT(105)=MINT(102+ISIDE)
13858       MINT(109)=MINT(106+ISIDE)
13859       CALL PYSPLI(MINT(10+ISIDE),MINT(12+ISIDE),KFLCH,KFLSP)
13860       IF(MINT(51).NE.0) THEN
13861         MINT(51)=0
13862         GOTO 200
13863       ENDIF 
13864 
13865 C...Store first remnant parton, with colour info and kinematics.
13866       I=N+1
13867       K(I,1)=1
13868       K(I,2)=KFLSP
13869       K(I,3)=MINT(83)+ISIDE
13870       P(I,5)=PYMASS(K(I,2))
13871       KCOL=KCHG(PYCOMP(KFLSP),2)
13872       IF(KCOL.NE.0) THEN
13873         K(I,1)=3
13874         KFLS=(3-KCOL*ISIGN(1,KFLSP))/2
13875         K(I,KFLS+3)=MSTU(5)*IPU3
13876         K(IPU3,6-KFLS)=MSTU(5)*I
13877         ICOLR=I 
13878       ENDIF
13879       IF(KFLCH.EQ.0) THEN
13880         P(I,1)=-P(IPU3,1)
13881         P(I,2)=-P(IPU3,2)
13882         PMS(ISIDE)=P(I,5)**2+P(I,1)**2+P(I,2)**2
13883         P(I,3)=-P(IPU3,3)
13884         P(I,4)=SQRT(PMS(ISIDE)+P(I,3)**2)
13885         PRP=P(I,4)+ABS(P(I,3))
13886  
13887 C...When extra remnant parton or hadron: store extra remnant.
13888       ELSE
13889         I=I+1
13890         K(I,1)=1
13891         K(I,2)=KFLCH
13892         K(I,3)=MINT(83)+ISIDE
13893         P(I,5)=PYMASS(K(I,2))
13894         KCOL=KCHG(PYCOMP(KFLCH),2)
13895         IF(KCOL.NE.0) THEN
13896           K(I,1)=3
13897           KFLS=(3-KCOL*ISIGN(1,KFLCH))/2
13898           K(I,KFLS+3)=MSTU(5)*IPU3
13899           K(IPU3,6-KFLS)=MSTU(5)*I
13900           ICOLR=I 
13901         ENDIF
13902  
13903 C...Relative transverse momentum when two remnants.
13904         LOOP=0
13905   370   LOOP=LOOP+1
13906         CALL PYPTDI(1,P(I-1,1),P(I-1,2))
13907         P(I-1,1)=P(I-1,1)-0.5D0*P(IPU3,1)
13908         P(I-1,2)=P(I-1,2)-0.5D0*P(IPU3,2)        
13909         PMS(3)=P(I-1,5)**2+P(I-1,1)**2+P(I-1,2)**2
13910         P(I,1)=-P(IPU3,1)-P(I-1,1)
13911         P(I,2)=-P(IPU3,2)-P(I-1,2)
13912         PMS(4)=P(I,5)**2+P(I,1)**2+P(I,2)**2
13913  
13914 C...Relative distribution of energy for particle into jet plus particle.
13915         IMB=1
13916         IF(MOD(MINT(10+ISIDE)/1000,10).NE.0) IMB=2
13917         IF(MSTP(94).LE.1) THEN
13918           IF(IMB.EQ.1) CHI=PYR(0)
13919           IF(IMB.EQ.2) CHI=1D0-SQRT(PYR(0))
13920           IF(MOD(KFLCH/1000,10).NE.0) CHI=1D0-CHI
13921         ELSEIF(MSTP(94).EQ.2) THEN
13922           CHI=1D0-PYR(0)**(1D0/(1D0+PARP(93+2*IMB)))
13923           IF(MOD(KFLCH/1000,10).NE.0) CHI=1D0-CHI
13924         ELSEIF(MSTP(94).EQ.3) THEN
13925           CALL PYZDIS(1,0,PMS(4),ZZ)
13926           CHI=ZZ
13927         ELSE
13928           CALL PYZDIS(1000,0,PMS(4),ZZ)
13929           CHI=ZZ
13930         ENDIF
13931  
13932 C...Construct total transverse mass; reject if too large.
13933         CHI=MAX(1D-8,MIN(1D0-1D-8,CHI)) 
13934         PMS(ISIDE)=PMS(4)/CHI+PMS(3)/(1D0-CHI)
13935         IF(PMS(ISIDE).GT.P(IPU3,4)**2) THEN
13936           IF(LOOP.LT.10) GOTO 370
13937           GOTO 200 
13938         ENDIF
13939         VINT(158+ISIDE)=CHI
13940  
13941 C...Subdivide longitudinal momentum according to value selected above.
13942         PRP=SQRT(PMS(ISIDE)+P(IPU3,3)**2)+ABS(P(IPU3,3))
13943         PW1=(1D0-CHI)*PRP
13944         P(I-1,4)=0.5D0*(PW1+PMS(3)/PW1)
13945         P(I-1,3)=0.5D0*(PW1-PMS(3)/PW1)*SIDESG
13946         PW2=CHI*PRP
13947         P(I,4)=0.5D0*(PW2+PMS(4)/PW2)
13948         P(I,3)=0.5D0*(PW2-PMS(4)/PW2)*SIDESG
13949       ENDIF
13950       N=I
13951 
13952 C...Boost current and remnant systems to correct frame.
13953       IF(SQRT(PMS(1))+SQRT(PMS(2)).GT.0.99D0*VINT(1)) GOTO 200
13954       DSQLAM=SQRT(MAX(0D0,(VINT(2)-PMS(1)-PMS(2))**2-4D0*PMS(1)*PMS(2)))
13955       DRKC=(VINT(2)+PMS(3-ISIDE)-PMS(ISIDE)+DSQLAM)/
13956      &(2D0*VINT(1)*PCP)
13957       DRKR=(VINT(2)+PMS(ISIDE)-PMS(3-ISIDE)+DSQLAM)/
13958      &(2D0*VINT(1)*PRP)
13959       DBEC=-SIDESG*(DRKC**2-1D0)/(DRKC**2+1D0)
13960       DBER=SIDESG*(DRKR**2-1D0)/(DRKR**2+1D0)
13961       CALL PYROBO(IPU3,IPU3,0D0,0D0,0D0,0D0,DBEC)
13962       CALL PYROBO(IPU3+1,N,0D0,0D0,0D0,0D0,DBER)
13963 
13964 C...Let current quark shower; recoil but no showering by colour partner.
13965       QMAX=2D0*SQRT(VINT(309-ISIDE))
13966       MSTJ48=MSTJ(48)
13967       MSTJ(48)=1
13968       PARJ86=PARJ(86)
13969       PARJ(86)=0D0  
13970       IF(MSTP(71).EQ.1) CALL PYSHOW(IPU3,ICOLR,QMAX)
13971       MSTJ(48)=MSTJ48
13972       PARJ(86)=PARJ86            
13973 
13974       RETURN
13975       END
13976  
13977 C*********************************************************************
13978  
13979 C...PYDOCU
13980 C...Handles the documentation of the process in MSTI and PARI,
13981 C...and also computes cross-sections based on accumulated statistics.
13982  
13983       SUBROUTINE PYDOCU
13984  
13985 C...Double precision and integer declarations.
13986       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
13987       IMPLICIT INTEGER(I-N)
13988       INTEGER PYK,PYCHGE,PYCOMP
13989 C...Commonblocks.
13990       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
13991       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
13992       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
13993       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
13994       COMMON/PYINT1/MINT(400),VINT(400)
13995       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
13996       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
13997       SAVE /PYJETS/,/PYDAT1/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,
13998      &/PYINT5/
13999  
14000 C...Calculate Monte Carlo estimates of cross-sections.
14001       ISUB=MINT(1)
14002       IF(MSTP(111).NE.-1) NGEN(ISUB,3)=NGEN(ISUB,3)+1
14003       NGEN(0,3)=NGEN(0,3)+1
14004       XSEC(0,3)=0D0
14005       DO 100 I=1,500
14006         IF(I.EQ.96.OR.I.EQ.97) THEN
14007           XSEC(I,3)=0D0
14008         ELSEIF(MSUB(95).EQ.1.AND.(I.EQ.11.OR.I.EQ.12.OR.I.EQ.13.OR.
14009      &    I.EQ.28.OR.I.EQ.53.OR.I.EQ.68)) THEN
14010           XSEC(I,3)=XSEC(96,2)*NGEN(I,3)/MAX(1D0,DBLE(NGEN(96,1))*
14011      &    DBLE(NGEN(96,2)))
14012         ELSEIF(MSUB(I).EQ.0.OR.NGEN(I,1).EQ.0) THEN
14013           XSEC(I,3)=0D0
14014         ELSEIF(NGEN(I,2).EQ.0) THEN
14015           XSEC(I,3)=XSEC(I,2)*NGEN(0,3)/(DBLE(NGEN(I,1))*
14016      &    DBLE(NGEN(0,2)))
14017         ELSE
14018           XSEC(I,3)=XSEC(I,2)*NGEN(I,3)/(DBLE(NGEN(I,1))*
14019      &    DBLE(NGEN(I,2)))
14020         ENDIF
14021         XSEC(0,3)=XSEC(0,3)+XSEC(I,3)
14022   100 CONTINUE
14023  
14024 C...Rescale to known low-pT cross-section for standard QCD processes.
14025       IF(MSUB(95).EQ.1) THEN
14026         XSECH=XSEC(11,3)+XSEC(12,3)+XSEC(13,3)+XSEC(28,3)+XSEC(53,3)+
14027      &  XSEC(68,3)+XSEC(95,3)
14028         XSECW=XSEC(97,2)/MAX(1D0,DBLE(NGEN(97,1)))
14029         IF(XSECH.GT.1D-20.AND.XSECW.GT.1D-20) THEN
14030           FAC=XSECW/XSECH
14031           XSEC(11,3)=FAC*XSEC(11,3)
14032           XSEC(12,3)=FAC*XSEC(12,3)
14033           XSEC(13,3)=FAC*XSEC(13,3)
14034           XSEC(28,3)=FAC*XSEC(28,3)
14035           XSEC(53,3)=FAC*XSEC(53,3)
14036           XSEC(68,3)=FAC*XSEC(68,3)
14037           XSEC(95,3)=FAC*XSEC(95,3)
14038           XSEC(0,3)=XSEC(0,3)-XSECH+XSECW
14039         ENDIF
14040       ENDIF
14041  
14042 C...Save information for gamma-p and gamma-gamma.
14043       IF(MINT(121).GT.1) THEN
14044         IGA=MINT(122)
14045         CALL PYSAVE(2,IGA)
14046         CALL PYSAVE(5,0)
14047       ENDIF
14048  
14049 C...Reset information on hard interaction.
14050       DO 110 J=1,200
14051         MSTI(J)=0
14052         PARI(J)=0D0
14053   110 CONTINUE
14054  
14055 C...Copy integer valued information from MINT into MSTI.
14056       DO 120 J=1,32
14057         MSTI(J)=MINT(J)
14058   120 CONTINUE
14059       IF(MINT(121).GT.1) MSTI(9)=MINT(122)
14060  
14061 C...Store cross-section variables in PARI.
14062       PARI(1)=XSEC(0,3)
14063       PARI(2)=XSEC(0,3)/MINT(5)
14064       PARI(9)=VINT(99)
14065       PARI(10)=VINT(100)
14066       VINT(98)=VINT(98)+VINT(100)
14067       IF(MSTP(142).EQ.1) PARI(2)=XSEC(0,3)/VINT(98)
14068  
14069 C...Store kinematics variables in PARI.
14070       PARI(11)=VINT(1)
14071       PARI(12)=VINT(2)
14072       IF(ISUB.NE.95) THEN
14073         DO 130 J=13,26
14074           PARI(J)=VINT(30+J)
14075   130   CONTINUE
14076         PARI(31)=VINT(141)
14077         PARI(32)=VINT(142)
14078         PARI(33)=VINT(41)
14079         PARI(34)=VINT(42)
14080         PARI(35)=PARI(33)-PARI(34)
14081         PARI(36)=VINT(21)
14082         PARI(37)=VINT(22)
14083         PARI(38)=VINT(26)
14084         PARI(39)=VINT(157)
14085         PARI(40)=VINT(158)
14086         PARI(41)=VINT(23)
14087         PARI(42)=2D0*VINT(47)/VINT(1)
14088       ENDIF
14089  
14090 C...Store information on scattered partons in PARI.
14091       IF(ISUB.NE.95.AND.MINT(7)*MINT(8).NE.0) THEN
14092         DO 140 IS=7,8
14093           I=MINT(IS)
14094           PARI(36+IS)=P(I,3)/VINT(1)
14095           PARI(38+IS)=P(I,4)/VINT(1)
14096           PR=MAX(1D-20,P(I,5)**2+P(I,1)**2+P(I,2)**2)
14097           PARI(40+IS)=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/
14098      &    SQRT(PR),1D20)),P(I,3))
14099           PR=MAX(1D-20,P(I,1)**2+P(I,2)**2)
14100           PARI(42+IS)=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/
14101      &    SQRT(PR),1D20)),P(I,3))
14102           PARI(44+IS)=P(I,3)/SQRT(1D-20+P(I,1)**2+P(I,2)**2+P(I,3)**2)
14103           PARI(46+IS)=PYANGL(P(I,3),SQRT(P(I,1)**2+P(I,2)**2))
14104           PARI(48+IS)=PYANGL(P(I,1),P(I,2))
14105   140   CONTINUE
14106       ENDIF
14107  
14108 C...Store sum up transverse and longitudinal momenta.
14109       PARI(65)=2D0*PARI(17)
14110       IF(ISUB.LE.90.OR.ISUB.GE.95) THEN
14111         DO 150 I=MSTP(126)+1,N
14112           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 150
14113           PT=SQRT(P(I,1)**2+P(I,2)**2)
14114           PARI(69)=PARI(69)+PT
14115           IF(I.LE.MINT(52)) PARI(66)=PARI(66)+PT
14116           IF(I.GT.MINT(52).AND.I.LE.MINT(53)) PARI(68)=PARI(68)+PT
14117   150   CONTINUE
14118         PARI(67)=PARI(68)
14119         PARI(71)=VINT(151)
14120         PARI(72)=VINT(152)
14121         PARI(73)=VINT(151)
14122         PARI(74)=VINT(152)
14123       ELSE
14124         PARI(66)=PARI(65)
14125         PARI(69)=PARI(65)
14126       ENDIF
14127  
14128 C...Store various other pieces of information into PARI.
14129       PARI(61)=VINT(148)
14130       PARI(75)=VINT(155)
14131       PARI(76)=VINT(156)
14132       PARI(77)=VINT(159)
14133       PARI(78)=VINT(160)
14134       PARI(81)=VINT(138)
14135  
14136 C...Store information on lepton -> lepton + gamma in PYGAGA.
14137       MSTI(71)=MINT(141)
14138       MSTI(72)=MINT(142)
14139       PARI(101)=VINT(301)
14140       PARI(102)=VINT(302)
14141       DO 160 I=103,114
14142         PARI(I)=VINT(I+202)
14143   160 CONTINUE
14144  
14145 C...Set information for PYTABU.
14146       IF(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.3) THEN
14147         MSTU(161)=MINT(21)
14148         MSTU(162)=0
14149       ELSEIF(ISET(ISUB).EQ.5) THEN
14150         MSTU(161)=MINT(23)
14151         MSTU(162)=0
14152       ELSE
14153         MSTU(161)=MINT(21)
14154         MSTU(162)=MINT(22)
14155       ENDIF
14156  
14157       RETURN
14158       END
14159  
14160 C*********************************************************************
14161  
14162 C...PYFRAM
14163 C...Performs transformations between different coordinate frames.
14164  
14165       SUBROUTINE PYFRAM(IFRAME)
14166  
14167 C...Double precision and integer declarations.
14168       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
14169       IMPLICIT INTEGER(I-N)
14170       INTEGER PYK,PYCHGE,PYCOMP
14171 C...Commonblocks.
14172       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
14173       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
14174       COMMON/PYINT1/MINT(400),VINT(400)
14175       SAVE /PYDAT1/,/PYPARS/,/PYINT1/
14176  
14177 C...Check that transformation can and should be done.
14178       IF(IFRAME.EQ.1.OR.IFRAME.EQ.2.OR.(IFRAME.EQ.3.AND.
14179      &MINT(91).EQ.1)) THEN
14180         IF(IFRAME.EQ.MINT(6)) RETURN
14181       ELSE
14182         WRITE(MSTU(11),5000) IFRAME,MINT(6)
14183         RETURN
14184       ENDIF
14185  
14186       IF(MINT(6).EQ.1) THEN
14187 C...Transform from fixed target or user specified frame to
14188 C...overall CM frame.
14189         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
14190         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
14191         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
14192       ELSEIF(MINT(6).EQ.3) THEN
14193 C...Transform from hadronic CM frame in DIS to overall CM frame.
14194         CALL PYROBO(0,0,-VINT(221),-VINT(222),-VINT(223),-VINT(224),
14195      &  -VINT(225))
14196       ENDIF
14197  
14198       IF(IFRAME.EQ.1) THEN
14199 C...Transform from overall CM frame to fixed target or user specified
14200 C...frame.
14201         CALL PYROBO(0,0,VINT(6),VINT(7),VINT(8),VINT(9),VINT(10))
14202       ELSEIF(IFRAME.EQ.3) THEN
14203 C...Transform from overall CM frame to hadronic CM frame in DIS.
14204         CALL PYROBO(0,0,0D0,0D0,VINT(223),VINT(224),VINT(225))
14205         CALL PYROBO(0,0,0D0,VINT(222),0D0,0D0,0D0)
14206         CALL PYROBO(0,0,VINT(221),0D0,0D0,0D0,0D0)
14207       ENDIF
14208  
14209 C...Set information about new frame.
14210       MINT(6)=IFRAME
14211       MSTI(6)=IFRAME
14212  
14213  5000 FORMAT(1X,'Error: illegal values in subroutine PYFRAM.',1X,
14214      &'No transformation performed.'/1X,'IFRAME =',1X,I5,'; MINT(6) =',
14215      &1X,I5)
14216  
14217       RETURN
14218       END
14219  
14220 C*********************************************************************
14221  
14222 C...PYWIDT
14223 C...Calculates full and partial widths of resonances.
14224  
14225       SUBROUTINE PYWIDT(KFLR,SH,WDTP,WDTE)
14226  
14227 C...Double precision and integer declarations.
14228       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
14229       IMPLICIT INTEGER(I-N)
14230       INTEGER PYK,PYCHGE,PYCOMP
14231 C...Parameter statement to help give large particle numbers.
14232       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
14233 C...Commonblocks.
14234       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
14235       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
14236       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
14237       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
14238       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
14239       COMMON/PYINT1/MINT(400),VINT(400)
14240       COMMON/PYINT4/MWID(500),WIDS(500,5)
14241       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
14242       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
14243      &SFMIX(16,4)
14244       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
14245      &/PYINT4/,/PYMSSM/,/PYSSMT/
14246 C...Local arrays and saved variables.
14247       DIMENSION WDTP(0:200),WDTE(0:200,0:5),MOFSV(3,2),WIDWSV(3,2),
14248      &WID2SV(3,2),WDTPP(0:200),WDTEP(0:200,0:5)
14249       SAVE MOFSV,WIDWSV,WID2SV
14250       DATA MOFSV/6*0/,WIDWSV/6*0D0/,WID2SV/6*0D0/
14251  
14252 C...Compressed code and sign; mass.
14253       KFLA=IABS(KFLR)
14254       KFLS=ISIGN(1,KFLR)
14255       KC=PYCOMP(KFLA)
14256       SHR=SQRT(SH)
14257       PMR=PMAS(KC,1)
14258  
14259 C...Reset width information.
14260       DO 110 I=0,200
14261         WDTP(I)=0D0
14262         DO 100 J=0,5
14263           WDTE(I,J)=0D0
14264   100   CONTINUE
14265   110 CONTINUE
14266  
14267 C...Not to be treated as a resonance: return.
14268       IF((MWID(KC).LE.0.OR.MWID(KC).GE.4).AND.KFLA.NE.21.AND.
14269      &KFLA.NE.22) THEN
14270         WDTP(0)=1D0
14271         WDTE(0,0)=1D0
14272         MINT(61)=0
14273         MINT(62)=0
14274         MINT(63)=0
14275         RETURN
14276  
14277 C...Treatment as a resonance based on tabulated branching ratios.
14278       ELSEIF(MWID(KC).EQ.2.OR.(MWID(KC).EQ.3.AND.MINT(63).EQ.0)) THEN
14279 C...Loop over possible decay channels; skip irrelevant ones.
14280         DO 120 I=1,MDCY(KC,3)
14281           IDC=I+MDCY(KC,2)-1
14282           IF(MDME(IDC,1).LT.0) GOTO 120
14283  
14284 C...Read out decay products and nominal masses.
14285           KFD1=KFDP(IDC,1)
14286           KFC1=PYCOMP(KFD1)
14287           IF(KCHG(KFC1,3).EQ.1) KFD1=KFLS*KFD1
14288           PM1=PMAS(KFC1,1)
14289           KFD2=KFDP(IDC,2)
14290           KFC2=PYCOMP(KFD2)
14291           IF(KCHG(KFC2,3).EQ.1) KFD2=KFLS*KFD2
14292           PM2=PMAS(KFC2,1)
14293           KFD3=KFDP(IDC,3)
14294           PM3=0D0
14295           IF(KFD3.NE.0) THEN
14296             KFC3=PYCOMP(KFD3)
14297             IF(KCHG(KFC3,3).EQ.1) KFD3=KFLS*KFD3
14298             PM3=PMAS(KFC3,1)
14299           ENDIF
14300  
14301 C...Naive partial width and alternative threshold factors.
14302           WDTP(I)=PMAS(KC,2)*BRAT(IDC)*(SHR/PMR)
14303           IF(MDME(IDC,2).GE.51.AND.MDME(IDC,2).LE.53.AND.
14304      &    PM1+PM2+PM3.GE.SHR) THEN
14305              WDTP(I)=0D0
14306           ELSEIF(MDME(IDC,2).EQ.52.AND.KFD3.EQ.0) THEN
14307             WDTP(I)=WDTP(I)*SQRT(MAX(0D0,(SH-PM1**2-PM2**2)**2-
14308      &      4D0*PM1**2*PM2**2))/SH
14309           ELSEIF(MDME(IDC,2).EQ.52) THEN
14310             PMA=MAX(PM1,PM2,PM3)
14311             PMC=MIN(PM1,PM2,PM3)
14312             PMB=PM1+PM2+PM3-PMA-PMC
14313             PMBC=PMB+PMC+0.5D0*(SHR-PMA-PMC-PMC)
14314             PMAN=PMA**2/SH
14315             PMBN=PMB**2/SH
14316             PMCN=PMC**2/SH
14317             PMBCN=PMBC**2/SH
14318             WDTP(I)=WDTP(I)*SQRT(MAX(0D0,
14319      &      ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
14320      &      ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
14321      &      ((SHR-PMA)**2-(PMB+PMC)**2)*
14322      &      (1D0+0.25D0*(PMA+PMB+PMC)/SHR)/
14323      &      ((1D0-PMBCN)*PMBCN*SH)
14324           ELSEIF(MDME(IDC,2).EQ.53.AND.KFD3.EQ.0) THEN
14325             WDTP(I)=WDTP(I)*SQRT(
14326      &      MAX(0D0,(SH-PM1**2-PM2**2)**2-4D0*PM1**2*PM2**2)/
14327      &      MAX(1D-4,(PMR**2-PM1**2-PM2**2)**2-4D0*PM1**2*PM2**2))
14328           ELSEIF(MDME(IDC,2).EQ.53) THEN
14329             PMA=MAX(PM1,PM2,PM3)
14330             PMC=MIN(PM1,PM2,PM3)
14331             PMB=PM1+PM2+PM3-PMA-PMC
14332             PMBC=PMB+PMC+0.5D0*(SHR-PMA-PMB-PMC)
14333             PMAN=PMA**2/SH
14334             PMBN=PMB**2/SH
14335             PMCN=PMC**2/SH
14336             PMBCN=PMBC**2/SH
14337             FACACT=SQRT(MAX(0D0,
14338      &      ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
14339      &      ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
14340      &      ((SHR-PMA)**2-(PMB+PMC)**2)*
14341      &      (1D0+0.25D0*(PMA+PMB+PMC)/SHR)/
14342      &      ((1D0-PMBCN)*PMBCN*SH)
14343             PMBC=PMB+PMC+0.5D0*(PMR-PMA-PMB-PMC)
14344             PMAN=PMA**2/PMR**2
14345             PMBN=PMB**2/PMR**2
14346             PMCN=PMC**2/PMR**2
14347             PMBCN=PMBC**2/PMR**2
14348             FACNOM=SQRT(MAX(0D0,
14349      &      ((1D0-PMAN-PMBCN)**2-4D0*PMAN*PMBCN)*
14350      &      ((PMBCN-PMBN-PMCN)**2-4D0*PMBN*PMCN)))*
14351      &      ((PMR-PMA)**2-(PMB+PMC)**2)*
14352      &      (1D0+0.25D0*(PMA+PMB+PMC)/PMR)/
14353      &      ((1D0-PMBCN)*PMBCN*PMR**2)
14354             WDTP(I)=WDTP(I)*FACACT/MAX(1D-6,FACNOM)
14355           ENDIF
14356           WDTP(0)=WDTP(0)+WDTP(I)
14357  
14358 C...Calculate secondary width (at most two identical/opposite).
14359           WID2=1D0
14360           IF(MDME(IDC,1).GT.0) THEN
14361             IF(KFD2.EQ.KFD1) THEN
14362               IF(KCHG(KFC1,3).EQ.0) THEN
14363                 WID2=WIDS(KFC1,1)
14364               ELSEIF(KFD1.GT.0) THEN
14365                 WID2=WIDS(KFC1,4)
14366               ELSE
14367                 WID2=WIDS(KFC1,5)
14368               ENDIF
14369               IF(KFD3.GT.0) THEN
14370                 WID2=WID2*WIDS(KFC3,2)
14371               ELSEIF(KFD3.LT.0) THEN
14372                 WID2=WID2*WIDS(KFC3,3)
14373               ENDIF
14374             ELSEIF(KFD2.EQ.-KFD1) THEN
14375               WID2=WIDS(KFC1,1)
14376               IF(KFD3.GT.0) THEN
14377                 WID2=WID2*WIDS(KFC3,2)
14378               ELSEIF(KFD3.LT.0) THEN
14379                 WID2=WID2*WIDS(KFC3,3)
14380               ENDIF
14381             ELSEIF(KFD3.EQ.KFD1) THEN
14382               IF(KCHG(KFC1,3).EQ.0) THEN
14383                 WID2=WIDS(KFC1,1)
14384               ELSEIF(KFD1.GT.0) THEN
14385                 WID2=WIDS(KFC1,4)
14386               ELSE
14387                 WID2=WIDS(KFC1,5)
14388               ENDIF
14389               IF(KFD2.GT.0) THEN
14390                 WID2=WID2*WIDS(KFC2,2)
14391               ELSEIF(KFD2.LT.0) THEN
14392                 WID2=WID2*WIDS(KFC2,3)
14393               ENDIF
14394             ELSEIF(KFD3.EQ.-KFD1) THEN
14395               WID2=WIDS(KFC1,1)
14396               IF(KFD2.GT.0) THEN
14397                 WID2=WID2*WIDS(KFC2,2)
14398               ELSEIF(KFD2.LT.0) THEN
14399                 WID2=WID2*WIDS(KFC2,3)
14400               ENDIF
14401             ELSEIF(KFD3.EQ.KFD2) THEN
14402               IF(KCHG(KFC2,3).EQ.0) THEN
14403                 WID2=WIDS(KFC2,1)
14404               ELSEIF(KFD2.GT.0) THEN
14405                 WID2=WIDS(KFC2,4)
14406               ELSE
14407                 WID2=WIDS(KFC2,5)
14408               ENDIF
14409               IF(KFD1.GT.0) THEN
14410                 WID2=WID2*WIDS(KFC1,2)
14411               ELSEIF(KFD1.LT.0) THEN
14412                 WID2=WID2*WIDS(KFC1,3)
14413               ENDIF
14414             ELSEIF(KFD3.EQ.-KFD2) THEN
14415               WID2=WIDS(KFC2,1)
14416               IF(KFD1.GT.0) THEN
14417                 WID2=WID2*WIDS(KFC1,2)
14418               ELSEIF(KFD1.LT.0) THEN
14419                 WID2=WID2*WIDS(KFC1,3)
14420               ENDIF
14421             ELSE
14422               IF(KFD1.GT.0) THEN
14423                 WID2=WIDS(KFC1,2)
14424               ELSE
14425                 WID2=WIDS(KFC1,3)
14426               ENDIF
14427               IF(KFD2.GT.0) THEN
14428                 WID2=WID2*WIDS(KFC2,2)
14429               ELSE
14430                 WID2=WID2*WIDS(KFC2,3)
14431               ENDIF
14432               IF(KFD3.GT.0) THEN
14433                 WID2=WID2*WIDS(KFC3,2)
14434               ELSEIF(KFD3.LT.0) THEN
14435                 WID2=WID2*WIDS(KFC3,3)
14436               ENDIF
14437             ENDIF
14438  
14439 C...Store effective widths according to case.
14440             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14441             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14442             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14443             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14444           ENDIF
14445   120   CONTINUE
14446 C...Return.
14447         MINT(61)=0
14448         MINT(62)=0
14449         MINT(63)=0
14450         RETURN
14451       ENDIF
14452  
14453 C...Here begins detailed dynamical calculation of resonance widths.
14454 C...Shared treatment of Higgs states.
14455       KFHIGG=25
14456       IHIGG=1
14457       IF(KFLA.EQ.35.OR.KFLA.EQ.36) THEN
14458         KFHIGG=KFLA
14459         IHIGG=KFLA-33
14460       ENDIF
14461  
14462 C...Common electroweak and strong constants.
14463       XW=PARU(102)
14464       XWV=XW
14465       IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
14466       XW1=1D0-XW
14467       AEM=PYALEM(SH)
14468       IF(MSTP(8).GE.1) AEM=SQRT(2D0)*PARU(105)*PMAS(24,1)**2*XW/PARU(1)
14469       AS=PYALPS(SH)
14470       RADC=1D0+AS/PARU(1)
14471  
14472       IF(KFLA.EQ.6) THEN
14473 C...t quark.
14474         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14475         RADCT=1D0-2.5D0*AS/PARU(1)
14476         DO 130 I=1,MDCY(KC,3)
14477           IDC=I+MDCY(KC,2)-1
14478           IF(MDME(IDC,1).LT.0) GOTO 130
14479           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14480           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14481           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 130
14482           WID2=1D0
14483           IF(I.GE.4.AND.I.LE.7) THEN
14484 C...t -> W + q; including approximate QCD correction factor.
14485             WDTP(I)=FAC*VCKM(3,I-3)*RADCT*
14486      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14487      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14488             IF(KFLR.GT.0) THEN
14489               WID2=WIDS(24,2)
14490               IF(I.EQ.7) WID2=WID2*WIDS(7,2)
14491             ELSE
14492               WID2=WIDS(24,3)
14493               IF(I.EQ.7) WID2=WID2*WIDS(7,3)
14494             ENDIF
14495           ELSEIF(I.EQ.9) THEN
14496 C...t -> H + b.
14497             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14498      &      ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
14499             WID2=WIDS(37,2)
14500             IF(KFLR.LT.0) WID2=WIDS(37,3)
14501 CMRENNA++
14502           ELSEIF(I.GE.10.AND.I.LE.13.AND.IMSS(1).NE.0) THEN
14503 C...t -> ~t + ~chi_i0, i = 1, 2, 3 or 4.
14504             BETA=ATAN(RMSS(5))
14505             SINB=SIN(BETA)
14506             TANW=SQRT(PARU(102)/(1D0-PARU(102)))
14507             ET=KCHG(6,1)/3D0
14508             T3L=SIGN(0.5D0,ET)
14509             KFC1=PYCOMP(KFDP(IDC,1))
14510             KFC2=PYCOMP(KFDP(IDC,2))
14511             PMNCHI=PMAS(KFC1,1)
14512             PMSTOP=PMAS(KFC2,1)
14513             IF(SHR.GT.PMNCHI+PMSTOP) THEN
14514               IZ=I-9
14515               AL=SHR*ZMIX(IZ,4)/(2.0D0*PMAS(24,1)*SINB)
14516               AR=-ET*ZMIX(IZ,1)*TANW
14517               BL=T3L*(ZMIX(IZ,2)-ZMIX(IZ,1)*TANW)-AR
14518               BR=AL
14519               FL=SFMIX(6,1)*AL+SFMIX(6,2)*AR
14520               FR=SFMIX(6,1)*BL+SFMIX(6,2)*BR
14521               PCM=SQRT((SH-(PMNCHI+PMSTOP)**2)*
14522      &        (SH-(PMNCHI-PMSTOP)**2))/(2D0*SHR)
14523               WDTP(I)=(0.5D0*PYALEM(SH)/PARU(102))*PCM*((FL**2+FR**2)*
14524      &        (SH+PMNCHI**2-PMSTOP**2)+SMZ(IZ)*4D0*SHR*FL*FR)/SH
14525               IF(KFLR.GT.0) THEN
14526                 WID2=WIDS(KFC1,2)*WIDS(KFC2,2)
14527               ELSE
14528                 WID2=WIDS(KFC1,2)*WIDS(KFC2,3)
14529               ENDIF
14530             ENDIF
14531           ELSEIF(I.EQ.14.AND.IMSS(1).NE.0) THEN
14532 C...t -> ~g + ~t
14533             KFC1=PYCOMP(KFDP(IDC,1))
14534             KFC2=PYCOMP(KFDP(IDC,2))
14535             PMNCHI=PMAS(KFC1,1)
14536             PMSTOP=PMAS(KFC2,1)
14537             IF(SHR.GT.PMNCHI+PMSTOP) THEN
14538               FL=SFMIX(6,1)
14539               FR=-SFMIX(6,2)
14540               PCM=SQRT((SH-(PMNCHI+PMSTOP)**2)*
14541      &        (SH-(PMNCHI-PMSTOP)**2))/(2D0*SHR)
14542               WDTP(I)=4D0/3D0*0.5D0*PYALPS(SH)*PCM*((FL**2+FR**2)*
14543      &        (SH+PMNCHI**2-PMSTOP**2)+PMNCHI*4D0*SHR*FL*FR)/SH
14544               IF(KFLR.GT.0) THEN
14545                 WID2=WIDS(KFC1,2)*WIDS(KFC2,2)
14546               ELSE
14547                 WID2=WIDS(KFC1,2)*WIDS(KFC2,3)
14548               ENDIF
14549             ENDIF
14550           ELSEIF(I.EQ.15.AND.IMSS(1).NE.0) THEN
14551 C...t -> ~gravitino + ~t
14552             XMP2=RMSS(29)**2
14553             KFC1=PYCOMP(KFDP(IDC,1))
14554             XMGR2=PMAS(KFC1,1)**2
14555             WDTP(I)=SH**2*SHR/(96D0*PARU(1)*XMP2*XMGR2)*(1D0-RM2)**4
14556             KFC2=PYCOMP(KFDP(IDC,2))
14557             WID2=WIDS(KFC2,2)
14558             IF(KFLR.LT.0) WID2=WIDS(KFC2,3)
14559 CMRENNA--
14560           ENDIF
14561           WDTP(0)=WDTP(0)+WDTP(I)
14562           IF(MDME(IDC,1).GT.0) THEN
14563             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14564             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14565             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14566             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14567           ENDIF
14568   130   CONTINUE
14569  
14570       ELSEIF(KFLA.EQ.7) THEN
14571 C...b' quark.
14572         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14573         DO 140 I=1,MDCY(KC,3)
14574           IDC=I+MDCY(KC,2)-1
14575           IF(MDME(IDC,1).LT.0) GOTO 140
14576           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14577           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14578           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 140
14579           WID2=1D0
14580           IF(I.GE.4.AND.I.LE.7) THEN
14581 C...b' -> W + q.
14582             WDTP(I)=FAC*VCKM(I-3,4)*
14583      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14584      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14585             IF(KFLR.GT.0) THEN
14586               WID2=WIDS(24,3)
14587               IF(I.EQ.6) WID2=WID2*WIDS(6,2)
14588               IF(I.EQ.7) WID2=WID2*WIDS(8,2)
14589             ELSE
14590               WID2=WIDS(24,2)
14591               IF(I.EQ.6) WID2=WID2*WIDS(6,3)
14592               IF(I.EQ.7) WID2=WID2*WIDS(8,3)
14593             ENDIF
14594             WID2=WIDS(24,3)
14595             IF(KFLR.LT.0) WID2=WIDS(24,2)
14596           ELSEIF(I.EQ.9.OR.I.EQ.10) THEN
14597 C...b' -> H + q.
14598             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14599      &      ((1D0+RM2-RM1)*(PARU(141)**2+RM2/PARU(141)**2)+4D0*RM2)
14600             IF(KFLR.GT.0) THEN
14601               WID2=WIDS(37,3)
14602               IF(I.EQ.10) WID2=WID2*WIDS(6,2)
14603             ELSE
14604               WID2=WIDS(37,2)
14605               IF(I.EQ.10) WID2=WID2*WIDS(6,3)
14606             ENDIF
14607           ENDIF
14608           WDTP(0)=WDTP(0)+WDTP(I)
14609           IF(MDME(IDC,1).GT.0) THEN
14610             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14611             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14612             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14613             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14614           ENDIF
14615   140   CONTINUE
14616  
14617       ELSEIF(KFLA.EQ.8) THEN
14618 C...t' quark.
14619         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14620         DO 150 I=1,MDCY(KC,3)
14621           IDC=I+MDCY(KC,2)-1
14622           IF(MDME(IDC,1).LT.0) GOTO 150
14623           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14624           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14625           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 150
14626           WID2=1D0
14627           IF(I.GE.4.AND.I.LE.7) THEN
14628 C...t' -> W + q.
14629             WDTP(I)=FAC*VCKM(4,I-3)*
14630      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14631      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14632             IF(KFLR.GT.0) THEN
14633               WID2=WIDS(24,2)
14634               IF(I.EQ.7) WID2=WID2*WIDS(7,2)
14635             ELSE
14636               WID2=WIDS(24,3)
14637               IF(I.EQ.7) WID2=WID2*WIDS(7,3)
14638             ENDIF
14639           ELSEIF(I.EQ.9.OR.I.EQ.10) THEN
14640 C...t' -> H + q.
14641             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14642      &      ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
14643             IF(KFLR.GT.0) THEN
14644               WID2=WIDS(37,2)
14645               IF(I.EQ.10) WID2=WID2*WIDS(7,2)
14646             ELSE
14647               WID2=WIDS(37,3)
14648               IF(I.EQ.10) WID2=WID2*WIDS(7,3)
14649             ENDIF
14650           ENDIF
14651           WDTP(0)=WDTP(0)+WDTP(I)
14652           IF(MDME(IDC,1).GT.0) THEN
14653             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14654             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14655             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14656             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14657           ENDIF
14658   150   CONTINUE
14659  
14660       ELSEIF(KFLA.EQ.17) THEN
14661 C...tau' lepton.
14662         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14663         DO 160 I=1,MDCY(KC,3)
14664           IDC=I+MDCY(KC,2)-1
14665           IF(MDME(IDC,1).LT.0) GOTO 160
14666           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14667           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14668           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 160
14669           WID2=1D0
14670           IF(I.EQ.3) THEN
14671 C...tau' -> W + nu'_tau.
14672             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14673      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14674             IF(KFLR.GT.0) THEN
14675               WID2=WIDS(24,3)
14676               WID2=WID2*WIDS(18,2)
14677             ELSE
14678               WID2=WIDS(24,2)
14679               WID2=WID2*WIDS(18,3)
14680             ENDIF
14681           ELSEIF(I.EQ.5) THEN
14682 C...tau' -> H + nu'_tau.
14683             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14684      &      ((1D0+RM2-RM1)*(PARU(141)**2+RM2/PARU(141)**2)+4D0*RM2)
14685             IF(KFLR.GT.0) THEN
14686               WID2=WIDS(37,3)
14687               WID2=WID2*WIDS(18,2)
14688             ELSE
14689               WID2=WIDS(37,2)
14690               WID2=WID2*WIDS(18,3)
14691             ENDIF
14692           ENDIF
14693           WDTP(0)=WDTP(0)+WDTP(I)
14694           IF(MDME(IDC,1).GT.0) THEN
14695             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14696             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14697             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14698             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14699           ENDIF
14700   160   CONTINUE
14701  
14702       ELSEIF(KFLA.EQ.18) THEN
14703 C...nu'_tau neutrino.
14704         FAC=(AEM/(16D0*XW))*(SH/PMAS(24,1)**2)*SHR
14705         DO 170 I=1,MDCY(KC,3)
14706           IDC=I+MDCY(KC,2)-1
14707           IF(MDME(IDC,1).LT.0) GOTO 170
14708           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
14709           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
14710           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 170
14711           WID2=1D0
14712           IF(I.EQ.2) THEN
14713 C...nu'_tau -> W + tau'.
14714             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14715      &      ((1D0-RM2)**2+(1D0+RM2)*RM1-2D0*RM1**2)
14716             IF(KFLR.GT.0) THEN
14717               WID2=WIDS(24,2)
14718               WID2=WID2*WIDS(17,2)
14719             ELSE
14720               WID2=WIDS(24,3)
14721               WID2=WID2*WIDS(17,3)
14722             ENDIF
14723           ELSEIF(I.EQ.3) THEN
14724 C...nu'_tau -> H + tau'.
14725             WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
14726      &      ((1D0+RM2-RM1)*(RM2*PARU(141)**2+1D0/PARU(141)**2)+4D0*RM2)
14727             IF(KFLR.GT.0) THEN
14728               WID2=WIDS(37,2)
14729               WID2=WID2*WIDS(17,2)
14730             ELSE
14731               WID2=WIDS(37,3)
14732               WID2=WID2*WIDS(17,3)
14733             ENDIF
14734           ENDIF
14735           WDTP(0)=WDTP(0)+WDTP(I)
14736           IF(MDME(IDC,1).GT.0) THEN
14737             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14738             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14739             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14740             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14741           ENDIF
14742   170   CONTINUE
14743  
14744       ELSEIF(KFLA.EQ.21) THEN
14745 C...QCD:
14746 C***Note that widths are not given in dimensional quantities here.
14747         DO 180 I=1,MDCY(KC,3)
14748           IDC=I+MDCY(KC,2)-1
14749           IF(MDME(IDC,1).LT.0) GOTO 180
14750           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
14751           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
14752           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 180
14753           WID2=1D0
14754           IF(I.LE.8) THEN
14755 C...QCD -> q + qbar
14756             WDTP(I)=(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
14757             IF(I.EQ.6) WID2=WIDS(6,1)
14758             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
14759           ENDIF
14760           WDTP(0)=WDTP(0)+WDTP(I)
14761           IF(MDME(IDC,1).GT.0) THEN
14762             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14763             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14764             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14765             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14766           ENDIF
14767   180   CONTINUE
14768  
14769       ELSEIF(KFLA.EQ.22) THEN
14770 C...QED photon.
14771 C***Note that widths are not given in dimensional quantities here.
14772         DO 190 I=1,MDCY(KC,3)
14773           IDC=I+MDCY(KC,2)-1
14774           IF(MDME(IDC,1).LT.0) GOTO 190
14775           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
14776           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
14777           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 190
14778           WID2=1D0
14779           IF(I.LE.8) THEN
14780 C...QED -> q + qbar.
14781             EF=KCHG(I,1)/3D0
14782             FCOF=3D0*RADC
14783             IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*PYHFTH(SH,SH*RM1,1D0)
14784             WDTP(I)=FCOF*EF**2*(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
14785             IF(I.EQ.6) WID2=WIDS(6,1)
14786             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
14787           ELSEIF(I.LE.12) THEN
14788 C...QED -> l+ + l-.
14789             EF=KCHG(9+2*(I-8),1)/3D0
14790             WDTP(I)=EF**2*(1D0+2D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
14791             IF(I.EQ.12) WID2=WIDS(17,1)
14792           ENDIF
14793           WDTP(0)=WDTP(0)+WDTP(I)
14794           IF(MDME(IDC,1).GT.0) THEN
14795             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14796             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14797             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14798             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14799           ENDIF
14800   190   CONTINUE
14801  
14802       ELSEIF(KFLA.EQ.23) THEN
14803 C...Z0:
14804         ICASE=1
14805         XWC=1D0/(16D0*XW*XW1)
14806         FAC=(AEM*XWC/3D0)*SHR
14807   200   CONTINUE
14808         IF(MINT(61).GE.1.AND.ICASE.EQ.2) THEN
14809           VINT(111)=0D0
14810           VINT(112)=0D0
14811           VINT(114)=0D0
14812         ENDIF
14813         IF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
14814           KFI=IABS(MINT(15))
14815           IF(KFI.GT.20) KFI=IABS(MINT(16))
14816           EI=KCHG(KFI,1)/3D0
14817           AI=SIGN(1D0,EI)
14818           VI=AI-4D0*EI*XWV
14819           SQMZ=PMAS(23,1)**2
14820           HZ=SHR*WDTP(0)
14821           IF(MSTP(43).EQ.1.OR.MSTP(43).EQ.3) VINT(111)=1D0
14822           IF(MSTP(43).EQ.3) VINT(112)=
14823      &    2D0*XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+HZ**2)
14824           IF(MSTP(43).EQ.2.OR.MSTP(43).EQ.3) VINT(114)=
14825      &    XWC**2*SH**2/((SH-SQMZ)**2+HZ**2)
14826         ENDIF
14827         DO 210 I=1,MDCY(KC,3)
14828           IDC=I+MDCY(KC,2)-1
14829           IF(MDME(IDC,1).LT.0) GOTO 210
14830           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
14831           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
14832           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 210
14833           WID2=1D0
14834           IF(I.LE.8) THEN
14835 C...Z0 -> q + qbar
14836             EF=KCHG(I,1)/3D0
14837             AF=SIGN(1D0,EF+0.1D0)
14838             VF=AF-4D0*EF*XWV
14839             FCOF=3D0*RADC
14840             IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*PYHFTH(SH,SH*RM1,1D0)
14841             IF(I.EQ.6) WID2=WIDS(6,1)
14842             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
14843           ELSEIF(I.LE.16) THEN
14844 C...Z0 -> l+ + l-, nu + nubar
14845             EF=KCHG(I+2,1)/3D0
14846             AF=SIGN(1D0,EF+0.1D0)
14847             VF=AF-4D0*EF*XWV
14848             FCOF=1D0
14849             IF((I.EQ.15.OR.I.EQ.16)) WID2=WIDS(2+I,1)
14850           ENDIF
14851           BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
14852           IF(ICASE.EQ.1) THEN
14853             WDTP(I)=FAC*FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*
14854      &      BE34
14855           ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
14856             WDTP(I)=FAC*FCOF*((EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*
14857      &      EF*VF+(VI**2+AI**2)*VINT(114)*VF**2)*(1D0+2D0*RM1)+
14858      &      (VI**2+AI**2)*VINT(114)*AF**2*(1D0-4D0*RM1))*BE34
14859           ELSEIF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
14860             FGGF=FCOF*EF**2*(1D0+2D0*RM1)*BE34
14861             FGZF=FCOF*EF*VF*(1D0+2D0*RM1)*BE34
14862             FZZF=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
14863           ENDIF
14864           IF(ICASE.EQ.1) WDTP(0)=WDTP(0)+WDTP(I)
14865           IF(MDME(IDC,1).GT.0) THEN
14866             IF((ICASE.EQ.1.AND.MINT(61).NE.1).OR.
14867      &      (ICASE.EQ.2.AND.MINT(61).EQ.1)) THEN
14868               WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14869               WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+
14870      &        WDTE(I,MDME(IDC,1))
14871               WDTE(I,0)=WDTE(I,MDME(IDC,1))
14872               WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14873             ENDIF
14874             IF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
14875               IF(MSTP(43).EQ.1.OR.MSTP(43).EQ.3) VINT(111)=
14876      &        VINT(111)+FGGF*WID2
14877               IF(MSTP(43).EQ.3) VINT(112)=VINT(112)+FGZF*WID2
14878               IF(MSTP(43).EQ.2.OR.MSTP(43).EQ.3) VINT(114)=
14879      &        VINT(114)+FZZF*WID2
14880             ENDIF
14881           ENDIF
14882   210   CONTINUE
14883         IF(MINT(61).GE.1) ICASE=3-ICASE
14884         IF(ICASE.EQ.2) GOTO 200
14885  
14886       ELSEIF(KFLA.EQ.24) THEN
14887 C...W+/-:
14888         FAC=(AEM/(24D0*XW))*SHR
14889         DO 220 I=1,MDCY(KC,3)
14890           IDC=I+MDCY(KC,2)-1
14891           IF(MDME(IDC,1).LT.0) GOTO 220
14892           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
14893           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
14894           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 220
14895           WID2=1D0
14896           IF(I.LE.16) THEN
14897 C...W+/- -> q + qbar'
14898             FCOF=3D0*RADC*VCKM((I-1)/4+1,MOD(I-1,4)+1)
14899             IF(KFLR.GT.0) THEN
14900               IF(MOD(I,4).EQ.3) WID2=WIDS(6,2)
14901               IF(MOD(I,4).EQ.0) WID2=WIDS(8,2)
14902               IF(I.GE.13) WID2=WID2*WIDS(7,3)
14903             ELSE
14904               IF(MOD(I,4).EQ.3) WID2=WIDS(6,3)
14905               IF(MOD(I,4).EQ.0) WID2=WIDS(8,3)
14906               IF(I.GE.13) WID2=WID2*WIDS(7,2)
14907             ENDIF
14908           ELSEIF(I.LE.20) THEN
14909 C...W+/- -> l+/- + nu
14910             FCOF=1D0
14911             IF(KFLR.GT.0) THEN
14912               IF(I.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
14913             ELSE
14914               IF(I.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
14915             ENDIF
14916           ENDIF
14917           WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
14918      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
14919           WDTP(0)=WDTP(0)+WDTP(I)
14920           IF(MDME(IDC,1).GT.0) THEN
14921             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
14922             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
14923             WDTE(I,0)=WDTE(I,MDME(IDC,1))
14924             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
14925           ENDIF
14926   220   CONTINUE
14927  
14928       ELSEIF(KFLA.EQ.25.OR.KFLA.EQ.35.OR.KFLA.EQ.36) THEN
14929 C...h0 (or H0, or A0):
14930         IF(MSTP(49).EQ.0) THEN
14931           FAC=(AEM/(8D0*XW))*(SH/PMAS(24,1)**2)*SHR
14932         ELSE
14933           FAC=(AEM/(8D0*XW))*(PMAS(KFHIGG,1)/PMAS(24,1))**2*SHR
14934         ENDIF
14935         DO 260 I=1,MDCY(KFHIGG,3)
14936           IDC=I+MDCY(KFHIGG,2)-1
14937           IF(MDME(IDC,1).LT.0) GOTO 260
14938           KFC1=PYCOMP(KFDP(IDC,1))
14939           KFC2=PYCOMP(KFDP(IDC,2))
14940           RM1=PMAS(KFC1,1)**2/SH
14941           RM2=PMAS(KFC2,1)**2/SH
14942           IF(I.NE.16.AND.I.NE.17.AND.SQRT(RM1)+SQRT(RM2).GT.1D0)
14943      &    GOTO 260
14944           WID2=1D0
14945  
14946           IF(I.LE.8) THEN
14947 C...h0 -> q + qbar
14948             WDTP(I)=FAC*3D0*(PYMRUN(KFDP(IDC,1),SH)**2/SH)*
14949      &      SQRT(MAX(0D0,1D0-4D0*RM1))*RADC
14950 C...A0 behaves like beta, ho and H0 like beta**3.
14951             IF(IHIGG.NE.3) WDTP(I)=WDTP(I)*(1D0-4D0*RM1)
14952             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
14953               IF(MOD(I,2).EQ.1) WDTP(I)=WDTP(I)*PARU(151+10*IHIGG)**2
14954               IF(MOD(I,2).EQ.0) WDTP(I)=WDTP(I)*PARU(152+10*IHIGG)**2
14955             ENDIF
14956             IF(I.EQ.6) WID2=WIDS(6,1)
14957             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
14958  
14959           ELSEIF(I.LE.12) THEN
14960 C...h0 -> l+ + l-
14961             WDTP(I)=FAC*RM1*SQRT(MAX(0D0,1D0-4D0*RM1))
14962 C...A0 behaves like beta, ho and H0 like beta**3.
14963             IF(IHIGG.NE.3) WDTP(I)=WDTP(I)*(1D0-4D0*RM1)
14964             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) WDTP(I)=WDTP(I)*
14965      &      PARU(153+10*IHIGG)**2
14966             IF(I.EQ.12) WID2=WIDS(17,1)
14967  
14968           ELSEIF(I.EQ.13) THEN
14969 C...h0 -> g + g; quark loop contribution only
14970             ETARE=0D0
14971             ETAIM=0D0
14972             DO 230 J=1,2*MSTP(1)
14973               EPS=(2D0*PMAS(J,1))**2/SH
14974 C...Loop integral; function of eps=4m^2/shat; different for A0.
14975               IF(EPS.LE.1D0) THEN
14976                 IF(EPS.GT.1D-4) THEN
14977                   ROOT=SQRT(1D0-EPS)
14978                   RLN=LOG((1D0+ROOT)/(1D0-ROOT))
14979                 ELSE
14980                   RLN=LOG(4D0/EPS-2D0)
14981                 ENDIF
14982                 PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
14983                 PHIIM=0.5D0*PARU(1)*RLN
14984               ELSE
14985                 PHIRE=(ASIN(1D0/SQRT(EPS)))**2
14986                 PHIIM=0D0
14987               ENDIF
14988               IF(IHIGG.LE.2) THEN
14989                 ETAREJ=-0.5D0*EPS*(1D0+(1D0-EPS)*PHIRE)
14990                 ETAIMJ=-0.5D0*EPS*(1D0-EPS)*PHIIM
14991               ELSE
14992                 ETAREJ=-0.5D0*EPS*PHIRE
14993                 ETAIMJ=-0.5D0*EPS*PHIIM
14994               ENDIF
14995 C...Couplings (=1 for standard model Higgs).
14996               IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
14997                 IF(MOD(J,2).EQ.1) THEN
14998                   ETAREJ=ETAREJ*PARU(151+10*IHIGG)
14999                   ETAIMJ=ETAIMJ*PARU(151+10*IHIGG)
15000                 ELSE
15001                   ETAREJ=ETAREJ*PARU(152+10*IHIGG)
15002                   ETAIMJ=ETAIMJ*PARU(152+10*IHIGG)
15003                 ENDIF
15004               ENDIF
15005               ETARE=ETARE+ETAREJ
15006               ETAIM=ETAIM+ETAIMJ
15007   230       CONTINUE
15008             ETA2=ETARE**2+ETAIM**2
15009             WDTP(I)=FAC*(AS/PARU(1))**2*ETA2
15010  
15011           ELSEIF(I.EQ.14) THEN
15012 C...h0 -> gamma + gamma; quark, lepton, W+- and H+- loop contributions
15013             ETARE=0D0
15014             ETAIM=0D0
15015             JMAX=3*MSTP(1)+1
15016             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) JMAX=JMAX+1
15017             DO 240 J=1,JMAX
15018               IF(J.LE.2*MSTP(1)) THEN
15019                 EJ=KCHG(J,1)/3D0
15020                 EPS=(2D0*PMAS(J,1))**2/SH
15021               ELSEIF(J.LE.3*MSTP(1)) THEN
15022                 JL=2*(J-2*MSTP(1))-1
15023                 EJ=KCHG(10+JL,1)/3D0
15024                 EPS=(2D0*PMAS(10+JL,1))**2/SH
15025               ELSEIF(J.EQ.3*MSTP(1)+1) THEN
15026                 EPS=(2D0*PMAS(24,1))**2/SH
15027               ELSE
15028                 EPS=(2D0*PMAS(37,1))**2/SH
15029               ENDIF
15030 C...Loop integral; function of eps=4m^2/shat.
15031               IF(EPS.LE.1D0) THEN
15032                 IF(EPS.GT.1D-4) THEN
15033                   ROOT=SQRT(1D0-EPS)
15034                   RLN=LOG((1D0+ROOT)/(1D0-ROOT))
15035                 ELSE
15036                   RLN=LOG(4D0/EPS-2D0)
15037                 ENDIF
15038                 PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
15039                 PHIIM=0.5D0*PARU(1)*RLN
15040               ELSE
15041                 PHIRE=(ASIN(1D0/SQRT(EPS)))**2
15042                 PHIIM=0D0
15043               ENDIF
15044               IF(J.LE.3*MSTP(1)) THEN
15045 C...Fermion loops: loop integral different for A0; charges.
15046                 IF(IHIGG.LE.2) THEN
15047                   PHIPRE=-0.5D0*EPS*(1D0+(1D0-EPS)*PHIRE)
15048                   PHIPIM=-0.5D0*EPS*(1D0-EPS)*PHIIM
15049                 ELSE
15050                   PHIPRE=-0.5D0*EPS*PHIRE
15051                   PHIPIM=-0.5D0*EPS*PHIIM
15052                 ENDIF
15053                 IF(J.LE.2*MSTP(1).AND.MOD(J,2).EQ.1) THEN
15054                   EJC=3D0*EJ**2
15055                   EJH=PARU(151+10*IHIGG)
15056                 ELSEIF(J.LE.2*MSTP(1)) THEN
15057                   EJC=3D0*EJ**2
15058                   EJH=PARU(152+10*IHIGG)
15059                 ELSE
15060                   EJC=EJ**2
15061                   EJH=PARU(153+10*IHIGG)
15062                 ENDIF
15063                 IF(MSTP(4).EQ.0.AND.IHIGG.EQ.1) EJH=1D0
15064                 ETAREJ=EJC*EJH*PHIPRE
15065                 ETAIMJ=EJC*EJH*PHIPIM
15066               ELSEIF(J.EQ.3*MSTP(1)+1) THEN
15067 C...W loops: loop integral and charges.
15068                 ETAREJ=0.5D0+0.75D0*EPS*(1D0+(2D0-EPS)*PHIRE)
15069                 ETAIMJ=0.75D0*EPS*(2D0-EPS)*PHIIM
15070                 IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
15071                   ETAREJ=ETAREJ*PARU(155+10*IHIGG)
15072                   ETAIMJ=ETAIMJ*PARU(155+10*IHIGG)
15073                 ENDIF
15074               ELSE
15075 C...Charged H loops: loop integral and charges.
15076                 FACHHH=(PMAS(24,1)/PMAS(37,1))**2*
15077      &          PARU(158+10*IHIGG+2*(IHIGG/3))
15078                 ETAREJ=EPS*(1D0-EPS*PHIRE)*FACHHH
15079                 ETAIMJ=-EPS**2*PHIIM*FACHHH
15080               ENDIF
15081               ETARE=ETARE+ETAREJ
15082               ETAIM=ETAIM+ETAIMJ
15083   240       CONTINUE
15084             ETA2=ETARE**2+ETAIM**2
15085             WDTP(I)=FAC*(AEM/PARU(1))**2*0.5D0*ETA2
15086  
15087           ELSEIF(I.EQ.15) THEN
15088 C...h0 -> gamma + Z0; quark, lepton, W and H+- loop contributions
15089             ETARE=0D0
15090             ETAIM=0D0
15091             JMAX=3*MSTP(1)+1
15092             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) JMAX=JMAX+1
15093             DO 250 J=1,JMAX
15094               IF(J.LE.2*MSTP(1)) THEN
15095                 EJ=KCHG(J,1)/3D0
15096                 AJ=SIGN(1D0,EJ+0.1D0)
15097                 VJ=AJ-4D0*EJ*XWV
15098                 EPS=(2D0*PMAS(J,1))**2/SH
15099                 EPSP=(2D0*PMAS(J,1)/PMAS(23,1))**2
15100               ELSEIF(J.LE.3*MSTP(1)) THEN
15101                 JL=2*(J-2*MSTP(1))-1
15102                 EJ=KCHG(10+JL,1)/3D0
15103                 AJ=SIGN(1D0,EJ+0.1D0)
15104                 VJ=AJ-4D0*EJ*XWV
15105                 EPS=(2D0*PMAS(10+JL,1))**2/SH
15106                 EPSP=(2D0*PMAS(10+JL,1)/PMAS(23,1))**2
15107               ELSE
15108                 EPS=(2D0*PMAS(24,1))**2/SH
15109                 EPSP=(2D0*PMAS(24,1)/PMAS(23,1))**2
15110               ENDIF
15111 C...Loop integrals; functions of eps=4m^2/shat and eps'=4m^2/m_Z^2.
15112               IF(EPS.LE.1D0) THEN
15113                 ROOT=SQRT(1D0-EPS)
15114                 IF(EPS.GT.1D-4) THEN
15115                   RLN=LOG((1D0+ROOT)/(1D0-ROOT))
15116                 ELSE
15117                   RLN=LOG(4D0/EPS-2D0)
15118                 ENDIF
15119                 PHIRE=-0.25D0*(RLN**2-PARU(1)**2)
15120                 PHIIM=0.5D0*PARU(1)*RLN
15121                 PSIRE=0.5D0*ROOT*RLN
15122                 PSIIM=-0.5D0*ROOT*PARU(1)
15123               ELSE
15124                 PHIRE=(ASIN(1D0/SQRT(EPS)))**2
15125                 PHIIM=0D0
15126                 PSIRE=SQRT(EPS-1D0)*ASIN(1D0/SQRT(EPS))
15127                 PSIIM=0D0
15128               ENDIF
15129               IF(EPSP.LE.1D0) THEN
15130                 ROOT=SQRT(1D0-EPSP)
15131                 IF(EPSP.GT.1D-4) THEN
15132                   RLN=LOG((1D0+ROOT)/(1D0-ROOT))
15133                 ELSE
15134                   RLN=LOG(4D0/EPSP-2D0)
15135                 ENDIF
15136                 PHIREP=-0.25D0*(RLN**2-PARU(1)**2)
15137                 PHIIMP=0.5D0*PARU(1)*RLN
15138                 PSIREP=0.5D0*ROOT*RLN
15139                 PSIIMP=-0.5D0*ROOT*PARU(1)
15140               ELSE
15141                 PHIREP=(ASIN(1D0/SQRT(EPSP)))**2
15142                 PHIIMP=0D0
15143                 PSIREP=SQRT(EPSP-1D0)*ASIN(1D0/SQRT(EPSP))
15144                 PSIIMP=0D0
15145               ENDIF
15146               FXYRE=EPS*EPSP/(8D0*(EPS-EPSP))*(1D0+EPS*EPSP/(EPS-EPSP)*
15147      &        (PHIRE-PHIREP)+2D0*EPS/(EPS-EPSP)*(PSIRE-PSIREP))
15148               FXYIM=EPS**2*EPSP/(8D0*(EPS-EPSP)**2)*
15149      &        (EPSP*(PHIIM-PHIIMP)+2D0*(PSIIM-PSIIMP))
15150               F1RE=-EPS*EPSP/(2D0*(EPS-EPSP))*(PHIRE-PHIREP)
15151               F1IM=-EPS*EPSP/(2D0*(EPS-EPSP))*(PHIIM-PHIIMP)
15152               IF(J.LE.3*MSTP(1)) THEN
15153 C...Fermion loops: loop integral different for A0; charges.
15154                 IF(IHIGG.EQ.3) FXYRE=0D0
15155                 IF(IHIGG.EQ.3) FXYIM=0D0
15156                 IF(J.LE.2*MSTP(1).AND.MOD(J,2).EQ.1) THEN
15157                   EJC=-3D0*EJ*VJ
15158                   EJH=PARU(151+10*IHIGG)
15159                 ELSEIF(J.LE.2*MSTP(1)) THEN
15160                   EJC=-3D0*EJ*VJ
15161                   EJH=PARU(152+10*IHIGG)
15162                 ELSE
15163                   EJC=-EJ*VJ
15164                   EJH=PARU(153+10*IHIGG)
15165                 ENDIF
15166                 IF(MSTP(4).EQ.0.AND.IHIGG.EQ.1) EJH=1D0
15167                 ETAREJ=EJC*EJH*(FXYRE-0.25D0*F1RE)
15168                 ETAIMJ=EJC*EJH*(FXYIM-0.25D0*F1IM)
15169               ELSEIF(J.EQ.3*MSTP(1)+1) THEN
15170 C...W loops: loop integral and charges.
15171                 HEPS=(1D0+2D0/EPS)*XW/XW1-(5D0+2D0/EPS)
15172                 ETAREJ=-XW1*((3D0-XW/XW1)*F1RE+HEPS*FXYRE)
15173                 ETAIMJ=-XW1*((3D0-XW/XW1)*F1IM+HEPS*FXYIM)
15174                 IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
15175                   ETAREJ=ETAREJ*PARU(155+10*IHIGG)
15176                   ETAIMJ=ETAIMJ*PARU(155+10*IHIGG)
15177                 ENDIF
15178               ELSE
15179 C...Charged H loops: loop integral and charges.
15180                 FACHHH=(PMAS(24,1)/PMAS(37,1))**2*(1D0-2D0*XW)*
15181      &          PARU(158+10*IHIGG+2*(IHIGG/3))
15182                 ETAREJ=FACHHH*FXYRE
15183                 ETAIMJ=FACHHH*FXYIM
15184               ENDIF
15185               ETARE=ETARE+ETAREJ
15186               ETAIM=ETAIM+ETAIMJ
15187   250       CONTINUE
15188             ETA2=(ETARE**2+ETAIM**2)/(XW*XW1)
15189             WDTP(I)=FAC*(AEM/PARU(1))**2*(1D0-PMAS(23,1)**2/SH)**3*ETA2
15190             WID2=WIDS(23,2)
15191  
15192           ELSEIF(I.LE.17) THEN
15193 C...h0 -> Z0 + Z0, W+ + W-
15194             PM1=PMAS(IABS(KFDP(IDC,1)),1)
15195             PG1=PMAS(IABS(KFDP(IDC,1)),2)
15196             IF(MINT(62).GE.1) THEN
15197               IF(MSTP(42).EQ.0.OR.(4D0*(PM1+10D0*PG1)**2.LT.SH.AND.
15198      &        CKIN(46).LT.CKIN(45).AND.CKIN(48).LT.CKIN(47).AND.
15199      &        MAX(CKIN(45),CKIN(47)).LT.PM1-10D0*PG1)) THEN
15200                 MOFSV(IHIGG,I-15)=0
15201                 WIDW=(1D0-4D0*RM1+12D0*RM1**2)*SQRT(MAX(0D0,
15202      &          1D0-4D0*RM1))
15203                 WID2=1D0
15204               ELSE
15205                 MOFSV(IHIGG,I-15)=1
15206                 RMAS=SQRT(MAX(0D0,SH))
15207                 CALL PYOFSH(1,KFLA,KFDP(IDC,1),KFDP(IDC,2),RMAS,WIDW,
15208      &          WID2)
15209                 WIDWSV(IHIGG,I-15)=WIDW
15210                 WID2SV(IHIGG,I-15)=WID2
15211               ENDIF
15212             ELSE
15213               IF(MOFSV(IHIGG,I-15).EQ.0) THEN
15214                 WIDW=(1D0-4D0*RM1+12D0*RM1**2)*SQRT(MAX(0D0,
15215      &          1D0-4D0*RM1))
15216                 WID2=1D0
15217               ELSE
15218                 WIDW=WIDWSV(IHIGG,I-15)
15219                 WID2=WID2SV(IHIGG,I-15)
15220               ENDIF
15221             ENDIF
15222             WDTP(I)=FAC*WIDW/(2D0*(18-I))
15223             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) WDTP(I)=WDTP(I)*
15224      &      PARU(138+I+10*IHIGG)**2
15225             WID2=WID2*WIDS(7+I,1)
15226  
15227           ELSEIF(I.EQ.18.AND.KFLA.EQ.35) THEN
15228 C***H0 -> Z0 + h0 (not yet implemented).
15229  
15230           ELSEIF(I.EQ.19.AND.KFLA.EQ.35) THEN
15231 C...H0 -> h0 + h0.
15232             WDTP(I)=FAC*PARU(176)**2*0.25D0*PMAS(23,1)**4/SH**2*
15233      &      SQRT(MAX(0D0,1D0-4D0*RM1))
15234             WID2=WIDS(25,2)**2
15235  
15236           ELSEIF(I.EQ.20.AND.KFLA.EQ.35) THEN
15237 C...H0 -> A0 + A0.
15238             WDTP(I)=FAC*PARU(177)**2*0.25D0*PMAS(23,1)**4/SH**2*
15239      &      SQRT(MAX(0D0,1D0-4D0*RM1))
15240             WID2=WIDS(36,2)**2
15241  
15242           ELSEIF(I.EQ.18.AND.KFLA.EQ.36) THEN
15243 C...A0 -> Z0 + h0.
15244             WDTP(I)=FAC*PARU(186)**2*0.5D0*SQRT(MAX(0D0,
15245      &      (1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15246             WID2=WIDS(23,2)*WIDS(25,2)
15247  
15248 CMRENNA++
15249           ELSE
15250 C...Add in SUSY decays (two-body) by rescaling by phase space factor.
15251             RM10=RM1*SH/PMR**2
15252             RM20=RM2*SH/PMR**2
15253             WFAC0=1D0+RM10**2+RM20**2-2D0*(RM10+RM20+RM10*RM20)
15254             WFAC=1D0+RM1**2+RM2**2-2D0*(RM1+RM2+RM1*RM2)
15255             IF(WFAC.LE.0D0 .OR. WFAC0.LE.0D0) THEN
15256               WFAC=0D0
15257             ELSE
15258               WFAC=WFAC/WFAC0
15259             ENDIF
15260             WDTP(I)=PMAS(KFLA,2)*BRAT(IDC)*(SHR/PMR)*SQRT(WFAC)
15261 CMRENNA--
15262             IF(KFC2.EQ.KFC1) THEN
15263               WID2=WIDS(KFC1,1)
15264             ELSE
15265               KSGN1=2
15266               IF(KFDP(IDC,1).LT.0) KSGN1=3
15267               KSGN2=2
15268               IF(KFDP(IDC,2).LT.0) KSGN2=3
15269               WID2=WIDS(KFC1,KSGN1)*WIDS(KFC2,KSGN2)
15270             ENDIF
15271           ENDIF
15272           WDTP(0)=WDTP(0)+WDTP(I)
15273           IF(MDME(IDC,1).GT.0) THEN
15274             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15275             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15276             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15277             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15278           ENDIF
15279   260   CONTINUE
15280  
15281       ELSEIF(KFLA.EQ.32) THEN
15282 C...Z'0:
15283         ICASE=1
15284         XWC=1D0/(16D0*XW*XW1)
15285         FAC=(AEM*XWC/3D0)*SHR
15286         VINT(117)=0D0
15287   270   CONTINUE
15288         IF(MINT(61).GE.1.AND.ICASE.EQ.2) THEN
15289           VINT(111)=0D0
15290           VINT(112)=0D0
15291           VINT(113)=0D0
15292           VINT(114)=0D0
15293           VINT(115)=0D0
15294           VINT(116)=0D0
15295         ENDIF
15296         IF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15297           KFAI=IABS(MINT(15))
15298           EI=KCHG(KFAI,1)/3D0
15299           AI=SIGN(1D0,EI+0.1D0)
15300           VI=AI-4D0*EI*XWV
15301           KFAIC=1
15302           IF(KFAI.LE.10.AND.MOD(KFAI,2).EQ.0) KFAIC=2
15303           IF(KFAI.GT.10.AND.MOD(KFAI,2).NE.0) KFAIC=3
15304           IF(KFAI.GT.10.AND.MOD(KFAI,2).EQ.0) KFAIC=4
15305           IF(KFAI.LE.2.OR.KFAI.EQ.11.OR.KFAI.EQ.12) THEN
15306             VPI=PARU(119+2*KFAIC)
15307             API=PARU(120+2*KFAIC)
15308           ELSEIF(KFAI.LE.4.OR.KFAI.EQ.13.OR.KFAI.EQ.14) THEN
15309             VPI=PARJ(178+2*KFAIC)
15310             API=PARJ(179+2*KFAIC)
15311           ELSE
15312             VPI=PARJ(186+2*KFAIC)
15313             API=PARJ(187+2*KFAIC)
15314           ENDIF
15315           SQMZ=PMAS(23,1)**2
15316           HZ=SHR*VINT(117)
15317           SQMZP=PMAS(32,1)**2
15318           HZP=SHR*WDTP(0)
15319           IF(MSTP(44).EQ.1.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.5.OR.
15320      &    MSTP(44).EQ.7) VINT(111)=1D0
15321           IF(MSTP(44).EQ.4.OR.MSTP(44).EQ.7) VINT(112)=
15322      &    2D0*XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+HZ**2)
15323           IF(MSTP(44).EQ.5.OR.MSTP(44).EQ.7) VINT(113)=
15324      &    2D0*XWC*SH*(SH-SQMZP)/((SH-SQMZP)**2+HZP**2)
15325           IF(MSTP(44).EQ.2.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.6.OR.
15326      &    MSTP(44).EQ.7) VINT(114)=XWC**2*SH**2/((SH-SQMZ)**2+HZ**2)
15327           IF(MSTP(44).EQ.6.OR.MSTP(44).EQ.7) VINT(115)=
15328      &    2D0*XWC**2*SH**2*((SH-SQMZ)*(SH-SQMZP)+HZ*HZP)/
15329      &    (((SH-SQMZ)**2+HZ**2)*((SH-SQMZP)**2+HZP**2))
15330           IF(MSTP(44).EQ.3.OR.MSTP(44).EQ.5.OR.MSTP(44).EQ.6.OR.
15331      &    MSTP(44).EQ.7) VINT(116)=XWC**2*SH**2/((SH-SQMZP)**2+HZP**2)
15332         ENDIF
15333         DO 280 I=1,MDCY(KC,3)
15334           IDC=I+MDCY(KC,2)-1
15335           IF(MDME(IDC,1).LT.0) GOTO 280
15336           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15337           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15338           IF(SQRT(RM1)+SQRT(RM2).GT.1D0.OR.MDME(IDC,1).LT.0) GOTO 280
15339           WID2=1D0
15340           IF(I.LE.16) THEN
15341             IF(I.LE.8) THEN
15342 C...Z'0 -> q + qbar
15343               EF=KCHG(I,1)/3D0
15344               AF=SIGN(1D0,EF+0.1D0)
15345               VF=AF-4D0*EF*XWV
15346               IF(I.LE.2) THEN
15347                 VPF=PARU(123-2*MOD(I,2))
15348                 APF=PARU(124-2*MOD(I,2))
15349               ELSEIF(I.LE.4) THEN
15350                 VPF=PARJ(182-2*MOD(I,2))
15351                 APF=PARJ(183-2*MOD(I,2))
15352               ELSE
15353                 VPF=PARJ(190-2*MOD(I,2))
15354                 APF=PARJ(191-2*MOD(I,2))
15355               ENDIF
15356               FCOF=3D0*RADC
15357               IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*
15358      &        PYHFTH(SH,SH*RM1,1D0)
15359               IF(I.EQ.6) WID2=WIDS(6,1)
15360               IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
15361             ELSEIF(I.LE.16) THEN
15362 C...Z'0 -> l+ + l-, nu + nubar
15363               EF=KCHG(I+2,1)/3D0
15364               AF=SIGN(1D0,EF+0.1D0)
15365               VF=AF-4D0*EF*XWV
15366               IF(I.LE.10) THEN
15367                 VPF=PARU(127-2*MOD(I,2))
15368                 APF=PARU(128-2*MOD(I,2))
15369               ELSEIF(I.LE.12) THEN
15370                 VPF=PARJ(186-2*MOD(I,2))
15371                 APF=PARJ(187-2*MOD(I,2))
15372               ELSE
15373                 VPF=PARJ(194-2*MOD(I,2))
15374                 APF=PARJ(195-2*MOD(I,2))
15375               ENDIF
15376               FCOF=1D0
15377               IF((I.EQ.15.OR.I.EQ.16)) WID2=WIDS(2+I,1)
15378             ENDIF
15379             BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
15380             IF(ICASE.EQ.1) THEN
15381               WDTPZ=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
15382               WDTP(I)=FAC*FCOF*(VPF**2*(1D0+2D0*RM1)+
15383      &        APF**2*(1D0-4D0*RM1))*BE34
15384             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15385               WDTP(I)=FAC*FCOF*((EI**2*VINT(111)*EF**2+EI*VI*VINT(112)*
15386      &        EF*VF+EI*VPI*VINT(113)*EF*VPF+(VI**2+AI**2)*VINT(114)*
15387      &        VF**2+(VI*VPI+AI*API)*VINT(115)*VF*VPF+(VPI**2+API**2)*
15388      &        VINT(116)*VPF**2)*(1D0+2D0*RM1)+((VI**2+AI**2)*VINT(114)*
15389      &        AF**2+(VI*VPI+AI*API)*VINT(115)*AF*APF+(VPI**2+API**2)*
15390      &        VINT(116)*APF**2)*(1D0-4D0*RM1))*BE34
15391             ELSEIF(MINT(61).EQ.2) THEN
15392               FGGF=FCOF*EF**2*(1D0+2D0*RM1)*BE34
15393               FGZF=FCOF*EF*VF*(1D0+2D0*RM1)*BE34
15394               FGZPF=FCOF*EF*VPF*(1D0+2D0*RM1)*BE34
15395               FZZF=FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*BE34
15396               FZZPF=FCOF*(VF*VPF*(1D0+2D0*RM1)+AF*APF*(1D0-4D0*RM1))*
15397      &        BE34
15398               FZPZPF=FCOF*(VPF**2*(1D0+2D0*RM1)+APF**2*(1D0-4D0*RM1))*
15399      &        BE34
15400             ENDIF
15401           ELSEIF(I.EQ.17) THEN
15402 C...Z'0 -> W+ + W-
15403             WDTPZP=PARU(129)**2*XW1**2*
15404      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15405      &      (1D0+10D0*RM1+10D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
15406             IF(ICASE.EQ.1) THEN
15407               WDTPZ=0D0
15408               WDTP(I)=FAC*WDTPZP
15409             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15410               WDTP(I)=FAC*(VPI**2+API**2)*VINT(116)*WDTPZP
15411             ELSEIF(MINT(61).EQ.2) THEN
15412               FGGF=0D0
15413               FGZF=0D0
15414               FGZPF=0D0
15415               FZZF=0D0
15416               FZZPF=0D0
15417               FZPZPF=WDTPZP
15418             ENDIF
15419             WID2=WIDS(24,1)
15420           ELSEIF(I.EQ.18) THEN
15421 C...Z'0 -> H+ + H-
15422             CZC=2D0*(1D0-2D0*XW)
15423             BE34C=(1D0-4D0*RM1)*SQRT(MAX(0D0,1D0-4D0*RM1))
15424             IF(ICASE.EQ.1) THEN
15425               WDTPZ=0.25D0*PARU(142)**2*CZC**2*BE34C
15426               WDTP(I)=FAC*0.25D0*PARU(143)**2*CZC**2*BE34C
15427             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15428               WDTP(I)=FAC*0.25D0*(EI**2*VINT(111)+PARU(142)*EI*VI*
15429      &        VINT(112)*CZC+PARU(143)*EI*VPI*VINT(113)*CZC+PARU(142)**2*
15430      &        (VI**2+AI**2)*VINT(114)*CZC**2+PARU(142)*PARU(143)*
15431      &        (VI*VPI+AI*API)*VINT(115)*CZC**2+PARU(143)**2*
15432      &        (VPI**2+API**2)*VINT(116)*CZC**2)*BE34C
15433             ELSEIF(MINT(61).EQ.2) THEN
15434               FGGF=0.25D0*BE34C
15435               FGZF=0.25D0*PARU(142)*CZC*BE34C
15436               FGZPF=0.25D0*PARU(143)*CZC*BE34C
15437               FZZF=0.25D0*PARU(142)**2*CZC**2*BE34C
15438               FZZPF=0.25D0*PARU(142)*PARU(143)*CZC**2*BE34C
15439               FZPZPF=0.25D0*PARU(143)**2*CZC**2*BE34C
15440             ENDIF
15441             WID2=WIDS(37,1)
15442           ELSEIF(I.EQ.19) THEN
15443 C...Z'0 -> Z0 + gamma.
15444           ELSEIF(I.EQ.20) THEN
15445 C...Z'0 -> Z0 + h0
15446             FLAM=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15447             WDTPZP=PARU(145)**2*4D0*ABS(1D0-2D0*XW)*
15448      &      (3D0*RM1+0.25D0*FLAM**2)*FLAM
15449             IF(ICASE.EQ.1) THEN
15450               WDTPZ=0D0
15451               WDTP(I)=FAC*WDTPZP
15452             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15453               WDTP(I)=FAC*(VPI**2+API**2)*VINT(116)*WDTPZP
15454             ELSEIF(MINT(61).EQ.2) THEN
15455               FGGF=0D0
15456               FGZF=0D0
15457               FGZPF=0D0
15458               FZZF=0D0
15459               FZZPF=0D0
15460               FZPZPF=WDTPZP
15461             ENDIF
15462             WID2=WIDS(23,2)*WIDS(25,2)
15463           ELSEIF(I.EQ.21.OR.I.EQ.22) THEN
15464 C...Z' -> h0 + A0 or H0 + A0.
15465             BE34C=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15466             IF(I.EQ.21) THEN
15467               CZAH=PARU(186)
15468               CZPAH=PARU(188)
15469             ELSE
15470               CZAH=PARU(187)
15471               CZPAH=PARU(189)
15472             ENDIF
15473             IF(ICASE.EQ.1) THEN
15474               WDTPZ=CZAH**2*BE34C
15475               WDTP(I)=FAC*CZPAH**2*BE34C
15476             ELSEIF(MINT(61).EQ.1.AND.ICASE.EQ.2) THEN
15477               WDTP(I)=FAC*(CZAH**2*(VI**2+AI**2)*VINT(114)+CZAH*CZPAH*
15478      &        (VI*VPI+AI*API)*VINT(115)+CZPAH**2*(VPI**2+API**2)*
15479      &        VINT(116))*BE34C
15480             ELSEIF(MINT(61).EQ.2) THEN
15481               FGGF=0D0
15482               FGZF=0D0
15483               FGZPF=0D0
15484               FZZF=CZAH**2*BE34C
15485               FZZPF=CZAH*CZPAH*BE34C
15486               FZPZPF=CZPAH**2*BE34C
15487             ENDIF
15488             IF(I.EQ.21) WID2=WIDS(25,2)*WIDS(36,2)
15489             IF(I.EQ.22) WID2=WIDS(35,2)*WIDS(36,2)
15490           ENDIF
15491           IF(ICASE.EQ.1) THEN
15492             VINT(117)=VINT(117)+FAC*WDTPZ
15493             WDTP(0)=WDTP(0)+WDTP(I)
15494           ENDIF
15495           IF(MDME(IDC,1).GT.0) THEN
15496             IF((ICASE.EQ.1.AND.MINT(61).NE.1).OR.
15497      &      (ICASE.EQ.2.AND.MINT(61).EQ.1)) THEN
15498               WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15499               WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+
15500      &        WDTE(I,MDME(IDC,1))
15501               WDTE(I,0)=WDTE(I,MDME(IDC,1))
15502               WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15503             ENDIF
15504             IF(MINT(61).EQ.2.AND.ICASE.EQ.2) THEN
15505               IF(MSTP(44).EQ.1.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.5.OR.
15506      &        MSTP(44).EQ.7) VINT(111)=VINT(111)+FGGF*WID2
15507               IF(MSTP(44).EQ.4.OR.MSTP(44).EQ.7) VINT(112)=VINT(112)+
15508      &        FGZF*WID2
15509               IF(MSTP(44).EQ.5.OR.MSTP(44).EQ.7) VINT(113)=VINT(113)+
15510      &        FGZPF*WID2
15511               IF(MSTP(44).EQ.2.OR.MSTP(44).EQ.4.OR.MSTP(44).EQ.6.OR.
15512      &        MSTP(44).EQ.7) VINT(114)=VINT(114)+FZZF*WID2
15513               IF(MSTP(44).EQ.6.OR.MSTP(44).EQ.7) VINT(115)=VINT(115)+
15514      &        FZZPF*WID2
15515               IF(MSTP(44).EQ.3.OR.MSTP(44).EQ.5.OR.MSTP(44).EQ.6.OR.
15516      &        MSTP(44).EQ.7) VINT(116)=VINT(116)+FZPZPF*WID2
15517             ENDIF
15518           ENDIF
15519   280   CONTINUE
15520         IF(MINT(61).GE.1) ICASE=3-ICASE
15521         IF(ICASE.EQ.2) GOTO 270
15522  
15523       ELSEIF(KFLA.EQ.34) THEN
15524 C...W'+/-:
15525         FAC=(AEM/(24D0*XW))*SHR
15526         DO 290 I=1,MDCY(KC,3)
15527           IDC=I+MDCY(KC,2)-1
15528           IF(MDME(IDC,1).LT.0) GOTO 290
15529           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15530           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15531           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 290
15532           WID2=1D0
15533           IF(I.LE.20) THEN
15534             IF(I.LE.16) THEN
15535 C...W'+/- -> q + qbar'
15536               FCOF=3D0*RADC*(PARU(131)**2+PARU(132)**2)*
15537      &        VCKM((I-1)/4+1,MOD(I-1,4)+1)
15538               IF(KFLR.GT.0) THEN
15539                 IF(MOD(I,4).EQ.3) WID2=WIDS(6,2)
15540                 IF(MOD(I,4).EQ.0) WID2=WIDS(8,2)
15541                 IF(I.GE.13) WID2=WID2*WIDS(7,3)
15542               ELSE
15543                 IF(MOD(I,4).EQ.3) WID2=WIDS(6,3)
15544                 IF(MOD(I,4).EQ.0) WID2=WIDS(8,3)
15545                 IF(I.GE.13) WID2=WID2*WIDS(7,2)
15546               ENDIF
15547             ELSEIF(I.LE.20) THEN
15548 C...W'+/- -> l+/- + nu
15549               FCOF=PARU(133)**2+PARU(134)**2
15550               IF(KFLR.GT.0) THEN
15551                 IF(I.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
15552               ELSE
15553                 IF(I.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
15554               ENDIF
15555             ENDIF
15556             WDTP(I)=FAC*FCOF*0.5D0*(2D0-RM1-RM2-(RM1-RM2)**2)*
15557      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15558           ELSEIF(I.EQ.21) THEN
15559 C...W'+/- -> W+/- + Z0
15560             WDTP(I)=FAC*PARU(135)**2*0.5D0*XW1*(RM1/RM2)*
15561      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15562      &      (1D0+10D0*RM1+10D0*RM2+RM1**2+RM2**2+10D0*RM1*RM2)
15563             IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(23,2)
15564             IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(23,2)
15565           ELSEIF(I.EQ.23) THEN
15566 C...W'+/- -> W+/- + h0
15567             FLAM=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15568             WDTP(I)=FAC*PARU(146)**2*2D0*(3D0*RM1+0.25D0*FLAM**2)*FLAM
15569             IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(25,2)
15570             IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(25,2)
15571           ENDIF
15572           WDTP(0)=WDTP(0)+WDTP(I)
15573           IF(MDME(IDC,1).GT.0) THEN
15574             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15575             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15576             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15577             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15578           ENDIF
15579   290   CONTINUE
15580  
15581       ELSEIF(KFLA.EQ.37) THEN
15582 C...H+/-:
15583         FAC=(AEM/(8D0*XW))*(SH/PMAS(24,1)**2)*SHR
15584         DO 300 I=1,MDCY(KC,3)
15585           IDC=I+MDCY(KC,2)-1
15586           IF(MDME(IDC,1).LT.0) GOTO 300
15587           KFC1=PYCOMP(KFDP(IDC,1))
15588           KFC2=PYCOMP(KFDP(IDC,2))
15589           RM1=PMAS(KFC1,1)**2/SH
15590           RM2=PMAS(KFC2,1)**2/SH
15591           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 300
15592           WID2=1D0
15593           IF(I.LE.4) THEN
15594 C...H+/- -> q + qbar'
15595             RM1R=PYMRUN(KFDP(IDC,1),SH)**2/SH
15596             RM2R=PYMRUN(KFDP(IDC,2),SH)**2/SH
15597             WDTP(I)=FAC*3D0*RADC*MAX(0D0,(RM1R*PARU(141)**2+
15598      &      RM2R/PARU(141)**2)*(1D0-RM1R-RM2R)-4D0*RM1R*RM2R)*
15599      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15600             IF(KFLR.GT.0) THEN
15601               IF(I.EQ.3) WID2=WIDS(6,2)
15602               IF(I.EQ.4) WID2=WIDS(7,3)*WIDS(8,2)
15603             ELSE
15604               IF(I.EQ.3) WID2=WIDS(6,3)
15605               IF(I.EQ.4) WID2=WIDS(7,2)*WIDS(8,3)
15606             ENDIF
15607           ELSEIF(I.LE.8) THEN
15608 C...H+/- -> l+/- + nu
15609             WDTP(I)=FAC*((RM1*PARU(141)**2+RM2/PARU(141)**2)*
15610      &      (1D0-RM1-RM2)-4D0*RM1*RM2)*
15611      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15612             IF(KFLR.GT.0) THEN
15613               IF(I.EQ.8) WID2=WIDS(17,3)*WIDS(18,2)
15614             ELSE
15615               IF(I.EQ.8) WID2=WIDS(17,2)*WIDS(18,3)
15616             ENDIF
15617           ELSEIF(I.EQ.9) THEN
15618 C...H+/- -> W+/- + h0.
15619             WDTP(I)=FAC*PARU(195)**2*0.5D0*SQRT(MAX(0D0,
15620      &      (1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15621             IF(KFLR.GT.0) WID2=WIDS(24,2)*WIDS(25,2)
15622             IF(KFLR.LT.0) WID2=WIDS(24,3)*WIDS(25,2)
15623  
15624 CMRENNA++
15625           ELSE
15626 C...Add in SUSY decays (two-body) by rescaling by phase space factor.
15627             RM10=RM1*SH/PMR**2
15628             RM20=RM2*SH/PMR**2
15629             WFAC0=1D0+RM10**2+RM20**2-2D0*(RM10+RM20+RM10*RM20)
15630             WFAC=1D0+RM1**2+RM2**2-2D0*(RM1+RM2+RM1*RM2)
15631             IF(WFAC.LE.0D0 .OR. WFAC0.LE.0D0) THEN
15632               WFAC=0D0
15633             ELSE
15634               WFAC=WFAC/WFAC0
15635             ENDIF
15636             WDTP(I)=PMAS(KC,2)*BRAT(IDC)*(SHR/PMR)*SQRT(WFAC)
15637 CMRENNA--
15638             KSGN1=2
15639             IF(KFLS*KFDP(IDC,1).LT.0.AND.KCHG(KFC1,3).EQ.1) KSGN1=3
15640             KSGN2=2
15641             IF(KFLS*KFDP(IDC,2).LT.0.AND.KCHG(KFC2,3).EQ.1) KSGN2=3
15642             WID2=WIDS(KFC1,KSGN1)*WIDS(KFC2,KSGN2)
15643           ENDIF
15644           WDTP(0)=WDTP(0)+WDTP(I)
15645           IF(MDME(IDC,1).GT.0) THEN
15646             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15647             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15648             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15649             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15650           ENDIF
15651   300   CONTINUE
15652  
15653       ELSEIF(KFLA.EQ.38) THEN
15654 C...Techni-eta.
15655         FAC=(SH/PARP(46)**2)*SHR
15656         DO 310 I=1,MDCY(KC,3)
15657           IDC=I+MDCY(KC,2)-1
15658           IF(MDME(IDC,1).LT.0) GOTO 310
15659           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15660           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15661           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 310
15662           WID2=1D0
15663           IF(I.LE.2) THEN
15664             WDTP(I)=FAC*RM1*SQRT(MAX(0D0,1D0-4D0*RM1))/(4D0*PARU(1))
15665             IF(I.EQ.2) WID2=WIDS(6,1)
15666           ELSE
15667             WDTP(I)=FAC*5D0*AS**2/(96D0*PARU(1)**3)
15668           ENDIF
15669           WDTP(0)=WDTP(0)+WDTP(I)
15670           IF(MDME(IDC,1).GT.0) THEN
15671             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15672             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15673             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15674             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15675           ENDIF
15676   310   CONTINUE
15677  
15678       ELSEIF(KFLA.EQ.39) THEN
15679 C...LQ (leptoquark).
15680         FAC=(AEM/4D0)*PARU(151)*SHR
15681         DO 320 I=1,MDCY(KC,3)
15682           IDC=I+MDCY(KC,2)-1
15683           IF(MDME(IDC,1).LT.0) GOTO 320
15684           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15685           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15686           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 320
15687           WDTP(I)=FAC*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15688           WID2=1D0
15689           ILQQ=KFDP(IDC,1)*ISIGN(1,KFLR)
15690           IF(ILQQ.GE.6) WID2=WIDS(ILQQ,2)
15691           IF(ILQQ.LE.-6) WID2=WIDS(-ILQQ,3)
15692           ILQL=KFDP(IDC,2)*ISIGN(1,KFLR)
15693           IF(ILQL.GE.17) WID2=WID2*WIDS(ILQL,2)
15694           IF(ILQL.LE.-17) WID2=WID2*WIDS(-ILQL,3)
15695           WDTP(0)=WDTP(0)+WDTP(I)
15696           IF(MDME(IDC,1).GT.0) THEN
15697             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15698             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15699             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15700             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15701           ENDIF
15702   320   CONTINUE
15703  
15704       ELSEIF(KFLA.EQ.40) THEN
15705 C...R:
15706         FAC=(AEM/(12D0*XW))*SHR
15707         DO 330 I=1,MDCY(KC,3)
15708           IDC=I+MDCY(KC,2)-1
15709           IF(MDME(IDC,1).LT.0) GOTO 330
15710           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15711           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15712           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 330
15713           WID2=1D0
15714           IF(I.LE.6) THEN
15715 C...R -> q + qbar'
15716             FCOF=3D0*RADC
15717           ELSEIF(I.LE.9) THEN
15718 C...R -> l+ + l'-
15719             FCOF=1D0
15720           ENDIF
15721           WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
15722      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15723           IF(KFLR.GT.0) THEN
15724             IF(I.EQ.4) WID2=WIDS(6,3)
15725             IF(I.EQ.5) WID2=WIDS(7,3)
15726             IF(I.EQ.6) WID2=WIDS(6,2)*WIDS(8,3)
15727             IF(I.EQ.9) WID2=WIDS(17,3)
15728           ELSE
15729             IF(I.EQ.4) WID2=WIDS(6,2)
15730             IF(I.EQ.5) WID2=WIDS(7,2)
15731             IF(I.EQ.6) WID2=WIDS(6,3)*WIDS(8,2)
15732             IF(I.EQ.9) WID2=WIDS(17,2)
15733           ENDIF
15734           WDTP(0)=WDTP(0)+WDTP(I)
15735           IF(MDME(IDC,1).GT.0) THEN
15736             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15737             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15738             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15739             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15740           ENDIF
15741   330   CONTINUE
15742  
15743       ELSEIF(KFLA.EQ.51.OR.KFLA.EQ.53) THEN
15744 C...Techni-pi0 and techni-pi0':
15745         FAC=(1D0/(32D0*PARU(1)*PARP(142)**2))*SHR
15746         DO 340 I=1,MDCY(KC,3)
15747           IDC=I+MDCY(KC,2)-1
15748           IF(MDME(IDC,1).LT.0) GOTO 340
15749           PM1=PMAS(PYCOMP(KFDP(IDC,1)),1)
15750           PM2=PMAS(PYCOMP(KFDP(IDC,2)),1)
15751           RM1=PM1**2/SH
15752           RM2=PM2**2/SH
15753           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 340
15754           WID2=1D0
15755 C...pi_tech -> g + g
15756           IF(I.EQ.8) THEN
15757             FACP=(AS/(4D0*PARU(1))*PARP(144)/PARP(142))**2
15758      &      /(8D0*PARU(1))*SH*SHR
15759             IF(KFLA.EQ.51) THEN
15760               FACP=FACP*PARP(149)
15761             ELSE
15762               FACP=FACP*PARP(150)
15763             ENDIF
15764             WDTP(I)=FACP
15765           ELSE
15766 C...pi_tech -> f + fbar.
15767             FCOF=1D0
15768             IKA=IABS(KFDP(IDC,1))
15769             IF(IKA.LT.10) FCOF=3D0*RADC
15770             HM1=PM1
15771             HM2=PM2
15772             IF(IKA.GE.4.AND.IKA.LE.6) THEN
15773                FCOF=FCOF*PARP(141+IKA)**2
15774                HM1=PYMRUN(KFDP(IDC,1),SH)
15775                HM2=PYMRUN(KFDP(IDC,2),SH)
15776             ELSEIF(IKA.EQ.15) THEN
15777                FCOF=FCOF*PARP(148)**2
15778             ENDIF
15779             WDTP(I)=FAC*FCOF*(HM1+HM2)**2*
15780      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15781           ENDIF
15782           WDTP(0)=WDTP(0)+WDTP(I)
15783           IF(MDME(IDC,1).GT.0) THEN
15784             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15785             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15786             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15787             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15788           ENDIF
15789   340   CONTINUE
15790  
15791       ELSEIF(KFLA.EQ.52) THEN
15792 C...pi+_tech
15793         FAC=(1D0/(32D0*PARU(1)*PARP(142)**2))*SHR
15794         DO 350 I=1,MDCY(KC,3)
15795           IDC=I+MDCY(KC,2)-1
15796           IF(MDME(IDC,1).LT.0) GOTO 350
15797           PM1=PMAS(PYCOMP(KFDP(IDC,1)),1)
15798           PM2=PMAS(PYCOMP(KFDP(IDC,2)),1)
15799           PM3=0D0
15800           IF(I.EQ.3) PM3=PMAS(PYCOMP(KFDP(IDC,3)),1)
15801           RM1=PM1**2/SH
15802           RM2=PM2**2/SH
15803           RM3=PM3**2/SH
15804           IF(SQRT(RM1)+SQRT(RM2)+SQRT(RM3).GT.1D0) GOTO 350
15805           WID2=1D0
15806 C...pi_tech -> f + f'.
15807           FCOF=1D0
15808           IF(IABS(KFDP(IDC,1)).LT.10) FCOF=3D0*RADC
15809 C...pi_tech+ -> W b b~
15810           IF(I.EQ.3.AND.SHR.LT.PMAS(6,1)+PMAS(5,1)) THEN
15811             FCOF=3D0*RADC
15812             XMT2=PMAS(6,1)**2/SH
15813             FACP=FAC/(4D0*PARU(1))*FCOF*XMT2*PARP(147)**2
15814             KFC3=PYCOMP(KFDP(IDC,3))
15815             CHECK = SQRT(RM1)+SQRT(RM2)+SQRT(RM3)
15816             CHECK = SQRT(RM1)
15817             T0 = (1D0-CHECK**2)*
15818      &      (XMT2*(6.*XMT2**2+3.*XMT2*RM1-4.*RM1**2)-
15819      &      (5.*XMT2**2+2.*XMT2*RM1-8.*RM1**2))/(4.*XMT2**2)
15820             T1 = (1D0-XMT2)*(RM1-XMT2)*((XMT2**2+XMT2*RM1+4.*RM1**2)
15821      &      -3.*XMT2**2*(XMT2+RM1))/(2.0*XMT2**3)
15822             T3 = RM1**2/XMT2**3*(3.0*XMT2-4.0*RM1+4.0*XMT2*RM1)
15823             WDTP(I)=FACP*(T0 + T1*LOG((XMT2-CHECK**2)/(XMT2-1D0))
15824      &      +T3*LOG(CHECK))
15825             IF(KFLR.GT.0) THEN
15826                WID2=WIDS(24,2)
15827             ELSE
15828                WID2=WIDS(24,3)
15829             ENDIF
15830           ELSE
15831             FCOF=1D0
15832             IKA=IABS(KFDP(IDC,1))
15833             IF(IKA.LT.10) FCOF=3D0*RADC
15834             HM1=PM1
15835             HM2=PM2
15836             IF(I.GE.1.AND.I.LE.3) THEN
15837               FCOF=FCOF*PARP(144+I)**2
15838               HM1=PYMRUN(KFDP(IDC,1),SH)
15839               HM2=PYMRUN(KFDP(IDC,2),SH)
15840             ELSEIF(I.EQ.6) THEN
15841               FCOF=FCOF*PARP(148)**2
15842             ENDIF
15843             WDTP(I)=FAC*FCOF*(HM1+HM2)**2*
15844      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
15845           ENDIF
15846           WDTP(0)=WDTP(0)+WDTP(I)
15847           IF(MDME(IDC,1).GT.0) THEN
15848             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15849             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15850             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15851             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15852           ENDIF
15853   350     CONTINUE
15854  
15855       ELSEIF(KFLA.EQ.54) THEN
15856 C...Techni-rho0:
15857         ALPRHT=2.91D0*(3D0/PARP(144))
15858         FAC=(ALPRHT/12D0)*SHR
15859         FACF=(1D0/6D0)*(AEM**2/ALPRHT)*SHR
15860         SQMZ=PMAS(23,1)**2
15861         SQMW=PMAS(24,1)**2
15862         SHP=SH
15863         CALL PYWIDX(23,SHP,WDTPP,WDTEP)
15864         GMMZ=SHR*WDTPP(0)
15865         XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
15866         BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
15867         BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
15868         DO 360 I=1,MDCY(KC,3)
15869           IDC=I+MDCY(KC,2)-1
15870           IF(MDME(IDC,1).LT.0) GOTO 360
15871           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15872           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15873           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 360
15874           WID2=1D0
15875           IF(I.EQ.1) THEN
15876 C...rho_tech0 -> W+ + W-.
15877             WDTP(I)=FAC*PARP(141)**4*
15878      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15879             WID2=WIDS(24,1)
15880           ELSEIF(I.EQ.2) THEN
15881 C...rho_tech0 -> W+ + pi_tech-.
15882             WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
15883      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3+
15884      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
15885      &      ((1D0-RM1-RM2)**2-4D0*RM1*RM2 + 6D0*SQMW/SH)*
15886      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(173)**2*SHR**3
15887             WID2=WIDS(24,2)*WIDS(52,3)
15888           ELSEIF(I.EQ.3) THEN
15889 C...rho_tech0 -> pi_tech+ + W-.
15890             WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
15891      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3+
15892      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
15893      &      ((1D0-RM1-RM2)**2-4D0*RM1*RM2 + 6D0*SQMW/SH)*
15894      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(173)**2*SHR**3
15895             WID2=WIDS(52,2)*WIDS(24,3)
15896           ELSEIF(I.EQ.4) THEN
15897 C...rho_tech0 -> pi_tech+ + pi_tech-.
15898             WDTP(I)=FAC*(1D0-PARP(141)**2)**2*
15899      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15900             WID2=WIDS(52,1)
15901           ELSEIF(I.EQ.5) THEN
15902 C...rho_tech0 -> gamma + pi_tech0
15903             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15904      &      (2D0*PARP(143)-1D0)**2*(1D0-PARP(141)**2)/24D0/PARJ(172)**2*
15905      &      SHR**3
15906             WID2=WIDS(51,2)
15907           ELSEIF(I.EQ.6) THEN
15908 C...rho_tech0 -> gamma + pi_tech0'
15909             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15910      &      (1D0-PARJ(174)**2)/24D0/PARJ(172)**2*SHR**3
15911             WID2=WIDS(53,2)
15912           ELSEIF(I.EQ.7) THEN
15913 C...rho_tech0 -> Z0 + pi_tech0
15914             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15915      &      (2D0*PARP(143)-1D0)**2*(1D0-PARP(141)**2)/24D0/PARJ(172)**2*
15916      &      XW/XW1*SHR**3
15917             WID2=WIDS(23,2)*WIDS(51,2)
15918           ELSEIF(I.EQ.8) THEN
15919 C...rho_tech0 -> Z0 + pi_tech0'
15920             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
15921      &      (1D0-PARJ(174)**2)/24D0/PARJ(172)**2*(1D0-2D0*XW)**2/4D0/
15922      &      XW/XW1*SHR**3
15923             WID2=WIDS(23,2)*WIDS(53,2)
15924           ELSE
15925 C...rho_tech0 -> f + fbar.
15926             WID2=1D0
15927             IF(I.LE.16) THEN
15928               IA=I-8
15929               FCOF=3D0*RADC
15930               IF(IA.GE.6.AND.IA.LE.8) WID2=WIDS(IA,1)
15931             ELSE
15932               IA=I-6
15933               FCOF=1D0
15934               IF(IA.GE.17) WID2=WIDS(IA,1)
15935             ENDIF
15936             EI=KCHG(IA,1)/3D0
15937             AI=SIGN(1D0,EI+0.1D0)
15938             VI=AI-4D0*EI*XWV
15939             VALI=0.5D0*(VI+AI)
15940             VARI=0.5D0*(VI-AI)
15941             WDTP(I)=FACF*FCOF*SQRT(MAX(0D0,1D0-4D0*RM1))*((1D0-RM1)*
15942      &      ((EI+VALI*BWZR)**2+(VALI*BWZI)**2+
15943      &      (EI+VARI*BWZR)**2+(VARI*BWZI)**2)+6D0*RM1*(
15944      &      (EI+VALI*BWZR)*(EI+VARI*BWZR)+VALI*VARI*BWZI**2))
15945           ENDIF
15946           WDTP(0)=WDTP(0)+WDTP(I)
15947           IF(MDME(IDC,1).GT.0) THEN
15948             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
15949             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
15950             WDTE(I,0)=WDTE(I,MDME(IDC,1))
15951             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
15952           ENDIF
15953   360   CONTINUE
15954  
15955       ELSEIF(KFLA.EQ.55) THEN
15956 C...Techni-rho+/-:
15957         ALPRHT=2.91D0*(3D0/PARP(144))
15958         FAC=(ALPRHT/12D0)*SHR
15959         SQMZ=PMAS(23,1)**2
15960         SQMW=PMAS(24,1)**2
15961         SHP=SH
15962         CALL PYWIDX(24,SHP,WDTPP,WDTEP)
15963         GMMW=SHR*WDTPP(0)
15964         FACF=(1D0/12D0)*(AEM**2/ALPRHT)*SHR*
15965      &  (0.125D0/XW**2)*SH**2/((SH-SQMW)**2+GMMW**2)
15966         DO 370 I=1,MDCY(KC,3)
15967           IDC=I+MDCY(KC,2)-1
15968           IF(MDME(IDC,1).LT.0) GOTO 370
15969           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
15970           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
15971           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 370
15972           WID2=1D0
15973           IF(I.EQ.1) THEN
15974 C...rho_tech+ -> W+ + Z0.
15975             WDTP(I)=FAC*PARP(141)**4*
15976      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
15977             IF(KFLR.GT.0) THEN
15978               WID2=WIDS(24,2)*WIDS(23,2)
15979             ELSE
15980               WID2=WIDS(24,3)*WIDS(23,2)
15981             ENDIF
15982           ELSEIF(I.EQ.2) THEN
15983 C...rho_tech+ -> W+ + pi_tech0.
15984             WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
15985      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3+
15986      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
15987      &      ((1D0-RM1-RM2)**2-4D0*RM1*RM2 + 6D0*SQMW/SH)*
15988      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(173)**2*SHR**3
15989             IF(KFLR.GT.0) THEN
15990               WID2=WIDS(24,2)*WIDS(51,2)
15991             ELSE
15992               WID2=WIDS(24,3)*WIDS(51,2)
15993             ENDIF
15994           ELSEIF(I.EQ.3) THEN
15995 C...rho_tech+ -> pi_tech+ + Z0.
15996             WDTP(I)=FAC*PARP(141)**2*(1D0-PARP(141)**2)*
15997      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3+
15998      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))*
15999      &      ((1D0-RM1-RM2)**2-4D0*RM1*RM2 + 6D0*SQMZ/SH)*
16000      &      (1D0-PARP(141)**2)/4D0/XW/XW1/24D0/PARJ(173)**2*SHR**3+
16001      &      AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16002      &      (2D0*PARP(143)-1D0)**2*(1D0-PARP(141)**2)/24D0/PARJ(172)**2*
16003      &      SHR**3*XW/XW1
16004             IF(KFLR.GT.0) THEN
16005               WID2=WIDS(52,2)*WIDS(23,2)
16006             ELSE
16007               WID2=WIDS(52,3)*WIDS(23,2)
16008             ENDIF
16009           ELSEIF(I.EQ.4) THEN
16010 C...rho_tech+ -> pi_tech+ + pi_tech0.
16011             WDTP(I)=FAC*(1D0-PARP(141)**2)**2*
16012      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16013             IF(KFLR.GT.0) THEN
16014               WID2=WIDS(52,2)*WIDS(51,2)
16015             ELSE
16016               WID2=WIDS(52,3)*WIDS(51,2)
16017             ENDIF
16018           ELSEIF(I.EQ.5) THEN
16019 C...rho_tech+ -> pi_tech+ + gamma
16020             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16021      &      (2D0*PARP(143)-1D0)**2*(1D0-PARP(141)**2)/24D0/PARJ(172)**2*
16022      &      SHR**3
16023             IF(KFLR.GT.0) THEN
16024               WID2=WIDS(52,2)
16025             ELSE
16026               WID2=WIDS(52,3)
16027             ENDIF
16028           ELSEIF(I.EQ.6) THEN
16029 C...rho_tech+ -> W+ + pi_tech0'
16030             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16031      &      (1D0-PARJ(174)**2)/4D0/XW/24D0/PARJ(172)**2*SHR**3
16032             IF(KFLR.GT.0) THEN
16033               WID2=WIDS(24,2)*WIDS(53,2)
16034             ELSE
16035               WID2=WIDS(24,3)*WIDS(53,2)
16036             ENDIF
16037           ELSE
16038 C...rho_tech+ -> f + fbar'.
16039             IA=I-6
16040             WID2=1D0
16041             IF(IA.LE.16) THEN
16042               FCOF=3D0*RADC*VCKM((IA-1)/4+1,MOD(IA-1,4)+1)
16043               IF(KFLR.GT.0) THEN
16044                 IF(MOD(IA,4).EQ.3) WID2=WIDS(6,2)
16045                 IF(MOD(IA,4).EQ.0) WID2=WIDS(8,2)
16046                 IF(IA.GE.13) WID2=WID2*WIDS(7,3)
16047               ELSE
16048                 IF(MOD(IA,4).EQ.3) WID2=WIDS(6,3)
16049                 IF(MOD(IA,4).EQ.0) WID2=WIDS(8,3)
16050                 IF(IA.GE.13) WID2=WID2*WIDS(7,2)
16051               ENDIF
16052             ELSE
16053               FCOF=1D0
16054               IF(KFLR.GT.0) THEN
16055                 IF(IA.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
16056               ELSE
16057                 IF(IA.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
16058               ENDIF
16059             ENDIF
16060             WDTP(I)=FACF*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
16061      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16062           ENDIF
16063           WDTP(0)=WDTP(0)+WDTP(I)
16064           IF(MDME(IDC,1).GT.0) THEN
16065             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16066             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16067             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16068             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16069           ENDIF
16070   370   CONTINUE
16071  
16072       ELSEIF(KFLA.EQ.56) THEN
16073 C...Techni-omega:
16074         ALPRHT=2.91D0*(3D0/PARP(144))
16075         FAC=(ALPRHT/12D0)*SHR
16076         FACF=(1D0/6D0)*(AEM**2/ALPRHT)*SHR*(2D0*PARP(143)-1D0)**2
16077         SQMZ=PMAS(23,1)**2
16078         SHP=SH
16079         CALL PYWIDX(23,SHP,WDTPP,WDTEP)
16080         GMMZ=SHR*WDTPP(0)
16081         BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
16082         BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
16083         DO 380 I=1,MDCY(KC,3)
16084           IDC=I+MDCY(KC,2)-1
16085           IF(MDME(IDC,1).LT.0) GOTO 380
16086           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16087           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16088           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 380
16089           WID2=1D0
16090           IF(I.EQ.1) THEN
16091 C...omega_tech0 -> gamma + pi_tech0.
16092             WDTP(I)=AEM/24D0/PARJ(172)**2*(1D0-PARP(141)**2)*
16093      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*SHR**3
16094             WID2=WIDS(51,2)
16095           ELSEIF(I.EQ.2) THEN
16096 C...omega_tech0 -> Z0 + pi_tech0 
16097             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16098      &      (1D0-PARP(141)**2)/24D0/PARJ(172)**2*(1D0-2D0*XW)**2/4D0/
16099      &      XW/XW1*SHR**3
16100             WID2=WIDS(23,2)*WIDS(51,2)
16101           ELSEIF(I.EQ.3) THEN
16102 C...omega_tech0 -> gamma + pi_tech0'
16103             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16104      &      (2D0*PARP(143)-1D0)**2*(1D0-PARJ(174)**2)/24D0/PARJ(172)**2*
16105      &      SHR**3
16106             WID2=WIDS(53,2)
16107           ELSEIF(I.EQ.4) THEN
16108 C...omega_tech0 -> Z0 + pi_tech0'
16109             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16110      &      (2D0*PARP(143)-1D0)**2*(1D0-PARJ(174)**2)/24D0/PARJ(172)**2*
16111      &      XW/XW1*SHR**3
16112             WID2=WIDS(23,2)*WIDS(51,2)
16113           ELSEIF(I.EQ.5) THEN
16114 C...omega_tech0 -> W+ + pi_tech-
16115             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16116      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(172)**2*SHR**3+
16117      &      FAC*PARP(141)**2*(1D0-PARP(141)**2)*PARJ(175)**2*
16118      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16119             WID2=WIDS(24,2)*WIDS(52,3)
16120           ELSEIF(I.EQ.6) THEN
16121 C...omega_tech0 -> pi_tech+ + W-
16122             WDTP(I)=AEM*SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3*
16123      &      (1D0-PARP(141)**2)/4D0/XW/24D0/PARJ(172)**2*SHR**3+
16124      &      FAC*PARP(141)**2*(1D0-PARP(141)**2)*PARJ(175)**2*
16125      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16126             WID2=WIDS(24,3)*WIDS(52,2)
16127           ELSEIF(I.EQ.7) THEN
16128 C...omega_tech0 -> W+ + W-.
16129             WDTP(I)=FAC*PARP(141)**4*PARJ(175)**2*
16130      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16131             WID2=WIDS(24,1)
16132           ELSEIF(I.EQ.8) THEN
16133 C...omega_tech0 -> pi_tech+ + pi_tech-.
16134             WDTP(I)=FAC*(1D0-PARP(141)**2)**2*PARJ(175)**2*
16135      &      SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))**3
16136             WID2=WIDS(52,1)
16137           ELSE
16138 C...omega_tech0 -> f + fbar.
16139             WID2=1D0
16140             IF(I.LE.14) THEN
16141               IA=I-8
16142               FCOF=3D0*RADC
16143               IF(IA.GE.6.AND.IA.LE.8) WID2=WIDS(IA,1)
16144             ELSE
16145               IA=I-6
16146               FCOF=1D0
16147               IF(IA.GE.17) WID2=WIDS(IA,1)
16148             ENDIF
16149             EI=KCHG(IA,1)/3D0
16150             AI=SIGN(1D0,EI+0.1D0)
16151             VI=AI-4D0*EI*XWV
16152             VALI=0.5D0*(VI+AI)
16153             VARI=0.5D0*(VI-AI)
16154             WDTP(I)=FACF*FCOF*SQRT(MAX(0D0,1D0-4D0*RM1))*((1D0-RM1)*
16155      &      ((EI+VALI*BWZR)**2+(VALI*BWZI)**2+
16156      &      (EI+VARI*BWZR)**2+(VARI*BWZI)**2)+6D0*RM1*(
16157      &      (EI+VALI*BWZR)*(EI+VARI*BWZR)+VALI*VARI*BWZI**2))
16158           ENDIF
16159           WDTP(0)=WDTP(0)+WDTP(I)
16160           IF(MDME(IDC,1).GT.0) THEN
16161             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16162             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16163             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16164             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16165           ENDIF
16166   380   CONTINUE
16167  
16168       ELSEIF(KFLA.EQ.61) THEN
16169 C...H_L++/--:
16170         FAC=(1D0/(8D0*PARU(1)))*SHR
16171         DO 372 I=1,MDCY(KC,3)
16172           IDC=I+MDCY(KC,2)-1
16173           IF(MDME(IDC,1).LT.0) GOTO 372
16174           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16175           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16176           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 372
16177           WID2=1D0
16178           IF(I.LE.6) THEN
16179 C...H_L++/-- -> l+/- + l'+/-
16180             FCOF=PARP(180+3*((IABS(KFDP(IDC,1))-11)/2)+
16181      &      (IABS(KFDP(IDC,2))-9)/2)**2
16182 C***Should be factor 4 below ???
16183             IF(KFDP(IDC,1).NE.KFDP(IDC,2)) FCOF=2D0*FCOF 
16184           ELSEIF(I.EQ.7) THEN
16185 C...H_L++/-- -> W_L+/- + W_L+/-
16186             FCOF=0.5D0*PARP(190)**4*PARP(192)**2/PMAS(24,1)**2*
16187      &      (3D0*RM1+0.25D0/RM1-1D0)
16188             WID2=WIDS(24,4+(1-KFLS)/2)
16189           ENDIF
16190           WDTP(I)=FAC*FCOF*
16191      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16192           WDTP(0)=WDTP(0)+WDTP(I)
16193           IF(MDME(IDC,1).GT.0) THEN
16194             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16195             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16196             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16197             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16198           ENDIF
16199   372   CONTINUE
16200 
16201       ELSEIF(KFLA.EQ.62) THEN
16202 C...H_R++/--:
16203         FAC=(1D0/(8D0*PARU(1)))*SHR
16204         DO 373 I=1,MDCY(KC,3)
16205           IDC=I+MDCY(KC,2)-1
16206           IF(MDME(IDC,1).LT.0) GOTO 373
16207           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16208           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16209           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 373
16210           WID2=1D0
16211           IF(I.LE.6) THEN
16212 C...H_R++/-- -> l+/- + l'+/-
16213             FCOF=PARP(180+3*((IABS(KFDP(IDC,1))-11)/2)+
16214      &      (IABS(KFDP(IDC,2))-9)/2)**2
16215             IF(KFDP(IDC,1).NE.KFDP(IDC,2)) FCOF=2D0*FCOF
16216           ELSEIF(I.EQ.7) THEN
16217 C...H_R++/-- -> W_R+/- + W_R+/-
16218             FCOF=PARP(191)**2*(3D0*RM1+0.25D0/RM1-1D0)
16219             WID2=WIDS(63,4+(1-KFLS)/2)
16220           ENDIF
16221           WDTP(I)=FAC*FCOF*
16222      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16223           WDTP(0)=WDTP(0)+WDTP(I)
16224           IF(MDME(IDC,1).GT.0) THEN
16225             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16226             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16227             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16228             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16229           ENDIF
16230  373   CONTINUE
16231 
16232       ELSEIF(KFLA.EQ.63) THEN
16233 C...W_R+/-:
16234         FAC=(AEM/(24D0*XW))*SHR
16235         DO 374 I=1,MDCY(KC,3)
16236           IDC=I+MDCY(KC,2)-1
16237           IF(MDME(IDC,1).LT.0) GOTO 374
16238           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16239           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16240           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 374
16241           WID2=1D0
16242           IF(I.LE.9) THEN
16243 C...W_R+/- -> q + qbar'
16244             FCOF=3D0*RADC*VCKM((I-1)/3+1,MOD(I-1,3)+1)
16245             IF(KFLR.GT.0) THEN
16246               IF(MOD(I,3).EQ.0) WID2=WIDS(6,2)
16247             ELSE
16248               IF(MOD(I,3).EQ.0) WID2=WIDS(6,3)
16249             ENDIF
16250           ELSEIF(I.LE.12) THEN
16251 C...W_R+/- -> l+/- + nu_R
16252             FCOF=1D0
16253           ENDIF
16254           WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
16255      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16256           WDTP(0)=WDTP(0)+WDTP(I)
16257           IF(MDME(IDC,1).GT.0) THEN
16258             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16259             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16260             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16261             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16262           ENDIF
16263  374   CONTINUE
16264  
16265       ELSEIF(KFLA.EQ.KEXCIT+1) THEN
16266 C...d* excited quark.
16267         FAC=(SH/PARU(155)**2)*SHR
16268         DO 390 I=1,MDCY(KC,3)
16269           IDC=I+MDCY(KC,2)-1
16270           IF(MDME(IDC,1).LT.0) GOTO 390
16271           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16272           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16273           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 390
16274           WID2=1D0
16275           IF(I.EQ.1) THEN
16276 C...d* -> g + d.
16277             WDTP(I)=FAC*AS*PARU(159)**2/3D0
16278             WID2=1D0
16279           ELSEIF(I.EQ.2) THEN
16280 C...d* -> gamma + d.
16281             QF=-PARU(157)/2D0+PARU(158)/6D0
16282             WDTP(I)=FAC*AEM*QF**2/4D0
16283             WID2=1D0
16284           ELSEIF(I.EQ.3) THEN
16285 C...d* -> Z0 + d.
16286             QF=-PARU(157)*XW1/2D0-PARU(158)*XW/6D0
16287             WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
16288      &      (1D0-RM1)**2*(2D0+RM1)
16289             WID2=WIDS(23,2)
16290           ELSEIF(I.EQ.4) THEN
16291 C...d* -> W- + u.
16292             WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
16293      &      (1D0-RM1)**2*(2D0+RM1)
16294             IF(KFLR.GT.0) WID2=WIDS(24,3)
16295             IF(KFLR.LT.0) WID2=WIDS(24,2)
16296           ENDIF
16297           WDTP(0)=WDTP(0)+WDTP(I)
16298           IF(MDME(IDC,1).GT.0) THEN
16299             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16300             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16301             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16302             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16303           ENDIF
16304   390   CONTINUE
16305  
16306       ELSEIF(KFLA.EQ.KEXCIT+2) THEN
16307 C...u* excited quark.
16308         FAC=(SH/PARU(155)**2)*SHR
16309         DO 400 I=1,MDCY(KC,3)
16310           IDC=I+MDCY(KC,2)-1
16311           IF(MDME(IDC,1).LT.0) GOTO 400
16312           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16313           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16314           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 400
16315           WID2=1D0
16316           IF(I.EQ.1) THEN
16317 C...u* -> g + u.
16318             WDTP(I)=FAC*AS*PARU(159)**2/3D0
16319             WID2=1D0
16320           ELSEIF(I.EQ.2) THEN
16321 C...u* -> gamma + u.
16322             QF=PARU(157)/2D0+PARU(158)/6D0
16323             WDTP(I)=FAC*AEM*QF**2/4D0
16324             WID2=1D0
16325           ELSEIF(I.EQ.3) THEN
16326 C...u* -> Z0 + u.
16327             QF=PARU(157)*XW1/2D0-PARU(158)*XW/6D0
16328             WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
16329      &      (1D0-RM1)**2*(2D0+RM1)
16330             WID2=WIDS(23,2)
16331           ELSEIF(I.EQ.4) THEN
16332 C...u* -> W+ + d.
16333             WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
16334      &      (1D0-RM1)**2*(2D0+RM1)
16335             IF(KFLR.GT.0) WID2=WIDS(24,2)
16336             IF(KFLR.LT.0) WID2=WIDS(24,3)
16337           ENDIF
16338           WDTP(0)=WDTP(0)+WDTP(I)
16339           IF(MDME(IDC,1).GT.0) THEN
16340             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16341             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16342             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16343             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16344           ENDIF
16345   400   CONTINUE
16346  
16347       ELSEIF(KFLA.EQ.KEXCIT+11) THEN
16348 C...e* excited lepton.
16349         FAC=(SH/PARU(155)**2)*SHR
16350         DO 410 I=1,MDCY(KC,3)
16351           IDC=I+MDCY(KC,2)-1
16352           IF(MDME(IDC,1).LT.0) GOTO 410
16353           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16354           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16355           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 410
16356           WID2=1D0
16357           IF(I.EQ.1) THEN
16358 C...e* -> gamma + e.
16359             QF=-PARU(157)/2D0-PARU(158)/2D0
16360             WDTP(I)=FAC*AEM*QF**2/4D0
16361             WID2=1D0
16362           ELSEIF(I.EQ.2) THEN
16363 C...e* -> Z0 + e.
16364             QF=-PARU(157)*XW1/2D0+PARU(158)*XW/2D0
16365             WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
16366      &      (1D0-RM1)**2*(2D0+RM1)
16367             WID2=WIDS(23,2)
16368           ELSEIF(I.EQ.3) THEN
16369 C...e* -> W- + nu.
16370             WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
16371      &      (1D0-RM1)**2*(2D0+RM1)
16372             IF(KFLR.GT.0) WID2=WIDS(24,3)
16373             IF(KFLR.LT.0) WID2=WIDS(24,2)
16374           ENDIF
16375           WDTP(0)=WDTP(0)+WDTP(I)
16376           IF(MDME(IDC,1).GT.0) THEN
16377             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16378             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16379             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16380             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16381           ENDIF
16382   410   CONTINUE
16383  
16384       ELSEIF(KFLA.EQ.KEXCIT+12) THEN
16385 C...nu*_e excited neutrino.
16386         FAC=(SH/PARU(155)**2)*SHR
16387         DO 420 I=1,MDCY(KC,3)
16388           IDC=I+MDCY(KC,2)-1
16389           IF(MDME(IDC,1).LT.0) GOTO 420
16390           RM1=PMAS(PYCOMP(KFDP(IDC,1)),1)**2/SH
16391           RM2=PMAS(PYCOMP(KFDP(IDC,2)),1)**2/SH
16392           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 420
16393           WID2=1D0
16394           IF(I.EQ.1) THEN
16395 C...nu*_e -> Z0 + nu*_e.
16396             QF=PARU(157)*XW1/2D0+PARU(158)*XW/2D0
16397             WDTP(I)=FAC*AEM*QF**2/(8D0*XW*XW1)*
16398      &      (1D0-RM1)**2*(2D0+RM1)
16399             WID2=WIDS(23,2)
16400           ELSEIF(I.EQ.2) THEN
16401 C...nu*_e -> W+ + e.
16402             WDTP(I)=FAC*AEM*PARU(157)**2/(16D0*XW)*
16403      &      (1D0-RM1)**2*(2D0+RM1)
16404             IF(KFLR.GT.0) WID2=WIDS(24,2)
16405             IF(KFLR.LT.0) WID2=WIDS(24,3)
16406           ENDIF
16407           WDTP(0)=WDTP(0)+WDTP(I)
16408           IF(MDME(IDC,1).GT.0) THEN
16409             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16410             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16411             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16412             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16413           ENDIF
16414   420   CONTINUE
16415  
16416       ENDIF
16417       MINT(61)=0
16418       MINT(62)=0
16419       MINT(63)=0
16420  
16421       RETURN
16422       END
16423  
16424 C***********************************************************************
16425 
16426 C...PYWIDX
16427 C...Calculates full and partial widths of resonances.
16428 C....copy of PYWIDT, used for techniparticle widths
16429  
16430       SUBROUTINE PYWIDX(KFLR,SH,WDTP,WDTE)
16431  
16432 C...Double precision and integer declarations.
16433       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
16434       IMPLICIT INTEGER(I-N)
16435       INTEGER PYK,PYCHGE,PYCOMP
16436 C...Parameter statement to help give large particle numbers.
16437       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
16438 C...Commonblocks.
16439       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
16440       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
16441       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
16442       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
16443       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
16444       COMMON/PYINT1/MINT(400),VINT(400)
16445       COMMON/PYINT4/MWID(500),WIDS(500,5)
16446       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
16447       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
16448      &SFMIX(16,4)
16449       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
16450      &/PYINT4/,/PYMSSM/,/PYSSMT/
16451 C...Local arrays and saved variables.
16452       DIMENSION WDTP(0:200),WDTE(0:200,0:5),MOFSV(3,2),WIDWSV(3,2),
16453      &WID2SV(3,2)
16454       SAVE MOFSV,WIDWSV,WID2SV
16455       DATA MOFSV/6*0/,WIDWSV/6*0D0/,WID2SV/6*0D0/
16456  
16457 C...Compressed code and sign; mass.
16458       KFLA=IABS(KFLR)
16459       KFLS=ISIGN(1,KFLR)
16460       KC=PYCOMP(KFLA)
16461       SHR=SQRT(SH)
16462       PMR=PMAS(KC,1)
16463  
16464 C...Reset width information.
16465       DO 110 I=0,200
16466         WDTP(I)=0D0
16467         DO 100 J=0,5
16468           WDTE(I,J)=0D0
16469   100   CONTINUE
16470   110 CONTINUE
16471   
16472 C...Common electroweak and strong constants.
16473       XW=PARU(102)
16474       XWV=XW
16475       IF(MSTP(8).GE.2) XW=1D0-(PMAS(24,1)/PMAS(23,1))**2
16476       XW1=1D0-XW
16477       AEM=PYALEM(SH)
16478       IF(MSTP(8).GE.1) AEM=SQRT(2D0)*PARU(105)*PMAS(24,1)**2*XW/PARU(1)
16479       AS=PYALPS(SH)
16480       RADC=1D0+AS/PARU(1)
16481   
16482       IF(KFLA.EQ.23) THEN
16483 C...Z0:
16484         ICASE=1
16485         XWC=1D0/(16D0*XW*XW1)
16486         FAC=(AEM*XWC/3D0)*SHR
16487   200   CONTINUE
16488         DO 210 I=1,MDCY(KC,3)
16489           IDC=I+MDCY(KC,2)-1
16490           IF(MDME(IDC,1).LT.0) GOTO 210
16491           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16492           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16493           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 210
16494           WID2=1D0
16495           IF(I.LE.8) THEN
16496 C...Z0 -> q + qbar
16497             EF=KCHG(I,1)/3D0
16498             AF=SIGN(1D0,EF+0.1D0)
16499             VF=AF-4D0*EF*XWV
16500             FCOF=3D0*RADC
16501             IF(I.GE.6.AND.MSTP(35).GE.1) FCOF=FCOF*PYHFTH(SH,SH*RM1,1D0)
16502             IF(I.EQ.6) WID2=WIDS(6,1)
16503             IF((I.EQ.7.OR.I.EQ.8)) WID2=WIDS(I,1)
16504           ELSEIF(I.LE.16) THEN
16505 C...Z0 -> l+ + l-, nu + nubar
16506             EF=KCHG(I+2,1)/3D0
16507             AF=SIGN(1D0,EF+0.1D0)
16508             VF=AF-4D0*EF*XWV
16509             FCOF=1D0
16510             IF((I.EQ.15.OR.I.EQ.16)) WID2=WIDS(2+I,1)
16511           ENDIF
16512           BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
16513             WDTP(I)=FAC*FCOF*(VF**2*(1D0+2D0*RM1)+AF**2*(1D0-4D0*RM1))*
16514      &      BE34
16515             WDTP(0)=WDTP(0)+WDTP(I)
16516           IF(MDME(IDC,1).GT.0) THEN
16517               WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16518               WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+
16519      &        WDTE(I,MDME(IDC,1))
16520               WDTE(I,0)=WDTE(I,MDME(IDC,1))
16521               WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16522           ENDIF
16523   210   CONTINUE
16524 
16525  
16526       ELSEIF(KFLA.EQ.24) THEN
16527 C...W+/-:
16528         FAC=(AEM/(24D0*XW))*SHR
16529         DO 220 I=1,MDCY(KC,3)
16530           IDC=I+MDCY(KC,2)-1
16531           IF(MDME(IDC,1).LT.0) GOTO 220
16532           RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SH
16533           RM2=PMAS(IABS(KFDP(IDC,2)),1)**2/SH
16534           IF(SQRT(RM1)+SQRT(RM2).GT.1D0) GOTO 220
16535           WID2=1D0
16536           IF(I.LE.16) THEN
16537 C...W+/- -> q + qbar'
16538             FCOF=3D0*RADC*VCKM((I-1)/4+1,MOD(I-1,4)+1)
16539             IF(KFLR.GT.0) THEN
16540               IF(MOD(I,4).EQ.3) WID2=WIDS(6,2)
16541               IF(MOD(I,4).EQ.0) WID2=WIDS(8,2)
16542               IF(I.GE.13) WID2=WID2*WIDS(7,3)
16543             ELSE
16544               IF(MOD(I,4).EQ.3) WID2=WIDS(6,3)
16545               IF(MOD(I,4).EQ.0) WID2=WIDS(8,3)
16546               IF(I.GE.13) WID2=WID2*WIDS(7,2)
16547             ENDIF
16548           ELSEIF(I.LE.20) THEN
16549 C...W+/- -> l+/- + nu
16550             FCOF=1D0
16551             IF(KFLR.GT.0) THEN
16552               IF(I.EQ.20) WID2=WIDS(17,3)*WIDS(18,2)
16553             ELSE
16554               IF(I.EQ.20) WID2=WIDS(17,2)*WIDS(18,3)
16555             ENDIF
16556           ENDIF
16557           WDTP(I)=FAC*FCOF*(2D0-RM1-RM2-(RM1-RM2)**2)*
16558      &    SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16559           WDTP(0)=WDTP(0)+WDTP(I)
16560           IF(MDME(IDC,1).GT.0) THEN
16561             WDTE(I,MDME(IDC,1))=WDTP(I)*WID2
16562             WDTE(0,MDME(IDC,1))=WDTE(0,MDME(IDC,1))+WDTE(I,MDME(IDC,1))
16563             WDTE(I,0)=WDTE(I,MDME(IDC,1))
16564             WDTE(0,0)=WDTE(0,0)+WDTE(I,0)
16565           ENDIF
16566   220   CONTINUE 
16567       ENDIF
16568  
16569       RETURN
16570       END
16571  
16572 C***********************************************************************
16573  
16574 C...PYOFSH
16575 C...Calculates partial width and differential cross-section maxima
16576 C...of channels/processes not allowed on mass-shell, and selects
16577 C...masses in such channels/processes.
16578  
16579       SUBROUTINE PYOFSH(MOFSH,KFMO,KFD1,KFD2,PMMO,RET1,RET2)
16580  
16581 C...Double precision and integer declarations.
16582       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
16583       IMPLICIT INTEGER(I-N)
16584       INTEGER PYK,PYCHGE,PYCOMP
16585 C...Commonblocks.
16586       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
16587       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
16588       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
16589       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
16590       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
16591       COMMON/PYINT1/MINT(400),VINT(400)
16592       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
16593       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
16594       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,/PYINT1/,
16595      &/PYINT2/,/PYINT5/
16596 C...Local arrays.
16597       DIMENSION KFD(2),MBW(2),PMD(2),PGD(2),PMG(2),PML(2),PMU(2),
16598      &PMH(2),ATL(2),ATU(2),ATH(2),RMG(2),INX1(100),XPT1(100),
16599      &FPT1(100),INX2(100),XPT2(100),FPT2(100),WDTP(0:200),
16600      &WDTE(0:200,0:5)
16601  
16602 C...Find if particles equal, maximum mass, matrix elements, etc.
16603       MINT(51)=0
16604       ISUB=MINT(1)
16605       KFD(1)=IABS(KFD1)
16606       KFD(2)=IABS(KFD2)
16607       MEQL=0
16608       IF(KFD(1).EQ.KFD(2)) MEQL=1
16609       MLM=0
16610       IF(MOFSH.GE.2.AND.MEQL.EQ.1) MLM=INT(1.5D0+PYR(0))
16611       IF(MOFSH.LE.2.OR.MOFSH.EQ.5) THEN
16612         NOFF=44
16613         PMMX=PMMO
16614       ELSE
16615         NOFF=40
16616         PMMX=VINT(1)
16617         IF(CKIN(2).GT.CKIN(1)) PMMX=MIN(CKIN(2),VINT(1))
16618       ENDIF
16619       MMED=0
16620       IF((KFMO.EQ.25.OR.KFMO.EQ.35.OR.KFMO.EQ.36).AND.MEQL.EQ.1.AND.
16621      &(KFD(1).EQ.23.OR.KFD(1).EQ.24)) MMED=1
16622       IF((KFMO.EQ.32.OR.IABS(KFMO).EQ.34).AND.(KFD(1).EQ.23.OR.
16623      &KFD(1).EQ.24).AND.(KFD(2).EQ.23.OR.KFD(2).EQ.24)) MMED=2
16624       IF((KFMO.EQ.32.OR.IABS(KFMO).EQ.34).AND.(KFD(2).EQ.25.OR.
16625      &KFD(2).EQ.35.OR.KFD(2).EQ.36)) MMED=3
16626       LOOP=1
16627  
16628 C...Find where Breit-Wigners are required, else select discrete masses.
16629   100 DO 110 I=1,2
16630         KFCA=PYCOMP(KFD(I))
16631         IF(KFCA.GT.0) THEN
16632           PMD(I)=PMAS(KFCA,1)
16633           PGD(I)=PMAS(KFCA,2)
16634         ELSE
16635           PMD(I)=0D0
16636           PGD(I)=0D0
16637         ENDIF
16638         IF(MSTP(42).LE.0.OR.PGD(I).LT.PARP(41)) THEN
16639           MBW(I)=0
16640           PMG(I)=PMD(I)
16641           RMG(I)=(PMG(I)/PMMX)**2
16642         ELSE
16643           MBW(I)=1
16644         ENDIF
16645   110 CONTINUE
16646  
16647 C...Find allowed mass range and Breit-Wigner parameters.
16648       DO 120 I=1,2
16649         IF(MOFSH.EQ.1.AND.LOOP.EQ.1.AND.MBW(I).EQ.1) THEN
16650           PML(I)=PARP(42)
16651           PMU(I)=PMMX-PARP(42)
16652           IF(MBW(3-I).EQ.0) PMU(I)=MIN(PMU(I),PMMX-PMD(3-I))
16653           IF(PMU(I).LT.PML(I)+PARJ(64)) MBW(I)=-1
16654         ELSEIF(MBW(I).EQ.1.AND.MOFSH.NE.5) THEN
16655           ILM=I
16656           IF(MLM.EQ.2) ILM=3-I
16657           PML(I)=MAX(CKIN(NOFF+2*ILM-1),PARP(42))
16658           IF(MBW(3-I).EQ.0) THEN
16659             PMU(I)=PMMX-PMD(3-I)
16660           ELSE
16661             PMU(I)=PMMX-MAX(CKIN(NOFF+5-2*ILM),PARP(42))
16662           ENDIF  
16663           IF(CKIN(NOFF+2*ILM).GT.CKIN(NOFF+2*ILM-1)) PMU(I)=
16664      &    MIN(PMU(I),CKIN(NOFF+2*ILM))
16665           IF(I.EQ.MLM) PMU(I)=MIN(PMU(I),0.5D0*PMMX)
16666           IF(MEQL.EQ.0) PMH(I)=MIN(PMU(I),0.5D0*PMMX)
16667           IF(PMU(I).LT.PML(I)+PARJ(64)) MBW(I)=-1
16668           IF(MBW(I).EQ.1) THEN
16669             ATL(I)=ATAN((PML(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
16670             ATU(I)=ATAN((PMU(I)**2-PMD(I)**2)/(PMD(I)*PGD(I)))
16671             IF(MEQL.EQ.0) ATH(I)=ATAN((PMH(I)**2-PMD(I)**2)/(PMD(I)*
16672      &      PGD(I)))
16673           ENDIF
16674         ELSEIF(MBW(I).EQ.1.AND.MOFSH.EQ.5) THEN
16675           ILM=I
16676           IF(MLM.EQ.2) ILM=3-I
16677           PML(I)=MAX(CKIN(48+I),PARP(42))
16678           PMU(I)=PMMX-MAX(CKIN(51-I),PARP(42))
16679           IF(MBW(3-I).EQ.0) PMU(I)=MIN(PMU(I),PMMX-PMD(3-I))
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         ENDIF
16690   120 CONTINUE
16691       IF(MBW(1).LT.0.OR.MBW(2).LT.0.OR.(MBW(1).EQ.0.AND.MBW(2).EQ.0))
16692      &THEN
16693         CALL PYERRM(3,'(PYOFSH:) no allowed decay product masses')
16694         MINT(51)=1
16695         RETURN
16696       ENDIF
16697  
16698 C...Calculation of partial width of resonance.
16699       IF(MOFSH.EQ.1) THEN
16700  
16701 C..If only one integration, pick that to be the inner.
16702         IF(MBW(1).EQ.0) THEN
16703           PM2=PMD(1)
16704           PMD(1)=PMD(2)
16705           PGD(1)=PGD(2)
16706           PML(1)=PML(2)
16707           PMU(1)=PMU(2)
16708         ELSEIF(MBW(2).EQ.0) THEN
16709           PM2=PMD(2)
16710         ENDIF
16711  
16712 C...Start outer loop of integration.
16713         IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
16714           ATL2=ATAN((PML(2)**2-PMD(2)**2)/(PMD(2)*PGD(2)))
16715           ATU2=ATAN((PMU(2)**2-PMD(2)**2)/(PMD(2)*PGD(2)))
16716           NPT2=1
16717           XPT2(1)=1D0
16718           INX2(1)=0
16719           FMAX2=0D0
16720         ENDIF
16721   130   IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
16722           PM2S=PMD(2)**2+PMD(2)*PGD(2)*TAN(ATL2+XPT2(NPT2)*(ATU2-ATL2))
16723           PM2=MIN(PMU(2),MAX(PML(2),SQRT(MAX(0D0,PM2S))))
16724         ENDIF
16725         RM2=(PM2/PMMX)**2
16726  
16727 C...Start inner loop of integration.
16728         PML1=PML(1)
16729         PMU1=MIN(PMU(1),PMMX-PM2)
16730         IF(MEQL.EQ.1) PMU1=MIN(PMU1,PM2)
16731         ATL1=ATAN((PML1**2-PMD(1)**2)/(PMD(1)*PGD(1)))
16732         ATU1=ATAN((PMU1**2-PMD(1)**2)/(PMD(1)*PGD(1)))
16733         IF(PML1+PARJ(64).GE.PMU1.OR.ATL1+1D-7.GE.ATU1) THEN
16734           FUNC2=0D0
16735           GOTO 180
16736         ENDIF
16737         NPT1=1
16738         XPT1(1)=1D0
16739         INX1(1)=0
16740         FMAX1=0D0
16741   140   PM1S=PMD(1)**2+PMD(1)*PGD(1)*TAN(ATL1+XPT1(NPT1)*(ATU1-ATL1))
16742         PM1=MIN(PMU1,MAX(PML1,SQRT(MAX(0D0,PM1S))))
16743         RM1=(PM1/PMMX)**2
16744  
16745 C...Evaluate function value - inner loop.
16746         FUNC1=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
16747         IF(MMED.EQ.1) FUNC1=FUNC1*((1D0-RM1-RM2)**2+8D0*RM1*RM2)
16748         IF(MMED.EQ.2) FUNC1=FUNC1**3*(1D0+10D0*RM1+10D0*RM2+RM1**2+
16749      &  RM2**2+10D0*RM1*RM2)
16750         IF(FUNC1.GT.FMAX1) FMAX1=FUNC1
16751         FPT1(NPT1)=FUNC1
16752  
16753 C...Go to next position in inner loop.
16754         IF(NPT1.EQ.1) THEN
16755           NPT1=NPT1+1
16756           XPT1(NPT1)=0D0
16757           INX1(NPT1)=1
16758           GOTO 140
16759         ELSEIF(NPT1.LE.8) THEN
16760           NPT1=NPT1+1
16761           IF(NPT1.LE.4.OR.NPT1.EQ.6) ISH1=1
16762           ISH1=ISH1+1
16763           XPT1(NPT1)=0.5D0*(XPT1(ISH1)+XPT1(INX1(ISH1)))
16764           INX1(NPT1)=INX1(ISH1)
16765           INX1(ISH1)=NPT1
16766           GOTO 140
16767         ELSEIF(NPT1.LT.100) THEN
16768           ISN1=ISH1
16769   150     ISH1=ISH1+1
16770           IF(ISH1.GT.NPT1) ISH1=2
16771           IF(ISH1.EQ.ISN1) GOTO 160
16772           DFPT1=ABS(FPT1(ISH1)-FPT1(INX1(ISH1)))
16773           IF(DFPT1.LT.PARP(43)*FMAX1) GOTO 150
16774           NPT1=NPT1+1
16775           XPT1(NPT1)=0.5D0*(XPT1(ISH1)+XPT1(INX1(ISH1)))
16776           INX1(NPT1)=INX1(ISH1)
16777           INX1(ISH1)=NPT1
16778           GOTO 140
16779         ENDIF
16780  
16781 C...Calculate integral over inner loop.
16782   160   FSUM1=0D0
16783         DO 170 IPT1=2,NPT1
16784           FSUM1=FSUM1+0.5D0*(FPT1(IPT1)+FPT1(INX1(IPT1)))*
16785      &    (XPT1(INX1(IPT1))-XPT1(IPT1))
16786   170   CONTINUE
16787         FUNC2=FSUM1*(ATU1-ATL1)/PARU(1)
16788   180   IF(MBW(1).EQ.1.AND.MBW(2).EQ.1) THEN
16789           IF(FUNC2.GT.FMAX2) FMAX2=FUNC2
16790           FPT2(NPT2)=FUNC2
16791  
16792 C...Go to next position in outer loop.
16793           IF(NPT2.EQ.1) THEN
16794             NPT2=NPT2+1
16795             XPT2(NPT2)=0D0
16796             INX2(NPT2)=1
16797             GOTO 130
16798           ELSEIF(NPT2.LE.8) THEN
16799             NPT2=NPT2+1
16800             IF(NPT2.LE.4.OR.NPT2.EQ.6) ISH2=1
16801             ISH2=ISH2+1
16802             XPT2(NPT2)=0.5D0*(XPT2(ISH2)+XPT2(INX2(ISH2)))
16803             INX2(NPT2)=INX2(ISH2)
16804             INX2(ISH2)=NPT2
16805             GOTO 130
16806           ELSEIF(NPT2.LT.100) THEN
16807             ISN2=ISH2
16808   190       ISH2=ISH2+1
16809             IF(ISH2.GT.NPT2) ISH2=2
16810             IF(ISH2.EQ.ISN2) GOTO 200
16811             DFPT2=ABS(FPT2(ISH2)-FPT2(INX2(ISH2)))
16812             IF(DFPT2.LT.PARP(43)*FMAX2) GOTO 190
16813             NPT2=NPT2+1
16814             XPT2(NPT2)=0.5D0*(XPT2(ISH2)+XPT2(INX2(ISH2)))
16815             INX2(NPT2)=INX2(ISH2)
16816             INX2(ISH2)=NPT2
16817             GOTO 130
16818           ENDIF
16819  
16820 C...Calculate integral over outer loop.
16821   200     FSUM2=0D0
16822           DO 210 IPT2=2,NPT2
16823             FSUM2=FSUM2+0.5D0*(FPT2(IPT2)+FPT2(INX2(IPT2)))*
16824      &      (XPT2(INX2(IPT2))-XPT2(IPT2))
16825   210     CONTINUE
16826           FSUM2=FSUM2*(ATU2-ATL2)/PARU(1)
16827           IF(MEQL.EQ.1) FSUM2=2D0*FSUM2
16828         ELSE
16829           FSUM2=FUNC2
16830         ENDIF
16831  
16832 C...Save result; second integration for user-selected mass range.
16833         IF(LOOP.EQ.1) WIDW=FSUM2
16834         WID2=FSUM2
16835         IF(LOOP.EQ.1.AND.(CKIN(46).GE.CKIN(45).OR.CKIN(48).GE.CKIN(47)
16836      &  .OR.MAX(CKIN(45),CKIN(47)).GE.1.01D0*PARP(42))) THEN
16837           LOOP=2
16838           GOTO 100
16839         ENDIF
16840         RET1=WIDW
16841         RET2=WID2/WIDW
16842  
16843 C...Select two decay product masses of a resonance.
16844       ELSEIF(MOFSH.EQ.2.OR.MOFSH.EQ.5) THEN
16845   220   DO 230 I=1,2
16846           IF(MBW(I).EQ.0) GOTO 230
16847           PMBW=PMD(I)**2+PMD(I)*PGD(I)*TAN(ATL(I)+PYR(0)*
16848      &    (ATU(I)-ATL(I)))
16849           PMG(I)=MIN(PMU(I),MAX(PML(I),SQRT(MAX(0D0,PMBW))))
16850           RMG(I)=(PMG(I)/PMMX)**2
16851   230   CONTINUE
16852         IF((MEQL.EQ.1.AND.PMG(MAX(1,MLM)).GT.PMG(MIN(2,3-MLM))).OR.
16853      &  PMG(1)+PMG(2)+PARJ(64).GT.PMMX) GOTO 220
16854  
16855 C...Weight with matrix element (if none known, use beta factor).
16856         FLAM=SQRT(MAX(0D0,(1D0-RMG(1)-RMG(2))**2-4D0*RMG(1)*RMG(2)))
16857         IF(MMED.EQ.1) THEN
16858           WTBE=FLAM*((1D0-RMG(1)-RMG(2))**2+8D0*RMG(1)*RMG(2))
16859         ELSEIF(MMED.EQ.2) THEN
16860           WTBE=FLAM**3*(1D0+10D0*RMG(1)+10D0*RMG(2)+RMG(1)**2+
16861      &    RMG(2)**2+10D0*RMG(1)*RMG(2))
16862         ELSEIF(MMED.EQ.3) THEN
16863           WTBE=FLAM*(RMG(1)+FLAM**2/12D0)
16864         ELSE
16865           WTBE=FLAM
16866         ENDIF
16867         IF(WTBE.LT.PYR(0)) GOTO 220
16868         RET1=PMG(1)
16869         RET2=PMG(2)
16870  
16871 C...Find suitable set of masses for initialization of 2 -> 2 processes.
16872       ELSEIF(MOFSH.EQ.3) THEN
16873         IF(MBW(1).NE.0.AND.MBW(2).EQ.0) THEN
16874           PMG(1)=MIN(PMD(1),0.5D0*(PML(1)+PMU(1)))
16875           PMG(2)=PMD(2)
16876         ELSEIF(MBW(2).NE.0.AND.MBW(1).EQ.0) THEN
16877           PMG(1)=PMD(1)
16878           PMG(2)=MIN(PMD(2),0.5D0*(PML(2)+PMU(2)))
16879         ELSE
16880           IDIV=-1
16881   240     IDIV=IDIV+1
16882           PMG(1)=MIN(PMD(1),0.1D0*(IDIV*PML(1)+(10-IDIV)*PMU(1)))
16883           PMG(2)=MIN(PMD(2),0.1D0*(IDIV*PML(2)+(10-IDIV)*PMU(2)))
16884           IF(IDIV.LE.9.AND.PMG(1)+PMG(2).GT.0.9D0*PMMX) GOTO 240
16885         ENDIF
16886         RET1=PMG(1)
16887         RET2=PMG(2)
16888  
16889 C...Evaluate importance of excluded tails of Breit-Wigners.
16890         IF(MEQL.EQ.0.AND.MBW(1).EQ.1.AND.MBW(2).EQ.1.AND.PMD(1)+PMD(2)
16891      &  .GT.PMMX.AND.PMH(1).GT.PML(1).AND.PMH(2).GT.PML(2)) MEQL=2
16892         IF(MEQL.LE.1) THEN
16893           VINT(80)=1D0
16894           DO 250 I=1,2
16895             IF(MBW(I).NE.0) VINT(80)=VINT(80)*1.25D0*(ATU(I)-ATL(I))/
16896      &      PARU(1)
16897   250     CONTINUE
16898         ELSE
16899           VINT(80)=(1.25D0/PARU(1))**2*MAX((ATU(1)-ATL(1))*
16900      &    (ATH(2)-ATL(2)),(ATH(1)-ATL(1))*(ATU(2)-ATL(2)))
16901         ENDIF
16902         IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.30.OR.ISUB.EQ.35).AND.
16903      &  MSTP(43).NE.2) VINT(80)=2D0*VINT(80)
16904         IF(ISUB.EQ.22.AND.MSTP(43).NE.2) VINT(80)=4D0*VINT(80)
16905         IF(MEQL.GE.1) VINT(80)=2D0*VINT(80)
16906  
16907 C...Pick one particle to be the lighter (if improves efficiency).
16908       ELSEIF(MOFSH.EQ.4) THEN
16909         IF(MEQL.EQ.0.AND.MBW(1).EQ.1.AND.MBW(2).EQ.1.AND.PMD(1)+PMD(2)
16910      &  .GT.PMMX.AND.PMH(1).GT.PML(1).AND.PMH(2).GT.PML(2)) MEQL=2
16911   260   IF(MEQL.EQ.2) MLM=INT(1.5D0+PYR(0))
16912  
16913 C...Select two masses according to Breit-Wigner + flat in s + 1/s.
16914         DO 270 I=1,2
16915           IF(MBW(I).EQ.0) GOTO 270
16916           PMV=PMU(I)
16917           IF(MEQL.EQ.2.AND.I.EQ.MLM) PMV=PMH(I)
16918           ATV=ATU(I)
16919           IF(MEQL.EQ.2.AND.I.EQ.MLM) ATV=ATH(I)
16920           RBR=PYR(0)
16921           IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.ISUB.EQ.30.OR.
16922      &    ISUB.EQ.35).AND.MSTP(43).NE.2) RBR=2D0*RBR
16923           IF(RBR.LT.0.8D0) THEN
16924             PMSR=PMD(I)**2+PMD(I)*PGD(I)*TAN(ATL(I)+PYR(0)*(ATV-ATL(I)))
16925             PMG(I)=MIN(PMV,MAX(PML(I),SQRT(MAX(0D0,PMSR))))
16926           ELSEIF(RBR.LT.0.9D0) THEN
16927             PMG(I)=SQRT(MAX(0D0,PML(I)**2+PYR(0)*(PMV**2-PML(I)**2)))
16928           ELSEIF(RBR.LT.1.5D0) THEN
16929             PMG(I)=PML(I)*(PMV/PML(I))**PYR(0)
16930           ELSE
16931             PMG(I)=SQRT(MAX(0D0,PML(I)**2*PMV**2/(PML(I)**2+PYR(0)*
16932      &      (PMV**2-PML(I)**2))))
16933           ENDIF
16934   270   CONTINUE
16935         IF((MEQL.GE.1.AND.PMG(MAX(1,MLM)).GT.PMG(MIN(2,3-MLM))).OR.
16936      &  PMG(1)+PMG(2)+PARJ(64).GT.PMMX) THEN
16937           IF(MINT(48).EQ.1) THEN
16938             NGEN(0,1)=NGEN(0,1)+1
16939             NGEN(MINT(1),1)=NGEN(MINT(1),1)+1
16940             GOTO 260
16941           ELSE
16942             MINT(51)=1
16943             RETURN
16944           ENDIF
16945         ENDIF
16946         RET1=PMG(1)
16947         RET2=PMG(2)
16948  
16949 C...Give weight for selected mass distribution.
16950         VINT(80)=1D0
16951         DO 280 I=1,2
16952           IF(MBW(I).EQ.0) GOTO 280
16953           PMV=PMU(I)
16954           IF(MEQL.EQ.2.AND.I.EQ.MLM) PMV=PMH(I)
16955           ATV=ATU(I)
16956           IF(MEQL.EQ.2.AND.I.EQ.MLM) ATV=ATH(I)
16957           F0=PMD(I)*PGD(I)/((PMG(I)**2-PMD(I)**2)**2+
16958      &    (PMD(I)*PGD(I))**2)/PARU(1)
16959           F1=1D0
16960           F2=1D0/PMG(I)**2
16961           F3=1D0/PMG(I)**4
16962           FI0=(ATV-ATL(I))/PARU(1)
16963           FI1=PMV**2-PML(I)**2
16964           FI2=2D0*LOG(PMV/PML(I))
16965           FI3=1D0/PML(I)**2-1D0/PMV**2
16966           IF((ISUB.EQ.15.OR.ISUB.EQ.19.OR.ISUB.EQ.22.OR.ISUB.EQ.30.OR.
16967      &    ISUB.EQ.35).AND.MSTP(43).NE.2) THEN
16968             VINT(80)=VINT(80)*20D0/(8D0+(FI0/F0)*(F1/FI1+6D0*F2/FI2+
16969      &      5D0*F3/FI3))
16970           ELSE
16971             VINT(80)=VINT(80)*10D0/(8D0+(FI0/F0)*(F1/FI1+F2/FI2))
16972           ENDIF
16973           VINT(80)=VINT(80)*FI0
16974   280   CONTINUE
16975         IF(MEQL.GE.1) VINT(80)=2D0*VINT(80)
16976       ENDIF
16977  
16978       RETURN
16979       END
16980  
16981 C***********************************************************************
16982  
16983 C...PYRECO
16984 C...Handles the possibility of colour reconnection in W+W- events,
16985 C...Based on the main scenarios of the Sjostrand and Khoze study:
16986 C...I, II, II', intermediate and instantaneous; plus one model
16987 C...along the lines of the Gustafson and Hakkinen: GH.
16988 C...Note: also handles Z0 Z0 and W-W+ events, but notation below
16989 C...is as if first resonance is W+ and second W-.
16990 
16991       SUBROUTINE PYRECO(IW1,IW2,NSD1,NAFT1)
16992  
16993 C...Double precision and integer declarations.
16994       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
16995       IMPLICIT INTEGER(I-N)
16996       INTEGER PYK,PYCHGE,PYCOMP
16997 C...Parameter value; number of points in MC integration.
16998       PARAMETER (NPT=100)
16999 C...Commonblocks.
17000       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
17001       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
17002       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
17003       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
17004       COMMON/PYINT1/MINT(400),VINT(400)
17005       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
17006 C...Local arrays.
17007       DIMENSION NBEG(2),NEND(2),INP(50),INM(50),BEWW(3),XP(3),XM(3),
17008      &V1(3),V2(3),BETP(50,4),DIRP(50,3),BETM(50,4),DIRM(50,3),
17009      &XD(4),XB(4),IAP(NPT),IAM(NPT),WTA(NPT),V1P(3),V2P(3),V1M(3),
17010      &V2M(3),Q(4,3),XPP(3),XMM(3),IPC(20),IMC(20),TC(0:20),TPC(20),
17011      &TMC(20),IJOIN(100)
17012  
17013 C...Functions to give four-product and to do determinants.
17014       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)
17015       DETER(I,J,L)=Q(I,1)*Q(J,2)*Q(L,3)-Q(I,1)*Q(L,2)*Q(J,3)+
17016      &Q(J,1)*Q(L,2)*Q(I,3)-Q(J,1)*Q(I,2)*Q(L,3)+
17017      &Q(L,1)*Q(I,2)*Q(J,3)-Q(L,1)*Q(J,2)*Q(I,3)
17018  
17019 C...Only allow fraction of recoupling for GH, intermediate and
17020 C...instantaneous.
17021       IF(MSTP(115).EQ.5.OR.MSTP(115).EQ.11.OR.MSTP(115).EQ.12) THEN
17022         IF(PYR(0).GT.PARP(120)) RETURN
17023       ENDIF
17024       ISUB=MINT(1)
17025  
17026 C...Common part for scenarios I, II, II', and GH.
17027       IF(MSTP(115).EQ.1.OR.MSTP(115).EQ.2.OR.MSTP(115).EQ.3.OR.
17028      &MSTP(115).EQ.5) THEN
17029  
17030 C...Read out frequently-used parameters.
17031         PI=PARU(1)
17032         HBAR=PARU(3)
17033         PMW=PMAS(24,1)
17034         IF(ISUB.EQ.22) PMW=PMAS(23,1)
17035         PGW=PMAS(24,2)
17036         IF(ISUB.EQ.22) PGW=PMAS(23,2)
17037         TFRAG=PARP(115)
17038         RHAD=PARP(116)
17039         FACT=PARP(117)
17040         BLOWR=PARP(118)
17041         BLOWT=PARP(119)
17042  
17043 C...Find range of decay products of the W's.
17044 C...Background: the W's are stored in IW1 and IW2.
17045 C...Their direct decay products in NSD1+1 through NSD1+4.
17046 C...Products after shower (if any) in NSD1+5 through NAFT1
17047 C...for first W and in NAFT1+1 through N for the second.
17048         IF(NAFT1.GT.NSD1+4) THEN
17049           NBEG(1)=NSD1+5
17050           NEND(1)=NAFT1
17051         ELSE
17052           NBEG(1)=NSD1+1
17053           NEND(1)=NSD1+2
17054         ENDIF
17055         IF(N.GT.NAFT1) THEN
17056           NBEG(2)=NAFT1+1
17057           NEND(2)=N
17058         ELSE
17059           NBEG(2)=NSD1+3
17060           NEND(2)=NSD1+4
17061         ENDIF
17062  
17063 C...Rearrange parton shower products along strings.
17064         NOLD=N
17065         CALL PYPREP(NSD1+1)
17066  
17067 C...Find partons pointing back to W+ and W-; store them with quark
17068 C...end of string first.
17069         NNP=0
17070         NNM=0
17071         ISGP=0
17072         ISGM=0
17073         DO 120 I=NOLD+1,N
17074           IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 120
17075           IF(IABS(K(I,2)).GE.22) GOTO 120
17076           IF(K(I,3).GE.NBEG(1).AND.K(I,3).LE.NEND(1)) THEN
17077             IF(ISGP.EQ.0) ISGP=ISIGN(1,K(I,2))
17078             NNP=NNP+1
17079             IF(ISGP.EQ.1) THEN
17080               INP(NNP)=I
17081             ELSE
17082               DO 100 I1=NNP,2,-1
17083                 INP(I1)=INP(I1-1)
17084   100         CONTINUE
17085               INP(1)=I
17086             ENDIF
17087             IF(K(I,1).EQ.1) ISGP=0
17088           ELSEIF(K(I,3).GE.NBEG(2).AND.K(I,3).LE.NEND(2)) THEN
17089             IF(ISGM.EQ.0) ISGM=ISIGN(1,K(I,2))
17090             NNM=NNM+1
17091             IF(ISGM.EQ.1) THEN
17092               INM(NNM)=I
17093             ELSE
17094               DO 110 I1=NNM,2,-1
17095                 INM(I1)=INM(I1-1)
17096   110         CONTINUE
17097               INM(1)=I
17098             ENDIF
17099             IF(K(I,1).EQ.1) ISGM=0
17100           ENDIF
17101   120   CONTINUE
17102  
17103 C...Boost to W+W- rest frame (not strictly needed).
17104         DO 130 J=1,3
17105           BEWW(J)=(P(IW1,J)+P(IW2,J))/(P(IW1,4)+P(IW2,4))
17106   130   CONTINUE
17107         CALL PYROBO(IW1,IW1,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
17108         CALL PYROBO(IW2,IW2,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
17109         CALL PYROBO(NOLD+1,N,0D0,0D0,-BEWW(1),-BEWW(2),-BEWW(3))
17110  
17111 C...Select decay vertices of W+ and W-.
17112         TP=HBAR*(-LOG(PYR(0)))*P(IW1,4)/
17113      &  SQRT((P(IW1,5)**2-PMW**2)**2+(P(IW1,5)**2*PGW/PMW)**2)
17114         TM=HBAR*(-LOG(PYR(0)))*P(IW2,4)/
17115      &  SQRT((P(IW2,5)**2-PMW**2)**2+(P(IW2,5)**2*PGW/PMW)**2)
17116         GTMAX=MAX(TP,TM)
17117         DO 140 J=1,3
17118           XP(J)=TP*P(IW1,J)/P(IW1,4)
17119           XM(J)=TM*P(IW2,J)/P(IW2,4)
17120   140   CONTINUE
17121  
17122 C...Begin scenario I specifics.
17123         IF(MSTP(115).EQ.1) THEN
17124  
17125 C...Reconstruct velocity and direction of W+ string pieces.
17126           DO 170 IIP=1,NNP-1
17127             IF(K(INP(IIP),2).LT.0) GOTO 170
17128             I1=INP(IIP)
17129             I2=INP(IIP+1)
17130             P1A=SQRT(P(I1,1)**2+P(I1,2)**2+P(I1,3)**2)
17131             P2A=SQRT(P(I2,1)**2+P(I2,2)**2+P(I2,3)**2)
17132             DO 150 J=1,3
17133               V1(J)=P(I1,J)/P1A
17134               V2(J)=P(I2,J)/P2A
17135               BETP(IIP,J)=0.5D0*(V1(J)+V2(J))
17136               DIRP(IIP,J)=V1(J)-V2(J)
17137   150       CONTINUE
17138             BETP(IIP,4)=1D0/SQRT(1D0-BETP(IIP,1)**2-BETP(IIP,2)**2-
17139      &      BETP(IIP,3)**2)
17140             DIRL=SQRT(DIRP(IIP,1)**2+DIRP(IIP,2)**2+DIRP(IIP,3)**2)
17141             DO 160 J=1,3
17142               DIRP(IIP,J)=DIRP(IIP,J)/DIRL
17143   160       CONTINUE
17144   170     CONTINUE
17145  
17146 C...Reconstruct velocity and direction of W- string pieces.
17147           DO 200 IIM=1,NNM-1
17148             IF(K(INM(IIM),2).LT.0) GOTO 200
17149             I1=INM(IIM)
17150             I2=INM(IIM+1)
17151             P1A=SQRT(P(I1,1)**2+P(I1,2)**2+P(I1,3)**2)
17152             P2A=SQRT(P(I2,1)**2+P(I2,2)**2+P(I2,3)**2)
17153             DO 180 J=1,3
17154               V1(J)=P(I1,J)/P1A
17155               V2(J)=P(I2,J)/P2A
17156               BETM(IIM,J)=0.5D0*(V1(J)+V2(J))
17157               DIRM(IIM,J)=V1(J)-V2(J)
17158   180       CONTINUE
17159             BETM(IIM,4)=1D0/SQRT(1D0-BETM(IIM,1)**2-BETM(IIM,2)**2-
17160      &      BETM(IIM,3)**2)
17161             DIRL=SQRT(DIRM(IIM,1)**2+DIRM(IIM,2)**2+DIRM(IIM,3)**2)
17162             DO 190 J=1,3
17163               DIRM(IIM,J)=DIRM(IIM,J)/DIRL
17164   190       CONTINUE
17165   200     CONTINUE
17166  
17167 C...Loop over number of space-time points.
17168           NACC=0
17169           SUM=0D0
17170           DO 250 IPT=1,NPT
17171  
17172 C...Pick x,y,z,t Gaussian (width RHAD and TFRAG, respectively).
17173             R=SQRT(-LOG(PYR(0)))
17174             PHI=2D0*PI*PYR(0)
17175             X=BLOWR*RHAD*R*COS(PHI)
17176             Y=BLOWR*RHAD*R*SIN(PHI)
17177             R=SQRT(-LOG(PYR(0)))
17178             PHI=2D0*PI*PYR(0)
17179             Z=BLOWR*RHAD*R*COS(PHI)
17180             T=GTMAX+BLOWT*SQRT(0.5D0)*TFRAG*R*ABS(SIN(PHI))
17181  
17182 C...Reject impossible points. Weight for sample distribution.
17183             IF(T**2-X**2-Y**2-Z**2.LT.0D0) GOTO 250
17184             WTSMP=EXP(-(X**2+Y**2+Z**2)/(BLOWR*RHAD)**2)*
17185      &      EXP(-2D0*(T-GTMAX)**2/(BLOWT*TFRAG)**2)
17186  
17187 C...Loop over W+ string pieces and find one with largest weight.
17188             IMAXP=0
17189             WTMAXP=1D-10
17190             XD(1)=X-XP(1)
17191             XD(2)=Y-XP(2)
17192             XD(3)=Z-XP(3)
17193             XD(4)=T-TP
17194             DO 220 IIP=1,NNP-1
17195               IF(K(INP(IIP),2).LT.0) GOTO 220
17196               BED=BETP(IIP,1)*XD(1)+BETP(IIP,2)*XD(2)+BETP(IIP,3)*XD(3)
17197               BEDG=BETP(IIP,4)*(BETP(IIP,4)*BED/(1D0+BETP(IIP,4))-XD(4))
17198               DO 210 J=1,3
17199                 XB(J)=XD(J)+BEDG*BETP(IIP,J)
17200   210         CONTINUE
17201               XB(4)=BETP(IIP,4)*(XD(4)-BED)
17202               SR2=XB(1)**2+XB(2)**2+XB(3)**2
17203               SZ2=(DIRP(IIP,1)*XB(1)+DIRP(IIP,2)*XB(2)+
17204      &        DIRP(IIP,3)*XB(3))**2
17205               WTP=EXP(-(SR2-SZ2)/(2D0*RHAD**2))*EXP(-(XB(4)**2-SZ2)/
17206      &        TFRAG**2)
17207               IF(XB(4)-SQRT(SR2).LT.0D0) WTP=0D0
17208               IF(WTP.GT.WTMAXP) THEN
17209                 IMAXP=IIP
17210                 WTMAXP=WTP
17211               ENDIF
17212   220       CONTINUE
17213  
17214 C...Loop over W- string pieces and find one with largest weight.
17215             IMAXM=0
17216             WTMAXM=1D-10
17217             XD(1)=X-XM(1)
17218             XD(2)=Y-XM(2)
17219             XD(3)=Z-XM(3)
17220             XD(4)=T-TM
17221             DO 240 IIM=1,NNM-1
17222               IF(K(INM(IIM),2).LT.0) GOTO 240
17223               BED=BETM(IIM,1)*XD(1)+BETM(IIM,2)*XD(2)+BETM(IIM,3)*XD(3)
17224               BEDG=BETM(IIM,4)*(BETM(IIM,4)*BED/(1D0+BETM(IIM,4))-XD(4))
17225               DO 230 J=1,3
17226                 XB(J)=XD(J)+BEDG*BETM(IIM,J)
17227   230         CONTINUE
17228               XB(4)=BETM(IIM,4)*(XD(4)-BED)
17229               SR2=XB(1)**2+XB(2)**2+XB(3)**2
17230               SZ2=(DIRM(IIM,1)*XB(1)+DIRM(IIM,2)*XB(2)+
17231      &        DIRM(IIM,3)*XB(3))**2
17232               WTM=EXP(-(SR2-SZ2)/(2D0*RHAD**2))*EXP(-(XB(4)**2-SZ2)/
17233      &        TFRAG**2)
17234               IF(XB(4)-SQRT(SR2).LT.0D0) WTM=0D0
17235               IF(WTM.GT.WTMAXM) THEN
17236                 IMAXM=IIM
17237                 WTMAXM=WTM
17238               ENDIF
17239   240       CONTINUE
17240  
17241 C...Result of integration.
17242             WT=0D0
17243             IF(IMAXP.NE.0.AND.IMAXM.NE.0) THEN
17244               WT=WTMAXP*WTMAXM/WTSMP
17245               SUM=SUM+WT
17246               NACC=NACC+1
17247               IAP(NACC)=IMAXP
17248               IAM(NACC)=IMAXM
17249               WTA(NACC)=WT
17250             ENDIF
17251   250     CONTINUE
17252           RES=BLOWR**3*BLOWT*SUM/NPT
17253  
17254 C...Decide whether to reconnect and, if so, where.
17255           IACC=0
17256           PREC=1D0-EXP(-FACT*RES)
17257           IF(PREC.GT.PYR(0)) THEN
17258             RSUM=PYR(0)*SUM
17259             DO 260 IA=1,NACC
17260               IACC=IA
17261               RSUM=RSUM-WTA(IA)
17262               IF(RSUM.LE.0D0) GOTO 270
17263   260       CONTINUE
17264   270       IIP=IAP(IACC)
17265             IIM=IAM(IACC)
17266           ENDIF
17267  
17268 C...Begin scenario II and II' specifics.
17269         ELSEIF(MSTP(115).EQ.2.OR.MSTP(115).EQ.3) THEN
17270  
17271 C...Loop through all string pieces, one from W+ and one from W-.
17272           NCROSS=0
17273           TC(0)=0D0
17274           DO 340 IIP=1,NNP-1
17275             IF(K(INP(IIP),2).LT.0) GOTO 340
17276             I1P=INP(IIP)
17277             I2P=INP(IIP+1)
17278             DO 330 IIM=1,NNM-1
17279               IF(K(INM(IIM),2).LT.0) GOTO 330
17280               I1M=INM(IIM)
17281               I2M=INM(IIM+1)
17282  
17283 C...Find endpoint velocity vectors.
17284               DO 280 J=1,3
17285                 V1P(J)=P(I1P,J)/P(I1P,4)
17286                 V2P(J)=P(I2P,J)/P(I2P,4)
17287                 V1M(J)=P(I1M,J)/P(I1M,4)
17288                 V2M(J)=P(I2M,J)/P(I2M,4)
17289   280         CONTINUE
17290  
17291 C...Define q matrix and find t.
17292               DO 290 J=1,3
17293                 Q(1,J)=V2P(J)-V1P(J)
17294                 Q(2,J)=-(V2M(J)-V1M(J))
17295                 Q(3,J)=XP(J)-XM(J)-TP*V1P(J)+TM*V1M(J)
17296                 Q(4,J)=V1P(J)-V1M(J)
17297   290         CONTINUE
17298               T=-DETER(1,2,3)/DETER(1,2,4)
17299  
17300 C...Find alpha and beta; i.e. coordinates of crossing point.
17301               S11=Q(1,1)*(T-TP)
17302               S12=Q(2,1)*(T-TM)
17303               S13=Q(3,1)+Q(4,1)*T
17304               S21=Q(1,2)*(T-TP)
17305               S22=Q(2,2)*(T-TM)
17306               S23=Q(3,2)+Q(4,2)*T
17307               DEN=S11*S22-S12*S21
17308               ALP=(S12*S23-S22*S13)/DEN
17309               BET=(S21*S13-S11*S23)/DEN
17310  
17311 C...Check if solution acceptable.
17312               IANSW=1
17313               IF(T.LT.GTMAX) IANSW=0
17314               IF(ALP.LT.0D0.OR.ALP.GT.1D0) IANSW=0
17315               IF(BET.LT.0D0.OR.BET.GT.1D0) IANSW=0
17316  
17317 C...Find point of crossing and check that not inconsistent.
17318               DO 300 J=1,3
17319                 XPP(J)=XP(J)+(V1P(J)+ALP*(V2P(J)-V1P(J)))*(T-TP)
17320                 XMM(J)=XM(J)+(V1M(J)+BET*(V2M(J)-V1M(J)))*(T-TM)
17321   300         CONTINUE
17322               D2PM=(XPP(1)-XMM(1))**2+(XPP(2)-XMM(2))**2+
17323      &        (XPP(3)-XMM(3))**2
17324               D2P=XPP(1)**2+XPP(2)**2+XPP(3)**2
17325               D2M=XMM(1)**2+XMM(2)**2+XMM(3)**2
17326               IF(D2PM.GT.1D-4*(D2P+D2M)) IANSW=-1
17327  
17328 C...Find string eigentimes at crossing.
17329               IF(IANSW.EQ.1) THEN
17330                 TAUP=SQRT(MAX(0D0,(T-TP)**2-(XPP(1)-XP(1))**2-
17331      &          (XPP(2)-XP(2))**2-(XPP(3)-XP(3))**2))
17332                 TAUM=SQRT(MAX(0D0,(T-TM)**2-(XMM(1)-XM(1))**2-
17333      &          (XMM(2)-XM(2))**2-(XMM(3)-XM(3))**2))
17334               ELSE
17335                 TAUP=0D0
17336                 TAUM=0D0
17337               ENDIF
17338  
17339 C...Order crossings by time. End loop over crossings.
17340               IF(IANSW.EQ.1.AND.NCROSS.LT.20) THEN
17341                 NCROSS=NCROSS+1
17342                 DO 310 I1=NCROSS,1,-1
17343                   IF(T.GT.TC(I1-1).OR.I1.EQ.1) THEN
17344                     IPC(I1)=IIP
17345                     IMC(I1)=IIM
17346                     TC(I1)=T
17347                     TPC(I1)=TAUP
17348                     TMC(I1)=TAUM
17349                     GOTO 320
17350                   ELSE
17351                     IPC(I1)=IPC(I1-1)
17352                     IMC(I1)=IMC(I1-1)
17353                     TC(I1)=TC(I1-1)
17354                     TPC(I1)=TPC(I1-1)
17355                     TMC(I1)=TMC(I1-1)
17356                   ENDIF
17357   310           CONTINUE
17358   320           CONTINUE
17359               ENDIF
17360   330       CONTINUE
17361   340     CONTINUE
17362  
17363 C...Loop over crossings; find first (if any) acceptable one.
17364           IACC=0
17365           IF(NCROSS.GE.1) THEN
17366             DO 350 IC=1,NCROSS
17367               PNFRAG=EXP(-(TPC(IC)**2+TMC(IC)**2)/TFRAG**2)
17368               IF(PNFRAG.GT.PYR(0)) THEN
17369 C...Scenario II: only compare with fragmentation time.
17370                 IF(MSTP(115).EQ.2) THEN
17371                   IACC=IC
17372                   IIP=IPC(IACC)
17373                   IIM=IMC(IACC)
17374                   GOTO 360
17375 C...Scenario II': also require that string length decreases.
17376                 ELSE
17377                   IIP=IPC(IC)
17378                   IIM=IMC(IC)
17379                   I1P=INP(IIP)
17380                   I2P=INP(IIP+1)
17381                   I1M=INM(IIM)
17382                   I2M=INM(IIM+1)
17383                   ELOLD=FOUR(I1P,I2P)*FOUR(I1M,I2M)
17384                   ELNEW=FOUR(I1P,I2M)*FOUR(I1M,I2P)
17385                   IF(ELNEW.LT.ELOLD) THEN
17386                     IACC=IC
17387                     IIP=IPC(IACC)
17388                     IIM=IMC(IACC)
17389                     GOTO 360
17390                   ENDIF
17391                 ENDIF
17392               ENDIF
17393   350       CONTINUE
17394   360       CONTINUE
17395           ENDIF
17396  
17397 C...Begin scenario GH specifics.
17398         ELSEIF(MSTP(115).EQ.5) THEN
17399  
17400 C...Loop through all string pieces, one from W+ and one from W-.
17401           IACC=0
17402           ELMIN=1D0
17403           DO 380 IIP=1,NNP-1
17404             IF(K(INP(IIP),2).LT.0) GOTO 380
17405             I1P=INP(IIP)
17406             I2P=INP(IIP+1)
17407             DO 370 IIM=1,NNM-1
17408               IF(K(INM(IIM),2).LT.0) GOTO 370
17409               I1M=INM(IIM)
17410               I2M=INM(IIM+1)
17411  
17412 C...Look for largest decrease of (exponent of) Lambda measure.
17413               ELOLD=FOUR(I1P,I2P)*FOUR(I1M,I2M)
17414               ELNEW=FOUR(I1P,I2M)*FOUR(I1M,I2P)
17415               ELDIF=ELNEW/MAX(1D-10,ELOLD)
17416               IF(ELDIF.LT.ELMIN) THEN
17417                 IACC=IIP+IIM
17418                 ELMIN=ELDIF
17419                 IPC(1)=IIP
17420                 IMC(1)=IIM
17421               ENDIF
17422   370       CONTINUE
17423   380     CONTINUE
17424           IIP=IPC(1)
17425           IIM=IMC(1)
17426         ENDIF
17427  
17428 C...Common for scenarios I, II, II' and GH: reconnect strings.
17429         IF(IACC.NE.0) THEN
17430           MINT(32)=1
17431           NJOIN=0
17432           DO 390 IS=1,NNP+NNM
17433             NJOIN=NJOIN+1
17434             IF(IS.LE.IIP) THEN
17435               I=INP(IS)
17436             ELSEIF(IS.LE.IIP+NNM-IIM) THEN
17437               I=INM(IS-IIP+IIM)
17438             ELSEIF(IS.LE.IIP+NNM) THEN
17439               I=INM(IS-IIP-NNM+IIM)
17440             ELSE
17441               I=INP(IS-NNM)
17442             ENDIF
17443             IJOIN(NJOIN)=I
17444             IF(K(I,2).LT.0) THEN
17445               CALL PYJOIN(NJOIN,IJOIN)
17446               NJOIN=0
17447             ENDIF
17448   390     CONTINUE
17449  
17450 C...Restore original event record if no reconnection.
17451         ELSE
17452           DO 400 I=NSD1+1,NOLD
17453             IF(K(I,1).EQ.13.OR.K(I,1).EQ.14) THEN
17454               K(I,4)=MOD(K(I,4),MSTU(5)**2)
17455               K(I,5)=MOD(K(I,5),MSTU(5)**2)
17456             ENDIF
17457   400     CONTINUE
17458           DO 410 I=NOLD+1,N
17459             K(K(I,3),1)=3
17460   410     CONTINUE
17461           N=NOLD
17462         ENDIF
17463  
17464 C...Boost back system.
17465         CALL PYROBO(IW1,IW1,0D0,0D0,BEWW(1),BEWW(2),BEWW(3))
17466         CALL PYROBO(IW2,IW2,0D0,0D0,BEWW(1),BEWW(2),BEWW(3))
17467         IF(N.GT.NOLD) CALL PYROBO(NOLD+1,N,0D0,0D0,
17468      &  BEWW(1),BEWW(2),BEWW(3))
17469  
17470 C...Common part for intermediate and instantaneous scenarios.
17471       ELSEIF(MSTP(115).EQ.11.OR.MSTP(115).EQ.12) THEN
17472         MINT(32)=1
17473  
17474 C...Remove old shower products and reset showering ones.
17475         N=NSD1+4
17476         DO 420 I=NSD1+1,NSD1+4
17477           K(I,1)=3
17478           K(I,4)=MOD(K(I,4),MSTU(5)**2)
17479           K(I,5)=MOD(K(I,5),MSTU(5)**2)
17480   420   CONTINUE
17481  
17482 C...Identify quark-antiquark pairs.
17483         IQ1=NSD1+1
17484         IQ2=NSD1+2
17485         IQ3=NSD1+3
17486         IF(K(IQ1,2)*K(IQ3,2).LT.0) IQ3=NSD1+4
17487         IQ4=2*NSD1+7-IQ3
17488  
17489 C...Reconnect strings.
17490         IJOIN(1)=IQ1
17491         IJOIN(2)=IQ4
17492         CALL PYJOIN(2,IJOIN)
17493         IJOIN(1)=IQ3
17494         IJOIN(2)=IQ2
17495         CALL PYJOIN(2,IJOIN)
17496  
17497 C...Do new parton showers in intermediate scenario.
17498         IF(MSTP(71).GE.1.AND.MSTP(115).EQ.11) THEN
17499           MSTJ50=MSTJ(50)
17500           MSTJ(50)=0
17501           CALL PYSHOW(IQ1,IQ2,P(IW1,5))
17502           CALL PYSHOW(IQ3,IQ4,P(IW2,5))
17503           MSTJ(50)=MSTJ50
17504  
17505 C...Do new parton showers in instantaneous scenario.
17506         ELSEIF(MSTP(71).GE.1.AND.MSTP(115).EQ.12) THEN
17507           PPM2=(P(IQ1,4)+P(IQ4,4))**2-(P(IQ1,1)+P(IQ4,1))**2-
17508      &    (P(IQ1,2)+P(IQ4,2))**2-(P(IQ1,3)+P(IQ4,3))**2
17509           PPM=SQRT(MAX(0D0,PPM2))
17510           CALL PYSHOW(IQ1,IQ4,PPM)
17511           PPM2=(P(IQ3,4)+P(IQ2,4))**2-(P(IQ3,1)+P(IQ2,1))**2-
17512      &    (P(IQ3,2)+P(IQ2,2))**2-(P(IQ3,3)+P(IQ2,3))**2
17513           PPM=SQRT(MAX(0D0,PPM2))
17514           CALL PYSHOW(IQ3,IQ2,PPM)
17515         ENDIF
17516       ENDIF
17517  
17518       RETURN
17519       END
17520  
17521 C***********************************************************************
17522  
17523 C...PYKLIM
17524 C...Checks generated variables against pre-set kinematical limits;
17525 C...also calculates limits on variables used in generation.
17526  
17527       SUBROUTINE PYKLIM(ILIM)
17528  
17529 C...Double precision and integer declarations.
17530       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
17531       IMPLICIT INTEGER(I-N)
17532       INTEGER PYK,PYCHGE,PYCOMP
17533 C...Commonblocks.
17534       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
17535       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
17536       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
17537       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
17538       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
17539       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
17540       COMMON/PYINT1/MINT(400),VINT(400)
17541       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
17542       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
17543      &/PYINT1/,/PYINT2/
17544  
17545 C...Common kinematical expressions.
17546       MINT(51)=0
17547       ISUB=MINT(1)
17548       ISTSB=ISET(ISUB)
17549       IF(ISUB.EQ.96) GOTO 100
17550       SQM3=VINT(63)
17551       SQM4=VINT(64)
17552       IF(ILIM.NE.0) THEN
17553         IF(ABS(SQM3).LT.1D-4.AND.ABS(SQM4).LT.1D-4) THEN
17554           CKIN09=MAX(CKIN(9),CKIN(13))
17555           CKIN10=MIN(CKIN(10),CKIN(14))
17556           CKIN11=MAX(CKIN(11),CKIN(15))
17557           CKIN12=MIN(CKIN(12),CKIN(16))
17558         ELSE
17559           CKIN09=MAX(CKIN(9),MIN(0D0,CKIN(13)))
17560           CKIN10=MIN(CKIN(10),MAX(0D0,CKIN(14)))
17561           CKIN11=MAX(CKIN(11),MIN(0D0,CKIN(15)))
17562           CKIN12=MIN(CKIN(12),MAX(0D0,CKIN(16)))
17563         ENDIF
17564       ENDIF
17565       IF(ILIM.NE.1) THEN
17566         TAU=VINT(21)
17567         RM3=SQM3/(TAU*VINT(2))
17568         RM4=SQM4/(TAU*VINT(2))
17569         BE34=SQRT(MAX(1D-20,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
17570       ENDIF
17571       PTHMIN=CKIN(3)
17572       IF(MIN(SQM3,SQM4).LT.CKIN(6)**2.AND.ISTSB.NE.1.AND.ISTSB.NE.3)
17573      &PTHMIN=MAX(CKIN(3),CKIN(5))
17574  
17575       IF(ILIM.EQ.0) THEN
17576 C...Check generated values of tau, y*, cos(theta-hat), and tau' against
17577 C...pre-set kinematical limits.
17578         YST=VINT(22)
17579         CTH=VINT(23)
17580         TAUP=VINT(26)
17581         TAUE=TAU
17582         IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=TAUP
17583         X1=SQRT(TAUE)*EXP(YST)
17584         X2=SQRT(TAUE)*EXP(-YST)
17585         XF=X1-X2
17586         IF(MINT(47).NE.1) THEN
17587           IF(TAU*VINT(2).LT.CKIN(1)**2) MINT(51)=1
17588           IF(CKIN(2).GE.0D0.AND.TAU*VINT(2).GT.CKIN(2)**2) MINT(51)=1
17589           IF(YST.LT.CKIN(7).OR.YST.GT.CKIN(8)) MINT(51)=1
17590           IF(XF.LT.CKIN(25).OR.XF.GT.CKIN(26)) MINT(51)=1
17591         ENDIF
17592         IF(MINT(45).NE.1) THEN
17593           IF(X1.LT.CKIN(21).OR.X1.GT.CKIN(22)) MINT(51)=1
17594         ENDIF
17595         IF(MINT(46).NE.1) THEN
17596           IF(X2.LT.CKIN(23).OR.X2.GT.CKIN(24)) MINT(51)=1
17597         ENDIF
17598         IF(MINT(45).EQ.2) THEN
17599           IF(X1.GT.1D0-2D0*PARP(111)/VINT(1)) MINT(51)=1
17600         ENDIF
17601         IF(MINT(46).EQ.2) THEN
17602           IF(X2.GT.1D0-2D0*PARP(111)/VINT(1)) MINT(51)=1
17603         ENDIF
17604         IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
17605           PTH=0.5D0*BE34*SQRT(TAU*VINT(2)*MAX(0D0,1D0-CTH**2))
17606           EXPY3=MAX(1D-20,(1D0+RM3-RM4+BE34*CTH)/
17607      &    MAX(1D-20,(1D0+RM3-RM4-BE34*CTH)))
17608           EXPY4=MAX(1D-20,(1D0-RM3+RM4-BE34*CTH)/
17609      &    MAX(1D-20,(1D0-RM3+RM4+BE34*CTH)))
17610           Y3=YST+0.5D0*LOG(EXPY3)
17611           Y4=YST+0.5D0*LOG(EXPY4)
17612           YLARGE=MAX(Y3,Y4)
17613           YSMALL=MIN(Y3,Y4)
17614           ETALAR=20D0
17615           ETASMA=-20D0
17616           STH=SQRT(MAX(0D0,1D0-CTH**2))
17617           EXSQ3=SQRT(MAX(1D-20,((1D0+RM3-RM4)*COSH(YST)+BE34*SINH(YST)*
17618      &    CTH)**2-4D0*RM3))
17619           EXSQ4=SQRT(MAX(1D-20,((1D0-RM3+RM4)*COSH(YST)-BE34*SINH(YST)*
17620      &    CTH)**2-4D0*RM4))
17621           IF(STH.GE.1D-10) THEN
17622             EXPET3=((1D0+RM3-RM4)*SINH(YST)+BE34*COSH(YST)*CTH+EXSQ3)/
17623      &      (BE34*STH)
17624             EXPET4=((1D0-RM3+RM4)*SINH(YST)-BE34*COSH(YST)*CTH+EXSQ4)/
17625      &      (BE34*STH)
17626             ETA3=LOG(MIN(1D10,MAX(1D-10,EXPET3)))
17627             ETA4=LOG(MIN(1D10,MAX(1D-10,EXPET4)))
17628             ETALAR=MAX(ETA3,ETA4)
17629             ETASMA=MIN(ETA3,ETA4)
17630           ENDIF
17631           CTS3=((1D0+RM3-RM4)*SINH(YST)+BE34*COSH(YST)*CTH)/EXSQ3
17632           CTS4=((1D0-RM3+RM4)*SINH(YST)-BE34*COSH(YST)*CTH)/EXSQ4
17633           CTSLAR=MIN(1D0,MAX(-1D0,CTS3,CTS4))
17634           CTSSMA=MAX(-1D0,MIN(1D0,CTS3,CTS4))
17635           SH=TAU*VINT(2)
17636           RPTS=4D0*VINT(71)**2/SH
17637           BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
17638           RM34=MAX(1D-20,2D0*RM3*RM4)
17639           IF(2D0*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001D0)
17640      &    RM34=MAX(RM34,2D0*VINT(71)**2/(VINT(21)*VINT(2)))
17641           RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
17642           THA=0.5D0*SH*MAX(RTHM,1D0-RM3-RM4-BE34*CTH)
17643           UHA=0.5D0*SH*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
17644           IF(PTH.LT.PTHMIN) MINT(51)=1
17645           IF(CKIN(4).GE.0D0.AND.PTH.GT.CKIN(4)) MINT(51)=1
17646           IF(YLARGE.LT.CKIN(9).OR.YLARGE.GT.CKIN(10)) MINT(51)=1
17647           IF(YSMALL.LT.CKIN(11).OR.YSMALL.GT.CKIN(12)) MINT(51)=1
17648           IF(ETALAR.LT.CKIN(13).OR.ETALAR.GT.CKIN(14)) MINT(51)=1
17649           IF(ETASMA.LT.CKIN(15).OR.ETASMA.GT.CKIN(16)) MINT(51)=1
17650           IF(CTSLAR.LT.CKIN(17).OR.CTSLAR.GT.CKIN(18)) MINT(51)=1
17651           IF(CTSSMA.LT.CKIN(19).OR.CTSSMA.GT.CKIN(20)) MINT(51)=1
17652           IF(CTH.LT.CKIN(27).OR.CTH.GT.CKIN(28)) MINT(51)=1
17653           IF(THA.LT.CKIN(35)) MINT(51)=1
17654           IF(CKIN(36).GE.0D0.AND.THA.GT.CKIN(36)) MINT(51)=1
17655           IF(UHA.LT.CKIN(37)) MINT(51)=1
17656           IF(CKIN(38).GE.0D0.AND.UHA.GT.CKIN(38)) MINT(51)=1
17657         ENDIF
17658         IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
17659           IF(TAUP*VINT(2).LT.CKIN(31)**2) MINT(51)=1
17660           IF(CKIN(32).GE.0D0.AND.TAUP*VINT(2).GT.CKIN(32)**2) MINT(51)=1
17661         ENDIF
17662  
17663 C...Additional cuts on W2 (approximately) in DIS.
17664         IF(ISUB.EQ.10.AND.MINT(43).GE.2) THEN
17665           XBJ=X2
17666           IF(IABS(MINT(12)).LT.20) XBJ=X1
17667           Q2BJ=THA
17668           W2BJ=Q2BJ*(1D0-XBJ)/XBJ
17669           IF(W2BJ.LT.CKIN(39)) MINT(51)=1
17670           IF(CKIN(40).GT.0D0.AND.W2BJ.GT.CKIN(40)) MINT(51)=1
17671         ENDIF
17672  
17673       ELSEIF(ILIM.EQ.1) THEN
17674 C...Calculate limits on tau
17675 C...0) due to definition
17676         TAUMN0=0D0
17677         TAUMX0=1D0
17678 C...1) due to limits on subsystem mass
17679         TAUMN1=CKIN(1)**2/VINT(2)
17680         TAUMX1=1D0
17681         IF(CKIN(2).GE.0D0) TAUMX1=CKIN(2)**2/VINT(2)
17682 C...2) due to limits on pT-hat (and non-overlapping rapidity intervals)
17683         TM3=SQRT(SQM3+PTHMIN**2)
17684         TM4=SQRT(SQM4+PTHMIN**2)
17685         YDCOSH=1D0
17686         IF(CKIN09.GT.CKIN12) YDCOSH=COSH(CKIN09-CKIN12)
17687         TAUMN2=(TM3**2+2D0*TM3*TM4*YDCOSH+TM4**2)/VINT(2)
17688         TAUMX2=1D0
17689 C...3) due to limits on pT-hat and cos(theta-hat)
17690         CTH2MN=MIN(CKIN(27)**2,CKIN(28)**2)
17691         CTH2MX=MAX(CKIN(27)**2,CKIN(28)**2)
17692         TAUMN3=0D0
17693         IF(CKIN(27)*CKIN(28).GT.0D0) TAUMN3=
17694      &  (SQRT(SQM3+PTHMIN**2/(1D0-CTH2MN))+
17695      &  SQRT(SQM4+PTHMIN**2/(1D0-CTH2MN)))**2/VINT(2)
17696         TAUMX3=1D0
17697         IF(CKIN(4).GE.0D0.AND.CTH2MX.LT.1D0) TAUMX3=
17698      &  (SQRT(SQM3+CKIN(4)**2/(1D0-CTH2MX))+
17699      &  SQRT(SQM4+CKIN(4)**2/(1D0-CTH2MX)))**2/VINT(2)
17700 C...4) due to limits on x1 and x2
17701         TAUMN4=CKIN(21)*CKIN(23)
17702         TAUMX4=CKIN(22)*CKIN(24)
17703 C...5) due to limits on xF
17704         TAUMN5=0D0
17705         TAUMX5=MAX(1D0-CKIN(25),1D0+CKIN(26))
17706 C...6) due to limits on that and uhat
17707         TAUMN6=(SQM3+SQM4+CKIN(35)+CKIN(37))/VINT(2)
17708         TAUMX6=1D0
17709         IF(CKIN(36).GT.0D0.AND.CKIN(38).GT.0D0) TAUMX6=
17710      &  (SQM3+SQM4+CKIN(36)+CKIN(38))/VINT(2)
17711  
17712 C...Net effect of all separate limits.
17713         VINT(11)=MAX(TAUMN0,TAUMN1,TAUMN2,TAUMN3,TAUMN4,TAUMN5,TAUMN6)
17714         VINT(31)=MIN(TAUMX0,TAUMX1,TAUMX2,TAUMX3,TAUMX4,TAUMX5,TAUMX6)
17715         IF(MINT(47).EQ.1.AND.(ISTSB.EQ.1.OR.ISTSB.EQ.2)) THEN
17716           VINT(11)=1D0-1D-9
17717           VINT(31)=1D0+1D-9
17718         ELSEIF(MINT(47).EQ.5) THEN
17719           VINT(31)=MIN(VINT(31),1D0-2D-10)
17720         ELSEIF(MINT(47).GE.6) THEN
17721           VINT(31)=MIN(VINT(31),1D0-1D-10)
17722         ENDIF
17723         IF(VINT(31).LE.VINT(11)) MINT(51)=1
17724  
17725       ELSEIF(ILIM.EQ.2) THEN
17726 C...Calculate limits on y*
17727         TAUE=TAU
17728         IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINT(26)
17729         TAURT=SQRT(TAUE)
17730 C...0) due to kinematics
17731         YSTMN0=LOG(TAURT)
17732         YSTMX0=-YSTMN0
17733 C...1) due to explicit limits
17734         YSTMN1=CKIN(7)
17735         YSTMX1=CKIN(8)
17736 C...2) due to limits on x1
17737         YSTMN2=LOG(MAX(TAUE,CKIN(21))/TAURT)
17738         YSTMX2=LOG(MAX(TAUE,CKIN(22))/TAURT)
17739 C...3) due to limits on x2
17740         YSTMN3=-LOG(MAX(TAUE,CKIN(24))/TAURT)
17741         YSTMX3=-LOG(MAX(TAUE,CKIN(23))/TAURT)
17742 C...4) due to limits on xF
17743         YEPMN4=0.5D0*ABS(CKIN(25))/TAURT
17744         YSTMN4=SIGN(LOG(MAX(1D-20,SQRT(1D0+YEPMN4**2)+YEPMN4)),CKIN(25))
17745         YEPMX4=0.5D0*ABS(CKIN(26))/TAURT
17746         YSTMX4=SIGN(LOG(MAX(1D-20,SQRT(1D0+YEPMX4**2)+YEPMX4)),CKIN(26))
17747 C...5) due to simultaneous limits on y-large and y-small
17748         YEPSMN=(RM3-RM4)*SINH(CKIN09-CKIN11)
17749         YEPSMX=(RM3-RM4)*SINH(CKIN10-CKIN12)
17750         YDIFMN=ABS(LOG(MAX(1D-20,SQRT(1D0+YEPSMN**2)-YEPSMN)))
17751         YDIFMX=ABS(LOG(MAX(1D-20,SQRT(1D0+YEPSMX**2)-YEPSMX)))
17752         YSTMN5=0.5D0*(CKIN09+CKIN11-YDIFMN)
17753         YSTMX5=0.5D0*(CKIN10+CKIN12+YDIFMX)
17754 C...6) due to simultaneous limits on cos(theta-hat) and y-large or
17755 C...   y-small
17756         CTHLIM=SQRT(MAX(0D0,1D0-4D0*PTHMIN**2/(BE34**2*TAUE*VINT(2))))
17757         RZMN=BE34*MAX(CKIN(27),-CTHLIM)
17758         RZMX=BE34*MIN(CKIN(28),CTHLIM)
17759         YEX3MX=(1D0+RM3-RM4+RZMX)/MAX(1D-10,1D0+RM3-RM4-RZMX)
17760         YEX4MX=(1D0+RM4-RM3-RZMN)/MAX(1D-10,1D0+RM4-RM3+RZMN)
17761         YEX3MN=MAX(1D-10,1D0+RM3-RM4+RZMN)/(1D0+RM3-RM4-RZMN)
17762         YEX4MN=MAX(1D-10,1D0+RM4-RM3-RZMX)/(1D0+RM4-RM3+RZMX)
17763         YSTMN6=CKIN09-0.5D0*LOG(MAX(YEX3MX,YEX4MX))
17764         YSTMX6=CKIN12-0.5D0*LOG(MIN(YEX3MN,YEX4MN))
17765  
17766 C...Net effect of all separate limits.
17767         VINT(12)=MAX(YSTMN0,YSTMN1,YSTMN2,YSTMN3,YSTMN4,YSTMN5,YSTMN6)
17768         VINT(32)=MIN(YSTMX0,YSTMX1,YSTMX2,YSTMX3,YSTMX4,YSTMX5,YSTMX6)
17769         IF(MINT(47).EQ.1) THEN
17770           VINT(12)=-1D-9
17771           VINT(32)=1D-9
17772         ELSEIF(MINT(47).EQ.2.OR.MINT(47).EQ.6) THEN
17773           VINT(12)=(1D0-1D-9)*YSTMX0
17774           VINT(32)=(1D0+1D-9)*YSTMX0
17775         ELSEIF(MINT(47).EQ.3.OR.MINT(47).EQ.7) THEN
17776           VINT(12)=-(1D0+1D-9)*YSTMX0
17777           VINT(32)=-(1D0-1D-9)*YSTMX0
17778         ELSEIF(MINT(47).EQ.5) THEN
17779           YSTEE=LOG((1D0-1D-10)/TAURT)
17780           VINT(12)=MAX(VINT(12),-YSTEE)
17781           VINT(32)=MIN(VINT(32),YSTEE)
17782         ENDIF
17783         IF(VINT(32).LE.VINT(12)) MINT(51)=1
17784  
17785       ELSEIF(ILIM.EQ.3) THEN
17786 C...Calculate limits on cos(theta-hat)
17787         YST=VINT(22)
17788 C...0) due to definition
17789         CTNMN0=-1D0
17790         CTNMX0=0D0
17791         CTPMN0=0D0
17792         CTPMX0=1D0
17793 C...1) due to explicit limits
17794         CTNMN1=MIN(0D0,CKIN(27))
17795         CTNMX1=MIN(0D0,CKIN(28))
17796         CTPMN1=MAX(0D0,CKIN(27))
17797         CTPMX1=MAX(0D0,CKIN(28))
17798 C...2) due to limits on pT-hat
17799         CTNMN2=-SQRT(MAX(0D0,1D0-4D0*PTHMIN**2/(BE34**2*TAU*VINT(2))))
17800         CTPMX2=-CTNMN2
17801         CTNMX2=0D0
17802         CTPMN2=0D0
17803         IF(CKIN(4).GE.0D0) THEN
17804           CTNMX2=-SQRT(MAX(0D0,1D0-4D0*CKIN(4)**2/
17805      &    (BE34**2*TAU*VINT(2))))
17806           CTPMN2=-CTNMX2
17807         ENDIF
17808 C...3) due to limits on y-large and y-small
17809         CTNMN3=MIN(0D0,MAX((1D0+RM3-RM4)/BE34*TANH(CKIN11-YST),
17810      &  -(1D0-RM3+RM4)/BE34*TANH(CKIN10-YST)))
17811         CTNMX3=MIN(0D0,(1D0+RM3-RM4)/BE34*TANH(CKIN12-YST),
17812      &  -(1D0-RM3+RM4)/BE34*TANH(CKIN09-YST))
17813         CTPMN3=MAX(0D0,(1D0+RM3-RM4)/BE34*TANH(CKIN09-YST),
17814      &  -(1D0-RM3+RM4)/BE34*TANH(CKIN12-YST))
17815         CTPMX3=MAX(0D0,MIN((1D0+RM3-RM4)/BE34*TANH(CKIN10-YST),
17816      &  -(1D0-RM3+RM4)/BE34*TANH(CKIN11-YST)))
17817 C...4) due to limits on that
17818         CTNMN4=-1D0
17819         CTNMX4=0D0
17820         CTPMN4=0D0
17821         CTPMX4=1D0
17822         SH=TAU*VINT(2)
17823         IF(CKIN(35).GT.0D0) THEN
17824           CTLIM=(1D0-RM3-RM4-2D0*CKIN(35)/SH)/BE34
17825           IF(CTLIM.GT.0D0) THEN
17826             CTPMX4=CTLIM
17827           ELSE
17828             CTPMX4=0D0
17829             CTNMX4=CTLIM
17830           ENDIF
17831         ENDIF
17832         IF(CKIN(36).GT.0D0) THEN
17833           CTLIM=(1D0-RM3-RM4-2D0*CKIN(36)/SH)/BE34
17834           IF(CTLIM.LT.0D0) THEN
17835             CTNMN4=CTLIM
17836           ELSE
17837             CTNMN4=0D0
17838             CTPMN4=CTLIM
17839           ENDIF
17840         ENDIF
17841 C...5) due to limits on uhat
17842         CTNMN5=-1D0
17843         CTNMX5=0D0
17844         CTPMN5=0D0
17845         CTPMX5=1D0
17846         IF(CKIN(37).GT.0D0) THEN
17847           CTLIM=(2D0*CKIN(37)/SH-(1D0-RM3-RM4))/BE34
17848           IF(CTLIM.LT.0D0) THEN
17849             CTNMN5=CTLIM
17850           ELSE
17851             CTNMN5=0D0
17852             CTPMN5=CTLIM
17853           ENDIF
17854         ENDIF
17855         IF(CKIN(38).GT.0D0) THEN
17856           CTLIM=(2D0*CKIN(38)/SH-(1D0-RM3-RM4))/BE34
17857           IF(CTLIM.GT.0D0) THEN
17858             CTPMX5=CTLIM
17859           ELSE
17860             CTPMX5=0D0
17861             CTNMX5=CTLIM
17862           ENDIF
17863         ENDIF
17864  
17865 C...Net effect of all separate limits.
17866         VINT(13)=MAX(CTNMN0,CTNMN1,CTNMN2,CTNMN3,CTNMN4,CTNMN5)
17867         VINT(33)=MIN(CTNMX0,CTNMX1,CTNMX2,CTNMX3,CTNMX4,CTNMX5)
17868         VINT(14)=MAX(CTPMN0,CTPMN1,CTPMN2,CTPMN3,CTPMN4,CTPMN5)
17869         VINT(34)=MIN(CTPMX0,CTPMX1,CTPMX2,CTPMX3,CTPMX4,CTPMX5)
17870         IF(VINT(33).LE.VINT(13).AND.VINT(34).LE.VINT(14)) MINT(51)=1
17871  
17872       ELSEIF(ILIM.EQ.4) THEN
17873 C...Calculate limits on tau'
17874 C...0) due to kinematics
17875         TAPMN0=TAU
17876         IF(ISTSB.EQ.5.AND.KFPR(ISUB,2).GT.0) THEN
17877           PQRAT=2D0*PMAS(PYCOMP(KFPR(ISUB,2)),1)/VINT(1)
17878           TAPMN0=(SQRT(TAU)+PQRAT)**2
17879         ENDIF
17880         TAPMX0=1D0
17881 C...1) due to explicit limits
17882         TAPMN1=CKIN(31)**2/VINT(2)
17883         TAPMX1=1D0
17884         IF(CKIN(32).GE.0D0) TAPMX1=CKIN(32)**2/VINT(2)
17885  
17886 C...Net effect of all separate limits.
17887         VINT(16)=MAX(TAPMN0,TAPMN1)
17888         VINT(36)=MIN(TAPMX0,TAPMX1)
17889         IF(MINT(47).EQ.1) THEN
17890           VINT(16)=1D0-1D-9
17891           VINT(36)=1D0+1D-9
17892         ELSEIF(MINT(47).EQ.5) THEN
17893           VINT(36)=MIN(VINT(36),1D0-2D-10)
17894         ELSEIF(MINT(47).EQ.6.OR.MINT(47).EQ.7) THEN
17895           VINT(36)=MIN(VINT(36),1D0-1D-10)
17896         ENDIF
17897         IF(VINT(36).LE.VINT(16)) MINT(51)=1
17898  
17899       ENDIF
17900       RETURN
17901  
17902 C...Special case for low-pT and multiple interactions:
17903 C...effective kinematical limits for tau, y*, cos(theta-hat).
17904   100 IF(ILIM.EQ.0) THEN
17905       ELSEIF(ILIM.EQ.1) THEN
17906         IF(MSTP(82).LE.1) THEN
17907           VINT(11)=4D0*(PARP(81)*(VINT(1)/PARP(89))**PARP(90))**2/
17908      &    VINT(2)
17909         ELSE
17910           VINT(11)=(PARP(82)*(VINT(1)/PARP(89))**PARP(90))**2/VINT(2)
17911         ENDIF
17912         VINT(31)=1D0
17913       ELSEIF(ILIM.EQ.2) THEN
17914         VINT(12)=0.5D0*LOG(VINT(21))
17915         VINT(32)=-VINT(12)
17916       ELSEIF(ILIM.EQ.3) THEN
17917         IF(MSTP(82).LE.1) THEN
17918           ST2EFF=4D0*(PARP(81)*(VINT(1)/PARP(89))**PARP(90))**2/
17919      &    (VINT(21)*VINT(2))
17920         ELSE
17921           ST2EFF=0.01D0*(PARP(82)*(VINT(1)/PARP(89))**PARP(90))**2/
17922      &    (VINT(21)*VINT(2))
17923         ENDIF
17924         VINT(13)=-SQRT(MAX(0D0,1D0-ST2EFF))
17925         VINT(33)=0D0
17926         VINT(14)=0D0
17927         VINT(34)=-VINT(13)
17928       ENDIF
17929  
17930       RETURN
17931       END
17932  
17933 C*********************************************************************
17934  
17935 C...PYKMAP
17936 C...Maps a uniform distribution into a distribution of a kinematical
17937 C...variable according to one of the possibilities allowed. It is
17938 C...assumed that kinematical limits have been set by a PYKLIM call.
17939  
17940       SUBROUTINE PYKMAP(IVAR,MVAR,VVAR)
17941  
17942 C...Double precision and integer declarations.
17943       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
17944       IMPLICIT INTEGER(I-N)
17945       INTEGER PYK,PYCHGE,PYCOMP
17946 C...Commonblocks.
17947       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
17948       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
17949       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
17950       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
17951       COMMON/PYINT1/MINT(400),VINT(400)
17952       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
17953       SAVE /PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/
17954  
17955 C...Convert VVAR to tau variable.
17956       ISUB=MINT(1)
17957       ISTSB=ISET(ISUB)
17958       IF(IVAR.EQ.1) THEN
17959         TAUMIN=VINT(11)
17960         TAUMAX=VINT(31)
17961         IF(MVAR.EQ.3.OR.MVAR.EQ.4) THEN
17962           TAURE=VINT(73)
17963           GAMRE=VINT(74)
17964         ELSEIF(MVAR.EQ.5.OR.MVAR.EQ.6) THEN
17965           TAURE=VINT(75)
17966           GAMRE=VINT(76)
17967         ENDIF
17968         IF(MINT(47).EQ.1.AND.(ISTSB.EQ.1.OR.ISTSB.EQ.2)) THEN
17969           TAU=1D0
17970         ELSEIF(MVAR.EQ.1) THEN
17971           TAU=TAUMIN*(TAUMAX/TAUMIN)**VVAR
17972         ELSEIF(MVAR.EQ.2) THEN
17973           TAU=TAUMAX*TAUMIN/(TAUMIN+(TAUMAX-TAUMIN)*VVAR)
17974         ELSEIF(MVAR.EQ.3.OR.MVAR.EQ.5) THEN
17975           RATGEN=(TAURE+TAUMAX)/(TAURE+TAUMIN)*TAUMIN/TAUMAX
17976           TAU=TAURE*TAUMIN/((TAURE+TAUMIN)*RATGEN**VVAR-TAUMIN)
17977         ELSEIF(MVAR.EQ.4.OR.MVAR.EQ.6) THEN
17978           AUPP=ATAN((TAUMAX-TAURE)/GAMRE)
17979           ALOW=ATAN((TAUMIN-TAURE)/GAMRE)
17980           TAU=TAURE+GAMRE*TAN(ALOW+(AUPP-ALOW)*VVAR)
17981         ELSEIF(MINT(47).EQ.5) THEN
17982           AUPP=LOG(MAX(2D-10,1D0-TAUMAX))
17983           ALOW=LOG(MAX(2D-10,1D0-TAUMIN))
17984           TAU=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
17985         ELSE
17986           AUPP=LOG(MAX(1D-10,1D0-TAUMAX))
17987           ALOW=LOG(MAX(1D-10,1D0-TAUMIN))
17988           TAU=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
17989         ENDIF
17990         VINT(21)=MIN(TAUMAX,MAX(TAUMIN,TAU))
17991  
17992 C...Convert VVAR to y* variable.
17993       ELSEIF(IVAR.EQ.2) THEN
17994         YSTMIN=VINT(12)
17995         YSTMAX=VINT(32)
17996         TAUE=VINT(21)
17997         IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=VINT(26)
17998         IF(MINT(47).EQ.1) THEN
17999           YST=0D0
18000         ELSEIF(MINT(47).EQ.2.OR.MINT(47).EQ.6) THEN
18001           YST=-0.5D0*LOG(TAUE)
18002         ELSEIF(MINT(47).EQ.3.OR.MINT(47).EQ.7) THEN
18003           YST=0.5D0*LOG(TAUE)
18004         ELSEIF(MVAR.EQ.1) THEN
18005           YST=YSTMIN+(YSTMAX-YSTMIN)*SQRT(VVAR)
18006         ELSEIF(MVAR.EQ.2) THEN
18007           YST=YSTMAX-(YSTMAX-YSTMIN)*SQRT(1D0-VVAR)
18008         ELSEIF(MVAR.EQ.3) THEN
18009           AUPP=ATAN(EXP(YSTMAX))
18010           ALOW=ATAN(EXP(YSTMIN))
18011           YST=LOG(TAN(ALOW+(AUPP-ALOW)*VVAR))
18012         ELSEIF(MVAR.EQ.4) THEN
18013           YST0=-0.5D0*LOG(TAUE)
18014           AUPP=LOG(MAX(1D-10,EXP(YST0-YSTMIN)-1D0))
18015           ALOW=LOG(MAX(1D-10,EXP(YST0-YSTMAX)-1D0))
18016           YST=YST0-LOG(1D0+EXP(ALOW+VVAR*(AUPP-ALOW)))
18017         ELSE
18018           YST0=-0.5D0*LOG(TAUE)
18019           AUPP=LOG(MAX(1D-10,EXP(YST0+YSTMIN)-1D0))
18020           ALOW=LOG(MAX(1D-10,EXP(YST0+YSTMAX)-1D0))
18021           YST=LOG(1D0+EXP(AUPP+VVAR*(ALOW-AUPP)))-YST0
18022         ENDIF
18023         VINT(22)=MIN(YSTMAX,MAX(YSTMIN,YST))
18024  
18025 C...Convert VVAR to cos(theta-hat) variable.
18026       ELSEIF(IVAR.EQ.3) THEN
18027         RM34=MAX(1D-20,2D0*VINT(63)*VINT(64)/(VINT(21)*VINT(2))**2)
18028         RSQM=1D0+RM34
18029         IF(2D0*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001D0)
18030      &  RM34=MAX(RM34,2D0*VINT(71)**2/(VINT(21)*VINT(2)))
18031         CTNMIN=VINT(13)
18032         CTNMAX=VINT(33)
18033         CTPMIN=VINT(14)
18034         CTPMAX=VINT(34)
18035         IF(MVAR.EQ.1) THEN
18036           ANEG=CTNMAX-CTNMIN
18037           APOS=CTPMAX-CTPMIN
18038           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18039             VCTN=VVAR*(ANEG+APOS)/ANEG
18040             CTH=CTNMIN+(CTNMAX-CTNMIN)*VCTN
18041           ELSE
18042             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18043             CTH=CTPMIN+(CTPMAX-CTPMIN)*VCTP
18044           ENDIF
18045         ELSEIF(MVAR.EQ.2) THEN
18046           RMNMIN=MAX(RM34,RSQM-CTNMIN)
18047           RMNMAX=MAX(RM34,RSQM-CTNMAX)
18048           RMPMIN=MAX(RM34,RSQM-CTPMIN)
18049           RMPMAX=MAX(RM34,RSQM-CTPMAX)
18050           ANEG=LOG(RMNMIN/RMNMAX)
18051           APOS=LOG(RMPMIN/RMPMAX)
18052           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18053             VCTN=VVAR*(ANEG+APOS)/ANEG
18054             CTH=RSQM-RMNMIN*(RMNMAX/RMNMIN)**VCTN
18055           ELSE
18056             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18057             CTH=RSQM-RMPMIN*(RMPMAX/RMPMIN)**VCTP
18058           ENDIF
18059         ELSEIF(MVAR.EQ.3) 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(RMNMAX/RMNMIN)
18065           APOS=LOG(RMPMAX/RMPMIN)
18066           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18067             VCTN=VVAR*(ANEG+APOS)/ANEG
18068             CTH=RMNMIN*(RMNMAX/RMNMIN)**VCTN-RSQM
18069           ELSE
18070             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18071             CTH=RMPMIN*(RMPMAX/RMPMIN)**VCTP-RSQM
18072           ENDIF
18073         ELSEIF(MVAR.EQ.4) 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=1D0/RMNMAX-1D0/RMNMIN
18079           APOS=1D0/RMPMAX-1D0/RMPMIN
18080           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18081             VCTN=VVAR*(ANEG+APOS)/ANEG
18082             CTH=RSQM-1D0/(1D0/RMNMIN+ANEG*VCTN)
18083           ELSE
18084             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18085             CTH=RSQM-1D0/(1D0/RMPMIN+APOS*VCTP)
18086           ENDIF
18087         ELSEIF(MVAR.EQ.5) 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/RMNMIN-1D0/RMNMAX
18093           APOS=1D0/RMPMIN-1D0/RMPMAX
18094           IF(ANEG.GT.0D0.AND.VVAR*(ANEG+APOS).LE.ANEG) THEN
18095             VCTN=VVAR*(ANEG+APOS)/ANEG
18096             CTH=1D0/(1D0/RMNMIN-ANEG*VCTN)-RSQM
18097           ELSE
18098             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS
18099             CTH=1D0/(1D0/RMPMIN-APOS*VCTP)-RSQM
18100           ENDIF
18101         ENDIF
18102         IF(CTH.LT.0D0) CTH=MIN(CTNMAX,MAX(CTNMIN,CTH))
18103         IF(CTH.GT.0D0) CTH=MIN(CTPMAX,MAX(CTPMIN,CTH))
18104         VINT(23)=CTH
18105  
18106 C...Convert VVAR to tau' variable.
18107       ELSEIF(IVAR.EQ.4) THEN
18108         TAU=VINT(21)
18109         TAUPMN=VINT(16)
18110         TAUPMX=VINT(36)
18111         IF(MINT(47).EQ.1) THEN
18112           TAUP=1D0
18113         ELSEIF(MVAR.EQ.1) THEN
18114           TAUP=TAUPMN*(TAUPMX/TAUPMN)**VVAR
18115         ELSEIF(MVAR.EQ.2) THEN
18116           AUPP=(1D0-TAU/TAUPMX)**4
18117           ALOW=(1D0-TAU/TAUPMN)**4
18118           TAUP=TAU/MAX(1D-10,1D0-(ALOW+(AUPP-ALOW)*VVAR)**0.25D0)
18119         ELSEIF(MINT(47).EQ.5) THEN
18120           AUPP=LOG(MAX(2D-10,1D0-TAUPMX))
18121           ALOW=LOG(MAX(2D-10,1D0-TAUPMN))
18122           TAUP=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
18123         ELSE
18124           AUPP=LOG(MAX(1D-10,1D0-TAUPMX))
18125           ALOW=LOG(MAX(1D-10,1D0-TAUPMN))
18126           TAUP=1D0-EXP(AUPP+VVAR*(ALOW-AUPP))
18127         ENDIF
18128         VINT(26)=MIN(TAUPMX,MAX(TAUPMN,TAUP))
18129  
18130 C...Selection of extra variables needed in 2 -> 3 process:
18131 C...pT1, pT2, phi1, phi2, y3 for three outgoing particles.
18132 C...Since no options are available, the functions of PYKLIM
18133 C...and PYKMAP are joint for these choices.
18134       ELSEIF(IVAR.EQ.5) THEN
18135  
18136 C...Read out total energy and particle masses.
18137         MINT(51)=0
18138         MPTPK=1
18139         IF(ISUB.EQ.123.OR.ISUB.EQ.124.OR.ISUB.EQ.173.OR.ISUB.EQ.174
18140      &  .OR.ISUB.EQ.178.OR.ISUB.EQ.179.OR.ISUB.EQ.351.OR.ISUB.EQ.352) 
18141      &  MPTPK=2
18142         SHP=VINT(26)*VINT(2)
18143         SHPR=SQRT(SHP)
18144         PM1=VINT(201)
18145         PM2=VINT(206)
18146         PM3=SQRT(VINT(21))*VINT(1)
18147         IF(PM1+PM2+PM3.GT.0.9999D0*SHPR) THEN
18148           MINT(51)=1
18149           RETURN
18150         ENDIF
18151         PMRS1=VINT(204)**2
18152         PMRS2=VINT(209)**2
18153  
18154 C...Specify coefficients of pT choice; upper and lower limits.
18155         IF(MPTPK.EQ.1) THEN
18156           HWT1=0.4D0
18157           HWT2=0.4D0
18158         ELSE
18159           HWT1=0.05D0
18160           HWT2=0.05D0
18161         ENDIF
18162         HWT3=1D0-HWT1-HWT2
18163         PTSMX1=((SHP-PM1**2-(PM2+PM3)**2)**2-(2D0*PM1*(PM2+PM3))**2)/
18164      &  (4D0*SHP)
18165         IF(CKIN(52).GT.0D0) PTSMX1=MIN(PTSMX1,CKIN(52)**2)
18166         PTSMN1=CKIN(51)**2
18167         PTSMX2=((SHP-PM2**2-(PM1+PM3)**2)**2-(2D0*PM2*(PM1+PM3))**2)/
18168      &  (4D0*SHP)
18169         IF(CKIN(54).GT.0D0) PTSMX2=MIN(PTSMX2,CKIN(54)**2)
18170         PTSMN2=CKIN(53)**2
18171  
18172 C...Select transverse momenta according to
18173 C...dp_T^2 * (a + b/(M^2 + p_T^2) + c/(M^2 + p_T^2)^2).
18174         HMX=PMRS1+PTSMX1
18175         HMN=PMRS1+PTSMN1
18176         IF(HMX.LT.1.0001D0*HMN) THEN
18177           MINT(51)=1
18178           RETURN
18179         ENDIF
18180         HDE=PTSMX1-PTSMN1
18181         RPT=PYR(0)
18182         IF(RPT.LT.HWT1) THEN
18183           PTS1=PTSMN1+PYR(0)*HDE
18184         ELSEIF(RPT.LT.HWT1+HWT2) THEN
18185           PTS1=MAX(PTSMN1,HMN*(HMX/HMN)**PYR(0)-PMRS1)
18186         ELSE
18187           PTS1=MAX(PTSMN1,HMN*HMX/(HMN+PYR(0)*HDE)-PMRS1)
18188         ENDIF
18189         WTPTS1=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS1+PTS1))+
18190      &  HWT3*HMN*HMX/(PMRS1+PTS1)**2)
18191         HMX=PMRS2+PTSMX2
18192         HMN=PMRS2+PTSMN2
18193         IF(HMX.LT.1.0001D0*HMN) THEN
18194           MINT(51)=1
18195           RETURN
18196         ENDIF
18197         HDE=PTSMX2-PTSMN2
18198         RPT=PYR(0)
18199         IF(RPT.LT.HWT1) THEN
18200           PTS2=PTSMN2+PYR(0)*HDE
18201         ELSEIF(RPT.LT.HWT1+HWT2) THEN
18202           PTS2=MAX(PTSMN2,HMN*(HMX/HMN)**PYR(0)-PMRS2)
18203         ELSE
18204           PTS2=MAX(PTSMN2,HMN*HMX/(HMN+PYR(0)*HDE)-PMRS2)
18205         ENDIF
18206         WTPTS2=HDE/(HWT1+HWT2*HDE/(LOG(HMX/HMN)*(PMRS2+PTS2))+
18207      &  HWT3*HMN*HMX/(PMRS2+PTS2)**2)
18208  
18209 C...Select azimuthal angles and check pT choice.
18210         PHI1=PARU(2)*PYR(0)
18211         PHI2=PARU(2)*PYR(0)
18212         PHIR=PHI2-PHI1
18213         PTS3=MAX(0D0,PTS1+PTS2+2D0*SQRT(PTS1*PTS2)*COS(PHIR))
18214         IF(PTS3.LT.CKIN(55)**2.OR.(CKIN(56).GT.0D0.AND.PTS3.GT.
18215      &  CKIN(56)**2)) THEN
18216           MINT(51)=1
18217           RETURN
18218         ENDIF
18219  
18220 C...Calculate transverse masses and check phase space not closed.
18221         PMS1=PM1**2+PTS1
18222         PMS2=PM2**2+PTS2
18223         PMS3=PM3**2+PTS3
18224         PMT1=SQRT(PMS1)
18225         PMT2=SQRT(PMS2)
18226         PMT3=SQRT(PMS3)
18227         PM12=(PMT1+PMT2)**2
18228         IF(PMT1+PMT2+PMT3.GT.0.9999D0*SHPR) THEN
18229           MINT(51)=1
18230           RETURN
18231         ENDIF
18232  
18233 C...Select rapidity for particle 3 and check phase space not closed.
18234         Y3MAX=LOG((SHP+PMS3-PM12+SQRT(MAX(0D0,(SHP-PMS3-PM12)**2-
18235      &  4D0*PMS3*PM12)))/(2D0*SHPR*PMT3))
18236         IF(Y3MAX.LT.1D-6) THEN
18237           MINT(51)=1
18238           RETURN
18239         ENDIF
18240         Y3=(2D0*PYR(0)-1D0)*0.999999D0*Y3MAX
18241         PZ3=PMT3*SINH(Y3)
18242         PE3=PMT3*COSH(Y3)
18243  
18244 C...Find momentum transfers in two mirror solutions (in 1-2 frame).
18245         PZ12=-PZ3
18246         PE12=SHPR-PE3
18247         PMS12=PE12**2-PZ12**2
18248         SQL12=SQRT(MAX(0D0,(PMS12-PMS1-PMS2)**2-4D0*PMS1*PMS2))
18249         IF(SQL12.LT.1D-6*SHP) THEN
18250           MINT(51)=1
18251           RETURN
18252         ENDIF
18253         PMM1=PMS12+PMS1-PMS2
18254         PMM2=PMS12+PMS2-PMS1
18255         TFAC=-SHPR/(2D0*PMS12)
18256         T1P=TFAC*(PE12-PZ12)*(PMM1-SQL12)
18257         T1N=TFAC*(PE12-PZ12)*(PMM1+SQL12)
18258         T2P=TFAC*(PE12+PZ12)*(PMM2-SQL12)
18259         T2N=TFAC*(PE12+PZ12)*(PMM2+SQL12)
18260  
18261 C...Construct relative mirror weights and make choice.
18262         IF(MPTPK.EQ.1.OR.ISUB.EQ.351.OR.ISUB.EQ.352) THEN
18263           WTPU=1D0
18264           WTNU=1D0
18265         ELSE
18266           WTPU=1D0/((T1P-PMRS1)*(T2P-PMRS2))**2
18267           WTNU=1D0/((T1N-PMRS1)*(T2N-PMRS2))**2
18268         ENDIF
18269         WTP=WTPU/(WTPU+WTNU)
18270         WTN=WTNU/(WTPU+WTNU)
18271         EPS=1D0
18272         IF(WTN.GT.PYR(0)) EPS=-1D0
18273  
18274 C...Store result of variable choice and associated weights.
18275         VINT(202)=PTS1
18276         VINT(207)=PTS2
18277         VINT(203)=PHI1
18278         VINT(208)=PHI2
18279         VINT(205)=WTPTS1
18280         VINT(210)=WTPTS2
18281         VINT(211)=Y3
18282         VINT(212)=Y3MAX
18283         VINT(213)=EPS
18284         IF(EPS.GT.0D0) THEN
18285           VINT(214)=1D0/WTP
18286           VINT(215)=T1P
18287           VINT(216)=T2P
18288         ELSE
18289           VINT(214)=1D0/WTN
18290           VINT(215)=T1N
18291           VINT(216)=T2N
18292         ENDIF
18293         VINT(217)=-0.5D0*TFAC*(PE12-PZ12)*(PMM2+EPS*SQL12)
18294         VINT(218)=-0.5D0*TFAC*(PE12+PZ12)*(PMM1+EPS*SQL12)
18295         VINT(219)=0.5D0*(PMS12-PTS3)
18296         VINT(220)=SQL12
18297       ENDIF
18298  
18299       RETURN
18300       END
18301  
18302 C***********************************************************************
18303  
18304 C...PYSIGH
18305 C...Differential matrix elements for all included subprocesses
18306 C...Note that what is coded is (disregarding the COMFAC factor)
18307 C...1) for 2 -> 1 processes: s-hat/pi*d(sigma-hat), where,
18308 C...when d(sigma-hat) is given in the zero-width limit, the delta
18309 C...function in tau is replaced by a (modified) Breit-Wigner:
18310 C...1/pi*s*H_res/((s*tau-m_res^2)^2+H_res^2),
18311 C...where H_res = s-hat/m_res*Gamma_res(s-hat);
18312 C...2) for 2 -> 2 processes: (s-hat)**2/pi*d(sigma-hat)/d(t-hat);
18313 C...i.e., dimensionless quantities
18314 C...3) for 2 -> 3 processes: abs(M)^2, where the total cross-section is
18315 C...Integral abs(M)^2/(2shat') * (prod_(i=1)^3 d^3p_i/((2pi)^3*2E_i)) *
18316 C...(2pi)^4 delta^4(P - sum p_i)
18317 C...COMFAC contains the factor pi/s (or equivalent) and
18318 C...the conversion factor from GeV^-2 to mb
18319  
18320       SUBROUTINE PYSIGH(NCHN,SIGS)
18321  
18322 C...Double precision and integer declarations
18323       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
18324       IMPLICIT INTEGER(I-N)
18325       INTEGER PYK,PYCHGE,PYCOMP
18326 C...Parameter statement to help give large particle numbers.
18327       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
18328 C...Commonblocks
18329       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
18330       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
18331       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
18332       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
18333       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
18334       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
18335       COMMON/PYINT1/MINT(400),VINT(400)
18336       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
18337       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
18338       COMMON/PYINT4/MWID(500),WIDS(500,5)
18339       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
18340       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
18341       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
18342      &SFMIX(16,4)
18343       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYSUBS/,/PYPARS/,
18344      &/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,/PYINT5/,/PYINT7/,
18345      &/PYSSMT/
18346 C...Local arrays and complex variables
18347       DIMENSION X(2),XPQ(-25:25),KFAC(2,-40:40),WDTP(0:200),
18348      &WDTE(0:200,0:5),HGZ(6,3),HL3(3),HR3(3),HL4(3),HR4(3)
18349       COMPLEX A004,A204,A114,A00U,A20U,A11U
18350       COMPLEX CIGTOT,CIZTOT,F0ALP,F1ALP,F2ALP,F0BET,F1BET,F2BET,FIF,
18351      &COULCK,COULCP,COULCD,COULCR,COULCS
18352       REAL A00L,A11L,A20L,COULXX
18353       COMPLEX*16 SSMZ,SSMR,SSMO,DETD,F2L,F2R,DARHO,DZRHO,DAOME,DZOME,
18354      &DAA,DZZ,DAZ
18355  
18356 C...Reset number of channels and cross-section
18357       NCHN=0
18358       SIGS=0D0
18359  
18360 C...Convert H or A process into equivalent h one
18361       ISUB=MINT(1)
18362       ISUBSV=ISUB
18363       IHIGG=1
18364       KFHIGG=25
18365       IF((ISUB.GE.151.AND.ISUB.LE.160).OR.(ISUB.GE.171.AND.
18366      &ISUB.LE.190)) THEN
18367         IHIGG=2
18368         IF(MOD(ISUB-1,10).GE.5) IHIGG=3
18369         KFHIGG=33+IHIGG
18370         IF(ISUB.EQ.151.OR.ISUB.EQ.156) ISUB=3
18371         IF(ISUB.EQ.152.OR.ISUB.EQ.157) ISUB=102
18372         IF(ISUB.EQ.153.OR.ISUB.EQ.158) ISUB=103
18373         IF(ISUB.EQ.171.OR.ISUB.EQ.176) ISUB=24
18374         IF(ISUB.EQ.172.OR.ISUB.EQ.177) ISUB=26
18375         IF(ISUB.EQ.173.OR.ISUB.EQ.178) ISUB=123
18376         IF(ISUB.EQ.174.OR.ISUB.EQ.179) ISUB=124
18377         IF(ISUB.EQ.181.OR.ISUB.EQ.186) ISUB=121
18378         IF(ISUB.EQ.182.OR.ISUB.EQ.187) ISUB=122
18379       ENDIF
18380 
18381 CMRENNA++
18382 C...Convert almost equivalent SUSY processes into each other
18383 C...Extract differences in flavours and couplings
18384       IF(ISUB.GE.200.AND.ISUB.LE.301) THEN
18385  
18386 C...Sleptons and sneutrinos
18387         IF(ISUB.EQ.201.OR.ISUB.EQ.204.OR.ISUB.EQ.207) THEN
18388           KFID=MOD(KFPR(ISUB,1),KSUSY1)
18389           ISUB=201
18390           ILR=0
18391         ELSEIF(ISUB.EQ.202.OR.ISUB.EQ.205.OR.ISUB.EQ.208) THEN
18392           KFID=MOD(KFPR(ISUB,1),KSUSY1)
18393           ISUB=201
18394           ILR=1
18395         ELSEIF(ISUB.EQ.203.OR.ISUB.EQ.206.OR.ISUB.EQ.209) THEN
18396           KFID=MOD(KFPR(ISUB,1),KSUSY1)
18397           ISUB=203
18398         ELSEIF(ISUB.GE.210.AND.ISUB.LE.212) THEN
18399           IF(ISUB.EQ.210) THEN
18400             RKF=2.0D0
18401           ELSEIF(ISUB.EQ.211) THEN
18402             RKF=SFMIX(15,1)**2
18403           ELSEIF(ISUB.EQ.212) THEN
18404             RKF=SFMIX(15,2)**2
18405           ENDIF
18406           ISUB=210
18407         ELSEIF(ISUB.EQ.213.OR.ISUB.EQ.214) THEN
18408           IF(ISUB.EQ.213) THEN
18409             KFID=MOD(KFPR(ISUB,1),KSUSY1)
18410             RKF=2.0D0
18411           ELSEIF(ISUB.EQ.214) THEN
18412             KFID=16
18413             RKF=1.0D0
18414           ENDIF
18415           ISUB=213
18416  
18417 C...Neutralinos
18418         ELSEIF(ISUB.GE.216.AND.ISUB.LE.225) THEN
18419           IF(ISUB.EQ.216) THEN
18420             IZID1=1
18421             IZID2=1
18422           ELSEIF(ISUB.EQ.217) THEN
18423             IZID1=2
18424             IZID2=2
18425           ELSEIF(ISUB.EQ.218) THEN
18426             IZID1=3
18427             IZID2=3
18428           ELSEIF(ISUB.EQ.219) THEN
18429             IZID1=4
18430             IZID2=4
18431           ELSEIF(ISUB.EQ.220) THEN
18432             IZID1=1
18433             IZID2=2
18434           ELSEIF(ISUB.EQ.221) THEN
18435             IZID1=1
18436             IZID2=3
18437           ELSEIF(ISUB.EQ.222) THEN
18438             IZID1=1
18439             IZID2=4
18440           ELSEIF(ISUB.EQ.223) THEN
18441             IZID1=2
18442             IZID2=3
18443           ELSEIF(ISUB.EQ.224) THEN
18444             IZID1=2
18445             IZID2=4
18446           ELSEIF(ISUB.EQ.225) THEN
18447             IZID1=3
18448             IZID2=4
18449           ENDIF
18450           ISUB=216
18451  
18452 C...Charginos
18453         ELSEIF(ISUB.GE.226.AND.ISUB.LE.228) THEN
18454           IF(ISUB.EQ.226) THEN
18455             IZID1=1
18456             IZID2=1
18457           ELSEIF(ISUB.EQ.227) THEN
18458             IZID1=2
18459             IZID2=2
18460           ELSEIF(ISUB.EQ.228) THEN
18461             IZID1=1
18462             IZID2=2
18463           ENDIF
18464           ISUB=226
18465  
18466 C...Neutralino + chargino
18467         ELSEIF(ISUB.GE.229.AND.ISUB.LE.236) THEN
18468           IF(ISUB.EQ.229) THEN
18469             IZID1=1
18470             IZID2=1
18471           ELSEIF(ISUB.EQ.230) THEN
18472             IZID1=1
18473             IZID2=2
18474           ELSEIF(ISUB.EQ.231) THEN
18475             IZID1=1
18476             IZID2=3
18477           ELSEIF(ISUB.EQ.232) THEN
18478             IZID1=1
18479             IZID2=4
18480           ELSEIF(ISUB.EQ.233) THEN
18481             IZID1=2
18482             IZID2=1
18483           ELSEIF(ISUB.EQ.234) THEN
18484             IZID1=2
18485             IZID2=2
18486           ELSEIF(ISUB.EQ.235) THEN
18487             IZID1=2
18488             IZID2=3
18489           ELSEIF(ISUB.EQ.236) THEN
18490             IZID1=2
18491             IZID2=4
18492           ENDIF
18493           ISUB=229
18494  
18495 C...Gluino + neutralino
18496         ELSEIF(ISUB.GE.237.AND.ISUB.LE.240) THEN
18497           IF(ISUB.EQ.237) THEN
18498             IZID=1
18499           ELSEIF(ISUB.EQ.238) THEN
18500             IZID=2
18501           ELSEIF(ISUB.EQ.239) THEN
18502             IZID=3
18503           ELSEIF(ISUB.EQ.240) THEN
18504             IZID=4
18505           ENDIF
18506           ISUB=237
18507  
18508 C...Gluino + chargino
18509         ELSEIF(ISUB.GE.241.AND.ISUB.LE.242) THEN
18510           IF(ISUB.EQ.241) THEN
18511             IZID=1
18512           ELSEIF(ISUB.EQ.242) THEN
18513             IZID=2
18514           ENDIF
18515           ISUB=241
18516  
18517 C...Squark + neutralino
18518         ELSEIF(ISUB.GE.246.AND.ISUB.LE.253) THEN
18519           ILR=0
18520           IF(MOD(ISUB,2).NE.0) ILR=1
18521           IF(ISUB.LE.247) THEN
18522             IZID=1
18523           ELSEIF(ISUB.LE.249) THEN
18524             IZID=2
18525           ELSEIF(ISUB.LE.251) THEN
18526             IZID=3
18527           ELSEIF(ISUB.LE.253) THEN
18528             IZID=4
18529           ENDIF
18530           ISUB=246
18531           RKF=5D0
18532  
18533 C...Squark + chargino
18534         ELSEIF(ISUB.GE.254.AND.ISUB.LE.257) THEN
18535           IF(ISUB.LE.255) THEN
18536             IZID=1
18537           ELSEIF(ISUB.LE.257) THEN
18538             IZID=2
18539           ENDIF
18540           IF(MOD(ISUB,2).EQ.0) THEN
18541             ILR=0
18542           ELSE
18543             ILR=1
18544           ENDIF
18545           ISUB=254
18546           RKF=5D0
18547  
18548 C...Squark + gluino
18549         ELSEIF(ISUB.EQ.258.OR.ISUB.EQ.259) THEN
18550           ISUB=258
18551           RKF=4D0
18552  
18553 C...Stops
18554         ELSEIF(ISUB.EQ.261.OR.ISUB.EQ.262) THEN
18555           ILR=0
18556           IF(ISUB.EQ.262) ILR=1
18557           ISUB=261
18558         ELSEIF(ISUB.EQ.265) THEN
18559           ISUB=264
18560  
18561 C...Squarks
18562         ELSEIF(ISUB.GE.271.AND.ISUB.LE.280) THEN
18563           ILR=0
18564           IF(ISUB.LE.273) THEN
18565             IF(ISUB.EQ.273) ILR=1
18566             ISUB=271
18567             RKF=16D0
18568           ELSEIF(ISUB.LE.276) THEN
18569             IF(ISUB.EQ.276) ILR=1
18570             ISUB=274
18571             RKF=16D0
18572           ELSEIF(ISUB.LE.278) THEN
18573             IF(ISUB.EQ.278) ILR=1
18574             ISUB=277
18575             RKF=4D0
18576           ELSE
18577             IF(ISUB.EQ.280) ILR=1
18578             ISUB=279
18579             RKF=4D0
18580           ENDIF
18581 C...Sbottoms
18582         ELSEIF(ISUB.GE.281.AND.ISUB.LE.296) THEN
18583           ILR=0
18584           IF(ISUB.LE.283) THEN
18585             IF(ISUB.EQ.283) ILR=1
18586             ISUB=271
18587             RKF=4D0
18588           ELSEIF(ISUB.LE.286) THEN
18589             IF(ISUB.EQ.286) ILR=1
18590             ISUB=274
18591             RKF=4D0
18592           ELSEIF(ISUB.LE.288) THEN
18593             IF(ISUB.EQ.288) ILR=1
18594             ISUB=277
18595             RKF=1D0
18596           ELSEIF(ISUB.LE.290) THEN
18597             IF(ISUB.EQ.290) ILR=1
18598             ISUB=279
18599             RKF=1D0
18600           ELSEIF(ISUB.LE.293) THEN
18601             IF(ISUB.EQ.293) ILR=1
18602             ISUB=271
18603             RKF=1D0
18604           ELSEIF(ISUB.EQ.296) THEN
18605             ILR=1
18606             ISUB=274
18607             RKF=1D0
18608 C...Squark + gluino
18609           ELSEIF(ISUB.EQ.294.OR.ISUB.EQ.295) THEN
18610             ISUB=258
18611             RKF=1D0
18612           ENDIF
18613 C...H+/- + H0
18614         ELSEIF(ISUB.EQ.297.OR.ISUB.EQ.298) THEN
18615           IF(ISUB.EQ.297) THEN
18616             RKF=.5D0*PARU(195)**2
18617           ELSEIF(ISUB.EQ.298) THEN
18618             RKF=.5D0*(1D0-PARU(195)**2)
18619           ENDIF
18620           ISUB=210
18621 C...A0 + H0
18622         ELSEIF(ISUB.EQ.299.OR.ISUB.EQ.300) THEN
18623           IF(ISUB.EQ.299) THEN
18624             RKF=PARU(186)**2
18625           ELSEIF(ISUB.EQ.300) THEN
18626             RKF=PARU(187)**2
18627           ENDIF
18628           ISUB=213
18629 C...H+ + H-
18630         ELSEIF(ISUB.EQ.301) THEN
18631           KFID=37
18632           RKF=1D0
18633           ISUB=201
18634         ENDIF
18635       ELSEIF(ISUB.GE.361.AND.ISUB.LE.379) THEN
18636         SQTV=PARJ(172)**2
18637         SQTA=PARJ(173)**2
18638         TANW=SQRT(PARU(102)/(1D0-PARU(102)))
18639         CT2W=(1D0-2D0*PARU(102))/(2D0*PARU(102)/TANW)
18640         CSXI=COS(ASIN(PARP(141)))
18641         CSXIP=COS(ASIN(PARJ(174)))
18642         QUPD=2D0*PARP(143)-1D0
18643 C... rho_tech0 -> W_L W_L
18644         IF(ISUB.EQ.361) THEN
18645            KFA=24
18646            KFB=24
18647            CAB2=PARP(141)**4
18648 C... rho_tech0 -> W_L pi_tech-
18649         ELSEIF(ISUB.EQ.362) THEN
18650            KFA=24
18651            KFB=52
18652            ISUB=361
18653            CAB2=PARP(141)**2*(1D0-PARP(141)**2)
18654 C... pi_tech pi_tech
18655         ELSEIF(ISUB.EQ.363) THEN
18656            KFA=52
18657            KFB=52
18658            ISUB=361
18659            CAB2=(1D0-PARP(141)**2)**2
18660 C... rho_tech0/omega_tech -> gamma pi_tech
18661         ELSEIF(ISUB.EQ.364) THEN
18662            KFA=22
18663            KFB=51
18664            VOGP=CSXI
18665            VRGP=VOGP*QUPD
18666            AOGP=0D0
18667            ARGP=0D0
18668 C... gamma pi_tech'
18669         ELSEIF(ISUB.EQ.365) THEN
18670            KFA=22
18671            KFB=53
18672            ISUB=364
18673            VRGP=CSXIP
18674            VOGP=VRGP*QUPD
18675            AOGP=0D0
18676            ARGP=0D0
18677 C... Z pi_tech
18678         ELSEIF(ISUB.EQ.366) THEN
18679            KFA=23
18680            KFB=51
18681            ISUB=364
18682            VOGP=CSXI*CT2W
18683            VRGP=-QUPD*CSXI*TANW
18684            AOGP=0D0
18685            ARGP=0D0
18686 C... Z pi_tech'
18687         ELSEIF(ISUB.EQ.367) THEN
18688            KFA=23
18689            KFB=53
18690            ISUB=364
18691            VRGP=CSXIP*CT2W
18692            VOGP=-QUPD*CSXIP*TANW
18693            AOGP=0D0
18694            ARGP=0D0
18695 C... W_T pi_tech
18696         ELSEIF(ISUB.EQ.368) THEN
18697            KFA=24
18698            KFB=52
18699            ISUB=364
18700            VOGP=CSXI/(2D0*SQRT(PARU(102)))
18701            VRGP=0D0
18702            AOGP=0D0
18703            ARGP=-VOGP
18704 C... rho_tech+ -> W_L Z_L
18705         ELSEIF(ISUB.EQ.370) THEN
18706            KFA=24
18707            KFB=23
18708            CAB2=PARP(141)**4
18709 C... W_L pi_tech0
18710         ELSEIF(ISUB.EQ.371) THEN
18711            KFA=24
18712            KFB=51
18713            ISUB=370
18714            CAB2=PARP(141)**2*(1D0-PARP(141)**2)
18715 C... Z_L pi_tech+
18716         ELSEIF(ISUB.EQ.372) THEN
18717            KFA=52
18718            KFB=23
18719            ISUB=370
18720            CAB2=PARP(141)**2*(1D0-PARP(141)**2)
18721 C... pi_tech+ pi_tech0
18722         ELSEIF(ISUB.EQ.373) THEN
18723            KFA=52
18724            KFB=51
18725            ISUB=370
18726            CAB2=(1D0-PARP(141)**2)**2
18727 C... gamma pi_tech+
18728         ELSEIF(ISUB.EQ.374) THEN
18729            KFA=52
18730            KFB=22
18731            VRGP=QUPD*CSXI
18732            ARGP=0D0
18733 C... Z_T pi_tech+
18734         ELSEIF(ISUB.EQ.375) THEN
18735            KFA=52
18736            KFB=23
18737            ISUB=374
18738            VRGP=-QUPD*CSXI*TANW
18739            ARGP=CSXI/(2D0*SQRT(PARU(102)*(1D0-PARU(102))))
18740 C... W_T pi_tech0
18741         ELSEIF(ISUB.EQ.376) THEN
18742            KFA=24
18743            KFB=51
18744            ISUB=374
18745            VRGP=0D0
18746            ARGP=-CSXI/(2D0*SQRT(PARU(102)))
18747 C... W_T pi_tech0'
18748         ELSEIF(ISUB.EQ.377) THEN
18749            KFA=24
18750            KFB=53
18751            ISUB=374
18752            ARGP=0D0
18753            VRGP=CSXIP/(2D0*SQRT(PARU(102)))
18754         ENDIF
18755       ENDIF
18756 CMRENNA--
18757  
18758 C...Read kinematical variables and limits
18759       ISTSB=ISET(ISUBSV)
18760       TAUMIN=VINT(11)
18761       YSTMIN=VINT(12)
18762       CTNMIN=VINT(13)
18763       CTPMIN=VINT(14)
18764       TAUPMN=VINT(16)
18765       TAU=VINT(21)
18766       YST=VINT(22)
18767       CTH=VINT(23)
18768       XT2=VINT(25)
18769       TAUP=VINT(26)
18770       TAUMAX=VINT(31)
18771       YSTMAX=VINT(32)
18772       CTNMAX=VINT(33)
18773       CTPMAX=VINT(34)
18774       TAUPMX=VINT(36)
18775  
18776 C...Derive kinematical quantities
18777       TAUE=TAU
18778       IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUE=TAUP
18779       X(1)=SQRT(TAUE)*EXP(YST)
18780       X(2)=SQRT(TAUE)*EXP(-YST)
18781       IF(MINT(45).EQ.2.AND.ISTSB.GE.1) THEN
18782         IF(X(1).GT.1D0-1D-7) RETURN
18783       ELSEIF(MINT(45).EQ.3) THEN
18784         X(1)=MIN(1D0-1.1D-10,X(1))
18785       ENDIF
18786       IF(MINT(46).EQ.2.AND.ISTSB.GE.1) THEN
18787         IF(X(2).GT.1D0-1D-7) RETURN
18788       ELSEIF(MINT(46).EQ.3) THEN
18789         X(2)=MIN(1D0-1.1D-10,X(2))
18790       ENDIF
18791       SH=MAX(1D0,TAU*VINT(2))
18792       SQM3=VINT(63)
18793       SQM4=VINT(64)
18794       RM3=SQM3/SH
18795       RM4=SQM4/SH
18796       BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
18797       RPTS=4D0*VINT(71)**2/SH
18798       BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
18799       RM34=MAX(1D-20,2D0*RM3*RM4)
18800       RSQM=1D0+RM34
18801       IF(2D0*VINT(71)**2/MAX(1D0,VINT(21)*VINT(2)).LT.0.0001D0) 
18802      &RM34=MAX(RM34,2D0*VINT(71)**2/MAX(1D0,VINT(21)*VINT(2)))
18803       RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
18804       IF(ISTSB.EQ.0) THEN
18805         TH=VINT(45)
18806         UH=-0.5D0*SH*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
18807         SQPTH=MAX(VINT(71)**2,0.25D0*SH*BE34**2*VINT(59)**2)
18808       ELSE
18809 C...Kinematics with incoming masses tricky: now depends on how
18810 C...subprocess has been set up w.r.t. order of incoming partons. 
18811         RM1=0D0
18812         IF(MINT(15).EQ.22.AND.VINT(3).LT.0D0) RM1=-VINT(3)**2/SH
18813         RM2=0D0
18814         IF(MINT(16).EQ.22.AND.VINT(4).LT.0D0) RM2=-VINT(4)**2/SH
18815         IF(ISUB.EQ.35) THEN
18816           RM2=MIN(RM1,RM2)
18817           RM1=0D0
18818         ENDIF 
18819         BE12=SQRT(MAX(0D0,(1D0-RM1-RM2)**2-4D0*RM1*RM2))
18820         TUCOM=(1D0-RM1-RM2)*(1D0-RM3-RM4)
18821         TH=-0.5D0*SH*MAX(RTHM,TUCOM-2D0*RM1*RM4-2D0*RM2*RM3-
18822      &  BE12*BE34*CTH)
18823         UH=-0.5D0*SH*MAX(RTHM,TUCOM-2D0*RM1*RM3-2D0*RM2*RM4+
18824      &  BE12*BE34*CTH)
18825         SQPTH=MAX(VINT(71)**2,0.25D0*SH*BE34**2*(1D0-CTH**2))
18826       ENDIF
18827       SHR=SQRT(SH)
18828       SH2=SH**2
18829       TH2=TH**2
18830       UH2=UH**2
18831  
18832 C...Choice of Q2 scale: hard, parton distributions, parton showers
18833       IF(ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5) THEN
18834         Q2=SH
18835       ELSEIF(ISTSB.EQ.8) THEN
18836         IF(MINT(107).EQ.4) Q2=VINT(307) 
18837         IF(MINT(108).EQ.4) Q2=VINT(308) 
18838       ELSEIF(MOD(ISTSB,2).EQ.0.OR.ISTSB.EQ.9) THEN
18839         Q2IN1=0D0
18840         IF(MINT(11).EQ.22.AND.VINT(3).LT.0D0) Q2IN1=VINT(3)**2
18841         Q2IN2=0D0
18842         IF(MINT(12).EQ.22.AND.VINT(4).LT.0D0) Q2IN2=VINT(4)**2          
18843         IF(MSTP(32).EQ.1) THEN
18844           Q2=2D0*SH*TH*UH/(SH**2+TH**2+UH**2)
18845         ELSEIF(MSTP(32).EQ.2) THEN
18846           Q2=SQPTH+0.5D0*(SQM3+SQM4)
18847         ELSEIF(MSTP(32).EQ.3) THEN
18848           Q2=MIN(-TH,-UH)
18849         ELSEIF(MSTP(32).EQ.4) THEN
18850           Q2=SH
18851         ELSEIF(MSTP(32).EQ.5) THEN
18852           Q2=-TH
18853         ELSEIF(MSTP(32).EQ.6) THEN
18854           XSF1=X(1)
18855           IF(ISTSB.EQ.9) XSF1=X(1)/VINT(143)
18856           XSF2=X(2)
18857           IF(ISTSB.EQ.9) XSF2=X(2)/VINT(144)
18858           Q2=(1D0+XSF1*Q2IN1/SH+XSF2*Q2IN2/SH)*
18859      &    (SQPTH+0.5D0*(SQM3+SQM4))
18860         ELSEIF(MSTP(32).EQ.7) THEN
18861           Q2=(1D0+Q2IN1/SH+Q2IN2/SH)*(SQPTH+0.5D0*(SQM3+SQM4))
18862         ELSEIF(MSTP(32).EQ.8) THEN
18863           Q2=SQPTH+0.5D0*(Q2IN1+Q2IN2+SQM3+SQM4)
18864         ELSEIF(MSTP(32).EQ.9) THEN
18865           Q2=SQPTH+Q2IN1+Q2IN2+SQM3+SQM4
18866         ELSEIF(MSTP(32).EQ.10) THEN
18867           Q2=VINT(2)
18868         ENDIF
18869         IF(ISTSB.EQ.9) Q2=SQPTH
18870         IF(ISTSB.EQ.9.AND.MSTP(82).GE.2) Q2=Q2+
18871      &  (PARP(82)*(VINT(1)/PARP(89))**PARP(90))**2
18872       ENDIF
18873       Q2SF=Q2
18874       IF(ISTSB.GE.3.AND.ISTSB.LE.5) THEN
18875         Q2SF=PMAS(23,1)**2
18876         IF(ISUB.EQ.8.OR.ISUB.EQ.76.OR.ISUB.EQ.77.OR.ISUB.EQ.124.OR.
18877      &  ISUB.EQ.351) Q2SF=PMAS(24,1)**2
18878         IF(ISUB.EQ.352) Q2SF=PMAS(63,1)**2 
18879         IF(ISUB.EQ.121.OR.ISUB.EQ.122) THEN
18880           Q2SF=PMAS(PYCOMP(KFPR(ISUBSV,2)),1)**2
18881           IF(MSTP(39).EQ.2) Q2SF=Q2SF+MAX(VINT(202),VINT(207))
18882           IF(MSTP(39).EQ.3) Q2SF=SH
18883           IF(MSTP(39).EQ.4) Q2SF=VINT(26)*VINT(2)
18884           IF(MSTP(39).EQ.5) Q2SF=PMAS(KFHIGG,1)**2
18885         ENDIF
18886       ENDIF
18887       Q2PS=Q2SF
18888       Q2SF=Q2SF*PARP(34)
18889       IF(MSTP(69).GE.1.AND.MINT(47).EQ.5) Q2SF=VINT(2)
18890       IF(MSTP(69).GE.2) Q2SF=VINT(2)
18891       IF(MSTP(22).GE.1.AND.(ISUB.EQ.10.OR.ISUB.EQ.83).AND.
18892      &(MINT(43).EQ.2.OR.MINT(43).EQ.3)) THEN
18893         XBJ=X(2)
18894         IF(MINT(43).EQ.3) XBJ=X(1)
18895         IF(MSTP(22).EQ.1) THEN
18896           Q2PS=-TH
18897         ELSEIF(MSTP(22).EQ.2) THEN
18898           Q2PS=((1D0-XBJ)/XBJ)*(-TH)
18899         ELSEIF(MSTP(22).EQ.3) THEN
18900           Q2PS=SQRT((1D0-XBJ)/XBJ)*(-TH)
18901         ELSE
18902           Q2PS=(1D0-XBJ)*MAX(1D0,-LOG(XBJ))*(-TH)
18903         ENDIF
18904       ENDIF
18905       IF(MSTP(68).EQ.1.AND.(ISUBSV.EQ.1.OR.ISUBSV.EQ.2.OR.
18906      &ISUBSV.EQ.141.OR.ISUBSV.EQ.142.OR.ISUBSV.EQ.144)) THEN 
18907         Q2PS=VINT(2)
18908       ELSEIF(MSTP(68).GE.2.AND.(ISUBSV.NE.11.AND.ISUBSV.NE.12.AND.
18909      &ISUBSV.NE.13.AND.ISUBSV.NE.28.AND.ISUBSV.NE.53.AND.
18910      &ISUBSV.NE.68)) THEN
18911         Q2PS=VINT(2)
18912       ENDIF
18913  
18914 C...Store derived kinematical quantities
18915       VINT(41)=X(1)
18916       VINT(42)=X(2)
18917       VINT(44)=SH
18918       VINT(43)=SQRT(SH)
18919       VINT(45)=TH
18920       VINT(46)=UH
18921       IF(ISTSB.NE.8) VINT(48)=SQPTH
18922       IF(ISTSB.NE.8) VINT(47)=SQRT(SQPTH)
18923       VINT(50)=TAUP*VINT(2)
18924       VINT(49)=SQRT(MAX(0D0,VINT(50)))
18925       VINT(52)=Q2
18926       VINT(51)=SQRT(Q2)
18927       VINT(54)=Q2SF
18928       VINT(53)=SQRT(Q2SF)
18929       VINT(56)=Q2PS
18930       VINT(55)=SQRT(Q2PS)
18931  
18932 C...Calculate parton distributions
18933       IF(ISTSB.LE.0) GOTO 152
18934       IF(MINT(47).GE.2) THEN
18935         DO 110 I=3-MIN(2,MINT(45)),MIN(2,MINT(46))
18936           XSF=X(I)
18937           IF(ISTSB.EQ.9) XSF=X(I)/VINT(142+I)
18938           IF(ISUB.EQ.99) THEN
18939             XSF=VINT(309-I)/(VINT(2)+VINT(307)+VINT(308))
18940             Q2SF=VINT(309-I) 
18941           ENDIF
18942           MINT(105)=MINT(102+I)
18943           MINT(109)=MINT(106+I)
18944           VINT(120)=VINT(2+I)
18945           IF(MSTP(57).LE.1) THEN
18946             CALL PYPDFU(MINT(10+I),XSF,Q2SF,XPQ)
18947           ELSE
18948             CALL PYPDFL(MINT(10+I),XSF,Q2SF,XPQ)
18949           ENDIF
18950           DO 100 KFL=-25,25
18951             XSFX(I,KFL)=XPQ(KFL)
18952   100     CONTINUE
18953   110   CONTINUE
18954       ENDIF
18955  
18956 C...Calculate alpha_em, alpha_strong and K-factor
18957       XW=PARU(102)
18958       XWV=XW
18959       IF(MSTP(8).GE.2.OR.(ISUB.GE.71.AND.ISUB.LE.77)) XW=
18960      &1D0-(PMAS(24,1)/PMAS(23,1))**2
18961       XW1=1D0-XW
18962       XWC=1D0/(16D0*XW*XW1)
18963       AEM=PYALEM(Q2)
18964       IF(MSTP(8).GE.1) AEM=SQRT(2D0)*PARU(105)*PMAS(24,1)**2*XW/PARU(1)
18965       IF(MSTP(33).NE.3) AS=PYALPS(PARP(34)*Q2)
18966       FACK=1D0
18967       FACA=1D0
18968       IF(MSTP(33).EQ.1) THEN
18969         FACK=PARP(31)
18970       ELSEIF(MSTP(33).EQ.2) THEN
18971         FACK=PARP(31)
18972         FACA=PARP(32)/PARP(31)
18973       ELSEIF(MSTP(33).EQ.3) THEN
18974         Q2AS=PARP(33)*Q2
18975         IF(ISTSB.EQ.9.AND.MSTP(82).GE.2) Q2AS=Q2AS+
18976      &  PARU(112)*PARP(82)*(VINT(1)/PARP(89))**PARP(90)
18977         AS=PYALPS(Q2AS)
18978       ENDIF
18979       VINT(138)=1D0
18980       VINT(57)=AEM
18981       VINT(58)=AS
18982  
18983 C...Set flags for allowed reacting partons/leptons
18984       DO 140 I=1,2
18985         DO 120 J=-25,25
18986           KFAC(I,J)=0
18987   120   CONTINUE
18988         IF(MINT(44+I).EQ.1) THEN
18989           KFAC(I,MINT(10+I))=1
18990         ELSEIF(MINT(40+I).EQ.1.AND.MSTP(12).EQ.0) THEN
18991           KFAC(I,MINT(10+I))=1
18992           KFAC(I,22)=1
18993           KFAC(I,24)=1
18994           KFAC(I,-24)=1
18995         ELSE
18996           DO 130 J=-25,25
18997             KFAC(I,J)=KFIN(I,J)
18998             IF(IABS(J).GT.MSTP(58).AND.IABS(J).LE.10) KFAC(I,J)=0
18999             IF(XSFX(I,J).LT.1D-10) KFAC(I,J)=0
19000   130     CONTINUE
19001         ENDIF
19002   140 CONTINUE
19003  
19004 C...Lower and upper limit for fermion flavour loops
19005       MMIN1=0
19006       MMAX1=0
19007       MMIN2=0
19008       MMAX2=0
19009       DO 150 J=-20,20
19010         IF(KFAC(1,-J).EQ.1) MMIN1=-J
19011         IF(KFAC(1,J).EQ.1) MMAX1=J
19012         IF(KFAC(2,-J).EQ.1) MMIN2=-J
19013         IF(KFAC(2,J).EQ.1) MMAX2=J
19014   150 CONTINUE
19015       MMINA=MIN(MMIN1,MMIN2)
19016       MMAXA=MAX(MMAX1,MMAX2)
19017  
19018 C...Common resonance mass and width combinations
19019       SQMZ=PMAS(23,1)**2
19020       SQMW=PMAS(24,1)**2
19021       SQMH=PMAS(KFHIGG,1)**2
19022       GMMZ=PMAS(23,1)*PMAS(23,2)
19023       GMMW=PMAS(24,1)*PMAS(24,2)
19024       GMMH=PMAS(KFHIGG,1)*PMAS(KFHIGG,2)
19025 C...MRENNA+++
19026       ZWID=PMAS(23,2)
19027       WWID=PMAS(24,2)
19028       TANW=SQRT(XW/XW1)
19029       CT2W=(1D0-2D0*XW)/(2D0*XW/TANW)
19030 C...MRENNA---
19031  
19032 C...Phase space integral in tau
19033       COMFAC=PARU(1)*PARU(5)/VINT(2)
19034       IF(MINT(41).EQ.2.AND.MINT(42).EQ.2) COMFAC=COMFAC*FACK
19035       IF((MINT(47).GE.2.OR.(ISTSB.GE.3.AND.ISTSB.LE.5)).AND.
19036      &ISTSB.NE.8.AND.ISTSB.NE.9) THEN
19037         ATAU1=LOG(TAUMAX/TAUMIN)
19038         ATAU2=(TAUMAX-TAUMIN)/(TAUMAX*TAUMIN)
19039         H1=COEF(ISUBSV,1)+(ATAU1/ATAU2)*COEF(ISUBSV,2)/TAU
19040         IF(MINT(72).GE.1) THEN
19041           TAUR1=VINT(73)
19042           GAMR1=VINT(74)
19043           ATAUD=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR1)/(TAUMAX+TAUR1))
19044           ATAU3=ATAUD/TAUR1
19045           IF(ATAUD.GT.1D-10) H1=H1+
19046      &    (ATAU1/ATAU3)*COEF(ISUBSV,3)/(TAU+TAUR1)
19047           ATAUD=ATAN((TAUMAX-TAUR1)/GAMR1)-ATAN((TAUMIN-TAUR1)/GAMR1)
19048           ATAU4=ATAUD/GAMR1
19049           IF(ATAUD.GT.1D-10) H1=H1+
19050      &    (ATAU1/ATAU4)*COEF(ISUBSV,4)*TAU/((TAU-TAUR1)**2+GAMR1**2)
19051         ENDIF
19052         IF(MINT(72).EQ.2) THEN
19053           TAUR2=VINT(75)
19054           GAMR2=VINT(76)
19055           ATAUD=LOG(TAUMAX/TAUMIN*(TAUMIN+TAUR2)/(TAUMAX+TAUR2))
19056           ATAU5=ATAUD/TAUR2
19057           IF(ATAUD.GT.1D-10) H1=H1+
19058      &    (ATAU1/ATAU5)*COEF(ISUBSV,5)/(TAU+TAUR2)
19059           ATAUD=ATAN((TAUMAX-TAUR2)/GAMR2)-ATAN((TAUMIN-TAUR2)/GAMR2)
19060           ATAU6=ATAUD/GAMR2
19061           IF(ATAUD.GT.1D-10) H1=H1+
19062      &    (ATAU1/ATAU6)*COEF(ISUBSV,6)*TAU/((TAU-TAUR2)**2+GAMR2**2)
19063         ENDIF
19064         IF(MINT(47).EQ.5.AND.(ISTSB.LE.2.OR.ISTSB.GE.5)) THEN
19065           ATAU7=LOG(MAX(2D-10,1D0-TAUMIN)/MAX(2D-10,1D0-TAUMAX))
19066           IF(ATAU7.GT.1D-10) H1=H1+(ATAU1/ATAU7)*COEF(ISUBSV,7)*TAU/
19067      &    MAX(2D-10,1D0-TAU)
19068         ELSEIF(MINT(47).GE.6.AND.(ISTSB.LE.2.OR.ISTSB.GE.5)) THEN
19069           ATAU7=LOG(MAX(1D-10,1D0-TAUMIN)/MAX(1D-10,1D0-TAUMAX))
19070           IF(ATAU7.GT.1D-10) H1=H1+(ATAU1/ATAU7)*COEF(ISUBSV,7)*TAU/
19071      &    MAX(1D-10,1D0-TAU)
19072         ENDIF
19073         COMFAC=COMFAC*ATAU1/(TAU*H1)
19074       ENDIF
19075  
19076 C...Phase space integral in y*
19077       IF((MINT(47).EQ.4.OR.MINT(47).EQ.5).AND.ISTSB.NE.8.AND.ISTSB.NE.9) 
19078      &THEN
19079         AYST0=YSTMAX-YSTMIN
19080         IF(AYST0.LT.1D-10) THEN
19081           COMFAC=0D0
19082         ELSE
19083           AYST1=0.5D0*(YSTMAX-YSTMIN)**2
19084           AYST2=AYST1
19085           AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
19086           H2=(AYST0/AYST1)*COEF(ISUBSV,8)*(YST-YSTMIN)+
19087      &    (AYST0/AYST2)*COEF(ISUBSV,9)*(YSTMAX-YST)+
19088      &    (AYST0/AYST3)*COEF(ISUBSV,10)/COSH(YST)
19089           IF(MINT(45).EQ.3) THEN
19090             YST0=-0.5D0*LOG(TAUE)
19091             AYST4=LOG(MAX(1D-10,EXP(YST0-YSTMIN)-1D0)/
19092      &      MAX(1D-10,EXP(YST0-YSTMAX)-1D0))
19093             IF(AYST4.GT.1D-10) H2=H2+(AYST0/AYST4)*COEF(ISUBSV,11)/
19094      &      MAX(1D-10,1D0-EXP(YST-YST0))
19095           ENDIF
19096           IF(MINT(46).EQ.3) THEN
19097             YST0=-0.5D0*LOG(TAUE)
19098             AYST5=LOG(MAX(1D-10,EXP(YST0+YSTMAX)-1D0)/
19099      &      MAX(1D-10,EXP(YST0+YSTMIN)-1D0))
19100             IF(AYST5.GT.1D-10) H2=H2+(AYST0/AYST5)*COEF(ISUBSV,12)/
19101      &      MAX(1D-10,1D0-EXP(-YST-YST0))
19102           ENDIF
19103           COMFAC=COMFAC*AYST0/H2
19104         ENDIF
19105       ENDIF
19106  
19107 C...2 -> 1 processes: reduction in angular part of phase space integral
19108 C...for case of decaying resonance
19109       ACTH0=CTNMAX-CTNMIN+CTPMAX-CTPMIN
19110       IF((ISTSB.EQ.1.OR.ISTSB.EQ.3.OR.ISTSB.EQ.5)) THEN
19111         IF(MDCY(PYCOMP(KFPR(ISUBSV,1)),1).EQ.1) THEN
19112           IF(KFPR(ISUB,1).EQ.25.OR.KFPR(ISUB,1).EQ.37.OR.
19113      &    KFPR(ISUB,1).EQ.39) THEN
19114             COMFAC=COMFAC*0.5D0*ACTH0
19115           ELSE
19116             COMFAC=COMFAC*0.125D0*(3D0*ACTH0+CTNMAX**3-CTNMIN**3+
19117      &      CTPMAX**3-CTPMIN**3)
19118           ENDIF
19119         ENDIF
19120  
19121 C...2 -> 2 processes: angular part of phase space integral
19122       ELSEIF(ISTSB.EQ.2.OR.ISTSB.EQ.4) THEN
19123         ACTH1=LOG((MAX(RM34,RSQM-CTNMIN)*MAX(RM34,RSQM-CTPMIN))/
19124      &  (MAX(RM34,RSQM-CTNMAX)*MAX(RM34,RSQM-CTPMAX)))
19125         ACTH2=LOG((MAX(RM34,RSQM+CTNMAX)*MAX(RM34,RSQM+CTPMAX))/
19126      &  (MAX(RM34,RSQM+CTNMIN)*MAX(RM34,RSQM+CTPMIN)))
19127         ACTH3=1D0/MAX(RM34,RSQM-CTNMAX)-1D0/MAX(RM34,RSQM-CTNMIN)+
19128      &  1D0/MAX(RM34,RSQM-CTPMAX)-1D0/MAX(RM34,RSQM-CTPMIN)
19129         ACTH4=1D0/MAX(RM34,RSQM+CTNMIN)-1D0/MAX(RM34,RSQM+CTNMAX)+
19130      &  1D0/MAX(RM34,RSQM+CTPMIN)-1D0/MAX(RM34,RSQM+CTPMAX)
19131         H3=COEF(ISUBSV,13)+
19132      &  (ACTH0/ACTH1)*COEF(ISUBSV,14)/MAX(RM34,RSQM-CTH)+
19133      &  (ACTH0/ACTH2)*COEF(ISUBSV,15)/MAX(RM34,RSQM+CTH)+
19134      &  (ACTH0/ACTH3)*COEF(ISUBSV,16)/MAX(RM34,RSQM-CTH)**2+
19135      &  (ACTH0/ACTH4)*COEF(ISUBSV,17)/MAX(RM34,RSQM+CTH)**2
19136         COMFAC=COMFAC*ACTH0*0.5D0*BE34/H3
19137  
19138 C...2 -> 2 processes: take into account final state Breit-Wigners
19139         COMFAC=COMFAC*VINT(80)
19140       ENDIF
19141  
19142 C...2 -> 3, 4 processes: phace space integral in tau'
19143       IF(MINT(47).GE.2.AND.ISTSB.GE.3.AND.ISTSB.LE.5) THEN
19144         ATAUP1=LOG(TAUPMX/TAUPMN)
19145         ATAUP2=((1D0-TAU/TAUPMX)**4-(1D0-TAU/TAUPMN)**4)/(4D0*TAU)
19146         H4=COEF(ISUBSV,18)+
19147      &  (ATAUP1/ATAUP2)*COEF(ISUBSV,19)*(1D0-TAU/TAUP)**3/TAUP
19148         IF(MINT(47).EQ.5) THEN
19149           ATAUP3=LOG(MAX(2D-10,1D0-TAUPMN)/MAX(2D-10,1D0-TAUPMX))
19150           H4=H4+(ATAUP1/ATAUP3)*COEF(ISUBSV,20)*TAUP/MAX(2D-10,1D0-TAUP)
19151         ELSEIF(MINT(47).GE.6) THEN
19152           ATAUP3=LOG(MAX(1D-10,1D0-TAUPMN)/MAX(1D-10,1D0-TAUPMX))
19153           H4=H4+(ATAUP1/ATAUP3)*COEF(ISUBSV,20)*TAUP/MAX(1D-10,1D0-TAUP)
19154         ENDIF
19155         COMFAC=COMFAC*ATAUP1/H4
19156       ENDIF
19157  
19158 C...2 -> 3, 4 processes: effective W/Z parton distributions
19159       IF(ISTSB.EQ.3.OR.ISTSB.EQ.4) THEN
19160         IF(1D0-TAU/TAUP.GT.1D-4) THEN
19161           FZW=(1D0+TAU/TAUP)*LOG(TAUP/TAU)-2D0*(1D0-TAU/TAUP)
19162         ELSE
19163           FZW=1D0/6D0*(1D0-TAU/TAUP)**3*TAU/TAUP
19164         ENDIF
19165         COMFAC=COMFAC*FZW
19166       ENDIF
19167  
19168 C...2 -> 3 processes: phase space integrals for pT1, pT2, y3, mirror
19169       IF(ISTSB.EQ.5) THEN
19170         COMFAC=COMFAC*VINT(205)*VINT(210)*VINT(212)*VINT(214)/
19171      &  (128D0*PARU(1)**4*VINT(220))*(TAU**2/TAUP)
19172       ENDIF
19173  
19174 C...Phase space integral for low-pT and multiple interactions
19175       IF(ISTSB.EQ.9) THEN
19176         COMFAC=PARU(1)*PARU(5)*FACK*0.5D0*VINT(2)/SH2
19177         ATAU1=LOG(2D0*(1D0+SQRT(1D0-XT2))/XT2-1D0)
19178         ATAU2=2D0*ATAN(1D0/XT2-1D0)/SQRT(XT2)
19179         H1=COEF(ISUBSV,1)+(ATAU1/ATAU2)*COEF(ISUBSV,2)/SQRT(TAU)
19180         COMFAC=COMFAC*ATAU1/H1
19181         AYST0=YSTMAX-YSTMIN
19182         AYST1=0.5D0*(YSTMAX-YSTMIN)**2
19183         AYST3=2D0*(ATAN(EXP(YSTMAX))-ATAN(EXP(YSTMIN)))
19184         H2=(AYST0/AYST1)*COEF(ISUBSV,8)*(YST-YSTMIN)+
19185      &  (AYST0/AYST1)*COEF(ISUBSV,9)*(YSTMAX-YST)+
19186      &  (AYST0/AYST3)*COEF(ISUBSV,10)/COSH(YST)
19187         COMFAC=COMFAC*AYST0/H2
19188         IF(MSTP(82).LE.1) COMFAC=COMFAC*XT2**2*(1D0/VINT(149)-1D0)
19189 C...For MSTP(82)>=2 an additional factor (xT2/(xT2+VINT(149))**2 is
19190 C...introduced to make cross-section finite for xT2 -> 0
19191         IF(MSTP(82).GE.2) COMFAC=COMFAC*XT2**2/(VINT(149)*
19192      &  (1D0+VINT(149)))
19193       ENDIF
19194  
19195 C...Real gamma + gamma: include factor 2 when different nature
19196   152 IF(MINT(11).EQ.22.AND.MINT(12).EQ.22.AND.MINT(123).GE.4.AND.
19197      &MSTP(14).LE.10) COMFAC=2D0*COMFAC
19198 
19199 C...Extra factors to include the effects of 
19200 C...longitudinal resolved photons (but not direct or DIS ones). 
19201       DO 155 ISDE=1,2
19202         IF(MINT(10+ISDE).EQ.22.AND.MINT(106+ISDE).GE.1.AND.
19203      &  MINT(106+ISDE).LE.3) THEN
19204           VINT(314+ISDE)=1D0
19205           XY=PARP(166+ISDE)
19206           IF(MSTP(16).EQ.0) THEN
19207             IF(VINT(304+ISDE).GT.0D0.AND.VINT(304+ISDE).LT.1D0)
19208      &      XY=VINT(304+ISDE)
19209           ELSE
19210             IF(VINT(308+ISDE).GT.0D0.AND.VINT(308+ISDE).LT.1D0)
19211      &      XY=VINT(308+ISDE)
19212           ENDIF
19213           Q2GA=VINT(306+ISDE)
19214           IF(MSTP(17).GT.0.AND.XY.GT.0D0.AND.XY.LT.1D0.AND.
19215      &    Q2GA.GT.0D0) THEN
19216             REDUCE=0D0
19217             IF(MSTP(17).EQ.1) THEN
19218               REDUCE=4D0*Q2*Q2GA/(Q2+Q2GA)**2
19219             ELSEIF(MSTP(17).EQ.2) THEN
19220               REDUCE=4D0*Q2GA/(Q2+Q2GA)
19221             ELSEIF(MSTP(17).EQ.3) THEN
19222               PMVIRT=PMAS(PYCOMP(113),1)
19223               REDUCE=4D0*Q2GA/(PMVIRT**2+Q2GA)
19224             ELSEIF(MSTP(17).EQ.4.AND.MINT(106+ISDE).EQ.1) THEN
19225               PMVIRT=PMAS(PYCOMP(113),1)
19226               REDUCE=4D0*PMVIRT**2*Q2GA/(PMVIRT**2+Q2GA)**2
19227             ELSEIF(MSTP(17).EQ.4.AND.MINT(106+ISDE).EQ.2) THEN
19228               PMVIRT=PMAS(PYCOMP(113),1)
19229               REDUCE=4D0*PMVIRT**2*Q2GA/(PMVIRT**2+Q2GA)**2
19230             ELSEIF(MSTP(17).EQ.4.AND.MINT(106+ISDE).EQ.3) THEN
19231               PMVSMN=4D0*PARP(15)**2
19232               PMVSMX=4D0*VINT(154)**2
19233               REDTRA=1D0/(PMVSMN+Q2GA)-1D0/(PMVSMX+Q2GA)
19234               REDLON=(3D0*PMVSMN+Q2GA)/(PMVSMN+Q2GA)**3-
19235      &        (3D0*PMVSMX+Q2GA)/(PMVSMX+Q2GA)**3  
19236               REDUCE=4D0*(Q2GA/6D0)*REDLON/REDTRA
19237             ELSEIF(MSTP(17).EQ.5.AND.MINT(106+ISDE).EQ.1) THEN
19238               PMVIRT=PMAS(PYCOMP(113),1)
19239               REDUCE=4D0*Q2GA/(PMVIRT**2+Q2GA)
19240             ELSEIF(MSTP(17).EQ.5.AND.MINT(106+ISDE).EQ.2) THEN
19241               PMVIRT=PMAS(PYCOMP(113),1)
19242               REDUCE=4D0*Q2GA/(PMVIRT**2+Q2GA)
19243             ELSEIF(MSTP(17).EQ.5.AND.MINT(106+ISDE).EQ.3) THEN
19244               PMVSMN=4D0*PARP(15)**2
19245               PMVSMX=4D0*VINT(154)**2
19246               REDTRA=1D0/(PMVSMN+Q2GA)-1D0/(PMVSMX+Q2GA)
19247               REDLON=1D0/(PMVSMN+Q2GA)**2-1D0/(PMVSMX+Q2GA)**2
19248               REDUCE=4D0*(Q2GA/2D0)*REDLON/REDTRA
19249             ENDIF
19250             BEAMAS=PYMASS(11) 
19251             IF(VINT(302+ISDE).GT.0D0) BEAMAS=VINT(302+ISDE)
19252             FRACLT=1D0/(1D0+XY**2/2D0/(1D0-XY)*
19253      &      (1D0-2D0*BEAMAS**2/Q2GA))
19254             VINT(314+ISDE)=1D0+PARP(165)*REDUCE*FRACLT
19255           ENDIF
19256         ELSE
19257           VINT(314+ISDE)=1D0
19258         ENDIF
19259         COMFAC=COMFAC*VINT(314+ISDE)
19260   155 CONTINUE
19261  
19262 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
19263       IF((MSTP(46).GE.3.AND.MSTP(46).LE.6).AND.(ISUB.EQ.71.OR.ISUB.EQ.
19264      &72.OR.ISUB.EQ.73.OR.ISUB.EQ.76.OR.ISUB.EQ.77)) THEN
19265 C...Calculate M_R and N_R functions for Higgs-like and QCD-like models
19266         IF(MSTP(46).LE.4) THEN
19267           HDTLH=LOG(PMAS(25,1)/PARP(44))
19268           HDTMR=(4.5D0*PARU(1)/SQRT(3D0)-74D0/9D0)/8D0+HDTLH/12D0
19269           HDTNR=-1D0/18D0+HDTLH/6D0
19270         ELSE
19271           HDTNM=0.125D0*(1D0/(288D0*PARU(1)**2)+(PARP(47)/PARP(45))**2)
19272           HDTLQ=LOG(PARP(45)/PARP(44))
19273           HDTMR=-(4D0*PARU(1))**2*0.5D0*HDTNM+HDTLQ/12D0
19274           HDTNR=(4D0*PARU(1))**2*HDTNM+HDTLQ/6D0
19275         ENDIF
19276  
19277 C...Calculate lowest and next-to-lowest order partial wave amplitudes
19278         HDTV=1D0/(16D0*PARU(1)*PARP(47)**2)
19279         A00L=SNGL(HDTV*SH)
19280         A20L=-0.5*A00L
19281         A11L=A00L/6.
19282         HDTLS=LOG(SH/PARP(44)**2)
19283         A004=SNGL((HDTV*SH)**2/(4D0*PARU(1)))*
19284      &  CMPLX(SNGL((176D0*HDTMR+112D0*HDTNR)/3D0+11D0/27D0-
19285      &  (50D0/9D0)*HDTLS),SNGL(4D0*PARU(1)))
19286         A204=SNGL((HDTV*SH)**2/(4D0*PARU(1)))*
19287      &  CMPLX(SNGL(32D0*(HDTMR+2D0*HDTNR)/3D0+25D0/54D0-
19288      &  (20D0/9D0)*HDTLS),SNGL(PARU(1)))
19289         A114=SNGL((HDTV*SH)**2/(6D0*PARU(1)))*
19290      &  CMPLX(SNGL(4D0*(-2D0*HDTMR+HDTNR)-1D0/18D0),SNGL(PARU(1)/6D0))
19291  
19292 C...Unitarize partial wave amplitudes with Pade or K-matrix method
19293         IF(MSTP(46).EQ.3.OR.MSTP(46).EQ.5) THEN
19294           A00U=A00L/(1.-A004/A00L)
19295           A20U=A20L/(1.-A204/A20L)
19296           A11U=A11L/(1.-A114/A11L)
19297         ELSE
19298           A00U=(A00L+REAL(A004))/(1.-CMPLX(0.,A00L+REAL(A004)))
19299           A20U=(A20L+REAL(A204))/(1.-CMPLX(0.,A20L+REAL(A204)))
19300           A11U=(A11L+REAL(A114))/(1.-CMPLX(0.,A11L+REAL(A114)))
19301         ENDIF
19302       ENDIF
19303  
19304 C...Supersymmetric processes - all of type 2 -> 2 :
19305 C...correct final-state Breit-Wigners from fixed to running width.
19306       IF(ISUB.GE.200.AND.ISUB.LE.301.AND.MSTP(42).GT.0) THEN
19307         DO 160 I=1,2
19308         KFLW=KFPR(ISUBSV,I)
19309         KCW=PYCOMP(KFLW)
19310         IF(PMAS(KCW,2).LT.PARP(41)) GOTO 160
19311         IF(I.EQ.1) SQMI=SQM3
19312         IF(I.EQ.2) SQMI=SQM4
19313         SQMS=PMAS(KCW,1)**2
19314         GMMS=PMAS(KCW,1)*PMAS(KCW,2)
19315         HBWS=GMMS/((SQMI-SQMS)**2+GMMS**2)
19316         CALL PYWIDT(KFLW,SQMI,WDTP,WDTE)
19317         GMMI=SQRT(SQMI)*WDTP(0)
19318         HBWI=GMMI/((SQMI-SQMS)**2+GMMI**2)
19319         COMFAC=COMFAC*(HBWI/HBWS)
19320   160   CONTINUE
19321       ENDIF
19322  
19323 C...A: 2 -> 1, tree diagrams
19324  
19325       IF(ISUB.LE.10) THEN
19326         IF(ISUB.EQ.1) THEN
19327 C...f + fbar -> gamma*/Z0
19328           MINT(61)=2
19329           CALL PYWIDT(23,SH,WDTP,WDTE)
19330           HS=SHR*WDTP(0)
19331           FACZ=4D0*COMFAC*3D0
19332           HP0=AEM/3D0*SH
19333           HP1=AEM/3D0*XWC*SH
19334           DO 180 I=MMINA,MMAXA
19335             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 180
19336             EI=KCHG(IABS(I),1)/3D0
19337             AI=SIGN(1D0,EI)
19338             VI=AI-4D0*EI*XWV
19339             HI0=HP0
19340             IF(IABS(I).LE.10) HI0=HI0*FACA/3D0
19341             HI1=HP1
19342             IF(IABS(I).LE.10) HI1=HI1*FACA/3D0
19343             NCHN=NCHN+1
19344             ISIG(NCHN,1)=I
19345             ISIG(NCHN,2)=-I
19346             ISIG(NCHN,3)=1
19347             SIGH(NCHN)=FACZ*(EI**2/SH2*HI0*HP0*VINT(111)+
19348      &      EI*VI*(1D0-SQMZ/SH)/((SH-SQMZ)**2+HS**2)*
19349      &      (HI0*HP1+HI1*HP0)*VINT(112)+(VI**2+AI**2)/
19350      &      ((SH-SQMZ)**2+HS**2)*HI1*HP1*VINT(114))
19351   180     CONTINUE
19352  
19353         ELSEIF(ISUB.EQ.2) THEN
19354 C...f + fbar' -> W+/-
19355           CALL PYWIDT(24,SH,WDTP,WDTE)
19356           HS=SHR*WDTP(0)
19357           FACBW=4D0*COMFAC/((SH-SQMW)**2+HS**2)*3D0
19358           HP=AEM/(24D0*XW)*SH
19359           DO 200 I=MMIN1,MMAX1
19360             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 200
19361             IA=IABS(I)
19362             DO 190 J=MMIN2,MMAX2
19363               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 190
19364               JA=IABS(J)
19365               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 190
19366               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
19367      &        GOTO 190
19368               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
19369               HI=HP*2D0
19370               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
19371               NCHN=NCHN+1
19372               ISIG(NCHN,1)=I
19373               ISIG(NCHN,2)=J
19374               ISIG(NCHN,3)=1
19375               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))
19376               SIGH(NCHN)=HI*FACBW*HF
19377   190       CONTINUE
19378   200     CONTINUE
19379  
19380         ELSEIF(ISUB.EQ.3) THEN
19381 C...f + fbar -> h0 (or H0, or A0)
19382           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
19383           HS=SHR*WDTP(0)
19384           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
19385           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
19386      &    FACBW=0D0
19387           HP=AEM/(8D0*XW)*SH/SQMW*SH
19388           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19389           DO 210 I=MMINA,MMAXA
19390             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 210
19391             IA=IABS(I)
19392             RMQ=PYMRUN(IA,SH)**2/SH
19393             HI=HP*RMQ
19394             IF(IA.LE.10) HI=HP*RMQ*FACA/3D0
19395             IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
19396               IKFI=1
19397               IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
19398               IF(IA.GT.10) IKFI=3
19399               HI=HI*PARU(150+10*IHIGG+IKFI)**2
19400             ENDIF
19401             NCHN=NCHN+1
19402             ISIG(NCHN,1)=I
19403             ISIG(NCHN,2)=-I
19404             ISIG(NCHN,3)=1
19405             SIGH(NCHN)=HI*FACBW*HF
19406   210     CONTINUE
19407  
19408         ELSEIF(ISUB.EQ.4) THEN
19409 C...gamma + W+/- -> W+/-
19410  
19411         ELSEIF(ISUB.EQ.5) THEN
19412 C...Z0 + Z0 -> h0
19413           CALL PYWIDT(25,SH,WDTP,WDTE)
19414           HS=SHR*WDTP(0)
19415           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
19416           IF(ABS(SHR-PMAS(25,1)).GT.PARP(48)*PMAS(25,2)) FACBW=0D0
19417           HP=AEM/(8D0*XW)*SH/SQMW*SH
19418           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19419           HI=HP/4D0
19420           FACI=8D0/(PARU(1)**2*XW1)*(AEM*XWC)**2
19421           DO 230 I=MMIN1,MMAX1
19422             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 230
19423             DO 220 J=MMIN2,MMAX2
19424               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 220
19425               EI=KCHG(IABS(I),1)/3D0
19426               AI=SIGN(1D0,EI)
19427               VI=AI-4D0*EI*XWV
19428               EJ=KCHG(IABS(J),1)/3D0
19429               AJ=SIGN(1D0,EJ)
19430               VJ=AJ-4D0*EJ*XWV
19431               NCHN=NCHN+1
19432               ISIG(NCHN,1)=I
19433               ISIG(NCHN,2)=J
19434               ISIG(NCHN,3)=1
19435               SIGH(NCHN)=FACI*(VI**2+AI**2)*(VJ**2+AJ**2)*HI*FACBW*HF
19436   220       CONTINUE
19437   230     CONTINUE
19438  
19439         ELSEIF(ISUB.EQ.6) THEN
19440 C...Z0 + W+/- -> W+/-
19441  
19442         ELSEIF(ISUB.EQ.7) THEN
19443 C...W+ + W- -> Z0
19444  
19445         ELSEIF(ISUB.EQ.8) THEN
19446 C...W+ + W- -> h0
19447           CALL PYWIDT(25,SH,WDTP,WDTE)
19448           HS=SHR*WDTP(0)
19449           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
19450           IF(ABS(SHR-PMAS(25,1)).GT.PARP(48)*PMAS(25,2)) FACBW=0D0
19451           HP=AEM/(8D0*XW)*SH/SQMW*SH
19452           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19453           HI=HP/2D0
19454           FACI=1D0/(4D0*PARU(1)**2)*(AEM/XW)**2
19455           DO 250 I=MMIN1,MMAX1
19456             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 250
19457             EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
19458             DO 240 J=MMIN2,MMAX2
19459               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 240
19460               EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
19461               IF(EI*EJ.GT.0D0) GOTO 240
19462               NCHN=NCHN+1
19463               ISIG(NCHN,1)=I
19464               ISIG(NCHN,2)=J
19465               ISIG(NCHN,3)=1
19466               SIGH(NCHN)=FACI*VINT(180+I)*VINT(180+J)*HI*FACBW*HF
19467   240       CONTINUE
19468   250     CONTINUE
19469  
19470 C...B: 2 -> 2, tree diagrams
19471  
19472         ELSEIF(ISUB.EQ.10) THEN
19473 C...f + f' -> f + f' (gamma/Z/W exchange)
19474           FACGGF=COMFAC*AEM**2*2D0*(SH2+UH2)/TH2
19475           FACGZF=COMFAC*AEM**2*XWC*4D0*SH2/(TH*(TH-SQMZ))
19476           FACZZF=COMFAC*(AEM*XWC)**2*2D0*SH2/(TH-SQMZ)**2
19477           FACWWF=COMFAC*(0.5D0*AEM/XW)**2*SH2/(TH-SQMW)**2
19478           DO 270 I=MMIN1,MMAX1
19479             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 270
19480             IA=IABS(I)
19481             DO 260 J=MMIN2,MMAX2
19482               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 260
19483               JA=IABS(J)
19484 C...Electroweak couplings
19485               EI=KCHG(IA,1)*ISIGN(1,I)/3D0
19486               AI=SIGN(1D0,KCHG(IA,1)+0.5D0)*ISIGN(1,I)
19487               VI=AI-4D0*EI*XWV
19488               EJ=KCHG(JA,1)*ISIGN(1,J)/3D0
19489               AJ=SIGN(1D0,KCHG(JA,1)+0.5D0)*ISIGN(1,J)
19490               VJ=AJ-4D0*EJ*XWV
19491               EPSIJ=ISIGN(1,I*J)
19492 C...gamma/Z exchange, only gamma exchange, or only Z exchange
19493               IF(MSTP(21).GE.1.AND.MSTP(21).LE.4) THEN
19494                 IF(MSTP(21).EQ.1.OR.MSTP(21).EQ.4) THEN
19495                   FACNCF=FACGGF*EI**2*EJ**2+FACGZF*EI*EJ*
19496      &            (VI*VJ*(1D0+UH2/SH2)+AI*AJ*EPSIJ*(1D0-UH2/SH2))+
19497      &            FACZZF*((VI**2+AI**2)*(VJ**2+AJ**2)*(1D0+UH2/SH2)+
19498      &            4D0*VI*VJ*AI*AJ*EPSIJ*(1D0-UH2/SH2))
19499                 ELSEIF(MSTP(21).EQ.2) THEN
19500                   FACNCF=FACGGF*EI**2*EJ**2
19501                 ELSE
19502                   FACNCF=FACZZF*((VI**2+AI**2)*(VJ**2+AJ**2)*
19503      &            (1D0+UH2/SH2)+4D0*VI*VJ*AI*AJ*EPSIJ*(1D0-UH2/SH2))
19504                 ENDIF
19505                 NCHN=NCHN+1
19506                 ISIG(NCHN,1)=I
19507                 ISIG(NCHN,2)=J
19508                 ISIG(NCHN,3)=1
19509                 SIGH(NCHN)=FACNCF
19510               ENDIF
19511 C...W exchange
19512               IF((MSTP(21).EQ.1.OR.MSTP(21).EQ.5).AND.AI*AJ.LT.0D0) THEN
19513                 FACCCF=FACWWF*VINT(180+I)*VINT(180+J)
19514                 IF(EPSIJ.LT.0D0) FACCCF=FACCCF*UH2/SH2
19515                 IF(IA.GT.10.AND.MOD(IA,2).EQ.0) FACCCF=2D0*FACCCF
19516                 IF(JA.GT.10.AND.MOD(JA,2).EQ.0) FACCCF=2D0*FACCCF
19517                 NCHN=NCHN+1
19518                 ISIG(NCHN,1)=I
19519                 ISIG(NCHN,2)=J
19520                 ISIG(NCHN,3)=2
19521                 SIGH(NCHN)=FACCCF
19522               ENDIF
19523   260       CONTINUE
19524   270     CONTINUE
19525         ENDIF
19526  
19527       ELSEIF(ISUB.LE.20) THEN
19528         IF(ISUB.EQ.11) THEN
19529 C...f + f' -> f + f' (g exchange)
19530           FACQQ1=COMFAC*AS**2*4D0/9D0*(SH2+UH2)/TH2
19531           FACQQB=COMFAC*AS**2*4D0/9D0*((SH2+UH2)/TH2*FACA-
19532      &    MSTP(34)*2D0/3D0*UH2/(SH*TH))
19533           FACQQ2=COMFAC*AS**2*4D0/9D0*(SH2+TH2)/UH2
19534           FACQQI=-COMFAC*AS**2*4D0/9D0*MSTP(34)*2D0/3D0*SH2/(TH*UH)
19535           RATQQI=(FACQQ1+FACQQ2+FACQQI)/(FACQQ1+FACQQ2)
19536           IF(MSTP(5).GE.1) THEN
19537 C...Modifications from contact interactions (compositeness)
19538             FACCI1=FACQQ1+COMFAC*(SH2/PARU(155)**4)
19539             FACCIB=FACQQB+COMFAC*(8D0/9D0)*(AS*PARU(156)/PARU(155)**2)*
19540      &      (UH2/TH+UH2/SH)+COMFAC*(5D0/3D0)*(UH2/PARU(155)**4)
19541             FACCI2=FACQQ2+COMFAC*(8D0/9D0)*(AS*PARU(156)/PARU(155)**2)*
19542      &      (SH2/TH+SH2/UH)+COMFAC*(5D0/3D0)*(SH2/PARU(155)**4)
19543             FACCI3=FACQQ1+COMFAC*(UH2/PARU(155)**4)
19544             RATCII=(FACCI1*FACCI2+FACQQI)/(FACCI1+FACCI2)
19545           ENDIF
19546           DO 290 I=MMIN1,MMAX1
19547             IA=IABS(I)
19548             IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 290
19549             DO 280 J=MMIN2,MMAX2
19550               JA=IABS(J)
19551               IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 280
19552               NCHN=NCHN+1
19553               ISIG(NCHN,1)=I
19554               ISIG(NCHN,2)=J
19555               ISIG(NCHN,3)=1
19556               IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.(IA.GE.3.OR.
19557      &        JA.GE.3))) THEN
19558                 SIGH(NCHN)=FACQQ1
19559                 IF(I.EQ.-J) SIGH(NCHN)=FACQQB
19560               ELSE
19561                 SIGH(NCHN)=FACCI1
19562                 IF(I*J.LT.0) SIGH(NCHN)=FACCI3
19563                 IF(I.EQ.-J) SIGH(NCHN)=FACCIB
19564               ENDIF
19565               IF(I.EQ.J) THEN
19566                 NCHN=NCHN+1
19567                 ISIG(NCHN,1)=I
19568                 ISIG(NCHN,2)=J
19569                 ISIG(NCHN,3)=2
19570                 IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.IA.GE.3)) THEN
19571                   SIGH(NCHN-1)=0.5D0*FACQQ1*RATQQI
19572                   SIGH(NCHN)=0.5D0*FACQQ2*RATQQI
19573                 ELSE
19574                   SIGH(NCHN-1)=0.5D0*FACCI1*RATCII
19575                   SIGH(NCHN)=0.5D0*FACCI2*RATCII
19576                 ENDIF
19577               ENDIF
19578   280       CONTINUE
19579   290     CONTINUE
19580  
19581         ELSEIF(ISUB.EQ.12) THEN
19582 C...f + fbar -> f' + fbar' (q + qbar -> q' + qbar' only)
19583           CALL PYWIDT(21,SH,WDTP,WDTE)
19584           FACQQB=COMFAC*AS**2*4D0/9D0*(TH2+UH2)/SH2*
19585      &    (WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19586           IF(MSTP(5).EQ.1) THEN
19587 C...Modifications from contact interactions (compositeness)
19588             FACCIB=FACQQB
19589             DO 300 I=1,2
19590               FACCIB=FACCIB+COMFAC*(UH2/PARU(155)**4)*(WDTE(I,1)+
19591      &        WDTE(I,2)+WDTE(I,4))
19592   300       CONTINUE
19593           ELSEIF(MSTP(5).GE.2) THEN
19594             FACCIB=FACQQB+COMFAC*(UH2/PARU(155)**4)*
19595      &      (WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
19596           ENDIF
19597           DO 310 I=MMINA,MMAXA
19598             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
19599      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 310
19600             NCHN=NCHN+1
19601             ISIG(NCHN,1)=I
19602             ISIG(NCHN,2)=-I
19603             ISIG(NCHN,3)=1
19604             IF(MSTP(5).LE.0.OR.(MSTP(5).EQ.1.AND.IABS(I).GE.3)) THEN
19605               SIGH(NCHN)=FACQQB
19606             ELSE
19607               SIGH(NCHN)=FACCIB
19608             ENDIF
19609   310     CONTINUE
19610  
19611         ELSEIF(ISUB.EQ.13) THEN
19612 C...f + fbar -> g + g (q + qbar -> g + g only)
19613           FACGG1=COMFAC*AS**2*32D0/27D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
19614      &    UH2/SH2)
19615           FACGG2=COMFAC*AS**2*32D0/27D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
19616      &    TH2/SH2)
19617           DO 320 I=MMINA,MMAXA
19618             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
19619      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 320
19620             NCHN=NCHN+1
19621             ISIG(NCHN,1)=I
19622             ISIG(NCHN,2)=-I
19623             ISIG(NCHN,3)=1
19624             SIGH(NCHN)=0.5D0*FACGG1
19625             NCHN=NCHN+1
19626             ISIG(NCHN,1)=I
19627             ISIG(NCHN,2)=-I
19628             ISIG(NCHN,3)=2
19629             SIGH(NCHN)=0.5D0*FACGG2
19630   320     CONTINUE
19631  
19632         ELSEIF(ISUB.EQ.14) THEN
19633 C...f + fbar -> g + gamma (q + qbar -> g + gamma only)
19634           FACGG=COMFAC*AS*AEM*8D0/9D0*(TH2+UH2)/(TH*UH)
19635           DO 330 I=MMINA,MMAXA
19636             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
19637      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 330
19638             EI=KCHG(IABS(I),1)/3D0
19639             NCHN=NCHN+1
19640             ISIG(NCHN,1)=I
19641             ISIG(NCHN,2)=-I
19642             ISIG(NCHN,3)=1
19643             SIGH(NCHN)=FACGG*EI**2
19644   330     CONTINUE
19645  
19646         ELSEIF(ISUB.EQ.15) THEN
19647 C...f + fbar -> g + (gamma*/Z0) (q + qbar -> g + (gamma*/Z0) only)
19648           FACZG=COMFAC*AS*AEM*(8D0/9D0)*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
19649 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
19650           HFGG=0D0
19651           HFGZ=0D0
19652           HFZZ=0D0
19653           RADC4=1D0+PYALPS(SQM4)/PARU(1)
19654           DO 340 I=1,MIN(16,MDCY(23,3))
19655             IDC=I+MDCY(23,2)-1
19656             IF(MDME(IDC,1).LT.0) GOTO 340
19657             IMDM=0
19658             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
19659      &      IMDM=1
19660             IF(I.LE.8) THEN
19661               EF=KCHG(I,1)/3D0
19662               AF=SIGN(1D0,EF+0.1D0)
19663               VF=AF-4D0*EF*XWV
19664             ELSEIF(I.LE.16) THEN
19665               EF=KCHG(I+2,1)/3D0
19666               AF=SIGN(1D0,EF+0.1D0)
19667               VF=AF-4D0*EF*XWV
19668             ENDIF
19669             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
19670             IF(4D0*RM1.LT.1D0) THEN
19671               FCOF=1D0
19672               IF(I.LE.8) FCOF=3D0*RADC4
19673               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
19674               IF(IMDM.EQ.1) THEN
19675                 HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
19676                 HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
19677                 HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
19678      &          AF**2*(1D0-4D0*RM1))*BE34
19679               ENDIF
19680             ENDIF
19681   340     CONTINUE
19682 C...Propagators: as simulated in PYOFSH and as desired
19683           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
19684           MINT15=MINT(15)
19685           MINT(15)=1
19686           MINT(61)=1
19687           CALL PYWIDT(23,SQM4,WDTP,WDTE)
19688           MINT(15)=MINT15 
19689           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
19690           HFGG=HFGG*HFAEM*VINT(111)/SQM4
19691           HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
19692           HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
19693 C...Loop over flavours; consider full gamma/Z structure
19694           DO 350 I=MMINA,MMAXA
19695             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
19696      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 350
19697             EI=KCHG(IABS(I),1)/3D0
19698             AI=SIGN(1D0,EI)
19699             VI=AI-4D0*EI*XWV
19700             NCHN=NCHN+1
19701             ISIG(NCHN,1)=I
19702             ISIG(NCHN,2)=-I
19703             ISIG(NCHN,3)=1
19704             SIGH(NCHN)=FACZG*(EI**2*HFGG+EI*VI*HFGZ+
19705      &      (VI**2+AI**2)*HFZZ)/HBW4
19706   350     CONTINUE
19707  
19708         ELSEIF(ISUB.EQ.16) THEN
19709 C...f + fbar' -> g + W+/- (q + qbar' -> g + W+/- only)
19710           FACWG=COMFAC*AS*AEM/XW*2D0/9D0*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
19711 C...Propagators: as simulated in PYOFSH and as desired
19712           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
19713           CALL PYWIDT(24,SQM4,WDTP,WDTE)
19714           GMMWC=SQRT(SQM4)*WDTP(0)
19715           HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
19716           FACWG=FACWG*HBW4C/HBW4
19717           DO 370 I=MMIN1,MMAX1
19718             IA=IABS(I)
19719             IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 370
19720             DO 360 J=MMIN2,MMAX2
19721               JA=IABS(J)
19722               IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 360
19723               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 360
19724               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
19725               WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
19726               FCKM=VCKM((IA+1)/2,(JA+1)/2)
19727               NCHN=NCHN+1
19728               ISIG(NCHN,1)=I
19729               ISIG(NCHN,2)=J
19730               ISIG(NCHN,3)=1
19731               SIGH(NCHN)=FACWG*FCKM*WIDSC
19732   360       CONTINUE
19733   370     CONTINUE
19734  
19735         ELSEIF(ISUB.EQ.17) THEN
19736 C...f + fbar -> g + h0 (q + qbar -> g + h0 only)
19737  
19738         ELSEIF(ISUB.EQ.18) THEN
19739 C...f + fbar -> gamma + gamma
19740           FACGG=COMFAC*AEM**2*2D0*(TH2+UH2)/(TH*UH)
19741           DO 380 I=MMINA,MMAXA
19742             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 380
19743             EI=KCHG(IABS(I),1)/3D0
19744             FCOI=1D0
19745             IF(IABS(I).LE.10) FCOI=FACA/3D0
19746             NCHN=NCHN+1
19747             ISIG(NCHN,1)=I
19748             ISIG(NCHN,2)=-I
19749             ISIG(NCHN,3)=1
19750             SIGH(NCHN)=0.5D0*FACGG*FCOI*EI**4
19751   380     CONTINUE
19752  
19753         ELSEIF(ISUB.EQ.19) THEN
19754 C...f + fbar -> gamma + (gamma*/Z0)
19755           FACGZ=COMFAC*2D0*AEM**2*(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
19756 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
19757           HFGG=0D0
19758           HFGZ=0D0
19759           HFZZ=0D0
19760           RADC4=1D0+PYALPS(SQM4)/PARU(1)
19761           DO 390 I=1,MIN(16,MDCY(23,3))
19762             IDC=I+MDCY(23,2)-1
19763             IF(MDME(IDC,1).LT.0) GOTO 390
19764             IMDM=0
19765             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
19766      &      IMDM=1
19767             IF(I.LE.8) THEN
19768               EF=KCHG(I,1)/3D0
19769               AF=SIGN(1D0,EF+0.1D0)
19770               VF=AF-4D0*EF*XWV
19771             ELSEIF(I.LE.16) THEN
19772               EF=KCHG(I+2,1)/3D0
19773               AF=SIGN(1D0,EF+0.1D0)
19774               VF=AF-4D0*EF*XWV
19775             ENDIF
19776             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
19777             IF(4D0*RM1.LT.1D0) THEN
19778               FCOF=1D0
19779               IF(I.LE.8) FCOF=3D0*RADC4
19780               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
19781               IF(IMDM.EQ.1) THEN
19782                 HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
19783                 HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
19784                 HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
19785      &          AF**2*(1D0-4D0*RM1))*BE34
19786               ENDIF
19787             ENDIF
19788   390     CONTINUE
19789 C...Propagators: as simulated in PYOFSH and as desired
19790           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
19791           MINT15=MINT(15)
19792           MINT(15)=1
19793           MINT(61)=1
19794           CALL PYWIDT(23,SQM4,WDTP,WDTE)
19795           MINT(15)=MINT15 
19796           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
19797           HFGG=HFGG*HFAEM*VINT(111)/SQM4
19798           HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
19799           HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
19800 C...Loop over flavours; consider full gamma/Z structure
19801           DO 400 I=MMINA,MMAXA
19802             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 400
19803             EI=KCHG(IABS(I),1)/3D0
19804             AI=SIGN(1D0,EI)
19805             VI=AI-4D0*EI*XWV
19806             FCOI=1D0
19807             IF(IABS(I).LE.10) FCOI=FACA/3D0
19808             NCHN=NCHN+1
19809             ISIG(NCHN,1)=I
19810             ISIG(NCHN,2)=-I
19811             ISIG(NCHN,3)=1
19812             SIGH(NCHN)=FACGZ*FCOI*EI**2*(EI**2*HFGG+EI*VI*HFGZ+
19813      &      (VI**2+AI**2)*HFZZ)/HBW4
19814   400     CONTINUE
19815  
19816         ELSEIF(ISUB.EQ.20) THEN
19817 C...f + fbar' -> gamma + W+/-
19818           FACGW=COMFAC*0.5D0*AEM**2/XW
19819 C...Propagators: as simulated in PYOFSH and as desired
19820           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
19821           CALL PYWIDT(24,SQM4,WDTP,WDTE)
19822           GMMWC=SQRT(SQM4)*WDTP(0)
19823           HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
19824           FACGW=FACGW*HBW4C/HBW4
19825 C...Anomalous couplings
19826           TERM1=(TH2+UH2+2D0*SQM4*SH)/(TH*UH)
19827           TERM2=0D0
19828           TERM3=0D0
19829           IF(MSTP(5).GE.1) THEN
19830             TERM2=PARU(153)*(TH-UH)/(TH+UH)
19831             TERM3=0.5D0*PARU(153)**2*(TH*UH+(TH2+UH2)*SH/
19832      &      (4D0*SQMW))/(TH+UH)**2
19833           ENDIF
19834           DO 420 I=MMIN1,MMAX1
19835             IA=IABS(I)
19836             IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 420
19837             DO 410 J=MMIN2,MMAX2
19838               JA=IABS(J)
19839               IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 410
19840               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 410
19841               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
19842      &        GOTO 410
19843               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
19844               WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
19845               IF(IA.LE.10) THEN
19846                 FACWR=UH/(TH+UH)-1D0/3D0
19847                 FCKM=VCKM((IA+1)/2,(JA+1)/2)
19848                 FCOI=FACA/3D0
19849               ELSE
19850                 FACWR=-TH/(TH+UH)
19851                 FCKM=1D0
19852                 FCOI=1D0
19853               ENDIF
19854               FACWK=TERM1*FACWR**2+TERM2*FACWR+TERM3
19855               NCHN=NCHN+1
19856               ISIG(NCHN,1)=I
19857               ISIG(NCHN,2)=J
19858               ISIG(NCHN,3)=1
19859               SIGH(NCHN)=FACGW*FACWK*FCOI*FCKM*WIDSC
19860   410       CONTINUE
19861   420     CONTINUE
19862         ENDIF
19863  
19864       ELSEIF(ISUB.LE.30) THEN
19865         IF(ISUB.EQ.21) THEN
19866 C...f + fbar -> gamma + h0
19867  
19868         ELSEIF(ISUB.EQ.22) THEN
19869 C...f + fbar -> (gamma*/Z0) + (gamma*/Z0)
19870 C...Kinematics dependence
19871           FACZZ=COMFAC*AEM**2*((TH2+UH2+2D0*(SQM3+SQM4)*SH)/(TH*UH)-
19872      &    SQM3*SQM4*(1D0/TH2+1D0/UH2))
19873 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
19874           DO 440 I=1,6
19875             DO 430 J=1,3
19876               HGZ(I,J)=0D0
19877   430       CONTINUE
19878   440     CONTINUE
19879           RADC3=1D0+PYALPS(SQM3)/PARU(1)
19880           RADC4=1D0+PYALPS(SQM4)/PARU(1)
19881           DO 450 I=1,MIN(16,MDCY(23,3))
19882             IDC=I+MDCY(23,2)-1
19883             IF(MDME(IDC,1).LT.0) GOTO 450
19884             IMDM=0
19885             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2) IMDM=1
19886             IF(MDME(IDC,1).EQ.4.OR.MDME(IDC,1).EQ.5) IMDM=MDME(IDC,1)-2
19887             IF(I.LE.8) THEN
19888               EF=KCHG(I,1)/3D0
19889               AF=SIGN(1D0,EF+0.1D0)
19890               VF=AF-4D0*EF*XWV
19891             ELSEIF(I.LE.16) THEN
19892               EF=KCHG(I+2,1)/3D0
19893               AF=SIGN(1D0,EF+0.1D0)
19894               VF=AF-4D0*EF*XWV
19895             ENDIF
19896             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM3
19897             IF(4D0*RM1.LT.1D0) THEN
19898               FCOF=1D0
19899               IF(I.LE.8) FCOF=3D0*RADC3
19900               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
19901               IF(IMDM.GE.1) THEN
19902                 HGZ(1,IMDM)=HGZ(1,IMDM)+FCOF*EF**2*(1D0+2D0*RM1)*BE34
19903                 HGZ(2,IMDM)=HGZ(2,IMDM)+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
19904                 HGZ(3,IMDM)=HGZ(3,IMDM)+FCOF*(VF**2*(1D0+2D0*RM1)+
19905      &          AF**2*(1D0-4D0*RM1))*BE34
19906               ENDIF
19907             ENDIF
19908             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
19909             IF(4D0*RM1.LT.1D0) THEN
19910               FCOF=1D0
19911               IF(I.LE.8) FCOF=3D0*RADC4
19912               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
19913               IF(IMDM.GE.1) THEN
19914                 HGZ(4,IMDM)=HGZ(4,IMDM)+FCOF*EF**2*(1D0+2D0*RM1)*BE34
19915                 HGZ(5,IMDM)=HGZ(5,IMDM)+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
19916                 HGZ(6,IMDM)=HGZ(6,IMDM)+FCOF*(VF**2*(1D0+2D0*RM1)+
19917      &          AF**2*(1D0-4D0*RM1))*BE34
19918               ENDIF
19919             ENDIF
19920   450     CONTINUE
19921 C...Propagators: as simulated in PYOFSH and as desired
19922           HBW3=(1D0/PARU(1))*GMMZ/((SQM3-SQMZ)**2+GMMZ**2)
19923           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
19924           MINT15=MINT(15)
19925           MINT(15)=1
19926           MINT(61)=1
19927           CALL PYWIDT(23,SQM3,WDTP,WDTE)
19928           MINT(15)=MINT15 
19929           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
19930           DO 460 J=1,3
19931             HGZ(1,J)=HGZ(1,J)*HFAEM*VINT(111)/SQM3
19932             HGZ(2,J)=HGZ(2,J)*HFAEM*VINT(112)/SQM3
19933             HGZ(3,J)=HGZ(3,J)*HFAEM*VINT(114)/SQM3
19934   460     CONTINUE
19935           MINT15=MINT(15)
19936           MINT(15)=1
19937           MINT(61)=1
19938           CALL PYWIDT(23,SQM4,WDTP,WDTE)
19939           MINT(15)=MINT15 
19940           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
19941           DO 470 J=1,3
19942             HGZ(4,J)=HGZ(4,J)*HFAEM*VINT(111)/SQM4
19943             HGZ(5,J)=HGZ(5,J)*HFAEM*VINT(112)/SQM4
19944             HGZ(6,J)=HGZ(6,J)*HFAEM*VINT(114)/SQM4
19945   470     CONTINUE
19946 C...Loop over flavours; separate left- and right-handed couplings
19947           DO 490 I=MMINA,MMAXA
19948             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 490
19949             EI=KCHG(IABS(I),1)/3D0
19950             AI=SIGN(1D0,EI)
19951             VI=AI-4D0*EI*XWV
19952             VALI=VI-AI
19953             VARI=VI+AI
19954             FCOI=1D0
19955             IF(IABS(I).LE.10) FCOI=FACA/3D0
19956             DO 480 J=1,3
19957               HL3(J)=EI**2*HGZ(1,J)+EI*VALI*HGZ(2,J)+VALI**2*HGZ(3,J)
19958               HR3(J)=EI**2*HGZ(1,J)+EI*VARI*HGZ(2,J)+VARI**2*HGZ(3,J)
19959               HL4(J)=EI**2*HGZ(4,J)+EI*VALI*HGZ(5,J)+VALI**2*HGZ(6,J)
19960               HR4(J)=EI**2*HGZ(4,J)+EI*VARI*HGZ(5,J)+VARI**2*HGZ(6,J)
19961   480       CONTINUE
19962             FACLR=HL3(1)*HL4(1)+HL3(1)*(HL4(2)+HL4(3))+
19963      &      HL4(1)*(HL3(2)+HL3(3))+HL3(2)*HL4(3)+HL4(2)*HL3(3)+
19964      &      HR3(1)*HR4(1)+HR3(1)*(HR4(2)+HR4(3))+
19965      &      HR4(1)*(HR3(2)+HR3(3))+HR3(2)*HR4(3)+HR4(2)*HR3(3)
19966             NCHN=NCHN+1
19967             ISIG(NCHN,1)=I
19968             ISIG(NCHN,2)=-I
19969             ISIG(NCHN,3)=1
19970             SIGH(NCHN)=0.5D0*FACZZ*FCOI*FACLR/(HBW3*HBW4)
19971   490     CONTINUE
19972  
19973         ELSEIF(ISUB.EQ.23) THEN
19974 C...f + fbar' -> Z0 + W+/- (Z0 only, i.e. no gamma* admixture.)
19975           FACZW=COMFAC*0.5D0*(AEM/XW)**2
19976           FACZW=FACZW*WIDS(23,2)
19977           THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
19978           FACBW=1D0/((SH-SQMW)**2+GMMW**2)
19979           DO 510 I=MMIN1,MMAX1
19980             IA=IABS(I)
19981             IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 510
19982             DO 500 J=MMIN2,MMAX2
19983               JA=IABS(J)
19984               IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 500
19985               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 500
19986               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
19987      &        GOTO 500
19988               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
19989               EI=KCHG(IA,1)/3D0
19990               AI=SIGN(1D0,EI+0.1D0)
19991               VI=AI-4D0*EI*XWV
19992               EJ=KCHG(JA,1)/3D0
19993               AJ=SIGN(1D0,EJ+0.1D0)
19994               VJ=AJ-4D0*EJ*XWV
19995               IF(VI+AI.GT.0) THEN
19996                 VISAV=VI
19997                 AISAV=AI
19998                 VI=VJ
19999                 AI=AJ
20000                 VJ=VISAV
20001                 AJ=AISAV
20002               ENDIF
20003               FCKM=1D0
20004               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
20005               FCOI=1D0
20006               IF(IA.LE.10) FCOI=FACA/3D0
20007               NCHN=NCHN+1
20008               ISIG(NCHN,1)=I
20009               ISIG(NCHN,2)=J
20010               ISIG(NCHN,3)=1
20011               SIGH(NCHN)=FACZW*FCOI*FCKM*(FACBW*((9D0-8D0*XW)/4D0*THUH+
20012      &        (8D0*XW-6D0)/4D0*SH*(SQM3+SQM4))+(THUH-SH*(SQM3+SQM4))*
20013      &        (SH-SQMW)*FACBW*0.5D0*((VJ+AJ)/TH-(VI+AI)/UH)+
20014      &        THUH/(16D0*XW1)*((VJ+AJ)**2/TH2+(VI+AI)**2/UH2)+
20015      &        SH*(SQM3+SQM4)/(8D0*XW1)*(VI+AI)*(VJ+AJ)/(TH*UH))*
20016      &        WIDS(24,(5-KCHW)/2)
20017 C***Protect against slightly negative cross sections. (Reason yet to be 
20018 C***sorted out. One possibility: addition of width to the W propagator.)
20019               SIGH(NCHN)=MAX(0D0,SIGH(NCHN))
20020   500       CONTINUE
20021   510     CONTINUE
20022  
20023         ELSEIF(ISUB.EQ.24) THEN
20024 C...f + fbar -> Z0 + h0 (or H0, or A0)
20025           THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
20026           FACHZ=COMFAC*8D0*(AEM*XWC)**2*
20027      &    (THUH+2D0*SH*SQM3)/((SH-SQMZ)**2+GMMZ**2)
20028           FACHZ=FACHZ*WIDS(23,2)*WIDS(KFHIGG,2)
20029           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACHZ=FACHZ*
20030      &    PARU(154+10*IHIGG)**2
20031           DO 520 I=MMINA,MMAXA
20032             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 520
20033             EI=KCHG(IABS(I),1)/3D0
20034             AI=SIGN(1D0,EI)
20035             VI=AI-4D0*EI*XWV
20036             FCOI=1D0
20037             IF(IABS(I).LE.10) FCOI=FACA/3D0
20038             NCHN=NCHN+1
20039             ISIG(NCHN,1)=I
20040             ISIG(NCHN,2)=-I
20041             ISIG(NCHN,3)=1
20042             SIGH(NCHN)=FACHZ*FCOI*(VI**2+AI**2)
20043   520     CONTINUE
20044  
20045         ELSEIF(ISUB.EQ.25) THEN
20046 C...f + fbar -> W+ + W-
20047 C...Propagators: Z0, W+- as simulated in PYOFSH and as desired
20048           GMMZC=GMMZ
20049           HBWZC=SH**2/((SH-SQMZ)**2+GMMZC**2)
20050           HBW3=GMMW/((SQM3-SQMW)**2+GMMW**2)
20051           CALL PYWIDT(24,SQM3,WDTP,WDTE)
20052           GMMW3=SQRT(SQM3)*WDTP(0)
20053           HBW3C=GMMW3/((SQM3-SQMW)**2+GMMW3**2)
20054           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
20055           CALL PYWIDT(24,SQM4,WDTP,WDTE)
20056           GMMW4=SQRT(SQM4)*WDTP(0)
20057           HBW4C=GMMW4/((SQM4-SQMW)**2+GMMW4**2)
20058 C...Kinematical functions
20059           THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
20060           THUH34=(2D0*SH*(SQM3+SQM4)+THUH)/(SQM3*SQM4)
20061           GS=(((SH-SQM3-SQM4)**2-4D0*SQM3*SQM4)*THUH34+12D0*THUH)/SH2
20062           GT=THUH34+4D0*THUH/TH2
20063           GST=((SH-SQM3-SQM4)*THUH34+4D0*(SH*(SQM3+SQM4)-THUH)/TH)/SH
20064           GU=THUH34+4D0*THUH/UH2
20065           GSU=((SH-SQM3-SQM4)*THUH34+4D0*(SH*(SQM3+SQM4)-THUH)/UH)/SH
20066 C...Common factors and couplings
20067           FACWW=COMFAC*(HBW3C/HBW3)*(HBW4C/HBW4)
20068           FACWW=FACWW*WIDS(24,1)
20069           CGG=AEM**2/2D0
20070           CGZ=AEM**2/(4D0*XW)*HBWZC*(1D0-SQMZ/SH)
20071           CZZ=AEM**2/(32D0*XW**2)*HBWZC
20072           CNG=AEM**2/(4D0*XW)
20073           CNZ=AEM**2/(16D0*XW**2)*HBWZC*(1D0-SQMZ/SH)
20074           CNN=AEM**2/(16D0*XW**2)
20075 C...Coulomb factor for W+W- pair
20076           IF(MSTP(40).GE.1.AND.MSTP(40).LE.3) THEN
20077             COULE=(SH-4D0*SQMW)/(4D0*PMAS(24,1))
20078             COULP=MAX(1D-10,0.5D0*BE34*SQRT(SH))
20079             IF(COULE.LT.100D0*PMAS(24,2)) THEN
20080               COULP1=SQRT(0.5D0*PMAS(24,1)*(SQRT(COULE**2+
20081      &        PMAS(24,2)**2)-COULE))
20082             ELSE
20083               COULP1=SQRT(0.5D0*PMAS(24,1)*(0.5D0*PMAS(24,2)**2/COULE))
20084             ENDIF
20085             IF(COULE.GT.-100D0*PMAS(24,2)) THEN
20086               COULP2=SQRT(0.5D0*PMAS(24,1)*(SQRT(COULE**2+
20087      &        PMAS(24,2)**2)+COULE))
20088             ELSE
20089               COULP2=SQRT(0.5D0*PMAS(24,1)*(0.5D0*PMAS(24,2)**2/
20090      &        ABS(COULE)))
20091             ENDIF
20092             IF(MSTP(40).EQ.1) THEN
20093               COULDC=PARU(1)-2D0*ATAN((COULP1**2+COULP2**2-COULP**2)/
20094      &        MAX(1D-10,2D0*COULP*COULP1))
20095               FACCOU=1D0+0.5D0*PARU(101)*COULDC/MAX(1D-5,BE34)
20096             ELSEIF(MSTP(40).EQ.2) THEN
20097               COULCK=CMPLX(SNGL(COULP1),SNGL(COULP2))
20098               COULCP=CMPLX(0.,SNGL(COULP))
20099               COULCD=(COULCK+COULCP)/(COULCK-COULCP)
20100               COULCR=1.+SNGL(PARU(101)*SQRT(SH))/(4.*COULCP)*LOG(COULCD)
20101               COULCS=CMPLX(0.,0.)
20102               NSTP=100
20103               DO 530 ISTP=1,NSTP
20104                 COULXX=(ISTP-0.5)/NSTP
20105                 COULCS=COULCS+(1./COULXX)*LOG((1.+COULXX*COULCD)/
20106      &          (1.+COULXX/COULCD))
20107   530         CONTINUE
20108               COULCR=COULCR+SNGL(PARU(101)**2*SH)/(16.*COULCP*COULCK)*
20109      &        (COULCS/NSTP)
20110               FACCOU=ABS(COULCR)**2
20111             ELSEIF(MSTP(40).EQ.3) THEN
20112               COULDC=PARU(1)-2D0*(1D0-BE34)**2*ATAN((COULP1**2+
20113      &        COULP2**2-COULP**2)/MAX(1D-10,2D0*COULP*COULP1))
20114               FACCOU=1D0+0.5D0*PARU(101)*COULDC/MAX(1D-5,BE34)
20115             ENDIF
20116           ELSEIF(MSTP(40).EQ.4) THEN
20117             FACCOU=1D0+0.5D0*PARU(101)*PARU(1)/MAX(1D-5,BE34)
20118           ELSE
20119             FACCOU=1D0
20120           ENDIF
20121           VINT(95)=FACCOU
20122           FACWW=FACWW*FACCOU
20123 C...Loop over allowed flavours
20124           DO 540 I=MMINA,MMAXA
20125             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 540
20126             EI=KCHG(IABS(I),1)/3D0
20127             AI=SIGN(1D0,EI+0.1D0)
20128             VI=AI-4D0*EI*XWV
20129             FCOI=1D0
20130             IF(IABS(I).LE.10) FCOI=FACA/3D0
20131             IF(AI.LT.0D0) THEN
20132               DSIGWW=(CGG*EI**2+CGZ*VI*EI+CZZ*(VI**2+AI**2))*GS+
20133      &        (CNG*EI+CNZ*(VI+AI))*GST+CNN*GT
20134             ELSE
20135               DSIGWW=(CGG*EI**2+CGZ*VI*EI+CZZ*(VI**2+AI**2))*GS-
20136      &        (CNG*EI+CNZ*(VI+AI))*GSU+CNN*GU
20137             ENDIF
20138             NCHN=NCHN+1
20139             ISIG(NCHN,1)=I
20140             ISIG(NCHN,2)=-I
20141             ISIG(NCHN,3)=1
20142             SIGH(NCHN)=FACWW*FCOI*DSIGWW
20143   540     CONTINUE
20144  
20145         ELSEIF(ISUB.EQ.26) THEN
20146 C...f + fbar' -> W+/- + h0 (or H0, or A0)
20147           THUH=MAX(TH*UH-SQM3*SQM4,SH*CKIN(3)**2)
20148           FACHW=COMFAC*0.125D0*(AEM/XW)**2*(THUH+2D0*SH*SQM3)/
20149      &    ((SH-SQMW)**2+GMMW**2)
20150           FACHW=FACHW*WIDS(KFHIGG,2)
20151           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACHW=FACHW*
20152      &    PARU(155+10*IHIGG)**2
20153           DO 560 I=MMIN1,MMAX1
20154             IA=IABS(I)
20155             IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 560
20156             DO 550 J=MMIN2,MMAX2
20157               JA=IABS(J)
20158               IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(1,J).EQ.0) GOTO 550
20159               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 550
20160               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
20161      &        GOTO 550
20162               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
20163               FCKM=1D0
20164               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
20165               FCOI=1D0
20166               IF(IA.LE.10) FCOI=FACA/3D0
20167               NCHN=NCHN+1
20168               ISIG(NCHN,1)=I
20169               ISIG(NCHN,2)=J
20170               ISIG(NCHN,3)=1
20171               SIGH(NCHN)=FACHW*FCOI*FCKM*WIDS(24,(5-KCHW)/2)
20172   550       CONTINUE
20173   560     CONTINUE
20174  
20175         ELSEIF(ISUB.EQ.27) THEN
20176 C...f + fbar -> h0 + h0
20177  
20178         ELSEIF(ISUB.EQ.28) THEN
20179 C...f + g -> f + g (q + g -> q + g only)
20180           FACQG1=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*UH2/TH2-
20181      &    UH/SH)*FACA
20182           FACQG2=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*SH2/TH2-
20183      &    SH/UH)
20184           DO 580 I=MMINA,MMAXA
20185             IF(I.EQ.0.OR.IABS(I).GT.10) GOTO 580
20186             DO 570 ISDE=1,2
20187               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 570
20188               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 570
20189               NCHN=NCHN+1
20190               ISIG(NCHN,ISDE)=I
20191               ISIG(NCHN,3-ISDE)=21
20192               ISIG(NCHN,3)=1
20193               SIGH(NCHN)=FACQG1
20194               NCHN=NCHN+1
20195               ISIG(NCHN,ISDE)=I
20196               ISIG(NCHN,3-ISDE)=21
20197               ISIG(NCHN,3)=2
20198               SIGH(NCHN)=FACQG2
20199   570       CONTINUE
20200   580     CONTINUE
20201  
20202         ELSEIF(ISUB.EQ.29) THEN
20203 C...f + g -> f + gamma (q + g -> q + gamma only)
20204           FGQ=COMFAC*FACA*AS*AEM*1D0/3D0*(SH2+UH2)/(-SH*UH)
20205           DO 600 I=MMINA,MMAXA
20206             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 600
20207             EI=KCHG(IABS(I),1)/3D0
20208             FACGQ=FGQ*EI**2
20209             DO 590 ISDE=1,2
20210               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 590
20211               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 590
20212               NCHN=NCHN+1
20213               ISIG(NCHN,ISDE)=I
20214               ISIG(NCHN,3-ISDE)=21
20215               ISIG(NCHN,3)=1
20216               SIGH(NCHN)=FACGQ
20217   590       CONTINUE
20218   600     CONTINUE
20219  
20220         ELSEIF(ISUB.EQ.30) THEN
20221 C...f + g -> f + (gamma*/Z0) (q + g -> q + (gamma*/Z0) only)
20222           FZQ=COMFAC*FACA*AS*AEM*(1D0/3D0)*(SH2+UH2+2D0*SQM4*TH)/
20223      &    (-SH*UH)
20224 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
20225           HFGG=0D0
20226           HFGZ=0D0
20227           HFZZ=0D0
20228           RADC4=1D0+PYALPS(SQM4)/PARU(1)
20229           DO 610 I=1,MIN(16,MDCY(23,3))
20230             IDC=I+MDCY(23,2)-1
20231             IF(MDME(IDC,1).LT.0) GOTO 610
20232             IMDM=0
20233             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
20234      &      IMDM=1
20235             IF(I.LE.8) THEN
20236               EF=KCHG(I,1)/3D0
20237               AF=SIGN(1D0,EF+0.1D0)
20238               VF=AF-4D0*EF*XWV
20239             ELSEIF(I.LE.16) THEN
20240               EF=KCHG(I+2,1)/3D0
20241               AF=SIGN(1D0,EF+0.1D0)
20242               VF=AF-4D0*EF*XWV
20243             ENDIF
20244             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
20245             IF(4D0*RM1.LT.1D0) THEN
20246               FCOF=1D0
20247               IF(I.LE.8) FCOF=3D0*RADC4
20248               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
20249               IF(IMDM.EQ.1) THEN
20250                 HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
20251                 HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
20252                 HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
20253      &          AF**2*(1D0-4D0*RM1))*BE34
20254               ENDIF
20255             ENDIF
20256   610     CONTINUE
20257 C...Propagators: as simulated in PYOFSH and as desired
20258           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
20259           MINT15=MINT(15)
20260           MINT(15)=1
20261           MINT(61)=1
20262           CALL PYWIDT(23,SQM4,WDTP,WDTE)
20263           MINT(15)=MINT15 
20264           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
20265           HFGG=HFGG*HFAEM*VINT(111)/SQM4
20266           HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
20267           HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
20268 C...Loop over flavours; consider full gamma/Z structure
20269           DO 630 I=MMINA,MMAXA
20270             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 630
20271             EI=KCHG(IABS(I),1)/3D0
20272             AI=SIGN(1D0,EI)
20273             VI=AI-4D0*EI*XWV
20274             FACZQ=FZQ*(EI**2*HFGG+EI*VI*HFGZ+
20275      &      (VI**2+AI**2)*HFZZ)/HBW4
20276             DO 620 ISDE=1,2
20277               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 620
20278               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 620
20279               NCHN=NCHN+1
20280               ISIG(NCHN,ISDE)=I
20281               ISIG(NCHN,3-ISDE)=21
20282               ISIG(NCHN,3)=1
20283               SIGH(NCHN)=FACZQ
20284   620       CONTINUE
20285   630     CONTINUE
20286         ENDIF
20287  
20288       ELSEIF(ISUB.LE.40) THEN
20289         IF(ISUB.EQ.31) THEN
20290 C...f + g -> f' + W+/- (q + g -> q' + W+/- only)
20291           FACWQ=COMFAC*FACA*AS*AEM/XW*1D0/12D0*
20292      &    (SH2+UH2+2D0*SQM4*TH)/(-SH*UH)
20293 C...Propagators: as simulated in PYOFSH and as desired
20294           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
20295           CALL PYWIDT(24,SQM4,WDTP,WDTE)
20296           GMMWC=SQRT(SQM4)*WDTP(0)
20297           HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
20298           FACWQ=FACWQ*HBW4C/HBW4
20299           DO 650 I=MMINA,MMAXA
20300             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 650
20301             IA=IABS(I)
20302             KCHW=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
20303             WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
20304             DO 640 ISDE=1,2
20305               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 640
20306               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 640
20307               NCHN=NCHN+1
20308               ISIG(NCHN,ISDE)=I
20309               ISIG(NCHN,3-ISDE)=21
20310               ISIG(NCHN,3)=1
20311               SIGH(NCHN)=FACWQ*VINT(180+I)*WIDSC
20312   640       CONTINUE
20313   650     CONTINUE
20314  
20315         ELSEIF(ISUB.EQ.32) THEN
20316 C...f + g -> f + h0 (q + g -> q + h0 only)
20317           SQMHC=PMAS(25,1)**2
20318           FHCQ=COMFAC*FACA*AS*AEM/XW*1D0/24D0
20319           DO 651 I=MMINA,MMAXA
20320             IA=IABS(I)
20321             IF(IA.NE.5) GOTO 651
20322             SQML=PMAS(IA,1)**2
20323             IF(IA.LE.10.AND.MSTP(37).EQ.1.AND.MSTP(2).GE.1) SQML=SQML*
20324      &      (LOG(MAX(4D0,PARP(37)**2*SQML/PARU(117)**2))/
20325      &      LOG(MAX(4D0,SH/PARU(117)**2)))**(24D0/(33D0-2D0*MSTU(118)))
20326             IUA=IA+MOD(IA,2)
20327             SQMQ=SQML
20328             FACHCQ=FHCQ*SQML/SQMW*
20329      &      (SH/(SQMQ-UH)+2D0*SQMQ*(SQMHC-UH)/(SQMQ-UH)**2+(SQMQ-UH)/SH+
20330      &      2D0*SQMQ/(SQMQ-UH)+2D0*(SQMHC-UH)/(SQMQ-UH)*
20331      &      (SQMHC-SQMQ-SH)/SH)
20332             KCHHC=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
20333             DO 641 ISDE=1,2
20334               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 641
20335               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,1).EQ.0) GOTO 641
20336               NCHN=NCHN+1
20337               ISIG(NCHN,ISDE)=I
20338               ISIG(NCHN,3-ISDE)=21
20339               ISIG(NCHN,3)=1
20340               SIGH(NCHN)=FACHCQ*WIDS(37,(5-KCHHC)/2)
20341  641        CONTINUE
20342  651      CONTINUE
20343  
20344         ELSEIF(ISUB.EQ.33) THEN
20345 C...f + gamma -> f + g (q + gamma -> q + g only)
20346           FGQ=COMFAC*AS*AEM*8D0/3D0*(SH2+UH2)/(-SH*UH)
20347           DO 670 I=MMINA,MMAXA
20348             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 670
20349             EI=KCHG(IABS(I),1)/3D0
20350             FACGQ=FGQ*EI**2
20351             DO 660 ISDE=1,2
20352               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 660
20353               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 660
20354               NCHN=NCHN+1
20355               ISIG(NCHN,ISDE)=I
20356               ISIG(NCHN,3-ISDE)=22
20357               ISIG(NCHN,3)=1
20358               SIGH(NCHN)=FACGQ
20359   660       CONTINUE
20360   670     CONTINUE
20361  
20362         ELSEIF(ISUB.EQ.34) THEN
20363 C...f + gamma -> f + gamma
20364           FGQ=COMFAC*AEM**2*2D0*(SH2+UH2)/(-SH*UH)
20365          DO 690 I=MMINA,MMAXA
20366             IF(I.EQ.0) GOTO 690
20367             EI=KCHG(IABS(I),1)/3D0
20368             FACGQ=FGQ*EI**4
20369             DO 680 ISDE=1,2
20370               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 680
20371               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 680
20372               NCHN=NCHN+1
20373               ISIG(NCHN,ISDE)=I
20374               ISIG(NCHN,3-ISDE)=22
20375               ISIG(NCHN,3)=1
20376               SIGH(NCHN)=FACGQ
20377   680       CONTINUE
20378   690     CONTINUE
20379  
20380         ELSEIF(ISUB.EQ.35) THEN
20381 C...f + gamma -> f + (gamma*/Z0)
20382           IF(MINT(15).EQ.22.AND.VINT(3).LT.0D0) THEN
20383             FZQN=SH2+UH2+2D0*(SQM4-VINT(3)**2)*TH
20384             FZQDTM=VINT(3)**2*SQM4-SH*(UH-VINT(4)**2) 
20385           ELSEIF(MINT(16).EQ.22.AND.VINT(4).LT.0D0) THEN
20386             FZQN=SH2+UH2+2D0*(SQM4-VINT(4)**2)*TH
20387             FZQDTM=VINT(4)**2*SQM4-SH*(UH-VINT(3)**2)
20388           ELSE 
20389             FZQN=SH2+UH2+2D0*SQM4*TH
20390             FZQDTM=-SH*UH
20391           ENDIF       
20392           FZQN=COMFAC*2D0*AEM**2*MAX(0D0,FZQN)
20393 C...gamma, gamma/Z interference and Z couplings to final fermion pairs
20394           HFGG=0D0
20395           HFGZ=0D0
20396           HFZZ=0D0
20397           RADC4=1D0+PYALPS(SQM4)/PARU(1)
20398           DO 700 I=1,MIN(16,MDCY(23,3))
20399             IDC=I+MDCY(23,2)-1
20400             IF(MDME(IDC,1).LT.0) GOTO 700
20401             IMDM=0
20402             IF(MDME(IDC,1).EQ.1.OR.MDME(IDC,1).EQ.2.OR.MDME(IDC,1).EQ.4)
20403      &      IMDM=1
20404             IF(I.LE.8) THEN
20405               EF=KCHG(I,1)/3D0
20406               AF=SIGN(1D0,EF+0.1D0)
20407               VF=AF-4D0*EF*XWV
20408             ELSEIF(I.LE.16) THEN
20409               EF=KCHG(I+2,1)/3D0
20410               AF=SIGN(1D0,EF+0.1D0)
20411               VF=AF-4D0*EF*XWV
20412             ENDIF
20413             RM1=PMAS(IABS(KFDP(IDC,1)),1)**2/SQM4
20414             IF(4D0*RM1.LT.1D0) THEN
20415               FCOF=1D0
20416               IF(I.LE.8) FCOF=3D0*RADC4
20417               BE34=SQRT(MAX(0D0,1D0-4D0*RM1))
20418               IF(IMDM.EQ.1) THEN
20419                 HFGG=HFGG+FCOF*EF**2*(1D0+2D0*RM1)*BE34
20420                 HFGZ=HFGZ+FCOF*EF*VF*(1D0+2D0*RM1)*BE34
20421                 HFZZ=HFZZ+FCOF*(VF**2*(1D0+2D0*RM1)+
20422      &          AF**2*(1D0-4D0*RM1))*BE34
20423               ENDIF
20424             ENDIF
20425   700     CONTINUE
20426 C...Propagators: as simulated in PYOFSH and as desired
20427           HBW4=(1D0/PARU(1))*GMMZ/((SQM4-SQMZ)**2+GMMZ**2)
20428           MINT15=MINT(15)
20429           MINT(15)=1
20430           MINT(61)=1
20431           CALL PYWIDT(23,SQM4,WDTP,WDTE)
20432           MINT(15)=MINT15 
20433           HFAEM=(PARU(108)/PARU(2))*(2D0/3D0)
20434           HFGG=HFGG*HFAEM*VINT(111)/SQM4
20435           HFGZ=HFGZ*HFAEM*VINT(112)/SQM4
20436           HFZZ=HFZZ*HFAEM*VINT(114)/SQM4
20437 C...Loop over flavours; consider full gamma/Z structure
20438           DO 720 I=MMINA,MMAXA
20439             IF(I.EQ.0) GOTO 720
20440             EI=KCHG(IABS(I),1)/3D0
20441             AI=SIGN(1D0,EI)
20442             VI=AI-4D0*EI*XWV
20443             FACZQ=EI**2*(EI**2*HFGG+EI*VI*HFGZ+
20444      &      (VI**2+AI**2)*HFZZ)/HBW4
20445             FZQD=MAX(PMAS(IABS(I),1)**2*SQM4,FZQDTM)  
20446             DO 710 ISDE=1,2
20447               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 710
20448               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 710
20449               NCHN=NCHN+1
20450               ISIG(NCHN,ISDE)=I
20451               ISIG(NCHN,3-ISDE)=22
20452               ISIG(NCHN,3)=1
20453               SIGH(NCHN)=FACZQ*FZQN/FZQD
20454   710       CONTINUE
20455   720     CONTINUE
20456  
20457         ELSEIF(ISUB.EQ.36) THEN
20458 C...f + gamma -> f' + W+/-
20459           FWQ=COMFAC*AEM**2/(2D0*XW)*
20460      &    (SH2+UH2+2D0*SQM4*TH)/(SQPTH*SQM4-SH*UH)
20461 C...Propagators: as simulated in PYOFSH and as desired
20462           HBW4=GMMW/((SQM4-SQMW)**2+GMMW**2)
20463           CALL PYWIDT(24,SQM4,WDTP,WDTE)
20464           GMMWC=SQRT(SQM4)*WDTP(0)
20465           HBW4C=GMMWC/((SQM4-SQMW)**2+GMMWC**2)
20466           FWQ=FWQ*HBW4C/HBW4
20467           DO 740 I=MMINA,MMAXA
20468             IF(I.EQ.0) GOTO 740
20469             IA=IABS(I)
20470             EIA=ABS(KCHG(IABS(I),1)/3D0)
20471             FACWQ=FWQ*(EIA-SH/(SH+UH))**2
20472             KCHW=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
20473             WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))/WDTP(0)
20474             DO 730 ISDE=1,2
20475               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 730
20476               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 730
20477               NCHN=NCHN+1
20478               ISIG(NCHN,ISDE)=I
20479               ISIG(NCHN,3-ISDE)=22
20480               ISIG(NCHN,3)=1
20481               SIGH(NCHN)=FACWQ*VINT(180+I)*WIDSC
20482   730       CONTINUE
20483   740     CONTINUE
20484  
20485         ELSEIF(ISUB.EQ.37) THEN
20486 C...f + gamma -> f + h0
20487  
20488         ELSEIF(ISUB.EQ.38) THEN
20489 C...f + Z0 -> f + g (q + Z0 -> q + g only)
20490  
20491         ELSEIF(ISUB.EQ.39) THEN
20492 C...f + Z0 -> f + gamma
20493  
20494         ELSEIF(ISUB.EQ.40) THEN
20495 C...f + Z0 -> f + Z0
20496         ENDIF
20497  
20498       ELSEIF(ISUB.LE.50) THEN
20499         IF(ISUB.EQ.41) THEN
20500 C...f + Z0 -> f' + W+/-
20501  
20502         ELSEIF(ISUB.EQ.42) THEN
20503 C...f + Z0 -> f + h0
20504  
20505         ELSEIF(ISUB.EQ.43) THEN
20506 C...f + W+/- -> f' + g (q + W+/- -> q' + g only)
20507  
20508         ELSEIF(ISUB.EQ.44) THEN
20509 C...f + W+/- -> f' + gamma
20510  
20511         ELSEIF(ISUB.EQ.45) THEN
20512 C...f + W+/- -> f' + Z0
20513  
20514         ELSEIF(ISUB.EQ.46) THEN
20515 C...f + W+/- -> f' + W+/-
20516  
20517         ELSEIF(ISUB.EQ.47) THEN
20518 C...f + W+/- -> f' + h0
20519  
20520         ELSEIF(ISUB.EQ.48) THEN
20521 C...f + h0 -> f + g (q + h0 -> q + g only)
20522  
20523         ELSEIF(ISUB.EQ.49) THEN
20524 C...f + h0 -> f + gamma
20525  
20526         ELSEIF(ISUB.EQ.50) THEN
20527 C...f + h0 -> f + Z0
20528         ENDIF
20529  
20530       ELSEIF(ISUB.LE.60) THEN
20531         IF(ISUB.EQ.51) THEN
20532 C...f + h0 -> f' + W+/-
20533  
20534         ELSEIF(ISUB.EQ.52) THEN
20535 C...f + h0 -> f + h0
20536  
20537         ELSEIF(ISUB.EQ.53) THEN
20538 C...g + g -> f + fbar (g + g -> q + qbar only)
20539           CALL PYWIDT(21,SH,WDTP,WDTE)
20540           FACQQ1=COMFAC*AS**2*1D0/6D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
20541      &    UH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
20542           FACQQ2=COMFAC*AS**2*1D0/6D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
20543      &    TH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
20544           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 750
20545           NCHN=NCHN+1
20546           ISIG(NCHN,1)=21
20547           ISIG(NCHN,2)=21
20548           ISIG(NCHN,3)=1
20549           SIGH(NCHN)=FACQQ1
20550           NCHN=NCHN+1
20551           ISIG(NCHN,1)=21
20552           ISIG(NCHN,2)=21
20553           ISIG(NCHN,3)=2
20554           SIGH(NCHN)=FACQQ2
20555   750     CONTINUE
20556  
20557         ELSEIF(ISUB.EQ.54) THEN
20558 C...g + gamma -> f + fbar (g + gamma -> q + qbar only)
20559           CALL PYWIDT(21,SH,WDTP,WDTE)
20560           WDTESU=0D0
20561           DO 760 I=1,MIN(8,MDCY(21,3))
20562             EF=KCHG(I,1)/3D0
20563             WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
20564      &      WDTE(I,4))
20565   760     CONTINUE
20566           FACQQ=COMFAC*AEM*AS*WDTESU*(TH2+UH2)/(TH*UH)
20567           IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
20568             NCHN=NCHN+1
20569             ISIG(NCHN,1)=21
20570             ISIG(NCHN,2)=22
20571             ISIG(NCHN,3)=1
20572             SIGH(NCHN)=FACQQ
20573           ENDIF
20574           IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
20575             NCHN=NCHN+1
20576             ISIG(NCHN,1)=22
20577             ISIG(NCHN,2)=21
20578             ISIG(NCHN,3)=1
20579             SIGH(NCHN)=FACQQ
20580           ENDIF
20581  
20582         ELSEIF(ISUB.EQ.55) THEN
20583 C...g + Z -> f + fbar (g + Z -> q + qbar only)
20584  
20585         ELSEIF(ISUB.EQ.56) THEN
20586 C...g + W -> f + f'bar (g + W -> q + q'bar only)
20587  
20588         ELSEIF(ISUB.EQ.57) THEN
20589 C...g + h0 -> f + fbar (g + h0 -> q + qbar only)
20590  
20591         ELSEIF(ISUB.EQ.58) THEN
20592 C...gamma + gamma -> f + fbar
20593           CALL PYWIDT(22,SH,WDTP,WDTE)
20594           WDTESU=0D0
20595           DO 770 I=1,MIN(12,MDCY(22,3))
20596             IF(I.LE.8) EF= KCHG(I,1)/3D0
20597             IF(I.GE.9) EF= KCHG(9+2*(I-8),1)/3D0
20598             WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
20599      &      WDTE(I,4))
20600   770     CONTINUE
20601           FACFF=COMFAC*AEM**2*WDTESU*2D0*(TH2+UH2)/(TH*UH)
20602           IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
20603             NCHN=NCHN+1
20604             ISIG(NCHN,1)=22
20605             ISIG(NCHN,2)=22
20606             ISIG(NCHN,3)=1
20607             SIGH(NCHN)=FACFF
20608           ENDIF
20609  
20610         ELSEIF(ISUB.EQ.59) THEN
20611 C...gamma + Z0 -> f + fbar
20612  
20613         ELSEIF(ISUB.EQ.60) THEN
20614 C...gamma + W+/- -> f + fbar'
20615         ENDIF
20616  
20617       ELSEIF(ISUB.LE.70) THEN
20618         IF(ISUB.EQ.61) THEN
20619 C...gamma + h0 -> f + fbar
20620  
20621         ELSEIF(ISUB.EQ.62) THEN
20622 C...Z0 + Z0 -> f + fbar
20623  
20624         ELSEIF(ISUB.EQ.63) THEN
20625 C...Z0 + W+/- -> f + fbar'
20626  
20627         ELSEIF(ISUB.EQ.64) THEN
20628 C...Z0 + h0 -> f + fbar
20629  
20630         ELSEIF(ISUB.EQ.65) THEN
20631 C...W+ + W- -> f + fbar
20632  
20633         ELSEIF(ISUB.EQ.66) THEN
20634 C...W+/- + h0 -> f + fbar'
20635  
20636         ELSEIF(ISUB.EQ.67) THEN
20637 C...h0 + h0 -> f + fbar
20638  
20639         ELSEIF(ISUB.EQ.68) THEN
20640 C...g + g -> g + g
20641           FACGG1=COMFAC*AS**2*9D0/4D0*(SH2/TH2+2D0*SH/TH+3D0+2D0*TH/SH+
20642      &    TH2/SH2)*FACA
20643           FACGG2=COMFAC*AS**2*9D0/4D0*(UH2/SH2+2D0*UH/SH+3D0+2D0*SH/UH+
20644      &    SH2/UH2)*FACA
20645           FACGG3=COMFAC*AS**2*9D0/4D0*(TH2/UH2+2D0*TH/UH+3D0+2D0*UH/TH+
20646      &    UH2/TH2)
20647           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 780
20648           NCHN=NCHN+1
20649           ISIG(NCHN,1)=21
20650           ISIG(NCHN,2)=21
20651           ISIG(NCHN,3)=1
20652           SIGH(NCHN)=0.5D0*FACGG1
20653           NCHN=NCHN+1
20654           ISIG(NCHN,1)=21
20655           ISIG(NCHN,2)=21
20656           ISIG(NCHN,3)=2
20657           SIGH(NCHN)=0.5D0*FACGG2
20658           NCHN=NCHN+1
20659           ISIG(NCHN,1)=21
20660           ISIG(NCHN,2)=21
20661           ISIG(NCHN,3)=3
20662           SIGH(NCHN)=0.5D0*FACGG3
20663   780     CONTINUE
20664  
20665         ELSEIF(ISUB.EQ.69) THEN
20666 C...gamma + gamma -> W+ + W-
20667           SQMWE=MAX(0.5D0*SQMW,SQRT(SQM3*SQM4))
20668           FPROP=SH2/((SQMWE-TH)*(SQMWE-UH))
20669           FACWW=COMFAC*6D0*AEM**2*(1D0-FPROP*(4D0/3D0+2D0*SQMWE/SH)+
20670      &    FPROP**2*(2D0/3D0+2D0*(SQMWE/SH)**2))*WIDS(24,1)
20671           IF(KFAC(1,22)*KFAC(2,22).EQ.0) GOTO 790
20672           NCHN=NCHN+1
20673           ISIG(NCHN,1)=22
20674           ISIG(NCHN,2)=22
20675           ISIG(NCHN,3)=1
20676           SIGH(NCHN)=FACWW
20677   790     CONTINUE
20678  
20679         ELSEIF(ISUB.EQ.70) THEN
20680 C...gamma + W+/- -> Z0 + W+/-
20681           SQMWE=MAX(0.5D0*SQMW,SQRT(SQM3*SQM4))
20682           FPROP=(TH-SQMWE)**2/(-SH*(SQMWE-UH))
20683           FACZW=COMFAC*6D0*AEM**2*(XW1/XW)*
20684      &    (1D0-FPROP*(4D0/3D0+2D0*SQMWE/(TH-SQMWE))+
20685      &    FPROP**2*(2D0/3D0+2D0*(SQMWE/(TH-SQMWE))**2))*WIDS(23,2)
20686           DO 810 KCHW=1,-1,-2
20687             DO 800 ISDE=1,2
20688               IF(KFAC(ISDE,22)*KFAC(3-ISDE,24*KCHW).EQ.0) GOTO 800
20689               NCHN=NCHN+1
20690               ISIG(NCHN,ISDE)=22
20691               ISIG(NCHN,3-ISDE)=24*KCHW
20692               ISIG(NCHN,3)=1
20693               SIGH(NCHN)=FACZW*WIDS(24,(5-KCHW)/2)
20694   800       CONTINUE
20695   810     CONTINUE
20696         ENDIF
20697  
20698       ELSEIF(ISUB.LE.80) THEN
20699         IF(ISUB.EQ.71) THEN
20700 C...Z0 + Z0 -> Z0 + Z0
20701           IF(SH.LE.4.01D0*SQMZ) GOTO 840
20702  
20703           IF(MSTP(46).LE.2) THEN
20704 C...Exact scattering ME:s for on-mass-shell gauge bosons
20705             BE2=1D0-4D0*SQMZ/SH
20706             TH=-0.5D0*SH*BE2*(1D0-CTH)
20707             UH=-0.5D0*SH*BE2*(1D0+CTH)
20708             IF(MAX(TH,UH).GT.-1D0) GOTO 840
20709             SHANG=1D0/XW1*SQMW/SQMZ*(1D0+BE2)**2
20710             ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
20711             ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
20712             THANG=1D0/XW1*SQMW/SQMZ*(BE2-CTH)**2
20713             ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
20714             ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
20715             UHANG=1D0/XW1*SQMW/SQMZ*(BE2+CTH)**2
20716             AUHRE=(UH-SQMH)/((UH-SQMH)**2+GMMH**2)*UHANG
20717             AUHIM=-GMMH/((UH-SQMH)**2+GMMH**2)*UHANG
20718             FACZZ=COMFAC*1D0/(4096D0*PARU(1)**2*16D0*XW1**2)*
20719      &      (AEM/XW)**4*(SH/SQMW)**2*(SQMZ/SQMW)*SH2
20720             IF(MSTP(46).LE.0) FACZZ=FACZZ*(ASHRE**2+ASHIM**2)
20721             IF(MSTP(46).EQ.1) FACZZ=FACZZ*((ASHRE+ATHRE+AUHRE)**2+
20722      &      (ASHIM+ATHIM+AUHIM)**2)
20723             IF(MSTP(46).EQ.2) FACZZ=0D0
20724  
20725           ELSE
20726 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
20727             FACZZ=COMFAC*(AEM/(16D0*PARU(1)*XW*XW1))**2*(64D0/9D0)*
20728      &      ABS(A00U+2.*A20U)**2
20729           ENDIF
20730           FACZZ=FACZZ*WIDS(23,1)
20731  
20732           DO 830 I=MMIN1,MMAX1
20733             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 830
20734             EI=KCHG(IABS(I),1)/3D0
20735             AI=SIGN(1D0,EI)
20736             VI=AI-4D0*EI*XWV
20737             AVI=AI**2+VI**2
20738             DO 820 J=MMIN2,MMAX2
20739               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 820
20740               EJ=KCHG(IABS(J),1)/3D0
20741               AJ=SIGN(1D0,EJ)
20742               VJ=AJ-4D0*EJ*XWV
20743               AVJ=AJ**2+VJ**2
20744               NCHN=NCHN+1
20745               ISIG(NCHN,1)=I
20746               ISIG(NCHN,2)=J
20747               ISIG(NCHN,3)=1
20748               SIGH(NCHN)=0.5D0*FACZZ*AVI*AVJ
20749   820       CONTINUE
20750   830     CONTINUE
20751   840     CONTINUE
20752  
20753         ELSEIF(ISUB.EQ.72) THEN
20754 C...Z0 + Z0 -> W+ + W-
20755           IF(SH.LE.4.01D0*SQMZ) GOTO 870
20756  
20757           IF(MSTP(46).LE.2) THEN
20758 C...Exact scattering ME:s for on-mass-shell gauge bosons
20759             BE2=SQRT((1D0-4D0*SQMW/SH)*(1D0-4D0*SQMZ/SH))
20760             CTH2=CTH**2
20761             TH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH-BE2*CTH)
20762             UH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH+BE2*CTH)
20763             IF(MAX(TH,UH).GT.-1D0) GOTO 870
20764             SHANG=4D0*SQRT(SQMW/(SQMZ*XW1))*(1D0-2D0*SQMW/SH)*
20765      &      (1D0-2D0*SQMZ/SH)
20766             ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
20767             ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
20768             ATWRE=XW1/SQMZ*SH/(TH-SQMW)*((CTH-BE2)**2*(3D0/2D0+BE2/2D0*
20769      &      CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
20770      &      ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
20771      &      (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2+
20772      &      2D0*(SQMW+SQMZ)/SH*BE2*CTH))
20773             ATWIM=0D0
20774             AUWRE=XW1/SQMZ*SH/(UH-SQMW)*((CTH+BE2)**2*(3D0/2D0-BE2/2D0*
20775      &      CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
20776      &      ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
20777      &      (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2-
20778      &      2D0*(SQMW+SQMZ)/SH*BE2*CTH))
20779             AUWIM=0D0
20780             A4RE=2D0*XW1/SQMZ*(3D0-CTH2-4D0*(SQMW+SQMZ)/SH)
20781             A4IM=0D0
20782             FACWW=COMFAC*1D0/(4096D0*PARU(1)**2*16D0*XW1**2)*
20783      &      (AEM/XW)**4*(SH/SQMW)**2*(SQMZ/SQMW)*SH2
20784             IF(MSTP(46).LE.0) FACWW=FACWW*(ASHRE**2+ASHIM**2)
20785             IF(MSTP(46).EQ.1) FACWW=FACWW*((ASHRE+ATWRE+AUWRE+A4RE)**2+
20786      &      (ASHIM+ATWIM+AUWIM+A4IM)**2)
20787             IF(MSTP(46).EQ.2) FACWW=FACWW*((ATWRE+AUWRE+A4RE)**2+
20788      &      (ATWIM+AUWIM+A4IM)**2)
20789  
20790           ELSE
20791 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
20792             FACWW=COMFAC*(AEM/(16D0*PARU(1)*XW*XW1))**2*(64D0/9D0)*
20793      &      ABS(A00U-A20U)**2
20794           ENDIF
20795           FACWW=FACWW*WIDS(24,1)
20796  
20797           DO 860 I=MMIN1,MMAX1
20798             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 860
20799             EI=KCHG(IABS(I),1)/3D0
20800             AI=SIGN(1D0,EI)
20801             VI=AI-4D0*EI*XWV
20802             AVI=AI**2+VI**2
20803             DO 850 J=MMIN2,MMAX2
20804               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 850
20805               EJ=KCHG(IABS(J),1)/3D0
20806               AJ=SIGN(1D0,EJ)
20807               VJ=AJ-4D0*EJ*XWV
20808               AVJ=AJ**2+VJ**2
20809               NCHN=NCHN+1
20810               ISIG(NCHN,1)=I
20811               ISIG(NCHN,2)=J
20812               ISIG(NCHN,3)=1
20813               SIGH(NCHN)=FACWW*AVI*AVJ
20814   850       CONTINUE
20815   860     CONTINUE
20816   870     CONTINUE
20817  
20818         ELSEIF(ISUB.EQ.73) THEN
20819 C...Z0 + W+/- -> Z0 + W+/-
20820           IF(SH.LE.2D0*SQMZ+2D0*SQMW) GOTO 900
20821  
20822           IF(MSTP(46).LE.2) THEN
20823 C...Exact scattering ME:s for on-mass-shell gauge bosons
20824             BE2=1D0-2D0*(SQMZ+SQMW)/SH+((SQMZ-SQMW)/SH)**2
20825             EP1=1D0-(SQMZ-SQMW)/SH
20826             EP2=1D0+(SQMZ-SQMW)/SH
20827             TH=-0.5D0*SH*BE2*(1D0-CTH)
20828             UH=(SQMZ-SQMW)**2/SH-0.5D0*SH*BE2*(1D0+CTH)
20829             IF(MAX(TH,UH).GT.-1D0) GOTO 900
20830             THANG=(BE2-EP1*CTH)*(BE2-EP2*CTH)
20831             ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
20832             ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
20833             ASWRE=-XW1/SQMZ*SH/(SH-SQMW)*(-BE2*(EP1+EP2)**4*CTH+
20834      &      1D0/4D0*(BE2+EP1*EP2)**2*((EP1-EP2)**2-4D0*BE2*CTH)+
20835      &      2D0*BE2*(BE2+EP1*EP2)*(EP1+EP2)**2*CTH-
20836      &      1D0/16D0*SH/SQMW*(EP1**2-EP2**2)**2*(BE2+EP1*EP2)**2)
20837             ASWIM=0D0
20838             AUWRE=XW1/SQMZ*SH/(UH-SQMW)*(-BE2*(EP2+EP1*CTH)*
20839      &      (EP1+EP2*CTH)*(BE2+EP1*EP2)+BE2*(EP2+EP1*CTH)*
20840      &      (BE2+EP1*EP2*CTH)*(2D0*EP2-EP2*CTH+EP1)-
20841      &      BE2*(EP2+EP1*CTH)**2*(BE2-EP2**2*CTH)-1D0/8D0*
20842      &      (BE2+EP1*EP2*CTH)**2*((EP1+EP2)**2+2D0*BE2*(1D0-CTH))+
20843      &      1D0/32D0*SH/SQMW*(BE2+EP1*EP2*CTH)**2*
20844      &      (EP1**2-EP2**2)**2-BE2*(EP1+EP2*CTH)*(EP2+EP1*CTH)*
20845      &      (BE2+EP1*EP2)+BE2*(EP1+EP2*CTH)*(BE2+EP1*EP2*CTH)*
20846      &      (2D0*EP1-EP1*CTH+EP2)-BE2*(EP1+EP2*CTH)**2*
20847      &      (BE2-EP1**2*CTH)-1D0/8D0*(BE2+EP1*EP2*CTH)**2*
20848      &      ((EP1+EP2)**2+2D0*BE2*(1D0-CTH))+1D0/32D0*SH/SQMW*
20849      &      (BE2+EP1*EP2*CTH)**2*(EP1**2-EP2**2)**2)
20850             AUWIM=0D0
20851             A4RE=XW1/SQMZ*(EP1**2*EP2**2*(CTH**2-1D0)-
20852      &      2D0*BE2*(EP1**2+EP2**2+EP1*EP2)*CTH-2D0*BE2*EP1*EP2)
20853             A4IM=0D0
20854             FACZW=COMFAC*1D0/(4096D0*PARU(1)**2*4D0*XW1)*(AEM/XW)**4*
20855      &      (SH/SQMW)**2*SQRT(SQMZ/SQMW)*SH2
20856             IF(MSTP(46).LE.0) FACZW=0D0
20857             IF(MSTP(46).EQ.1) FACZW=FACZW*((ATHRE+ASWRE+AUWRE+A4RE)**2+
20858      &      (ATHIM+ASWIM+AUWIM+A4IM)**2)
20859             IF(MSTP(46).EQ.2) FACZW=FACZW*((ASWRE+AUWRE+A4RE)**2+
20860      &      (ASWIM+AUWIM+A4IM)**2)
20861  
20862           ELSE
20863 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
20864             FACZW=COMFAC*AEM**2/(64D0*PARU(1)**2*XW**2*XW1)*16D0*
20865      &      ABS(A20U+3.*A11U*SNGL(CTH))**2
20866           ENDIF
20867           FACZW=FACZW*WIDS(23,2)
20868  
20869           DO 890 I=MMIN1,MMAX1
20870             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 890
20871             EI=KCHG(IABS(I),1)/3D0
20872             AI=SIGN(1D0,EI)
20873             VI=AI-4D0*EI*XWV
20874             AVI=AI**2+VI**2
20875             KCHWI=ISIGN(1,KCHG(IABS(I),1)*ISIGN(1,I))
20876             DO 880 J=MMIN2,MMAX2
20877               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 880
20878               EJ=KCHG(IABS(J),1)/3D0
20879               AJ=SIGN(1D0,EJ)
20880               VJ=AI-4D0*EJ*XWV
20881               AVJ=AJ**2+VJ**2
20882               KCHWJ=ISIGN(1,KCHG(IABS(J),1)*ISIGN(1,J))
20883               NCHN=NCHN+1
20884               ISIG(NCHN,1)=I
20885               ISIG(NCHN,2)=J
20886               ISIG(NCHN,3)=1
20887               SIGH(NCHN)=FACZW*AVI*VINT(180+J)*WIDS(24,(5-KCHWJ)/2)
20888               NCHN=NCHN+1
20889               ISIG(NCHN,1)=I
20890               ISIG(NCHN,2)=J
20891               ISIG(NCHN,3)=2
20892               SIGH(NCHN)=FACZW*VINT(180+I)*WIDS(24,(5-KCHWI)/2)*AVJ
20893   880       CONTINUE
20894   890     CONTINUE
20895   900     CONTINUE
20896  
20897         ELSEIF(ISUB.EQ.75) THEN
20898 C...W+ + W- -> gamma + gamma
20899  
20900         ELSEIF(ISUB.EQ.76) THEN
20901 C...W+ + W- -> Z0 + Z0
20902           IF(SH.LE.4.01D0*SQMZ) GOTO 930
20903  
20904           IF(MSTP(46).LE.2) THEN
20905 C...Exact scattering ME:s for on-mass-shell gauge bosons
20906             BE2=SQRT((1D0-4D0*SQMW/SH)*(1D0-4D0*SQMZ/SH))
20907             CTH2=CTH**2
20908             TH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH-BE2*CTH)
20909             UH=-0.5D0*SH*(1D0-2D0*(SQMW+SQMZ)/SH+BE2*CTH)
20910             IF(MAX(TH,UH).GT.-1D0) GOTO 930
20911             SHANG=4D0*SQRT(SQMW/(SQMZ*XW1))*(1D0-2D0*SQMW/SH)*
20912      &      (1D0-2D0*SQMZ/SH)
20913             ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
20914             ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
20915             ATWRE=XW1/SQMZ*SH/(TH-SQMW)*((CTH-BE2)**2*(3D0/2D0+BE2/2D0*
20916      &      CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
20917      &      ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
20918      &      (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2+
20919      &      2D0*(SQMW+SQMZ)/SH*BE2*CTH))
20920             ATWIM=0D0
20921             AUWRE=XW1/SQMZ*SH/(UH-SQMW)*((CTH+BE2)**2*(3D0/2D0-BE2/2D0*
20922      &      CTH-(SQMW+SQMZ)/SH+(SQMW-SQMZ)**2/(SH*SQMW))+4D0*
20923      &      ((SQMW+SQMZ)/SH*(1D0-3D0*CTH2)+8D0*SQMW*SQMZ/SH2*
20924      &      (2D0*CTH2-1D0)+4D0*(SQMW**2+SQMZ**2)/SH2*CTH2-
20925      &      2D0*(SQMW+SQMZ)/SH*BE2*CTH))
20926             AUWIM=0D0
20927             A4RE=2D0*XW1/SQMZ*(3D0-CTH2-4D0*(SQMW+SQMZ)/SH)
20928             A4IM=0D0
20929             FACZZ=COMFAC*1D0/(4096D0*PARU(1)**2)*(AEM/XW)**4*
20930      &      (SH/SQMW)**2*SH2
20931             IF(MSTP(46).LE.0) FACZZ=FACZZ*(ASHRE**2+ASHIM**2)
20932             IF(MSTP(46).EQ.1) FACZZ=FACZZ*((ASHRE+ATWRE+AUWRE+A4RE)**2+
20933      &      (ASHIM+ATWIM+AUWIM+A4IM)**2)
20934             IF(MSTP(46).EQ.2) FACZZ=FACZZ*((ATWRE+AUWRE+A4RE)**2+
20935      &      (ATWIM+AUWIM+A4IM)**2)
20936  
20937           ELSE
20938 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
20939             FACZZ=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*(64D0/9D0)*
20940      &      ABS(A00U-A20U)**2
20941           ENDIF
20942           FACZZ=FACZZ*WIDS(23,1)
20943  
20944           DO 920 I=MMIN1,MMAX1
20945             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 920
20946             EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
20947             DO 910 J=MMIN2,MMAX2
20948               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 910
20949               EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
20950               IF(EI*EJ.GT.0D0) GOTO 910
20951               NCHN=NCHN+1
20952               ISIG(NCHN,1)=I
20953               ISIG(NCHN,2)=J
20954               ISIG(NCHN,3)=1
20955               SIGH(NCHN)=0.5D0*FACZZ*VINT(180+I)*VINT(180+J)
20956   910       CONTINUE
20957   920     CONTINUE
20958   930     CONTINUE
20959  
20960         ELSEIF(ISUB.EQ.77) THEN
20961 C...W+/- + W+/- -> W+/- + W+/-
20962           IF(SH.LE.4.01D0*SQMW) GOTO 960
20963  
20964           IF(MSTP(46).LE.2) THEN
20965 C...Exact scattering ME:s for on-mass-shell gauge bosons
20966             BE2=1D0-4D0*SQMW/SH
20967             BE4=BE2**2
20968             CTH2=CTH**2
20969             CTH3=CTH**3
20970             TH=-0.5D0*SH*BE2*(1D0-CTH)
20971             UH=-0.5D0*SH*BE2*(1D0+CTH)
20972             IF(MAX(TH,UH).GT.-1D0) GOTO 960
20973             SHANG=(1D0+BE2)**2
20974             ASHRE=(SH-SQMH)/((SH-SQMH)**2+GMMH**2)*SHANG
20975             ASHIM=-GMMH/((SH-SQMH)**2+GMMH**2)*SHANG
20976             THANG=(BE2-CTH)**2
20977             ATHRE=(TH-SQMH)/((TH-SQMH)**2+GMMH**2)*THANG
20978             ATHIM=-GMMH/((TH-SQMH)**2+GMMH**2)*THANG
20979             UHANG=(BE2+CTH)**2
20980             AUHRE=(UH-SQMH)/((UH-SQMH)**2+GMMH**2)*UHANG
20981             AUHIM=-GMMH/((UH-SQMH)**2+GMMH**2)*UHANG
20982             SGZANG=1D0/SQMW*BE2*(3D0-BE2)**2*CTH
20983             ASGRE=XW*SGZANG
20984             ASGIM=0D0
20985             ASZRE=XW1*SH/(SH-SQMZ)*SGZANG
20986             ASZIM=0D0
20987             TGZANG=1D0/SQMW*(BE2*(4D0-2D0*BE2+BE4)+BE2*(4D0-10D0*BE2+
20988      &      BE4)*CTH+(2D0-11D0*BE2+10D0*BE4)*CTH2+BE2*CTH3)
20989             ATGRE=0.5D0*XW*SH/TH*TGZANG
20990             ATGIM=0D0
20991             ATZRE=0.5D0*XW1*SH/(TH-SQMZ)*TGZANG
20992             ATZIM=0D0
20993             UGZANG=1D0/SQMW*(BE2*(4D0-2D0*BE2+BE4)-BE2*(4D0-10D0*BE2+
20994      &      BE4)*CTH+(2D0-11D0*BE2+10D0*BE4)*CTH2-BE2*CTH3)
20995             AUGRE=0.5D0*XW*SH/UH*UGZANG
20996             AUGIM=0D0
20997             AUZRE=0.5D0*XW1*SH/(UH-SQMZ)*UGZANG
20998             AUZIM=0D0
20999             A4ARE=1D0/SQMW*(1D0+2D0*BE2-6D0*BE2*CTH-CTH2)
21000             A4AIM=0D0
21001             A4SRE=2D0/SQMW*(1D0+2D0*BE2-CTH2)
21002             A4SIM=0D0
21003             FWW=COMFAC*1D0/(4096D0*PARU(1)**2)*(AEM/XW)**4*
21004      &      (SH/SQMW)**2*SH2
21005             IF(MSTP(46).LE.0) THEN
21006               AWWARE=ASHRE
21007               AWWAIM=ASHIM
21008               AWWSRE=0D0
21009               AWWSIM=0D0
21010             ELSEIF(MSTP(46).EQ.1) THEN
21011               AWWARE=ASHRE+ATHRE+ASGRE+ASZRE+ATGRE+ATZRE+A4ARE
21012               AWWAIM=ASHIM+ATHIM+ASGIM+ASZIM+ATGIM+ATZIM+A4AIM
21013               AWWSRE=-ATHRE-AUHRE+ATGRE+ATZRE+AUGRE+AUZRE+A4SRE
21014               AWWSIM=-ATHIM-AUHIM+ATGIM+ATZIM+AUGIM+AUZIM+A4SIM
21015             ELSE
21016               AWWARE=ASGRE+ASZRE+ATGRE+ATZRE+A4ARE
21017               AWWAIM=ASGIM+ASZIM+ATGIM+ATZIM+A4AIM
21018               AWWSRE=ATGRE+ATZRE+AUGRE+AUZRE+A4SRE
21019               AWWSIM=ATGIM+ATZIM+AUGIM+AUZIM+A4SIM
21020             ENDIF
21021             AWWA2=AWWARE**2+AWWAIM**2
21022             AWWS2=AWWSRE**2+AWWSIM**2
21023  
21024           ELSE
21025 C...Strongly interacting Z_L/W_L model of Dobado, Herrero, Terron
21026             FWWA=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*(64D0/9D0)*
21027      &      ABS(A00U+0.5*A20U+4.5*A11U*SNGL(CTH))**2
21028             FWWS=COMFAC*(AEM/(4D0*PARU(1)*XW))**2*64D0*ABS(A20U)**2
21029           ENDIF
21030  
21031           DO 950 I=MMIN1,MMAX1
21032             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 950
21033             EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
21034             DO 940 J=MMIN2,MMAX2
21035               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 940
21036               EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
21037               IF(EI*EJ.LT.0D0) THEN
21038 C...W+W-
21039                 IF(MSTP(45).EQ.1) GOTO 940
21040                 IF(MSTP(46).LE.2) FACWW=FWW*AWWA2*WIDS(24,1)
21041                 IF(MSTP(46).GE.3) FACWW=FWWA*WIDS(24,1)
21042               ELSE
21043 C...W+W+/W-W-
21044                 IF(MSTP(45).EQ.2) GOTO 940
21045                 IF(MSTP(46).LE.2) FACWW=FWW*AWWS2
21046                 IF(MSTP(46).GE.3) FACWW=FWWS
21047                 IF(EI.GT.0D0) FACWW=FACWW*WIDS(24,4)
21048                 IF(EI.LT.0D0) FACWW=FACWW*WIDS(24,5)
21049               ENDIF
21050               NCHN=NCHN+1
21051               ISIG(NCHN,1)=I
21052               ISIG(NCHN,2)=J
21053               ISIG(NCHN,3)=1
21054               SIGH(NCHN)=FACWW*VINT(180+I)*VINT(180+J)
21055               IF(EI*EJ.GT.0D0) SIGH(NCHN)=0.5D0*SIGH(NCHN)
21056   940       CONTINUE
21057   950     CONTINUE
21058   960     CONTINUE
21059  
21060         ELSEIF(ISUB.EQ.78) THEN
21061 C...W+/- + h0 -> W+/- + h0
21062  
21063         ELSEIF(ISUB.EQ.79) THEN
21064 C...h0 + h0 -> h0 + h0
21065  
21066         ELSEIF(ISUB.EQ.80) THEN
21067 C...q + gamma -> q' + pi+/-
21068           FQPI=COMFAC*(2D0*AEM/9D0)*(-SH/TH)*(1D0/SH2+1D0/TH2)
21069           ASSH=PYALPS(MAX(0.5D0,0.5D0*SH))
21070           Q2FPSH=0.55D0/LOG(MAX(2D0,2D0*SH))
21071           DELSH=UH*SQRT(ASSH*Q2FPSH)
21072           ASUH=PYALPS(MAX(0.5D0,-0.5D0*UH))
21073           Q2FPUH=0.55D0/LOG(MAX(2D0,-2D0*UH))
21074           DELUH=SH*SQRT(ASUH*Q2FPUH)
21075           DO 980 I=MAX(-2,MMINA),MIN(2,MMAXA)
21076             IF(I.EQ.0) GOTO 980
21077             EI=KCHG(IABS(I),1)/3D0
21078             EJ=SIGN(1D0-ABS(EI),EI)
21079             DO 970 ISDE=1,2
21080               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 970
21081               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 970
21082               NCHN=NCHN+1
21083               ISIG(NCHN,ISDE)=I
21084               ISIG(NCHN,3-ISDE)=22
21085               ISIG(NCHN,3)=1
21086               SIGH(NCHN)=FQPI*(EI*DELSH+EJ*DELUH)**2
21087   970       CONTINUE
21088   980     CONTINUE
21089  
21090         ENDIF
21091  
21092 C...C: 2 -> 2, tree diagrams with masses
21093  
21094       ELSEIF(ISUB.LE.90) THEN
21095         IF(ISUB.EQ.81) THEN
21096 C...q + qbar -> Q + Qbar
21097           SQMA=0.5D0*(SQM3+SQM4)-0.25D0*(SQM3-SQM4)**2/SH
21098           FACQQB=COMFAC*AS**2*4D0/9D0*(((TH-SQMA)**2+
21099      &    (UH-SQMA)**2)/SH2+2D0*SQMA/SH)
21100           IF(MSTP(35).GE.1) FACQQB=FACQQB*PYHFTH(SH,SQMA,0D0)
21101           WID2=1D0
21102           IF(MINT(55).EQ.6) WID2=WIDS(6,1)
21103           IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
21104           FACQQB=FACQQB*WID2
21105           DO 990 I=MMINA,MMAXA
21106             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
21107      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 990
21108             NCHN=NCHN+1
21109             ISIG(NCHN,1)=I
21110             ISIG(NCHN,2)=-I
21111             ISIG(NCHN,3)=1
21112             SIGH(NCHN)=FACQQB
21113   990     CONTINUE
21114  
21115         ELSEIF(ISUB.EQ.82) THEN
21116 C...g + g -> Q + Qbar
21117           SQMA=0.5D0*(SQM3+SQM4)-0.25D0*(SQM3-SQM4)**2/SH
21118           IF(MSTP(34).EQ.0) THEN
21119             FACQQ1=COMFAC*FACA*AS**2*(1D0/6D0)*((UH-SQMA)/(TH-SQMA)-
21120      &      2D0*(UH-SQMA)**2/SH2+4D0*(SQMA/SH)*(TH*UH-SQMA**2)/
21121      &      (TH-SQMA)**2)
21122             FACQQ2=COMFAC*FACA*AS**2*(1D0/6D0)*((TH-SQMA)/(UH-SQMA)-
21123      &      2D0*(TH-SQMA)**2/SH2+4D0*(SQMA/SH)*(TH*UH-SQMA**2)/
21124      &      (UH-SQMA)**2)
21125           ELSE
21126             FACQQ1=COMFAC*FACA*AS**2*(1D0/6D0)*((UH-SQMA)/(TH-SQMA)-
21127      &      2.25D0*(UH-SQMA)**2/SH2+4.5D0*(SQMA/SH)*(TH*UH-SQMA**2)/
21128      &      (TH-SQMA)**2+0.5D0*SQMA*TH/(TH-SQMA)**2-SQMA**2/
21129      &      (SH*(TH-SQMA)))
21130             FACQQ2=COMFAC*FACA*AS**2*(1D0/6D0)*((TH-SQMA)/(UH-SQMA)-
21131      &      2.25D0*(TH-SQMA)**2/SH2+4.5D0*(SQMA/SH)*(TH*UH-SQMA**2)/
21132      &      (UH-SQMA)**2+0.5D0*SQMA*UH/(UH-SQMA)**2-SQMA**2/
21133      &      (SH*(UH-SQMA)))
21134           ENDIF
21135           IF(MSTP(35).GE.1) THEN
21136             FATRE=PYHFTH(SH,SQMA,2D0/7D0)
21137             FACQQ1=FACQQ1*FATRE
21138             FACQQ2=FACQQ2*FATRE
21139           ENDIF
21140           WID2=1D0
21141           IF(MINT(55).EQ.6) WID2=WIDS(6,1)
21142           IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
21143           FACQQ1=FACQQ1*WID2
21144           FACQQ2=FACQQ2*WID2
21145           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1000
21146           NCHN=NCHN+1
21147           ISIG(NCHN,1)=21
21148           ISIG(NCHN,2)=21
21149           ISIG(NCHN,3)=1
21150           SIGH(NCHN)=FACQQ1
21151           NCHN=NCHN+1
21152           ISIG(NCHN,1)=21
21153           ISIG(NCHN,2)=21
21154           ISIG(NCHN,3)=2
21155           SIGH(NCHN)=FACQQ2
21156  1000     CONTINUE
21157  
21158         ELSEIF(ISUB.EQ.83) THEN
21159 C...f + q -> f' + Q
21160           FACQQS=COMFAC*(0.5D0*AEM/XW)**2*SH*(SH-SQM3)/(SQMW-TH)**2
21161           FACQQU=COMFAC*(0.5D0*AEM/XW)**2*UH*(UH-SQM3)/(SQMW-TH)**2
21162           DO 1020 I=MMIN1,MMAX1
21163             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1020
21164             DO 1010 J=MMIN2,MMAX2
21165               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1010
21166               IF(I*J.GT.0.AND.MOD(IABS(I+J),2).EQ.0) GOTO 1010
21167               IF(I*J.LT.0.AND.MOD(IABS(I+J),2).EQ.1) GOTO 1010
21168               IF(IABS(I).LT.MINT(55).AND.MOD(IABS(I+MINT(55)),2).EQ.1)
21169      &        THEN
21170                 NCHN=NCHN+1
21171                 ISIG(NCHN,1)=I
21172                 ISIG(NCHN,2)=J
21173                 ISIG(NCHN,3)=1
21174                 IF(MOD(MINT(55),2).EQ.0) FACCKM=VCKM(MINT(55)/2,
21175      &          (IABS(I)+1)/2)*VINT(180+J)
21176                 IF(MOD(MINT(55),2).EQ.1) FACCKM=VCKM(IABS(I)/2,
21177      &          (MINT(55)+1)/2)*VINT(180+J)
21178                 WID2=1D0
21179                 IF(I.GT.0) THEN
21180                   IF(MINT(55).EQ.6) WID2=WIDS(6,2)
21181                   IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
21182      &            WIDS(MINT(55),2)
21183                 ELSE
21184                   IF(MINT(55).EQ.6) WID2=WIDS(6,3)
21185                   IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
21186      &            WIDS(MINT(55),3)
21187                 ENDIF
21188                 IF(I*J.GT.0) SIGH(NCHN)=FACQQS*FACCKM*WID2
21189                 IF(I*J.LT.0) SIGH(NCHN)=FACQQU*FACCKM*WID2
21190               ENDIF
21191               IF(IABS(J).LT.MINT(55).AND.MOD(IABS(J+MINT(55)),2).EQ.1)
21192      &        THEN
21193                 NCHN=NCHN+1
21194                 ISIG(NCHN,1)=I
21195                 ISIG(NCHN,2)=J
21196                 ISIG(NCHN,3)=2
21197                 IF(MOD(MINT(55),2).EQ.0) FACCKM=VCKM(MINT(55)/2,
21198      &          (IABS(J)+1)/2)*VINT(180+I)
21199                 IF(MOD(MINT(55),2).EQ.1) FACCKM=VCKM(IABS(J)/2,
21200      &          (MINT(55)+1)/2)*VINT(180+I)
21201                 IF(J.GT.0) THEN
21202                   IF(MINT(55).EQ.6) WID2=WIDS(6,2)
21203                   IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
21204      &            WIDS(MINT(55),2)
21205                 ELSE
21206                   IF(MINT(55).EQ.6) WID2=WIDS(6,3)
21207                   IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=
21208      &            WIDS(MINT(55),3)
21209                 ENDIF
21210                 IF(I*J.GT.0) SIGH(NCHN)=FACQQS*FACCKM*WID2
21211                 IF(I*J.LT.0) SIGH(NCHN)=FACQQU*FACCKM*WID2
21212               ENDIF
21213  1010       CONTINUE
21214  1020     CONTINUE
21215  
21216         ELSEIF(ISUB.EQ.84) THEN
21217 C...g + gamma -> Q + Qbar
21218           SQMA=0.5D0*(SQM3+SQM4)-0.25D0*(SQM3-SQM4)**2/SH
21219           FMTU=SQMA/(SQMA-TH)+SQMA/(SQMA-UH)
21220           FACQQ=COMFAC*AS*AEM*(KCHG(IABS(MINT(55)),1)/3D0)**2*
21221      &    ((SQMA-TH)/(SQMA-UH)+(SQMA-UH)/(SQMA-TH)+4D0*FMTU*(1D0-FMTU))
21222           IF(MSTP(35).GE.1) FACQQ=FACQQ*PYHFTH(SH,SQMA,0D0)
21223           WID2=1D0
21224           IF(MINT(55).EQ.6) WID2=WIDS(6,1)
21225           IF(MINT(55).EQ.7.OR.MINT(55).EQ.8) WID2=WIDS(MINT(55),1)
21226           FACQQ=FACQQ*WID2
21227           IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
21228             NCHN=NCHN+1
21229             ISIG(NCHN,1)=21
21230             ISIG(NCHN,2)=22
21231             ISIG(NCHN,3)=1
21232             SIGH(NCHN)=FACQQ
21233           ENDIF
21234           IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
21235             NCHN=NCHN+1
21236             ISIG(NCHN,1)=22
21237             ISIG(NCHN,2)=21
21238             ISIG(NCHN,3)=1
21239             SIGH(NCHN)=FACQQ
21240           ENDIF
21241  
21242         ELSEIF(ISUB.EQ.85) THEN
21243 C...gamma + gamma -> F + Fbar (heavy fermion, quark or lepton)
21244           SQMA=0.5D0*(SQM3+SQM4)-0.25D0*(SQM3-SQM4)**2/SH
21245           FMTU=SQMA/(SQMA-TH)+SQMA/(SQMA-UH)
21246           FACFF=COMFAC*AEM**2*(KCHG(IABS(MINT(56)),1)/3D0)**4*2D0*
21247      &    ((SQMA-TH)/(SQMA-UH)+(SQMA-UH)/(SQMA-TH)+4D0*FMTU*(1D0-FMTU))
21248           IF(IABS(MINT(56)).LT.10) FACFF=3D0*FACFF
21249           IF(IABS(MINT(56)).LT.10.AND.MSTP(35).GE.1)
21250      &    FACFF=FACFF*PYHFTH(SH,SQMA,1D0)
21251           WID2=1D0
21252           IF(MINT(56).EQ.6) WID2=WIDS(6,1)
21253           IF(MINT(56).EQ.7.OR.MINT(56).EQ.8) WID2=WIDS(MINT(56),1)
21254           IF(MINT(56).EQ.17) WID2=WIDS(17,1)
21255           FACFF=FACFF*WID2
21256           IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
21257             NCHN=NCHN+1
21258             ISIG(NCHN,1)=22
21259             ISIG(NCHN,2)=22
21260             ISIG(NCHN,3)=1
21261             SIGH(NCHN)=FACFF
21262           ENDIF
21263  
21264         ELSEIF(ISUB.EQ.86) THEN
21265 C...g + g -> J/Psi + g
21266           FACQQG=COMFAC*AS**3*(5D0/9D0)*PARP(38)*SQRT(SQM3)*
21267      &    (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
21268      &    ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
21269           IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21270             NCHN=NCHN+1
21271             ISIG(NCHN,1)=21
21272             ISIG(NCHN,2)=21
21273             ISIG(NCHN,3)=1
21274             SIGH(NCHN)=FACQQG
21275           ENDIF
21276  
21277         ELSEIF(ISUB.EQ.87) THEN
21278 C...g + g -> chi_0c + g
21279           PGTW=(SH*TH+TH*UH+UH*SH)/SH2
21280           QGTW=(SH*TH*UH)/SH**3
21281           RGTW=SQM3/SH
21282           FACQQG=COMFAC*AS**3*4D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
21283      &    (9D0*RGTW**2*PGTW**4*(RGTW**4-2D0*RGTW**2*PGTW+PGTW**2)-
21284      &    6D0*RGTW*PGTW**3*QGTW*(2D0*RGTW**4-5D0*RGTW**2*PGTW+PGTW**2)-
21285      &    PGTW**2*QGTW**2*(RGTW**4+2D0*RGTW**2*PGTW-PGTW**2)+
21286      &    2D0*RGTW*PGTW*QGTW**3*(RGTW**2-PGTW)+6D0*RGTW**2*QGTW**4)/
21287      &    (QGTW*(QGTW-RGTW*PGTW)**4)
21288           IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21289             NCHN=NCHN+1
21290             ISIG(NCHN,1)=21
21291             ISIG(NCHN,2)=21
21292             ISIG(NCHN,3)=1
21293             SIGH(NCHN)=FACQQG
21294           ENDIF
21295  
21296         ELSEIF(ISUB.EQ.88) THEN
21297 C...g + g -> chi_1c + g
21298           PGTW=(SH*TH+TH*UH+UH*SH)/SH2
21299           QGTW=(SH*TH*UH)/SH**3
21300           RGTW=SQM3/SH
21301           FACQQG=COMFAC*AS**3*12D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
21302      &    PGTW**2*(RGTW*PGTW**2*(RGTW**2-4D0*PGTW)+2D0*QGTW*(-RGTW**4+
21303      &    5D0*RGTW**2*PGTW+PGTW**2)-15D0*RGTW*QGTW**2)/
21304      &    (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.89) THEN
21314 C...g + g -> chi_2c + 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*4D0*(PARP(39)/SQRT(SQM3))*(1D0/SH)*
21319      &    (12D0*RGTW**2*PGTW**4*(RGTW**4-2D0*RGTW**2*PGTW+PGTW**2)-
21320      &    3D0*RGTW*PGTW**3*QGTW*(8D0*RGTW**4-RGTW**2*PGTW+4D0*PGTW**2)+
21321      &    2D0*PGTW**2*QGTW**2*(-7D0*RGTW**4+43D0*RGTW**2*PGTW+PGTW**2)+
21322      &    RGTW*PGTW*QGTW**3*(16D0*RGTW**2-61D0*PGTW)+12D0*RGTW**2*
21323      &    QGTW**4)/(QGTW*(QGTW-RGTW*PGTW)**4)
21324           IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21325             NCHN=NCHN+1
21326             ISIG(NCHN,1)=21
21327             ISIG(NCHN,2)=21
21328             ISIG(NCHN,3)=1
21329             SIGH(NCHN)=FACQQG
21330           ENDIF
21331         ENDIF
21332  
21333 C...D: Mimimum bias processes
21334  
21335       ELSEIF(ISUB.LE.100) THEN
21336         IF(ISUB.EQ.91) THEN
21337 C...Elastic scattering
21338           SIGS=VINT(315)*VINT(316)*SIGT(0,0,1)
21339  
21340         ELSEIF(ISUB.EQ.92) THEN
21341 C...Single diffractive scattering (first side, i.e. XB)
21342           SIGS=VINT(315)*VINT(316)*SIGT(0,0,2)
21343  
21344         ELSEIF(ISUB.EQ.93) THEN
21345 C...Single diffractive scattering (second side, i.e. AX)
21346           SIGS=VINT(315)*VINT(316)*SIGT(0,0,3)
21347  
21348         ELSEIF(ISUB.EQ.94) THEN
21349 C...Double diffractive scattering
21350           SIGS=VINT(315)*VINT(316)*SIGT(0,0,4)
21351  
21352         ELSEIF(ISUB.EQ.95) THEN
21353 C...Low-pT scattering
21354           SIGS=VINT(315)*VINT(316)*SIGT(0,0,5)
21355  
21356         ELSEIF(ISUB.EQ.96) THEN
21357 C...Multiple interactions: sum of QCD processes
21358           CALL PYWIDT(21,SH,WDTP,WDTE)
21359  
21360 C...q + q' -> q + q'
21361           FACQQ1=COMFAC*AS**2*4D0/9D0*(SH2+UH2)/TH2
21362           FACQQB=COMFAC*AS**2*4D0/9D0*((SH2+UH2)/TH2*FACA-
21363      &    MSTP(34)*2D0/3D0*UH2/(SH*TH))
21364           FACQQ2=COMFAC*AS**2*4D0/9D0*(SH2+TH2)/UH2
21365           FACQQI=-COMFAC*AS**2*4D0/9D0*MSTP(34)*2D0/3D0*SH2/(TH*UH)
21366           RATQQI=(FACQQ1+FACQQ2+FACQQI)/(FACQQ1+FACQQ2)
21367           DO 1040 I=-5,5
21368             IF(I.EQ.0) GOTO 1040
21369             DO 1030 J=-5,5
21370               IF(J.EQ.0) GOTO 1030
21371               NCHN=NCHN+1
21372               ISIG(NCHN,1)=I
21373               ISIG(NCHN,2)=J
21374               ISIG(NCHN,3)=111
21375               SIGH(NCHN)=FACQQ1
21376               IF(I.EQ.-J) SIGH(NCHN)=FACQQB
21377               IF(I.EQ.J) THEN
21378                 SIGH(NCHN)=0.5D0*FACQQ1*RATQQI
21379                 NCHN=NCHN+1
21380                 ISIG(NCHN,1)=I
21381                 ISIG(NCHN,2)=J
21382                 ISIG(NCHN,3)=112
21383                 SIGH(NCHN)=0.5D0*FACQQ2*RATQQI
21384               ENDIF
21385  1030       CONTINUE
21386  1040     CONTINUE
21387  
21388 C...q + qbar -> q' + qbar' or g + g
21389           FACQQB=COMFAC*AS**2*4D0/9D0*(TH2+UH2)/SH2*
21390      &    (WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))
21391           FACGG1=COMFAC*AS**2*32D0/27D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
21392      &    UH2/SH2)
21393           FACGG2=COMFAC*AS**2*32D0/27D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
21394      &    TH2/SH2)
21395           DO 1050 I=-5,5
21396             IF(I.EQ.0) GOTO 1050
21397             NCHN=NCHN+1
21398             ISIG(NCHN,1)=I
21399             ISIG(NCHN,2)=-I
21400             ISIG(NCHN,3)=121
21401             SIGH(NCHN)=FACQQB
21402             NCHN=NCHN+1
21403             ISIG(NCHN,1)=I
21404             ISIG(NCHN,2)=-I
21405             ISIG(NCHN,3)=131
21406             SIGH(NCHN)=0.5D0*FACGG1
21407             NCHN=NCHN+1
21408             ISIG(NCHN,1)=I
21409             ISIG(NCHN,2)=-I
21410             ISIG(NCHN,3)=132
21411             SIGH(NCHN)=0.5D0*FACGG2
21412  1050     CONTINUE
21413  
21414 C...q + g -> q + g
21415           FACQG1=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*UH2/TH2-
21416      &    UH/SH)*FACA
21417           FACQG2=COMFAC*AS**2*4D0/9D0*((2D0+MSTP(34)*1D0/4D0)*SH2/TH2-
21418      &    SH/UH)
21419           DO 1070 I=-5,5
21420             IF(I.EQ.0) GOTO 1070
21421             DO 1060 ISDE=1,2
21422               NCHN=NCHN+1
21423               ISIG(NCHN,ISDE)=I
21424               ISIG(NCHN,3-ISDE)=21
21425               ISIG(NCHN,3)=281
21426               SIGH(NCHN)=FACQG1
21427               NCHN=NCHN+1
21428               ISIG(NCHN,ISDE)=I
21429               ISIG(NCHN,3-ISDE)=21
21430               ISIG(NCHN,3)=282
21431               SIGH(NCHN)=FACQG2
21432  1060       CONTINUE
21433  1070     CONTINUE
21434  
21435 C...g + g -> q + qbar or g + g
21436           FACQQ1=COMFAC*AS**2*1D0/6D0*(UH/TH-(2D0+MSTP(34)*1D0/4D0)*
21437      &    UH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
21438           FACQQ2=COMFAC*AS**2*1D0/6D0*(TH/UH-(2D0+MSTP(34)*1D0/4D0)*
21439      &    TH2/SH2)*(WDTE(0,1)+WDTE(0,2)+WDTE(0,3)+WDTE(0,4))*FACA
21440           FACGG1=COMFAC*AS**2*9D0/4D0*(SH2/TH2+2D0*SH/TH+3D0+
21441      &    2D0*TH/SH+TH2/SH2)*FACA
21442           FACGG2=COMFAC*AS**2*9D0/4D0*(UH2/SH2+2D0*UH/SH+3D0+
21443      &    2D0*SH/UH+SH2/UH2)*FACA
21444           FACGG3=COMFAC*AS**2*9D0/4D0*(TH2/UH2+2D0*TH/UH+3+
21445      &    2D0*UH/TH+UH2/TH2)
21446           NCHN=NCHN+1
21447           ISIG(NCHN,1)=21
21448           ISIG(NCHN,2)=21
21449           ISIG(NCHN,3)=531
21450           SIGH(NCHN)=FACQQ1
21451           NCHN=NCHN+1
21452           ISIG(NCHN,1)=21
21453           ISIG(NCHN,2)=21
21454           ISIG(NCHN,3)=532
21455           SIGH(NCHN)=FACQQ2
21456           NCHN=NCHN+1
21457           ISIG(NCHN,1)=21
21458           ISIG(NCHN,2)=21
21459           ISIG(NCHN,3)=681
21460           SIGH(NCHN)=0.5D0*FACGG1
21461           NCHN=NCHN+1
21462           ISIG(NCHN,1)=21
21463           ISIG(NCHN,2)=21
21464           ISIG(NCHN,3)=682
21465           SIGH(NCHN)=0.5D0*FACGG2
21466           NCHN=NCHN+1
21467           ISIG(NCHN,1)=21
21468           ISIG(NCHN,2)=21
21469           ISIG(NCHN,3)=683
21470           SIGH(NCHN)=0.5D0*FACGG3
21471  
21472         ELSEIF(ISUB.EQ.99) THEN
21473 C...f + gamma* -> f.
21474           IF(MINT(107).EQ.4) THEN
21475             Q2GA=VINT(307)
21476             P2GA=VINT(308)
21477             ISDE=2
21478           ELSE
21479             Q2GA=VINT(308)
21480             P2GA=VINT(307)
21481             ISDE=1
21482           ENDIF
21483           COMFAC=PARU(5)*4D0*PARU(1)**2*PARU(101)*VINT(315)*VINT(316)
21484           PM2RHO=PMAS(PYCOMP(113),1)**2
21485           IF(MSTP(19).EQ.0) THEN
21486             COMFAC=COMFAC/Q2GA
21487           ELSEIF(MSTP(19).EQ.1) THEN  
21488             COMFAC=COMFAC/(Q2GA+PM2RHO)
21489           ELSEIF(MSTP(19).EQ.2) THEN  
21490             COMFAC=COMFAC*Q2GA/(Q2GA+PM2RHO)**2
21491           ELSE 
21492             COMFAC=COMFAC*Q2GA/(Q2GA+PM2RHO)**2
21493             W2GA=VINT(2)
21494             IF(MINT(11).EQ.22.AND.MINT(12).EQ.22) THEN
21495               RDRDS=4.1D-3*W2GA**2.167D0/((Q2GA+0.15D0*W2GA)**2*
21496      &        Q2GA**0.75D0)*(1D0+0.11D0*Q2GA*P2GA/(1D0+0.02D0*P2GA**2))
21497               XGA=Q2GA/(W2GA+VINT(307)+VINT(308))
21498             ELSE
21499               RDRDS=1.5D-4*W2GA**2.167D0/((Q2GA+0.041D0*W2GA)**2*
21500      &        Q2GA**0.57D0)
21501               XGA=Q2GA/(W2GA+Q2GA-PMAS(PYCOMP(MINT(10+ISDE)),1)**2)
21502             ENDIF
21503             COMFAC=COMFAC*EXP(-MAX(1D-10,RDRDS))
21504             IF(MSTP(19).EQ.4) COMFAC=COMFAC/MAX(1D-2,1D0-XGA)
21505           ENDIF
21506           DO 1075 I=MMINA,MMAXA
21507             IF(I.EQ.0.OR.KFAC(ISDE,I).EQ.0) GOTO 1075
21508             IF(IABS(I).LT.10.AND.IABS(I).GT.MSTP(58)) GOTO 1075
21509             EI=KCHG(IABS(I),1)/3D0
21510             NCHN=NCHN+1
21511             ISIG(NCHN,ISDE)=I
21512             ISIG(NCHN,3-ISDE)=22
21513             ISIG(NCHN,3)=1
21514             SIGH(NCHN)=COMFAC*EI**2
21515  1075     CONTINUE
21516         ENDIF
21517  
21518 C...E: 2 -> 1, loop diagrams
21519  
21520       ELSEIF(ISUB.LE.110) THEN
21521         IF(ISUB.EQ.101) THEN
21522 C...g + g -> gamma*/Z0
21523  
21524         ELSEIF(ISUB.EQ.102) THEN
21525 C...g + g -> h0 (or H0, or A0)
21526           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
21527           HS=SHR*WDTP(0)
21528           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
21529           FACBW=4D0*COMFAC/((SH-SQMH)**2+HS**2)
21530           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
21531      &    FACBW=0D0
21532           HI=SHR*WDTP(13)/32D0
21533           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1080
21534           NCHN=NCHN+1
21535           ISIG(NCHN,1)=21
21536           ISIG(NCHN,2)=21
21537           ISIG(NCHN,3)=1
21538           SIGH(NCHN)=HI*FACBW*HF
21539  1080     CONTINUE
21540  
21541         ELSEIF(ISUB.EQ.103) THEN
21542 C...gamma + gamma -> 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(14)*2D0
21550           IF(KFAC(1,22)*KFAC(2,22).EQ.0) GOTO 1090
21551           NCHN=NCHN+1
21552           ISIG(NCHN,1)=22
21553           ISIG(NCHN,2)=22
21554           ISIG(NCHN,3)=1
21555           SIGH(NCHN)=HI*FACBW*HF
21556  1090     CONTINUE
21557  
21558       ELSEIF(ISUB.EQ.104) THEN
21559 C...g + g -> chi_c0.
21560         KC=PYCOMP(10441)
21561         FACBW=COMFAC*12D0*AS**2*PARP(39)*PMAS(KC,2)/
21562      &  ((SH-PMAS(KC,1)**2)**2+(PMAS(KC,1)*PMAS(KC,2))**2)
21563         IF(ABS(SQRT(SH)-PMAS(KC,1)).GT.50D0*PMAS(KC,2)) FACBW=0D0
21564         IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21565           NCHN=NCHN+1
21566           ISIG(NCHN,1)=21
21567           ISIG(NCHN,2)=21
21568           ISIG(NCHN,3)=1
21569           SIGH(NCHN)=FACBW
21570         ENDIF
21571  
21572       ELSEIF(ISUB.EQ.105) THEN
21573 C...g + g -> chi_c2.
21574         KC=PYCOMP(445)
21575         FACBW=COMFAC*16D0*AS**2*PARP(39)*PMAS(KC,2)/
21576      &  ((SH-PMAS(KC,1)**2)**2+(PMAS(KC,1)*PMAS(KC,2))**2)
21577         IF(ABS(SQRT(SH)-PMAS(KC,1)).GT.50D0*PMAS(KC,2)) FACBW=0D0
21578         IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21579           NCHN=NCHN+1
21580           ISIG(NCHN,1)=21
21581           ISIG(NCHN,2)=21
21582           ISIG(NCHN,3)=1
21583           SIGH(NCHN)=FACBW
21584         ENDIF
21585  
21586 C...Continuation C: 2 -> 2, tree diagrams with masses.
21587  
21588       ELSEIF(ISUB.EQ.106) THEN
21589 C...g + g -> J/Psi + gamma.
21590         EQ=2D0/3D0
21591         FACQQG=COMFAC*AEM*EQ**2*AS**2*(4D0/3D0)*PARP(38)*SQRT(SQM3)*
21592      &  (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
21593      &  ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
21594         IF(KFAC(1,21)*KFAC(2,21).NE.0) THEN
21595           NCHN=NCHN+1
21596           ISIG(NCHN,1)=21
21597           ISIG(NCHN,2)=21
21598           ISIG(NCHN,3)=1
21599           SIGH(NCHN)=FACQQG
21600         ENDIF
21601  
21602       ELSEIF(ISUB.EQ.107) THEN
21603 C...g + gamma -> J/Psi + g.
21604         EQ=2D0/3D0
21605         FACQQG=COMFAC*AEM*EQ**2*AS**2*(32D0/3D0)*PARP(38)*SQRT(SQM3)*
21606      &  (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
21607      &  ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
21608         IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
21609           NCHN=NCHN+1
21610           ISIG(NCHN,1)=21
21611           ISIG(NCHN,2)=22
21612           ISIG(NCHN,3)=1
21613           SIGH(NCHN)=FACQQG
21614         ENDIF
21615         IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
21616           NCHN=NCHN+1
21617           ISIG(NCHN,1)=22
21618           ISIG(NCHN,2)=21
21619           ISIG(NCHN,3)=1
21620           SIGH(NCHN)=FACQQG
21621         ENDIF
21622  
21623       ELSEIF(ISUB.EQ.108) THEN
21624 C...gamma + gamma -> J/Psi + gamma.
21625         EQ=2D0/3D0
21626         FACQQG=COMFAC*AEM**3*EQ**6*384D0*PARP(38)*SQRT(SQM3)*
21627      &  (((SH*(SH-SQM3))**2+(TH*(TH-SQM3))**2+(UH*(UH-SQM3))**2)/
21628      &  ((TH-SQM3)*(UH-SQM3))**2)/(SH-SQM3)**2
21629         IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
21630           NCHN=NCHN+1
21631           ISIG(NCHN,1)=22
21632           ISIG(NCHN,2)=22
21633           ISIG(NCHN,3)=1
21634           SIGH(NCHN)=FACQQG
21635         ENDIF
21636  
21637 C...F: 2 -> 2, box diagrams
21638  
21639         ELSEIF(ISUB.EQ.110) THEN
21640 C...f + fbar -> gamma + h0
21641           THUH=MAX(TH*UH,SH*CKIN(3)**2)
21642           FACHG=COMFAC*(3D0*AEM**4)/(2D0*PARU(1)**2*XW*SQMW)*SH*THUH
21643           FACHG=FACHG*WIDS(KFHIGG,2)
21644 C...Calculate loop contributions for intermediate gamma* and Z0
21645           CIGTOT=CMPLX(0.,0.)
21646           CIZTOT=CMPLX(0.,0.)
21647           JMAX=3*MSTP(1)+1
21648           DO 1100 J=1,JMAX
21649             IF(J.LE.2*MSTP(1)) THEN
21650               FNC=1D0
21651               EJ=KCHG(J,1)/3D0
21652               AJ=SIGN(1D0,EJ+0.1D0)
21653               VJ=AJ-4D0*EJ*XWV
21654               BALP=SQM4/(2D0*PMAS(J,1))**2
21655               BBET=SH/(2D0*PMAS(J,1))**2
21656             ELSEIF(J.LE.3*MSTP(1)) THEN
21657               FNC=3D0
21658               JL=2*(J-2*MSTP(1))-1
21659               EJ=KCHG(10+JL,1)/3D0
21660               AJ=SIGN(1D0,EJ+0.1D0)
21661               VJ=AJ-4D0*EJ*XWV
21662               BALP=SQM4/(2D0*PMAS(10+JL,1))**2
21663               BBET=SH/(2D0*PMAS(10+JL,1))**2
21664             ELSE
21665               BALP=SQM4/(2D0*PMAS(24,1))**2
21666               BBET=SH/(2D0*PMAS(24,1))**2
21667             ENDIF
21668             BABI=1D0/(BALP-BBET)
21669             IF(BALP.LT.1D0) THEN
21670               F0ALP=CMPLX(SNGL(ASIN(SQRT(BALP))),0.)
21671               F1ALP=F0ALP**2
21672             ELSE
21673               F0ALP=CMPLX(SNGL(LOG(SQRT(BALP)+SQRT(BALP-1D0))),
21674      &        -SNGL(0.5D0*PARU(1)))
21675               F1ALP=-F0ALP**2
21676             ENDIF
21677             F2ALP=SNGL(SQRT(ABS(BALP-1D0)/BALP))*F0ALP
21678             IF(BBET.LT.1D0) THEN
21679               F0BET=CMPLX(SNGL(ASIN(SQRT(BBET))),0.)
21680               F1BET=F0BET**2
21681             ELSE
21682               F0BET=CMPLX(SNGL(LOG(SQRT(BBET)+SQRT(BBET-1D0))),
21683      &        -SNGL(0.5D0*PARU(1)))
21684               F1BET=-F0BET**2
21685             ENDIF
21686             F2BET=SNGL(SQRT(ABS(BBET-1D0)/BBET))*F0BET
21687             IF(J.LE.3*MSTP(1)) THEN
21688               FIF=SNGL(0.5D0*BABI)+SNGL(BABI**2)*(SNGL(0.5D0*(1D0-BALP+
21689      &        BBET))*(F1BET-F1ALP)+SNGL(BBET)*(F2BET-F2ALP))
21690               CIGTOT=CIGTOT+SNGL(FNC*EJ**2)*FIF
21691               CIZTOT=CIZTOT+SNGL(FNC*EJ*VJ)*FIF
21692             ELSE
21693               TXW=XW/XW1
21694               CIGTOT=CIGTOT-0.5*(SNGL(BABI*(1.5D0+BALP))+SNGL(BABI**2)*
21695      &        (SNGL(1.5D0-3D0*BALP+4D0*BBET)*(F1BET-F1ALP)+
21696      &        SNGL(BBET*(2D0*BALP+3D0))*(F2BET-F2ALP)))
21697               CIZTOT=CIZTOT-SNGL(0.5D0*BABI*XW1)*(SNGL(5D0-TXW+2D0*BALP*
21698      &        (1D0-TXW))*(1.+SNGL(2D0*BABI*BBET)*(F2BET-F2ALP))+
21699      &        SNGL(BABI*(4D0*BBET*(3D0-TXW)-(2D0*BALP-1D0)*(5D0-TXW)))*
21700      &        (F1BET-F1ALP))
21701             ENDIF
21702  1100     CONTINUE
21703           CIGTOT=CIGTOT/SNGL(SH)
21704           CIZTOT=CIZTOT*SNGL(XWC)/CMPLX(SNGL(SH-SQMZ),SNGL(GMMZ))
21705 C...Loop over initial flavours
21706           DO 1110 I=MMINA,MMAXA
21707             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1110
21708             EI=KCHG(IABS(I),1)/3D0
21709             AI=SIGN(1D0,EI)
21710             VI=AI-4D0*EI*XWV
21711             FCOI=1D0
21712             IF(IABS(I).LE.10) FCOI=FACA/3D0
21713             NCHN=NCHN+1
21714             ISIG(NCHN,1)=I
21715             ISIG(NCHN,2)=-I
21716             ISIG(NCHN,3)=1
21717             SIGH(NCHN)=FACHG*FCOI*(ABS(SNGL(EI)*CIGTOT+SNGL(VI)*
21718      &      CIZTOT)**2+AI**2*ABS(CIZTOT)**2)
21719  1110     CONTINUE
21720  
21721         ENDIF
21722  
21723       ELSEIF(ISUB.LE.120) THEN
21724         IF(ISUB.EQ.111) THEN
21725 C...f + fbar -> g + h0 (q + qbar -> g + h0 only)
21726           A5STUR=0D0
21727           A5STUI=0D0
21728           DO 1120 I=1,2*MSTP(1)
21729             SQMQ=PMAS(I,1)**2
21730             EPSS=4D0*SQMQ/SH
21731             EPSH=4D0*SQMQ/SQMH
21732             CALL PYWAUX(1,EPSS,W1SR,W1SI)
21733             CALL PYWAUX(1,EPSH,W1HR,W1HI)
21734             CALL PYWAUX(2,EPSS,W2SR,W2SI)
21735             CALL PYWAUX(2,EPSH,W2HR,W2HI)
21736             A5STUR=A5STUR+EPSH*(1D0+SH/(TH+UH)*(W1SR-W1HR)+
21737      &      (0.25D0-SQMQ/(TH+UH))*(W2SR-W2HR))
21738             A5STUI=A5STUI+EPSH*(SH/(TH+UH)*(W1SI-W1HI)+
21739      &      (0.25D0-SQMQ/(TH+UH))*(W2SI-W2HI))
21740  1120     CONTINUE
21741           FACGH=COMFAC*FACA/(144D0*PARU(1)**2)*AEM/XW*AS**3*SQMH/SQMW*
21742      &    SQMH/SH*(UH**2+TH**2)/(UH+TH)**2*(A5STUR**2+A5STUI**2)
21743           FACGH=FACGH*WIDS(25,2)
21744           DO 1130 I=MMINA,MMAXA
21745             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
21746      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1130
21747             NCHN=NCHN+1
21748             ISIG(NCHN,1)=I
21749             ISIG(NCHN,2)=-I
21750             ISIG(NCHN,3)=1
21751             SIGH(NCHN)=FACGH
21752  1130     CONTINUE
21753  
21754         ELSEIF(ISUB.EQ.112) THEN
21755 C...f + g -> f + h0 (q + g -> q + h0 only)
21756           A5TSUR=0D0
21757           A5TSUI=0D0
21758           DO 1140 I=1,2*MSTP(1)
21759             SQMQ=PMAS(I,1)**2
21760             EPST=4D0*SQMQ/TH
21761             EPSH=4D0*SQMQ/SQMH
21762             CALL PYWAUX(1,EPST,W1TR,W1TI)
21763             CALL PYWAUX(1,EPSH,W1HR,W1HI)
21764             CALL PYWAUX(2,EPST,W2TR,W2TI)
21765             CALL PYWAUX(2,EPSH,W2HR,W2HI)
21766             A5TSUR=A5TSUR+EPSH*(1D0+TH/(SH+UH)*(W1TR-W1HR)+
21767      &      (0.25D0-SQMQ/(SH+UH))*(W2TR-W2HR))
21768             A5TSUI=A5TSUI+EPSH*(TH/(SH+UH)*(W1TI-W1HI)+
21769      &      (0.25D0-SQMQ/(SH+UH))*(W2TI-W2HI))
21770  1140     CONTINUE
21771           FACQH=COMFAC*FACA/(384D0*PARU(1)**2)*AEM/XW*AS**3*SQMH/SQMW*
21772      &    SQMH/(-TH)*(UH**2+SH**2)/(UH+SH)**2*(A5TSUR**2+A5TSUI**2)
21773           FACQH=FACQH*WIDS(25,2)
21774           DO 1160 I=MMINA,MMAXA
21775             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1160
21776             DO 1150 ISDE=1,2
21777               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1150
21778               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1150
21779               NCHN=NCHN+1
21780               ISIG(NCHN,ISDE)=I
21781               ISIG(NCHN,3-ISDE)=21
21782               ISIG(NCHN,3)=1
21783               SIGH(NCHN)=FACQH
21784  1150       CONTINUE
21785  1160     CONTINUE
21786  
21787         ELSEIF(ISUB.EQ.113) THEN
21788 C...g + g -> g + h0
21789           A2STUR=0D0
21790           A2STUI=0D0
21791           A2USTR=0D0
21792           A2USTI=0D0
21793           A2TUSR=0D0
21794           A2TUSI=0D0
21795           A4STUR=0D0
21796           A4STUI=0D0
21797           DO 1170 I=1,2*MSTP(1)
21798             SQMQ=PMAS(I,1)**2
21799             EPSS=4D0*SQMQ/SH
21800             EPST=4D0*SQMQ/TH
21801             EPSU=4D0*SQMQ/UH
21802             EPSH=4D0*SQMQ/SQMH
21803             IF(EPSH.LT.1D-6) GOTO 1170
21804             CALL PYWAUX(1,EPSS,W1SR,W1SI)
21805             CALL PYWAUX(1,EPST,W1TR,W1TI)
21806             CALL PYWAUX(1,EPSU,W1UR,W1UI)
21807             CALL PYWAUX(1,EPSH,W1HR,W1HI)
21808             CALL PYWAUX(2,EPSS,W2SR,W2SI)
21809             CALL PYWAUX(2,EPST,W2TR,W2TI)
21810             CALL PYWAUX(2,EPSU,W2UR,W2UI)
21811             CALL PYWAUX(2,EPSH,W2HR,W2HI)
21812             CALL PYI3AU(EPSS,TH/UH,Y3STUR,Y3STUI)
21813             CALL PYI3AU(EPSS,UH/TH,Y3SUTR,Y3SUTI)
21814             CALL PYI3AU(EPST,SH/UH,Y3TSUR,Y3TSUI)
21815             CALL PYI3AU(EPST,UH/SH,Y3TUSR,Y3TUSI)
21816             CALL PYI3AU(EPSU,SH/TH,Y3USTR,Y3USTI)
21817             CALL PYI3AU(EPSU,TH/SH,Y3UTSR,Y3UTSI)
21818             CALL PYI3AU(EPSH,SQMH/SH*TH/UH,YHSTUR,YHSTUI)
21819             CALL PYI3AU(EPSH,SQMH/SH*UH/TH,YHSUTR,YHSUTI)
21820             CALL PYI3AU(EPSH,SQMH/TH*SH/UH,YHTSUR,YHTSUI)
21821             CALL PYI3AU(EPSH,SQMH/TH*UH/SH,YHTUSR,YHTUSI)
21822             CALL PYI3AU(EPSH,SQMH/UH*SH/TH,YHUSTR,YHUSTI)
21823             CALL PYI3AU(EPSH,SQMH/UH*TH/SH,YHUTSR,YHUTSI)
21824             W3STUR=YHSTUR-Y3STUR-Y3UTSR
21825             W3STUI=YHSTUI-Y3STUI-Y3UTSI
21826             W3SUTR=YHSUTR-Y3SUTR-Y3TUSR
21827             W3SUTI=YHSUTI-Y3SUTI-Y3TUSI
21828             W3TSUR=YHTSUR-Y3TSUR-Y3USTR
21829             W3TSUI=YHTSUI-Y3TSUI-Y3USTI
21830             W3TUSR=YHTUSR-Y3TUSR-Y3SUTR
21831             W3TUSI=YHTUSI-Y3TUSI-Y3SUTI
21832             W3USTR=YHUSTR-Y3USTR-Y3TSUR
21833             W3USTI=YHUSTI-Y3USTI-Y3TSUI
21834             W3UTSR=YHUTSR-Y3UTSR-Y3STUR
21835             W3UTSI=YHUTSI-Y3UTSI-Y3STUI
21836             B2STUR=SQMQ/SQMH**2*(SH*(UH-SH)/(SH+UH)+2D0*TH*UH*
21837      &      (UH+2D0*SH)/(SH+UH)**2*(W1TR-W1HR)+(SQMQ-SH/4D0)*
21838      &      (0.5D0*W2SR+0.5D0*W2HR-W2TR+W3STUR)+SH2*(2D0*SQMQ/
21839      &      (SH+UH)**2-0.5D0/(SH+UH))*(W2TR-W2HR)+0.5D0*TH*UH/SH*
21840      &      (W2HR-2D0*W2TR)+0.125D0*(SH-12D0*SQMQ-4D0*TH*UH/SH)*W3TSUR)
21841             B2STUI=SQMQ/SQMH**2*(2D0*TH*UH*(UH+2D0*SH)/(SH+UH)**2*
21842      &      (W1TI-W1HI)+(SQMQ-SH/4D0)*(0.5D0*W2SI+0.5D0*W2HI-W2TI+
21843      &      W3STUI)+SH2*(2D0*SQMQ/(SH+UH)**2-0.5D0/(SH+UH))*
21844      &      (W2TI-W2HI)+0.5D0*TH*UH/SH*(W2HI-2D0*W2TI)+0.125D0*
21845      &      (SH-12D0*SQMQ-4D0*TH*UH/SH)*W3TSUI)
21846             B2SUTR=SQMQ/SQMH**2*(SH*(TH-SH)/(SH+TH)+2D0*UH*TH*
21847      &      (TH+2D0*SH)/(SH+TH)**2*(W1UR-W1HR)+(SQMQ-SH/4D0)*
21848      &      (0.5D0*W2SR+0.5D0*W2HR-W2UR+W3SUTR)+SH2*(2D0*SQMQ/
21849      &      (SH+TH)**2-0.5D0/(SH+TH))*(W2UR-W2HR)+0.5D0*UH*TH/SH*
21850      &      (W2HR-2D0*W2UR)+0.125D0*(SH-12D0*SQMQ-4D0*UH*TH/SH)*W3USTR)
21851             B2SUTI=SQMQ/SQMH**2*(2D0*UH*TH*(TH+2D0*SH)/(SH+TH)**2*
21852      &      (W1UI-W1HI)+(SQMQ-SH/4D0)*(0.5D0*W2SI+0.5D0*W2HI-W2UI+
21853      &      W3SUTI)+SH2*(2D0*SQMQ/(SH+TH)**2-0.5D0/(SH+TH))*
21854      &      (W2UI-W2HI)+0.5D0*UH*TH/SH*(W2HI-2D0*W2UI)+0.125D0*
21855      &      (SH-12D0*SQMQ-4D0*UH*TH/SH)*W3USTI)
21856             B2TSUR=SQMQ/SQMH**2*(TH*(UH-TH)/(TH+UH)+2D0*SH*UH*
21857      &      (UH+2D0*TH)/(TH+UH)**2*(W1SR-W1HR)+(SQMQ-TH/4D0)*
21858      &      (0.5D0*W2TR+0.5D0*W2HR-W2SR+W3TSUR)+TH2*(2D0*SQMQ/
21859      &      (TH+UH)**2-0.5D0/(TH+UH))*(W2SR-W2HR)+0.5D0*SH*UH/TH*
21860      &      (W2HR-2D0*W2SR)+0.125D0*(TH-12D0*SQMQ-4D0*SH*UH/TH)*W3STUR)
21861             B2TSUI=SQMQ/SQMH**2*(2D0*SH*UH*(UH+2D0*TH)/(TH+UH)**2*
21862      &      (W1SI-W1HI)+(SQMQ-TH/4D0)*(0.5D0*W2TI+0.5D0*W2HI-W2SI+
21863      &      W3TSUI)+TH2*(2D0*SQMQ/(TH+UH)**2-0.5D0/(TH+UH))*
21864      &      (W2SI-W2HI)+0.5D0*SH*UH/TH*(W2HI-2D0*W2SI)+0.125D0*
21865      &      (TH-12D0*SQMQ-4D0*SH*UH/TH)*W3STUI)
21866             B2TUSR=SQMQ/SQMH**2*(TH*(SH-TH)/(TH+SH)+2D0*UH*SH*
21867      &      (SH+2D0*TH)/(TH+SH)**2*(W1UR-W1HR)+(SQMQ-TH/4D0)*
21868      &      (0.5D0*W2TR+0.5D0*W2HR-W2UR+W3TUSR)+TH2*(2D0*SQMQ/
21869      &      (TH+SH)**2-0.5D0/(TH+SH))*(W2UR-W2HR)+0.5D0*UH*SH/TH*
21870      &      (W2HR-2D0*W2UR)+0.125D0*(TH-12D0*SQMQ-4D0*UH*SH/TH)*W3UTSR)
21871             B2TUSI=SQMQ/SQMH**2*(2D0*UH*SH*(SH+2D0*TH)/(TH+SH)**2*
21872      &      (W1UI-W1HI)+(SQMQ-TH/4D0)*(0.5D0*W2TI+0.5D0*W2HI-W2UI+
21873      &      W3TUSI)+TH2*(2D0*SQMQ/(TH+SH)**2-0.5D0/(TH+SH))*
21874      &      (W2UI-W2HI)+0.5D0*UH*SH/TH*(W2HI-2D0*W2UI)+0.125D0*
21875      &      (TH-12D0*SQMQ-4D0*UH*SH/TH)*W3UTSI)
21876             B2USTR=SQMQ/SQMH**2*(UH*(TH-UH)/(UH+TH)+2D0*SH*TH*
21877      &      (TH+2D0*UH)/(UH+TH)**2*(W1SR-W1HR)+(SQMQ-UH/4D0)*
21878      &      (0.5D0*W2UR+0.5D0*W2HR-W2SR+W3USTR)+UH2*(2D0*SQMQ/
21879      &      (UH+TH)**2-0.5D0/(UH+TH))*(W2SR-W2HR)+0.5D0*SH*TH/UH*
21880      &      (W2HR-2D0*W2SR)+0.125D0*(UH-12D0*SQMQ-4D0*SH*TH/UH)*W3SUTR)
21881             B2USTI=SQMQ/SQMH**2*(2D0*SH*TH*(TH+2D0*UH)/(UH+TH)**2*
21882      &      (W1SI-W1HI)+(SQMQ-UH/4D0)*(0.5D0*W2UI+0.5D0*W2HI-W2SI+
21883      &      W3USTI)+UH2*(2D0*SQMQ/(UH+TH)**2-0.5D0/(UH+TH))*
21884      &      (W2SI-W2HI)+0.5D0*SH*TH/UH*(W2HI-2D0*W2SI)+0.125D0*
21885      &      (UH-12D0*SQMQ-4D0*SH*TH/UH)*W3SUTI)
21886             B2UTSR=SQMQ/SQMH**2*(UH*(SH-UH)/(UH+SH)+2D0*TH*SH*
21887      &      (SH+2D0*UH)/(UH+SH)**2*(W1TR-W1HR)+(SQMQ-UH/4D0)*
21888      &      (0.5D0*W2UR+0.5D0*W2HR-W2TR+W3UTSR)+UH2*(2D0*SQMQ/
21889      &      (UH+SH)**2-0.5D0/(UH+SH))*(W2TR-W2HR)+0.5D0*TH*SH/UH*
21890      &      (W2HR-2D0*W2TR)+0.125D0*(UH-12D0*SQMQ-4D0*TH*SH/UH)*W3TUSR)
21891             B2UTSI=SQMQ/SQMH**2*(2D0*TH*SH*(SH+2D0*UH)/(UH+SH)**2*
21892      &      (W1TI-W1HI)+(SQMQ-UH/4D0)*(0.5D0*W2UI+0.5D0*W2HI-W2TI+
21893      &      W3UTSI)+UH2*(2D0*SQMQ/(UH+SH)**2-0.5D0/(UH+SH))*
21894      &      (W2TI-W2HI)+0.5D0*TH*SH/UH*(W2HI-2D0*W2TI)+0.125D0*
21895      &      (UH-12D0*SQMQ-4D0*TH*SH/UH)*W3TUSI)
21896             B4STUR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
21897      &      (W2SR-W2HR+W3STUR))
21898             B4STUI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2SI-W2HI+W3STUI)
21899             B4TUSR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
21900      &      (W2TR-W2HR+W3TUSR))
21901             B4TUSI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2TI-W2HI+W3TUSI)
21902             B4USTR=0.25D0*EPSH*(-2D0/3D0+0.25D0*(EPSH-1D0)*
21903      &      (W2UR-W2HR+W3USTR))
21904             B4USTI=0.25D0*EPSH*0.25D0*(EPSH-1D0)*(W2UI-W2HI+W3USTI)
21905             A2STUR=A2STUR+B2STUR+B2SUTR
21906             A2STUI=A2STUI+B2STUI+B2SUTI
21907             A2USTR=A2USTR+B2USTR+B2UTSR
21908             A2USTI=A2USTI+B2USTI+B2UTSI
21909             A2TUSR=A2TUSR+B2TUSR+B2TSUR
21910             A2TUSI=A2TUSI+B2TUSI+B2TSUI
21911             A4STUR=A4STUR+B4STUR+B4USTR+B4TUSR
21912             A4STUI=A4STUI+B4STUI+B4USTI+B4TUSI
21913  1170     CONTINUE
21914           FACGH=COMFAC*FACA*3D0/(128D0*PARU(1)**2)*AEM/XW*AS**3*
21915      &    SQMH/SQMW*SQMH**3/(SH*TH*UH)*(A2STUR**2+A2STUI**2+A2USTR**2+
21916      &    A2USTI**2+A2TUSR**2+A2TUSI**2+A4STUR**2+A4STUI**2)
21917           FACGH=FACGH*WIDS(25,2)
21918           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1180
21919           NCHN=NCHN+1
21920           ISIG(NCHN,1)=21
21921           ISIG(NCHN,2)=21
21922           ISIG(NCHN,3)=1
21923           SIGH(NCHN)=FACGH
21924  1180     CONTINUE
21925  
21926         ELSEIF(ISUB.EQ.114.OR.ISUB.EQ.115) THEN
21927 C...g + g -> gamma + gamma or g + g -> g + gamma
21928           A0STUR=0D0
21929           A0STUI=0D0
21930           A0TSUR=0D0
21931           A0TSUI=0D0
21932           A0UTSR=0D0
21933           A0UTSI=0D0
21934           A1STUR=0D0
21935           A1STUI=0D0
21936           A2STUR=0D0
21937           A2STUI=0D0
21938           ALST=LOG(-SH/TH)
21939           ALSU=LOG(-SH/UH)
21940           ALTU=LOG(TH/UH)
21941           IMAX=2*MSTP(1)
21942           IF(MSTP(38).GE.1.AND.MSTP(38).LE.8) IMAX=MSTP(38)
21943           DO 1190 I=1,IMAX
21944             EI=KCHG(IABS(I),1)/3D0
21945             EIWT=EI**2
21946             IF(ISUB.EQ.115) EIWT=EI
21947             SQMQ=PMAS(I,1)**2
21948             EPSS=4D0*SQMQ/SH
21949             EPST=4D0*SQMQ/TH
21950             EPSU=4D0*SQMQ/UH
21951             IF((MSTP(38).GE.1.AND.MSTP(38).LE.8).OR.EPSS.LT.1D-4) THEN
21952               B0STUR=1D0+(TH-UH)/SH*ALTU+0.5D0*(TH2+UH2)/SH2*(ALTU**2+
21953      &        PARU(1)**2)
21954               B0STUI=0D0
21955               B0TSUR=1D0+(SH-UH)/TH*ALSU+0.5D0*(SH2+UH2)/TH2*ALSU**2
21956               B0TSUI=-PARU(1)*((SH-UH)/TH+(SH2+UH2)/TH2*ALSU)
21957               B0UTSR=1D0+(SH-TH)/UH*ALST+0.5D0*(SH2+TH2)/UH2*ALST**2
21958               B0UTSI=-PARU(1)*((SH-TH)/UH+(SH2+TH2)/UH2*ALST)
21959               B1STUR=-1D0
21960               B1STUI=0D0
21961               B2STUR=-1D0
21962               B2STUI=0D0
21963             ELSE
21964               CALL PYWAUX(1,EPSS,W1SR,W1SI)
21965               CALL PYWAUX(1,EPST,W1TR,W1TI)
21966               CALL PYWAUX(1,EPSU,W1UR,W1UI)
21967               CALL PYWAUX(2,EPSS,W2SR,W2SI)
21968               CALL PYWAUX(2,EPST,W2TR,W2TI)
21969               CALL PYWAUX(2,EPSU,W2UR,W2UI)
21970               CALL PYI3AU(EPSS,TH/UH,Y3STUR,Y3STUI)
21971               CALL PYI3AU(EPSS,UH/TH,Y3SUTR,Y3SUTI)
21972               CALL PYI3AU(EPST,SH/UH,Y3TSUR,Y3TSUI)
21973               CALL PYI3AU(EPST,UH/SH,Y3TUSR,Y3TUSI)
21974               CALL PYI3AU(EPSU,SH/TH,Y3USTR,Y3USTI)
21975               CALL PYI3AU(EPSU,TH/SH,Y3UTSR,Y3UTSI)
21976               B0STUR=1D0+(1D0+2D0*TH/SH)*W1TR+(1D0+2D0*UH/SH)*W1UR+
21977      &        0.5D0*((TH2+UH2)/SH2-EPSS)*(W2TR+W2UR)-
21978      &        0.25D0*EPST*(1D0-0.5D0*EPSS)*(Y3SUTR+Y3TUSR)-
21979      &        0.25D0*EPSU*(1D0-0.5D0*EPSS)*(Y3STUR+Y3UTSR)+
21980      &        0.25D0*(-2D0*(TH2+UH2)/SH2+4D0*EPSS+EPST+EPSU+
21981      &        0.5D0*EPST*EPSU)*(Y3TSUR+Y3USTR)
21982               B0STUI=(1D0+2D0*TH/SH)*W1TI+(1D0+2D0*UH/SH)*W1UI+
21983      &        0.5D0*((TH2+UH2)/SH2-EPSS)*(W2TI+W2UI)-
21984      &        0.25D0*EPST*(1D0-0.5D0*EPSS)*(Y3SUTI+Y3TUSI)-
21985      &        0.25D0*EPSU*(1D0-0.5D0*EPSS)*(Y3STUI+Y3UTSI)+
21986      &        0.25D0*(-2D0*(TH2+UH2)/SH2+4D0*EPSS+EPST+EPSU+
21987      &        0.5D0*EPST*EPSU)*(Y3TSUI+Y3USTI)
21988               B0TSUR=1D0+(1D0+2D0*SH/TH)*W1SR+(1D0+2D0*UH/TH)*W1UR+
21989      &        0.5D0*((SH2+UH2)/TH2-EPST)*(W2SR+W2UR)-
21990      &        0.25D0*EPSS*(1D0-0.5D0*EPST)*(Y3TUSR+Y3SUTR)-
21991      &        0.25D0*EPSU*(1D0-0.5D0*EPST)*(Y3TSUR+Y3USTR)+
21992      &        0.25D0*(-2D0*(SH2+UH2)/TH2+4D0*EPST+EPSS+EPSU+
21993      &        0.5D0*EPSS*EPSU)*(Y3STUR+Y3UTSR)
21994               B0TSUI=(1D0+2D0*SH/TH)*W1SI+(1D0+2D0*UH/TH)*W1UI+
21995      &        0.5D0*((SH2+UH2)/TH2-EPST)*(W2SI+W2UI)-
21996      &        0.25D0*EPSS*(1D0-0.5D0*EPST)*(Y3TUSI+Y3SUTI)-
21997      &        0.25D0*EPSU*(1D0-0.5D0*EPST)*(Y3TSUI+Y3USTI)+
21998      &        0.25D0*(-2D0*(SH2+UH2)/TH2+4D0*EPST+EPSS+EPSU+
21999      &        0.5D0*EPSS*EPSU)*(Y3STUI+Y3UTSI)
22000               B0UTSR=1D0+(1D0+2D0*TH/UH)*W1TR+(1D0+2D0*SH/UH)*W1SR+
22001      &        0.5D0*((TH2+SH2)/UH2-EPSU)*(W2TR+W2SR)-
22002      &        0.25D0*EPST*(1D0-0.5D0*EPSU)*(Y3USTR+Y3TSUR)-
22003      &        0.25D0*EPSS*(1D0-0.5D0*EPSU)*(Y3UTSR+Y3STUR)+
22004      &        0.25D0*(-2D0*(TH2+SH2)/UH2+4D0*EPSU+EPST+EPSS+
22005      &        0.5D0*EPST*EPSS)*(Y3TUSR+Y3SUTR)
22006               B0UTSI=(1D0+2D0*TH/UH)*W1TI+(1D0+2D0*SH/UH)*W1SI+
22007      &        0.5D0*((TH2+SH2)/UH2-EPSU)*(W2TI+W2SI)-
22008      &        0.25D0*EPST*(1D0-0.5D0*EPSU)*(Y3USTI+Y3TSUI)-
22009      &        0.25D0*EPSS*(1D0-0.5D0*EPSU)*(Y3UTSI+Y3STUI)+
22010      &        0.25D0*(-2D0*(TH2+SH2)/UH2+4D0*EPSU+EPST+EPSS+
22011      &        0.5D0*EPST*EPSS)*(Y3TUSI+Y3SUTI)
22012               B1STUR=-1D0-0.25D0*(EPSS+EPST+EPSU)*(W2SR+W2TR+W2UR)+
22013      &        0.25D0*(EPSU+0.5D0*EPSS*EPST)*(Y3SUTR+Y3TUSR)+
22014      &        0.25D0*(EPST+0.5D0*EPSS*EPSU)*(Y3STUR+Y3UTSR)+
22015      &        0.25D0*(EPSS+0.5D0*EPST*EPSU)*(Y3TSUR+Y3USTR)
22016               B1STUI=-0.25D0*(EPSS+EPST+EPSU)*(W2SI+W2TI+W2UI)+
22017      &        0.25D0*(EPSU+0.5D0*EPSS*EPST)*(Y3SUTI+Y3TUSI)+
22018      &        0.25D0*(EPST+0.5D0*EPSS*EPSU)*(Y3STUI+Y3UTSI)+
22019      &        0.25D0*(EPSS+0.5D0*EPST*EPSU)*(Y3TSUI+Y3USTI)
22020               B2STUR=-1D0+0.125D0*EPSS*EPST*(Y3SUTR+Y3TUSR)+
22021      &        0.125D0*EPSS*EPSU*(Y3STUR+Y3UTSR)+
22022      &        0.125D0*EPST*EPSU*(Y3TSUR+Y3USTR)
22023               B2STUI=0.125D0*EPSS*EPST*(Y3SUTI+Y3TUSI)+
22024      &        0.125D0*EPSS*EPSU*(Y3STUI+Y3UTSI)+
22025      &        0.125D0*EPST*EPSU*(Y3TSUI+Y3USTI)
22026             ENDIF
22027             A0STUR=A0STUR+EIWT*B0STUR
22028             A0STUI=A0STUI+EIWT*B0STUI
22029             A0TSUR=A0TSUR+EIWT*B0TSUR
22030             A0TSUI=A0TSUI+EIWT*B0TSUI
22031             A0UTSR=A0UTSR+EIWT*B0UTSR
22032             A0UTSI=A0UTSI+EIWT*B0UTSI
22033             A1STUR=A1STUR+EIWT*B1STUR
22034             A1STUI=A1STUI+EIWT*B1STUI
22035             A2STUR=A2STUR+EIWT*B2STUR
22036             A2STUI=A2STUI+EIWT*B2STUI
22037  1190     CONTINUE
22038           ASQSUM=A0STUR**2+A0STUI**2+A0TSUR**2+A0TSUI**2+A0UTSR**2+
22039      &    A0UTSI**2+4D0*A1STUR**2+4D0*A1STUI**2+A2STUR**2+A2STUI**2
22040           FACGG=COMFAC*FACA/(16D0*PARU(1)**2)*AS**2*AEM**2*ASQSUM
22041           FACGP=COMFAC*FACA*5D0/(192D0*PARU(1)**2)*AS**3*AEM*ASQSUM
22042           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1200
22043           NCHN=NCHN+1
22044           ISIG(NCHN,1)=21
22045           ISIG(NCHN,2)=21
22046           ISIG(NCHN,3)=1
22047           IF(ISUB.EQ.114) SIGH(NCHN)=0.5D0*FACGG
22048           IF(ISUB.EQ.115) SIGH(NCHN)=FACGP
22049  1200     CONTINUE
22050  
22051         ELSEIF(ISUB.EQ.116) THEN
22052 C...g + g -> gamma + Z0
22053  
22054         ELSEIF(ISUB.EQ.117) THEN
22055 C...g + g -> Z0 + Z0
22056  
22057         ELSEIF(ISUB.EQ.118) THEN
22058 C...g + g -> W+ + W-
22059  
22060         ENDIF
22061  
22062 C...G: 2 -> 3, tree diagrams
22063  
22064       ELSEIF(ISUB.LE.140) THEN
22065         IF(ISUB.EQ.121) THEN
22066 C...g + g -> Q + Qbar + h0
22067           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1210
22068           IA=KFPR(ISUBSV,2)
22069           PMF=PYMRUN(IA,SH)
22070           FACQQH=COMFAC*(4D0*PARU(1)*AEM/XW)*(4D0*PARU(1)*AS)**2*
22071      &    (0.5D0*PMF/PMAS(24,1))**2
22072           WID2=1D0
22073           IF(IA.EQ.6.OR.IA.EQ.7.OR.IA.EQ.8) WID2=WIDS(IA,1)
22074           FACQQH=FACQQH*WID2
22075           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
22076             IKFI=1
22077             IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
22078             IF(IA.GT.10) IKFI=3
22079             FACQQH=FACQQH*PARU(150+10*IHIGG+IKFI)**2
22080           ENDIF
22081           CALL PYQQBH(WTQQBH)
22082           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
22083           HS=SHR*WDTP(0)
22084           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22085           FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
22086           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
22087      &    FACBW=0D0
22088           NCHN=NCHN+1
22089           ISIG(NCHN,1)=21
22090           ISIG(NCHN,2)=21
22091           ISIG(NCHN,3)=1
22092           SIGH(NCHN)=FACQQH*WTQQBH*FACBW
22093  1210     CONTINUE
22094  
22095         ELSEIF(ISUB.EQ.122) THEN
22096 C...q + qbar -> Q + Qbar + h0
22097           IA=KFPR(ISUBSV,2)
22098           PMF=PYMRUN(IA,SH)
22099           FACQQH=COMFAC*(4D0*PARU(1)*AEM/XW)*(4D0*PARU(1)*AS)**2*
22100      &    (0.5D0*PMF/PMAS(24,1))**2
22101           WID2=1D0
22102           IF(IA.EQ.6.OR.IA.EQ.7.OR.IA.EQ.8) WID2=WIDS(IA,1)
22103           FACQQH=FACQQH*WID2
22104           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) THEN
22105             IKFI=1
22106             IF(IA.LE.10.AND.MOD(IA,2).EQ.0) IKFI=2
22107             IF(IA.GT.10) IKFI=3
22108             FACQQH=FACQQH*PARU(150+10*IHIGG+IKFI)**2
22109           ENDIF
22110           CALL PYQQBH(WTQQBH)
22111           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
22112           HS=SHR*WDTP(0)
22113           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22114           FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
22115           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
22116      &    FACBW=0D0
22117           DO 1220 I=MMINA,MMAXA
22118             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
22119      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1220
22120             NCHN=NCHN+1
22121             ISIG(NCHN,1)=I
22122             ISIG(NCHN,2)=-I
22123             ISIG(NCHN,3)=1
22124             SIGH(NCHN)=FACQQH*WTQQBH*FACBW
22125  1220     CONTINUE
22126  
22127         ELSEIF(ISUB.EQ.123) THEN
22128 C...f + f' -> f + f' + h0 (or H0, or A0) (Z0 + Z0 -> h0 as
22129 C...inner process)
22130           FACNOR=COMFAC*(4D0*PARU(1)*AEM/(XW*XW1))**3*SQMZ/32D0
22131           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACNOR=FACNOR*
22132      &    PARU(154+10*IHIGG)**2
22133           FACPRP=1D0/((VINT(215)-VINT(204)**2)*
22134      &    (VINT(216)-VINT(209)**2))**2
22135           FACZZ1=FACNOR*FACPRP*(0.5D0*TAUP*VINT(2))*VINT(219)
22136           FACZZ2=FACNOR*FACPRP*VINT(217)*VINT(218)
22137           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
22138           HS=SHR*WDTP(0)
22139           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22140           FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
22141           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
22142      &    FACBW=0D0
22143           DO 1240 I=MMIN1,MMAX1
22144             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1240
22145             IA=IABS(I)
22146             DO 1230 J=MMIN2,MMAX2
22147               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1230
22148               JA=IABS(J)
22149               EI=KCHG(IA,1)*ISIGN(1,I)/3D0
22150               AI=SIGN(1D0,KCHG(IA,1)+0.5D0)*ISIGN(1,I)
22151               VI=AI-4D0*EI*XWV
22152               EJ=KCHG(JA,1)*ISIGN(1,J)/3D0
22153               AJ=SIGN(1D0,KCHG(JA,1)+0.5D0)*ISIGN(1,J)
22154               VJ=AJ-4D0*EJ*XWV
22155               FACLR1=(VI**2+AI**2)*(VJ**2+AJ**2)+4D0*VI*AI*VJ*AJ
22156               FACLR2=(VI**2+AI**2)*(VJ**2+AJ**2)-4D0*VI*AI*VJ*AJ
22157               NCHN=NCHN+1
22158               ISIG(NCHN,1)=I
22159               ISIG(NCHN,2)=J
22160               ISIG(NCHN,3)=1
22161               SIGH(NCHN)=(FACLR1*FACZZ1+FACLR2*FACZZ2)*FACBW
22162  1230       CONTINUE
22163  1240     CONTINUE
22164  
22165         ELSEIF(ISUB.EQ.124) THEN
22166 C...f + f' -> f" + f"' + h0 (or H0, or A0) (W+ + W- -> h0 as
22167 C...inner process)
22168           FACNOR=COMFAC*(4D0*PARU(1)*AEM/XW)**3*SQMW
22169           IF(MSTP(4).GE.1.OR.IHIGG.GE.2) FACNOR=FACNOR*
22170      &    PARU(155+10*IHIGG)**2
22171           FACPRP=1D0/((VINT(215)-VINT(204)**2)*
22172      &    (VINT(216)-VINT(209)**2))**2
22173           FACWW=FACNOR*FACPRP*(0.5D0*TAUP*VINT(2))*VINT(219)
22174           CALL PYWIDT(KFHIGG,SH,WDTP,WDTE)
22175           HS=SHR*WDTP(0)
22176           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22177           FACBW=(1D0/PARU(1))*VINT(2)*HF/((SH-SQMH)**2+HS**2)
22178           IF(ABS(SHR-PMAS(KFHIGG,1)).GT.PARP(48)*PMAS(KFHIGG,2))
22179      &    FACBW=0D0
22180           DO 1260 I=MMIN1,MMAX1
22181             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1260
22182             EI=SIGN(1D0,DBLE(I))*KCHG(IABS(I),1)
22183             DO 1250 J=MMIN2,MMAX2
22184               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1250
22185               EJ=SIGN(1D0,DBLE(J))*KCHG(IABS(J),1)
22186               IF(EI*EJ.GT.0D0) GOTO 1250
22187               FACLR=VINT(180+I)*VINT(180+J)
22188               NCHN=NCHN+1
22189               ISIG(NCHN,1)=I
22190               ISIG(NCHN,2)=J
22191               ISIG(NCHN,3)=1
22192               SIGH(NCHN)=FACLR*FACWW*FACBW
22193  1250       CONTINUE
22194  1260     CONTINUE
22195  
22196         ELSEIF(ISUB.EQ.131.OR.ISUB.EQ.132) THEN
22197 C...f + gamma*_(T,L) -> f + g (q + gamma*_(T,L) -> q + g only)
22198           PH=0D0
22199           IF(MINT(15).EQ.22.AND.MINT(107).EQ.0.AND.VINT(3).LT.0D0) 
22200      &    PH=VINT(3)**2
22201           IF(MINT(16).EQ.22.AND.MINT(108).EQ.0.AND.VINT(4).LT.0D0) 
22202      &    PH=VINT(4)**2
22203           IF(ISUB.EQ.131) THEN
22204             FGQ=COMFAC*AS*AEM*8D0/3D0*SH**2/(SH+PH)**2*
22205      &      ((SH2+UH2-2D0*PH*TH)/(-SH*UH)-2D0*PH*TH/(SH+PH)**2)
22206           ELSE
22207             FGQ=COMFAC*AS*AEM*8D0/3D0*SH**2/(SH+PH)**4*(-4D0*PH*TH)
22208           ENDIF
22209           DO 1280 I=MMINA,MMAXA
22210             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1280
22211             EI=KCHG(IABS(I),1)/3D0
22212             FACGQ=FGQ*EI**2
22213             DO 1270 ISDE=1,2
22214               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 1270
22215               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 1270
22216               NCHN=NCHN+1
22217               ISIG(NCHN,ISDE)=I
22218               ISIG(NCHN,3-ISDE)=22
22219               ISIG(NCHN,3)=1
22220               SIGH(NCHN)=FACGQ
22221  1270       CONTINUE
22222  1280     CONTINUE
22223  
22224         ELSEIF(ISUB.EQ.133.OR.ISUB.EQ.134) THEN
22225 C...f + gamma*_(T,L) -> f + gamma
22226           PH=0D0
22227           IF(MINT(15).EQ.22.AND.MINT(107).EQ.0.AND.VINT(3).LT.0D0) 
22228      &    PH=VINT(3)**2
22229           IF(MINT(16).EQ.22.AND.MINT(108).EQ.0.AND.VINT(4).LT.0D0) 
22230      &    PH=VINT(4)**2
22231           IF(ISUB.EQ.133) THEN
22232             FGQ=COMFAC*AEM**2*2D0*SH**2/(SH+PH)**2*
22233      &      ((SH2+UH2-2D0*PH*TH)/(-SH*UH)-2D0*PH*TH/(SH+PH)**2)
22234           ELSE
22235             FGQ=COMFAC*AEM**2*2D0*SH**2/(SH+PH)**4*(-4D0*PH*TH)
22236           ENDIF
22237           DO 1300 I=MMINA,MMAXA
22238             IF(I.EQ.0) GOTO 1300
22239             EI=KCHG(IABS(I),1)/3D0
22240             FACGQ=FGQ*EI**4
22241             DO 1290 ISDE=1,2
22242               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 1290
22243               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 1290
22244               NCHN=NCHN+1
22245               ISIG(NCHN,ISDE)=I
22246               ISIG(NCHN,3-ISDE)=22
22247               ISIG(NCHN,3)=1
22248               SIGH(NCHN)=FACGQ
22249  1290       CONTINUE
22250  1300     CONTINUE
22251  
22252         ELSEIF(ISUB.EQ.135.OR.ISUB.EQ.136) THEN
22253 C...g + gamma*_(T,L) -> f + fbar (g + gamma*_(T,L) -> q + qbar only)
22254           PH=0D0
22255           IF(MINT(15).EQ.22.AND.MINT(107).EQ.0.AND.VINT(3).LT.0D0) 
22256      &    PH=VINT(3)**2
22257           IF(MINT(16).EQ.22.AND.MINT(108).EQ.0.AND.VINT(4).LT.0D0) 
22258      &    PH=VINT(4)**2
22259           CALL PYWIDT(21,SH,WDTP,WDTE)
22260           WDTESU=0D0
22261           DO 1310 I=1,MIN(8,MDCY(21,3))
22262             EF=KCHG(I,1)/3D0
22263             WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
22264      &      WDTE(I,4))
22265  1310     CONTINUE
22266           IF(ISUB.EQ.135) THEN
22267             FACQQ=COMFAC*AEM*AS*WDTESU*SH**2/(SH+PH)**2*
22268      &      ((TH2+UH2-2D0*PH*SH)/(TH*UH)+4D0*PH*SH/(SH+PH)**2)
22269           ELSE
22270             FACQQ=COMFAC*AEM*AS*WDTESU*SH**2/(SH+PH)**4*8D0*PH*SH
22271           ENDIF
22272           IF(KFAC(1,21)*KFAC(2,22).NE.0) THEN
22273             NCHN=NCHN+1
22274             ISIG(NCHN,1)=21
22275             ISIG(NCHN,2)=22
22276             ISIG(NCHN,3)=1
22277             SIGH(NCHN)=FACQQ
22278           ENDIF
22279           IF(KFAC(1,22)*KFAC(2,21).NE.0) THEN
22280             NCHN=NCHN+1
22281             ISIG(NCHN,1)=22
22282             ISIG(NCHN,2)=21
22283             ISIG(NCHN,3)=1
22284             SIGH(NCHN)=FACQQ
22285           ENDIF
22286  
22287         ELSEIF(ISUB.GE.137.AND.ISUB.LE.140) THEN
22288 C...gamma*_(T,L) + gamma*_(T,L) -> f + fbar
22289           PH1=0D0
22290           IF(VINT(3).LT.0D0) PH1=VINT(3)**2
22291           PH2=0D0
22292           IF(VINT(4).LT.0D0) PH2=VINT(4)**2
22293           CALL PYWIDT(22,SH,WDTP,WDTE)
22294           WDTESU=0D0
22295           DO 1320 I=1,MIN(12,MDCY(22,3))
22296             IF(I.LE.8) EF= KCHG(I,1)/3D0
22297             IF(I.GE.9) EF= KCHG(9+2*(I-8),1)/3D0
22298             WDTESU=WDTESU+EF**2*(WDTE(I,1)+WDTE(I,2)+WDTE(I,3)+
22299      &      WDTE(I,4))
22300  1320     CONTINUE
22301           DLAMB2=(TH+UH)**2-4D0*PH1*PH2
22302           IF(ISUB.EQ.137) THEN
22303             FPARAM=-SH*(TH+UH)/DLAMB2
22304             FACFF=COMFAC*AEM**2*WDTESU*2D0*SH2/(DLAMB2*TH2*UH2)*
22305      &      (TH*UH-PH1*PH2)*((TH2+UH2)*(1D0-2D0*FPARAM*(1D0-FPARAM))-
22306      &      2D0*PH1*PH2*FPARAM**2)
22307           ELSEIF(ISUB.EQ.138) THEN
22308             FACFF=COMFAC*AEM**2*WDTESU*4D0*SH2*SH/(DLAMB2**2*TH2*UH2)*
22309      &      PH2*(4D0*(TH*UH-PH1*PH2)*(TH*UH+PH1*SH*(TH-UH)**2/DLAMB2)+
22310      &      2D0*PH1**2*(TH-UH)**2)
22311           ELSEIF(ISUB.EQ.139) THEN
22312             FACFF=COMFAC*AEM**2*WDTESU*4D0*SH2*SH/(DLAMB2**2*TH2*UH2)*
22313      &      PH1*(4D0*(TH*UH-PH1*PH2)*(TH*UH+PH2*SH*(TH-UH)**2/DLAMB2)+
22314      &      2D0*PH2**2*(TH-UH)**2)
22315           ELSE
22316             FACFF=COMFAC*AEM**2*WDTESU*32D0*SH2**2/(DLAMB2**3*TH2*UH2)*
22317      &      PH1*PH2*(TH*UH-PH1*PH2)*(TH-UH)**2
22318           ENDIF
22319           IF(KFAC(1,22)*KFAC(2,22).NE.0) THEN
22320             NCHN=NCHN+1
22321             ISIG(NCHN,1)=22
22322             ISIG(NCHN,2)=22
22323             ISIG(NCHN,3)=1
22324             SIGH(NCHN)=FACFF
22325           ENDIF
22326  
22327         ENDIF
22328  
22329 C...H: 2 -> 1, tree diagrams, non-standard model processes
22330  
22331       ELSEIF(ISUB.LE.160) THEN
22332         IF(ISUB.EQ.141) THEN
22333 C...f + fbar -> gamma*/Z0/Z'0
22334           SQMZP=PMAS(32,1)**2
22335           MINT(61)=2
22336           CALL PYWIDT(32,SH,WDTP,WDTE)
22337           HP0=AEM/3D0*SH
22338           HP1=AEM/3D0*XWC*SH
22339           HP2=HP1
22340           HS=SHR*VINT(117)
22341           HSP=SHR*WDTP(0)
22342           FACZP=4D0*COMFAC*3D0
22343           DO 1330 I=MMINA,MMAXA
22344             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1330
22345             EI=KCHG(IABS(I),1)/3D0
22346             AI=SIGN(1D0,EI)
22347             VI=AI-4D0*EI*XWV
22348             IA=IABS(I)
22349             IF(IA.LT.10) THEN
22350               IF(IA.LE.2) THEN
22351                 VPI=PARU(123-2*MOD(IABS(I),2))
22352                 API=PARU(124-2*MOD(IABS(I),2))
22353               ELSEIF(IA.LE.4) THEN
22354                 VPI=PARJ(182-2*MOD(IABS(I),2))
22355                 API=PARJ(183-2*MOD(IABS(I),2))
22356               ELSE
22357                 VPI=PARJ(190-2*MOD(IABS(I),2))
22358                 API=PARJ(191-2*MOD(IABS(I),2))
22359               ENDIF
22360             ELSE
22361               IF(IA.LE.12) THEN
22362                 VPI=PARU(127-2*MOD(IABS(I),2))
22363                 API=PARU(128-2*MOD(IABS(I),2))
22364               ELSEIF(IA.LE.14) THEN
22365                 VPI=PARJ(186-2*MOD(IABS(I),2))
22366                 API=PARJ(187-2*MOD(IABS(I),2))
22367               ELSE
22368                 VPI=PARJ(194-2*MOD(IABS(I),2))
22369                 API=PARJ(195-2*MOD(IABS(I),2))
22370               ENDIF
22371             ENDIF
22372             HI0=HP0
22373             IF(IABS(I).LE.10) HI0=HI0*FACA/3D0
22374             HI1=HP1
22375             IF(IABS(I).LE.10) HI1=HI1*FACA/3D0
22376             HI2=HP2
22377             IF(IABS(I).LE.10) HI2=HI2*FACA/3D0
22378             NCHN=NCHN+1
22379             ISIG(NCHN,1)=I
22380             ISIG(NCHN,2)=-I
22381             ISIG(NCHN,3)=1
22382             SIGH(NCHN)=FACZP*(EI**2/SH2*HI0*HP0*VINT(111)+EI*VI*
22383      &      (1D0-SQMZ/SH)/((SH-SQMZ)**2+HS**2)*(HI0*HP1+HI1*HP0)*
22384      &      VINT(112)+EI*VPI*(1D0-SQMZP/SH)/((SH-SQMZP)**2+HSP**2)*
22385      &      (HI0*HP2+HI2*HP0)*VINT(113)+(VI**2+AI**2)/
22386      &      ((SH-SQMZ)**2+HS**2)*HI1*HP1*VINT(114)+(VI*VPI+AI*API)*
22387      &      ((SH-SQMZ)*(SH-SQMZP)+HS*HSP)/(((SH-SQMZ)**2+HS**2)*
22388      &      ((SH-SQMZP)**2+HSP**2))*(HI1*HP2+HI2*HP1)*VINT(115)+
22389      &      (VPI**2+API**2)/((SH-SQMZP)**2+HSP**2)*HI2*HP2*VINT(116))
22390  1330     CONTINUE
22391  
22392         ELSEIF(ISUB.EQ.142) THEN
22393 C...f + fbar' -> W'+/-
22394           SQMWP=PMAS(34,1)**2
22395           CALL PYWIDT(34,SH,WDTP,WDTE)
22396           HS=SHR*WDTP(0)
22397           FACBW=4D0*COMFAC/((SH-SQMWP)**2+HS**2)*3D0
22398           HP=AEM/(24D0*XW)*SH
22399           DO 1350 I=MMIN1,MMAX1
22400             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1350
22401             IA=IABS(I)
22402             DO 1340 J=MMIN2,MMAX2
22403               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1340
22404               JA=IABS(J)
22405               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1340
22406               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
22407      &        GOTO 1340
22408               KCHW=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
22409               HI=HP*(PARU(133)**2+PARU(134)**2)
22410               IF(IA.LE.10) HI=HP*(PARU(131)**2+PARU(132)**2)*
22411      &        VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
22412               NCHN=NCHN+1
22413               ISIG(NCHN,1)=I
22414               ISIG(NCHN,2)=J
22415               ISIG(NCHN,3)=1
22416               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHW)/2)+WDTE(0,4))
22417               SIGH(NCHN)=HI*FACBW*HF
22418  1340       CONTINUE
22419  1350     CONTINUE
22420  
22421         ELSEIF(ISUB.EQ.143) THEN
22422 C...f + fbar' -> H+/-
22423           SQMHC=PMAS(37,1)**2
22424           CALL PYWIDT(37,SH,WDTP,WDTE)
22425           HS=SHR*WDTP(0)
22426           FACBW=4D0*COMFAC/((SH-SQMHC)**2+HS**2)
22427           HP=AEM/(8D0*XW)*SH/SQMW*SH
22428           DO 1370 I=MMIN1,MMAX1
22429             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1370
22430             IA=IABS(I)
22431             IM=(MOD(IA,10)+1)/2
22432             DO 1360 J=MMIN2,MMAX2
22433               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1360
22434               JA=IABS(J)
22435               JM=(MOD(JA,10)+1)/2
22436               IF(I*J.GT.0.OR.IA.EQ.JA.OR.IM.NE.JM) GOTO 1360
22437               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
22438      &        GOTO 1360
22439               IF(MOD(IA,2).EQ.0) THEN
22440                 IU=IA
22441                 IL=JA
22442               ELSE
22443                 IU=JA
22444                 IL=IA
22445               ENDIF
22446               RML=PYMRUN(IL,SH)**2/SH
22447               RMU=PYMRUN(IU,SH)**2/SH
22448               HI=HP*(RML*PARU(141)**2+RMU/PARU(141)**2)
22449               IF(IA.LE.10) HI=HI*FACA/3D0
22450               KCHHC=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
22451               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHHC)/2)+WDTE(0,4))
22452               NCHN=NCHN+1
22453               ISIG(NCHN,1)=I
22454               ISIG(NCHN,2)=J
22455               ISIG(NCHN,3)=1
22456               SIGH(NCHN)=HI*FACBW*HF
22457  1360       CONTINUE
22458  1370     CONTINUE
22459  
22460         ELSEIF(ISUB.EQ.144) THEN
22461 C...f + fbar' -> R
22462           SQMR=PMAS(40,1)**2
22463           CALL PYWIDT(40,SH,WDTP,WDTE)
22464           HS=SHR*WDTP(0)
22465           FACBW=4D0*COMFAC/((SH-SQMR)**2+HS**2)*3D0
22466           HP=AEM/(12D0*XW)*SH
22467           DO 1390 I=MMIN1,MMAX1
22468             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1390
22469             IA=IABS(I)
22470             DO 1380 J=MMIN2,MMAX2
22471               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1380
22472               JA=IABS(J)
22473               IF(I*J.GT.0.OR.IABS(IA-JA).NE.2) GOTO 1380
22474               HI=HP
22475               IF(IA.LE.10) HI=HI*FACA/3D0
22476               HF=SHR*(WDTE(0,1)+WDTE(0,(10-(I+J))/4)+WDTE(0,4))
22477               NCHN=NCHN+1
22478               ISIG(NCHN,1)=I
22479               ISIG(NCHN,2)=J
22480               ISIG(NCHN,3)=1
22481               SIGH(NCHN)=HI*FACBW*HF
22482  1380       CONTINUE
22483  1390     CONTINUE
22484  
22485         ELSEIF(ISUB.EQ.145) THEN
22486 C...q + l -> LQ (leptoquark)
22487           SQMLQ=PMAS(39,1)**2
22488           CALL PYWIDT(39,SH,WDTP,WDTE)
22489           HS=SHR*WDTP(0)
22490           FACBW=4D0*COMFAC/((SH-SQMLQ)**2+HS**2)
22491           IF(ABS(SHR-PMAS(39,1)).GT.PARP(48)*PMAS(39,2)) FACBW=0D0
22492           HP=AEM/4D0*SH
22493           KFLQQ=KFDP(MDCY(39,2),1)
22494           KFLQL=KFDP(MDCY(39,2),2)
22495           DO 1410 I=MMIN1,MMAX1
22496             IF(KFAC(1,I).EQ.0) GOTO 1410
22497             IA=IABS(I)
22498             IF(IA.NE.KFLQQ.AND.IA.NE.IABS(KFLQL)) GOTO 1410
22499             DO 1400 J=MMIN2,MMAX2
22500               IF(KFAC(2,J).EQ.0) GOTO 1400
22501               JA=IABS(J)
22502               IF(JA.NE.KFLQQ.AND.JA.NE.IABS(KFLQL)) GOTO 1400
22503               IF(I*J.NE.KFLQQ*KFLQL) GOTO 1400
22504               IF(JA.EQ.IA) GOTO 1400
22505               IF(IA.EQ.KFLQQ) KCHLQ=ISIGN(1,I)
22506               IF(JA.EQ.KFLQQ) KCHLQ=ISIGN(1,J)
22507               HI=HP*PARU(151)
22508               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHLQ)/2)+WDTE(0,4))
22509               NCHN=NCHN+1
22510               ISIG(NCHN,1)=I
22511               ISIG(NCHN,2)=J
22512               ISIG(NCHN,3)=1
22513               SIGH(NCHN)=HI*FACBW*HF
22514  1400       CONTINUE
22515  1410     CONTINUE
22516  
22517         ELSEIF(ISUB.EQ.146) THEN
22518 C...e + gamma* -> e* (excited lepton)
22519           KFQSTR=KFPR(ISUB,1)
22520           KCQSTR=PYCOMP(KFQSTR)
22521           KFQEXC=MOD(KFQSTR,KEXCIT)
22522           CALL PYWIDT(KFQSTR,SH,WDTP,WDTE)
22523           HS=SHR*WDTP(0)
22524           FACBW=COMFAC/((SH-PMAS(KCQSTR,1)**2)**2+HS**2)
22525           QF=-PARU(157)/2D0-PARU(158)/2D0
22526           FACBW=FACBW*AEM*QF**2*SH/PARU(155)**2
22527           IF(ABS(SHR-PMAS(KCQSTR,1)).GT.PARP(48)*PMAS(KCQSTR,2))
22528      &    FACBW=0D0
22529           HP=SH
22530           DO 1416 I=-KFQEXC,KFQEXC,2*KFQEXC
22531             DO 1413 ISDE=1,2
22532               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 1413
22533               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 1413
22534               HI=HP
22535               IF(I.GT.0) HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22536               IF(I.LT.0) HF=SHR*(WDTE(0,1)+WDTE(0,3)+WDTE(0,4))
22537               NCHN=NCHN+1
22538               ISIG(NCHN,ISDE)=I
22539               ISIG(NCHN,3-ISDE)=22
22540               ISIG(NCHN,3)=1
22541               SIGH(NCHN)=HI*FACBW*HF
22542  1413       CONTINUE
22543  1416     CONTINUE
22544  
22545         ELSEIF(ISUB.EQ.147.OR.ISUB.EQ.148) THEN
22546 C...d + g -> d* and u + g -> u* (excited quarks)
22547           KFQSTR=KFPR(ISUB,1)
22548           KCQSTR=PYCOMP(KFQSTR)
22549           KFQEXC=MOD(KFQSTR,KEXCIT)
22550           CALL PYWIDT(KFQSTR,SH,WDTP,WDTE)
22551           HS=SHR*WDTP(0)
22552           FACBW=COMFAC/((SH-PMAS(KCQSTR,1)**2)**2+HS**2)
22553           FACBW=FACBW*AS*PARU(159)**2*SH/(3D0*PARU(155)**2)
22554           IF(ABS(SHR-PMAS(KCQSTR,1)).GT.PARP(48)*PMAS(KCQSTR,2))
22555      &    FACBW=0D0
22556           HP=SH
22557           DO 1430 I=-KFQEXC,KFQEXC,2*KFQEXC
22558             DO 1420 ISDE=1,2
22559               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1420
22560               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1420
22561               HI=HP
22562               IF(I.GT.0) HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22563               IF(I.LT.0) HF=SHR*(WDTE(0,1)+WDTE(0,3)+WDTE(0,4))
22564               NCHN=NCHN+1
22565               ISIG(NCHN,ISDE)=I
22566               ISIG(NCHN,3-ISDE)=21
22567               ISIG(NCHN,3)=1
22568               SIGH(NCHN)=HI*FACBW*HF
22569  1420       CONTINUE
22570  1430     CONTINUE
22571  
22572         ELSEIF(ISUB.EQ.149) THEN
22573 C...g + g -> eta_techni
22574           CALL PYWIDT(38,SH,WDTP,WDTE)
22575           HS=SHR*WDTP(0)
22576           FACBW=COMFAC*0.5D0/((SH-PMAS(38,1)**2)**2+HS**2)
22577           IF(ABS(SHR-PMAS(38,1)).GT.PARP(48)*PMAS(38,2)) FACBW=0D0
22578           HP=SH
22579           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1440
22580           HI=HP*WDTP(3)
22581           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22582           NCHN=NCHN+1
22583           ISIG(NCHN,1)=21
22584           ISIG(NCHN,2)=21
22585           ISIG(NCHN,3)=1
22586           SIGH(NCHN)=HI*FACBW*HF
22587  1440     CONTINUE
22588  
22589         ENDIF
22590  
22591 C...I: 2 -> 2, tree diagrams, non-standard model processes
22592  
22593       ELSEIF(ISUB.LE.200) THEN
22594         IF(ISUB.EQ.161) THEN
22595 C...f + g -> f' + H+/- (b + g -> t + H+/- only)
22596 C...(choice of only b and t to avoid kinematics problems)
22597           FHCQ=COMFAC*FACA*AS*AEM/XW*1D0/24
22598 C...H propagator: as simulated in PYOFSH and as desired
22599           SQMHC=PMAS(37,1)**2
22600           GMMHC=PMAS(37,1)*PMAS(37,2)
22601           HBW4=GMMHC/((SQM4-SQMHC)**2+GMMHC**2)
22602           CALL PYWIDT(37,SQM4,WDTP,WDTE)
22603           GMMHCC=SQRT(SQM4)*WDTP(0)
22604           HBW4C=GMMHCC/((SQM4-SQMHC)**2+GMMHCC**2)
22605           FHCQ=FHCQ*HBW4C/HBW4
22606           DO 1460 I=MMINA,MMAXA
22607             IA=IABS(I)
22608             IF(IA.NE.5) GOTO 1460
22609             SQML=PYMRUN(IA,SH)**2
22610             IUA=IA+MOD(IA,2)
22611             SQMQ=PYMRUN(IUA,SH)**2
22612             FACHCQ=FHCQ*(SQML*PARU(141)**2+SQMQ/PARU(141)**2)/SQMW*
22613      &      (SH/(SQMQ-UH)+2D0*SQMQ*(SQMHC-UH)/(SQMQ-UH)**2+(SQMQ-UH)/SH+
22614      &      2D0*SQMQ/(SQMQ-UH)+2D0*(SQMHC-UH)/(SQMQ-UH)*
22615      &      (SQMHC-SQMQ-SH)/SH)
22616             KCHHC=ISIGN(1,KCHG(IA,1)*ISIGN(1,I))
22617             DO 1450 ISDE=1,2
22618               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1450
22619               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,1).EQ.0) GOTO 1450
22620               NCHN=NCHN+1
22621               ISIG(NCHN,ISDE)=I
22622               ISIG(NCHN,3-ISDE)=21
22623               ISIG(NCHN,3)=1
22624               SIGH(NCHN)=FACHCQ*WIDS(37,(5-KCHHC)/2)
22625  1450       CONTINUE
22626  1460     CONTINUE
22627  
22628         ELSEIF(ISUB.EQ.162) THEN
22629 C...q + g -> LQ + lbar; LQ=leptoquark
22630           SQMLQ=PMAS(39,1)**2
22631           FACLQ=COMFAC*FACA*PARU(151)*(AS*AEM/6D0)*(-TH/SH)*
22632      &    (UH2+SQMLQ**2)/(UH-SQMLQ)**2
22633           KFLQQ=KFDP(MDCY(39,2),1)
22634           DO 1480 I=MMINA,MMAXA
22635             IF(IABS(I).NE.KFLQQ) GOTO 1480
22636             KCHLQ=ISIGN(1,I)
22637             DO 1470 ISDE=1,2
22638               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1470
22639               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1470
22640               NCHN=NCHN+1
22641               ISIG(NCHN,ISDE)=I
22642               ISIG(NCHN,3-ISDE)=21
22643               ISIG(NCHN,3)=1
22644               SIGH(NCHN)=FACLQ*WIDS(39,(5-KCHLQ)/2)
22645  1470       CONTINUE
22646  1480     CONTINUE
22647  
22648         ELSEIF(ISUB.EQ.163) THEN
22649 C...g + g -> LQ + LQbar; LQ=leptoquark
22650           SQMLQ=PMAS(39,1)**2
22651           FACLQ=COMFAC*FACA*WIDS(39,1)*(AS**2/2D0)*
22652      &    (7D0/48D0+3D0*(UH-TH)**2/(16D0*SH2))*(1D0+2D0*SQMLQ*TH/
22653      &    (TH-SQMLQ)**2+2D0*SQMLQ*UH/(UH-SQMLQ)**2+4D0*SQMLQ**2/
22654      &    ((TH-SQMLQ)*(UH-SQMLQ)))
22655           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1490
22656           NCHN=NCHN+1
22657           ISIG(NCHN,1)=21
22658           ISIG(NCHN,2)=21
22659 C...Since don't know proper colour flow, randomize between alternatives
22660           ISIG(NCHN,3)=INT(1.5D0+PYR(0))
22661           SIGH(NCHN)=FACLQ
22662  1490     CONTINUE
22663  
22664         ELSEIF(ISUB.EQ.164) THEN
22665 C...q + qbar -> LQ + LQbar; LQ=leptoquark
22666           SQMLQ=PMAS(39,1)**2
22667           FACLQA=COMFAC*WIDS(39,1)*(AS**2/9D0)*
22668      &    (SH*(SH-4D0*SQMLQ)-(UH-TH)**2)/SH2
22669           FACLQS=COMFAC*WIDS(39,1)*((PARU(151)**2*AEM**2/8D0)*
22670      &    (-SH*TH-(SQMLQ-TH)**2)/TH2+(PARU(151)*AEM*AS/18D0)*
22671      &    ((SQMLQ-TH)*(UH-TH)+SH*(SQMLQ+TH))/(SH*TH))
22672           KFLQQ=KFDP(MDCY(39,2),1)
22673           DO 1500 I=MMINA,MMAXA
22674             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
22675      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1500
22676             NCHN=NCHN+1
22677             ISIG(NCHN,1)=I
22678             ISIG(NCHN,2)=-I
22679             ISIG(NCHN,3)=1
22680             SIGH(NCHN)=FACLQA
22681             IF(IABS(I).EQ.KFLQQ) SIGH(NCHN)=FACLQA+FACLQS
22682  1500     CONTINUE
22683  
22684         ELSEIF(ISUB.EQ.165) THEN
22685 C...q + qbar -> l+ + l- (including contact term for compositeness)
22686           ZRATR=XWC*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
22687           ZRATI=XWC*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
22688           KFF=IABS(KFPR(ISUB,1))
22689           EF=KCHG(KFF,1)/3D0
22690           AF=SIGN(1D0,EF+0.1D0)
22691           VF=AF-4D0*EF*XWV
22692           VALF=VF+AF
22693           VARF=VF-AF
22694           FCOF=1D0
22695           IF(KFF.LE.10) FCOF=3D0
22696           WID2=1D0
22697           IF(KFF.EQ.6) WID2=WIDS(6,1)
22698           IF(KFF.EQ.7.OR.KFF.EQ.8) WID2=WIDS(KFF,1)
22699           IF(KFF.EQ.17.OR.KFF.EQ.18) WID2=WIDS(KFF,1)
22700           DO 1510 I=MMINA,MMAXA
22701             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1510
22702             EI=KCHG(IABS(I),1)/3D0
22703             AI=SIGN(1D0,EI+0.1D0)
22704             VI=AI-4D0*EI*XWV
22705             VALI=VI+AI
22706             VARI=VI-AI
22707             FCOI=1D0
22708             IF(IABS(I).LE.10) FCOI=FACA/3D0
22709             IF((MSTP(5).EQ.1.AND.IABS(I).LE.2).OR.MSTP(5).EQ.2) THEN
22710               FGZA=(EI*EF+VALI*VALF*ZRATR+PARU(156)*SH/
22711      &        (AEM*PARU(155)**2))**2+(VALI*VALF*ZRATI)**2+
22712      &        (EI*EF+VARI*VARF*ZRATR)**2+(VARI*VARF*ZRATI)**2
22713             ELSE
22714               FGZA=(EI*EF+VALI*VALF*ZRATR)**2+(VALI*VALF*ZRATI)**2+
22715      &        (EI*EF+VARI*VARF*ZRATR)**2+(VARI*VARF*ZRATI)**2
22716             ENDIF
22717             FGZB=(EI*EF+VALI*VARF*ZRATR)**2+(VALI*VARF*ZRATI)**2+
22718      &      (EI*EF+VARI*VALF*ZRATR)**2+(VARI*VALF*ZRATI)**2
22719             FGZAB=AEM**2*(FGZA*UH2/SH2+FGZB*TH2/SH2)
22720             IF((MSTP(5).EQ.3.AND.IABS(I).EQ.2).OR.(MSTP(5).EQ.4.AND.
22721      &      MOD(IABS(I),2).EQ.0)) FGZAB=FGZAB+SH2/(2D0*PARU(155)**4)
22722             NCHN=NCHN+1
22723             ISIG(NCHN,1)=I
22724             ISIG(NCHN,2)=-I
22725             ISIG(NCHN,3)=1
22726             SIGH(NCHN)=COMFAC*FCOI*FCOF*FGZAB*WID2
22727  1510     CONTINUE
22728  
22729         ELSEIF(ISUB.EQ.166) THEN
22730 C...q + q'bar -> l + nu_l (including contact term for compositeness)
22731           WFAC=(1D0/4D0)*(AEM/XW)**2*UH2/((SH-SQMW)**2+GMMW**2)
22732           WCIFAC=WFAC+SH2/(4D0*PARU(155)**4)
22733           KFF=IABS(KFPR(ISUB,1))
22734           FCOF=1D0
22735           IF(KFF.LE.10) FCOF=3D0
22736           DO 1530 I=MMIN1,MMAX1
22737             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1530
22738             IA=IABS(I)
22739             DO 1520 J=MMIN2,MMAX2
22740               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1520
22741               JA=IABS(J)
22742               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1520
22743               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
22744      &        GOTO 1520
22745               FCOI=1D0
22746               IF(IA.LE.10) FCOI=VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
22747               WID2=1D0
22748               IF((I.GT.0.AND.MOD(I,2).EQ.0).OR.(J.GT.0.AND.
22749      &        MOD(J,2).EQ.0)) THEN
22750                 IF(KFF.EQ.5) WID2=WIDS(6,2)
22751                 IF(KFF.EQ.7) WID2=WIDS(8,2)*WIDS(7,3)
22752                 IF(KFF.EQ.17) WID2=WIDS(18,2)*WIDS(17,3)
22753               ELSE
22754                 IF(KFF.EQ.5) WID2=WIDS(6,3)
22755                 IF(KFF.EQ.7) WID2=WIDS(8,3)*WIDS(7,2)
22756                 IF(KFF.EQ.17) WID2=WIDS(18,3)*WIDS(17,2)
22757               ENDIF
22758               NCHN=NCHN+1
22759               ISIG(NCHN,1)=I
22760               ISIG(NCHN,2)=J
22761               ISIG(NCHN,3)=1
22762               SIGH(NCHN)=COMFAC*FCOI*FCOF*WFAC*WID2
22763               IF((MSTP(5).EQ.3.AND.IA.LE.2.AND.JA.LE.2).OR.MSTP(5).EQ.4)
22764      &        SIGH(NCHN)=COMFAC*FCOI*FCOF*WCIFAC*WID2
22765  1520       CONTINUE
22766  1530     CONTINUE
22767  
22768         ELSEIF(ISUB.EQ.167.OR.ISUB.EQ.168) THEN
22769 C...q + q' -> q" + d* and q + q' -> q" + u* (excited quarks)
22770           KFQSTR=KFPR(ISUB,2)
22771           KCQSTR=PYCOMP(KFQSTR)
22772           KFQEXC=MOD(KFQSTR,KEXCIT)
22773           FACQSA=COMFAC*(SH/PARU(155)**2)**2*(1D0-SQM4/SH)
22774           FACQSB=COMFAC*0.25D0*(SH/PARU(155)**2)**2*(1D0-SQM4/SH)*
22775      &    (1D0+SQM4/SH)*(1D0+CTH)*(1D0+((SH-SQM4)/(SH+SQM4))*CTH)
22776 C...Propagators: as simulated in PYOFSH and as desired
22777           GMMQ=PMAS(KCQSTR,1)*PMAS(KCQSTR,2)
22778           HBW4=GMMQ/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQ**2)
22779           CALL PYWIDT(KFQSTR,SQM4,WDTP,WDTE)
22780           GMMQC=SQRT(SQM4)*WDTP(0)
22781           HBW4C=GMMQC/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQC**2)
22782           FACQSA=FACQSA*HBW4C/HBW4
22783           FACQSB=FACQSB*HBW4C/HBW4
22784           DO 1550 I=MMIN1,MMAX1
22785             IA=IABS(I)
22786             IF(I.EQ.0.OR.IA.GT.6.OR.KFAC(1,I).EQ.0) GOTO 1550
22787             DO 1540 J=MMIN2,MMAX2
22788               JA=IABS(J)
22789               IF(J.EQ.0.OR.JA.GT.6.OR.KFAC(2,J).EQ.0) GOTO 1540
22790               IF(IA.EQ.KFQEXC.AND.I.EQ.J) THEN
22791                 NCHN=NCHN+1
22792                 ISIG(NCHN,1)=I
22793                 ISIG(NCHN,2)=J
22794                 ISIG(NCHN,3)=1
22795                 SIGH(NCHN)=(4D0/3D0)*FACQSA
22796                 NCHN=NCHN+1
22797                 ISIG(NCHN,1)=I
22798                 ISIG(NCHN,2)=J
22799                 ISIG(NCHN,3)=2
22800                 SIGH(NCHN)=(4D0/3D0)*FACQSA
22801               ELSEIF((IA.EQ.KFQEXC.OR.JA.EQ.KFQEXC).AND.I*J.GT.0) THEN
22802                 NCHN=NCHN+1
22803                 ISIG(NCHN,1)=I
22804                 ISIG(NCHN,2)=J
22805                 ISIG(NCHN,3)=1
22806                 IF(JA.EQ.KFQEXC) ISIG(NCHN,3)=2
22807                 SIGH(NCHN)=FACQSA
22808               ELSEIF(IA.EQ.KFQEXC.AND.I.EQ.-J) THEN
22809                 NCHN=NCHN+1
22810                 ISIG(NCHN,1)=I
22811                 ISIG(NCHN,2)=J
22812                 ISIG(NCHN,3)=1
22813                 SIGH(NCHN)=(8D0/3D0)*FACQSB
22814                 NCHN=NCHN+1
22815                 ISIG(NCHN,1)=I
22816                 ISIG(NCHN,2)=J
22817                 ISIG(NCHN,3)=2
22818                 SIGH(NCHN)=(8D0/3D0)*FACQSB
22819               ELSEIF(I.EQ.-J) THEN
22820                 NCHN=NCHN+1
22821                 ISIG(NCHN,1)=I
22822                 ISIG(NCHN,2)=J
22823                 ISIG(NCHN,3)=1
22824                 SIGH(NCHN)=FACQSB
22825                 NCHN=NCHN+1
22826                 ISIG(NCHN,1)=I
22827                 ISIG(NCHN,2)=J
22828                 ISIG(NCHN,3)=2
22829                 SIGH(NCHN)=FACQSB
22830               ELSEIF(IA.EQ.KFQEXC.OR.JA.EQ.KFQEXC) THEN
22831                 NCHN=NCHN+1
22832                 ISIG(NCHN,1)=I
22833                 ISIG(NCHN,2)=J
22834                 ISIG(NCHN,3)=1
22835                 IF(JA.EQ.KFQEXC) ISIG(NCHN,3)=2
22836                 SIGH(NCHN)=FACQSB
22837               ENDIF
22838  1540       CONTINUE
22839  1550     CONTINUE
22840  
22841         ELSEIF(ISUB.EQ.169) THEN
22842 C...q + qbar -> e + e* (excited lepton)
22843           KFQSTR=KFPR(ISUB,2)
22844           KCQSTR=PYCOMP(KFQSTR)
22845           KFQEXC=MOD(KFQSTR,KEXCIT)
22846           FACQSB=(COMFAC/6D0)*(SH/PARU(155)**2)**2*(1D0-SQM4/SH)*
22847      &    (1D0+SQM4/SH)*(1D0+CTH)*(1D0+((SH-SQM4)/(SH+SQM4))*CTH)
22848 C...Propagators: as simulated in PYOFSH and as desired
22849           GMMQ=PMAS(KCQSTR,1)*PMAS(KCQSTR,2)
22850           HBW4=GMMQ/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQ**2)
22851           CALL PYWIDT(KFQSTR,SQM4,WDTP,WDTE)
22852           GMMQC=SQRT(SQM4)*WDTP(0)
22853           HBW4C=GMMQC/((SQM4-PMAS(KCQSTR,1)**2)**2+GMMQC**2)
22854           FACQSB=FACQSB*HBW4C/HBW4
22855           DO 1555 I=MMIN1,MMAX1
22856             IA=IABS(I)
22857             IF(I.EQ.0.OR.IA.GT.6.OR.KFAC(1,I).EQ.0) GOTO 1555
22858             J=-I
22859             JA=IABS(J)
22860             IF(J.EQ.0.OR.JA.GT.6.OR.KFAC(2,J).EQ.0) GOTO 1555
22861             NCHN=NCHN+1
22862             ISIG(NCHN,1)=I
22863             ISIG(NCHN,2)=J
22864             ISIG(NCHN,3)=1
22865             SIGH(NCHN)=FACQSB
22866             NCHN=NCHN+1
22867             ISIG(NCHN,1)=I
22868             ISIG(NCHN,2)=J
22869             ISIG(NCHN,3)=2
22870             SIGH(NCHN)=FACQSB
22871  1555     CONTINUE
22872  
22873         ELSEIF(ISUB.EQ.191) THEN
22874 C...q + qbar -> rho_tech0.
22875           SQMRHT=PMAS(54,1)**2
22876           CALL PYWIDT(54,SH,WDTP,WDTE)
22877           HS=SHR*WDTP(0)
22878           FACBW=12D0*COMFAC/((SH-SQMRHT)**2+HS**2)
22879           IF(ABS(SHR-PMAS(54,1)).GT.PARP(48)*PMAS(54,2)) FACBW=0D0
22880           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22881           ALPRHT=2.91D0*(3D0/PARP(144))
22882           HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMRHT**2/SH)
22883           XWRHT=(1D0-2D0*XW)/(4D0*XW*(1D0-XW))
22884           BWZR=XWRHT*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
22885           BWZI=XWRHT*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
22886           DO 1560 I=MMINA,MMAXA
22887             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1560
22888             IA=IABS(I)
22889             EI=KCHG(IABS(I),1)/3D0
22890             AI=SIGN(1D0,EI+0.1D0)
22891             VI=AI-4D0*EI*XWV
22892             VALI=0.5D0*(VI+AI)
22893             VARI=0.5D0*(VI-AI)
22894             HI=HP*((EI+VALI*BWZR)**2+(VALI*BWZI)**2+
22895      &      (EI+VARI*BWZR)**2+(VARI*BWZI)**2)
22896             IF(IA.LE.10) HI=HI*FACA/3D0
22897             NCHN=NCHN+1
22898             ISIG(NCHN,1)=I
22899             ISIG(NCHN,2)=-I
22900             ISIG(NCHN,3)=1
22901             SIGH(NCHN)=HI*FACBW*HF
22902  1560     CONTINUE
22903  
22904         ELSEIF(ISUB.EQ.192) THEN
22905 C...q + qbar' -> rho_tech+/-.
22906           SQMRHT=PMAS(55,1)**2
22907           CALL PYWIDT(55,SH,WDTP,WDTE)
22908           HS=SHR*WDTP(0)
22909           FACBW=12D0*COMFAC/((SH-SQMRHT)**2+HS**2)
22910           IF(ABS(SHR-PMAS(55,1)).GT.PARP(48)*PMAS(55,2)) FACBW=0D0
22911           ALPRHT=2.91D0*(3D0/PARP(144))
22912           HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMRHT**2/SH)*
22913      &    (0.25D0/XW**2)*SH**2/((SH-SQMW)**2+GMMW**2)
22914           DO 1580 I=MMIN1,MMAX1
22915             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1580
22916             IA=IABS(I)
22917             DO 1570 J=MMIN2,MMAX2
22918               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1570
22919               JA=IABS(J)
22920               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1570
22921               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
22922      &        GOTO 1570
22923               KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
22924               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHR)/2)+WDTE(0,4))
22925               HI=HP
22926               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)*FACA/3D0
22927               NCHN=NCHN+1
22928               ISIG(NCHN,1)=I
22929               ISIG(NCHN,2)=J
22930               ISIG(NCHN,3)=1
22931               SIGH(NCHN)=HI*FACBW*HF
22932  1570       CONTINUE
22933  1580     CONTINUE
22934  
22935         ELSEIF(ISUB.EQ.193) THEN
22936 C...q + qbar -> omega_tech0.
22937           SQMOMT=PMAS(56,1)**2
22938           CALL PYWIDT(56,SH,WDTP,WDTE)
22939           HS=SHR*WDTP(0)
22940           FACBW=12D0*COMFAC/((SH-SQMOMT)**2+HS**2)
22941           IF(ABS(SHR-PMAS(56,1)).GT.PARP(48)*PMAS(56,2)) FACBW=0D0
22942           HF=SHR*(WDTE(0,1)+WDTE(0,2)+WDTE(0,4))
22943           ALPRHT=2.91D0*(3D0/PARP(144))
22944           HP=(1D0/6D0)*(AEM**2/ALPRHT)*(SQMOMT**2/SH)*
22945      &    (2D0*PARP(143)-1D0)**2
22946           BWZR=(0.5D0/(1D0-XW))*SH*(SH-SQMZ)/((SH-SQMZ)**2+GMMZ**2)
22947           BWZI=(0.5D0/(1D0-XW))*SH*GMMZ/((SH-SQMZ)**2+GMMZ**2)
22948           DO 1590 I=MMINA,MMAXA
22949             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1590
22950             IA=IABS(I)
22951             EI=KCHG(IABS(I),1)/3D0
22952             AI=SIGN(1D0,EI+0.1D0)
22953             VI=AI-4D0*EI*XWV
22954             VALI=0.5D0*(VI+AI)
22955             VARI=0.5D0*(VI-AI)
22956             HI=HP*((EI-VALI*BWZR)**2+(VALI*BWZI)**2+
22957      &      (EI-VARI*BWZR)**2+(VARI*BWZI)**2)
22958             IF(IA.LE.10) HI=HI*FACA/3D0
22959             NCHN=NCHN+1
22960             ISIG(NCHN,1)=I
22961             ISIG(NCHN,2)=-I
22962             ISIG(NCHN,3)=1
22963             SIGH(NCHN)=HI*FACBW*HF
22964  1590     CONTINUE
22965  
22966         ELSEIF(ISUB.EQ.194) THEN
22967 C...f + fbar -> f' + fbar' via s-channel rho_tech and omega_tech.
22968           KFA=KFPR(ISUBSV,1)
22969           ALPRHT=2.91D0*(3D0/PARP(144))
22970           HP=AEM**2*COMFAC
22971           TANW=SQRT(PARU(102)/(1D0-PARU(102)))
22972           CT2W=(1D0-2D0*PARU(102))/(2D0*PARU(102)/TANW)
22973 
22974           QUPD=2D0*PARP(143)-1D0
22975           FAR=SQRT(AEM/ALPRHT)
22976           FAO=FAR*QUPD
22977           FZR=FAR*CT2W
22978           FZO=-FAO*TANW
22979           SFAR=FAR**2
22980           SFAO=FAO**2
22981           SFZR=FZR**2
22982           SFZO=FZO**2
22983           CALL PYWIDT(23,SH,WDTP,WDTE)
22984           SSMZ=CMPLX(1D0-PMAS(23,1)**2/SH,WDTP(0)/SHR)
22985           CALL PYWIDT(54,SH,WDTP,WDTE)
22986           SSMR=CMPLX(1D0-PMAS(54,1)**2/SH,WDTP(0)/SHR)
22987           CALL PYWIDT(56,SH,WDTP,WDTE)
22988           SSMO=CMPLX(1D0-PMAS(56,1)**2/SH,WDTP(0)/SHR)
22989           DETD=(FAR*FZO-FAO*FZR)**2+SSMZ*SSMR*SSMO-SFZR*SSMO-
22990      $    SFZO*SSMR-SFAR*SSMO*SSMZ-SFAO*SSMR*SSMZ
22991           DAA=(-Sfzr*SSMO - Sfzo*SSMR + SSMO*SSMR*SSMZ)/DETD/SH
22992           DZZ=(-Sfar*SSMO - Sfao*SSMR + SSMO*SSMR)/DETD/SH
22993           DAZ=(far*fzr*SSMO + fao*fzo*SSMR)/DETD/SH
22994 
22995           XWRHT=1D0/(4D0*XW*(1D0-XW))
22996           KFF=IABS(KFPR(ISUB,1))
22997           EF=KCHG(KFF,1)/3D0
22998           AF=SIGN(1D0,EF+0.1D0)
22999           VF=AF-4D0*EF*XWV
23000           VALF=0.5D0*(VF+AF)
23001           VARF=0.5D0*(VF-AF)
23002           FCOF=1D0
23003           IF(KFF.LE.10) FCOF=3D0
23004 
23005           WID2=1D0
23006           IF(KFF.GE.6.AND.KFF.LE.8) WID2=WIDS(KFF,1)
23007           IF(KFF.EQ.17.OR.KFF.EQ.18) WID2=WIDS(KFF,1)
23008           DZZ=DZZ*CMPLX(XWRHT,0D0)
23009           DAZ=DAZ*CMPLX(SQRT(XWRHT),0D0)
23010 
23011           DO 1600 I=MMINA,MMAXA
23012             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1600
23013             EI=KCHG(IABS(I),1)/3D0
23014             AI=SIGN(1D0,EI+0.1D0)
23015             VI=AI-4D0*EI*XWV
23016             VALI=0.5D0*(VI+AI)
23017             VARI=0.5D0*(VI-AI)
23018             FCOI=FCOF
23019             IF(IABS(I).LE.10) FCOI=FCOI/3D0
23020             DIFLL=ABS(EI*EF*DAA+VALI*VALF*DZZ+DAZ*(EI*VALF+EF*VALI))**2
23021             DIFRR=ABS(EI*EF*DAA+VARI*VARF*DZZ+DAZ*(EI*VARF+EF*VARI))**2
23022             DIFLR=ABS(EI*EF*DAA+VALI*VARF*DZZ+DAZ*(EI*VARF+EF*VALI))**2
23023             DIFRL=ABS(EI*EF*DAA+VARI*VALF*DZZ+DAZ*(EI*VALF+EF*VARI))**2
23024             FACSIG=(DIFLL+DIFRR)*((UH-SQM4)**2+SH*SQM4)+
23025      &      (DIFLR+DIFRL)*((TH-SQM3)**2+SH*SQM3)
23026             NCHN=NCHN+1
23027             ISIG(NCHN,1)=I
23028             ISIG(NCHN,2)=-I
23029             ISIG(NCHN,3)=1
23030             SIGH(NCHN)=HP*FCOI*FACSIG*WID2
23031  1600     CONTINUE
23032 
23033         ELSEIF(ISUB.EQ.195) THEN
23034 C...f + fbar' -> f'' + fbar''' via s-channel rho_tech+
23035           KFA=KFPR(ISUBSV,1)
23036           KFB=KFA+1
23037           ALPRHT=2.91D0*(3D0/PARP(144))
23038           FACTC=COMFAC*(AEM**2/12D0/XW**2)*(UH-SQM3)*(UH-SQM4)*3D0
23039 
23040           FWR=SQRT(AEM/ALPRHT)/(2D0*SQRT(XW))
23041           CALL PYWIDT(24,SH,WDTP,WDTE)
23042           SSMZ=CMPLX(1D0-PMAS(24,1)**2/SH,WDTP(0)/SHR)
23043           CALL PYWIDT(55,SH,WDTP,WDTE)
23044           SSMR=CMPLX(1D0-PMAS(54,1)**2/SH,WDTP(0)/SHR)
23045 
23046           FCOF=1D0
23047           IF(KFA.LE.8) FCOF=3D0
23048           DETD=SSMZ*SSMR-CMPLX(FWR**2,0D0)
23049           HP=FACTC*ABS(SSMR/DETD)**2/SH**2*FCOF
23050 
23051           DO 1605 I=MMIN1,MMAX1
23052             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 1605
23053             IA=IABS(I)
23054             DO 1604 J=MMIN2,MMAX2
23055               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 1604
23056               JA=IABS(J)
23057               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1604
23058               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
23059      &        GOTO 1604
23060               KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
23061               HI=HP
23062               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)/3D0
23063               NCHN=NCHN+1
23064               ISIG(NCHN,1)=I
23065               ISIG(NCHN,2)=J
23066               ISIG(NCHN,3)=1
23067               SIGH(NCHN)=HI*WIDS(KFA,(5-KCHR)/2)*WIDS(KFB,(5+KCHR)/2)
23068  1604       CONTINUE
23069  1605     CONTINUE
23070  
23071         ENDIF
23072  
23073 CMRENNA++
23074 C...J: 2 -> 2, tree diagrams, SUSY processes
23075  
23076       ELSEIF(ISUB.LE.210) THEN
23077         IF(ISUB.EQ.201) THEN
23078 C...f + fbar -> e_L + e_Lbar
23079           COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23080           DO 1630 I=MMIN1,MMAX1
23081             IA=IABS(I)
23082             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1630
23083             EI=KCHG(IA,1)/3D0
23084             TT3I=SIGN(1D0,EI+1D-6)/2D0
23085             EJ=-1D0
23086             TT3J=-1D0/2D0
23087             FCOL=1D0
23088 C...Color factor for e+ e-
23089             IF(IA.GE.11) FCOL=3D0
23090             IF(ISUBSV.EQ.301) THEN
23091               A1=1D0
23092               A2=0D0
23093             ELSEIF(ILR.EQ.1) THEN
23094               A1=SFMIX(KFID,3)**2
23095               A2=SFMIX(KFID,4)**2
23096             ELSEIF(ILR.EQ.0) THEN
23097               A1=SFMIX(KFID,1)**2
23098               A2=SFMIX(KFID,2)**2
23099             ENDIF
23100             XLQ=(TT3J-EJ*XW)*A1
23101             XRQ=(-EJ*XW)*A2
23102             XLF=(TT3I-EI*XW)
23103             XRF=(-EI*XW)
23104             TAA=2D0*(EI*EJ)**2
23105             TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/XW**2/XW1**2
23106             TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*ZWID/SH**2)
23107             TAZ=2D0*EI*EJ*(XLQ+XRQ)*(XLF+XRF)/XW/XW1
23108             TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
23109             TNN=0.0D0
23110             TAN=0.0D0
23111             TZN=0.0D0
23112             IF(IA.GE.11.AND.IA.LE.18.AND.KFID.EQ.IA) THEN
23113               FAC2=SQRT(2D0)
23114               TNN1=0D0
23115               TNN2=0D0
23116               TNN3=0D0
23117               DO 1620 II=1,4
23118                 DK=1D0/(TH-SMZ(II)**2)
23119                 FLEK=-FAC2*(TT3I*ZMIX(II,2)-TANW*(TT3I-EI)*
23120      &          ZMIX(II,1))
23121                 FREK=FAC2*TANW*EI*ZMIX(II,1)
23122                 TNN1=TNN1+FLEK**2*DK
23123                 TNN2=TNN2+FREK**2*DK
23124                 DO 1610 JJ=1,4
23125                   DL=1D0/(TH-SMZ(JJ)**2)
23126                   FLEL=-FAC2*(TT3J*ZMIX(JJ,2)-TANW*(TT3J-EJ)*
23127      &            ZMIX(JJ,1))
23128                   FREL=FAC2*TANW*EJ*ZMIX(JJ,1)
23129                   TNN3=TNN3+FLEK*FREK*FLEL*FREL*DK*DL*SMZ(II)*SMZ(JJ)
23130  1610           CONTINUE
23131  1620         CONTINUE
23132               TNN=(UH*TH-SQM3*SQM4)*(A1**2*TNN1**2+A2**2*TNN2**2)
23133               TNN=(TNN+2D0*SH*A1*A2*TNN3)/4D0/XW**2
23134               TZN=(UH*TH-SQM3*SQM4)*(XLQ+XRQ)*
23135      &        (TNN1*XLF*A1+TNN2*XRF*A2)
23136               TZN=TZN/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*
23137      &        (1D0-SQMZ/SH)/SH
23138               TZN=TZN/XW**2/XW1
23139               TAN=EI*EJ*(UH*TH-SQM3*SQM4)/SH*(A1*TNN1+A2*TNN2)/XW
23140             ENDIF
23141             FACQQ1=COMFAC*AEM**2*(TAA+TZZ+TAZ)*FCOL/3D0
23142             FACQQ1=FACQQ1*( UH*TH-SQM3*SQM4 )/SH**2
23143             FACQQ2=COMFAC*AEM**2*(TNN+TZN+TAN)*FCOL/3D0
23144             NCHN=NCHN+1
23145             ISIG(NCHN,1)=I
23146             ISIG(NCHN,2)=-I
23147             ISIG(NCHN,3)=1
23148             SIGH(NCHN)=FACQQ1+FACQQ2
23149  1630     CONTINUE
23150  
23151         ELSEIF(ISUB.EQ.203) THEN
23152 C...f + fbar -> e_L + e_Rbar
23153           DO 1660 I=MMIN1,MMAX1
23154             IA=IABS(I)
23155             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1660
23156             EI=KCHG(IABS(I),1)/3D0
23157             TT3I=SIGN(1D0,EI)/2D0
23158             EJ=-1
23159             TT3J=-1D0/2D0
23160             FCOL=1D0
23161 C...Color factor for e+ e-
23162             IF(IA.GE.11) FCOL=3D0
23163             A1=SFMIX(KFID,1)**2
23164             A2=SFMIX(KFID,2)**2
23165             XLQ=(TT3J-EJ*XW)
23166             XRQ=(-EJ*XW)
23167             XLF=(TT3I-EI*XW)
23168             XRF=(-EI*XW)
23169             TZZ=(XLF**2+XRF**2)*(XLQ-XRQ)**2/XW**2/XW1**2*A1*A2
23170             TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
23171             TNN=0.0D0
23172             TZN=0.0D0
23173             IF(IA.GE.11.AND.IA.LE.18.AND.KFID.EQ.IA) THEN
23174               FAC2=SQRT(2D0)
23175               TNN1=0D0
23176               TNN2=0D0
23177               TNN3=0D0
23178               DO 1650 II=1,4
23179                 DK=1D0/(TH-SMZ(II)**2)
23180                 FLEK=-FAC2*(TT3I*ZMIX(II,2)-TANW*(TT3I-EI)*
23181      &          ZMIX(II,1))
23182                 FREK=FAC2*TANW*EI*ZMIX(II,1)
23183                 TNN1=TNN1+FLEK**2*DK
23184                 TNN2=TNN2+FREK**2*DK
23185                 DO 1640 JJ=1,4
23186                   DL=1D0/(TH-SMZ(JJ)**2)
23187                   FLEL=-FAC2*(TT3J*ZMIX(JJ,2)-TANW*(TT3J-EJ)*
23188      &            ZMIX(JJ,1))
23189                   FREL=FAC2*TANW*EJ*ZMIX(JJ,1)
23190                   TNN3=TNN3+FLEK*FREK*FLEL*FREL*DK*DL*SMZ(II)*SMZ(JJ)
23191  1640           CONTINUE
23192  1650         CONTINUE
23193               TNN=(UH*TH-SQM3*SQM4)*A1*A2*(TNN2**2+TNN1**2)
23194               TNN=(TNN+SH*(A2**2+A1**2)*TNN3)/4D0
23195               TZN=(UH*TH-SQM3*SQM4)*A1*A2
23196               TZN=TZN*(XLQ-XRQ)*(XLF*TNN1-XRF*TNN2)/XW1
23197               TZN=TZN/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*
23198      &        (1D0-SQMZ/SH)/SH
23199             ENDIF
23200             FACQQ1=COMFAC*AEM**2*TZZ*FCOL/3D0*(UH*TH-SQM3*SQM4)/SH2
23201             FACQQ2=COMFAC*AEM**2/XW**2*(TNN+TZN)*FCOL/3D0
23202             FACQQ=(FACQQ1+FACQQ2)
23203             NCHN=NCHN+1
23204             ISIG(NCHN,1)=I
23205             ISIG(NCHN,2)=-I
23206             ISIG(NCHN,3)=1
23207             SIGH(NCHN)=FACQQ*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23208      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),3)
23209             NCHN=NCHN+1
23210             ISIG(NCHN,1)=I
23211             ISIG(NCHN,2)=-I
23212             ISIG(NCHN,3)=2
23213             SIGH(NCHN)=FACQQ*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
23214      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23215  1660     CONTINUE
23216  
23217         ELSEIF(ISUB.EQ.210) THEN
23218 C...q + qbar' -> W*- > ~l_L + ~nu_L
23219           FAC0=RKF*COMFAC*AEM**2/XW**2/12D0
23220           FAC1=(TH*UH-SQM3*SQM4)/((SH-SQMW)**2+WWID**2*SQMW)
23221           DO 1680 I=MMIN1,MMAX1
23222             IA=IABS(I)
23223             IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 1680
23224             DO 1670 J=MMIN2,MMAX2
23225               JA=IABS(J)
23226               IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 1670
23227               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1670
23228               FCKM=3D0
23229               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
23230               KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
23231               KCHW=2
23232               IF(KCHSUM.LT.0) KCHW=3
23233               NCHN=NCHN+1
23234               ISIG(NCHN,1)=I
23235               ISIG(NCHN,2)=J
23236               ISIG(NCHN,3)=1
23237               IF(ISUBSV.EQ.297.OR.ISUBSV.EQ.298) THEN
23238                 FACR=WIDS(PYCOMP(KFPR(ISUBSV,1)),5-KCHW)*
23239      &          WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23240               ELSE
23241                 FACR=WIDS(PYCOMP(KFPR(ISUBSV,1)),5-KCHW)*
23242      &          WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
23243               ENDIF
23244               SIGH(NCHN)=FAC0*FAC1*FCKM*FACR
23245  1670       CONTINUE
23246  1680     CONTINUE
23247         ENDIF
23248  
23249       ELSEIF(ISUB.LE.220) THEN
23250         IF(ISUB.EQ.213) THEN
23251 C...f + fbar -> ~nu_L + ~nu_Lbar
23252           IF(ISUBSV.EQ.299.OR.ISUBSV.EQ.300) THEN
23253             FACR=WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23254      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23255           ELSE
23256             FACR=WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23257           ENDIF
23258           COMFAC=COMFAC*FACR
23259           PROPZ=(SH-SQMZ)**2+ZWID**2*SQMZ
23260           XLL=0.5D0
23261           XLR=0.0D0
23262           DO 1690 I=MMIN1,MMAX1
23263             IA=IABS(I)
23264             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1690
23265             EI=KCHG(IA,1)/3D0
23266             FCOL=1D0
23267 C...Color factor for e+ e-
23268             IF(IA.GE.11) FCOL=3D0
23269             XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
23270             XRQ=-EI*XW
23271             TZC=0.0D0
23272             TCC=0.0D0
23273             IF(IA.GE.11.AND.KFID.EQ.IA+1) THEN
23274               TZC=VMIX(1,1)**2/(TH-SMW(1)**2)+VMIX(2,1)**2/
23275      &        (TH-SMW(2)**2)
23276               TCC=TZC**2
23277               TZC=TZC/XW1*(SH-SQMZ)/PROPZ*XLQ*XLL
23278             ENDIF
23279             FACQQ1=(XLQ**2+XRQ**2)*(XLL+XLR)**2/XW1**2/PROPZ
23280             FACQQ2=TZC+TCC/4D0
23281             NCHN=NCHN+1
23282             ISIG(NCHN,1)=I
23283             ISIG(NCHN,2)=-I
23284             ISIG(NCHN,3)=1
23285             SIGH(NCHN)=(FACQQ1+FACQQ2)*RKF*(UH*TH-SQM3*SQM4)*COMFAC
23286      &      *AEM**2*FCOL/3D0/XW**2
23287  1690     CONTINUE
23288  
23289         ELSEIF(ISUB.EQ.216) THEN
23290 C...q + qbar -> ~chi0_1 + ~chi0_1
23291           IF(IZID1.EQ.IZID2) THEN
23292             COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23293           ELSE
23294             COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23295      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23296           ENDIF
23297           FACGG1=COMFAC*AEM**2/3D0/XW**2
23298           IF(IZID1.EQ.IZID2) FACGG1=FACGG1/2D0
23299           ZM12=SQM3
23300           ZM22=SQM4
23301           WU2 = (UH-ZM12)*(UH-ZM22)/SH2
23302           WT2 = (TH-ZM12)*(TH-ZM22)/SH2
23303           XS2 = SMZ(IZID1)*SMZ(IZID2)/SH
23304           PROPZ2 = (SH-SQMZ)**2 + SQMZ*ZWID**2
23305           REPRPZ = (SH-SQMZ)/PROPZ2
23306           OLPP=(-ZMIX(IZID1,3)*ZMIX(IZID2,3)+
23307      &    ZMIX(IZID1,4)*ZMIX(IZID2,4))/2D0
23308           DO 1700 I=MMINA,MMAXA
23309             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1700
23310             EI=KCHG(IABS(I),1)/3D0
23311             FCOL=1D0
23312             IF(ABS(I).GE.11) FCOL=3D0
23313             XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
23314             XRQ=-EI*XW
23315             XLQ=XLQ/XW1
23316             XRQ=XRQ/XW1
23317 C...Factored out sqrt(2)
23318             FR1=TANW*EI*ZMIX(IZID1,1)
23319             FR2=TANW*EI*ZMIX(IZID2,1)
23320             FL1=-(SIGN(1D0,EI)*ZMIX(IZID1,2)-TANW*
23321      &      (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID1,1))/2D0
23322             FL2=-(SIGN(1D0,EI)*ZMIX(IZID2,2)-TANW*
23323      &      (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID2,1))/2D0
23324             FR12=FR1**2
23325             FR22=FR2**2
23326             FL12=FL1**2
23327             FL22=FL2**2
23328             XML2=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2
23329             XMR2=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2
23330             FACS=OLPP**2*(XLQ**2+XRQ**2)*(WU2+WT2-2D0*XS2)*(SH2/PROPZ2)
23331             FACT=FL12*FL22*(WT2*SH2/(TH-XML2)**2+WU2*SH2/(UH-XML2)**2-
23332      &      2D0*XS2*SH2/(TH-XML2)/(UH-XML2))
23333             FACU=FR12*FR22*(WT2*SH2/(TH-XMR2)**2+WU2*SH2/(UH-XMR2)**2-
23334      &      2D0*XS2*SH2/(TH-XMR2)/(UH-XMR2))
23335             FACST=2D0*REPRPZ*OLPP*XLQ*FL1*FL2*( (WT2-XS2)*SH2/
23336      &      (TH-XML2) + (WU2-XS2)*SH2/(UH-XML2) )
23337             FACSU=-2D0*REPRPZ*OLPP*XRQ*FR1*FR2*( (WT2-XS2)*SH2/
23338      &      (TH-XMR2) + (WU2-XS2)*SH2/(UH-XMR2) )
23339             NCHN=NCHN+1
23340             ISIG(NCHN,1)=I
23341             ISIG(NCHN,2)=-I
23342             ISIG(NCHN,3)=1
23343             SIGH(NCHN)=FACGG1*FCOL*(FACS+FACT+FACU+FACST+FACSU)
23344  1700     CONTINUE
23345         ENDIF
23346  
23347       ELSEIF(ISUB.LE.230) THEN
23348         IF(ISUB.EQ.226) THEN
23349 C...f + fbar -> ~chi+_1 + ~chi-_1
23350           FACGG1=COMFAC*AEM**2/3D0/XW**2
23351           ZM12=SQM3
23352           ZM22=SQM4
23353           WU2 = (UH-ZM12)*(UH-ZM22)/SH2
23354           WT2 = (TH-ZM12)*(TH-ZM22)/SH2
23355           WS2 = SMW(IZID1)*SMW(IZID2)/SH
23356           PROPZ2 = (SH-SQMZ)**2 + SQMZ*ZWID**2
23357           REPRPZ = (SH-SQMZ)/PROPZ2
23358           DIFF=0D0
23359           IF(IZID1.EQ.IZID2) DIFF=1D0
23360           DO 1710 I=MMINA,MMAXA
23361             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1710
23362             EI=KCHG(IABS(I),1)/3D0
23363             FCOL=1D0
23364             IF(IABS(I).GE.11) FCOL=3D0
23365             XLQ=(SIGN(1D0,EI)-2D0*EI*XW)/2D0
23366             XRQ=-EI*XW
23367             XLQ=XLQ/XW1
23368             XRQ=XRQ/XW1
23369             XLQ2=XLQ**2
23370             XRQ2=XRQ**2
23371             OLP=-VMIX(IZID1,1)*VMIX(IZID2,1)-
23372      &      VMIX(IZID1,2)*VMIX(IZID2,2)/2D0+XW*DIFF
23373             ORP=-UMIX(IZID1,1)*UMIX(IZID2,1)-
23374      &      UMIX(IZID1,2)*UMIX(IZID2,2)/2D0+XW*DIFF
23375             ORP2=ORP**2
23376             OLP2=OLP**2
23377 C...u-type quark - d-type squark
23378             IF(MOD(I,2).EQ.0) THEN
23379               FACT0 = -UMIX(IZID1,1)*UMIX(IZID2,1)
23380               XML2=PMAS(PYCOMP(KSUSY1+IABS(I)-1),1)**2
23381 C...d-type quark - u-type squark
23382             ELSE
23383               FACT0 = VMIX(IZID1,1)*VMIX(IZID2,1)
23384               XML2=PMAS(PYCOMP(KSUSY1+IABS(I)+1),1)**2
23385             ENDIF
23386             FACA=2D0*XW**2*DIFF*(WT2+WU2+2D0*ABS(WS2))*EI**2
23387             FACZ=0.5D0*((XLQ2+XRQ2)*(OLP2+ORP2)*(WT2+WU2)+
23388      &      4D0*(XLQ2+XRQ2)*OLP*ORP*WS2-(XLQ2-XRQ2)*(OLP2-ORP2)*
23389      &      (WU2-WT2))*SH2/PROPZ2
23390             FACT=FACT0**2/4D0*WT2*SH2/(TH-XML2)**2
23391             FACAZ=XW*REPRPZ*DIFF*( (XLQ+XRQ)*(OLP+ORP)*(WU2+
23392      &      WT2+2D0*ABS(WS2))-(XLQ-XRQ)*(OLP-ORP)*(WU2-WT2) )*SH*(-EI)
23393             FACTA=XW*DIFF/(TH-XML2)*(WT2+ABS(WS2))*SH*FACT0*(-EI)
23394             FACTZ=REPRPZ/(TH-XML2)*XLQ*FACT0*(OLP*WT2+ORP*WS2)*SH2
23395             FACSUM=FACGG1*(FACA+FACAZ+FACZ+FACT+FACTA+FACTZ)*FCOL
23396             NCHN=NCHN+1
23397             ISIG(NCHN,1)=I
23398             ISIG(NCHN,2)=-I
23399             ISIG(NCHN,3)=1
23400             IF(IZID1.EQ.IZID2) THEN
23401               SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23402             ELSE
23403               SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
23404      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23405               NCHN=NCHN+1
23406               ISIG(NCHN,1)=I
23407               ISIG(NCHN,2)=-I
23408               ISIG(NCHN,3)=2
23409               SIGH(NCHN)=FACSUM*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23410      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),3)
23411             ENDIF
23412  1710     CONTINUE
23413  
23414         ELSEIF(ISUB.EQ.229) THEN
23415 C...q + qbar' -> ~chi0_1 + ~chi+-_1
23416           FACGG1=COMFAC*AEM**2/6D0/XW**2
23417           ZM12=SQM3
23418           ZM22=SQM4
23419           ZMU2  = PMAS(PYCOMP(KSUSY1+2),1)**2
23420           ZMD2  = PMAS(PYCOMP(KSUSY1+1),1)**2
23421           WU2 = (UH-ZM12)*(UH-ZM22)/SH2
23422           WT2 = (TH-ZM12)*(TH-ZM22)/SH2
23423           WS2 = SMW(IZID1)*SMZ(IZID2)/SH
23424           RT2I = 1D0/SQRT(2D0)
23425           PROPW = ((SH-SQMW)**2+WWID**2*SQMW)
23426           OL=-RT2I*ZMIX(IZID2,4)*VMIX(IZID1,2)+
23427      &    ZMIX(IZID2,2)*VMIX(IZID1,1)
23428           OR= RT2I*ZMIX(IZID2,3)*UMIX(IZID1,2)+
23429      &    ZMIX(IZID2,2)*UMIX(IZID1,1)
23430           OL2=OL**2
23431           OR2=OR**2
23432           CROSS=2D0*OL*OR
23433           FACST0=UMIX(IZID1,1)
23434           FACSU0=VMIX(IZID1,1)
23435           FACSU0=FACSU0*(0.5D0*ZMIX(IZID2,2)+TANW*ZMIX(IZID2,1)/6D0)
23436           FACST0=FACST0*(-0.5D0*ZMIX(IZID2,2)+TANW*ZMIX(IZID2,1)/6D0)
23437           FACT0=FACST0**2
23438           FACU0=FACSU0**2
23439           FACTU0=FACSU0*FACST0
23440           FACST = -2D0*(SH-SQMW)/PROPW/(TH-ZMD2)*(WT2*SH2*OR
23441      &    + SH2*WS2*OL)*FACST0
23442           FACSU =  2D0*(SH-SQMW)/PROPW/(UH-ZMU2)*(WU2*SH2*OL
23443      &    + SH2*WS2*OR)*FACSU0
23444           FACT = WT2*SH2/(TH-ZMD2)**2*FACT0
23445           FACU = WU2*SH2/(UH-ZMU2)**2*FACU0
23446           FACTU = -2D0*WS2*SH2/(TH-ZMD2)/(UH-ZMU2)*FACTU0
23447           FACW = (OR2*WT2+OL2*WU2+CROSS*WS2)/PROPW*SH2
23448           FACGG1=FACGG1*(FACW+FACT+FACTU+FACU+FACSU+FACST)
23449           DO 1730 I=MMIN1,MMAX1
23450             IA=IABS(I)
23451             IF(I.EQ.0.OR.IA.GT.20.OR.KFAC(1,I).EQ.0) GOTO 1730
23452             DO 1720 J=MMIN2,MMAX2
23453               JA=IABS(J)
23454               IF(J.EQ.0.OR.JA.GT.20.OR.KFAC(2,J).EQ.0) GOTO 1720
23455               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1720
23456               FCKM=3D0
23457               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
23458               KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
23459               KCHW=2
23460               IF(KCHSUM.LT.0) KCHW=3
23461               NCHN=NCHN+1
23462               ISIG(NCHN,1)=I
23463               ISIG(NCHN,2)=J
23464               ISIG(NCHN,3)=1
23465               SIGH(NCHN)=FACGG1*FCKM*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23466      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
23467  1720       CONTINUE
23468  1730     CONTINUE
23469         ENDIF
23470  
23471       ELSEIF(ISUB.LE.240) THEN
23472         IF(ISUB.EQ.237) THEN
23473 C...q + qbar -> gluino + ~chi0_1
23474           COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23475      &    WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23476           FAC0=COMFAC*AS*AEM*4D0/9D0/XW
23477           GM2=SQM3
23478           ZM2=SQM4
23479           DO 1740 I=MMINA,MMAXA
23480             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1740
23481             EI=KCHG(IABS(I),1)/3D0
23482             IA=IABS(I)
23483             XLQC = -TANW*EI*ZMIX(IZID,1)
23484             XRQC =(SIGN(1D0,EI)*ZMIX(IZID,2)-TANW*
23485      &      (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID,1))/2D0
23486             XLQ2=XLQC**2
23487             XRQ2=XRQC**2
23488             XML2=PMAS(PYCOMP(KSUSY1+IA),1)**2
23489             XMR2=PMAS(PYCOMP(KSUSY2+IA),1)**2
23490             ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XML2)**2
23491             AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XML2)**2
23492             ATUKIN=SMZ(IZID)*SQRT(GM2)*SH/(TH-XML2)/(UH-XML2)
23493             SGCHIL=XLQ2*(ATKIN+AUKIN-2D0*ATUKIN)
23494             ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XMR2)**2
23495             AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XMR2)**2
23496             ATUKIN=SMZ(IZID)*SQRT(GM2)*SH/(TH-XMR2)/(UH-XMR2)
23497             SGCHIR=XRQ2*(ATKIN+AUKIN-2D0*ATUKIN)
23498             NCHN=NCHN+1
23499             ISIG(NCHN,1)=I
23500             ISIG(NCHN,2)=-I
23501             ISIG(NCHN,3)=1
23502             SIGH(NCHN)=FAC0*(SGCHIL+SGCHIR)
23503  1740     CONTINUE
23504         ENDIF
23505  
23506       ELSEIF(ISUB.LE.250) THEN
23507         IF(ISUB.EQ.241) THEN
23508 C...q + qbar' -> ~chi+-_1 + gluino
23509           FACWG=COMFAC*AS*AEM/XW*2D0/9D0
23510           GM2=SQM3
23511           ZM2=SQM4
23512           FAC01=2D0*UMIX(IZID,1)*VMIX(IZID,1)
23513           FAC0=UMIX(IZID,1)**2
23514           FAC1=VMIX(IZID,1)**2
23515           DO 1760 I=MMIN1,MMAX1
23516             IA=IABS(I)
23517             IF(I.EQ.0.OR.IA.GT.10.OR.KFAC(1,I).EQ.0) GOTO 1760
23518             DO 1750 J=MMIN2,MMAX2
23519               JA=IABS(J)
23520               IF(J.EQ.0.OR.JA.GT.10.OR.KFAC(2,J).EQ.0) GOTO 1750
23521               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 1750
23522               FCKM=1D0
23523               IF(IA.LE.10) FCKM=VCKM((IA+1)/2,(JA+1)/2)
23524               KCHSUM=KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J)
23525               KCHW=2
23526               IF(KCHSUM.LT.0) KCHW=3
23527               XMU2=PMAS(PYCOMP(KSUSY1+2),1)**2
23528               XMD2=PMAS(PYCOMP(KSUSY1+1),1)**2
23529               ATKIN=(TH-GM2)*(TH-ZM2)/(TH-XMU2)**2
23530               AUKIN=(UH-GM2)*(UH-ZM2)/(UH-XMD2)**2
23531               ATUKIN=SMW(IZID)*SQRT(GM2)*SH/(TH-XMU2)/(UH-XMD2)
23532               XMU2=PMAS(PYCOMP(KSUSY2+2),1)**2
23533               XMD2=PMAS(PYCOMP(KSUSY2+1),1)**2
23534               ATKIN=(ATKIN+(TH-GM2)*(TH-ZM2)/(TH-XMU2)**2)/2D0
23535               AUKIN=(AUKIN+(UH-GM2)*(UH-ZM2)/(UH-XMD2)**2)/2D0
23536               ATUKIN=(ATUKIN+SMW(IZID)*SQRT(GM2)*
23537      &        SH/(TH-XMU2)/(UH-XMD2))/2D0
23538               NCHN=NCHN+1
23539               ISIG(NCHN,1)=I
23540               ISIG(NCHN,2)=J
23541               ISIG(NCHN,3)=1
23542               SIGH(NCHN)=FACWG*FCKM*(FAC0*ATKIN+FAC1*AUKIN-
23543      &        FAC01*ATUKIN)*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23544      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHW)
23545  1750       CONTINUE
23546  1760     CONTINUE
23547  
23548         ELSEIF(ISUB.EQ.243) THEN
23549 C...q + qbar -> gluino + gluino
23550           COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23551           XMT=SQM3-TH
23552           XMU=SQM3-UH
23553           DO 1770 I=MMINA,MMAXA
23554             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58).OR.
23555      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1770
23556             NCHN=NCHN+1
23557             XSU=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2-UH
23558             XST=PMAS(PYCOMP(KSUSY1+IABS(I)),1)**2-TH
23559             FACGG1=COMFAC*AS**2*8D0/3D0*( (XMT**2+XMU**2+
23560      &      2D0*SQM3*SH)/SH2 +4D0/9D0*(XMT**2/XST**2+
23561      &      XMU**2/XSU**2) - (XMT**2+SH*SQM3)/SH/XST +
23562      &      SQM3*SH/XST/XSU/9D0- (XMU**2+SH*SQM3)/SH/XSU )
23563             XSU=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2-UH
23564             XST=PMAS(PYCOMP(KSUSY2+IABS(I)),1)**2-TH
23565             FACGG2=COMFAC*AS**2*8D0/3D0*( (XMT**2+XMU**2+
23566      &      2D0*SQM3*SH)/SH2 +4D0/9D0*(XMT**2/XST**2+
23567      &      XMU**2/XSU**2) - (XMT**2+SH*SQM3)/SH/XST +
23568      &      SQM3*SH/XST/XSU/9D0- (XMU**2+SH*SQM3)/SH/XSU )
23569             ISIG(NCHN,1)=I
23570             ISIG(NCHN,2)=-I
23571             ISIG(NCHN,3)=1
23572 C...1/2 for identical particles
23573             SIGH(NCHN)=0.25D0*(FACGG1+FACGG2)
23574  1770     CONTINUE
23575  
23576         ELSEIF(ISUB.EQ.244) THEN
23577 C...g + g -> gluino + gluino
23578           COMFAC=COMFAC*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23579           XMT=SQM3-TH
23580           XMU=SQM3-UH
23581           FACQQ1=COMFAC*AS**2*9D0/4D0*(
23582      &    (XMT*XMU-2D0*SQM3*(TH+SQM3))/XMT**2 -
23583      &    (XMT*XMU+SQM3*(UH-TH))/SH/XMT )
23584           FACQQ2=COMFAC*AS**2*9D0/4D0*(
23585      &    (XMU*XMT-2D0*SQM3*(UH+SQM3))/XMU**2 -
23586      &    (XMU*XMT+SQM3*(TH-UH))/SH/XMU )
23587           FACQQ3=COMFAC*AS**2*9D0/4D0*(2D0*XMT*XMU/SH2 +
23588      &    SQM3*(SH-4D0*SQM3)/XMT/XMU)
23589           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1780
23590           NCHN=NCHN+1
23591           ISIG(NCHN,1)=21
23592           ISIG(NCHN,2)=21
23593           ISIG(NCHN,3)=1
23594           SIGH(NCHN)=FACQQ1/2D0
23595           NCHN=NCHN+1
23596           ISIG(NCHN,1)=21
23597           ISIG(NCHN,2)=21
23598           ISIG(NCHN,3)=2
23599           SIGH(NCHN)=FACQQ2/2D0
23600           NCHN=NCHN+1
23601           ISIG(NCHN,1)=21
23602           ISIG(NCHN,2)=21
23603           ISIG(NCHN,3)=3
23604           SIGH(NCHN)=FACQQ3/2D0
23605  1780     CONTINUE
23606  
23607         ELSEIF(ISUB.EQ.246) THEN
23608 C...g + q_j -> ~chi0_1 + ~q_j
23609           FAC0=COMFAC*AS*AEM/6D0/XW
23610           ZM2=SQM4
23611           QM2=SQM3
23612           FACZQ0=FAC0*( (ZM2-TH)/SH +
23613      &    (UH-ZM2)*(UH+QM2)/(UH-QM2)**2 -
23614      &    (SH*(UH+ZM2)+2D0*(QM2-ZM2)*(ZM2-UH))/SH/(UH-QM2) )
23615           KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
23616           DO 1800 I=-KFNSQ,KFNSQ,2*KFNSQ
23617             IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1800
23618             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1800
23619             EI=KCHG(IABS(I),1)/3D0
23620             IA=IABS(I)
23621             XRQZ = -TANW*EI*ZMIX(IZID,1)
23622             XLQZ =(SIGN(1D0,EI)*ZMIX(IZID,2)-TANW*
23623      &      (SIGN(1D0,EI)-2D0*EI)*ZMIX(IZID,1))/2D0
23624             IF(ILR.EQ.0) THEN
23625               BS=XLQZ**2*SFMIX(IA,1)**2+XRQZ**2*SFMIX(IA,2)**2
23626             ELSE
23627               BS=XLQZ**2*SFMIX(IA,3)**2+XRQZ**2*SFMIX(IA,4)**2
23628             ENDIF
23629             FACZQ=FACZQ0*BS
23630             KCHQ=2
23631             IF(I.LT.0) KCHQ=3
23632             DO 1790 ISDE=1,2
23633               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1790
23634               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1790
23635               NCHN=NCHN+1
23636               ISIG(NCHN,ISDE)=I
23637               ISIG(NCHN,3-ISDE)=21
23638               ISIG(NCHN,3)=1
23639               SIGH(NCHN)=FACZQ*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23640      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23641  1790       CONTINUE
23642  1800     CONTINUE
23643         ENDIF
23644  
23645       ELSEIF(ISUB.LE.260) THEN
23646         IF(ISUB.EQ.254) THEN
23647 C...g + q_j -> ~chi1_1 + ~q_i
23648           FAC0=COMFAC*AS*AEM/12D0/XW
23649           ZM2=SQM4
23650           QM2=SQM3
23651           AU=UMIX(IZID,1)**2
23652           AD=VMIX(IZID,1)**2
23653           FACZQ0=FAC0*( (ZM2-TH)/SH +
23654      &    (UH-ZM2)*(UH+QM2)/(UH-QM2)**2 -
23655      &    (SH*(UH+ZM2)+2D0*(QM2-ZM2)*(ZM2-UH))/SH/(UH-QM2) )
23656           KFNSQ1=MOD(KFPR(ISUBSV,1),KSUSY1)
23657           IF(MOD(KFNSQ1,2).EQ.0) THEN
23658             KFNSQ=KFNSQ1-1
23659             KCHW=2
23660           ELSE
23661             KFNSQ=KFNSQ1+1
23662             KCHW=3
23663           ENDIF
23664           DO 1820 I=-KFNSQ,KFNSQ,2*KFNSQ
23665             IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1820
23666             IF(I.EQ.0.OR.IABS(I).GT.MSTP(58)) GOTO 1820
23667             IA=IABS(I)
23668             IF(MOD(IA,2).EQ.0) THEN
23669               FACZQ=FACZQ0*AU
23670             ELSE
23671               FACZQ=FACZQ0*AD
23672             ENDIF
23673             FACZQ=FACZQ*SFMIX(KFNSQ1,1+2*ILR)**2
23674             KCHQ=2
23675             IF(I.LT.0) KCHQ=3
23676             KCHWQ=KCHW
23677             IF(I.LT.0) KCHWQ=5-KCHW
23678             DO 1810 ISDE=1,2
23679               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1810
23680               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1810
23681               NCHN=NCHN+1
23682               ISIG(NCHN,ISDE)=I
23683               ISIG(NCHN,3-ISDE)=21
23684               ISIG(NCHN,3)=1
23685               SIGH(NCHN)=FACZQ*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23686      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHWQ)
23687  1810       CONTINUE
23688  1820     CONTINUE
23689  
23690         ELSEIF(ISUB.EQ.258) THEN
23691 C...g + q_j -> gluino + ~q_i
23692           XG2=SQM4
23693           XQ2=SQM3
23694           XMT=XG2-TH
23695           XMU=XG2-UH
23696           XST=XQ2-TH
23697           XSU=XQ2-UH
23698           FACQG1=0.5D0*4D0/9D0*XMT/SH + (XMT*SH+2D0*XG2*XST)/XMT**2 -
23699      &    ( (SH-XQ2+XG2)*(-XST)-SH*XG2 )/SH/(-XMT) +
23700      &    0.5D0*1D0/2D0*( XST*(TH+2D0*UH+XG2)-XMT*(SH-2D0*XST) +
23701      &    (-XMU)*(TH+XG2+2D0*XQ2) )/2D0/XMT/XSU
23702           FACQG2= 4D0/9D0*(-XMU)*(UH+XQ2)/XSU**2 + 1D0/18D0*
23703      &    (SH*(UH+XG2)
23704      &    +2D0*(XQ2-XG2)*XMU)/SH/(-XSU) + 0.5D0*4D0/9D0*XMT/SH +
23705      &    0.5D0*1D0/2D0*(XST*(TH+2D0*UH+XG2)-XMT*(SH-2D0*XST)+
23706      &    (-XMU)*(TH+XG2+2D0*XQ2))/2D0/XMT/XSU
23707           FACQG1=COMFAC*AS**2*FACQG1/2D0
23708           FACQG2=COMFAC*AS**2*FACQG2/2D0
23709           KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
23710           DO 1840 I=-KFNSQ,KFNSQ,2*KFNSQ
23711             IF(I.LT.MMINA.OR.I.GT.MMAXA) GOTO 1840
23712             IF(I.EQ.0.OR.IABS(I).GT.10) GOTO 1840
23713             KCHQ=2
23714             IF(I.LT.0) KCHQ=3
23715             FACSEL=RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23716      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23717             DO 1830 ISDE=1,2
23718               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,21).EQ.0) GOTO 1830
23719               IF(ISDE.EQ.2.AND.KFAC(1,21)*KFAC(2,I).EQ.0) GOTO 1830
23720               NCHN=NCHN+1
23721               ISIG(NCHN,ISDE)=I
23722               ISIG(NCHN,3-ISDE)=21
23723               ISIG(NCHN,3)=1
23724               SIGH(NCHN)=FACQG1*FACSEL
23725               NCHN=NCHN+1
23726               ISIG(NCHN,ISDE)=I
23727               ISIG(NCHN,3-ISDE)=21
23728               ISIG(NCHN,3)=2
23729               SIGH(NCHN)=FACQG2*FACSEL
23730  1830       CONTINUE
23731  1840     CONTINUE
23732         ENDIF
23733  
23734       ELSEIF(ISUB.LE.270) THEN
23735         IF(ISUB.EQ.261) THEN
23736 C...q_i + q_ibar -> ~t_1 + ~t_1bar
23737           FACQQ1=COMFAC*( (UH*TH-SQM3*SQM4)/ SH**2 )*
23738      &    WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23739           KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
23740           FAC0=AS**2*4D0/9D0
23741           DO 1850 I=MMIN1,MMAX1
23742             IA=IABS(I)
23743             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1850
23744             IF(IA.GE.11.AND.IA.LE.18) THEN
23745               EI=KCHG(IA,1)/3D0
23746               EJ=KCHG(KFNSQ,1)/3D0
23747               T3I=SIGN(1D0,EI)/2D0
23748               T3J=SIGN(1D0,EJ)/2D0
23749               XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,2*ILR+1)**2
23750               XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,2*ILR+2)**2
23751               XLF=2D0*(T3I-EI*XW)
23752               XRF=2D0*(-EI*XW)
23753               TAA=0.5D0*(EI*EJ)**2
23754               TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/64D0/XW**2/XW1**2
23755               TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
23756               TAZ=EI*EJ*(XLQ+XRQ)*(XLF+XRF)/8D0/XW/XW1
23757               TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
23758               FAC0=AEM**2*12D0*(TAA+TZZ+TAZ)
23759             ENDIF
23760             NCHN=NCHN+1
23761             ISIG(NCHN,1)=I
23762             ISIG(NCHN,2)=-I
23763             ISIG(NCHN,3)=1
23764             SIGH(NCHN)=FACQQ1*FAC0
23765  1850     CONTINUE
23766  
23767         ELSEIF(ISUB.EQ.263) THEN
23768 C...f + fbar -> ~t1 + ~t2bar
23769           DO 1860 I=MMIN1,MMAX1
23770             IA=IABS(I)
23771             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1860
23772             EI=KCHG(IABS(I),1)/3D0
23773             TT3I=SIGN(1D0,EI)/2D0
23774             EJ=2D0/3D0
23775             TT3J=1D0/2D0
23776             FCOL=1D0
23777 C...Color factor for e+ e-
23778             IF(IA.GE.11) FCOL=3D0
23779             XLQ=2D0*(TT3J-EJ*XW)
23780             XRQ=2D0*(-EJ*XW)
23781             XLF=2D0*(TT3I-EI*XW)
23782             XRF=2D0*(-EI*XW)
23783             TZZ=(XLF**2+XRF**2)*(XLQ-XRQ)**2/64D0/XW**2/XW1**2
23784             TZZ=TZZ*(SFMIX(6,1)*SFMIX(6,2))**2
23785             TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
23786 C...Factor of 2 for t1 t2bar + t2 t1bar
23787             FACQQ1=2D0*COMFAC*AEM**2*TZZ*FCOL*4D0
23788             FACQQ1=FACQQ1*( UH*TH-SQM3*SQM4 )/SH2
23789             NCHN=NCHN+1
23790             ISIG(NCHN,1)=I
23791             ISIG(NCHN,2)=-I
23792             ISIG(NCHN,3)=1
23793             SIGH(NCHN)=FACQQ1*WIDS(PYCOMP(KFPR(ISUBSV,1)),2)*
23794      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),3)
23795             NCHN=NCHN+1
23796             ISIG(NCHN,1)=I
23797             ISIG(NCHN,2)=-I
23798             ISIG(NCHN,3)=2
23799             SIGH(NCHN)=FACQQ1*WIDS(PYCOMP(KFPR(ISUBSV,1)),3)*
23800      &      WIDS(PYCOMP(KFPR(ISUBSV,2)),2)
23801  1860     CONTINUE
23802  
23803         ELSEIF(ISUB.EQ.264) THEN
23804 C...g + g -> ~t_1 + ~t_1bar
23805           XSU=SQM3-UH
23806           XST=SQM3-TH
23807           FAC0=COMFAC*AS**2*(7D0/48D0+3D0*(UH-TH)**2/16D0/SH2 )*0.5D0*
23808      &    WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23809           FACQQ1=FAC0*(0.5D0+2D0*SQM3*TH/XST**2 + 2D0*SQM3**2/XSU/XST)
23810           FACQQ2=FAC0*(0.5D0+2D0*SQM3*UH/XSU**2 + 2D0*SQM3**2/XSU/XST)
23811           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1870
23812           NCHN=NCHN+1
23813           ISIG(NCHN,1)=21
23814           ISIG(NCHN,2)=21
23815           ISIG(NCHN,3)=1
23816           SIGH(NCHN)=FACQQ1
23817           NCHN=NCHN+1
23818           ISIG(NCHN,1)=21
23819           ISIG(NCHN,2)=21
23820           ISIG(NCHN,3)=2
23821           SIGH(NCHN)=FACQQ2
23822  1870     CONTINUE
23823         ENDIF
23824  
23825       ELSEIF(ISUB.LE.280) THEN
23826         IF(ISUB.EQ.271) THEN
23827 C...q + q' -> ~q + ~q' (~g exchange)
23828           XMG2=PMAS(PYCOMP(KSUSY1+21),1)**2
23829           XMT=XMG2-TH
23830           XMU=XMG2-UH
23831           XSU1=SQM3-UH
23832           XSU2=SQM4-UH
23833           XST1=SQM3-TH
23834           XST2=SQM4-TH
23835           IF(ILR.EQ.1) THEN
23836             FACQQ1=COMFAC*AS**2*4D0/9D0*( -(XST1*XST2+SH*TH)/XMT**2 )
23837             FACQQ2=COMFAC*AS**2*4D0/9D0*( -(XSU1*XSU2+SH*UH)/XMU**2 )
23838             FACQQB=0.0D0
23839           ELSE
23840             FACQQ1=0.5D0*COMFAC*AS**2*4D0/9D0*( SH*XMG2/XMT**2 )
23841             FACQQ2=0.5D0*COMFAC*AS**2*4D0/9D0*( SH*XMG2/XMU**2 )
23842             FACQQB=0.5D0*COMFAC*AS**2*4D0/9D0*( -2D0*SH*XMG2/3D0/
23843      &      XMT/XMU )
23844           ENDIF
23845           KFNSQI=MOD(KFPR(ISUBSV,1),KSUSY1)
23846           KFNSQJ=MOD(KFPR(ISUBSV,2),KSUSY1)
23847           DO 1890 I=-KFNSQI,KFNSQI,2*KFNSQI
23848             IF(I.LT.MMIN1.OR.I.GT.MMAX1) GOTO 1890
23849             IA=IABS(I)
23850             IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 1890
23851             KCHQ=2
23852             IF(I.LT.0) KCHQ=3
23853             DO 1880 J=-KFNSQJ,KFNSQJ,2*KFNSQJ
23854               IF(J.LT.MMIN2.OR.J.GT.MMAX2) GOTO 1880
23855               JA=IABS(J)
23856               IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 1880
23857               IF(I*J.LT.0) GOTO 1880
23858               NCHN=NCHN+1
23859               ISIG(NCHN,1)=I
23860               ISIG(NCHN,2)=J
23861               ISIG(NCHN,3)=1
23862               SIGH(NCHN)=FACQQ1*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23863      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
23864               IF(I.EQ.J) THEN
23865                 IF(ILR.EQ.0) THEN
23866                   SIGH(NCHN)=0.5D0*(FACQQ1+0.5D0*FACQQB)*RKF*
23867      &            WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ+2)
23868                 ELSE
23869                   SIGH(NCHN)=0.5D0*FACQQ1*RKF*
23870      &            WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23871      &            WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
23872                 ENDIF
23873                 NCHN=NCHN+1
23874                 ISIG(NCHN,1)=I
23875                 ISIG(NCHN,2)=J
23876                 ISIG(NCHN,3)=2
23877                 IF(ILR.EQ.0) THEN
23878                   SIGH(NCHN)=0.5D0*(FACQQ2+0.5D0*FACQQB)*RKF*
23879      &            WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ+2)
23880                 ELSE
23881                   SIGH(NCHN)=0.5D0*FACQQ2*RKF*
23882      &            WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23883      &            WIDS(PYCOMP(KFPR(ISUBSV,2)),KCHQ)
23884                 ENDIF
23885               ENDIF
23886  1880       CONTINUE
23887  1890     CONTINUE
23888  
23889         ELSEIF(ISUB.EQ.274) THEN
23890 C...q + qbar' -> ~q + ~qbar'
23891           XMG2=PMAS(PYCOMP(KSUSY1+21),1)**2
23892           XMT=XMG2-TH
23893           XMU=XMG2-UH
23894           IF(ILR.EQ.0) THEN
23895 C...Mrenna...Normalization.and.1/XMT
23896             FACQQ1=COMFAC*AS**2*2D0/9D0*(
23897      &      (UH*TH-SQM3*SQM4)/XMT**2 )
23898             FACQQB=COMFAC*AS**2*2D0/9D0*(
23899      &      (UH*TH-SQM3*SQM4)/SH2*(2D0-2D0/3D0*SH/XMT))
23900             FACQQB=FACQQB+FACQQ1
23901           ELSE
23902             FACQQ1=COMFAC*AS**2*4D0/9D0*( XMG2*SH/XMT**2 )
23903             FACQQB=FACQQ1
23904           ENDIF
23905           KFNSQI=MOD(KFPR(ISUBSV,1),KSUSY1)
23906           KFNSQJ=MOD(KFPR(ISUBSV,2),KSUSY1)
23907           DO 1910 I=-KFNSQI,KFNSQI,2*KFNSQI
23908             IF(I.LT.MMIN1.OR.I.GT.MMAX1) GOTO 1910
23909             IA=IABS(I)
23910             IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.KFAC(1,I).EQ.0) GOTO 1910
23911             KCHQ=2
23912             IF(I.LT.0) KCHQ=3
23913             DO 1900 J=-KFNSQJ,KFNSQJ,2*KFNSQJ
23914               IF(J.LT.MMIN2.OR.J.GT.MMAX2) GOTO 1900
23915               JA=IABS(J)
23916               IF(J.EQ.0.OR.JA.GT.MSTP(58).OR.KFAC(2,J).EQ.0) GOTO 1900
23917               IF(I*J.GT.0) GOTO 1900
23918               NCHN=NCHN+1
23919               ISIG(NCHN,1)=I
23920               ISIG(NCHN,2)=J
23921               ISIG(NCHN,3)=1
23922               SIGH(NCHN)=FACQQ1*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),KCHQ)*
23923      &        WIDS(PYCOMP(KFPR(ISUBSV,2)),5-KCHQ)
23924               IF(I.EQ.-J) SIGH(NCHN)=FACQQB*RKF*
23925      &        WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23926  1900       CONTINUE
23927  1910     CONTINUE
23928  
23929         ELSEIF(ISUB.EQ.277) THEN
23930 C...q_i + q_ibar -> ~q_j + ~q_jbar ,i .ne. j
23931 C...if i .eq. j covered in 274
23932           FACQQ1=COMFAC*( (UH*TH-SQM3*SQM4)/ SH**2 )
23933           KFNSQ=MOD(KFPR(ISUBSV,1),KSUSY1)
23934           FAC0=0D0
23935           DO 1920 I=MMIN1,MMAX1
23936             IA=IABS(I)
23937             IF(I.EQ.0.OR.IA.GT.MSTP(58).OR.
23938      &      KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 1920
23939             IF(IA.EQ.KFNSQ) GOTO 1920
23940             IF(IA.EQ.11.OR.IA.EQ.13.OR.IA.EQ.15) THEN
23941               EI=KCHG(IA,1)/3D0
23942               EJ=KCHG(KFNSQ,1)/3D0
23943               T3J=SIGN(0.5D0,EJ)
23944               T3I=SIGN(1D0,EI)/2D0
23945               IF(ILR.EQ.0) THEN
23946                 XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,1)
23947                 XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,2)
23948               ELSE
23949                 XLQ=2D0*(T3J-EJ*XW)*SFMIX(KFNSQ,3)
23950                 XRQ=2D0*(-EJ*XW)*SFMIX(KFNSQ,4)
23951               ENDIF
23952               XLF=2D0*(T3I-EI*XW)
23953               XRF=2D0*(-EI*XW)
23954               IF(ILR.EQ.0) THEN
23955                 XRQ=0D0
23956               ELSE
23957                 XLQ=0D0
23958               ENDIF
23959               TAA=0.5D0*(EI*EJ)**2
23960               TZZ=(XLF**2+XRF**2)*(XLQ+XRQ)**2/64D0/XW**2/XW1**2
23961               TZZ=TZZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)
23962               TAZ=EI*EJ*(XLQ+XRQ)*(XLF+XRF)/8D0/XW/XW1
23963               TAZ=TAZ/((1D0-SQMZ/SH)**2+SQMZ*(ZWID/SH)**2)*(1D0-SQMZ/SH)
23964               FAC0=AEM**2*12D0*(TAA+TZZ+TAZ)
23965             ELSEIF(IA.LE.6) THEN
23966               FAC0=AS**2*8D0/9D0/2D0
23967             ENDIF
23968             NCHN=NCHN+1
23969             ISIG(NCHN,1)=I
23970             ISIG(NCHN,2)=-I
23971             ISIG(NCHN,3)=1
23972             SIGH(NCHN)=FACQQ1*FAC0*RKF*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23973  1920     CONTINUE
23974  
23975         ELSEIF(ISUB.EQ.279) THEN
23976 C...g + g -> ~q_j + ~q_jbar
23977           XSU=SQM3-UH
23978           XST=SQM3-TH
23979 C...5=RKF because ~t ~tbar treated separately
23980           FAC0=RKF*COMFAC*AS**2*( 7D0/48D0+3D0*(UH-TH)**2/16D0/SH2 )
23981           FACQQ1=FAC0*(0.5D0+2D0*SQM3*TH/XST**2 + 2D0*SQM3**2/XSU/XST)
23982           FACQQ2=FAC0*(0.5D0+2D0*SQM3*UH/XSU**2 + 2D0*SQM3**2/XSU/XST)
23983           IF(KFAC(1,21)*KFAC(2,21).EQ.0) GOTO 1930
23984           NCHN=NCHN+1
23985           ISIG(NCHN,1)=21
23986           ISIG(NCHN,2)=21
23987           ISIG(NCHN,3)=1
23988           SIGH(NCHN)=FACQQ1/2D0*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23989           NCHN=NCHN+1
23990           ISIG(NCHN,1)=21
23991           ISIG(NCHN,2)=21
23992           ISIG(NCHN,3)=2
23993           SIGH(NCHN)=FACQQ2/2D0*WIDS(PYCOMP(KFPR(ISUBSV,1)),1)
23994  1930     CONTINUE
23995  
23996         ENDIF
23997 CMRENNA--
23998         
23999       ELSEIF(ISUB.LE.340) THEN 
24000 
24001       ELSEIF(ISUB.LE.360) THEN
24002 
24003         IF(ISUB.EQ.341.OR.ISUB.EQ.342) THEN
24004 C...l + l -> H_L++/-- or H_R++/--.
24005           KFRES=KFPR(ISUB,1)
24006           CALL PYWIDT(KFRES,SH,WDTP,WDTE)
24007           HS=SHR*WDTP(0)
24008           FACBW=8D0*COMFAC/((SH-PMAS(KFRES,1)**2)**2+HS**2)
24009           DO 1950 I=MMIN1,MMAX1
24010             IA=IABS(I)
24011             IF((IA.NE.11.AND.IA.NE.13.AND.IA.NE.15).OR.KFAC(1,I).EQ.0) 
24012      &      GOTO 1950
24013             DO 1940 J=MMIN2,MMAX2
24014               JA=IABS(J)
24015               IF((JA.NE.11.AND.JA.NE.13.AND.JA.NE.15).OR.KFAC(2,J).EQ.0) 
24016      &        GOTO 1940
24017               IF(I*J.LT.0) GOTO 1940
24018               KCHH=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
24019               NCHN=NCHN+1
24020               ISIG(NCHN,1)=I
24021               ISIG(NCHN,2)=J
24022               ISIG(NCHN,3)=1
24023               HI=SH*PARP(181+3*((IA-11)/2)+(JA-11)/2)**2/(8D0*PARU(1))
24024               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHH/2)/2)+WDTE(0,4))
24025               SIGH(NCHN)=HI*FACBW*HF
24026  1940       CONTINUE
24027  1950     CONTINUE
24028 
24029         ELSEIF(ISUB.GE.343.AND.ISUB.LE.348) THEN
24030 C...l + gamma -> H_L++/-- l' or l + gamma -> H_R++/-- l'.
24031           KFRES=KFPR(ISUB,1)
24032 C...Propagators: as simulated in PYOFSH and as desired
24033           HBW3=PMAS(KFRES,1)*PMAS(KFRES,2)/((SQM3-PMAS(KFRES,1)**2)**2+
24034      &    (PMAS(KFRES,1)*PMAS(KFRES,2))**2)
24035           CALL PYWIDT(KFRES,SQM3,WDTP,WDTE)
24036           GMMC=SQRT(SQM3)*WDTP(0)
24037           HBW3C=GMMC/((SQM3-PMAS(KFRES,1)**2)**2+GMMC**2)
24038           FHCC=COMFAC*AEM*HBW3C/HBW3
24039           DO 1980 I=MMINA,MMAXA
24040             IA=IABS(I)
24041             IF(IA.NE.11.AND.IA.NE.13.AND.IA.NE.15) GOTO 1980
24042             SQML=PMAS(IA,1)**2
24043             J=ISIGN(KFPR(ISUB,2),-I)
24044             KCHH=ISIGN(2,KCHG(IA,1)*ISIGN(1,I))
24045             WIDSC=(WDTE(0,1)+WDTE(0,(5-KCHH/2)/2)+WDTE(0,4))/WDTP(0)
24046             SMM1=8D0*(SH+TH-SQM3)*(SH+TH-2D0*SQM3-SQML-SQM4)/
24047      &      (UH-SQM3)**2
24048             SMM2=2D0*((2D0*SQM3-3D0*SQML)*SQM4+(SQML-2D0*SQM4)*TH-
24049      &      (TH-SQM4)*SH)/(TH-SQM4)**2 
24050             SMM3=2D0*((2D0*SQM3-3D0*SQM4+TH)*SQML-(2D0*SQML-SQM4+TH)*
24051      &      SH)/(SH-SQML)**2
24052             SMM12=4D0*((2D0*SQML-SQM4-2D0*SQM3+TH)*SH+(TH-3D0*SQM3-
24053      &      3D0*SQM4)*TH+(2D0*SQM3-2D0*SQML+3D0*SQM4)*SQM3)/
24054      &      ((UH-SQM3)*(TH-SQM4))
24055             SMM13=-4D0*((TH+SQML-2D0*SQM4)*TH-(SQM3+3D0*SQML-2D0*SQM4)*
24056      &      SQM3+(SQM3+3D0*SQML+TH)*SH-(TH-SQM3+SH)**2)/
24057      &      ((UH-SQM3)*(SH-SQML))
24058             SMM23=-4D0*((SQML-SQM4+SQM3)*TH-SQM3**2+SQM3*(SQML+SQM4)-
24059      &      3D0*SQML*SQM4-(SQML-SQM4-SQM3+TH)*SH)/
24060      &      ((SH-SQML)*(TH-SQM4))
24061             SMM=(SH/(SH-SQML))**2*(SMM1+SMM2+SMM3+SMM12+SMM13+SMM23)*
24062      &      PARP(181+3*((IA-11)/2)+(IABS(J)-11)/2)**2/(4D0*PARU(1))
24063             DO 1960 ISDE=1,2
24064               IF(ISDE.EQ.1.AND.KFAC(1,I)*KFAC(2,22).EQ.0) GOTO 1960
24065               IF(ISDE.EQ.2.AND.KFAC(1,22)*KFAC(2,I).EQ.0) GOTO 1960
24066               NCHN=NCHN+1
24067               ISIG(NCHN,ISDE)=I
24068               ISIG(NCHN,3-ISDE)=22
24069               ISIG(NCHN,3)=0
24070               SIGH(NCHN)=FHCC*SMM*WIDSC
24071  1960       CONTINUE
24072  1980     CONTINUE
24073  
24074         ELSEIF(ISUB.EQ.349.OR.ISUB.EQ.350) THEN
24075 C...f + fbar -> H_L++ + H_L-- or H_R++ + H_R--
24076           KFRES=KFPR(ISUB,1)
24077           SQMH=PMAS(KFRES,1)**2
24078           GMMH=PMAS(KFRES,1)*PMAS(KFRES,2)
24079 C...Propagators: H++/-- as simulated in PYOFSH and as desired
24080           HBW3=GMMH/((SQM3-SQMH)**2+GMMH**2)
24081           CALL PYWIDT(KFRES,SQM3,WDTP,WDTE)
24082           GMMH3=SQRT(SQM3)*WDTP(0)
24083           HBW3C=GMMH3/((SQM3-SQMH)**2+GMMH3**2)
24084           HBW4=GMMH/((SQM4-SQMH)**2+GMMH**2)
24085           CALL PYWIDT(KFRES,SQM4,WDTP,WDTE)
24086           GMMH4=SQRT(SQM4)*WDTP(0)
24087           HBW4C=GMMH4/((SQM4-SQMH)**2+GMMH4**2)
24088 C...Kinematical and coupling functions
24089           FACHH=COMFAC*(HBW3C/HBW3)*(HBW4C/HBW4)*(TH*UH-SQM3*SQM4)
24090           XWHH=(1D0-2D0*XWV)/(8D0*XWV*(1D0-XWV))         
24091 C...Loop over allowed flavours
24092           DO 2000 I=MMINA,MMAXA
24093             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 2000
24094             EI=KCHG(IABS(I),1)/3D0
24095             AI=SIGN(1D0,EI+0.1D0)
24096             VI=AI-4D0*EI*XWV
24097             FCOI=1D0
24098             IF(IABS(I).LE.10) FCOI=FACA/3D0
24099             IF(ISUB.EQ.349) THEN
24100               HBWZ=1D0/((SH-SQMZ)**2+GMMZ**2)
24101               IF(IABS(I).LT.10) THEN
24102                 DSIGHH=8D0*AEM**2*(EI**2/SH2+
24103      &          2D0*EI*VI*XWHH*(SH-SQMZ)*HBWZ/SH+
24104      &          (VI**2+AI**2)*XWHH**2*HBWZ)
24105               ELSE 
24106                 IAOFF=181+3*((IABS(I)-11)/2)
24107                 HSUM=(PARP(IAOFF)**2+PARP(IAOFF+1)**2+PARP(IAOFF+2)**2)/
24108      &          (4D0*PARU(1))
24109                 DSIGHH=8D0*AEM**2*(EI**2/SH2+
24110      &          2D0*EI*VI*XWHH*(SH-SQMZ)*HBWZ/SH+
24111      &          (VI**2+AI**2)*XWHH**2*HBWZ)+
24112      &          8D0*AEM*(EI*HSUM/(SH*TH)+
24113      &          (VI+AI)*XWHH*HSUM*(SH-SQMZ)*HBWZ/TH)+
24114      &          4D0*HSUM**2/TH2
24115               ENDIF
24116             ELSE
24117               IF(IABS(I).LT.10) THEN
24118                 DSIGHH=8D0*AEM**2*EI**2/SH2
24119               ELSE 
24120                 IAOFF=181+3*((IABS(I)-11)/2)
24121                 HSUM=(PARP(IAOFF)**2+PARP(IAOFF+1)**2+PARP(IAOFF+2)**2)/
24122      &          (4D0*PARU(1))
24123                 DSIGHH=8D0*AEM**2*EI**2/SH2+8D0*AEM*EI*HSUM/(SH*TH)+
24124      &          4D0*HSUM**2/TH2 
24125               ENDIF     
24126             ENDIF
24127             NCHN=NCHN+1
24128             ISIG(NCHN,1)=I
24129             ISIG(NCHN,2)=-I
24130             ISIG(NCHN,3)=1
24131             SIGH(NCHN)=FACHH*FCOI*DSIGHH
24132  2000     CONTINUE
24133  
24134         ELSEIF(ISUB.EQ.351.OR.ISUB.EQ.352) THEN
24135 C...f + f' -> f" + f"' + H++/-- (W+/- + W+/- -> H++/-- as inner process)
24136           KFRES=KFPR(ISUB,1)
24137           SQMH=PMAS(KFRES,1)**2
24138           IF(ISUB.EQ.351) FACNOR=PARP(190)**8*PARP(192)**2
24139           IF(ISUB.EQ.352) FACNOR=PARP(191)**6*2D0*PMAS(63,1)**2
24140           FACWW=COMFAC*FACNOR*TAUP*VINT(2)*VINT(219)
24141           FACPRT=1D0/((VINT(204)**2-VINT(215))*
24142      &    (VINT(209)**2-VINT(216)))
24143           FACPRU=1D0/((VINT(204)**2+2D0*VINT(217))*
24144      &    (VINT(209)**2+2D0*VINT(218)))
24145           CALL PYWIDT(KFRES,SH,WDTP,WDTE)
24146           HS=SHR*WDTP(0)
24147           FACBW=(1D0/PARU(1))*VINT(2)/((SH-SQMH)**2+HS**2)
24148           IF(ABS(SHR-PMAS(KFRES,1)).GT.PARP(48)*PMAS(KFRES,2))
24149      &    FACBW=0D0
24150           DO 2020 I=MMIN1,MMAX1
24151             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 2020
24152             IF(ISUB.EQ.352.AND.IABS(I).GT.10) GOTO 2020
24153             KCHWI=(1-2*MOD(IABS(I),2))*ISIGN(1,I)  
24154             DO 2010 J=MMIN2,MMAX2
24155               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 2010
24156               IF(ISUB.EQ.352.AND.IABS(J).GT.10) GOTO 2010
24157               KCHWJ=(1-2*MOD(IABS(J),2))*ISIGN(1,J)
24158               KCHH=KCHWI+KCHWJ
24159               IF(IABS(KCHH).NE.2) GOTO 2010  
24160               FACLR=VINT(180+I)*VINT(180+J)
24161               HF=SHR*(WDTE(0,1)+WDTE(0,(5-KCHH/2)/2)+WDTE(0,4))
24162               IF(I.EQ.J.AND.IABS(I).GT.10) THEN
24163                 FACPRP=0.5D0*(FACPRT+FACPRU)**2
24164               ELSE
24165                 FACPRP=FACPRT**2
24166               ENDIF 
24167               NCHN=NCHN+1
24168               ISIG(NCHN,1)=I
24169               ISIG(NCHN,2)=J
24170               ISIG(NCHN,3)=1
24171               SIGH(NCHN)=FACLR*FACWW*FACPRP*FACBW*HF
24172  2010       CONTINUE
24173  2020     CONTINUE
24174         ENDIF
24175 
24176       ELSEIF(ISUB.LE.380) THEN
24177  
24178         IF(ISUB.EQ.361) THEN
24179 C...f + fbar -> W_L W_L, W_L pi_tech, pi_tech pi_tech
24180           FACA=(SH**2*BE34**2-(TH-UH)**2)
24181           ALPRHT=2.91D0*(3D0/PARP(144))
24182           HP=(1D0/12D0)*AEM*ALPRHT*CAB2*COMFAC*FACA*3D0
24183           FAR=SQRT(AEM/ALPRHT)
24184           FAO=FAR*QUPD
24185           FZR=FAR*CT2W
24186           FZO=-FAO*TANW
24187           SFAR=FAR**2
24188           SFAO=FAO**2
24189           SFZR=FZR**2
24190           SFZO=FZO**2
24191           CALL PYWIDT(23,SH,WDTP,WDTE)
24192           SSMZ=CMPLX(1D0-PMAS(23,1)**2/SH,WDTP(0)/SHR)
24193           CALL PYWIDT(54,SH,WDTP,WDTE)
24194           SSMR=CMPLX(1D0-PMAS(54,1)**2/SH,WDTP(0)/SHR)
24195           CALL PYWIDT(56,SH,WDTP,WDTE)
24196           SSMO=CMPLX(1D0-PMAS(56,1)**2/SH,WDTP(0)/SHR)
24197           DETD=(FAR*FZO-FAO*FZR)**2+SSMZ*SSMR*SSMO-SFZR*SSMO-
24198      $    SFZO*SSMR-SFAR*SSMO*SSMZ-SFAO*SSMR*SSMZ
24199           DARHO=(-FAR*SFZO+FAO*FZO*FZR+FAR*SSMO*SSMZ)/DETD/SH
24200           DZRHO=(-FZR*SFAO+FAO*FZO*FAR+FZR*SSMO)/DETD/SH
24201 
24202           DO 2040 I=MMINA,MMAXA
24203             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 2040
24204             IA=IABS(I)
24205             EI=KCHG(IABS(I),1)/3D0
24206             AI=SIGN(1D0,EI+0.1D0)
24207             VI=AI-4D0*EI*XWV
24208             VALI=0.25D0*(VI+AI)
24209             VARI=0.25D0*(VI-AI)
24210             F2L=EI*DARHO+VALI*DZRHO/SQRT(XW*XW1)
24211             F2R=EI*DARHO+VARI*DZRHO/SQRT(XW*XW1)
24212             HI=ABS(F2L)**2+ABS(F2R)**2
24213             IF(IA.LE.10) HI=HI/3D0
24214             NCHN=NCHN+1
24215             ISIG(NCHN,1)=I
24216             ISIG(NCHN,2)=-I
24217             ISIG(NCHN,3)=1
24218             IF(KFA.EQ.KFB) THEN
24219                SIGH(NCHN)=HI*HP*WIDS(KFA,1)
24220             ELSE
24221                SIGH(NCHN)=HI*HP*WIDS(KFA,2)*WIDS(KFB,3)
24222                NCHN=NCHN+1
24223                ISIG(NCHN,1)=I
24224                ISIG(NCHN,2)=-I
24225                ISIG(NCHN,3)=2
24226                SIGH(NCHN)=HI*HP*WIDS(KFA,3)*WIDS(KFB,2)
24227             ENDIF
24228  2040     CONTINUE
24229 
24230         ELSEIF(ISUB.EQ.364) THEN
24231 C...f + fbar -> gamma pi_tech, gamma pi_tech', Z pi_tech, Z pi_tech', 
24232 C...W pi_tech
24233           VFAC=(TH**2+UH**2-2D0*SQM3*SQM4)/SQTV*SH
24234           AFAC=(TH**2+UH**2-2D0*SQM3*SQM4+4D0*SH*SQM3)/SQTA*SH
24235 
24236           ALPRHT=2.91D0*(3D0/PARP(144))
24237           HP=(1D0/24D0)*AEM**2*COMFAC*3D0
24238           FAR=SQRT(AEM/ALPRHT)
24239           FAO=FAR*QUPD
24240           FZR=FAR*CT2W
24241           FZO=-FAO*TANW
24242           SFAR=FAR**2
24243           SFAO=FAO**2
24244           SFZR=FZR**2
24245           SFZO=FZO**2
24246           CALL PYWIDT(23,SH,WDTP,WDTE)
24247           SSMZ=CMPLX(1D0-PMAS(23,1)**2/SH,WDTP(0)/SHR)
24248           CALL PYWIDT(54,SH,WDTP,WDTE)
24249           SSMR=CMPLX(1D0-PMAS(54,1)**2/SH,WDTP(0)/SHR)
24250           CALL PYWIDT(56,SH,WDTP,WDTE)
24251           SSMO=CMPLX(1D0-PMAS(56,1)**2/SH,WDTP(0)/SHR)
24252           DETD=(FAR*FZO-FAO*FZR)**2+SSMZ*SSMR*SSMO-SFZR*SSMO-
24253      $    SFZO*SSMR-SFAR*SSMO*SSMZ-SFAO*SSMR*SSMZ
24254           DARHO=(-FAR*SFZO+FAO*FZO*FZR+FAR*SSMO*SSMZ)/DETD/SH
24255           DZRHO=(-FZR*SFAO+FAO*FZO*FAR+FZR*SSMO)/DETD/SH
24256           DAOME=(-FAO*SFZR+FAR*FZO*FZR+FAO*SSMR*SSMZ)/DETD/SH
24257           DZOME=(-FZO*SFAR+FAR*FAO*FZR+FZO*SSMR)/DETD/SH
24258 
24259           DO 2060 I=MMINA,MMAXA
24260             IF(I.EQ.0.OR.KFAC(1,I)*KFAC(2,-I).EQ.0) GOTO 2060
24261             IA=IABS(I)
24262             EI=KCHG(IABS(I),1)/3D0
24263             AI=SIGN(1D0,EI+0.1D0)
24264             VI=AI-4D0*EI*XWV
24265             VALI=0.25D0*(VI+AI)
24266             VARI=0.25D0*(VI-AI)
24267             F2L=(EI*DARHO+VALI*DZRHO/SQRT(XW*XW1))*VRGP
24268             F2L=F2L+(EI*DAOME+VALI*DZOME/SQRT(XW*XW1))*VOGP
24269             F2R=(EI*DARHO+VARI*DZRHO/SQRT(XW*XW1))*VRGP
24270             F2R=F2R+(EI*DAOME+VARI*DZOME/SQRT(XW*XW1))*VOGP
24271             HI=(ABS(F2L)**2+ABS(F2R)**2)*VFAC
24272             F2L=(EI*DARHO+VALI*DZRHO/SQRT(XW*XW1))*ARGP
24273             F2L=F2L+(EI*DAOME+VALI*DZOME/SQRT(XW*XW1))*AOGP
24274             F2R=(EI*DARHO+VARI*DZRHO/SQRT(XW*XW1))*ARGP
24275             F2R=F2R+(EI*DAOME+VARI*DZOME/SQRT(XW*XW1))*AOGP
24276             HJ=(ABS(F2L)**2+ABS(F2R)**2)*AFAC
24277             HI=HI+HJ
24278             IF(IA.LE.10) HI=HI/3D0
24279             NCHN=NCHN+1
24280             ISIG(NCHN,1)=I
24281             ISIG(NCHN,2)=-I
24282             ISIG(NCHN,3)=1
24283             IF(ISUBSV.NE.368) THEN
24284                SIGH(NCHN)=HI*HP*WIDS(KFA,2)*WIDS(KFB,2)
24285             ELSE
24286                SIGH(NCHN)=HI*HP*WIDS(KFA,2)*WIDS(KFB,3)
24287                NCHN=NCHN+1
24288                ISIG(NCHN,1)=I
24289                ISIG(NCHN,2)=-I
24290                ISIG(NCHN,3)=2
24291                SIGH(NCHN)=HI*HP*WIDS(KFA,3)*WIDS(KFB,2)
24292             ENDIF
24293  2060     CONTINUE
24294 
24295         ELSEIF(ISUB.EQ.370) THEN
24296 C...f + fbar' -> W_L Z_L, W_L pi_tech, Z_L pi_tech, pi_tech pi_tech
24297 
24298           FACA=(SH**2*BE34**2-(TH-UH)**2)
24299           ALPRHT=2.91D0*(3D0/PARP(144))
24300           HP=(1D0/24D0)*AEM*ALPRHT*CAB2*COMFAC*FACA*3D0/XW
24301 
24302           FWR=SQRT(AEM/ALPRHT)/(2D0*SQRT(XW))
24303           CALL PYWIDT(24,SH,WDTP,WDTE)
24304           SSMZ=CMPLX(1D0-PMAS(24,1)**2/SH,WDTP(0)/SHR)
24305           CALL PYWIDT(55,SH,WDTP,WDTE)
24306           SSMR=CMPLX(1D0-PMAS(55,1)**2/SH,WDTP(0)/SHR)
24307 
24308           DETD=SSMZ*SSMR-CMPLX(FWR**2,0D0)
24309           HP=HP*FWR**2/ABS(DETD)**2/SH**2
24310 
24311           DO 2080 I=MMIN1,MMAX1
24312             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 2080
24313             IA=IABS(I)
24314             DO 2070 J=MMIN2,MMAX2
24315               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 2070
24316               JA=IABS(J)
24317               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 2070
24318               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
24319      &        GOTO 2070
24320               KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
24321               HI=HP
24322               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)/3D0
24323               NCHN=NCHN+1
24324               ISIG(NCHN,1)=I
24325               ISIG(NCHN,2)=J
24326               ISIG(NCHN,3)=1
24327               SIGH(NCHN)=HI*WIDS(KFA,(5-KCHR)/2)*WIDS(KFB,2)
24328  2070       CONTINUE
24329  2080     CONTINUE
24330 
24331         ELSEIF(ISUB.EQ.374) THEN
24332 C...f + fbar' -> G pi_tech
24333           VFAC=(TH**2+UH**2-2D0*SQM3*SQM4)/SQTV*VRGP**2
24334           AFAC=(TH**2+UH**2-2D0*SQM3*SQM4+4D0*SH*SQM3)/SQTA*ARGP**2
24335 
24336           ALPRHT=2.91D0*(3D0/PARP(144))
24337           HP=(1D0/48D0)*AEM**2/XW*COMFAC*3D0*(VFAC+AFAC)*SH
24338 
24339           FWR=SQRT(AEM/ALPRHT)/(2D0*SQRT(XW))
24340           CALL PYWIDT(24,SH,WDTP,WDTE)
24341           SSMZ=CMPLX(1D0-PMAS(24,1)**2/SH,WDTP(0)/SHR)
24342           CALL PYWIDT(55,SH,WDTP,WDTE)
24343           SSMR=CMPLX(1D0-PMAS(55,1)**2/SH,WDTP(0)/SHR)
24344 
24345           DETD=SSMZ*SSMR-CMPLX(FWR**2,0D0)
24346           HP=HP*FWR**2/ABS(DETD)**2/SH**2
24347 
24348           DO 2100 I=MMIN1,MMAX1
24349             IF(I.EQ.0.OR.KFAC(1,I).EQ.0) GOTO 2100
24350             IA=IABS(I)
24351             DO 2090 J=MMIN2,MMAX2
24352               IF(J.EQ.0.OR.KFAC(2,J).EQ.0) GOTO 2090
24353               JA=IABS(J)
24354               IF(I*J.GT.0.OR.MOD(IA+JA,2).EQ.0) GOTO 2090
24355               IF((IA.LE.10.AND.JA.GT.10).OR.(IA.GT.10.AND.JA.LE.10))
24356      &        GOTO 2090
24357               KCHR=(KCHG(IA,1)*ISIGN(1,I)+KCHG(JA,1)*ISIGN(1,J))/3
24358               HI=HP
24359               IF(IA.LE.10) HI=HI*VCKM((IA+1)/2,(JA+1)/2)/3D0
24360               NCHN=NCHN+1
24361               ISIG(NCHN,1)=I
24362               ISIG(NCHN,2)=J
24363               ISIG(NCHN,3)=1
24364               SIGH(NCHN)=HI*WIDS(KFA,(5-KCHR)/2)*WIDS(KFB,2)
24365  2090       CONTINUE
24366  2100     CONTINUE
24367  
24368         ENDIF
24369       ENDIF
24370  
24371 C...Multiply with parton distributions
24372       IF(ISUB.LE.90.OR.ISUB.GE.96) THEN
24373         DO 2200 ICHN=1,NCHN
24374           IF(MINT(45).GE.2) THEN
24375             KFL1=ISIG(ICHN,1)
24376             SIGH(ICHN)=SIGH(ICHN)*XSFX(1,KFL1)
24377           ENDIF
24378           IF(MINT(46).GE.2) THEN
24379             KFL2=ISIG(ICHN,2)
24380             SIGH(ICHN)=SIGH(ICHN)*XSFX(2,KFL2)
24381           ENDIF
24382           SIGS=SIGS+SIGH(ICHN)
24383  2200   CONTINUE
24384       ENDIF
24385  
24386       RETURN
24387       END
24388  
24389 C*********************************************************************
24390  
24391 C...PYPDFU
24392 C...Gives electron, muon, tau, photon, pi+, neutron, proton and hyperon
24393 C...parton distributions according to a few different parametrizations.
24394 C...Note that what is coded is x times the probability distribution,
24395 C...i.e. xq(x,Q2) etc.
24396  
24397       SUBROUTINE PYPDFU(KF,X,Q2,XPQ)
24398  
24399 C...Double precision and integer declarations.
24400       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
24401       IMPLICIT INTEGER(I-N)
24402       INTEGER PYK,PYCHGE,PYCOMP
24403 C...Commonblocks.
24404       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
24405       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
24406       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
24407       COMMON/PYINT1/MINT(400),VINT(400)
24408       COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
24409      &XPDIR(-6:6)
24410       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT8/
24411 C...Local arrays.
24412       DIMENSION XPQ(-25:25),XPEL(-25:25),XPGA(-6:6),VXPGA(-6:6),
24413      &XPPI(-6:6),XPPR(-6:6)
24414  
24415 C...Interface to PDFLIB.
24416       COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
24417       SAVE /W50513/
24418       DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU,
24419      &VALUE(20),XMIN,XMAX,Q2MIN,Q2MAX
24420       CHARACTER*20 PARM(20)
24421       DATA VALUE/20*0D0/,PARM/20*' '/
24422  
24423 C...Data related to Schuler-Sjostrand photon distributions.
24424       DATA ALAMGA/0.2D0/, PMCGA/1.3D0/, PMBGA/4.6D0/
24425  
24426 C...Reset parton distributions.
24427       MINT(92)=0
24428       DO 100 KFL=-25,25
24429         XPQ(KFL)=0D0
24430   100 CONTINUE
24431  
24432 C...Check x and particle species.
24433       IF(X.LE.0D0.OR.X.GE.1D0) THEN
24434         WRITE(MSTU(11),5000) X
24435         RETURN
24436       ENDIF
24437       KFA=IABS(KF)
24438       IF(KFA.NE.11.AND.KFA.NE.13.AND.KFA.NE.15.AND.KFA.NE.22.AND.
24439      &KFA.NE.211.AND.KFA.NE.2112.AND.KFA.NE.2212.AND.KFA.NE.3122.AND.
24440      &KFA.NE.3112.AND.KFA.NE.3212.AND.KFA.NE.3222.AND.KFA.NE.3312.AND.
24441      &KFA.NE.3322.AND.KFA.NE.3334.AND.KFA.NE.111) THEN
24442         WRITE(MSTU(11),5100) KF
24443         RETURN
24444       ENDIF
24445  
24446 C...Electron (or muon or tau) parton distribution call.
24447       IF(KFA.EQ.11.OR.KFA.EQ.13.OR.KFA.EQ.15) THEN
24448         CALL PYPDEL(KFA,X,Q2,XPEL)
24449         DO 110 KFL=-25,25
24450           XPQ(KFL)=XPEL(KFL)
24451   110   CONTINUE
24452  
24453 C...Photon parton distribution call (VDM+anomalous).
24454       ELSEIF(KFA.EQ.22.AND.MINT(109).LE.1) THEN
24455         IF(MSTP(56).EQ.1.AND.MSTP(55).EQ.1) THEN
24456           CALL PYPDGA(X,Q2,XPGA)
24457           DO 120 KFL=-6,6
24458             XPQ(KFL)=XPGA(KFL)
24459   120     CONTINUE
24460         ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.MSTP(55).LE.8) THEN
24461           Q2MX=Q2
24462           P2MX=0.36D0
24463           IF(MSTP(55).GE.7) P2MX=4.0D0
24464           IF(MSTP(57).EQ.0) Q2MX=P2MX
24465           P2=0D0
24466           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24467           CALL PYGGAM(MSTP(55)-4,X,Q2MX,P2,MSTP(60),F2GAM,XPGA)
24468           DO 130 KFL=-6,6
24469             XPQ(KFL)=XPGA(KFL)
24470   130     CONTINUE
24471           VINT(231)=P2MX
24472         ELSEIF(MSTP(56).EQ.1.AND.MSTP(55).GE.9.AND.MSTP(55).LE.12) THEN
24473           Q2MX=Q2
24474           P2MX=0.36D0
24475           IF(MSTP(55).GE.11) P2MX=4.0D0
24476           IF(MSTP(57).EQ.0) Q2MX=P2MX
24477           P2=0D0
24478           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24479           CALL PYGGAM(MSTP(55)-8,X,Q2MX,P2,MSTP(60),F2GAM,XPGA)
24480           DO 140 KFL=-6,6
24481             XPQ(KFL)=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
24482   140     CONTINUE
24483           VINT(231)=P2MX
24484         ELSEIF(MSTP(56).EQ.2) THEN
24485 C...Call PDFLIB parton distributions.
24486           PARM(1)='NPTYPE'
24487           VALUE(1)=3
24488           PARM(2)='NGROUP'
24489           VALUE(2)=MSTP(55)/1000
24490           PARM(3)='NSET'
24491           VALUE(3)=MOD(MSTP(55),1000)
24492           IF(MINT(93).NE.3000000+MSTP(55)) THEN
24493             CALL PDFSET(PARM,VALUE)
24494             MINT(93)=3000000+MSTP(55)
24495           ENDIF
24496           XX=X
24497           QQ2=MAX(0D0,Q2MIN,Q2)
24498           IF(MSTP(57).EQ.0) QQ2=Q2MIN
24499           P2=0D0
24500           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24501           IP2=MSTP(60)
24502           IF(MSTP(55).EQ.5004) THEN
24503             IF(5D0*P2.LT.QQ2.AND.
24504      &      QQ2.GT.0.6D0.AND.QQ2.LT.5D4.AND.
24505      &      P2.GE.0D0.AND.P2.LT.10D0.AND.
24506      &      XX.GT.1D-4.AND.XX.LT.1D0) THEN
24507               CALL STRUCTP(XX,QQ2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,
24508      &        BOT,TOP,GLU)
24509             ELSE
24510               UPV=0D0
24511               DNV=0D0
24512               USEA=0D0
24513               DSEA=0D0
24514               STR=0D0
24515               CHM=0D0
24516               BOT=0D0
24517               TOP=0D0
24518               GLU=0D0
24519             ENDIF
24520           ELSE
24521             IF(P2.LT.QQ2) THEN
24522               CALL STRUCTP(XX,QQ2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,
24523      &        BOT,TOP,GLU)
24524             ELSE
24525               UPV=0D0
24526               DNV=0D0
24527               USEA=0D0
24528               DSEA=0D0
24529               STR=0D0
24530               CHM=0D0
24531               BOT=0D0
24532               TOP=0D0
24533               GLU=0D0
24534             ENDIF
24535           ENDIF
24536           VINT(231)=Q2MIN
24537           XPQ(0)=GLU
24538           XPQ(1)=DNV
24539           XPQ(-1)=DNV
24540           XPQ(2)=UPV
24541           XPQ(-2)=UPV
24542           XPQ(3)=STR
24543           XPQ(-3)=STR
24544           XPQ(4)=CHM
24545           XPQ(-4)=CHM
24546           XPQ(5)=BOT
24547           XPQ(-5)=BOT
24548           XPQ(6)=TOP
24549           XPQ(-6)=TOP
24550         ELSE
24551           WRITE(MSTU(11),5200) KF,MSTP(56),MSTP(55)
24552         ENDIF
24553  
24554 C...Pion/gammaVDM parton distribution call.
24555       ELSEIF(KFA.EQ.211.OR.KFA.EQ.111.OR.(KFA.EQ.22.AND.
24556      &  MINT(109).EQ.2)) THEN
24557         IF(KFA.EQ.22.AND.MSTP(56).EQ.1.AND.MSTP(55).GE.5.AND.
24558      &  MSTP(55).LE.12) THEN
24559           ISET=1+MOD(MSTP(55)-1,4)
24560           Q2MX=Q2
24561           P2MX=0.36D0
24562           IF(ISET.GE.3) P2MX=4.0D0
24563           IF(MSTP(57).EQ.0) Q2MX=P2MX
24564           P2=0D0
24565           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24566           CALL PYGGAM(ISET,X,Q2MX,P2,MSTP(60),F2GAM,XPGA)
24567           DO 150 KFL=-6,6
24568             XPQ(KFL)=XPVMD(KFL)
24569   150     CONTINUE
24570           VINT(231)=P2MX
24571         ELSEIF(MSTP(54).EQ.1.AND.MSTP(53).GE.1.AND.MSTP(53).LE.3) THEN
24572           CALL PYPDPI(X,Q2,XPPI)
24573           DO 160 KFL=-6,6
24574             XPQ(KFL)=XPPI(KFL)
24575   160     CONTINUE
24576         ELSEIF(MSTP(54).EQ.2) THEN
24577 C...Call PDFLIB parton distributions.
24578           PARM(1)='NPTYPE'
24579           VALUE(1)=2
24580           PARM(2)='NGROUP'
24581           VALUE(2)=MSTP(53)/1000
24582           PARM(3)='NSET'
24583           VALUE(3)=MOD(MSTP(53),1000)
24584           IF(MINT(93).NE.2000000+MSTP(53)) THEN
24585             CALL PDFSET(PARM,VALUE)
24586             MINT(93)=2000000+MSTP(53)
24587           ENDIF
24588           XX=X
24589           QQ=SQRT(MAX(0D0,Q2MIN,Q2))
24590           IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
24591           CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
24592           VINT(231)=Q2MIN
24593           XPQ(0)=GLU
24594           XPQ(1)=DSEA
24595           XPQ(-1)=UPV+DSEA
24596           XPQ(2)=UPV+USEA
24597           XPQ(-2)=USEA
24598           XPQ(3)=STR
24599           XPQ(-3)=STR
24600           XPQ(4)=CHM
24601           XPQ(-4)=CHM
24602           XPQ(5)=BOT
24603           XPQ(-5)=BOT
24604           XPQ(6)=TOP
24605           XPQ(-6)=TOP
24606         ELSE
24607           WRITE(MSTU(11),5200) KF,MSTP(54),MSTP(53)
24608         ENDIF
24609  
24610 C...Anomalous photon parton distribution call.
24611       ELSEIF(KFA.EQ.22.AND.MINT(109).EQ.3) THEN
24612         Q2MX=Q2
24613         P2MX=PARP(15)**2
24614         IF(MSTP(56).EQ.1.AND.MSTP(55).LE.8) THEN
24615           IF(MSTP(55).EQ.5.OR.MSTP(55).EQ.6) P2MX=0.36D0
24616           IF(MSTP(55).EQ.7.OR.MSTP(55).EQ.8) P2MX=4.0D0
24617           IF(MSTP(57).EQ.0) Q2MX=P2MX
24618           P2=0D0
24619           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24620           CALL PYGGAM(MSTP(55)-4,X,Q2MX,P2,MSTP(60),F2GM,XPGA)
24621           DO 170 KFL=-6,6
24622             XPQ(KFL)=XPANL(KFL)+XPANH(KFL)
24623   170     CONTINUE
24624           VINT(231)=P2MX
24625         ELSEIF(MSTP(56).EQ.1) THEN
24626           IF(MSTP(55).EQ.9.OR.MSTP(55).EQ.10) P2MX=0.36D0
24627           IF(MSTP(55).EQ.11.OR.MSTP(55).EQ.12) P2MX=4.0D0
24628           IF(MSTP(57).EQ.0) Q2MX=P2MX
24629           P2=0D0
24630           IF(VINT(120).LT.0D0) P2=VINT(120)**2
24631           CALL PYGGAM(MSTP(55)-8,X,Q2MX,P2,MSTP(60),F2GM,XPGA)
24632           DO 180 KFL=-6,6
24633             XPQ(KFL)=MAX(0D0,XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL))
24634   180     CONTINUE
24635           VINT(231)=P2MX
24636         ELSEIF(MSTP(56).EQ.2) THEN
24637           IF(MSTP(57).EQ.0) Q2MX=P2MX
24638           CALL PYGANO(0,X,Q2MX,P2MX,ALAMGA,XPGA,VXPGA)
24639           DO 190 KFL=-6,6
24640             XPQ(KFL)=XPGA(KFL)
24641   190     CONTINUE
24642           VINT(231)=P2MX
24643         ELSEIF(MSTP(55).GE.1.AND.MSTP(55).LE.5) THEN
24644           IF(MSTP(57).EQ.0) Q2MX=P2MX
24645           CALL PYGVMD(0,MSTP(55),X,Q2MX,P2MX,PARP(1),XPGA,VXPGA)
24646           DO 200 KFL=-6,6
24647             XPQ(KFL)=XPGA(KFL)
24648   200     CONTINUE
24649           VINT(231)=P2MX
24650         ELSE
24651   210     RKF=11D0*PYR(0)
24652           KFR=1
24653           IF(RKF.GT.1D0) KFR=2
24654           IF(RKF.GT.5D0) KFR=3
24655           IF(RKF.GT.6D0) KFR=4
24656           IF(RKF.GT.10D0) KFR=5
24657           IF(KFR.EQ.4.AND.Q2.LT.PMCGA**2) GOTO 210
24658           IF(KFR.EQ.5.AND.Q2.LT.PMBGA**2) GOTO 210
24659           IF(MSTP(57).EQ.0) Q2MX=P2MX
24660           CALL PYGVMD(0,KFR,X,Q2MX,P2MX,PARP(1),XPGA,VXPGA)
24661           DO 220 KFL=-6,6
24662             XPQ(KFL)=XPGA(KFL)
24663   220     CONTINUE
24664           VINT(231)=P2MX
24665         ENDIF
24666  
24667 C...Proton parton distribution call.
24668       ELSE
24669         IF(MSTP(52).EQ.1.AND.MSTP(51).GE.1.AND.MSTP(51).LE.20) THEN
24670           CALL PYPDPR(X,Q2,XPPR)
24671           DO 230 KFL=-6,6
24672             XPQ(KFL)=XPPR(KFL)
24673   230     CONTINUE
24674         ELSEIF(MSTP(52).EQ.2) THEN
24675 C...Call PDFLIB parton distributions.
24676           PARM(1)='NPTYPE'
24677           VALUE(1)=1
24678           PARM(2)='NGROUP'
24679           VALUE(2)=MSTP(51)/1000
24680           PARM(3)='NSET'
24681           VALUE(3)=MOD(MSTP(51),1000)
24682           IF(MINT(93).NE.1000000+MSTP(51)) THEN
24683             CALL PDFSET(PARM,VALUE)
24684             MINT(93)=1000000+MSTP(51)
24685           ENDIF
24686           XX=X
24687           QQ=SQRT(MAX(0D0,Q2MIN,Q2))
24688           IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
24689           CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
24690           VINT(231)=Q2MIN
24691           XPQ(0)=GLU
24692           XPQ(1)=DNV+DSEA
24693           XPQ(-1)=DSEA
24694           XPQ(2)=UPV+USEA
24695           XPQ(-2)=USEA
24696           XPQ(3)=STR
24697           XPQ(-3)=STR
24698           XPQ(4)=CHM
24699           XPQ(-4)=CHM
24700           XPQ(5)=BOT
24701           XPQ(-5)=BOT
24702           XPQ(6)=TOP
24703           XPQ(-6)=TOP
24704         ELSE
24705           WRITE(MSTU(11),5200) KF,MSTP(52),MSTP(51)
24706         ENDIF
24707       ENDIF
24708  
24709 C...Isospin average for pi0/gammaVDM.
24710       IF(KFA.EQ.111.OR.(KFA.EQ.22.AND.MINT(109).EQ.2)) THEN
24711         IF(KFA.EQ.22.AND.MSTP(55).GE.5.AND.MSTP(55).LE.12) THEN
24712           XPV=XPQ(2)-XPQ(1)
24713           XPQ(2)=XPQ(1)
24714           XPQ(-2)=XPQ(-1)
24715         ELSE
24716           XPS=0.5D0*(XPQ(1)+XPQ(-2))
24717           XPV=0.5D0*(XPQ(2)+XPQ(-1))-XPS
24718           XPQ(2)=XPS
24719           XPQ(-1)=XPS
24720         ENDIF
24721         IF(KFA.EQ.22.AND.MINT(105).LE.223) THEN
24722           XPQ(1)=XPQ(1)+0.2D0*XPV
24723           XPQ(-1)=XPQ(-1)+0.2D0*XPV
24724           XPQ(2)=XPQ(2)+0.8D0*XPV
24725           XPQ(-2)=XPQ(-2)+0.8D0*XPV
24726         ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.333) THEN
24727           XPQ(3)=XPQ(3)+XPV
24728           XPQ(-3)=XPQ(-3)+XPV
24729         ELSEIF(KFA.EQ.22.AND.MINT(105).EQ.443) THEN
24730           XPQ(4)=XPQ(4)+XPV
24731           XPQ(-4)=XPQ(-4)+XPV
24732           IF(MSTP(55).GE.9) THEN
24733             DO 240 KFL=-6,6
24734               XPQ(KFL)=0D0
24735   240       CONTINUE
24736           ENDIF
24737         ELSE
24738           XPQ(1)=XPQ(1)+0.5D0*XPV
24739           XPQ(-1)=XPQ(-1)+0.5D0*XPV
24740           XPQ(2)=XPQ(2)+0.5D0*XPV
24741           XPQ(-2)=XPQ(-2)+0.5D0*XPV
24742         ENDIF
24743  
24744 C...Rescale for gammaVDM by effective gamma -> rho coupling.
24745 C+++Do not rescale?
24746         IF(KFA.EQ.22.AND.MINT(109).EQ.2.AND..NOT.(MSTP(56).EQ.1
24747      &  .AND.MSTP(55).GE.5.AND.MSTP(55).LE.12)) THEN
24748           DO 250 KFL=-6,6
24749             XPQ(KFL)=VINT(281)*XPQ(KFL)
24750   250     CONTINUE
24751           VINT(232)=VINT(281)*XPV
24752         ENDIF
24753  
24754 C...Isospin conjugation for neutron.
24755       ELSEIF(KFA.EQ.2112) THEN
24756         XPS=XPQ(1)
24757         XPQ(1)=XPQ(2)
24758         XPQ(2)=XPS
24759         XPS=XPQ(-1)
24760         XPQ(-1)=XPQ(-2)
24761         XPQ(-2)=XPS
24762  
24763 C...Simple recipes for hyperon (average valence parton distribution).
24764       ELSEIF(KFA.EQ.3122.OR.KFA.EQ.3112.OR.KFA.EQ.3212.OR.KFA.EQ.3222
24765      &  .OR.KFA.EQ.3312.OR.KFA.EQ.3322.OR.KFA.EQ.3334) THEN
24766         XPVAL=(XPQ(1)+XPQ(2)-XPQ(-1)-XPQ(-2))/3D0
24767         XPSEA=0.5D0*(XPQ(-1)+XPQ(-2))
24768         XPQ(1)=XPSEA
24769         XPQ(2)=XPSEA
24770         XPQ(-1)=XPSEA
24771         XPQ(-2)=XPSEA
24772         XPQ(KFA/1000)=XPQ(KFA/1000)+XPVAL
24773         XPQ(MOD(KFA/100,10))=XPQ(MOD(KFA/100,10))+XPVAL
24774         XPQ(MOD(KFA/10,10))=XPQ(MOD(KFA/10,10))+XPVAL
24775       ENDIF
24776  
24777 C...Charge conjugation for antiparticle.
24778       IF(KF.LT.0) THEN
24779         DO 260 KFL=1,25
24780           IF(KFL.EQ.21.OR.KFL.EQ.22.OR.KFL.EQ.23.OR.KFL.EQ.25) GOTO 260
24781           XPS=XPQ(KFL)
24782           XPQ(KFL)=XPQ(-KFL)
24783           XPQ(-KFL)=XPS
24784   260   CONTINUE
24785       ENDIF
24786  
24787 C...Allow gluon also in position 21.
24788       XPQ(21)=XPQ(0)
24789  
24790 C...Check positivity and reset above maximum allowed flavour.
24791       DO 270 KFL=-25,25
24792         XPQ(KFL)=MAX(0D0,XPQ(KFL))
24793         IF(IABS(KFL).GT.MSTP(58).AND.IABS(KFL).LE.8) XPQ(KFL)=0D0
24794   270 CONTINUE
24795  
24796 C...Formats for error printouts.
24797  5000 FORMAT(' Error: x value outside physical range; x =',1P,D12.3)
24798  5100 FORMAT(' Error: illegal particle code for parton distribution;',
24799      &' KF =',I5)
24800  5200 FORMAT(' Error: unknown parton distribution; KF, library, set =',
24801      &3I5)
24802  
24803       RETURN
24804       END
24805  
24806 C*********************************************************************
24807  
24808 C...PYPDFL
24809 C...Gives proton parton distribution at small x and/or Q^2 according to
24810 C...correct limiting behaviour.
24811  
24812       SUBROUTINE PYPDFL(KF,X,Q2,XPQ)
24813  
24814 C...Double precision and integer declarations.
24815       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
24816       IMPLICIT INTEGER(I-N)
24817       INTEGER PYK,PYCHGE,PYCOMP
24818 C...Commonblocks.
24819       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
24820       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
24821       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
24822       COMMON/PYINT1/MINT(400),VINT(400)
24823       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
24824 C...Local arrays.
24825       DIMENSION XPQ(-25:25),XPA(-25:25),XPB(-25:25),WTSB(-3:3)
24826       DATA RMR/0.92D0/,RMP/0.38D0/,WTSB/0.5D0,1D0,1D0,5D0,1D0,1D0,0.5D0/
24827  
24828 C...Send everything but protons/neutrons/VMD pions directly to PYPDFU.
24829       MINT(92)=0
24830       KFA=IABS(KF)
24831       IACC=0
24832       IF((KFA.EQ.2212.OR.KFA.EQ.2112).AND.MSTP(57).GE.2) IACC=1
24833       IF(KFA.EQ.211.AND.MSTP(57).GE.3) IACC=1
24834       IF(KFA.EQ.22.AND.MINT(109).EQ.2.AND.MSTP(57).GE.3) IACC=1
24835       IF(IACC.EQ.0) THEN
24836         CALL PYPDFU(KF,X,Q2,XPQ)
24837         RETURN
24838       ENDIF
24839  
24840 C...Reset. Check x.
24841       DO 100 KFL=-25,25
24842         XPQ(KFL)=0D0
24843   100 CONTINUE
24844       IF(X.LE.0D0.OR.X.GE.1D0) THEN
24845         WRITE(MSTU(11),5000) X
24846         RETURN
24847       ENDIF
24848  
24849 C...Define valence content.
24850       KFC=KF
24851       NV1=2
24852       NV2=1
24853       IF(KF.EQ.2212) THEN
24854         KFV1=2
24855         KFV2=1
24856       ELSEIF(KF.EQ.-2212) THEN
24857         KFV1=-2
24858         KFV2=-1
24859       ELSEIF(KF.EQ.2112) THEN
24860         KFV1=1
24861         KFV2=2
24862       ELSEIF(KF.EQ.-2112) THEN
24863         KFV1=-1
24864         KFV2=-2
24865       ELSEIF(KF.EQ.211) THEN
24866         NV1=1
24867         KFV1=2
24868         KFV2=-1
24869       ELSEIF(KF.EQ.-211) THEN
24870         NV1=1
24871         KFV1=-2
24872         KFV2=1
24873       ELSEIF(MINT(105).LE.223) THEN
24874         KFV1=1
24875         WTV1=0.2D0
24876         KFV2=2
24877         WTV2=0.8D0
24878       ELSEIF(MINT(105).EQ.333) THEN
24879         KFV1=3
24880         WTV1=1.0D0
24881         KFV2=1
24882         WTV2=0.0D0
24883       ELSEIF(MINT(105).EQ.443) THEN
24884         KFV1=4
24885         WTV1=1.0D0
24886         KFV2=1
24887         WTV2=0.0D0
24888       ENDIF
24889  
24890 C...Do naive evaluation and find min Q^2, boundary Q^2 and x_0.
24891       CALL PYPDFU(KFC,X,Q2,XPA)
24892       Q2MN=MAX(3D0,VINT(231))
24893       Q2B=2D0+0.052D0**2*EXP(3.56D0*SQRT(MAX(0D0,-LOG(3D0*X))))
24894       XMN=EXP(-(LOG((Q2MN-2D0)/0.052D0**2)/3.56D0)**2)/3D0
24895  
24896 C...Large Q2 and large x: naive call is enough.
24897       IF(Q2.GT.Q2MN.AND.Q2.GT.Q2B) THEN
24898         DO 110 KFL=-25,25
24899           XPQ(KFL)=XPA(KFL)
24900   110   CONTINUE
24901         MINT(92)=1
24902  
24903 C...Small Q2 and large x: dampen boundary value.
24904       ELSEIF(X.GT.XMN) THEN
24905  
24906 C...Evaluate at boundary and define dampening factors.
24907         CALL PYPDFU(KFC,X,Q2MN,XPA)
24908         FV=(Q2*(Q2MN+RMR)/(Q2MN*(Q2+RMR)))**(0.55D0*(1D0-X)/(1D0-XMN))
24909         FS=(Q2*(Q2MN+RMP)/(Q2MN*(Q2+RMP)))**1.08D0
24910  
24911 C...Separate valence and sea parts of parton distribution.
24912         IF(KFA.NE.22) THEN
24913           XFV1=XPA(KFV1)-XPA(-KFV1)
24914           XPA(KFV1)=XPA(-KFV1)
24915           XFV2=XPA(KFV2)-XPA(-KFV2)
24916           XPA(KFV2)=XPA(-KFV2)
24917         ELSE
24918           XPA(KFV1)=XPA(KFV1)-WTV1*VINT(232)
24919           XPA(-KFV1)=XPA(-KFV1)-WTV1*VINT(232)
24920           XPA(KFV2)=XPA(KFV2)-WTV2*VINT(232)
24921           XPA(-KFV2)=XPA(-KFV2)-WTV2*VINT(232)
24922         ENDIF
24923  
24924 C...Dampen valence and sea separately. Put back together.
24925         DO 120 KFL=-25,25
24926           XPQ(KFL)=FS*XPA(KFL)
24927   120   CONTINUE
24928         IF(KFA.NE.22) THEN
24929           XPQ(KFV1)=XPQ(KFV1)+FV*XFV1
24930           XPQ(KFV2)=XPQ(KFV2)+FV*XFV2
24931         ELSE
24932           XPQ(KFV1)=XPQ(KFV1)+FV*WTV1*VINT(232)
24933           XPQ(-KFV1)=XPQ(-KFV1)+FV*WTV1*VINT(232)
24934           XPQ(KFV2)=XPQ(KFV2)+FV*WTV2*VINT(232)
24935           XPQ(-KFV2)=XPQ(-KFV2)+FV*WTV2*VINT(232)
24936         ENDIF
24937         MINT(92)=2
24938  
24939 C...Large Q2 and small x: interpolate behaviour.
24940       ELSEIF(Q2.GT.Q2MN) THEN
24941  
24942 C...Evaluate at extremes and define coefficients for interpolation.
24943         CALL PYPDFU(KFC,XMN,Q2MN,XPA)
24944         VI232A=VINT(232)
24945         CALL PYPDFU(KFC,X,Q2B,XPB)
24946         VI232B=VINT(232)
24947         FLA=LOG(Q2B/Q2)/LOG(Q2B/Q2MN)
24948         FVA=(X/XMN)**0.45D0*FLA
24949         FSA=(X/XMN)**(-0.08D0)*FLA
24950         FB=1D0-FLA
24951  
24952 C...Separate valence and sea parts of parton distribution.
24953         IF(KFA.NE.22) THEN
24954           XFVA1=XPA(KFV1)-XPA(-KFV1)
24955           XPA(KFV1)=XPA(-KFV1)
24956           XFVA2=XPA(KFV2)-XPA(-KFV2)
24957           XPA(KFV2)=XPA(-KFV2)
24958           XFVB1=XPB(KFV1)-XPB(-KFV1)
24959           XPB(KFV1)=XPB(-KFV1)
24960           XFVB2=XPB(KFV2)-XPB(-KFV2)
24961           XPB(KFV2)=XPB(-KFV2)
24962         ELSE
24963           XPA(KFV1)=XPA(KFV1)-WTV1*VI232A
24964           XPA(-KFV1)=XPA(-KFV1)-WTV1*VI232A
24965           XPA(KFV2)=XPA(KFV2)-WTV2*VI232A
24966           XPA(-KFV2)=XPA(-KFV2)-WTV2*VI232A
24967           XPB(KFV1)=XPB(KFV1)-WTV1*VI232B
24968           XPB(-KFV1)=XPB(-KFV1)-WTV1*VI232B
24969           XPB(KFV2)=XPB(KFV2)-WTV2*VI232B
24970           XPB(-KFV2)=XPB(-KFV2)-WTV2*VI232B
24971         ENDIF
24972  
24973 C...Interpolate for valence and sea. Put back together.
24974         DO 130 KFL=-25,25
24975           XPQ(KFL)=FSA*XPA(KFL)+FB*XPB(KFL)
24976   130   CONTINUE
24977         IF(KFA.NE.22) THEN
24978           XPQ(KFV1)=XPQ(KFV1)+(FVA*XFVA1+FB*XFVB1)
24979           XPQ(KFV2)=XPQ(KFV2)+(FVA*XFVA2+FB*XFVB2)
24980         ELSE
24981           XPQ(KFV1)=XPQ(KFV1)+WTV1*(FVA*VI232A+FB*VI232B)
24982           XPQ(-KFV1)=XPQ(-KFV1)+WTV1*(FVA*VI232A+FB*VI232B)
24983           XPQ(KFV2)=XPQ(KFV2)+WTV2*(FVA*VI232A+FB*VI232B)
24984           XPQ(-KFV2)=XPQ(-KFV2)+WTV2*(FVA*VI232A+FB*VI232B)
24985         ENDIF
24986         MINT(92)=3
24987  
24988 C...Small Q2 and small x: dampen boundary value and add term.
24989       ELSE
24990  
24991 C...Evaluate at boundary and define dampening factors.
24992         CALL PYPDFU(KFC,XMN,Q2MN,XPA)
24993         FB=(XMN-X)*(Q2MN-Q2)/(XMN*Q2MN)
24994         FA=1D0-FB
24995         FVC=(X/XMN)**0.45D0*(Q2/(Q2+RMR))**0.55D0
24996         FVA=FVC*FA*((Q2MN+RMR)/Q2MN)**0.55D0
24997         FVB=FVC*FB*1.10D0*XMN**0.45D0*0.11D0
24998         FSC=(X/XMN)**(-0.08D0)*(Q2/(Q2+RMP))**1.08D0
24999         FSA=FSC*FA*((Q2MN+RMP)/Q2MN)**1.08D0
25000         FSB=FSC*FB*0.21D0*XMN**(-0.08D0)*0.21D0
25001  
25002 C...Separate valence and sea parts of parton distribution.
25003         IF(KFA.NE.22) THEN
25004           XFV1=XPA(KFV1)-XPA(-KFV1)
25005           XPA(KFV1)=XPA(-KFV1)
25006           XFV2=XPA(KFV2)-XPA(-KFV2)
25007           XPA(KFV2)=XPA(-KFV2)
25008         ELSE
25009           XPA(KFV1)=XPA(KFV1)-WTV1*VINT(232)
25010           XPA(-KFV1)=XPA(-KFV1)-WTV1*VINT(232)
25011           XPA(KFV2)=XPA(KFV2)-WTV2*VINT(232)
25012           XPA(-KFV2)=XPA(-KFV2)-WTV2*VINT(232)
25013         ENDIF
25014  
25015 C...Dampen valence and sea separately. Add constant terms.
25016 C...Put back together.
25017         DO 140 KFL=-25,25
25018           XPQ(KFL)=FSA*XPA(KFL)
25019   140   CONTINUE
25020         IF(KFA.NE.22) THEN
25021           DO 150 KFL=-3,3
25022             XPQ(KFL)=XPQ(KFL)+FSB*WTSB(KFL)
25023   150     CONTINUE
25024           XPQ(KFV1)=XPQ(KFV1)+(FVA*XFV1+FVB*NV1)
25025           XPQ(KFV2)=XPQ(KFV2)+(FVA*XFV2+FVB*NV2)
25026         ELSE
25027           DO 160 KFL=-3,3
25028             XPQ(KFL)=XPQ(KFL)+VINT(281)*FSB*WTSB(KFL)
25029   160     CONTINUE
25030           XPQ(KFV1)=XPQ(KFV1)+WTV1*(FVA*VINT(232)+FVB*VINT(281))
25031           XPQ(-KFV1)=XPQ(-KFV1)+WTV1*(FVA*VINT(232)+FVB*VINT(281))
25032           XPQ(KFV2)=XPQ(KFV2)+WTV2*(FVA*VINT(232)+FVB*VINT(281))
25033           XPQ(-KFV2)=XPQ(-KFV2)+WTV2*(FVA*VINT(232)+FVB*VINT(281))
25034         ENDIF
25035         XPQ(21)=XPQ(0)
25036         MINT(92)=4
25037       ENDIF
25038  
25039 C...Format for error printout.
25040  5000 FORMAT(' Error: x value outside physical range; x =',1P,D12.3)
25041  
25042       RETURN
25043       END
25044  
25045 C*********************************************************************
25046  
25047 C...PYPDEL
25048 C...Gives electron (or muon, or tau) parton distribution.
25049  
25050       SUBROUTINE PYPDEL(KFA,X,Q2,XPEL)
25051  
25052 C...Double precision and integer declarations.
25053       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25054       IMPLICIT INTEGER(I-N)
25055       INTEGER PYK,PYCHGE,PYCOMP
25056 C...Commonblocks.
25057       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
25058       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
25059       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
25060       COMMON/PYINT1/MINT(400),VINT(400)
25061       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
25062 C...Local arrays.
25063       DIMENSION XPEL(-25:25),XPGA(-6:6),SXP(0:6)
25064  
25065 C...Interface to PDFLIB.
25066       COMMON/W50513/XMIN,XMAX,Q2MIN,Q2MAX
25067       SAVE /W50513/
25068       DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU,
25069      &VALUE(20),XMIN,XMAX,Q2MIN,Q2MAX
25070       CHARACTER*20 PARM(20)
25071       DATA VALUE/20*0D0/,PARM/20*' '/
25072  
25073 C...Some common constants.
25074       DO 100 KFL=-25,25
25075         XPEL(KFL)=0D0
25076   100 CONTINUE
25077       AEM=PARU(101)
25078       PME=PMAS(11,1)
25079       IF(KFA.EQ.13) PME=PMAS(13,1)
25080       IF(KFA.EQ.15) PME=PMAS(15,1)
25081       XL=LOG(MAX(1D-10,X))
25082       X1L=LOG(MAX(1D-10,1D0-X))
25083       HLE=LOG(MAX(3D0,Q2/PME**2))
25084       HBE2=(AEM/PARU(1))*(HLE-1D0)
25085  
25086 C...Electron inside electron, see R. Kleiss et al., in Z physics at
25087 C...LEP 1, CERN 89-08, p. 34
25088       IF(MSTP(59).LE.1) THEN
25089         HDE=1D0+(AEM/PARU(1))*(1.5D0*HLE+1.289868D0)+(AEM/PARU(1))**2*
25090      &  (-2.164868D0*HLE**2+9.840808D0*HLE-10.130464D0)
25091         HEE=HBE2*(1D0-X)**(HBE2-1D0)*SQRT(MAX(0D0,HDE))-
25092      &  0.5D0*HBE2*(1D0+X)+HBE2**2/8D0*((1D0+X)*(-4D0*X1L+3D0*XL)-
25093      &  4D0*XL/(1D0-X)-5D0-X)
25094       ELSE
25095         HEE=HBE2*(1D0-X)**(HBE2-1D0)*EXP(0.172784D0*HBE2)/
25096      &  PYGAMM(1D0+HBE2)-0.5D0*HBE2*(1D0+X)+HBE2**2/8D0*((1D0+X)*
25097      &  (-4D0*X1L+3D0*XL)-4D0*XL/(1D0-X)-5D0-X)
25098       ENDIF
25099 C...Zero distribution for very large x and rescale it for intermediate.
25100       IF(X.GT.1D0-1D-10) THEN
25101         HEE=0D0
25102       ELSEIF(X.GT.1D0-1D-7) THEN
25103         HEE=HEE*1000D0**HBE2/(1000D0**HBE2-1D0)
25104       ENDIF
25105       XPEL(KFA)=X*HEE
25106  
25107 C...Photon and (transverse) W- inside electron.
25108       AEMP=PYALEM(PME*SQRT(MAX(0D0,Q2)))/PARU(2)
25109       IF(MSTP(13).LE.1) THEN
25110         HLG=HLE
25111       ELSE
25112         HLG=LOG(MAX(1D0,(PARP(13)/PME**2)*(1D0-X)/X**2))
25113       ENDIF
25114       XPEL(22)=AEMP*HLG*(1D0+(1D0-X)**2)
25115       HLW=LOG(1D0+Q2/PMAS(24,1)**2)/(4D0*PARU(102))
25116       XPEL(-24)=AEMP*HLW*(1D0+(1D0-X)**2)
25117  
25118 C...Electron or positron inside photon inside electron.
25119       IF(KFA.EQ.11.AND.MSTP(12).EQ.1) THEN
25120         XFSEA=0.5D0*(AEMP*(HLE-1D0))**2*(4D0/3D0+X-X**2-4D0*X**3/3D0+
25121      &  2D0*X*(1D0+X)*XL)
25122         XPEL(11)=XPEL(11)+XFSEA
25123         XPEL(-11)=XFSEA
25124  
25125 C...Initialize PDFLIB photon parton distributions.
25126         IF(MSTP(56).EQ.2) THEN
25127           PARM(1)='NPTYPE'
25128           VALUE(1)=3
25129           PARM(2)='NGROUP'
25130           VALUE(2)=MSTP(55)/1000
25131           PARM(3)='NSET'
25132           VALUE(3)=MOD(MSTP(55),1000)
25133           IF(MINT(93).NE.3000000+MSTP(55)) THEN
25134             CALL PDFSET(PARM,VALUE)
25135             MINT(93)=3000000+MSTP(55)
25136           ENDIF
25137         ENDIF
25138  
25139 C...Quarks and gluons inside photon inside electron:
25140 C...numerical convolution required.
25141         DO 110 KFL=0,6
25142           SXP(KFL)=0D0
25143   110   CONTINUE
25144         SUMXPP=0D0
25145         ITER=-1
25146   120   ITER=ITER+1
25147         SUMXP=SUMXPP
25148         NSTP=2**(ITER-1)
25149         IF(ITER.EQ.0) NSTP=2
25150         DO 130 KFL=0,6
25151           SXP(KFL)=0.5D0*SXP(KFL)
25152   130   CONTINUE
25153         WTSTP=0.5D0/NSTP
25154         IF(ITER.EQ.0) WTSTP=0.5D0
25155 C...Pick grid of x_{gamma} values logarithmically even.
25156         DO 150 ISTP=1,NSTP
25157           IF(ITER.EQ.0) THEN
25158             XLE=XL*(ISTP-1)
25159           ELSE
25160             XLE=XL*(ISTP-0.5D0)/NSTP
25161           ENDIF
25162           XE=MIN(1D0-1D-10,EXP(XLE))
25163           XG=MIN(1D0-1D-10,X/XE)
25164 C...Evaluate photon inside electron parton distribution for convolution.
25165           XPGP=1D0+(1D0-XE)**2
25166           IF(MSTP(13).LE.1) THEN
25167             XPGP=XPGP*HLE
25168           ELSE
25169             XPGP=XPGP*LOG(MAX(1D0,(PARP(13)/PME**2)*(1D0-XE)/XE**2))
25170           ENDIF
25171 C...Evaluate photon parton distributions for convolution.
25172           IF(MSTP(56).EQ.1) THEN
25173             CALL PYPDGA(XG,Q2,XPGA)
25174             DO 140 KFL=0,5
25175               SXP(KFL)=SXP(KFL)+WTSTP*XPGP*XPGA(KFL)
25176   140       CONTINUE
25177           ELSEIF(MSTP(56).EQ.2) THEN
25178 C...Call PDFLIB parton distributions.
25179             XX=XG
25180             QQ=SQRT(MAX(0D0,Q2MIN,Q2))
25181             IF(MSTP(57).EQ.0) QQ=SQRT(Q2MIN)
25182             CALL STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
25183             SXP(0)=SXP(0)+WTSTP*XPGP*GLU
25184             SXP(1)=SXP(1)+WTSTP*XPGP*DNV
25185             SXP(2)=SXP(2)+WTSTP*XPGP*UPV
25186             SXP(3)=SXP(3)+WTSTP*XPGP*STR
25187             SXP(4)=SXP(4)+WTSTP*XPGP*CHM
25188             SXP(5)=SXP(5)+WTSTP*XPGP*BOT
25189             SXP(6)=SXP(6)+WTSTP*XPGP*TOP
25190           ENDIF
25191   150   CONTINUE
25192         SUMXPP=SXP(0)+2D0*SXP(1)+2D0*SXP(2)
25193         IF(ITER.LE.2.OR.(ITER.LE.7.AND.ABS(SUMXPP-SUMXP).GT.
25194      &  PARP(14)*(SUMXPP+SUMXP))) GOTO 120
25195  
25196 C...Put convolution into output arrays.
25197         FCONV=AEMP*(-XL)
25198         XPEL(0)=FCONV*SXP(0)
25199         DO 160 KFL=1,6
25200           XPEL(KFL)=FCONV*SXP(KFL)
25201           XPEL(-KFL)=XPEL(KFL)
25202   160   CONTINUE
25203       ENDIF
25204  
25205       RETURN
25206       END
25207  
25208 C*********************************************************************
25209  
25210 C...PYPDGA
25211 C...Gives photon parton distribution.
25212  
25213       SUBROUTINE PYPDGA(X,Q2,XPGA)
25214  
25215 C...Double precision and integer declarations.
25216       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25217       IMPLICIT INTEGER(I-N)
25218       INTEGER PYK,PYCHGE,PYCOMP
25219 C...Commonblocks.
25220       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
25221       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
25222       COMMON/PYINT1/MINT(400),VINT(400)
25223       SAVE /PYDAT1/,/PYPARS/,/PYINT1/
25224 C...Local arrays.
25225       DIMENSION XPGA(-6:6),DGAG(4,3),DGBG(4,3),DGCG(4,3),DGAN(4,3),
25226      &DGBN(4,3),DGCN(4,3),DGDN(4,3),DGEN(4,3),DGAS(4,3),DGBS(4,3),
25227      &DGCS(4,3),DGDS(4,3),DGES(4,3)
25228  
25229 C...The following data lines are coefficients needed in the
25230 C...Drees and Grassie photon parton distribution parametrization.
25231       DATA DGAG/-.207D0,.6158D0,1.074D0,0.D0,.8926D-2,.6594D0,
25232      &.4766D0,.1975D-1,.03197D0,1.018D0,.2461D0,.2707D-1/
25233       DATA DGBG/-.1987D0,.6257D0,8.352D0,5.024D0,.5085D-1,.2774D0,
25234      &-.3906D0,-.3212D0,-.618D-2,.9476D0,-.6094D0,-.1067D-1/
25235       DATA DGCG/5.119D0,-.2752D0,-6.993D0,2.298D0,-.2313D0,.1382D0,
25236      &6.542D0,.5162D0,-.1216D0,.9047D0,2.653D0,.2003D-2/
25237       DATA DGAN/2.285D0,-.1526D-1,1330.D0,4.219D0,-.3711D0,1.061D0,
25238      &4.758D0,-.1503D-1,15.8D0,-.9464D0,-.5D0,-.2118D0/
25239       DATA DGBN/6.073D0,-.8132D0,-41.31D0,3.165D0,-.1717D0,.7815D0,
25240      &1.535D0,.7067D-2,2.742D0,-.7332D0,.7148D0,3.287D0/
25241       DATA DGCN/-.4202D0,.1778D-1,.9216D0,.18D0,.8766D-1,.2197D-1,
25242      &.1096D0,.204D0,.2917D-1,.4657D-1,.1785D0,.4811D-1/
25243       DATA DGDN/-.8083D-1,.6346D0,1.208D0,.203D0,-.8915D0,.2857D0,
25244      &2.973D0,.1185D0,-.342D-1,.7196D0,.7338D0,.8139D-1/
25245       DATA DGEN/.5526D-1,1.136D0,.9512D0,.1163D-1,-.1816D0,.5866D0,
25246      &2.421D0,.4059D0,-.2302D-1,.9229D0,.5873D0,-.79D-4/
25247       DATA DGAS/16.69D0,-.7916D0,1099.D0,4.428D0,-.1207D0,1.071D0,
25248      &1.977D0,-.8625D-2,6.734D0,-1.008D0,-.8594D-1,.7625D-1/
25249       DATA DGBS/.176D0,.4794D-1,1.047D0,.25D-1,25.D0,-1.648D0,
25250      &-.1563D-1,6.438D0,59.88D0,-2.983D0,4.48D0,.9686D0/
25251       DATA DGCS/-.208D-1,.3386D-2,4.853D0,.8404D0,-.123D-1,1.162D0,
25252      &.4824D0,-.11D-1,-.3226D-2,.8432D0,.3616D0,.1383D-2/
25253       DATA DGDS/-.1685D-1,1.353D0,1.426D0,1.239D0,-.9194D-1,.7912D0,
25254      &.6397D0,2.327D0,-.3321D-1,.9475D0,-.3198D0,.2132D-1/
25255       DATA DGES/-.1986D0,1.1D0,1.136D0,-.2779D0,.2015D-1,.9869D0,
25256      &-.7036D-1,.1694D-1,.1059D0,.6954D0,-.6663D0,.3683D0/
25257  
25258 C...Photon parton distribution from Drees and Grassie.
25259 C...Allowed variable range: 1 GeV^2 < Q^2 < 10000 GeV^2.
25260       DO 100 KFL=-6,6
25261         XPGA(KFL)=0D0
25262   100 CONTINUE
25263       VINT(231)=1D0
25264       IF(MSTP(57).LE.0) THEN
25265         T=LOG(1D0/0.16D0)
25266       ELSE
25267         T=LOG(MIN(1D4,MAX(1D0,Q2))/0.16D0)
25268       ENDIF
25269       X1=1D0-X
25270       NF=3
25271       IF(Q2.GT.25D0) NF=4
25272       IF(Q2.GT.300D0) NF=5
25273       NFE=NF-2
25274       AEM=PARU(101)
25275  
25276 C...Evaluate gluon content.
25277       DGA=DGAG(1,NFE)*T**DGAG(2,NFE)+DGAG(3,NFE)*T**(-DGAG(4,NFE))
25278       DGB=DGBG(1,NFE)*T**DGBG(2,NFE)+DGBG(3,NFE)*T**(-DGBG(4,NFE))
25279       DGC=DGCG(1,NFE)*T**DGCG(2,NFE)+DGCG(3,NFE)*T**(-DGCG(4,NFE))
25280       XPGL=DGA*X**DGB*X1**DGC
25281  
25282 C...Evaluate up- and down-type quark content.
25283       DGA=DGAN(1,NFE)*T**DGAN(2,NFE)+DGAN(3,NFE)*T**(-DGAN(4,NFE))
25284       DGB=DGBN(1,NFE)*T**DGBN(2,NFE)+DGBN(3,NFE)*T**(-DGBN(4,NFE))
25285       DGC=DGCN(1,NFE)*T**DGCN(2,NFE)+DGCN(3,NFE)*T**(-DGCN(4,NFE))
25286       DGD=DGDN(1,NFE)*T**DGDN(2,NFE)+DGDN(3,NFE)*T**(-DGDN(4,NFE))
25287       DGE=DGEN(1,NFE)*T**DGEN(2,NFE)+DGEN(3,NFE)*T**(-DGEN(4,NFE))
25288       XPQN=X*(X**2+X1**2)/(DGA-DGB*LOG(X1))+DGC*X**DGD*X1**DGE
25289       DGA=DGAS(1,NFE)*T**DGAS(2,NFE)+DGAS(3,NFE)*T**(-DGAS(4,NFE))
25290       DGB=DGBS(1,NFE)*T**DGBS(2,NFE)+DGBS(3,NFE)*T**(-DGBS(4,NFE))
25291       DGC=DGCS(1,NFE)*T**DGCS(2,NFE)+DGCS(3,NFE)*T**(-DGCS(4,NFE))
25292       DGD=DGDS(1,NFE)*T**DGDS(2,NFE)+DGDS(3,NFE)*T**(-DGDS(4,NFE))
25293       DGE=DGES(1,NFE)*T**DGES(2,NFE)+DGES(3,NFE)*T**(-DGES(4,NFE))
25294       DGF=9D0
25295       IF(NF.EQ.4) DGF=10D0
25296       IF(NF.EQ.5) DGF=55D0/6D0
25297       XPQS=DGF*X*(X**2+X1**2)/(DGA-DGB*LOG(X1))+DGC*X**DGD*X1**DGE
25298       IF(NF.LE.3) THEN
25299         XPQU=(XPQS+9D0*XPQN)/6D0
25300         XPQD=(XPQS-4.5D0*XPQN)/6D0
25301       ELSEIF(NF.EQ.4) THEN
25302         XPQU=(XPQS+6D0*XPQN)/8D0
25303         XPQD=(XPQS-6D0*XPQN)/8D0
25304       ELSE
25305         XPQU=(XPQS+7.5D0*XPQN)/10D0
25306         XPQD=(XPQS-5D0*XPQN)/10D0
25307       ENDIF
25308  
25309 C...Put into output arrays.
25310       XPGA(0)=AEM*XPGL
25311       XPGA(1)=AEM*XPQD
25312       XPGA(2)=AEM*XPQU
25313       XPGA(3)=AEM*XPQD
25314       IF(NF.GE.4) XPGA(4)=AEM*XPQU
25315       IF(NF.GE.5) XPGA(5)=AEM*XPQD
25316       DO 110 KFL=1,6
25317         XPGA(-KFL)=XPGA(KFL)
25318   110 CONTINUE
25319  
25320       RETURN
25321       END
25322  
25323 C*********************************************************************
25324  
25325 C...PYGGAM
25326 C...Constructs the F2 and parton distributions of the photon
25327 C...by summing homogeneous (VMD) and inhomogeneous (anomalous) terms.
25328 C...For F2, c and b are included by the Bethe-Heitler formula;
25329 C...in the 'MSbar' scheme additionally a Cgamma term is added.
25330 C...Contains the SaS sets 1D, 1M, 2D and 2M.
25331 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25332  
25333       SUBROUTINE PYGGAM(ISET,X,Q2,P2,IP2,F2GM,XPDFGM)
25334  
25335 C...Double precision and integer declarations.
25336       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25337       IMPLICIT INTEGER(I-N)
25338       INTEGER PYK,PYCHGE,PYCOMP
25339 C...Commonblocks.
25340       COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
25341      &XPDIR(-6:6)
25342       COMMON/PYINT9/VXPVMD(-6:6),VXPANL(-6:6),VXPANH(-6:6),VXPDGM(-6:6)
25343       SAVE /PYINT8/,/PYINT9/
25344 C...Local arrays.
25345       DIMENSION XPDFGM(-6:6),XPGA(-6:6), VXPGA(-6:6)
25346 C...Charm and bottom masses (low to compensate for J/psi etc.).
25347       DATA PMC/1.3D0/, PMB/4.6D0/
25348 C...alpha_em and alpha_em/(2*pi).
25349       DATA AEM/0.007297D0/, AEM2PI/0.0011614D0/
25350 C...Lambda value for 4 flavours.
25351       DATA ALAM/0.20D0/
25352 C...Mixture u/(u+d), = 0.5 for incoherent and = 0.8 for coherent sum.
25353       DATA FRACU/0.8D0/
25354 C...VMD couplings f_V**2/(4*pi).
25355       DATA FRHO/2.20D0/, FOMEGA/23.6D0/, FPHI/18.4D0/
25356 C...Masses for rho (=omega) and phi.
25357       DATA PMRHO/0.770D0/, PMPHI/1.020D0/
25358 C...Number of points in integration for IP2=1.
25359       DATA NSTEP/100/
25360  
25361 C...Reset output.
25362       F2GM=0D0
25363       DO 100 KFL=-6,6
25364         XPDFGM(KFL)=0D0
25365         XPVMD(KFL)=0D0
25366         XPANL(KFL)=0D0
25367         XPANH(KFL)=0D0
25368         XPBEH(KFL)=0D0
25369         XPDIR(KFL)=0D0
25370         VXPVMD(KFL)=0D0
25371         VXPANL(KFL)=0D0
25372         VXPANH(KFL)=0D0
25373         VXPDGM(KFL)=0D0
25374   100 CONTINUE
25375  
25376 C...Set Q0 cut-off parameter as function of set used.
25377       IF(ISET.LE.2) THEN
25378         Q0=0.6D0
25379       ELSE
25380         Q0=2D0
25381       ENDIF
25382       Q02=Q0**2
25383  
25384 C...Scale choice for off-shell photon; common factors.
25385       Q2A=Q2
25386       FACNOR=1D0
25387       IF(IP2.EQ.1) THEN
25388         P2MX=P2+Q02
25389         Q2A=Q2+P2*Q02/MAX(Q02,Q2)
25390         FACNOR=LOG(Q2/Q02)/NSTEP
25391       ELSEIF(IP2.EQ.2) THEN
25392         P2MX=MAX(P2,Q02)
25393       ELSEIF(IP2.EQ.3) THEN
25394         P2MX=P2+Q02
25395         Q2A=Q2+P2*Q02/MAX(Q02,Q2)
25396       ELSEIF(IP2.EQ.4) THEN
25397         P2MX=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
25398      &  ((Q2+P2)*(Q02+P2)))
25399       ELSEIF(IP2.EQ.5) THEN
25400         P2MXA=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
25401      &  ((Q2+P2)*(Q02+P2)))
25402         P2MX=Q0*SQRT(P2MXA)
25403         FACNOR=LOG(Q2/P2MXA)/LOG(Q2/P2MX)
25404       ELSEIF(IP2.EQ.6) THEN
25405         P2MX=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
25406      &  ((Q2+P2)*(Q02+P2)))
25407         P2MX=MAX(0D0,1D0-P2/Q2)*P2MX+MIN(1D0,P2/Q2)*MAX(P2,Q02)
25408       ELSE
25409         P2MXA=Q2*(Q02+P2)/(Q2+P2)*EXP(P2*(Q2-Q02)/
25410      &  ((Q2+P2)*(Q02+P2)))
25411         P2MX=Q0*SQRT(P2MXA)
25412         P2MXB=P2MX
25413         P2MX=MAX(0D0,1D0-P2/Q2)*P2MX+MIN(1D0,P2/Q2)*MAX(P2,Q02)
25414         P2MXB=MAX(0D0,1D0-P2/Q2)*P2MXB+MIN(1D0,P2/Q2)*P2MXA
25415         IF(ABS(Q2-Q02).GT.1D-6) THEN
25416           FACNOR=LOG(Q2/P2MXA)/LOG(Q2/P2MXB)
25417         ELSEIF(P2.LT.Q02) THEN
25418           FACNOR=Q02**3/(Q02+P2)/(Q02**2-P2**2/2D0)
25419         ELSE
25420           FACNOR=1D0
25421         ENDIF
25422       ENDIF
25423  
25424 C...Call VMD parametrization for d quark and use to give rho, omega,
25425 C...phi. Note dipole dampening for off-shell photon.
25426       CALL PYGVMD(ISET,1,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
25427       XFVAL=VXPGA(1)
25428       XPGA(1)=XPGA(2)
25429       XPGA(-1)=XPGA(-2)
25430       FACUD=AEM*(1D0/FRHO+1D0/FOMEGA)*(PMRHO**2/(PMRHO**2+P2))**2
25431       FACS=AEM*(1D0/FPHI)*(PMPHI**2/(PMPHI**2+P2))**2
25432       DO 110 KFL=-5,5
25433         XPVMD(KFL)=(FACUD+FACS)*XPGA(KFL)
25434   110 CONTINUE
25435       XPVMD(1)=XPVMD(1)+(1D0-FRACU)*FACUD*XFVAL
25436       XPVMD(2)=XPVMD(2)+FRACU*FACUD*XFVAL
25437       XPVMD(3)=XPVMD(3)+FACS*XFVAL
25438       XPVMD(-1)=XPVMD(-1)+(1D0-FRACU)*FACUD*XFVAL
25439       XPVMD(-2)=XPVMD(-2)+FRACU*FACUD*XFVAL
25440       XPVMD(-3)=XPVMD(-3)+FACS*XFVAL
25441       VXPVMD(1)=(1D0-FRACU)*FACUD*XFVAL
25442       VXPVMD(2)=FRACU*FACUD*XFVAL
25443       VXPVMD(3)=FACS*XFVAL
25444       VXPVMD(-1)=(1D0-FRACU)*FACUD*XFVAL
25445       VXPVMD(-2)=FRACU*FACUD*XFVAL
25446       VXPVMD(-3)=FACS*XFVAL
25447  
25448       IF(IP2.NE.1) THEN
25449 C...Anomalous parametrizations for different strategies
25450 C...for off-shell photons; except full integration.
25451  
25452 C...Call anomalous parametrization for d + u + s.
25453         CALL PYGANO(-3,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
25454         DO 120 KFL=-5,5
25455           XPANL(KFL)=FACNOR*XPGA(KFL)
25456           VXPANL(KFL)=FACNOR*VXPGA(KFL)
25457   120   CONTINUE
25458  
25459 C...Call anomalous parametrization for c and b.
25460         CALL PYGANO(4,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
25461         DO 130 KFL=-5,5
25462           XPANH(KFL)=FACNOR*XPGA(KFL)
25463           VXPANH(KFL)=FACNOR*VXPGA(KFL)
25464   130   CONTINUE
25465         CALL PYGANO(5,X,Q2A,P2MX,ALAM,XPGA,VXPGA)
25466         DO 140 KFL=-5,5
25467           XPANH(KFL)=XPANH(KFL)+FACNOR*XPGA(KFL)
25468           VXPANH(KFL)=VXPANH(KFL)+FACNOR*VXPGA(KFL)
25469   140   CONTINUE
25470  
25471       ELSE
25472 C...Special option: loop over flavours and integrate over k2.
25473         DO 170 KF=1,5
25474           DO 160 ISTEP=1,NSTEP
25475             Q2STEP=Q02*(Q2/Q02)**((ISTEP-0.5D0)/NSTEP)
25476             IF((KF.EQ.4.AND.Q2STEP.LT.PMC**2).OR.
25477      &      (KF.EQ.5.AND.Q2STEP.LT.PMB**2)) GOTO 160
25478             CALL PYGVMD(0,KF,X,Q2,Q2STEP,ALAM,XPGA,VXPGA)
25479             FACQ=AEM2PI*(Q2STEP/(Q2STEP+P2))**2*FACNOR
25480             IF(MOD(KF,2).EQ.0) FACQ=FACQ*(8D0/9D0)
25481             IF(MOD(KF,2).EQ.1) FACQ=FACQ*(2D0/9D0)
25482             DO 150 KFL=-5,5
25483               IF(KF.LE.3) XPANL(KFL)=XPANL(KFL)+FACQ*XPGA(KFL)
25484               IF(KF.GE.4) XPANH(KFL)=XPANH(KFL)+FACQ*XPGA(KFL)
25485               IF(KF.LE.3) VXPANL(KFL)=VXPANL(KFL)+FACQ*VXPGA(KFL)
25486               IF(KF.GE.4) VXPANH(KFL)=VXPANH(KFL)+FACQ*VXPGA(KFL)
25487   150       CONTINUE
25488   160     CONTINUE
25489   170   CONTINUE
25490       ENDIF
25491  
25492 C...Call Bethe-Heitler term expression for charm and bottom.
25493       CALL PYGBEH(4,X,Q2,P2,PMC**2,XPBH)
25494       XPBEH(4)=XPBH
25495       XPBEH(-4)=XPBH
25496       CALL PYGBEH(5,X,Q2,P2,PMB**2,XPBH)
25497       XPBEH(5)=XPBH
25498       XPBEH(-5)=XPBH
25499  
25500 C...For MSbar subtraction call C^gamma term expression for d, u, s.
25501       IF(ISET.EQ.2.OR.ISET.EQ.4) THEN
25502         CALL PYGDIR(X,Q2,P2,Q02,XPGA)
25503         DO 180 KFL=-5,5
25504           XPDIR(KFL)=XPGA(KFL)
25505   180   CONTINUE
25506       ENDIF
25507  
25508 C...Store result in output array.
25509       DO 190 KFL=-5,5
25510         CHSQ=1D0/9D0
25511         IF(IABS(KFL).EQ.2.OR.IABS(KFL).EQ.4) CHSQ=4D0/9D0
25512         XPF2=XPVMD(KFL)+XPANL(KFL)+XPBEH(KFL)+XPDIR(KFL)
25513         IF(KFL.NE.0) F2GM=F2GM+CHSQ*XPF2
25514         XPDFGM(KFL)=XPVMD(KFL)+XPANL(KFL)+XPANH(KFL)
25515         VXPDGM(KFL)=VXPVMD(KFL)+VXPANL(KFL)+VXPANH(KFL)
25516   190 CONTINUE
25517  
25518       RETURN
25519       END
25520  
25521 C*********************************************************************
25522  
25523 C...PYGVMD
25524 C...Evaluates the VMD parton distributions of a photon,
25525 C...evolved homogeneously from an initial scale P2 to Q2.
25526 C...Does not include dipole suppression factor.
25527 C...ISET is parton distribution set, see above;
25528 C...additionally ISET=0 is used for the evolution of an anomalous photon
25529 C...which branched at a scale P2 and then evolved homogeneously to Q2.
25530 C...ALAM is the 4-flavour Lambda, which is automatically converted
25531 C...to 3- and 5-flavour equivalents as needed.
25532 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25533  
25534       SUBROUTINE PYGVMD(ISET,KF,X,Q2,P2,ALAM,XPGA,VXPGA)
25535  
25536 C...Double precision and integer declarations.
25537       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25538       IMPLICIT INTEGER(I-N)
25539       INTEGER PYK,PYCHGE,PYCOMP
25540 C...Local arrays and data.
25541       DIMENSION XPGA(-6:6), VXPGA(-6:6)
25542       DATA PMC/1.3D0/, PMB/4.6D0/, AEM/0.007297D0/, AEM2PI/0.0011614D0/
25543  
25544 C...Reset output.
25545       DO 100 KFL=-6,6
25546         XPGA(KFL)=0D0
25547         VXPGA(KFL)=0D0
25548   100 CONTINUE
25549       KFA=IABS(KF)
25550  
25551 C...Calculate Lambda; protect against unphysical Q2 and P2 input.
25552       ALAM3=ALAM*(PMC/ALAM)**(2D0/27D0)
25553       ALAM5=ALAM*(ALAM/PMB)**(2D0/23D0)
25554       P2EFF=MAX(P2,1.2D0*ALAM3**2)
25555       IF(KFA.EQ.4) P2EFF=MAX(P2EFF,PMC**2)
25556       IF(KFA.EQ.5) P2EFF=MAX(P2EFF,PMB**2)
25557       Q2EFF=MAX(Q2,P2EFF)
25558  
25559 C...Find number of flavours at lower and upper scale.
25560       NFP=4
25561       IF(P2EFF.LT.PMC**2) NFP=3
25562       IF(P2EFF.GT.PMB**2) NFP=5
25563       NFQ=4
25564       IF(Q2EFF.LT.PMC**2) NFQ=3
25565       IF(Q2EFF.GT.PMB**2) NFQ=5
25566  
25567 C...Find s as sum of 3-, 4- and 5-flavour parts.
25568       S=0D0
25569       IF(NFP.EQ.3) THEN
25570         Q2DIV=PMC**2
25571         IF(NFQ.EQ.3) Q2DIV=Q2EFF
25572         S=S+(6D0/27D0)*LOG(LOG(Q2DIV/ALAM3**2)/LOG(P2EFF/ALAM3**2))
25573       ENDIF
25574       IF(NFP.LE.4.AND.NFQ.GE.4) THEN
25575         P2DIV=P2EFF
25576         IF(NFP.EQ.3) P2DIV=PMC**2
25577         Q2DIV=Q2EFF
25578         IF(NFQ.EQ.5) Q2DIV=PMB**2
25579         S=S+(6D0/25D0)*LOG(LOG(Q2DIV/ALAM**2)/LOG(P2DIV/ALAM**2))
25580       ENDIF
25581       IF(NFQ.EQ.5) THEN
25582         P2DIV=PMB**2
25583         IF(NFP.EQ.5) P2DIV=P2EFF
25584         S=S+(6D0/23D0)*LOG(LOG(Q2EFF/ALAM5**2)/LOG(P2DIV/ALAM5**2))
25585       ENDIF
25586  
25587 C...Calculate frequent combinations of x and s.
25588       X1=1D0-X
25589       XL=-LOG(X)
25590       S2=S**2
25591       S3=S**3
25592       S4=S**4
25593  
25594 C...Evaluate homogeneous anomalous parton distributions below or
25595 C...above threshold.
25596       IF(ISET.EQ.0) THEN
25597         IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
25598      &  (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
25599           XVAL = X * 1.5D0 * (X**2+X1**2)
25600           XGLU = 0D0
25601           XSEA = 0D0
25602         ELSE
25603           XVAL = (1.5D0/(1D0-0.197D0*S+4.33D0*S2)*X**2 +
25604      &    (1.5D0+2.10D0*S)/(1D0+3.29D0*S)*X1**2 +
25605      &    5.23D0*S/(1D0+1.17D0*S+19.9D0*S3)*X*X1) *
25606      &    X**(1D0/(1D0+1.5D0*S)) * (1D0-X**2)**(2.667D0*S)
25607           XGLU = 4D0*S/(1D0+4.76D0*S+15.2D0*S2+29.3D0*S4) *
25608      &    X**(-2.03D0*S/(1D0+2.44D0*S)) * (X1*XL)**(1.333D0*S) *
25609      &    ((4D0*X**2+7D0*X+4D0)*X1/3D0 - 2D0*X*(1D0+X)*XL)
25610           XSEA = S2/(1D0+4.54D0*S+8.19D0*S2+8.05D0*S3) *
25611      &    X**(-1.54D0*S/(1D0+1.29D0*S)) * X1**(2.667D0*S) *
25612      &    ((8D0-73D0*X+62D0*X**2)*X1/9D0 + (3D0-8D0*X**2/3D0)*X*XL +
25613      &    (2D0*X-1D0)*X*XL**2)
25614         ENDIF
25615  
25616 C...Evaluate set 1D parton distributions below or above threshold.
25617       ELSEIF(ISET.EQ.1) THEN
25618         IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
25619      &  (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
25620           XVAL = 1.294D0 * X**0.80D0 * X1**0.76D0
25621           XGLU = 1.273D0 * X**0.40D0 * X1**1.76D0
25622           XSEA = 0.100D0 * X1**3.76D0
25623         ELSE
25624           XVAL = 1.294D0/(1D0+0.252D0*S+3.079D0*S2) *
25625      &    X**(0.80D0-0.13D0*S) * X1**(0.76D0+0.667D0*S) * XL**(2D0*S)
25626           XGLU = 7.90D0*S/(1D0+5.50D0*S) * EXP(-5.16D0*S) *
25627      &    X**(-1.90D0*S/(1D0+3.60D0*S)) * X1**1.30D0 *
25628      &    XL**(0.50D0+3D0*S) + 1.273D0 * EXP(-10D0*S) *
25629      &    X**0.40D0 * X1**(1.76D0+3D0*S)
25630           XSEA = (0.1D0-0.397D0*S2+1.121D0*S3)/
25631      &    (1D0+5.61D0*S2+5.26D0*S3) * X**(-7.32D0*S2/(1D0+10.3D0*S2)) *
25632      &    X1**((3.76D0+15D0*S+12D0*S2)/(1D0+4D0*S))
25633           XSEA0 = 0.100D0 * X1**3.76D0
25634         ENDIF
25635  
25636 C...Evaluate set 1M parton distributions below or above threshold.
25637       ELSEIF(ISET.EQ.2) 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 = 0.8477D0 * X**0.51D0 * X1**1.37D0
25641           XGLU = 3.42D0 * X**0.255D0 * X1**2.37D0
25642           XSEA = 0D0
25643         ELSE
25644           XVAL = 0.8477D0/(1D0+1.37D0*S+2.18D0*S2+3.73D0*S3) *
25645      &    X**(0.51D0+0.21D0*S) * X1**1.37D0 * XL**(2.667D0*S)
25646           XGLU = 24D0*S/(1D0+9.6D0*S+0.92D0*S2+14.34D0*S3) *
25647      &    EXP(-5.94D0*S) * X**((-0.013D0-1.80D0*S)/(1D0+3.14D0*S)) *
25648      &    X1**(2.37D0+0.4D0*S) * XL**(0.32D0+3.6D0*S) + 3.42D0 *
25649      &    EXP(-12D0*S) * X**0.255D0 * X1**(2.37D0+3D0*S)
25650           XSEA = 0.842D0*S/(1D0+21.3D0*S-33.2D0*S2+229D0*S3) *
25651      &    X**((0.13D0-2.90D0*S)/(1D0+5.44D0*S)) * X1**(3.45D0+0.5D0*S) *
25652      &    XL**(2.8D0*S)
25653           XSEA0 = 0D0
25654         ENDIF
25655  
25656 C...Evaluate set 2D parton distributions below or above threshold.
25657       ELSEIF(ISET.EQ.3) 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 = X**0.46D0 * X1**0.64D0 + 0.76D0 * X
25661           XGLU = 1.925D0 * X1**2
25662           XSEA = 0.242D0 * X1**4
25663         ELSE
25664           XVAL = (1D0+0.186D0*S)/(1D0-0.209D0*S+1.495D0*S2) *
25665      &    X**(0.46D0+0.25D0*S) *
25666      &    X1**((0.64D0+0.14D0*S+5D0*S2)/(1D0+S)) * XL**(1.9D0*S) +
25667      &    (0.76D0+0.4D0*S) * X * X1**(2.667D0*S)
25668           XGLU = (1.925D0+5.55D0*S+147D0*S2)/(1D0-3.59D0*S+3.32D0*S2) *
25669      &    EXP(-18.67D0*S) *
25670      &    X**((-5.81D0*S-5.34D0*S2)/(1D0+29D0*S-4.26D0*S2))
25671      &    * X1**((2D0-5.9D0*S)/(1D0+1.7D0*S)) *
25672      &    XL**(9.3D0*S/(1D0+1.7D0*S))
25673           XSEA = (0.242D0-0.252D0*S+1.19D0*S2)/
25674      &    (1D0-0.607D0*S+21.95D0*S2) *
25675      &    X**(-12.1D0*S2/(1D0+2.62D0*S+16.7D0*S2)) * X1**4 * XL**S
25676           XSEA0 = 0.242D0 * X1**4
25677         ENDIF
25678  
25679 C...Evaluate set 2M parton distributions below or above threshold.
25680       ELSEIF(ISET.EQ.4) THEN
25681         IF(Q2.LE.P2.OR.(KFA.EQ.4.AND.Q2.LT.PMC**2).OR.
25682      &  (KFA.EQ.5.AND.Q2.LT.PMB**2)) THEN
25683           XVAL = 1.168D0 * X**0.50D0 * X1**2.60D0 + 0.965D0 * X
25684           XGLU = 1.808D0 * X1**2
25685           XSEA = 0.209D0 * X1**4
25686         ELSE
25687           XVAL = (1.168D0+1.771D0*S+29.35D0*S2) * EXP(-5.776D0*S) *
25688      &    X**((0.5D0+0.208D0*S)/(1D0-0.794D0*S+1.516D0*S2)) *
25689      &    X1**((2.6D0+7.6D0*S)/(1D0+5D0*S)) *
25690      &    XL**(5.15D0*S/(1D0+2D0*S)) +
25691      &    (0.965D0+22.35D0*S)/(1D0+18.4D0*S) * X * X1**(2.667D0*S)
25692           XGLU = (1.808D0+29.9D0*S)/(1D0+26.4D0*S) * EXP(-5.28D0*S) *
25693      &    X**((-5.35D0*S-10.11D0*S2)/(1D0+31.71D0*S)) *
25694      &    X1**((2D0-7.3D0*S+4D0*S2)/(1D0+2.5D0*S)) *
25695      &    XL**(10.9D0*S/(1D0+2.5D0*S))
25696           XSEA = (0.209D0+0.644D0*S2)/(1D0+0.319D0*S+17.6D0*S2) *
25697      &    X**((-0.373D0*S-7.71D0*S2)/(1D0+0.815D0*S+11.0D0*S2)) *
25698      &    X1**(4D0+S) * XL**(0.45D0*S)
25699           XSEA0 = 0.209D0 * X1**4
25700         ENDIF
25701       ENDIF
25702  
25703 C...Threshold factors for c and b sea.
25704       SLL=LOG(LOG(Q2EFF/ALAM**2)/LOG(P2EFF/ALAM**2))
25705       XCHM=0D0
25706       IF(Q2.GT.PMC**2.AND.Q2.GT.1.001D0*P2EFF) THEN
25707         SCH=MAX(0D0,LOG(LOG(PMC**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
25708         IF(ISET.EQ.0) THEN
25709           XCHM=XSEA*(1D0-(SCH/SLL)**2)
25710         ELSE
25711           XCHM=MAX(0D0,XSEA-XSEA0*X1**(2.667D0*S))*(1D0-SCH/SLL)
25712         ENDIF
25713       ENDIF
25714       XBOT=0D0
25715       IF(Q2.GT.PMB**2.AND.Q2.GT.1.001D0*P2EFF) THEN
25716         SBT=MAX(0D0,LOG(LOG(PMB**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
25717         IF(ISET.EQ.0) THEN
25718           XBOT=XSEA*(1D0-(SBT/SLL)**2)
25719         ELSE
25720           XBOT=MAX(0D0,XSEA-XSEA0*X1**(2.667D0*S))*(1D0-SBT/SLL)
25721         ENDIF
25722       ENDIF
25723  
25724 C...Fill parton distributions.
25725       XPGA(0)=XGLU
25726       XPGA(1)=XSEA
25727       XPGA(2)=XSEA
25728       XPGA(3)=XSEA
25729       XPGA(4)=XCHM
25730       XPGA(5)=XBOT
25731       XPGA(KFA)=XPGA(KFA)+XVAL
25732       DO 110 KFL=1,5
25733         XPGA(-KFL)=XPGA(KFL)
25734   110 CONTINUE
25735       VXPGA(KFA)=XVAL
25736       VXPGA(-KFA)=XVAL
25737  
25738       RETURN
25739       END
25740  
25741 C*********************************************************************
25742  
25743 C...PYGANO
25744 C...Evaluates the parton distributions of the anomalous photon,
25745 C...inhomogeneously evolved from a scale P2 (where it vanishes) to Q2.
25746 C...KF=0 gives the sum over (up to) 5 flavours,
25747 C...KF<0 limits to flavours up to abs(KF),
25748 C...KF>0 is for flavour KF only.
25749 C...ALAM is the 4-flavour Lambda, which is automatically converted
25750 C...to 3- and 5-flavour equivalents as needed.
25751 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25752  
25753       SUBROUTINE PYGANO(KF,X,Q2,P2,ALAM,XPGA,VXPGA)
25754  
25755 C...Double precision and integer declarations.
25756       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25757       IMPLICIT INTEGER(I-N)
25758       INTEGER PYK,PYCHGE,PYCOMP
25759 C...Local arrays and data.
25760       DIMENSION XPGA(-6:6), VXPGA(-6:6), ALAMSQ(3:5)
25761       DATA PMC/1.3D0/, PMB/4.6D0/, AEM/0.007297D0/, AEM2PI/0.0011614D0/
25762  
25763 C...Reset output.
25764       DO 100 KFL=-6,6
25765         XPGA(KFL)=0D0
25766         VXPGA(KFL)=0D0
25767   100 CONTINUE
25768       IF(Q2.LE.P2) RETURN
25769       KFA=IABS(KF)
25770  
25771 C...Calculate Lambda; protect against unphysical Q2 and P2 input.
25772       ALAMSQ(3)=(ALAM*(PMC/ALAM)**(2D0/27D0))**2
25773       ALAMSQ(4)=ALAM**2
25774       ALAMSQ(5)=(ALAM*(ALAM/PMB)**(2D0/23D0))**2
25775       P2EFF=MAX(P2,1.2D0*ALAMSQ(3))
25776       IF(KF.EQ.4) P2EFF=MAX(P2EFF,PMC**2)
25777       IF(KF.EQ.5) P2EFF=MAX(P2EFF,PMB**2)
25778       Q2EFF=MAX(Q2,P2EFF)
25779       XL=-LOG(X)
25780  
25781 C...Find number of flavours at lower and upper scale.
25782       NFP=4
25783       IF(P2EFF.LT.PMC**2) NFP=3
25784       IF(P2EFF.GT.PMB**2) NFP=5
25785       NFQ=4
25786       IF(Q2EFF.LT.PMC**2) NFQ=3
25787       IF(Q2EFF.GT.PMB**2) NFQ=5
25788  
25789 C...Define range of flavour loop.
25790       IF(KF.EQ.0) THEN
25791         KFLMN=1
25792         KFLMX=5
25793       ELSEIF(KF.LT.0) THEN
25794         KFLMN=1
25795         KFLMX=KFA
25796       ELSE
25797         KFLMN=KFA
25798         KFLMX=KFA
25799       ENDIF
25800  
25801 C...Loop over flavours the photon can branch into.
25802       DO 110 KFL=KFLMN,KFLMX
25803  
25804 C...Light flavours: calculate t range and (approximate) s range.
25805         IF(KFL.LE.3.AND.(KFL.EQ.1.OR.KFL.EQ.KF)) THEN
25806           TDIFF=LOG(Q2EFF/P2EFF)
25807           S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
25808      &    LOG(P2EFF/ALAMSQ(NFQ)))
25809           IF(NFQ.GT.NFP) THEN
25810             Q2DIV=PMB**2
25811             IF(NFQ.EQ.4) Q2DIV=PMC**2
25812             SNFQ=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2DIV/ALAMSQ(NFQ))/
25813      &      LOG(P2EFF/ALAMSQ(NFQ)))
25814             SNFP=(6D0/(33D0-2D0*(NFQ-1)))*LOG(LOG(Q2DIV/ALAMSQ(NFQ-1))/
25815      &      LOG(P2EFF/ALAMSQ(NFQ-1)))
25816             S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNFP-SNFQ)
25817           ENDIF
25818           IF(NFQ.EQ.5.AND.NFP.EQ.3) THEN
25819             Q2DIV=PMC**2
25820             SNF4=(6D0/(33D0-2D0*4))*LOG(LOG(Q2DIV/ALAMSQ(4))/
25821      &      LOG(P2EFF/ALAMSQ(4)))
25822             SNF3=(6D0/(33D0-2D0*3))*LOG(LOG(Q2DIV/ALAMSQ(3))/
25823      &      LOG(P2EFF/ALAMSQ(3)))
25824             S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNF3-SNF4)
25825           ENDIF
25826  
25827 C...u and s quark do not need a separate treatment when d has been done.
25828         ELSEIF(KFL.EQ.2.OR.KFL.EQ.3) THEN
25829  
25830 C...Charm: as above, but only include range above c threshold.
25831         ELSEIF(KFL.EQ.4) THEN
25832           IF(Q2.LE.PMC**2) GOTO 110
25833           P2EFF=MAX(P2EFF,PMC**2)
25834           Q2EFF=MAX(Q2EFF,P2EFF)
25835           TDIFF=LOG(Q2EFF/P2EFF)
25836           S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
25837      &    LOG(P2EFF/ALAMSQ(NFQ)))
25838           IF(NFQ.EQ.5.AND.NFP.EQ.4) THEN
25839             Q2DIV=PMB**2
25840             SNFQ=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2DIV/ALAMSQ(NFQ))/
25841      &      LOG(P2EFF/ALAMSQ(NFQ)))
25842             SNFP=(6D0/(33D0-2D0*(NFQ-1)))*LOG(LOG(Q2DIV/ALAMSQ(NFQ-1))/
25843      &      LOG(P2EFF/ALAMSQ(NFQ-1)))
25844             S=S+(LOG(Q2DIV/P2EFF)/LOG(Q2EFF/P2EFF))*(SNFP-SNFQ)
25845           ENDIF
25846  
25847 C...Bottom: as above, but only include range above b threshold.
25848         ELSEIF(KFL.EQ.5) THEN
25849           IF(Q2.LE.PMB**2) GOTO 110
25850           P2EFF=MAX(P2EFF,PMB**2)
25851           Q2EFF=MAX(Q2,P2EFF)
25852           TDIFF=LOG(Q2EFF/P2EFF)
25853           S=(6D0/(33D0-2D0*NFQ))*LOG(LOG(Q2EFF/ALAMSQ(NFQ))/
25854      &    LOG(P2EFF/ALAMSQ(NFQ)))
25855         ENDIF
25856  
25857 C...Evaluate flavour-dependent prefactor (charge^2 etc.).
25858         CHSQ=1D0/9D0
25859         IF(KFL.EQ.2.OR.KFL.EQ.4) CHSQ=4D0/9D0
25860         FAC=AEM2PI*2D0*CHSQ*TDIFF
25861  
25862 C...Evaluate parton distributions (normalized to unit momentum sum).
25863         IF(KFL.EQ.1.OR.KFL.EQ.4.OR.KFL.EQ.5.OR.KFL.EQ.KF) THEN
25864           XVAL= ((1.5D0+2.49D0*S+26.9D0*S**2)/(1D0+32.3D0*S**2)*X**2 +
25865      &    (1.5D0-0.49D0*S+7.83D0*S**2)/(1D0+7.68D0*S**2)*(1D0-X)**2 +
25866      &    1.5D0*S/(1D0-3.2D0*S+7D0*S**2)*X*(1D0-X)) *
25867      &    X**(1D0/(1D0+0.58D0*S)) * (1D0-X**2)**(2.5D0*S/(1D0+10D0*S))
25868           XGLU= 2D0*S/(1D0+4D0*S+7D0*S**2) *
25869      &    X**(-1.67D0*S/(1D0+2D0*S)) * (1D0-X**2)**(1.2D0*S) *
25870      &    ((4D0*X**2+7D0*X+4D0)*(1D0-X)/3D0 - 2D0*X*(1D0+X)*XL)
25871           XSEA= 0.333D0*S**2/(1D0+4.90D0*S+4.69D0*S**2+21.4D0*S**3) *
25872      &    X**(-1.18D0*S/(1D0+1.22D0*S)) * (1D0-X)**(1.2D0*S) *
25873      &    ((8D0-73D0*X+62D0*X**2)*(1D0-X)/9D0 +
25874      &    (3D0-8D0*X**2/3D0)*X*XL + (2D0*X-1D0)*X*XL**2)
25875  
25876 C...Threshold factors for c and b sea.
25877           SLL=LOG(LOG(Q2EFF/ALAM**2)/LOG(P2EFF/ALAM**2))
25878           XCHM=0D0
25879           IF(Q2.GT.PMC**2.AND.Q2.GT.1.001D0*P2EFF) THEN
25880             SCH=MAX(0D0,LOG(LOG(PMC**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
25881             XCHM=XSEA*(1D0-(SCH/SLL)**3)
25882           ENDIF
25883           XBOT=0D0
25884           IF(Q2.GT.PMB**2.AND.Q2.GT.1.001D0*P2EFF) THEN
25885             SBT=MAX(0D0,LOG(LOG(PMB**2/ALAM**2)/LOG(P2EFF/ALAM**2)))
25886             XBOT=XSEA*(1D0-(SBT/SLL)**3)
25887           ENDIF
25888         ENDIF
25889  
25890 C...Add contribution of each valence flavour.
25891         XPGA(0)=XPGA(0)+FAC*XGLU
25892         XPGA(1)=XPGA(1)+FAC*XSEA
25893         XPGA(2)=XPGA(2)+FAC*XSEA
25894         XPGA(3)=XPGA(3)+FAC*XSEA
25895         XPGA(4)=XPGA(4)+FAC*XCHM
25896         XPGA(5)=XPGA(5)+FAC*XBOT
25897         XPGA(KFL)=XPGA(KFL)+FAC*XVAL
25898         VXPGA(KFL)=VXPGA(KFL)+FAC*XVAL
25899   110 CONTINUE
25900       DO 120 KFL=1,5
25901         XPGA(-KFL)=XPGA(KFL)
25902         VXPGA(-KFL)=VXPGA(KFL)
25903   120 CONTINUE
25904  
25905       RETURN
25906       END
25907  
25908 C*********************************************************************
25909  
25910 C...PYGBEH
25911 C...Evaluates the Bethe-Heitler cross section for heavy flavour
25912 C...production.
25913 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25914  
25915       SUBROUTINE PYGBEH(KF,X,Q2,P2,PM2,XPBH)
25916 
25917 C...Double precision and integer declarations.
25918       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25919       IMPLICIT INTEGER(I-N)
25920       INTEGER PYK,PYCHGE,PYCOMP
25921  
25922 C...Local data.
25923       DATA AEM2PI/0.0011614D0/
25924  
25925 C...Reset output.
25926       XPBH=0D0
25927       SIGBH=0D0
25928  
25929 C...Check kinematics limits.
25930       IF(X.GE.Q2/(4D0*PM2+Q2+P2)) RETURN
25931       W2=Q2*(1D0-X)/X-P2
25932       BETA2=1D0-4D0*PM2/W2
25933       IF(BETA2.LT.1D-10) RETURN
25934       BETA=SQRT(BETA2)
25935       RMQ=4D0*PM2/Q2
25936  
25937 C...Simple case: P2 = 0.
25938       IF(P2.LT.1D-4) THEN
25939         IF(BETA.LT.0.99D0) THEN
25940           XBL=LOG((1D0+BETA)/(1D0-BETA))
25941         ELSE
25942           XBL=LOG((1D0+BETA)**2*W2/(4D0*PM2))
25943         ENDIF
25944         SIGBH=BETA*(8D0*X*(1D0-X)-1D0-RMQ*X*(1D0-X))+
25945      &  XBL*(X**2+(1D0-X)**2+RMQ*X*(1D0-3D0*X)-0.5D0*RMQ**2*X**2)
25946  
25947 C...Complicated case: P2 > 0, based on approximation of
25948 C...C.T. Hill and G.G. Ross, Nucl. Phys. B148 (1979) 373
25949       ELSE
25950         RPQ=1D0-4D0*X**2*P2/Q2
25951         IF(RPQ.GT.1D-10) THEN
25952           RPBE=SQRT(RPQ*BETA2)
25953           IF(RPBE.LT.0.99D0) THEN
25954             XBL=LOG((1D0+RPBE)/(1D0-RPBE))
25955             XBI=2D0*RPBE/(1D0-RPBE**2)
25956           ELSE
25957             RPBESN=4D0*PM2/W2+(4D0*X**2*P2/Q2)*BETA2
25958             XBL=LOG((1D0+RPBE)**2/RPBESN)
25959             XBI=2D0*RPBE/RPBESN
25960           ENDIF
25961           SIGBH=BETA*(6D0*X*(1D0-X)-1D0)+
25962      &    XBL*(X**2+(1D0-X)**2+RMQ*X*(1D0-3D0*X)-0.5D0*RMQ**2*X**2)+
25963      &    XBI*(2D0*X/Q2)*(PM2*X*(2D0-RMQ)-P2*X)
25964         ENDIF
25965       ENDIF
25966  
25967 C...Multiply by charge-squared etc. to get parton distribution.
25968       CHSQ=1D0/9D0
25969       IF(IABS(KF).EQ.2.OR.IABS(KF).EQ.4) CHSQ=4D0/9D0
25970       XPBH=3D0*CHSQ*AEM2PI*X*SIGBH
25971  
25972       RETURN
25973       END
25974  
25975 C*********************************************************************
25976  
25977 C...PYGDIR
25978 C...Evaluates the direct contribution, i.e. the C^gamma term,
25979 C...as needed in MSbar parametrizations.
25980 C...Adapted from SaSgam library, authors G.A. Schuler and T. Sjostrand.
25981  
25982       SUBROUTINE PYGDIR(X,Q2,P2,Q02,XPGA)
25983  
25984 C...Double precision and integer declarations.
25985       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
25986       IMPLICIT INTEGER(I-N)
25987       INTEGER PYK,PYCHGE,PYCOMP
25988 C...Local array and data.
25989       DIMENSION XPGA(-6:6)
25990       DATA PMC/1.3D0/, PMB/4.6D0/, AEM2PI/0.0011614D0/
25991  
25992 C...Reset output.
25993       DO 100 KFL=-6,6
25994         XPGA(KFL)=0D0
25995   100 CONTINUE
25996  
25997 C...Evaluate common x-dependent expression.
25998       XTMP = (X**2+(1D0-X)**2) * (-LOG(X)) - 1D0
25999       CGAM = 3D0*AEM2PI*X * (XTMP*(1D0+P2/(P2+Q02)) + 6D0*X*(1D0-X))
26000  
26001 C...d, u, s part by simple charge factor.
26002       XPGA(1)=(1D0/9D0)*CGAM
26003       XPGA(2)=(4D0/9D0)*CGAM
26004       XPGA(3)=(1D0/9D0)*CGAM
26005  
26006 C...Also fill for antiquarks.
26007       DO 110 KF=1,5
26008         XPGA(-KF)=XPGA(KF)
26009   110 CONTINUE
26010  
26011       RETURN
26012       END
26013  
26014 C*********************************************************************
26015  
26016 C...PYPDPI
26017 C...Gives pi+ parton distribution according to two different
26018 C...parametrizations.
26019  
26020       SUBROUTINE PYPDPI(X,Q2,XPPI)
26021  
26022 C...Double precision and integer declarations.
26023       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
26024       IMPLICIT INTEGER(I-N)
26025       INTEGER PYK,PYCHGE,PYCOMP
26026 C...Commonblocks.
26027       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
26028       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
26029       COMMON/PYINT1/MINT(400),VINT(400)
26030       SAVE /PYDAT1/,/PYPARS/,/PYINT1/
26031 C...Local arrays.
26032       DIMENSION XPPI(-6:6),COW(3,5,4,2),XQ(9),TS(6)
26033  
26034 C...The following data lines are coefficients needed in the
26035 C...Owens pion parton distribution parametrizations, see below.
26036 C...Expansion coefficients for up and down valence quark distributions.
26037       DATA ((COW(IP,IS,1,1),IS=1,5),IP=1,3)/
26038      &4.0000D-01,  7.0000D-01,  0.0000D+00,  0.0000D+00,  0.0000D+00,
26039      &-6.2120D-02,  6.4780D-01,  0.0000D+00,  0.0000D+00,  0.0000D+00,
26040      &-7.1090D-03,  1.3350D-02,  0.0000D+00,  0.0000D+00,  0.0000D+00/
26041       DATA ((COW(IP,IS,1,2),IS=1,5),IP=1,3)/
26042      &4.0000D-01,  6.2800D-01,  0.0000D+00,  0.0000D+00,  0.0000D+00,
26043      &-5.9090D-02,  6.4360D-01,  0.0000D+00,  0.0000D+00,  0.0000D+00,
26044      &-6.5240D-03,  1.4510D-02,  0.0000D+00,  0.0000D+00,  0.0000D+00/
26045 C...Expansion coefficients for gluon distribution.
26046       DATA ((COW(IP,IS,2,1),IS=1,5),IP=1,3)/
26047      &8.8800D-01,  0.0000D+00,  3.1100D+00,  6.0000D+00,  0.0000D+00,
26048      &-1.8020D+00, -1.5760D+00, -1.3170D-01,  2.8010D+00, -1.7280D+01,
26049      &1.8120D+00,  1.2000D+00,  5.0680D-01, -1.2160D+01,  2.0490D+01/
26050       DATA ((COW(IP,IS,2,2),IS=1,5),IP=1,3)/
26051      &7.9400D-01,  0.0000D+00,  2.8900D+00,  6.0000D+00,  0.0000D+00,
26052      &-9.1440D-01, -1.2370D+00,  5.9660D-01, -3.6710D+00, -8.1910D+00,
26053      &5.9660D-01,  6.5820D-01, -2.5500D-01, -2.3040D+00,  7.7580D+00/
26054 C...Expansion coefficients for (up+down+strange) quark sea distribution.
26055       DATA ((COW(IP,IS,3,1),IS=1,5),IP=1,3)/
26056      &9.0000D-01,  0.0000D+00,  5.0000D+00,  0.0000D+00,  0.0000D+00,
26057      &-2.4280D-01, -2.1200D-01,  8.6730D-01,  1.2660D+00,  2.3820D+00,
26058      &1.3860D-01,  3.6710D-03,  4.7470D-02, -2.2150D+00,  3.4820D-01/
26059       DATA ((COW(IP,IS,3,2),IS=1,5),IP=1,3)/
26060      &9.0000D-01,  0.0000D+00,  5.0000D+00,  0.0000D+00,  0.0000D+00,
26061      &-1.4170D-01, -1.6970D-01, -2.4740D+00, -2.5340D+00,  5.6210D-01,
26062      &-1.7400D-01, -9.6230D-02,  1.5750D+00,  1.3780D+00, -2.7010D-01/
26063 C...Expansion coefficients for charm quark sea distribution.
26064       DATA ((COW(IP,IS,4,1),IS=1,5),IP=1,3)/
26065      &0.0000D+00, -2.2120D-02,  2.8940D+00,  0.0000D+00,  0.0000D+00,
26066      &7.9280D-02, -3.7850D-01,  9.4330D+00,  5.2480D+00,  8.3880D+00,
26067      &-6.1340D-02, -1.0880D-01, -1.0852D+01, -7.1870D+00, -1.1610D+01/
26068       DATA ((COW(IP,IS,4,2),IS=1,5),IP=1,3)/
26069      &0.0000D+00, -8.8200D-02,  1.9240D+00,  0.0000D+00,  0.0000D+00,
26070      &6.2290D-02, -2.8920D-01,  2.4240D-01, -4.4630D+00, -8.3670D-01,
26071      &-4.0990D-02, -1.0820D-01,  2.0360D+00,  5.2090D+00, -4.8400D-02/
26072  
26073 C...Euler's beta function, requires ordinary Gamma function
26074       EULBET(X,Y)=PYGAMM(X)*PYGAMM(Y)/PYGAMM(X+Y)
26075  
26076 C...Reset output array.
26077       DO 100 KFL=-6,6
26078         XPPI(KFL)=0D0
26079   100 CONTINUE
26080  
26081       IF(MSTP(53).LE.2) THEN
26082 C...Pion parton distributions from Owens.
26083 C...Allowed variable range: 4 GeV^2 < Q^2 < approx 2000 GeV^2.
26084  
26085 C...Determine set, Lambda and s expansion variable.
26086         NSET=MSTP(53)
26087         IF(NSET.EQ.1) ALAM=0.2D0
26088         IF(NSET.EQ.2) ALAM=0.4D0
26089         VINT(231)=4D0
26090         IF(MSTP(57).LE.0) THEN
26091           SD=0D0
26092         ELSE
26093           Q2IN=MIN(2D3,MAX(4D0,Q2))
26094           SD=LOG(LOG(Q2IN/ALAM**2)/LOG(4D0/ALAM**2))
26095         ENDIF
26096  
26097 C...Calculate parton distributions.
26098         DO 120 KFL=1,4
26099           DO 110 IS=1,5
26100             TS(IS)=COW(1,IS,KFL,NSET)+COW(2,IS,KFL,NSET)*SD+
26101      &      COW(3,IS,KFL,NSET)*SD**2
26102   110     CONTINUE
26103           IF(KFL.EQ.1) THEN
26104             XQ(KFL)=X**TS(1)*(1D0-X)**TS(2)/EULBET(TS(1),TS(2)+1D0)
26105           ELSE
26106             XQ(KFL)=TS(1)*X**TS(2)*(1D0-X)**TS(3)*(1D0+TS(4)*X+
26107      &      TS(5)*X**2)
26108           ENDIF
26109   120   CONTINUE
26110  
26111 C...Put into output array.
26112         XPPI(0)=XQ(2)
26113         XPPI(1)=XQ(3)/6D0
26114         XPPI(2)=XQ(1)+XQ(3)/6D0
26115         XPPI(3)=XQ(3)/6D0
26116         XPPI(4)=XQ(4)
26117         XPPI(-1)=XQ(1)+XQ(3)/6D0
26118         XPPI(-2)=XQ(3)/6D0
26119         XPPI(-3)=XQ(3)/6D0
26120         XPPI(-4)=XQ(4)
26121  
26122 C...Leading order pion parton distributions from Gluck, Reya and Vogt.
26123 C...Allowed variable range: 0.25 GeV^2 < Q^2 < 10^8 GeV^2 and
26124 C...10^-5 < x < 1.
26125       ELSE
26126  
26127 C...Determine s expansion variable and some x expressions.
26128         VINT(231)=0.25D0
26129         IF(MSTP(57).LE.0) THEN
26130           SD=0D0
26131         ELSE
26132           Q2IN=MIN(1D8,MAX(0.25D0,Q2))
26133           SD=LOG(LOG(Q2IN/0.232D0**2)/LOG(0.25D0/0.232D0**2))
26134         ENDIF
26135         SD2=SD**2
26136         XL=-LOG(X)
26137         XS=SQRT(X)
26138  
26139 C...Evaluate valence, gluon and sea distributions.
26140         XFVAL=(0.519D0+0.180D0*SD-0.011D0*SD2)*X**(0.499D0-0.027D0*SD)*
26141      &  (1D0+(0.381D0-0.419D0*SD)*XS)*(1D0-X)**(0.367D0+0.563D0*SD)
26142         XFGLU=(X**(0.482D0+0.341D0*SQRT(SD))*((0.678D0+0.877D0*
26143      &  SD-0.175D0*SD2)+
26144      &  (0.338D0-1.597D0*SD)*XS+(-0.233D0*SD+0.406D0*SD2)*X)+
26145      &  SD**0.599D0*EXP(-(0.618D0+2.070D0*SD)+SQRT(3.676D0*SD**1.263D0*
26146      &  XL)))*
26147      &  (1D0-X)**(0.390D0+1.053D0*SD)
26148         XFSEA=SD**0.55D0*(1D0-0.748D0*XS+(0.313D0+0.935D0*SD)*X)*(1D0-
26149      &  X)**3.359D0*
26150      &  EXP(-(4.433D0+1.301D0*SD)+SQRT((9.30D0-0.887D0*SD)*SD**0.56D0*
26151      &  XL))/
26152      &  XL**(2.538D0-0.763D0*SD)
26153         IF(SD.LE.0.888D0) THEN
26154           XFCHM=0D0
26155         ELSE
26156           XFCHM=(SD-0.888D0)**1.02D0*(1D0+1.008D0*X)*(1D0-X)**(1.208D0+
26157      &    0.771D0*SD)*
26158      &    EXP(-(4.40D0+1.493D0*SD)+SQRT((2.032D0+1.901D0*SD)*SD**0.39D0*
26159      &    XL))
26160         ENDIF
26161         IF(SD.LE.1.351D0) THEN
26162           XFBOT=0D0
26163         ELSE
26164           XFBOT=(SD-1.351D0)**1.03D0*(1D0-X)**(0.697D0+0.855D0*SD)*
26165      &    EXP(-(4.51D0+1.490D0*SD)+SQRT((3.056D0+1.694D0*SD)*SD**0.39D0*
26166      &    XL))
26167         ENDIF
26168  
26169 C...Put into output array.
26170         XPPI(0)=XFGLU
26171         XPPI(1)=XFSEA
26172         XPPI(2)=XFSEA
26173         XPPI(3)=XFSEA
26174         XPPI(4)=XFCHM
26175         XPPI(5)=XFBOT
26176         DO 130 KFL=1,5
26177           XPPI(-KFL)=XPPI(KFL)
26178   130   CONTINUE
26179         XPPI(2)=XPPI(2)+XFVAL
26180         XPPI(-1)=XPPI(-1)+XFVAL
26181       ENDIF
26182  
26183       RETURN
26184       END
26185  
26186 C*********************************************************************
26187  
26188 C...PYPDPR
26189 C...Gives proton parton distributions according to a few different
26190 C...parametrizations.
26191  
26192       SUBROUTINE PYPDPR(X,Q2,XPPR)
26193  
26194 C...Double precision and integer declarations.
26195       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
26196       IMPLICIT INTEGER(I-N)
26197       INTEGER PYK,PYCHGE,PYCOMP
26198 C...Commonblocks.
26199       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
26200       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
26201       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
26202       COMMON/PYINT1/MINT(400),VINT(400)
26203       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
26204 C...Arrays and data.
26205       DIMENSION XPPR(-6:6),Q2MIN(16)
26206       DATA Q2MIN/ 2.56D0, 2.56D0, 2.56D0, 0.4D0, 0.4D0, 0.4D0,
26207      &1.0D0, 1.0D0, 2*0D0, 0.25D0, 5D0, 5D0, 4D0, 4D0, 0D0/
26208  
26209 C...Reset output array.
26210       DO 100 KFL=-6,6
26211         XPPR(KFL)=0D0
26212   100 CONTINUE
26213  
26214 C...Common preliminaries.
26215       NSET=MAX(1,MIN(16,MSTP(51)))
26216       IF(NSET.EQ.9.OR.NSET.EQ.10) NSET=6
26217       VINT(231)=Q2MIN(NSET)
26218       IF(MSTP(57).EQ.0) THEN
26219         Q2L=Q2MIN(NSET)
26220       ELSE
26221         Q2L=MAX(Q2MIN(NSET),Q2)
26222       ENDIF
26223  
26224       IF(NSET.GE.1.AND.NSET.LE.3) THEN
26225 C...Interface to the CTEQ 3 parton distributions.
26226         QRT=SQRT(MAX(1D0,Q2L))
26227  
26228 C...Loop over flavours.
26229         DO 110 I=-6,6
26230           IF(I.LE.0) THEN
26231             XPPR(I)=PYCTEQ(NSET,I,X,QRT)
26232           ELSEIF(I.LE.2) THEN
26233             XPPR(I)=PYCTEQ(NSET,I,X,QRT)+XPPR(-I)
26234           ELSE
26235             XPPR(I)=XPPR(-I)
26236           ENDIF
26237   110   CONTINUE
26238  
26239       ELSEIF(NSET.GE.4.AND.NSET.LE.6) THEN
26240 C...Interface to the GRV 94 distributions.
26241         IF(NSET.EQ.4) THEN
26242           CALL PYGRVL (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26243         ELSEIF(NSET.EQ.5) THEN
26244           CALL PYGRVM (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26245         ELSE
26246           CALL PYGRVD (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26247         ENDIF
26248  
26249 C...Put into output array.
26250         XPPR(0)=GL
26251         XPPR(-1)=0.5D0*(UDB+DEL)
26252         XPPR(-2)=0.5D0*(UDB-DEL)
26253         XPPR(-3)=SB
26254         XPPR(-4)=CHM
26255         XPPR(-5)=BOT
26256         XPPR(1)=DV+XPPR(-1)
26257         XPPR(2)=UV+XPPR(-2)
26258         XPPR(3)=SB
26259         XPPR(4)=CHM
26260         XPPR(5)=BOT
26261  
26262       ELSEIF(NSET.EQ.7) THEN
26263 C...Interface to the CTEQ 5L parton distributions.
26264 C...Range of validity 10^-6 < x < 1, 1 < Q < 10^4 extended by
26265 C...freezing x*f(x,Q2) at borders. 
26266         QRT=SQRT(MAX(1D0,MIN(1D4,Q2L)))
26267         XIN=MAX(1D-6,MIN(1D0,X))
26268  
26269 C...Loop over flavours (with u <-> d notation mismatch).
26270         SUMUDB=PYCT5L(-1,XIN,QRT)
26271         RATUDB=PYCT5L(-2,XIN,QRT)
26272         DO 120 I=-5,2
26273           IF(I.EQ.1) THEN
26274             XPPR(I)=XIN*PYCT5L(2,XIN,QRT)
26275           ELSEIF(I.EQ.2) THEN
26276             XPPR(I)=XIN*PYCT5L(1,XIN,QRT)
26277           ELSEIF(I.EQ.-1) THEN
26278             XPPR(I)=XIN*SUMUDB*RATUDB/(1D0+RATUDB)
26279           ELSEIF(I.EQ.-2) THEN
26280             XPPR(I)=XIN*SUMUDB/(1D0+RATUDB)
26281           ELSE
26282             XPPR(I)=XIN*PYCT5L(I,XIN,QRT)
26283             IF(I.LT.0) XPPR(-I)=XPPR(I)
26284           ENDIF
26285   120   CONTINUE
26286  
26287       ELSEIF(NSET.EQ.8) THEN
26288 C...Interface to the CTEQ 5M1 parton distributions.
26289         QRT=SQRT(MAX(1D0,MIN(1D4,Q2L)))
26290         XIN=MAX(1D-6,MIN(1D0,X))
26291  
26292 C...Loop over flavours (with u <-> d notation mismatch).
26293         SUMUDB=PYCT5M(-1,XIN,QRT)
26294         RATUDB=PYCT5M(-2,XIN,QRT)
26295         DO 130 I=-5,2
26296           IF(I.EQ.1) THEN
26297             XPPR(I)=XIN*PYCT5M(2,XIN,QRT)
26298           ELSEIF(I.EQ.2) THEN
26299             XPPR(I)=XIN*PYCT5M(1,XIN,QRT)
26300           ELSEIF(I.EQ.-1) THEN
26301             XPPR(I)=XIN*SUMUDB*RATUDB/(1D0+RATUDB)
26302           ELSEIF(I.EQ.-2) THEN
26303             XPPR(I)=XIN*SUMUDB/(1D0+RATUDB)
26304           ELSE
26305             XPPR(I)=XIN*PYCT5M(I,XIN,QRT)
26306             IF(I.LT.0) XPPR(-I)=XPPR(I)
26307           ENDIF
26308   130   CONTINUE
26309  
26310       ELSEIF(NSET.GE.11.AND.NSET.LE.15) THEN
26311 C...GRV92LO, EHLQ1, EHLQ2, DO1 AND DO2 distributions:
26312 C...obsolete but offers backwards compatibility. 
26313         CALL PYPDPO(X,Q2L,XPPR) 
26314  
26315 C...Symmetric choice for debugging only
26316       ELSEIF(NSET.EQ.16) THEN
26317         XPPR(0)=.5D0/X
26318         XPPR(1)=.05D0/X
26319         XPPR(2)=.05D0/X
26320         XPPR(3)=.05D0/X
26321         XPPR(4)=.05D0/X
26322         XPPR(5)=.05D0/X
26323         XPPR(-1)=.05D0/X
26324         XPPR(-2)=.05D0/X
26325         XPPR(-3)=.05D0/X
26326         XPPR(-4)=.05D0/X
26327         XPPR(-5)=.05D0/X
26328  
26329       ENDIF
26330  
26331       RETURN
26332       END
26333  
26334 C*********************************************************************
26335  
26336 C...PYCTEQ
26337 C...Gives the CTEQ 3 parton distribution function sets in
26338 C...parametrized form, of October 24, 1994.
26339 C...Authors: H.L. Lai, J. Botts, J. Huston, J.G. Morfin, J.F. Owens,
26340 C...J. Qiu, W.K. Tung and H. Weerts.
26341  
26342       FUNCTION PYCTEQ (ISET, IPRT, X, Q)
26343  
26344 C...Double precision declaration.
26345       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
26346       IMPLICIT INTEGER(I-N)
26347  
26348 C...Data on Lambda values of fits, minimum Q and quark masses.
26349       DIMENSION ALM(3), QMS(4:6)
26350       DATA ALM / 0.177D0, 0.239D0, 0.247D0 /
26351       DATA QMN / 1.60D0 /, (QMS(I), I=4,6) / 1.60D0, 5.00D0, 180.0D0 /
26352  
26353 C....Check flavour thresholds. Set up QI for SB.
26354       IP = IABS(IPRT)
26355       IF(IP .GE. 4) THEN
26356         IF(Q .LE. QMS(IP)) THEN
26357           PYCTEQ = 0D0
26358           RETURN
26359         ENDIF
26360         QI = QMS(IP)
26361       ELSE
26362         QI = QMN
26363       ENDIF
26364  
26365 C...Use "standard lambda" of parametrization program for expansion.
26366       ALAM = ALM (ISET)
26367       SBL = LOG(Q/ALAM) / LOG(QI/ALAM)
26368       SB = LOG (SBL)
26369       SB2 = SB*SB
26370       SB3 = SB2*SB
26371  
26372 C...Expansion for CTEQ3L.
26373       IF(ISET .EQ. 1) THEN
26374         IF(IPRT .EQ. 2) THEN
26375           A0=Exp( 0.1907D+00+0.4205D-01*SB +0.2752D+00*SB2-
26376      &    0.3171D+00*SB3)
26377           A1= 0.4611D+00+0.2331D-01*SB -0.3403D-01*SB2+0.3174D-01*SB3
26378           A2= 0.3504D+01+0.5739D+00*SB +0.2676D+00*SB2-0.1553D+00*SB3
26379           A3= 0.7452D+01-0.6742D+01*SB +0.2849D+01*SB2-0.1964D+00*SB3
26380           A4= 0.1116D+01-0.3435D+00*SB +0.2865D+00*SB2-0.1288D+00*SB3
26381           A5= 0.6659D-01+0.2714D+00*SB -0.2688D+00*SB2+0.2763D+00*SB3
26382         ELSEIF(IPRT .EQ. 1) THEN
26383           A0=Exp( 0.1141D+00+0.4764D+00*SB -0.1745D+01*SB2+
26384      &    0.7728D+00*SB3)
26385           A1= 0.4275D+00-0.1290D+00*SB +0.3609D+00*SB2-0.1689D+00*SB3
26386           A2= 0.3000D+01+0.2946D+01*SB -0.4117D+01*SB2+0.1989D+01*SB3
26387           A3=-0.1302D+01+0.2322D+01*SB -0.4258D+01*SB2+0.2109D+01*SB3
26388           A4= 0.2586D+01-0.1920D+00*SB -0.3754D+00*SB2+0.2731D+00*SB3
26389           A5=-0.2251D+00-0.5374D+00*SB +0.2245D+01*SB2-0.1034D+01*SB3
26390         ELSEIF(IPRT .EQ. 0) THEN
26391           A0=Exp(-0.7631D+00-0.7241D+00*SB -0.1170D+01*SB2+
26392      &    0.5343D+00*SB3)
26393           A1=-0.3573D+00+0.3469D+00*SB -0.3396D+00*SB2+0.9188D-01*SB3
26394           A2= 0.5604D+01+0.7458D+00*SB -0.5082D+00*SB2+0.1844D+00*SB3
26395           A3= 0.1549D+02-0.1809D+02*SB +0.1162D+02*SB2-0.3483D+01*SB3
26396           A4= 0.9881D+00+0.1364D+00*SB -0.4421D+00*SB2+0.2051D+00*SB3
26397           A5=-0.9505D-01+0.3259D+01*SB -0.1547D+01*SB2+0.2918D+00*SB3
26398         ELSEIF(IPRT .EQ. -1) THEN
26399           A0=Exp(-0.2449D+01-0.3513D+01*SB +0.4529D+01*SB2-
26400      &    0.2031D+01*SB3)
26401           A1=-0.4050D+00+0.3411D+00*SB -0.3669D+00*SB2+0.1109D+00*SB3
26402           A2= 0.7470D+01-0.2982D+01*SB +0.5503D+01*SB2-0.2419D+01*SB3
26403           A3= 0.1503D+02+0.1638D+01*SB -0.8772D+01*SB2+0.3852D+01*SB3
26404           A4= 0.1137D+01-0.1006D+01*SB +0.1485D+01*SB2-0.6389D+00*SB3
26405           A5=-0.5299D+00+0.3160D+01*SB -0.3104D+01*SB2+0.1219D+01*SB3
26406         ELSEIF(IPRT .EQ. -2) THEN
26407           A0=Exp(-0.2740D+01-0.7987D-01*SB -0.9015D+00*SB2-
26408      &    0.9872D-01*SB3)
26409           A1=-0.3909D+00+0.1244D+00*SB -0.4487D-01*SB2+0.1277D-01*SB3
26410           A2= 0.9163D+01+0.2823D+00*SB -0.7720D+00*SB2-0.9360D-02*SB3
26411           A3= 0.1080D+02-0.3915D+01*SB -0.1153D+01*SB2+0.2649D+01*SB3
26412           A4= 0.9894D+00-0.1647D+00*SB -0.9426D-02*SB2+0.2945D-02*SB3
26413           A5=-0.3395D+00+0.6998D+00*SB +0.7000D+00*SB2-0.6730D-01*SB3
26414         ELSEIF(IPRT .EQ. -3) THEN
26415           A0=Exp(-0.3640D+01+0.1250D+01*SB -0.2914D+01*SB2+
26416      &    0.8390D+00*SB3)
26417           A1=-0.3595D+00-0.5259D-01*SB +0.3122D+00*SB2-0.1642D+00*SB3
26418           A2= 0.7305D+01+0.9727D+00*SB -0.9788D+00*SB2-0.5193D-01*SB3
26419           A3= 0.1198D+02-0.1799D+02*SB +0.2614D+02*SB2-0.1091D+02*SB3
26420           A4= 0.9882D+00-0.6101D+00*SB +0.9737D+00*SB2-0.4935D+00*SB3
26421           A5=-0.1186D+00-0.3231D+00*SB +0.3074D+01*SB2-0.1274D+01*SB3
26422         ELSEIF(IPRT .EQ. -4) THEN
26423           A0=SB** 0.1122D+01*Exp(-0.3718D+01-0.1335D+01*SB +
26424      &    0.1651D-01*SB2)
26425           A1=-0.4719D+00+0.7509D+00*SB -0.8420D+00*SB2+0.2901D+00*SB3
26426           A2= 0.6194D+01-0.1641D+01*SB +0.4907D+01*SB2-0.2523D+01*SB3
26427           A3= 0.4426D+01-0.4270D+01*SB +0.6581D+01*SB2-0.3474D+01*SB3
26428           A4= 0.2683D+00+0.9876D+00*SB -0.7612D+00*SB2+0.1780D+00*SB3
26429           A5=-0.4547D+00+0.4410D+01*SB -0.3712D+01*SB2+0.1245D+01*SB3
26430         ELSEIF(IPRT .EQ. -5) THEN
26431           A0=SB** 0.9838D+00*Exp(-0.2548D+01-0.7660D+01*SB +
26432      &    0.3702D+01*SB2)
26433           A1=-0.3122D+00-0.2120D+00*SB +0.5716D+00*SB2-0.3773D+00*SB3
26434           A2= 0.6257D+01-0.8214D-01*SB -0.2537D+01*SB2+0.2981D+01*SB3
26435           A3=-0.6723D+00+0.2131D+01*SB +0.9599D+01*SB2-0.7910D+01*SB3
26436           A4= 0.9169D-01+0.4295D-01*SB -0.5017D+00*SB2+0.3811D+00*SB3
26437           A5= 0.2402D+00+0.2656D+01*SB -0.1586D+01*SB2+0.2880D+00*SB3
26438         ELSEIF(IPRT .EQ. -6) THEN
26439           A0=SB** 0.1001D+01*Exp(-0.6934D+01+0.3050D+01*SB -
26440      &    0.6943D+00*SB2)
26441           A1=-0.1713D+00-0.5167D+00*SB +0.1241D+01*SB2-0.1703D+01*SB3
26442           A2= 0.6169D+01+0.3023D+01*SB -0.1972D+02*SB2+0.1069D+02*SB3
26443           A3= 0.4439D+01-0.1746D+02*SB +0.1225D+02*SB2+0.8350D+00*SB3
26444           A4= 0.5458D+00-0.4586D+00*SB +0.9089D+00*SB2-0.4049D+00*SB3
26445           A5= 0.3207D+01-0.3362D+01*SB +0.5877D+01*SB2-0.7659D+01*SB3
26446         ENDIF
26447  
26448 C...Expansion for CTEQ3M.
26449       ELSEIF(ISET .EQ. 2) THEN
26450         IF(IPRT .EQ. 2) THEN
26451           A0=Exp( 0.2259D+00+0.1237D+00*SB +0.3035D+00*SB2-
26452      &    0.2935D+00*SB3)
26453           A1= 0.5085D+00+0.1651D-01*SB -0.3592D-01*SB2+0.2782D-01*SB3
26454           A2= 0.3732D+01+0.4901D+00*SB +0.2218D+00*SB2-0.1116D+00*SB3
26455           A3= 0.7011D+01-0.6620D+01*SB +0.2557D+01*SB2-0.1360D+00*SB3
26456           A4= 0.8969D+00-0.2429D+00*SB +0.1811D+00*SB2-0.6888D-01*SB3
26457           A5= 0.8636D-01+0.2558D+00*SB -0.3082D+00*SB2+0.2535D+00*SB3
26458         ELSEIF(IPRT .EQ. 1) THEN
26459           A0=Exp(-0.7266D+00-0.1584D+01*SB +0.1259D+01*SB2-
26460      &    0.4305D-01*SB3)
26461           A1= 0.5285D+00-0.3721D+00*SB +0.5150D+00*SB2-0.1697D+00*SB3
26462           A2= 0.4075D+01+0.8282D+00*SB -0.4496D+00*SB2+0.2107D+00*SB3
26463           A3= 0.3279D+01+0.5066D+01*SB -0.9134D+01*SB2+0.2897D+01*SB3
26464           A4= 0.4399D+00-0.5888D+00*SB +0.4802D+00*SB2-0.1664D+00*SB3
26465           A5= 0.3678D+00-0.8929D+00*SB +0.1592D+01*SB2-0.5713D+00*SB3
26466         ELSEIF(IPRT .EQ. 0) THEN
26467           A0=Exp(-0.2318D+00-0.9779D+00*SB -0.3783D+00*SB2+
26468      &    0.1037D-01*SB3)
26469           A1=-0.2916D+00+0.1754D+00*SB -0.1884D+00*SB2+0.6116D-01*SB3
26470           A2= 0.5349D+01+0.7460D+00*SB +0.2319D+00*SB2-0.2622D+00*SB3
26471           A3= 0.6920D+01-0.3454D+01*SB +0.2027D+01*SB2-0.7626D+00*SB3
26472           A4= 0.1013D+01+0.1423D+00*SB -0.1798D+00*SB2+0.1872D-01*SB3
26473           A5=-0.5465D-01+0.2303D+01*SB -0.9584D+00*SB2+0.3098D+00*SB3
26474         ELSEIF(IPRT .EQ. -1) THEN
26475           A0=Exp(-0.2328D+01-0.3061D+01*SB +0.3620D+01*SB2-
26476      &    0.1602D+01*SB3)
26477           A1=-0.3358D+00+0.3198D+00*SB -0.4210D+00*SB2+0.1571D+00*SB3
26478           A2= 0.8478D+01-0.3112D+01*SB +0.5243D+01*SB2-0.2255D+01*SB3
26479           A3= 0.1971D+02+0.3389D+00*SB -0.5268D+01*SB2+0.2099D+01*SB3
26480           A4= 0.1128D+01-0.4701D+00*SB +0.7779D+00*SB2-0.3506D+00*SB3
26481           A5=-0.4708D+00+0.3341D+01*SB -0.3375D+01*SB2+0.1353D+01*SB3
26482         ELSEIF(IPRT .EQ. -2) THEN
26483           A0=Exp(-0.2906D+01-0.1069D+00*SB -0.1055D+01*SB2+
26484      &    0.2496D+00*SB3)
26485           A1=-0.2875D+00+0.6571D-01*SB -0.1987D-01*SB2-0.1800D-02*SB3
26486           A2= 0.9854D+01-0.2715D+00*SB -0.7407D+00*SB2+0.2888D+00*SB3
26487           A3= 0.1583D+02-0.7687D+01*SB +0.3428D+01*SB2-0.3327D+00*SB3
26488           A4= 0.9763D+00+0.7599D-01*SB -0.2128D+00*SB2+0.6852D-01*SB3
26489           A5=-0.8444D-02+0.9434D+00*SB +0.4152D+00*SB2-0.1481D+00*SB3
26490         ELSEIF(IPRT .EQ. -3) THEN
26491           A0=Exp(-0.3780D+01+0.2499D+01*SB -0.4962D+01*SB2+
26492      &    0.1936D+01*SB3)
26493           A1=-0.2639D+00-0.1575D+00*SB +0.3584D+00*SB2-0.1646D+00*SB3
26494           A2= 0.8082D+01+0.2794D+01*SB -0.5438D+01*SB2+0.2321D+01*SB3
26495           A3= 0.1811D+02-0.2000D+02*SB +0.1951D+02*SB2-0.6904D+01*SB3
26496           A4= 0.9822D+00+0.4972D+00*SB -0.8690D+00*SB2+0.3415D+00*SB3
26497           A5= 0.1772D+00-0.6078D+00*SB +0.3341D+01*SB2-0.1473D+01*SB3
26498         ELSEIF(IPRT .EQ. -4) THEN
26499           A0=SB** 0.1122D+01*Exp(-0.4232D+01-0.1808D+01*SB +
26500      &    0.5348D+00*SB2)
26501           A1=-0.2824D+00+0.5846D+00*SB -0.7230D+00*SB2+0.2419D+00*SB3
26502           A2= 0.5683D+01-0.2948D+01*SB +0.5916D+01*SB2-0.2560D+01*SB3
26503           A3= 0.2051D+01+0.4795D+01*SB -0.4271D+01*SB2+0.4174D+00*SB3
26504           A4= 0.1737D+00+0.1717D+01*SB -0.1978D+01*SB2+0.6643D+00*SB3
26505           A5= 0.8689D+00+0.3500D+01*SB -0.3283D+01*SB2+0.1026D+01*SB3
26506         ELSEIF(IPRT .EQ. -5) THEN
26507           A0=SB** 0.9906D+00*Exp(-0.1496D+01-0.6576D+01*SB +
26508      &    0.1569D+01*SB2)
26509           A1=-0.2140D+00-0.6419D-01*SB -0.2741D-02*SB2+0.3185D-02*SB3
26510           A2= 0.5781D+01+0.1049D+00*SB -0.3930D+00*SB2+0.5174D+00*SB3
26511           A3=-0.9420D+00+0.5511D+00*SB +0.8817D+00*SB2+0.1903D+01*SB3
26512           A4= 0.2418D-01+0.4232D-01*SB -0.1244D-01*SB2-0.2365D-01*SB3
26513           A5= 0.7664D+00+0.1794D+01*SB -0.4917D+00*SB2-0.1284D+00*SB3
26514         ELSEIF(IPRT .EQ. -6) THEN
26515           A0=SB** 0.1000D+01*Exp(-0.8460D+01+0.1154D+01*SB +
26516      &    0.8838D+01*SB2)
26517           A1=-0.4316D-01-0.2976D+00*SB +0.3174D+00*SB2-0.1429D+01*SB3
26518           A2= 0.4910D+01+0.2273D+01*SB +0.5631D+01*SB2-0.1994D+02*SB3
26519           A3= 0.1190D+02-0.2000D+02*SB -0.2000D+02*SB2+0.1292D+02*SB3
26520           A4= 0.5771D+00-0.2552D+00*SB +0.7510D+00*SB2+0.6923D+00*SB3
26521           A5= 0.4402D+01-0.1627D+01*SB -0.2085D+01*SB2-0.6737D+01*SB3
26522         ENDIF
26523  
26524 C...Expansion for CTEQ3D.
26525       ELSEIF(ISET .EQ. 3) THEN
26526         IF(IPRT .EQ. 2) THEN
26527           A0=Exp( 0.2148D+00+0.5814D-01*SB +0.2734D+00*SB2-
26528      &    0.2902D+00*SB3)
26529           A1= 0.4810D+00+0.1657D-01*SB -0.3800D-01*SB2+0.3125D-01*SB3
26530           A2= 0.3509D+01+0.3923D+00*SB +0.4010D+00*SB2-0.1932D+00*SB3
26531           A3= 0.7055D+01-0.6552D+01*SB +0.3466D+01*SB2-0.5657D+00*SB3
26532           A4= 0.1061D+01-0.3453D+00*SB +0.4089D+00*SB2-0.1817D+00*SB3
26533           A5= 0.8687D-01+0.2548D+00*SB -0.2967D+00*SB2+0.2647D+00*SB3
26534         ELSEIF(IPRT .EQ. 1) THEN
26535           A0=Exp( 0.3961D+00+0.4914D+00*SB -0.1728D+01*SB2+
26536      &    0.7257D+00*SB3)
26537           A1= 0.4162D+00-0.1419D+00*SB +0.3680D+00*SB2-0.1618D+00*SB3
26538           A2= 0.3248D+01+0.3028D+01*SB -0.4307D+01*SB2+0.1920D+01*SB3
26539           A3=-0.1100D+01+0.2184D+01*SB -0.3820D+01*SB2+0.1717D+01*SB3
26540           A4= 0.2082D+01-0.2756D+00*SB +0.3043D+00*SB2-0.1260D+00*SB3
26541           A5=-0.4822D+00-0.5706D+00*SB +0.2243D+01*SB2-0.9760D+00*SB3
26542         ELSEIF(IPRT .EQ. 0) THEN
26543           A0=Exp(-0.4665D+00-0.7554D+00*SB -0.3323D+00*SB2-
26544      &    0.2734D-04*SB3)
26545           A1=-0.3359D+00+0.2395D+00*SB -0.2377D+00*SB2+0.7059D-01*SB3
26546           A2= 0.5451D+01+0.6086D+00*SB +0.8606D-01*SB2-0.1425D+00*SB3
26547           A3= 0.1026D+02-0.9352D+01*SB +0.4879D+01*SB2-0.1150D+01*SB3
26548           A4= 0.9935D+00-0.5017D-01*SB -0.1707D-01*SB2-0.1464D-02*SB3
26549           A5=-0.4160D-01+0.2305D+01*SB -0.1063D+01*SB2+0.3211D+00*SB3
26550         ELSEIF(IPRT .EQ. -1) THEN
26551           A0=Exp(-0.2714D+01-0.2868D+01*SB +0.3700D+01*SB2-
26552      &    0.1671D+01*SB3)
26553           A1=-0.3893D+00+0.3341D+00*SB -0.3897D+00*SB2+0.1420D+00*SB3
26554           A2= 0.8359D+01-0.3267D+01*SB +0.5327D+01*SB2-0.2245D+01*SB3
26555           A3= 0.2359D+02-0.5669D+01*SB -0.4602D+01*SB2+0.3153D+01*SB3
26556           A4= 0.1106D+01-0.4745D+00*SB +0.7739D+00*SB2-0.3417D+00*SB3
26557           A5=-0.5557D+00+0.3433D+01*SB -0.3390D+01*SB2+0.1354D+01*SB3
26558         ELSEIF(IPRT .EQ. -2) THEN
26559           A0=Exp(-0.3323D+01+0.2296D+00*SB -0.1109D+01*SB2+
26560      &    0.2223D+00*SB3)
26561           A1=-0.3410D+00+0.8847D-01*SB -0.1111D-01*SB2-0.5927D-02*SB3
26562           A2= 0.9753D+01-0.5182D+00*SB -0.4670D+00*SB2+0.1921D+00*SB3
26563           A3= 0.1977D+02-0.1600D+02*SB +0.9481D+01*SB2-0.1864D+01*SB3
26564           A4= 0.9818D+00+0.2839D-02*SB -0.1188D+00*SB2+0.3584D-01*SB3
26565           A5=-0.7934D-01+0.1004D+01*SB +0.3704D+00*SB2-0.1220D+00*SB3
26566         ELSEIF(IPRT .EQ. -3) THEN
26567           A0=Exp(-0.3985D+01+0.2855D+01*SB -0.5208D+01*SB2+
26568      &    0.1937D+01*SB3)
26569           A1=-0.3337D+00-0.1150D+00*SB +0.3691D+00*SB2-0.1709D+00*SB3
26570           A2= 0.7968D+01+0.3641D+01*SB -0.6599D+01*SB2+0.2642D+01*SB3
26571           A3= 0.1873D+02-0.1999D+02*SB +0.1734D+02*SB2-0.5813D+01*SB3
26572           A4= 0.9731D+00+0.5082D+00*SB -0.8780D+00*SB2+0.3231D+00*SB3
26573           A5=-0.5542D-01-0.4189D+00*SB +0.3309D+01*SB2-0.1439D+01*SB3
26574         ELSEIF(IPRT .EQ. -4) THEN
26575           A0=SB** 0.1105D+01*Exp(-0.3952D+01-0.1901D+01*SB +
26576      &    0.5137D+00*SB2)
26577           A1=-0.3543D+00+0.6055D+00*SB -0.6941D+00*SB2+0.2278D+00*SB3
26578           A2= 0.5955D+01-0.2629D+01*SB +0.5337D+01*SB2-0.2300D+01*SB3
26579           A3= 0.1933D+01+0.4882D+01*SB -0.3810D+01*SB2+0.2290D+00*SB3
26580           A4= 0.1806D+00+0.1655D+01*SB -0.1893D+01*SB2+0.6395D+00*SB3
26581           A5= 0.4790D+00+0.3612D+01*SB -0.3152D+01*SB2+0.9684D+00*SB3
26582         ELSEIF(IPRT .EQ. -5) THEN
26583           A0=SB** 0.9818D+00*Exp(-0.1825D+01-0.7464D+01*SB +
26584      &    0.2143D+01*SB2)
26585           A1=-0.2604D+00-0.1400D+00*SB +0.1702D+00*SB2-0.8476D-01*SB3
26586           A2= 0.6005D+01+0.6275D+00*SB -0.2535D+01*SB2+0.2219D+01*SB3
26587           A3=-0.9067D+00+0.1149D+01*SB +0.1974D+01*SB2+0.4716D+01*SB3
26588           A4= 0.3915D-01+0.5945D-01*SB -0.9844D-01*SB2+0.2783D-01*SB3
26589           A5= 0.5500D+00+0.1994D+01*SB -0.6727D+00*SB2-0.1510D+00*SB3
26590         ELSEIF(IPRT .EQ. -6) THEN
26591           A0=SB** 0.1002D+01*Exp(-0.8553D+01+0.3793D+00*SB +
26592      &    0.9998D+01*SB2)
26593           A1=-0.5870D-01-0.2792D+00*SB +0.6526D+00*SB2-0.1984D+01*SB3
26594           A2= 0.4716D+01+0.4473D+00*SB +0.1128D+02*SB2-0.1937D+02*SB3
26595           A3= 0.1289D+02-0.1742D+02*SB -0.1983D+02*SB2-0.9274D+00*SB3
26596           A4= 0.5647D+00-0.2732D+00*SB +0.1074D+01*SB2+0.5981D+00*SB3
26597           A5= 0.4390D+01-0.1262D+01*SB -0.9026D+00*SB2-0.9394D+01*SB3
26598         ENDIF
26599       ENDIF
26600  
26601 C...Calculation of x * f(x, Q).
26602       PYCTEQ = MAX(0D0, A0 *(X**A1) *((1D0-X)**A2) *(1D0+A3*(X**A4))
26603      &   *(LOG(1D0+1D0/X))**A5 )
26604  
26605       RETURN
26606       END
26607  
26608 C*********************************************************************
26609  
26610 C...PYGRVL
26611 C...Gives the GRV 94 L (leading order) parton distribution function set
26612 C...in parametrized form.
26613 C...Authors: M. Glueck, E. Reya and A. Vogt.
26614  
26615       SUBROUTINE PYGRVL (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26616  
26617 C...Double precision declaration.
26618       IMPLICIT DOUBLE PRECISION (A - Z)
26619  
26620 C...Common expressions.
26621       MU2  = 0.23D0
26622       LAM2 = 0.2322D0 * 0.2322D0
26623       S  = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
26624       DS = SQRT (S)
26625       S2 = S * S
26626       S3 = S2 * S
26627  
26628 C...uv :
26629       NU  =  2.284D0 + 0.802D0 * S + 0.055D0 * S2
26630       AKU =  0.590D0 - 0.024D0 * S
26631       BKU =  0.131D0 + 0.063D0 * S
26632       AU  = -0.449D0 - 0.138D0 * S - 0.076D0 * S2
26633       BU  =  0.213D0 + 2.669D0 * S - 0.728D0 * S2
26634       CU  =  8.854D0 - 9.135D0 * S + 1.979D0 * S2
26635       DU  =  2.997D0 + 0.753D0 * S - 0.076D0 * S2
26636       UV  = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
26637  
26638 C...dv :
26639       ND  =  0.371D0 + 0.083D0 * S + 0.039D0 * S2
26640       AKD =  0.376D0
26641       BKD =  0.486D0 + 0.062D0 * S
26642       AD  = -0.509D0 + 3.310D0 * S - 1.248D0 * S2
26643       BD  =  12.41D0 - 10.52D0 * S + 2.267D0 * S2
26644       CD  =  6.373D0 - 6.208D0 * S + 1.418D0 * S2
26645       DD  =  3.691D0 + 0.799D0 * S - 0.071D0 * S2
26646       DV  = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
26647  
26648 C...del :
26649       NE  =  0.082D0 + 0.014D0 * S + 0.008D0 * S2
26650       AKE =  0.409D0 - 0.005D0 * S
26651       BKE =  0.799D0 + 0.071D0 * S
26652       AE  = -38.07D0 + 36.13D0 * S - 0.656D0 * S2
26653       BE  =  90.31D0 - 74.15D0 * S + 7.645D0 * S2
26654       CE  =  0.0D0
26655       DE  =  7.486D0 + 1.217D0 * S - 0.159D0 * S2
26656       DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
26657  
26658 C...udb :
26659       ALX =  1.451D0
26660       BEX =  0.271D0
26661       AKX =  0.410D0 - 0.232D0 * S
26662       BKX =  0.534D0 - 0.457D0 * S
26663       AGX =  0.890D0 - 0.140D0 * S
26664       BGX = -0.981D0
26665       CX  =  0.320D0 + 0.683D0 * S
26666       DX  =  4.752D0 + 1.164D0 * S + 0.286D0 * S2
26667       EX  =  4.119D0 + 1.713D0 * S
26668       ESX =  0.682D0 + 2.978D0 * S
26669       UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
26670      & DX, EX, ESX)
26671  
26672 C...sb :
26673       STS =  0D0
26674       ALS =  0.914D0
26675       BES =  0.577D0
26676       AKS =  1.798D0 - 0.596D0 * S
26677       AS  = -5.548D0 + 3.669D0 * DS - 0.616D0 * S
26678       BS  =  18.92D0 - 16.73D0 * DS + 5.168D0 * S
26679       DST =  6.379D0 - 0.350D0 * S  + 0.142D0 * S2
26680       EST =  3.981D0 + 1.638D0 * S
26681       ESS =  6.402D0
26682       SB  = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
26683  
26684 C...cb :
26685       STC =  0.888D0
26686       ALC =  1.01D0
26687       BEC =  0.37D0
26688       AKC =  0D0
26689       AC  =  0D0
26690       BC  =  4.24D0  - 0.804D0 * S
26691       DCT =  3.46D0  - 1.076D0 * S
26692       ECT =  4.61D0  + 1.49D0  * S
26693       ESC =  2.555D0 + 1.961D0 * S
26694       CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
26695  
26696 C...bb :
26697       STB =  1.351D0
26698       ALB =  1.00D0
26699       BEB =  0.51D0
26700       AKB =  0D0
26701       AB  =  0D0
26702       BB  =  1.848D0
26703       DBT =  2.929D0 + 1.396D0 * S
26704       EBT =  4.71D0  + 1.514D0 * S
26705       ESB =  4.02D0  + 1.239D0 * S
26706       BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
26707  
26708 C...gl :
26709       ALG =  0.524D0
26710       BEG =  1.088D0
26711       AKG =  1.742D0 - 0.930D0 * S
26712       BKG =                         - 0.399D0 * S2
26713       AG  =  7.486D0 - 2.185D0 * S
26714       BG  =  16.69D0 - 22.74D0 * S  + 5.779D0 * S2
26715       CG  = -25.59D0 + 29.71D0 * S  - 7.296D0 * S2
26716       DG  =  2.792D0 + 2.215D0 * S  + 0.422D0 * S2 - 0.104D0 * S3
26717       EG  =  0.807D0 + 2.005D0 * S
26718       ESG =  3.841D0 + 0.316D0 * S
26719       GL  = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG,
26720      & DG, EG, ESG)
26721  
26722       RETURN
26723       END
26724  
26725 C*********************************************************************
26726  
26727 C...PYGRVM
26728 C...Gives the GRV 94 M (MSbar) parton distribution function set
26729 C...in parametrized form.
26730 C...Authors: M. Glueck, E. Reya and A. Vogt.
26731  
26732       SUBROUTINE PYGRVM (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26733  
26734 C...Double precision declaration.
26735       IMPLICIT DOUBLE PRECISION (A - Z)
26736  
26737 C...Common expressions.
26738       MU2  = 0.34D0
26739       LAM2 = 0.248D0 * 0.248D0
26740       S  = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
26741       DS = SQRT (S)
26742       S2 = S * S
26743       S3 = S2 * S
26744  
26745 C...uv :
26746       NU  =  1.304D0 + 0.863D0 * S
26747       AKU =  0.558D0 - 0.020D0 * S
26748       BKU =          0.183D0 * S
26749       AU  = -0.113D0 + 0.283D0 * S - 0.321D0 * S2
26750       BU  =  6.843D0 - 5.089D0 * S + 2.647D0 * S2 - 0.527D0 * S3
26751       CU  =  7.771D0 - 10.09D0 * S + 2.630D0 * S2
26752       DU  =  3.315D0 + 1.145D0 * S - 0.583D0 * S2 + 0.154D0 * S3
26753       UV  = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
26754  
26755 C...dv :
26756       ND  =  0.102D0 - 0.017D0 * S + 0.005D0 * S2
26757       AKD =  0.270D0 - 0.019D0 * S
26758       BKD =  0.260D0
26759       AD  =  2.393D0 + 6.228D0 * S - 0.881D0 * S2
26760       BD  =  46.06D0 + 4.673D0 * S - 14.98D0 * S2 + 1.331D0 * S3
26761       CD  =  17.83D0 - 53.47D0 * S + 21.24D0 * S2
26762       DD  =  4.081D0 + 0.976D0 * S - 0.485D0 * S2 + 0.152D0 * S3
26763       DV  = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
26764  
26765 C...del :
26766       NE  =  0.070D0 + 0.042D0 * S - 0.011D0 * S2 + 0.004D0 * S3
26767       AKE =  0.409D0 - 0.007D0 * S
26768       BKE =  0.782D0 + 0.082D0 * S
26769       AE  = -29.65D0 + 26.49D0 * S + 5.429D0 * S2
26770       BE  =  90.20D0 - 74.97D0 * S + 4.526D0 * S2
26771       CE  =  0.0D0
26772       DE  =  8.122D0 + 2.120D0 * S - 1.088D0 * S2 + 0.231D0 * S3
26773       DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
26774  
26775 C...udb :
26776       ALX =  0.877D0
26777       BEX =  0.561D0
26778       AKX =  0.275D0
26779       BKX =  0.0D0
26780       AGX =  0.997D0
26781       BGX =  3.210D0 - 1.866D0 * S
26782       CX  =  7.300D0
26783       DX  =  9.010D0 + 0.896D0 * DS + 0.222D0 * S2
26784       EX  =  3.077D0 + 1.446D0 * S
26785       ESX =  3.173D0 - 2.445D0 * DS + 2.207D0 * S
26786       UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
26787      & DX, EX, ESX)
26788  
26789 C...sb :
26790       STS =  0D0
26791       ALS =  0.756D0
26792       BES =  0.216D0
26793       AKS =  1.690D0 + 0.650D0 * DS - 0.922D0 * S
26794       AS  = -4.329D0 + 1.131D0 * S
26795       BS  =  9.568D0 - 1.744D0 * S
26796       DST =  9.377D0 + 1.088D0 * DS - 1.320D0 * S + 0.130D0 * S2
26797       EST =  3.031D0 + 1.639D0 * S
26798       ESS =  5.837D0 + 0.815D0 * S
26799       SB  = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
26800  
26801 C...cb :
26802       STC =  0.820D0
26803       ALC =  0.98D0
26804       BEC =  0D0
26805       AKC = -0.625D0 - 0.523D0 * S
26806       AC  =  0D0
26807       BC  =  1.896D0 + 1.616D0 * S
26808       DCT =  4.12D0  + 0.683D0 * S
26809       ECT =  4.36D0  + 1.328D0 * S
26810       ESC =  0.677D0 + 0.679D0 * S
26811       CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
26812  
26813 C...bb :
26814       STB =  1.297D0
26815       ALB =  0.99D0
26816       BEB =  0D0
26817       AKB =          - 0.193D0 * S
26818       AB  =  0D0
26819       BB  =  0D0
26820       DBT =  3.447D0 + 0.927D0 * S
26821       EBT =  4.68D0  + 1.259D0 * S
26822       ESB =  1.892D0 + 2.199D0 * S
26823       BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
26824  
26825 C...gl :
26826        ALG =  1.014D0
26827        BEG =  1.738D0
26828        AKG =  1.724D0 + 0.157D0 * S
26829        BKG =  0.800D0 + 1.016D0 * S
26830        AG  =  7.517D0 - 2.547D0 * S
26831        BG  =  34.09D0 - 52.21D0 * DS + 17.47D0 * S
26832        CG  =  4.039D0 + 1.491D0 * S
26833        DG  =  3.404D0 + 0.830D0 * S
26834        EG  = -1.112D0 + 3.438D0 * S  - 0.302D0 * S2
26835        ESG =  3.256D0 - 0.436D0 * S
26836        GL  = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG, DG, EG, ESG)
26837  
26838        RETURN
26839        END
26840  
26841 C*********************************************************************
26842  
26843 C...PYGRVD
26844 C...Gives the GRV 94 D (DIS) parton distribution function set
26845 C...in parametrized form.
26846 C...Authors: M. Glueck, E. Reya and A. Vogt.
26847  
26848       SUBROUTINE PYGRVD (X, Q2, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
26849  
26850 C...Double precision declaration.
26851       IMPLICIT DOUBLE PRECISION (A - Z)
26852  
26853 C...Common expressions.
26854       MU2  = 0.34D0
26855       LAM2 = 0.248D0 * 0.248D0
26856       S  = LOG (LOG(Q2/LAM2) / LOG(MU2/LAM2))
26857       DS = SQRT (S)
26858       S2 = S * S
26859       S3 = S2 * S
26860  
26861 C...uv :
26862       NU  =  2.484D0 + 0.116D0 * S + 0.093D0 * S2
26863       AKU =  0.563D0 - 0.025D0 * S
26864       BKU =  0.054D0 + 0.154D0 * S
26865       AU  = -0.326D0 - 0.058D0 * S - 0.135D0 * S2
26866       BU  = -3.322D0 + 8.259D0 * S - 3.119D0 * S2 + 0.291D0 * S3
26867       CU  =  11.52D0 - 12.99D0 * S + 3.161D0 * S2
26868       DU  =  2.808D0 + 1.400D0 * S - 0.557D0 * S2 + 0.119D0 * S3
26869       UV  = PYGRVV (X, NU, AKU, BKU, AU, BU, CU, DU)
26870  
26871 C...dv :
26872       ND  =  0.156D0 - 0.017D0 * S
26873       AKD =  0.299D0 - 0.022D0 * S
26874       BKD =  0.259D0 - 0.015D0 * S
26875       AD  =  3.445D0 + 1.278D0 * S + 0.326D0 * S2
26876       BD  = -6.934D0 + 37.45D0 * S - 18.95D0 * S2 + 1.463D0 * S3
26877       CD  =  55.45D0 - 69.92D0 * S + 20.78D0 * S2
26878       DD  =  3.577D0 + 1.441D0 * S - 0.683D0 * S2 + 0.179D0 * S3
26879       DV  = PYGRVV (X, ND, AKD, BKD, AD, BD, CD, DD)
26880  
26881 C...del :
26882       NE  =  0.099D0 + 0.019D0 * S + 0.002D0 * S2
26883       AKE =  0.419D0 - 0.013D0 * S
26884       BKE =  1.064D0 - 0.038D0 * S
26885       AE  = -44.00D0 + 98.70D0 * S - 14.79D0 * S2
26886       BE  =  28.59D0 - 40.94D0 * S - 13.66D0 * S2 + 2.523D0 * S3
26887       CE  =  84.57D0 - 108.8D0 * S + 31.52D0 * S2
26888       DE  =  7.469D0 + 2.480D0 * S - 0.866D0 * S2
26889       DEL = PYGRVV (X, NE, AKE, BKE, AE, BE, CE, DE)
26890  
26891 C...udb :
26892       ALX =  1.215D0
26893       BEX =  0.466D0
26894       AKX =  0.326D0 + 0.150D0 * S
26895       BKX =  0.956D0 + 0.405D0 * S
26896       AGX =  0.272D0
26897       BGX =  3.794D0 - 2.359D0 * DS
26898       CX  =  2.014D0
26899       DX  =  7.941D0 + 0.534D0 * DS - 0.940D0 * S + 0.410D0 * S2
26900       EX  =  3.049D0 + 1.597D0 * S
26901       ESX =  4.396D0 - 4.594D0 * DS + 3.268D0 * S
26902       UDB = PYGRVW (X, S, ALX, BEX, AKX, BKX, AGX, BGX, CX,
26903      & DX, EX, ESX)
26904  
26905 C...sb :
26906       STS =  0D0
26907       ALS =  0.175D0
26908       BES =  0.344D0
26909       AKS =  1.415D0 - 0.641D0 * DS
26910       AS  =  0.580D0 - 9.763D0 * DS + 6.795D0 * S  - 0.558D0 * S2
26911       BS  =  5.617D0 + 5.709D0 * DS - 3.972D0 * S
26912       DST =  13.78D0 - 9.581D0 * S  + 5.370D0 * S2 - 0.996D0 * S3
26913       EST =  4.546D0 + 0.372D0 * S2
26914       ESS =  5.053D0 - 1.070D0 * S  + 0.805D0 * S2
26915       SB  = PYGRVS (X, S, STS, ALS, BES, AKS, AS, BS, DST, EST, ESS)
26916  
26917 C...cb :
26918       STC =  0.820D0
26919       ALC =  0.98D0
26920       BEC =  0D0
26921       AKC = -0.625D0 - 0.523D0 * S
26922       AC  =  0D0
26923       BC  =  1.896D0 + 1.616D0 * S
26924       DCT =  4.12D0  + 0.683D0 * S
26925       ECT =  4.36D0  + 1.328D0 * S
26926       ESC =  0.677D0 + 0.679D0 * S
26927       CHM = PYGRVS (X, S, STC, ALC, BEC, AKC, AC, BC, DCT, ECT, ESC)
26928  
26929 C...bb :
26930       STB =  1.297D0
26931       ALB =  0.99D0
26932       BEB =  0D0
26933       AKB =          - 0.193D0 * S
26934       AB  =  0D0
26935       BB  =  0D0
26936       DBT =  3.447D0 + 0.927D0 * S
26937       EBT =  4.68D0  + 1.259D0 * S
26938       ESB =  1.892D0 + 2.199D0 * S
26939       BOT = PYGRVS (X, S, STB, ALB, BEB, AKB, AB, BB, DBT, EBT, ESB)
26940  
26941 C...gl :
26942       ALG =  1.258D0
26943       BEG =  1.846D0
26944       AKG =  2.423D0
26945       BKG =  2.427D0 + 1.311D0 * S  - 0.153D0 * S2
26946       AG  =  25.09D0 - 7.935D0 * S
26947       BG  = -14.84D0 - 124.3D0 * DS + 72.18D0 * S
26948       CG  =  590.3D0 - 173.8D0 * S
26949       DG  =  5.196D0 + 1.857D0 * S
26950       EG  = -1.648D0 + 3.988D0 * S  - 0.432D0 * S2
26951       ESG =  3.232D0 - 0.542D0 * S
26952       GL  = PYGRVW (X, S, ALG, BEG, AKG, BKG, AG, BG, CG, DG, EG, ESG)
26953  
26954       RETURN
26955       END
26956  
26957 C*********************************************************************
26958  
26959 C...PYGRVV
26960 C...Auxiliary for the GRV 94 parton distribution functions
26961 C...for u and d valence and d-u sea.
26962 C...Authors: M. Glueck, E. Reya and A. Vogt.
26963  
26964       FUNCTION PYGRVV (X, N, AK, BK, A, B, C, D)
26965  
26966 C...Double precision declaration.
26967       IMPLICIT DOUBLE PRECISION (A - Z)
26968  
26969 C...Evaluation.
26970       DX = SQRT (X)
26971       PYGRVV = N * X**AK * (1D0+ A*X**BK + X * (B + C*DX)) *
26972      & (1D0- X)**D
26973  
26974       RETURN
26975       END
26976  
26977 C*********************************************************************
26978  
26979 C...PYGRVW
26980 C...Auxiliary for the GRV 94 parton distribution functions
26981 C...for d+u sea and gluon.
26982 C...Authors: M. Glueck, E. Reya and A. Vogt.
26983  
26984       FUNCTION PYGRVW (X, S, AL, BE, AK, BK, A, B, C, D, E, ES)
26985  
26986 C...Double precision declaration.
26987       IMPLICIT DOUBLE PRECISION (A - Z)
26988  
26989 C...Evaluation.
26990       LX = LOG (1D0/X)
26991       PYGRVW = (X**AK * (A + X * (B + X*C)) * LX**BK + S**AL
26992      &     * EXP (-E + SQRT (ES * S**BE * LX))) * (1D0- X)**D
26993  
26994       RETURN
26995       END
26996  
26997 C*********************************************************************
26998  
26999 C...PYGRVS
27000 C...Auxiliary for the GRV 94 parton distribution functions
27001 C...for s, c and b sea.
27002 C...Authors: M. Glueck, E. Reya and A. Vogt.
27003  
27004       FUNCTION PYGRVS (X, S, STH, AL, BE, AK, AG, B, D, E, ES)
27005  
27006 C...Double precision declaration.
27007       IMPLICIT DOUBLE PRECISION (A - Z)
27008  
27009 C...Evaluation.
27010       IF(S.LE.STH) THEN
27011         PYGRVS = 0D0
27012       ELSE
27013         DX = SQRT (X)
27014         LX = LOG (1D0/X)
27015         PYGRVS = (S - STH)**AL / LX**AK * (1D0+ AG*DX + B*X) *
27016      &     (1D0- X)**D * EXP (-E + SQRT (ES * S**BE * LX))
27017       ENDIF
27018  
27019       RETURN
27020       END
27021 
27022 C*********************************************************************
27023 
27024 C...CTEQ5M1 and CTEQ5L Parton Distribution Functions 
27025 C...in Parametrized Form
27026 C...            September 15, 1999
27027 C
27028 C...Ref: "GLOBAL QCD ANALYSIS OF PARTON STRUCTURE OF THE NUCLEON:
27029 C...      CTEQ5 PPARTON DISTRIBUTIONS"
27030 C...hep-ph/9903282
27031 
27032 C...The CTEQ5M1 set given here is an updated version of the original 
27033 C...CTEQ5M set posted, in the table version, on the Web page of CTEQ.
27034 C...The differences between CTEQ5M and CTEQ5M1 are insignificant for 
27035 C...almost all applications. 
27036 C...The improvement is in the QCD evolution which is now more 
27037 C...accurate, and which agrees completely with the benchmark work 
27038 C...of the HERA 96/97 Workshop.
27039 C...The differences between the parametrized and the corresponding 
27040 C...table versions (on which it is based) are of similar order as 
27041 C...between the two version.
27042     
27043 C...!! Because accurate parametrizations over a wide range of (x,Q) 
27044 C...is hard to obtain, only the most widely used sets CTEQ5M and 
27045 C...CTEQ5L are available in parametrized form for now. 
27046 
27047 C...These parametrizations were obtained by Jon Pumplin.
27048 
27049 C  Iset   PDF        Description              Alpha_s(Mz)  Lam4  Lam5
27050 C -------------------------------------------------------------------
27051 C   1    CTEQ5M1  Standard NLO MSbar scheme      0.118     326   226
27052 C   3    CTEQ5L   Leading Order                  0.127     192   146
27053 C -------------------------------------------------------------------
27054 C...Note the Qcd-lambda values given for CTEQ5L is for the leading 
27055 C...order form of Alpha_s!!  Alpha_s(Mz) gives the absolute 
27056 C...calibration.
27057 
27058 C...The two Iset value are adopted to agree with the standard table 
27059 C...versions.
27060        
27061 C...Range of validity:  
27062 C...The range of (x, Q) covered by this parametrization of the QCD 
27063 C...evolved parton distributions is 1E-6 < x < 1 ; 
27064 C...1.1 GeV < Q < 10 TeV.  Of course, the PDF's are constrained by 
27065 C...data only in a subset of that region; and the assumed DGLAP 
27066 C...evolution is unlikely to be valid for all of it either.
27067 
27068 C...The range of (x, Q) used in the CTEQ5 round of global analysis is 
27069 C...approximately 0.01 < x < 0.75 ; and 4 GeV^2 < Q^2 < 400 GeV^2 for 
27070 C...fixed target experiments; 0.0001 < x < 0.3 from HERA data; and   
27071 C...Q^2 up to 40,000 GeV^2 from Tevatron inclusive Jet data.
27072 
27073 C* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
27074 
27075 C...PYCT5L 
27076 C...Auxiliary function for parametrization of CTEQ5L. 
27077 C...Author: J. Pumplin 9/99.
27078 
27079       FUNCTION PYCT5L(IFL,X,Q)
27080  
27081 C...Double precision declaration.
27082       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
27083       IMPLICIT INTEGER(I-N)
27084 
27085       PARAMETER (NEX=8, NLF=2)
27086       DIMENSION AM(0:NEX,0:NLF,-5:2)
27087       DIMENSION ALFVEC(-5:2), QMAVEC(-5:2)
27088       DIMENSION MEXVEC(-5:2), MLFVEC(-5:2)
27089       DIMENSION UT1VEC(-5:2), UT2VEC(-5:2)
27090       DIMENSION AF(0:NEX)
27091 
27092       DATA MEXVEC( 2) / 8 /
27093       DATA MLFVEC( 2) / 2 /
27094       DATA UT1VEC( 2) /  0.4971265E+01 /
27095       DATA UT2VEC( 2) / -0.1105128E+01 /
27096       DATA ALFVEC( 2) /  0.2987216E+00 /
27097       DATA QMAVEC( 2) /  0.0000000E+00 /
27098       DATA (AM( 0,K, 2),K=0, 2)
27099      & /  0.5292616E+01, -0.2751910E+01, -0.2488990E+01 /
27100       DATA (AM( 1,K, 2),K=0, 2)
27101      & /  0.9714424E+00,  0.1011827E-01, -0.1023660E-01 /
27102       DATA (AM( 2,K, 2),K=0, 2)
27103      & / -0.1651006E+02,  0.7959721E+01,  0.8810563E+01 /
27104       DATA (AM( 3,K, 2),K=0, 2)
27105      & / -0.1643394E+02,  0.5892854E+01,  0.9348874E+01 /
27106       DATA (AM( 4,K, 2),K=0, 2)
27107      & /  0.3067422E+02,  0.4235796E+01, -0.5112136E+00 /
27108       DATA (AM( 5,K, 2),K=0, 2)
27109      & /  0.2352526E+02, -0.5305168E+01, -0.1169174E+02 /
27110       DATA (AM( 6,K, 2),K=0, 2)
27111      & / -0.1095451E+02,  0.3006577E+01,  0.5638136E+01 /
27112       DATA (AM( 7,K, 2),K=0, 2)
27113      & / -0.1172251E+02, -0.2183624E+01,  0.4955794E+01 /
27114       DATA (AM( 8,K, 2),K=0, 2)
27115      & /  0.1662533E-01,  0.7622870E-02, -0.4895887E-03 /
27116 
27117       DATA MEXVEC( 1) / 8 /
27118       DATA MLFVEC( 1) / 2 /
27119       DATA UT1VEC( 1) /  0.2612618E+01 /
27120       DATA UT2VEC( 1) / -0.1258304E+06 /
27121       DATA ALFVEC( 1) /  0.3407552E+00 /
27122       DATA QMAVEC( 1) /  0.0000000E+00 /
27123       DATA (AM( 0,K, 1),K=0, 2)
27124      & /  0.9905300E+00, -0.4502235E+00,  0.1624441E+00 /
27125       DATA (AM( 1,K, 1),K=0, 2)
27126      & /  0.8867534E+00,  0.1630829E-01, -0.4049085E-01 /
27127       DATA (AM( 2,K, 1),K=0, 2)
27128      & /  0.8547974E+00,  0.3336301E+00,  0.1371388E+00 /
27129       DATA (AM( 3,K, 1),K=0, 2)
27130      & /  0.2941113E+00, -0.1527905E+01,  0.2331879E+00 /
27131       DATA (AM( 4,K, 1),K=0, 2)
27132      & /  0.3384235E+02,  0.3715315E+01,  0.8276930E+00 /
27133       DATA (AM( 5,K, 1),K=0, 2)
27134      & /  0.6230115E+01,  0.3134639E+01, -0.1729099E+01 /
27135       DATA (AM( 6,K, 1),K=0, 2)
27136      & / -0.1186928E+01, -0.3282460E+00,  0.1052020E+00 /
27137       DATA (AM( 7,K, 1),K=0, 2)
27138      & / -0.8545702E+01, -0.6247947E+01,  0.3692561E+01 /
27139       DATA (AM( 8,K, 1),K=0, 2)
27140      & /  0.1724598E-01,  0.7120465E-02,  0.4003646E-04 /
27141 
27142       DATA MEXVEC( 0) / 8 /
27143       DATA MLFVEC( 0) / 2 /
27144       DATA UT1VEC( 0) / -0.4656819E+00 /
27145       DATA UT2VEC( 0) / -0.2742390E+03 /
27146       DATA ALFVEC( 0) /  0.4491863E+00 /
27147       DATA QMAVEC( 0) /  0.0000000E+00 /
27148       DATA (AM( 0,K, 0),K=0, 2)
27149      & /  0.1193572E+03, -0.3886845E+01, -0.1133965E+01 /
27150       DATA (AM( 1,K, 0),K=0, 2)
27151      & / -0.9421449E+02,  0.3995885E+01,  0.1607363E+01 /
27152       DATA (AM( 2,K, 0),K=0, 2)
27153      & /  0.4206383E+01,  0.2485954E+00,  0.2497468E+00 /
27154       DATA (AM( 3,K, 0),K=0, 2)
27155      & /  0.1210557E+03, -0.3015765E+01, -0.1423651E+01 /
27156       DATA (AM( 4,K, 0),K=0, 2)
27157      & / -0.1013897E+03, -0.7113478E+00,  0.2621865E+00 /
27158       DATA (AM( 5,K, 0),K=0, 2)
27159      & / -0.1312404E+01, -0.9297691E+00, -0.1562531E+00 /
27160       DATA (AM( 6,K, 0),K=0, 2)
27161      & /  0.1627137E+01,  0.4954111E+00, -0.6387009E+00 /
27162       DATA (AM( 7,K, 0),K=0, 2)
27163      & /  0.1537698E+00, -0.2487878E+00,  0.8305947E+00 /
27164       DATA (AM( 8,K, 0),K=0, 2)
27165      & /  0.2496448E-01,  0.2457823E-02,  0.8234276E-03 /
27166 
27167       DATA MEXVEC(-1) / 8 /
27168       DATA MLFVEC(-1) / 2 /
27169       DATA UT1VEC(-1) /  0.3862583E+01 /
27170       DATA UT2VEC(-1) / -0.1265969E+01 /
27171       DATA ALFVEC(-1) /  0.2457668E+00 /
27172       DATA QMAVEC(-1) /  0.0000000E+00 /
27173       DATA (AM( 0,K,-1),K=0, 2)
27174      & /  0.2647441E+02,  0.1059277E+02, -0.9176654E+00 /
27175       DATA (AM( 1,K,-1),K=0, 2)
27176      & /  0.1990636E+01,  0.8558918E-01,  0.4248667E-01 /
27177       DATA (AM( 2,K,-1),K=0, 2)
27178      & / -0.1476095E+02, -0.3276255E+02,  0.1558110E+01 /
27179       DATA (AM( 3,K,-1),K=0, 2)
27180      & / -0.2966889E+01, -0.3649037E+02,  0.1195914E+01 /
27181       DATA (AM( 4,K,-1),K=0, 2)
27182      & / -0.1000519E+03, -0.2464635E+01,  0.1964849E+00 /
27183       DATA (AM( 5,K,-1),K=0, 2)
27184      & /  0.3718331E+02,  0.4700389E+02, -0.2772142E+01 /
27185       DATA (AM( 6,K,-1),K=0, 2)
27186      & / -0.1872722E+02, -0.2291189E+02,  0.1089052E+01 /
27187       DATA (AM( 7,K,-1),K=0, 2)
27188      & / -0.1628146E+02, -0.1823993E+02,  0.2537369E+01 /
27189       DATA (AM( 8,K,-1),K=0, 2)
27190      & / -0.1156300E+01, -0.1280495E+00,  0.5153245E-01 /
27191 
27192       DATA MEXVEC(-2) / 7 /
27193       DATA MLFVEC(-2) / 2 /
27194       DATA UT1VEC(-2) /  0.1895615E+00 /
27195       DATA UT2VEC(-2) / -0.3069097E+01 /
27196       DATA ALFVEC(-2) /  0.5293999E+00 /
27197       DATA QMAVEC(-2) /  0.0000000E+00 /
27198       DATA (AM( 0,K,-2),K=0, 2)
27199      & / -0.6556775E+00,  0.2490190E+00,  0.3966485E-01 /
27200       DATA (AM( 1,K,-2),K=0, 2)
27201      & /  0.1305102E+01, -0.1188925E+00, -0.4600870E-02 /
27202       DATA (AM( 2,K,-2),K=0, 2)
27203      & / -0.2371436E+01,  0.3566814E+00, -0.2834683E+00 /
27204       DATA (AM( 3,K,-2),K=0, 2)
27205      & / -0.6152826E+01,  0.8339877E+00, -0.7233230E+00 /
27206       DATA (AM( 4,K,-2),K=0, 2)
27207      & / -0.8346558E+01,  0.2892168E+01,  0.2137099E+00 /
27208       DATA (AM( 5,K,-2),K=0, 2)
27209      & /  0.1279530E+02,  0.1021114E+00,  0.5787439E+00 /
27210       DATA (AM( 6,K,-2),K=0, 2)
27211      & /  0.5858816E+00, -0.1940375E+01, -0.4029269E+00 /
27212       DATA (AM( 7,K,-2),K=0, 2)
27213      & / -0.2795725E+02, -0.5263392E+00,  0.1290229E+01 /
27214 
27215       DATA MEXVEC(-3) / 7 /
27216       DATA MLFVEC(-3) / 2 /
27217       DATA UT1VEC(-3) /  0.3753257E+01 /
27218       DATA UT2VEC(-3) / -0.1113085E+01 /
27219       DATA ALFVEC(-3) /  0.3713141E+00 /
27220       DATA QMAVEC(-3) /  0.0000000E+00 /
27221       DATA (AM( 0,K,-3),K=0, 2)
27222      & /  0.1580931E+01, -0.2273826E+01, -0.1822245E+01 /
27223       DATA (AM( 1,K,-3),K=0, 2)
27224      & /  0.2702644E+01,  0.6763243E+00,  0.7231586E-02 /
27225       DATA (AM( 2,K,-3),K=0, 2)
27226      & / -0.1857924E+02,  0.3907500E+01,  0.5850109E+01 /
27227       DATA (AM( 3,K,-3),K=0, 2)
27228      & / -0.3044793E+02,  0.2639332E+01,  0.5566644E+01 /
27229       DATA (AM( 4,K,-3),K=0, 2)
27230      & / -0.4258011E+01, -0.5429244E+01,  0.4418946E+00 /
27231       DATA (AM( 5,K,-3),K=0, 2)
27232      & /  0.3465259E+02, -0.5532604E+01, -0.4904153E+01 /
27233       DATA (AM( 6,K,-3),K=0, 2)
27234      & / -0.1658858E+02,  0.2923275E+01,  0.2266286E+01 /
27235       DATA (AM( 7,K,-3),K=0, 2)
27236      & / -0.1149263E+02,  0.2877475E+01, -0.7999105E+00 /
27237 
27238       DATA MEXVEC(-4) / 7 /
27239       DATA MLFVEC(-4) / 2 /
27240       DATA UT1VEC(-4) /  0.4400772E+01 /
27241       DATA UT2VEC(-4) / -0.1356116E+01 /
27242       DATA ALFVEC(-4) /  0.3712017E-01 /
27243       DATA QMAVEC(-4) /  0.1300000E+01 /
27244       DATA (AM( 0,K,-4),K=0, 2)
27245      & / -0.8293661E+00, -0.3982375E+01, -0.6494283E-01 /
27246       DATA (AM( 1,K,-4),K=0, 2)
27247      & /  0.2754618E+01,  0.8338636E+00, -0.6885160E-01 /
27248       DATA (AM( 2,K,-4),K=0, 2)
27249      & / -0.1657987E+02,  0.1439143E+02, -0.6887240E+00 /
27250       DATA (AM( 3,K,-4),K=0, 2)
27251      & / -0.2800703E+02,  0.1535966E+02, -0.7377693E+00 /
27252       DATA (AM( 4,K,-4),K=0, 2)
27253      & / -0.6460216E+01, -0.4783019E+01,  0.4913297E+00 /
27254       DATA (AM( 5,K,-4),K=0, 2)
27255      & /  0.3141830E+02, -0.3178031E+02,  0.7136013E+01 /
27256       DATA (AM( 6,K,-4),K=0, 2)
27257      & / -0.1802509E+02,  0.1862163E+02, -0.4632843E+01 /
27258       DATA (AM( 7,K,-4),K=0, 2)
27259      & / -0.1240412E+02,  0.2565386E+02, -0.1066570E+02 /
27260 
27261       DATA MEXVEC(-5) / 6 /
27262       DATA MLFVEC(-5) / 2 /
27263       DATA UT1VEC(-5) /  0.5562568E+01 /
27264       DATA UT2VEC(-5) / -0.1801317E+01 /
27265       DATA ALFVEC(-5) /  0.4952010E-02 /
27266       DATA QMAVEC(-5) /  0.4500000E+01 /
27267       DATA (AM( 0,K,-5),K=0, 2)
27268      & / -0.6031237E+01,  0.1992727E+01, -0.1076331E+01 /
27269       DATA (AM( 1,K,-5),K=0, 2)
27270      & /  0.2933912E+01,  0.5839674E+00,  0.7509435E-01 /
27271       DATA (AM( 2,K,-5),K=0, 2)
27272      & / -0.8284919E+01,  0.1488593E+01, -0.8251678E+00 /
27273       DATA (AM( 3,K,-5),K=0, 2)
27274      & / -0.1925986E+02,  0.2805753E+01, -0.3015446E+01 /
27275       DATA (AM( 4,K,-5),K=0, 2)
27276      & / -0.9480483E+01, -0.9767837E+00, -0.1165544E+01 /
27277       DATA (AM( 5,K,-5),K=0, 2)
27278      & /  0.2193195E+02, -0.1788518E+02,  0.9460908E+01 /
27279       DATA (AM( 6,K,-5),K=0, 2)
27280      & / -0.1327377E+02,  0.1201754E+02, -0.6277844E+01 /
27281 
27282       IF(Q .LE. QMAVEC(IFL)) THEN
27283          PYCT5L = 0.D0
27284          RETURN
27285       ENDIF
27286 
27287       IF(X .GE. 1.D0) THEN
27288          PYCT5L = 0.D0
27289          RETURN
27290       ENDIF
27291 
27292       TMP = LOG(Q/ALFVEC(IFL))
27293       IF(TMP .LE. 0.D0) THEN
27294          PYCT5L = 0.D0
27295          RETURN
27296       ENDIF
27297 
27298       SB = LOG(TMP)
27299       SB1 = SB - 1.2D0
27300       SB2 = SB1*SB1
27301 
27302       DO 110 I = 0, NEX
27303          AF(I) = 0.D0
27304          SBX = 1.D0
27305          DO 100 K = 0, MLFVEC(IFL)
27306             AF(I) = AF(I) + SBX*AM(I,K,IFL)
27307             SBX = SB1*SBX
27308   100    CONTINUE
27309   110 CONTINUE      
27310 
27311       Y = -LOG(X)
27312       U = LOG(X/0.00001D0)
27313 
27314       PART1 = AF(1)*Y**(1.D0+0.01D0*AF(4))*(1.D0+ AF(8)*U)
27315       PART2 = AF(0)*(1.D0 - X) + AF(3)*X 
27316       PART3 = X*(1.D0-X)*(AF(5)+AF(6)*(1.D0-X)+AF(7)*X*(1.D0-X))
27317       PART4 = UT1VEC(IFL)*LOG(1.D0-X) + 
27318      &        AF(2)*LOG(1.D0+EXP(UT2VEC(IFL))-X)
27319 
27320       PYCT5L = EXP(LOG(X) + PART1 + PART2 + PART3 + PART4)
27321 
27322 C...Include threshold factor.
27323       PYCT5L = PYCT5L * (1.D0 - QMAVEC(IFL)/Q)
27324 
27325       RETURN
27326       END
27327  
27328 C*********************************************************************
27329 
27330 C...PYCT5M 
27331 C...Auxiliary function for parametrization of CTEQ5M1.
27332 C...Author: J. Pumplin 9/99.
27333 
27334       FUNCTION PYCT5M(IFL,X,Q)
27335  
27336 C...Double precision declaration.
27337       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
27338       IMPLICIT INTEGER(I-N)
27339 
27340       PARAMETER (NEX=8, NLF=2)
27341       DIMENSION AM(0:NEX,0:NLF,-5:2)
27342       DIMENSION ALFVEC(-5:2), QMAVEC(-5:2)
27343       DIMENSION MEXVEC(-5:2), MLFVEC(-5:2)
27344       DIMENSION UT1VEC(-5:2), UT2VEC(-5:2)
27345       DIMENSION AF(0:NEX)
27346 
27347       DATA MEXVEC( 2) / 8 /
27348       DATA MLFVEC( 2) / 2 /
27349       DATA UT1VEC( 2) /  0.5141718E+01 /
27350       DATA UT2VEC( 2) / -0.1346944E+01 /
27351       DATA ALFVEC( 2) /  0.5260555E+00 /
27352       DATA QMAVEC( 2) /  0.0000000E+00 /
27353       DATA (AM( 0,K, 2),K=0, 2)
27354      & /  0.4289071E+01, -0.2536870E+01, -0.1259948E+01 /
27355       DATA (AM( 1,K, 2),K=0, 2)
27356      & /  0.9839410E+00,  0.4168426E-01, -0.5018952E-01 /
27357       DATA (AM( 2,K, 2),K=0, 2)
27358      & / -0.1651961E+02,  0.9246261E+01,  0.5996400E+01 /
27359       DATA (AM( 3,K, 2),K=0, 2)
27360      & / -0.2077936E+02,  0.9786469E+01,  0.7656465E+01 /
27361       DATA (AM( 4,K, 2),K=0, 2)
27362      & /  0.3054926E+02,  0.1889536E+01,  0.1380541E+01 /
27363       DATA (AM( 5,K, 2),K=0, 2)
27364      & /  0.3084695E+02, -0.1212303E+02, -0.1053551E+02 /
27365       DATA (AM( 6,K, 2),K=0, 2)
27366      & / -0.1426778E+02,  0.6239537E+01,  0.5254819E+01 /
27367       DATA (AM( 7,K, 2),K=0, 2)
27368      & / -0.1909811E+02,  0.3695678E+01,  0.5495729E+01 /
27369       DATA (AM( 8,K, 2),K=0, 2)
27370      & /  0.1889751E-01,  0.5027193E-02,  0.6624896E-03 /
27371 
27372       DATA MEXVEC( 1) / 8 /
27373       DATA MLFVEC( 1) / 2 /
27374       DATA UT1VEC( 1) /  0.4138426E+01 /
27375       DATA UT2VEC( 1) / -0.3221374E+01 /
27376       DATA ALFVEC( 1) /  0.4960962E+00 /
27377       DATA QMAVEC( 1) /  0.0000000E+00 /
27378       DATA (AM( 0,K, 1),K=0, 2)
27379      & /  0.1332497E+01, -0.3703718E+00,  0.1288638E+00 /
27380       DATA (AM( 1,K, 1),K=0, 2)
27381      & /  0.7544687E+00,  0.3255075E-01, -0.4706680E-01 /
27382       DATA (AM( 2,K, 1),K=0, 2)
27383      & / -0.7638814E+00,  0.5008313E+00, -0.9237374E-01 /
27384       DATA (AM( 3,K, 1),K=0, 2)
27385      & / -0.3689889E+00, -0.1055098E+01, -0.4645065E+00 /
27386       DATA (AM( 4,K, 1),K=0, 2)
27387      & /  0.3991610E+02,  0.1979881E+01,  0.1775814E+01 /
27388       DATA (AM( 5,K, 1),K=0, 2)
27389      & /  0.6201080E+01,  0.2046288E+01,  0.3804571E+00 /
27390       DATA (AM( 6,K, 1),K=0, 2)
27391      & / -0.8027900E+00, -0.7011688E+00, -0.8049612E+00 /
27392       DATA (AM( 7,K, 1),K=0, 2)
27393      & / -0.8631305E+01, -0.3981200E+01,  0.6970153E+00 /
27394       DATA (AM( 8,K, 1),K=0, 2)
27395      & /  0.2371230E-01,  0.5372683E-02,  0.1118701E-02 /
27396 
27397       DATA MEXVEC( 0) / 8 /
27398       DATA MLFVEC( 0) / 2 /
27399       DATA UT1VEC( 0) / -0.1026789E+01 /
27400       DATA UT2VEC( 0) / -0.9051707E+01 /
27401       DATA ALFVEC( 0) /  0.9462977E+00 /
27402       DATA QMAVEC( 0) /  0.0000000E+00 /
27403       DATA (AM( 0,K, 0),K=0, 2)
27404      & /  0.1191990E+03, -0.8548739E+00, -0.1963040E+01 /
27405       DATA (AM( 1,K, 0),K=0, 2)
27406      & / -0.9449972E+02,  0.1074771E+01,  0.2056055E+01 /
27407       DATA (AM( 2,K, 0),K=0, 2)
27408      & /  0.3701064E+01, -0.1167947E-02,  0.1933573E+00 /
27409       DATA (AM( 3,K, 0),K=0, 2)
27410      & /  0.1171345E+03, -0.1064540E+01, -0.1875312E+01 /
27411       DATA (AM( 4,K, 0),K=0, 2)
27412      & / -0.1014453E+03, -0.5707427E+00,  0.4511242E-01 /
27413       DATA (AM( 5,K, 0),K=0, 2)
27414      & /  0.6365168E+01,  0.1275354E+01, -0.4964081E+00 /
27415       DATA (AM( 6,K, 0),K=0, 2)
27416      & / -0.3370693E+01, -0.1122020E+01,  0.5947751E-01 /
27417       DATA (AM( 7,K, 0),K=0, 2)
27418      & / -0.5327270E+01, -0.9293556E+00,  0.6629940E+00 /
27419       DATA (AM( 8,K, 0),K=0, 2)
27420      & /  0.2437513E-01,  0.1600939E-02,  0.6855336E-03 /
27421 
27422       DATA MEXVEC(-1) / 8 /
27423       DATA MLFVEC(-1) / 2 /
27424       DATA UT1VEC(-1) /  0.5243571E+01 /
27425       DATA UT2VEC(-1) / -0.2870513E+01 /
27426       DATA ALFVEC(-1) /  0.6701448E+00 /
27427       DATA QMAVEC(-1) /  0.0000000E+00 /
27428       DATA (AM( 0,K,-1),K=0, 2)
27429      & /  0.2428863E+02,  0.1907035E+01, -0.4606457E+00 /
27430       DATA (AM( 1,K,-1),K=0, 2)
27431      & /  0.2006810E+01, -0.1265915E+00,  0.7153556E-02 /
27432       DATA (AM( 2,K,-1),K=0, 2)
27433      & / -0.1884546E+02, -0.2339471E+01,  0.5740679E+01 /
27434       DATA (AM( 3,K,-1),K=0, 2)
27435      & / -0.2527892E+02, -0.2044124E+01,  0.1280470E+02 /
27436       DATA (AM( 4,K,-1),K=0, 2)
27437      & / -0.1013824E+03, -0.1594199E+01,  0.2216401E+00 /
27438       DATA (AM( 5,K,-1),K=0, 2)
27439      & /  0.8070930E+02,  0.1792072E+01, -0.2164364E+02 /
27440       DATA (AM( 6,K,-1),K=0, 2)
27441      & / -0.4641050E+02,  0.1977338E+00,  0.1273014E+02 /
27442       DATA (AM( 7,K,-1),K=0, 2)
27443      & / -0.3910568E+02,  0.1719632E+01,  0.1086525E+02 /
27444       DATA (AM( 8,K,-1),K=0, 2)
27445      & / -0.1185496E+01, -0.1905847E+00, -0.8744118E-03 /
27446 
27447       DATA MEXVEC(-2) / 7 /
27448       DATA MLFVEC(-2) / 2 /
27449       DATA UT1VEC(-2) /  0.4782210E+01 /
27450       DATA UT2VEC(-2) / -0.1976856E+02 /
27451       DATA ALFVEC(-2) /  0.7558374E+00 /
27452       DATA QMAVEC(-2) /  0.0000000E+00 /
27453       DATA (AM( 0,K,-2),K=0, 2)
27454      & / -0.6216935E+00,  0.2369963E+00, -0.7909949E-02 /
27455       DATA (AM( 1,K,-2),K=0, 2)
27456      & /  0.1245440E+01, -0.1031510E+00,  0.4916523E-02 /
27457       DATA (AM( 2,K,-2),K=0, 2)
27458      & / -0.7060824E+01, -0.3875283E-01,  0.1784981E+00 /
27459       DATA (AM( 3,K,-2),K=0, 2)
27460      & / -0.7430595E+01,  0.1964572E+00, -0.1284999E+00 /
27461       DATA (AM( 4,K,-2),K=0, 2)
27462      & / -0.6897810E+01,  0.2620543E+01,  0.8012553E-02 /
27463       DATA (AM( 5,K,-2),K=0, 2)
27464      & /  0.1507713E+02,  0.2340307E-01,  0.2482535E+01 /
27465       DATA (AM( 6,K,-2),K=0, 2)
27466      & / -0.1815341E+01, -0.1538698E+01, -0.2014208E+01 /
27467       DATA (AM( 7,K,-2),K=0, 2)
27468      & / -0.2571932E+02,  0.2903941E+00, -0.2848206E+01 /
27469 
27470       DATA MEXVEC(-3) / 7 /
27471       DATA MLFVEC(-3) / 2 /
27472       DATA UT1VEC(-3) /  0.4518239E+01 /
27473       DATA UT2VEC(-3) / -0.2690590E+01 /
27474       DATA ALFVEC(-3) /  0.6124079E+00 /
27475       DATA QMAVEC(-3) /  0.0000000E+00 /
27476       DATA (AM( 0,K,-3),K=0, 2)
27477      & / -0.2734458E+01, -0.7245673E+00, -0.6351374E+00 /
27478       DATA (AM( 1,K,-3),K=0, 2)
27479      & /  0.2927174E+01,  0.4822709E+00, -0.1088787E-01 /
27480       DATA (AM( 2,K,-3),K=0, 2)
27481      & / -0.1771017E+02, -0.1416635E+01,  0.8467622E+01 /
27482       DATA (AM( 3,K,-3),K=0, 2)
27483      & / -0.4972782E+02, -0.3348547E+01,  0.1767061E+02 /
27484       DATA (AM( 4,K,-3),K=0, 2)
27485      & / -0.7102770E+01, -0.3205337E+01,  0.4101704E+00 /
27486       DATA (AM( 5,K,-3),K=0, 2)
27487      & /  0.7169698E+02, -0.2205985E+01, -0.2463931E+02 /
27488       DATA (AM( 6,K,-3),K=0, 2)
27489      & / -0.4090347E+02,  0.2103486E+01,  0.1416507E+02 /
27490       DATA (AM( 7,K,-3),K=0, 2)
27491      & / -0.2952639E+02,  0.5376136E+01,  0.7825585E+01 /
27492 
27493       DATA MEXVEC(-4) / 7 /
27494       DATA MLFVEC(-4) / 2 /
27495       DATA UT1VEC(-4) /  0.2783230E+01 /
27496       DATA UT2VEC(-4) / -0.1746328E+01 /
27497       DATA ALFVEC(-4) /  0.1115653E+01 /
27498       DATA QMAVEC(-4) /  0.1300000E+01 /
27499       DATA (AM( 0,K,-4),K=0, 2)
27500      & / -0.1743872E+01, -0.1128921E+01, -0.2841969E+00 /
27501       DATA (AM( 1,K,-4),K=0, 2)
27502      & /  0.3345755E+01,  0.3187765E+00,  0.1378124E+00 /
27503       DATA (AM( 2,K,-4),K=0, 2)
27504      & / -0.2037615E+02,  0.4121687E+01,  0.2236520E+00 /
27505       DATA (AM( 3,K,-4),K=0, 2)
27506      & / -0.4703104E+02,  0.5353087E+01, -0.1455347E+01 /
27507       DATA (AM( 4,K,-4),K=0, 2)
27508      & / -0.1060230E+02, -0.1551122E+01, -0.1078863E+01 /
27509       DATA (AM( 5,K,-4),K=0, 2)
27510      & /  0.5088892E+02, -0.8197304E+01,  0.8083451E+01 /
27511       DATA (AM( 6,K,-4),K=0, 2)
27512      & / -0.2819070E+02,  0.4554086E+01, -0.5890995E+01 /
27513       DATA (AM( 7,K,-4),K=0, 2)
27514      & / -0.1098238E+02,  0.2590096E+01, -0.8062879E+01 /
27515 
27516       DATA MEXVEC(-5) / 6 /
27517       DATA MLFVEC(-5) / 2 /
27518       DATA UT1VEC(-5) /  0.1619654E+02 /
27519       DATA UT2VEC(-5) / -0.3367346E+01 /
27520       DATA ALFVEC(-5) /  0.5109891E-02 /
27521       DATA QMAVEC(-5) /  0.4500000E+01 /
27522       DATA (AM( 0,K,-5),K=0, 2)
27523      & / -0.6800138E+01,  0.2493627E+01, -0.1075724E+01 /
27524       DATA (AM( 1,K,-5),K=0, 2)
27525      & /  0.3036555E+01,  0.3324733E+00,  0.2008298E+00 /
27526       DATA (AM( 2,K,-5),K=0, 2)
27527      & / -0.5203879E+01, -0.8493476E+01, -0.4523208E+01 /
27528       DATA (AM( 3,K,-5),K=0, 2)
27529      & / -0.1524239E+01, -0.3411912E+01, -0.1771867E+02 /
27530       DATA (AM( 4,K,-5),K=0, 2)
27531      & / -0.1099444E+02,  0.1320930E+01, -0.2353831E+01 /
27532       DATA (AM( 5,K,-5),K=0, 2)
27533      & /  0.1699299E+02, -0.3565802E+02,  0.3566872E+02 /
27534       DATA (AM( 6,K,-5),K=0, 2)
27535      & / -0.1465793E+02,  0.2703365E+02, -0.2176372E+02 /
27536 
27537       IF(Q .LE. QMAVEC(IFL)) THEN
27538          PYCT5M = 0.D0
27539          RETURN
27540       ENDIF
27541 
27542       IF(X .GE. 1.D0) THEN
27543          PYCT5M = 0.D0
27544          RETURN
27545       ENDIF
27546 
27547       TMP = LOG(Q/ALFVEC(IFL))
27548       IF(TMP .LE. 0.D0) THEN
27549          PYCT5M = 0.D0
27550          RETURN
27551       ENDIF
27552 
27553       SB = LOG(TMP)
27554       SB1 = SB - 1.2D0
27555       SB2 = SB1*SB1
27556 
27557       DO 110 I = 0, NEX
27558          AF(I) = 0.D0
27559          SBX = 1.D0
27560          DO 100 K = 0, MLFVEC(IFL)
27561             AF(I) = AF(I) + SBX*AM(I,K,IFL)
27562             SBX = SB1*SBX
27563   100    CONTINUE
27564   110 CONTINUE      
27565 
27566       Y = -LOG(X)
27567       U = LOG(X/0.00001D0)
27568 
27569       PART1 = AF(1)*Y**(1.D0+0.01D0*AF(4))*(1.D0+ AF(8)*U)
27570       PART2 = AF(0)*(1.D0 - X) + AF(3)*X 
27571       PART3 = X*(1.D0-X)*(AF(5)+AF(6)*(1.D0-X)+AF(7)*X*(1.D0-X))
27572       PART4 = UT1VEC(IFL)*LOG(1.D0-X) + 
27573      &        AF(2)*LOG(1.D0+EXP(UT2VEC(IFL))-X)
27574 
27575       PYCT5M = EXP(LOG(X) + PART1 + PART2 + PART3 + PART4)
27576 
27577 C...Include threshold factor.
27578       PYCT5M = PYCT5M * (1.D0 - QMAVEC(IFL)/Q)
27579 
27580       RETURN
27581       END
27582  
27583 C*********************************************************************
27584  
27585 C...PYPDPO
27586 C...Auxiliary to PYPDPR. Gives proton parton distributions according to 
27587 C...a few older parametrizations, now obsolete but convenient for 
27588 C...backwards checks.
27589 
27590       SUBROUTINE PYPDPO(X,Q2,XPPR)
27591  
27592 C...Double precision and integer declarations.
27593       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
27594       IMPLICIT INTEGER(I-N)
27595       INTEGER PYK,PYCHGE,PYCOMP
27596 C...Commonblocks.
27597       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
27598       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
27599       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
27600       COMMON/PYINT1/MINT(400),VINT(400)
27601       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
27602       DIMENSION XPPR(-6:6),XQ(9),TX(6),TT(6),TS(6),NEHLQ(8,2),
27603      &CEHLQ(6,6,2,8,2),CDO(3,6,5,2)
27604  
27605  
27606 C...The following data lines are coefficients needed in the
27607 C...Eichten, Hinchliffe, Lane, Quigg proton structure function
27608 C...parametrizations, see below.
27609 C...Powers of 1-x in different cases.
27610       DATA NEHLQ/3,4,7,5,7,7,7,7,3,4,7,6,7,7,7,7/
27611 C...Expansion coefficients for up valence quark distribution.
27612       DATA (((CEHLQ(IX,IT,NX,1,1),IX=1,6),IT=1,6),NX=1,2)/
27613      1 7.677D-01,-2.087D-01,-3.303D-01,-2.517D-02,-1.570D-02,-1.000D-04,
27614      2-5.326D-01,-2.661D-01, 3.201D-01, 1.192D-01, 2.434D-02, 7.620D-03,
27615      3 2.162D-01, 1.881D-01,-8.375D-02,-6.515D-02,-1.743D-02,-5.040D-03,
27616      4-9.211D-02,-9.952D-02, 1.373D-02, 2.506D-02, 8.770D-03, 2.550D-03,
27617      5 3.670D-02, 4.409D-02, 9.600D-04,-7.960D-03,-3.420D-03,-1.050D-03,
27618      6-1.549D-02,-2.026D-02,-3.060D-03, 2.220D-03, 1.240D-03, 4.100D-04,
27619      1 2.395D-01, 2.905D-01, 9.778D-02, 2.149D-02, 3.440D-03, 5.000D-04,
27620      2 1.751D-02,-6.090D-03,-2.687D-02,-1.916D-02,-7.970D-03,-2.750D-03,
27621      3-5.760D-03,-5.040D-03, 1.080D-03, 2.490D-03, 1.530D-03, 7.500D-04,
27622      4 1.740D-03, 1.960D-03, 3.000D-04,-3.400D-04,-2.900D-04,-1.800D-04,
27623      5-5.300D-04,-6.400D-04,-1.700D-04, 4.000D-05, 6.000D-05, 4.000D-05,
27624      6 1.700D-04, 2.200D-04, 8.000D-05, 1.000D-05,-1.000D-05,-1.000D-05/
27625       DATA (((CEHLQ(IX,IT,NX,1,2),IX=1,6),IT=1,6),NX=1,2)/
27626      1 7.237D-01,-2.189D-01,-2.995D-01,-1.909D-02,-1.477D-02, 2.500D-04,
27627      2-5.314D-01,-2.425D-01, 3.283D-01, 1.119D-01, 2.223D-02, 7.070D-03,
27628      3 2.289D-01, 1.890D-01,-9.859D-02,-6.900D-02,-1.747D-02,-5.080D-03,
27629      4-1.041D-01,-1.084D-01, 2.108D-02, 2.975D-02, 9.830D-03, 2.830D-03,
27630      5 4.394D-02, 5.116D-02,-1.410D-03,-1.055D-02,-4.230D-03,-1.270D-03,
27631      6-1.991D-02,-2.539D-02,-2.780D-03, 3.430D-03, 1.720D-03, 5.500D-04,
27632      1 2.410D-01, 2.884D-01, 9.369D-02, 1.900D-02, 2.530D-03, 2.400D-04,
27633      2 1.765D-02,-9.220D-03,-3.037D-02,-2.085D-02,-8.440D-03,-2.810D-03,
27634      3-6.450D-03,-5.260D-03, 1.720D-03, 3.110D-03, 1.830D-03, 8.700D-04,
27635      4 2.120D-03, 2.320D-03, 2.600D-04,-4.900D-04,-3.900D-04,-2.300D-04,
27636      5-6.900D-04,-8.200D-04,-2.000D-04, 7.000D-05, 9.000D-05, 6.000D-05,
27637      6 2.400D-04, 3.100D-04, 1.100D-04, 0.000D+00,-2.000D-05,-2.000D-05/
27638 C...Expansion coefficients for down valence quark distribution.
27639       DATA (((CEHLQ(IX,IT,NX,2,1),IX=1,6),IT=1,6),NX=1,2)/
27640      1 3.813D-01,-8.090D-02,-1.634D-01,-2.185D-02,-8.430D-03,-6.200D-04,
27641      2-2.948D-01,-1.435D-01, 1.665D-01, 6.638D-02, 1.473D-02, 4.080D-03,
27642      3 1.252D-01, 1.042D-01,-4.722D-02,-3.683D-02,-1.038D-02,-2.860D-03,
27643      4-5.478D-02,-5.678D-02, 8.900D-03, 1.484D-02, 5.340D-03, 1.520D-03,
27644      5 2.220D-02, 2.567D-02,-3.000D-05,-4.970D-03,-2.160D-03,-6.500D-04,
27645      6-9.530D-03,-1.204D-02,-1.510D-03, 1.510D-03, 8.300D-04, 2.700D-04,
27646      1 1.261D-01, 1.354D-01, 3.958D-02, 8.240D-03, 1.660D-03, 4.500D-04,
27647      2 3.890D-03,-1.159D-02,-1.625D-02,-9.610D-03,-3.710D-03,-1.260D-03,
27648      3-1.910D-03,-5.600D-04, 1.590D-03, 1.590D-03, 8.400D-04, 3.900D-04,
27649      4 6.400D-04, 4.900D-04,-1.500D-04,-2.900D-04,-1.800D-04,-1.000D-04,
27650      5-2.000D-04,-1.900D-04, 0.000D+00, 6.000D-05, 4.000D-05, 3.000D-05,
27651      6 7.000D-05, 8.000D-05, 2.000D-05,-1.000D-05,-1.000D-05,-1.000D-05/
27652       DATA (((CEHLQ(IX,IT,NX,2,2),IX=1,6),IT=1,6),NX=1,2)/
27653      1 3.578D-01,-8.622D-02,-1.480D-01,-1.840D-02,-7.820D-03,-4.500D-04,
27654      2-2.925D-01,-1.304D-01, 1.696D-01, 6.243D-02, 1.353D-02, 3.750D-03,
27655      3 1.318D-01, 1.041D-01,-5.486D-02,-3.872D-02,-1.038D-02,-2.850D-03,
27656      4-6.162D-02,-6.143D-02, 1.303D-02, 1.740D-02, 5.940D-03, 1.670D-03,
27657      5 2.643D-02, 2.957D-02,-1.490D-03,-6.450D-03,-2.630D-03,-7.700D-04,
27658      6-1.218D-02,-1.497D-02,-1.260D-03, 2.240D-03, 1.120D-03, 3.500D-04,
27659      1 1.263D-01, 1.334D-01, 3.732D-02, 7.070D-03, 1.260D-03, 3.400D-04,
27660      2 3.660D-03,-1.357D-02,-1.795D-02,-1.031D-02,-3.880D-03,-1.280D-03,
27661      3-2.100D-03,-3.600D-04, 2.050D-03, 1.920D-03, 9.800D-04, 4.400D-04,
27662      4 7.700D-04, 5.400D-04,-2.400D-04,-3.900D-04,-2.400D-04,-1.300D-04,
27663      5-2.600D-04,-2.300D-04, 2.000D-05, 9.000D-05, 6.000D-05, 4.000D-05,
27664      6 9.000D-05, 1.000D-04, 2.000D-05,-2.000D-05,-2.000D-05,-1.000D-05/
27665 C...Expansion coefficients for up and down sea quark distributions.
27666       DATA (((CEHLQ(IX,IT,NX,3,1),IX=1,6),IT=1,6),NX=1,2)/
27667      1 6.870D-02,-6.861D-02, 2.973D-02,-5.400D-03, 3.780D-03,-9.700D-04,
27668      2-1.802D-02, 1.400D-04, 6.490D-03,-8.540D-03, 1.220D-03,-1.750D-03,
27669      3-4.650D-03, 1.480D-03,-5.930D-03, 6.000D-04,-1.030D-03,-8.000D-05,
27670      4 6.440D-03, 2.570D-03, 2.830D-03, 1.150D-03, 7.100D-04, 3.300D-04,
27671      5-3.930D-03,-2.540D-03,-1.160D-03,-7.700D-04,-3.600D-04,-1.900D-04,
27672      6 2.340D-03, 1.930D-03, 5.300D-04, 3.700D-04, 1.600D-04, 9.000D-05,
27673      1 1.014D+00,-1.106D+00, 3.374D-01,-7.444D-02, 8.850D-03,-8.700D-04,
27674      2 9.233D-01,-1.285D+00, 4.475D-01,-9.786D-02, 1.419D-02,-1.120D-03,
27675      3 4.888D-02,-1.271D-01, 8.606D-02,-2.608D-02, 4.780D-03,-6.000D-04,
27676      4-2.691D-02, 4.887D-02,-1.771D-02, 1.620D-03, 2.500D-04,-6.000D-05,
27677      5 7.040D-03,-1.113D-02, 1.590D-03, 7.000D-04,-2.000D-04, 0.000D+00,
27678      6-1.710D-03, 2.290D-03, 3.800D-04,-3.500D-04, 4.000D-05, 1.000D-05/
27679       DATA (((CEHLQ(IX,IT,NX,3,2),IX=1,6),IT=1,6),NX=1,2)/
27680      1 1.008D-01,-7.100D-02, 1.973D-02,-5.710D-03, 2.930D-03,-9.900D-04,
27681      2-5.271D-02,-1.823D-02, 1.792D-02,-6.580D-03, 1.750D-03,-1.550D-03,
27682      3 1.220D-02, 1.763D-02,-8.690D-03,-8.800D-04,-1.160D-03,-2.100D-04,
27683      4-1.190D-03,-7.180D-03, 2.360D-03, 1.890D-03, 7.700D-04, 4.100D-04,
27684      5-9.100D-04, 2.040D-03,-3.100D-04,-1.050D-03,-4.000D-04,-2.400D-04,
27685      6 1.190D-03,-1.700D-04,-2.000D-04, 4.200D-04, 1.700D-04, 1.000D-04,
27686      1 1.081D+00,-1.189D+00, 3.868D-01,-8.617D-02, 1.115D-02,-1.180D-03,
27687      2 9.917D-01,-1.396D+00, 4.998D-01,-1.159D-01, 1.674D-02,-1.720D-03,
27688      3 5.099D-02,-1.338D-01, 9.173D-02,-2.885D-02, 5.890D-03,-6.500D-04,
27689      4-3.178D-02, 5.703D-02,-2.070D-02, 2.440D-03, 1.100D-04,-9.000D-05,
27690      5 8.970D-03,-1.392D-02, 2.050D-03, 6.500D-04,-2.300D-04, 2.000D-05,
27691      6-2.340D-03, 3.010D-03, 5.000D-04,-3.900D-04, 6.000D-05, 1.000D-05/
27692 C...Expansion coefficients for gluon distribution.
27693       DATA (((CEHLQ(IX,IT,NX,4,1),IX=1,6),IT=1,6),NX=1,2)/
27694      1 9.482D-01,-9.578D-01, 1.009D-01,-1.051D-01, 3.456D-02,-3.054D-02,
27695      2-9.627D-01, 5.379D-01, 3.368D-01,-9.525D-02, 1.488D-02,-2.051D-02,
27696      3 4.300D-01,-8.306D-02,-3.372D-01, 4.902D-02,-9.160D-03, 1.041D-02,
27697      4-1.925D-01,-1.790D-02, 2.183D-01, 7.490D-03, 4.140D-03,-1.860D-03,
27698      5 8.183D-02, 1.926D-02,-1.072D-01,-1.944D-02,-2.770D-03,-5.200D-04,
27699      6-3.884D-02,-1.234D-02, 5.410D-02, 1.879D-02, 3.350D-03, 1.040D-03,
27700      1 2.948D+01,-3.902D+01, 1.464D+01,-3.335D+00, 5.054D-01,-5.915D-02,
27701      2 2.559D+01,-3.955D+01, 1.661D+01,-4.299D+00, 6.904D-01,-8.243D-02,
27702      3-1.663D+00, 1.176D+00, 1.118D+00,-7.099D-01, 1.948D-01,-2.404D-02,
27703      4-2.168D-01, 8.170D-01,-7.169D-01, 1.851D-01,-1.924D-02,-3.250D-03,
27704      5 2.088D-01,-4.355D-01, 2.239D-01,-2.446D-02,-3.620D-03, 1.910D-03,
27705      6-9.097D-02, 1.601D-01,-5.681D-02,-2.500D-03, 2.580D-03,-4.700D-04/
27706       DATA (((CEHLQ(IX,IT,NX,4,2),IX=1,6),IT=1,6),NX=1,2)/
27707      1 2.367D+00, 4.453D-01, 3.660D-01, 9.467D-02, 1.341D-01, 1.661D-02,
27708      2-3.170D+00,-1.795D+00, 3.313D-02,-2.874D-01,-9.827D-02,-7.119D-02,
27709      3 1.823D+00, 1.457D+00,-2.465D-01, 3.739D-02, 6.090D-03, 1.814D-02,
27710      4-1.033D+00,-9.827D-01, 2.136D-01, 1.169D-01, 5.001D-02, 1.684D-02,
27711      5 5.133D-01, 5.259D-01,-1.173D-01,-1.139D-01,-4.988D-02,-2.021D-02,
27712      6-2.881D-01,-3.145D-01, 5.667D-02, 9.161D-02, 4.568D-02, 1.951D-02,
27713      1 3.036D+01,-4.062D+01, 1.578D+01,-3.699D+00, 6.020D-01,-7.031D-02,
27714      2 2.700D+01,-4.167D+01, 1.770D+01,-4.804D+00, 7.862D-01,-1.060D-01,
27715      3-1.909D+00, 1.357D+00, 1.127D+00,-7.181D-01, 2.232D-01,-2.481D-02,
27716      4-2.488D-01, 9.781D-01,-8.127D-01, 2.094D-01,-2.997D-02,-4.710D-03,
27717      5 2.506D-01,-5.427D-01, 2.672D-01,-3.103D-02,-1.800D-03, 2.870D-03,
27718      6-1.128D-01, 2.087D-01,-6.972D-02,-2.480D-03, 2.630D-03,-8.400D-04/
27719 C...Expansion coefficients for strange sea quark distribution.
27720       DATA (((CEHLQ(IX,IT,NX,5,1),IX=1,6),IT=1,6),NX=1,2)/
27721      1 4.968D-02,-4.173D-02, 2.102D-02,-3.270D-03, 3.240D-03,-6.700D-04,
27722      2-6.150D-03,-1.294D-02, 6.740D-03,-6.890D-03, 9.000D-04,-1.510D-03,
27723      3-8.580D-03, 5.050D-03,-4.900D-03,-1.600D-04,-9.400D-04,-1.500D-04,
27724      4 7.840D-03, 1.510D-03, 2.220D-03, 1.400D-03, 7.000D-04, 3.500D-04,
27725      5-4.410D-03,-2.220D-03,-8.900D-04,-8.500D-04,-3.600D-04,-2.000D-04,
27726      6 2.520D-03, 1.840D-03, 4.100D-04, 3.900D-04, 1.600D-04, 9.000D-05,
27727      1 9.235D-01,-1.085D+00, 3.464D-01,-7.210D-02, 9.140D-03,-9.100D-04,
27728      2 9.315D-01,-1.274D+00, 4.512D-01,-9.775D-02, 1.380D-02,-1.310D-03,
27729      3 4.739D-02,-1.296D-01, 8.482D-02,-2.642D-02, 4.760D-03,-5.700D-04,
27730      4-2.653D-02, 4.953D-02,-1.735D-02, 1.750D-03, 2.800D-04,-6.000D-05,
27731      5 6.940D-03,-1.132D-02, 1.480D-03, 6.500D-04,-2.100D-04, 0.000D+00,
27732      6-1.680D-03, 2.340D-03, 4.200D-04,-3.400D-04, 5.000D-05, 1.000D-05/
27733       DATA (((CEHLQ(IX,IT,NX,5,2),IX=1,6),IT=1,6),NX=1,2)/
27734      1 6.478D-02,-4.537D-02, 1.643D-02,-3.490D-03, 2.710D-03,-6.700D-04,
27735      2-2.223D-02,-2.126D-02, 1.247D-02,-6.290D-03, 1.120D-03,-1.440D-03,
27736      3-1.340D-03, 1.362D-02,-6.130D-03,-7.900D-04,-9.000D-04,-2.000D-04,
27737      4 5.080D-03,-3.610D-03, 1.700D-03, 1.830D-03, 6.800D-04, 4.000D-04,
27738      5-3.580D-03, 6.000D-05,-2.600D-04,-1.050D-03,-3.800D-04,-2.300D-04,
27739      6 2.420D-03, 9.300D-04,-1.000D-04, 4.500D-04, 1.700D-04, 1.100D-04,
27740      1 9.868D-01,-1.171D+00, 3.940D-01,-8.459D-02, 1.124D-02,-1.250D-03,
27741      2 1.001D+00,-1.383D+00, 5.044D-01,-1.152D-01, 1.658D-02,-1.830D-03,
27742      3 4.928D-02,-1.368D-01, 9.021D-02,-2.935D-02, 5.800D-03,-6.600D-04,
27743      4-3.133D-02, 5.785D-02,-2.023D-02, 2.630D-03, 1.600D-04,-8.000D-05,
27744      5 8.840D-03,-1.416D-02, 1.900D-03, 5.800D-04,-2.500D-04, 1.000D-05,
27745      6-2.300D-03, 3.080D-03, 5.500D-04,-3.700D-04, 7.000D-05, 1.000D-05/
27746 C...Expansion coefficients for charm sea quark distribution.
27747       DATA (((CEHLQ(IX,IT,NX,6,1),IX=1,6),IT=1,6),NX=1,2)/
27748      1 9.270D-03,-1.817D-02, 9.590D-03,-6.390D-03, 1.690D-03,-1.540D-03,
27749      2 5.710D-03,-1.188D-02, 6.090D-03,-4.650D-03, 1.240D-03,-1.310D-03,
27750      3-3.960D-03, 7.100D-03,-3.590D-03, 1.840D-03,-3.900D-04, 3.400D-04,
27751      4 1.120D-03,-1.960D-03, 1.120D-03,-4.800D-04, 1.000D-04,-4.000D-05,
27752      5 4.000D-05,-3.000D-05,-1.800D-04, 9.000D-05,-5.000D-05,-2.000D-05,
27753      6-4.200D-04, 7.300D-04,-1.600D-04, 5.000D-05, 5.000D-05, 5.000D-05,
27754      1 8.098D-01,-1.042D+00, 3.398D-01,-6.824D-02, 8.760D-03,-9.000D-04,
27755      2 8.961D-01,-1.217D+00, 4.339D-01,-9.287D-02, 1.304D-02,-1.290D-03,
27756      3 3.058D-02,-1.040D-01, 7.604D-02,-2.415D-02, 4.600D-03,-5.000D-04,
27757      4-2.451D-02, 4.432D-02,-1.651D-02, 1.430D-03, 1.200D-04,-1.000D-04,
27758      5 1.122D-02,-1.457D-02, 2.680D-03, 5.800D-04,-1.200D-04, 3.000D-05,
27759      6-7.730D-03, 7.330D-03,-7.600D-04,-2.400D-04, 1.000D-05, 0.000D+00/
27760       DATA (((CEHLQ(IX,IT,NX,6,2),IX=1,6),IT=1,6),NX=1,2)/
27761      1 9.980D-03,-1.945D-02, 1.055D-02,-6.870D-03, 1.860D-03,-1.560D-03,
27762      2 5.700D-03,-1.203D-02, 6.250D-03,-4.860D-03, 1.310D-03,-1.370D-03,
27763      3-4.490D-03, 7.990D-03,-4.170D-03, 2.050D-03,-4.400D-04, 3.300D-04,
27764      4 1.470D-03,-2.480D-03, 1.460D-03,-5.700D-04, 1.200D-04,-1.000D-05,
27765      5-9.000D-05, 1.500D-04,-3.200D-04, 1.200D-04,-6.000D-05,-4.000D-05,
27766      6-4.200D-04, 7.600D-04,-1.400D-04, 4.000D-05, 7.000D-05, 5.000D-05,
27767      1 8.698D-01,-1.131D+00, 3.836D-01,-8.111D-02, 1.048D-02,-1.300D-03,
27768      2 9.626D-01,-1.321D+00, 4.854D-01,-1.091D-01, 1.583D-02,-1.700D-03,
27769      3 3.057D-02,-1.088D-01, 8.022D-02,-2.676D-02, 5.590D-03,-5.600D-04,
27770      4-2.845D-02, 5.164D-02,-1.918D-02, 2.210D-03,-4.000D-05,-1.500D-04,
27771      5 1.311D-02,-1.751D-02, 3.310D-03, 5.100D-04,-1.200D-04, 5.000D-05,
27772      6-8.590D-03, 8.380D-03,-9.200D-04,-2.600D-04, 1.000D-05,-1.000D-05/
27773 C...Expansion coefficients for bottom sea quark distribution.
27774       DATA (((CEHLQ(IX,IT,NX,7,1),IX=1,6),IT=1,6),NX=1,2)/
27775      1 9.010D-03,-1.401D-02, 7.150D-03,-4.130D-03, 1.260D-03,-1.040D-03,
27776      2 6.280D-03,-9.320D-03, 4.780D-03,-2.890D-03, 9.100D-04,-8.200D-04,
27777      3-2.930D-03, 4.090D-03,-1.890D-03, 7.600D-04,-2.300D-04, 1.400D-04,
27778      4 3.900D-04,-1.200D-03, 4.400D-04,-2.500D-04, 2.000D-05,-2.000D-05,
27779      5 2.600D-04, 1.400D-04,-8.000D-05, 1.000D-04, 1.000D-05, 1.000D-05,
27780      6-2.600D-04, 3.200D-04, 1.000D-05,-1.000D-05, 1.000D-05,-1.000D-05,
27781      1 8.029D-01,-1.075D+00, 3.792D-01,-7.843D-02, 1.007D-02,-1.090D-03,
27782      2 7.903D-01,-1.099D+00, 4.153D-01,-9.301D-02, 1.317D-02,-1.410D-03,
27783      3-1.704D-02,-1.130D-02, 2.882D-02,-1.341D-02, 3.040D-03,-3.600D-04,
27784      4-7.200D-04, 7.230D-03,-5.160D-03, 1.080D-03,-5.000D-05,-4.000D-05,
27785      5 3.050D-03,-4.610D-03, 1.660D-03,-1.300D-04,-1.000D-05, 1.000D-05,
27786      6-4.360D-03, 5.230D-03,-1.610D-03, 2.000D-04,-2.000D-05, 0.000D+00/
27787       DATA (((CEHLQ(IX,IT,NX,7,2),IX=1,6),IT=1,6),NX=1,2)/
27788      1 8.980D-03,-1.459D-02, 7.510D-03,-4.410D-03, 1.310D-03,-1.070D-03,
27789      2 5.970D-03,-9.440D-03, 4.800D-03,-3.020D-03, 9.100D-04,-8.500D-04,
27790      3-3.050D-03, 4.440D-03,-2.100D-03, 8.500D-04,-2.400D-04, 1.400D-04,
27791      4 5.300D-04,-1.300D-03, 5.600D-04,-2.700D-04, 3.000D-05,-2.000D-05,
27792      5 2.000D-04, 1.400D-04,-1.100D-04, 1.000D-04, 0.000D+00, 0.000D+00,
27793      6-2.600D-04, 3.200D-04, 0.000D+00,-3.000D-05, 1.000D-05,-1.000D-05,
27794      1 8.672D-01,-1.174D+00, 4.265D-01,-9.252D-02, 1.244D-02,-1.460D-03,
27795      2 8.500D-01,-1.194D+00, 4.630D-01,-1.083D-01, 1.614D-02,-1.830D-03,
27796      3-2.241D-02,-5.630D-03, 2.815D-02,-1.425D-02, 3.520D-03,-4.300D-04,
27797      4-7.300D-04, 8.030D-03,-5.780D-03, 1.380D-03,-1.300D-04,-4.000D-05,
27798      5 3.460D-03,-5.380D-03, 1.960D-03,-2.100D-04, 1.000D-05, 1.000D-05,
27799      6-4.850D-03, 5.950D-03,-1.890D-03, 2.600D-04,-3.000D-05, 0.000D+00/
27800 C...Expansion coefficients for top sea quark distribution.
27801       DATA (((CEHLQ(IX,IT,NX,8,1),IX=1,6),IT=1,6),NX=1,2)/
27802      1 4.410D-03,-7.480D-03, 3.770D-03,-2.580D-03, 7.300D-04,-7.100D-04,
27803      2 3.840D-03,-6.050D-03, 3.030D-03,-2.030D-03, 5.800D-04,-5.900D-04,
27804      3-8.800D-04, 1.660D-03,-7.500D-04, 4.700D-04,-1.000D-04, 1.000D-04,
27805      4-8.000D-05,-1.500D-04, 1.200D-04,-9.000D-05, 3.000D-05, 0.000D+00,
27806      5 1.300D-04,-2.200D-04,-2.000D-05,-2.000D-05,-2.000D-05,-2.000D-05,
27807      6-7.000D-05, 1.900D-04,-4.000D-05, 2.000D-05, 0.000D+00, 0.000D+00,
27808      1 6.623D-01,-9.248D-01, 3.519D-01,-7.930D-02, 1.110D-02,-1.180D-03,
27809      2 6.380D-01,-9.062D-01, 3.582D-01,-8.479D-02, 1.265D-02,-1.390D-03,
27810      3-2.581D-02, 2.125D-02, 4.190D-03,-4.980D-03, 1.490D-03,-2.100D-04,
27811      4 7.100D-04, 5.300D-04,-1.270D-03, 3.900D-04,-5.000D-05,-1.000D-05,
27812      5 3.850D-03,-5.060D-03, 1.860D-03,-3.500D-04, 4.000D-05, 0.000D+00,
27813      6-3.530D-03, 4.460D-03,-1.500D-03, 2.700D-04,-3.000D-05, 0.000D+00/
27814       DATA (((CEHLQ(IX,IT,NX,8,2),IX=1,6),IT=1,6),NX=1,2)/
27815      1 4.260D-03,-7.530D-03, 3.830D-03,-2.680D-03, 7.600D-04,-7.300D-04,
27816      2 3.640D-03,-6.050D-03, 3.030D-03,-2.090D-03, 5.900D-04,-6.000D-04,
27817      3-9.200D-04, 1.710D-03,-8.200D-04, 5.000D-04,-1.200D-04, 1.000D-04,
27818      4-5.000D-05,-1.600D-04, 1.300D-04,-9.000D-05, 3.000D-05, 0.000D+00,
27819      5 1.300D-04,-2.100D-04,-1.000D-05,-2.000D-05,-2.000D-05,-1.000D-05,
27820      6-8.000D-05, 1.800D-04,-5.000D-05, 2.000D-05, 0.000D+00, 0.000D+00,
27821      1 7.146D-01,-1.007D+00, 3.932D-01,-9.246D-02, 1.366D-02,-1.540D-03,
27822      2 6.856D-01,-9.828D-01, 3.977D-01,-9.795D-02, 1.540D-02,-1.790D-03,
27823      3-3.053D-02, 2.758D-02, 2.150D-03,-4.880D-03, 1.640D-03,-2.500D-04,
27824      4 9.200D-04, 4.200D-04,-1.340D-03, 4.600D-04,-8.000D-05,-1.000D-05,
27825      5 4.230D-03,-5.660D-03, 2.140D-03,-4.300D-04, 6.000D-05, 0.000D+00,
27826      6-3.890D-03, 5.000D-03,-1.740D-03, 3.300D-04,-4.000D-05, 0.000D+00/
27827  
27828 C...The following data lines are coefficients needed in the
27829 C...Duke, Owens proton structure function parametrizations, see below.
27830 C...Expansion coefficients for (up+down) valence quark distribution.
27831       DATA ((CDO(IP,IS,1,1),IS=1,6),IP=1,3)/
27832      1 4.190D-01, 3.460D+00, 4.400D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27833      2 4.000D-03, 7.240D-01,-4.860D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27834      3-7.000D-03,-6.600D-02, 1.330D+00, 0.000D+00, 0.000D+00, 0.000D+00/
27835       DATA ((CDO(IP,IS,1,2),IS=1,6),IP=1,3)/
27836      1 3.740D-01, 3.330D+00, 6.030D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27837      2 1.400D-02, 7.530D-01,-6.220D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27838      3 0.000D+00,-7.600D-02, 1.560D+00, 0.000D+00, 0.000D+00, 0.000D+00/
27839 C...Expansion coefficients for down valence quark distribution.
27840       DATA ((CDO(IP,IS,2,1),IS=1,6),IP=1,3)/
27841      1 7.630D-01, 4.000D+00, 0.000D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27842      2-2.370D-01, 6.270D-01,-4.210D-01, 0.000D+00, 0.000D+00, 0.000D+00,
27843      3 2.600D-02,-1.900D-02, 3.300D-02, 0.000D+00, 0.000D+00, 0.000D+00/
27844       DATA ((CDO(IP,IS,2,2),IS=1,6),IP=1,3)/
27845      1 7.610D-01, 3.830D+00, 0.000D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27846      2-2.320D-01, 6.270D-01,-4.180D-01, 0.000D+00, 0.000D+00, 0.000D+00,
27847      3 2.300D-02,-1.900D-02, 3.600D-02, 0.000D+00, 0.000D+00, 0.000D+00/
27848 C...Expansion coefficients for (up+down+strange) sea quark distribution.
27849       DATA ((CDO(IP,IS,3,1),IS=1,6),IP=1,3)/
27850      1 1.265D+00, 0.000D+00, 8.050D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27851      2-1.132D+00,-3.720D-01, 1.590D+00, 6.310D+00,-1.050D+01, 1.470D+01,
27852      3 2.930D-01,-2.900D-02,-1.530D-01,-2.730D-01,-3.170D+00, 9.800D+00/
27853       DATA ((CDO(IP,IS,3,2),IS=1,6),IP=1,3)/
27854      1 1.670D+00, 0.000D+00, 9.150D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27855      2-1.920D+00,-2.730D-01, 5.300D-01, 1.570D+01,-1.010D+02, 2.230D+02,
27856      3 5.820D-01,-1.640D-01,-7.630D-01,-2.830D+00, 4.470D+01,-1.170D+02/
27857 C...Expansion coefficients for charm sea quark distribution.
27858       DATA ((CDO(IP,IS,4,1),IS=1,6),IP=1,3)/
27859      1 0.000D+00,-3.600D-02, 6.350D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27860      2 1.350D-01,-2.220D-01, 3.260D+00,-3.030D+00, 1.740D+01,-1.790D+01,
27861      3-7.500D-02,-5.800D-02,-9.090D-01, 1.500D+00,-1.130D+01, 1.560D+01/
27862        DATA ((CDO(IP,IS,4,2),IS=1,6),IP=1,3)/
27863      1 0.000D+00,-1.200D-01, 3.510D+00, 0.000D+00, 0.000D+00, 0.000D+00,
27864      2 6.700D-02,-2.330D-01, 3.660D+00,-4.740D-01, 9.500D+00,-1.660D+01,
27865      3-3.100D-02,-2.300D-02,-4.530D-01, 3.580D-01,-5.430D+00, 1.550D+01/
27866 C...Expansion coefficients for gluon distribution.
27867       DATA ((CDO(IP,IS,5,1),IS=1,6),IP=1,3)/
27868      1 1.560D+00, 0.000D+00, 6.000D+00, 9.000D+00, 0.000D+00, 0.000D+00,
27869      2-1.710D+00,-9.490D-01, 1.440D+00,-7.190D+00,-1.650D+01, 1.530D+01,
27870      3 6.380D-01, 3.250D-01,-1.050D+00, 2.550D-01, 1.090D+01,-1.010D+01/
27871       DATA ((CDO(IP,IS,5,2),IS=1,6),IP=1,3)/
27872      1 8.790D-01, 0.000D+00, 4.000D+00, 9.000D+00, 0.000D+00, 0.000D+00,
27873      2-9.710D-01,-1.160D+00, 1.230D+00,-5.640D+00,-7.540D+00,-5.960D-01,
27874      3 4.340D-01, 4.760D-01,-2.540D-01,-8.170D-01, 5.500D+00, 1.260D-01/
27875  
27876 C...Euler's beta function, requires ordinary Gamma function
27877       EULBET(X,Y)=PYGAMM(X)*PYGAMM(Y)/PYGAMM(X+Y)
27878  
27879 C...Leading order proton parton distributions from Gluck, Reya and Vogt.
27880 C...Allowed variable range: 0.25 GeV^2 < Q^2 < 10^8 GeV^2 and
27881 C...10^-5 < x < 1.
27882       IF(MSTP(51).EQ.11) THEN
27883  
27884 C...Determine s expansion variable and some x expressions.
27885         Q2IN=MIN(1D8,MAX(0.25D0,Q2))
27886         SD=LOG(LOG(Q2IN/0.232D0**2)/LOG(0.25D0/0.232D0**2))
27887         SD2=SD**2
27888         XL=-LOG(X)
27889         XS=SQRT(X)
27890  
27891 C...Evaluate valence, gluon and sea distributions.
27892         XFVUD=(0.663D0+0.191D0*SD-0.041D0*SD2+0.031D0*SD**3)*
27893      &  X**0.326D0*(1D0+(-1.97D0+6.74D0*SD-1.96D0*SD2)*XS+
27894      &  (24.4D0-20.7D0*SD+4.08D0*SD2)*X)*
27895      &  (1D0-X)**(2.86D0+0.70D0*SD-0.02D0*SD2)
27896         XFVDD=(0.579D0+0.283D0*SD+0.047D0*SD2)*X**(0.523D0-0.015D0*SD)*
27897      &  (1D0+(2.22D0-0.59D0*SD-0.27D0*SD2)*XS+(5.95D0-6.19D0*SD+
27898      &  1.55D0*SD2)*X)*(1D0-X)**(3.57D0+0.94D0*SD-0.16D0*SD2)
27899         XFGLU=(X**(1.00D0-0.17D0*SD)*((4.879D0*SD-1.383D0*SD2)+
27900      &  (25.92D0-28.97D0*SD+5.596D0*SD2)*X+(-25.69D0+23.68D0*SD-
27901      &  1.975D0*SD2)*X**2)+SD**0.558D0*EXP(-(0.595D0+2.138D0*SD)+
27902      &  SQRT(4.066D0*SD**1.218D0*XL)))*
27903      &  (1D0-X)**(2.537D0+1.718D0*SD+0.353D0*SD2)
27904         XFSEA=(X**(0.412D0-0.171D0*SD)*(0.363D0-1.196D0*X+(1.029D0+
27905      &  1.785D0*SD-0.459D0*SD2)*X**2)*XL**(0.566D0-0.496D0*SD)+
27906      &  SD**1.396D0*EXP(-(3.838D0+1.944D0*SD)+SQRT(2.845D0*SD**1.331D0*
27907      &  XL)))*(1D0-X)**(4.696D0+2.109D0*SD)
27908         XFSTR=SD**0.803D0*(1D0+(-3.055D0+1.024D0*SD**0.67D0)*XS+
27909      &  (27.4D0-20.0D0*SD**0.154D0)*X)*(1D0-X)**6.22D0*
27910      &  EXP(-(4.33D0+1.408D0*SD)+SQRT((8.27D0-0.437D0*SD)*
27911      &  SD**0.563D0*XL))/XL**(2.082D0-0.577D0*SD)
27912         IF(SD.LE.0.888D0) THEN
27913           XFCHM=0D0
27914         ELSE
27915           XFCHM=(SD-0.888D0)**1.01D0*(1.+(4.24D0-0.804D0*SD)*X)*
27916      &    (1D0-X)**(3.46D0+1.076D0*SD)*EXP(-(4.61D0+1.49D0*SD)+
27917      &    SQRT((2.555D0+1.961D0*SD)*SD**0.37D0*XL))
27918         ENDIF
27919         IF(SD.LE.1.351D0) THEN
27920           XFBOT=0D0
27921         ELSE
27922           XFBOT=(SD-1.351D0)*(1D0+1.848D0*X)*(1D0-X)**(2.929D0+
27923      &    1.396D0*SD)*EXP(-(4.71D0+1.514D0*SD)+
27924      &    SQRT((4.02D0+1.239D0*SD)*SD**0.51D0*XL))
27925         ENDIF
27926  
27927 C...Put into output array.
27928         XPPR(0)=XFGLU
27929         XPPR(1)=XFVDD+XFSEA
27930         XPPR(2)=XFVUD-XFVDD+XFSEA
27931         XPPR(3)=XFSTR
27932         XPPR(4)=XFCHM
27933         XPPR(5)=XFBOT
27934         XPPR(-1)=XFSEA
27935         XPPR(-2)=XFSEA
27936         XPPR(-3)=XFSTR
27937         XPPR(-4)=XFCHM
27938         XPPR(-5)=XFBOT
27939  
27940 C...Proton parton distributions from Eichten, Hinchliffe, Lane, Quigg.
27941 C...Allowed variable range: 5 GeV^2 < Q^2 < 1E8 GeV^2; 1E-4 < x < 1
27942       ELSEIF(MSTP(51).EQ.12.OR.MSTP(51).EQ.13) THEN
27943  
27944 C...Determine set, Lambda and x and t expansion variables.
27945         NSET=MSTP(51)-11
27946         IF(NSET.EQ.1) ALAM=0.2D0
27947         IF(NSET.EQ.2) ALAM=0.29D0
27948         TMIN=LOG(5D0/ALAM**2)
27949         TMAX=LOG(1D8/ALAM**2)
27950         T=LOG(MAX(1D0,Q2/ALAM**2))
27951         VT=MAX(-1D0,MIN(1D0,(2D0*T-TMAX-TMIN)/(TMAX-TMIN)))
27952         NX=1
27953         IF(X.LE.0.1D0) NX=2
27954         IF(NX.EQ.1) VX=(2D0*X-1.1D0)/0.9D0
27955         IF(NX.EQ.2) VX=MAX(-1D0,(2D0*LOG(X)+11.51293D0)/6.90776D0)
27956  
27957 C...Chebyshev polynomials for x and t expansion.
27958         TX(1)=1D0
27959         TX(2)=VX
27960         TX(3)=2D0*VX**2-1D0
27961         TX(4)=4D0*VX**3-3D0*VX
27962         TX(5)=8D0*VX**4-8D0*VX**2+1D0
27963         TX(6)=16D0*VX**5-20D0*VX**3+5D0*VX
27964         TT(1)=1D0
27965         TT(2)=VT
27966         TT(3)=2D0*VT**2-1D0
27967         TT(4)=4D0*VT**3-3D0*VT
27968         TT(5)=8D0*VT**4-8D0*VT**2+1D0
27969         TT(6)=16D0*VT**5-20D0*VT**3+5D0*VT
27970  
27971 C...Calculate structure functions.
27972         DO 130 KFL=1,6
27973           XQSUM=0D0
27974           DO 120 IT=1,6
27975             DO 110 IX=1,6
27976               XQSUM=XQSUM+CEHLQ(IX,IT,NX,KFL,NSET)*TX(IX)*TT(IT)
27977   110       CONTINUE
27978   120     CONTINUE
27979           XQ(KFL)=XQSUM*(1D0-X)**NEHLQ(KFL,NSET)
27980   130   CONTINUE
27981  
27982 C...Put into output array.
27983         XPPR(0)=XQ(4)
27984         XPPR(1)=XQ(2)+XQ(3)
27985         XPPR(2)=XQ(1)+XQ(3)
27986         XPPR(3)=XQ(5)
27987         XPPR(4)=XQ(6)
27988         XPPR(-1)=XQ(3)
27989         XPPR(-2)=XQ(3)
27990         XPPR(-3)=XQ(5)
27991         XPPR(-4)=XQ(6)
27992  
27993 C...Special expansion for bottom (threshold effects).
27994         IF(MSTP(58).GE.5) THEN
27995           IF(NSET.EQ.1) TMIN=8.1905D0
27996           IF(NSET.EQ.2) TMIN=7.4474D0
27997           IF(T.GT.TMIN) THEN
27998             VT=MAX(-1D0,MIN(1D0,(2D0*T-TMAX-TMIN)/(TMAX-TMIN)))
27999             TT(1)=1D0
28000             TT(2)=VT
28001             TT(3)=2D0*VT**2-1D0
28002             TT(4)=4D0*VT**3-3D0*VT
28003             TT(5)=8D0*VT**4-8D0*VT**2+1D0
28004             TT(6)=16D0*VT**5-20D0*VT**3+5D0*VT
28005             XQSUM=0D0
28006             DO 150 IT=1,6
28007               DO 140 IX=1,6
28008                 XQSUM=XQSUM+CEHLQ(IX,IT,NX,7,NSET)*TX(IX)*TT(IT)
28009   140         CONTINUE
28010   150       CONTINUE
28011             XPPR(5)=XQSUM*(1D0-X)**NEHLQ(7,NSET)
28012             XPPR(-5)=XPPR(5)
28013           ENDIF
28014         ENDIF
28015  
28016 C...Special expansion for top (threshold effects).
28017         IF(MSTP(58).GE.6) THEN
28018           IF(NSET.EQ.1) TMIN=11.5528D0
28019           IF(NSET.EQ.2) TMIN=10.8097D0
28020           TMIN=TMIN+2D0*LOG(PMAS(6,1)/30D0)
28021           TMAX=TMAX+2D0*LOG(PMAS(6,1)/30D0)
28022           IF(T.GT.TMIN) THEN
28023             VT=MAX(-1D0,MIN(1D0,(2D0*T-TMAX-TMIN)/(TMAX-TMIN)))
28024             TT(1)=1D0
28025             TT(2)=VT
28026             TT(3)=2D0*VT**2-1D0
28027             TT(4)=4D0*VT**3-3D0*VT
28028             TT(5)=8D0*VT**4-8D0*VT**2+1D0
28029             TT(6)=16D0*VT**5-20D0*VT**3+5D0*VT
28030             XQSUM=0D0
28031             DO 170 IT=1,6
28032               DO 160 IX=1,6
28033                 XQSUM=XQSUM+CEHLQ(IX,IT,NX,8,NSET)*TX(IX)*TT(IT)
28034   160         CONTINUE
28035   170       CONTINUE
28036             XPPR(6)=XQSUM*(1D0-X)**NEHLQ(8,NSET)
28037             XPPR(-6)=XPPR(6)
28038           ENDIF
28039         ENDIF
28040  
28041 C...Proton parton distributions from Duke, Owens.
28042 C...Allowed variable range: 4 GeV^2 < Q^2 < approx 1E6 GeV^2.
28043       ELSEIF(MSTP(51).EQ.14.OR.MSTP(51).EQ.15) THEN
28044  
28045 C...Determine set, Lambda and s expansion parameter.
28046         NSET=MSTP(51)-13
28047         IF(NSET.EQ.1) ALAM=0.2D0
28048         IF(NSET.EQ.2) ALAM=0.4D0
28049         Q2IN=MIN(1D6,MAX(4D0,Q2))
28050         SD=LOG(LOG(Q2IN/ALAM**2)/LOG(4D0/ALAM**2))
28051  
28052 C...Calculate structure functions.
28053         DO 190 KFL=1,5
28054           DO 180 IS=1,6
28055             TS(IS)=CDO(1,IS,KFL,NSET)+CDO(2,IS,KFL,NSET)*SD+
28056      &      CDO(3,IS,KFL,NSET)*SD**2
28057   180     CONTINUE
28058           IF(KFL.LE.2) THEN
28059             XQ(KFL)=X**TS(1)*(1D0-X)**TS(2)*(1D0+TS(3)*X)/(EULBET(TS(1),
28060      &      TS(2)+1D0)*(1D0+TS(3)*TS(1)/(TS(1)+TS(2)+1D0)))
28061           ELSE
28062             XQ(KFL)=TS(1)*X**TS(2)*(1D0-X)**TS(3)*(1D0+TS(4)*X+
28063      &      TS(5)*X**2+TS(6)*X**3)
28064           ENDIF
28065   190   CONTINUE
28066  
28067 C...Put into output arrays.
28068         XPPR(0)=XQ(5)
28069         XPPR(1)=XQ(2)+XQ(3)/6D0
28070         XPPR(2)=3D0*XQ(1)-XQ(2)+XQ(3)/6D0
28071         XPPR(3)=XQ(3)/6D0
28072         XPPR(4)=XQ(4)
28073         XPPR(-1)=XQ(3)/6D0
28074         XPPR(-2)=XQ(3)/6D0
28075         XPPR(-3)=XQ(3)/6D0
28076         XPPR(-4)=XQ(4)
28077 
28078       ENDIF
28079   
28080       RETURN
28081       END
28082  
28083 C*********************************************************************
28084  
28085 C...PYHFTH
28086 C...Gives threshold attractive/repulsive factor for heavy flavour
28087 C...production.
28088  
28089       FUNCTION PYHFTH(SH,SQM,FRATT)
28090  
28091 C...Double precision and integer declarations.
28092       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28093       IMPLICIT INTEGER(I-N)
28094       INTEGER PYK,PYCHGE,PYCOMP
28095 C...Commonblocks.
28096       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28097       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
28098       COMMON/PYINT1/MINT(400),VINT(400)
28099       SAVE /PYDAT1/,/PYPARS/,/PYINT1/
28100  
28101 C...Value for alpha_strong.
28102       IF(MSTP(35).LE.1) THEN
28103         ALSSG=PARP(35)
28104       ELSE
28105         MST115=MSTU(115)
28106         MSTU(115)=MSTP(36)
28107         Q2BN=SQRT(MAX(1D0,SQM*((SQRT(SH)-2D0*SQRT(SQM))**2+
28108      &  PARP(36)**2)))
28109         ALSSG=PYALPS(Q2BN)
28110         MSTU(115)=MST115
28111       ENDIF
28112  
28113 C...Evaluate attractive and repulsive factors.
28114       XATTR=4D0*PARU(1)*ALSSG/(3D0*SQRT(MAX(1D-20,1D0-4D0*SQM/SH)))
28115       FATTR=XATTR/(1D0-EXP(-MIN(50D0,XATTR)))
28116       XREPU=PARU(1)*ALSSG/(6D0*SQRT(MAX(1D-20,1D0-4D0*SQM/SH)))
28117       FREPU=XREPU/(EXP(MIN(50D0,XREPU))-1D0)
28118       PYHFTH=FRATT*FATTR+(1D0-FRATT)*FREPU
28119       VINT(138)=PYHFTH
28120  
28121       RETURN
28122       END
28123  
28124 C*********************************************************************
28125  
28126 C...PYSPLI
28127 C...Splits a hadron remnant into two (partons or hadron + parton)
28128 C...in case it is more complicated than just a quark or a diquark.
28129  
28130       SUBROUTINE PYSPLI(KF,KFLIN,KFLCH,KFLSP)
28131  
28132 C...Double precision and integer declarations.
28133       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28134       IMPLICIT INTEGER(I-N)
28135       INTEGER PYK,PYCHGE,PYCOMP
28136 C...Commonblocks. PYDAT1 temporary
28137       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
28138       COMMON/PYINT1/MINT(400),VINT(400)
28139       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28140       SAVE /PYPARS/,/PYINT1/,/PYDAT1/
28141 C...Local array.
28142       DIMENSION KFL(3)
28143  
28144 C...Preliminaries. Parton composition.
28145       KFA=IABS(KF)
28146       KFS=ISIGN(1,KF)
28147       KFL(1)=MOD(KFA/1000,10)
28148       KFL(2)=MOD(KFA/100,10)
28149       KFL(3)=MOD(KFA/10,10)
28150       IF(KFA.EQ.22.AND.MINT(109).EQ.2) THEN
28151         KFL(2)=INT(1.5D0+PYR(0))
28152         IF(MINT(105).EQ.333) KFL(2)=3
28153         IF(MINT(105).EQ.443) KFL(2)=4
28154         KFL(3)=KFL(2)
28155       ELSEIF((KFA.EQ.111.OR.KFA.EQ.113).AND.PYR(0).GT.0.5D0) THEN
28156         KFL(2)=2
28157         KFL(3)=2
28158       ELSEIF(KFA.EQ.223.AND.PYR(0).GT.0.5D0) THEN
28159         KFL(2)=1
28160         KFL(3)=1
28161       ENDIF
28162       IF(KFLIN.NE.21.AND.KFLIN.NE.22.AND.KFLIN.NE.23) THEN
28163         KFLR=KFLIN*KFS
28164       ELSE
28165         KFLR=KFLIN
28166       ENDIF
28167       KFLCH=0
28168  
28169 C...Subdivide lepton.
28170       IF(KFA.GE.11.AND.KFA.LE.18) THEN
28171         IF(KFLR.EQ.KFA) THEN
28172           KFLSP=KFS*22
28173         ELSEIF(KFLR.EQ.22) THEN
28174           KFLSP=KFA
28175         ELSEIF(KFLR.EQ.-24.AND.MOD(KFA,2).EQ.1) THEN
28176           KFLSP=KFA+1
28177         ELSEIF(KFLR.EQ.24.AND.MOD(KFA,2).EQ.0) THEN
28178           KFLSP=KFA-1
28179         ELSEIF(KFLR.EQ.21) THEN
28180           KFLSP=KFA
28181           KFLCH=KFS*21
28182         ELSE
28183           KFLSP=KFA
28184           KFLCH=-KFLR
28185         ENDIF
28186  
28187 C...Subdivide photon.
28188       ELSEIF(KFA.EQ.22.AND.MINT(109).NE.2) THEN
28189         IF(KFLR.NE.21) THEN
28190           KFLSP=-KFLR
28191         ELSE
28192           RAGR=0.75D0*PYR(0)
28193           KFLSP=1
28194           IF(RAGR.GT.0.125D0) KFLSP=2
28195           IF(RAGR.GT.0.625D0) KFLSP=3
28196           IF(PYR(0).GT.0.5D0) KFLSP=-KFLSP
28197           KFLCH=-KFLSP
28198         ENDIF
28199  
28200 C...Subdivide Reggeon or Pomeron.
28201       ELSEIF(KFA.EQ.28.OR.KFA.EQ.29) THEN
28202         IF(KFLIN.EQ.21) THEN
28203           KFLSP=KFS*21
28204         ELSE
28205           KFLSP=-KFLIN
28206         ENDIF
28207  
28208 C...Subdivide meson.
28209       ELSEIF(KFL(1).EQ.0) THEN
28210         KFL(2)=KFL(2)*(-1)**KFL(2)
28211         KFL(3)=-KFL(3)*(-1)**IABS(KFL(2))
28212         IF(KFLR.EQ.KFL(2)) THEN
28213           KFLSP=KFL(3)
28214         ELSEIF(KFLR.EQ.KFL(3)) THEN
28215           KFLSP=KFL(2)
28216         ELSEIF(KFLR.EQ.21.AND.PYR(0).GT.0.5D0) THEN
28217           KFLSP=KFL(2)
28218           KFLCH=KFL(3)
28219         ELSEIF(KFLR.EQ.21) THEN
28220           KFLSP=KFL(3)
28221           KFLCH=KFL(2)
28222         ELSEIF(KFLR*KFL(2).GT.0) THEN
28223           NTRY=0
28224   100     NTRY=NTRY+1
28225           CALL PYKFDI(-KFLR,KFL(2),KFDUMP,KFLCH)
28226           IF(KFLCH.EQ.0.AND.NTRY.LT.100) THEN
28227             GOTO 100
28228           ELSEIF(KFLCH.EQ.0) THEN
28229             CALL PYERRM(14,'(PYSPLI:) caught in infinite loop')
28230             MINT(51)=1
28231             RETURN
28232           ENDIF
28233           KFLSP=KFL(3)
28234         ELSE
28235           NTRY=0
28236   110     NTRY=NTRY+1
28237           CALL PYKFDI(-KFLR,KFL(3),KFDUMP,KFLCH)
28238           IF(KFLCH.EQ.0.AND.NTRY.LT.100) THEN
28239             GOTO 110
28240           ELSEIF(KFLCH.EQ.0) THEN
28241             CALL PYERRM(14,'(PYSPLI:) caught in infinite loop')
28242             MINT(51)=1
28243             RETURN
28244           ENDIF
28245           KFLSP=KFL(2)
28246         ENDIF
28247  
28248 C...Subdivide baryon.
28249       ELSE
28250         NAGR=0
28251         DO 120 J=1,3
28252           IF(KFLR.EQ.KFL(J)) NAGR=NAGR+1
28253   120   CONTINUE
28254         IF(NAGR.GE.1) THEN
28255           RAGR=0.00001D0+(NAGR-0.00002D0)*PYR(0)
28256           IAGR=0
28257           DO 130 J=1,3
28258             IF(KFLR.EQ.KFL(J)) RAGR=RAGR-1D0
28259             IF(IAGR.EQ.0.AND.RAGR.LE.0D0) IAGR=J
28260   130     CONTINUE
28261         ELSE
28262           IAGR=1.00001D0+2.99998D0*PYR(0)
28263         ENDIF
28264         ID1=1
28265         IF(IAGR.EQ.1) ID1=2
28266         IF(IAGR.EQ.1.AND.KFL(3).GT.KFL(2)) ID1=3
28267         ID2=6-IAGR-ID1
28268         KSP=3
28269         IF(MOD(KFA,10).EQ.2.AND.KFL(1).EQ.KFL(2)) THEN
28270           IF(IAGR.NE.3.AND.PYR(0).GT.0.25D0) KSP=1
28271         ELSEIF(MOD(KFA,10).EQ.2.AND.KFL(2).GE.KFL(3)) THEN
28272           IF(IAGR.NE.1.AND.PYR(0).GT.0.25D0) KSP=1
28273         ELSEIF(MOD(KFA,10).EQ.2) THEN
28274           IF(IAGR.EQ.1) KSP=1
28275           IF(IAGR.NE.1.AND.PYR(0).GT.0.75D0) KSP=1
28276         ENDIF
28277         KFLSP=1000*KFL(ID1)+100*KFL(ID2)+KSP
28278         IF(KFLR.EQ.21) THEN
28279           KFLCH=KFL(IAGR)
28280         ELSEIF(NAGR.EQ.0.AND.KFLR.GT.0) THEN
28281           NTRY=0
28282   140     NTRY=NTRY+1
28283           CALL PYKFDI(-KFLR,KFL(IAGR),KFDUMP,KFLCH)
28284           IF(KFLCH.EQ.0.AND.NTRY.LT.100) THEN
28285             GOTO 140
28286           ELSEIF(KFLCH.EQ.0) THEN
28287             CALL PYERRM(14,'(PYSPLI:) caught in infinite loop')
28288             MINT(51)=1
28289             RETURN
28290           ENDIF
28291         ELSEIF(NAGR.EQ.0) THEN
28292           NTRY=0
28293   150     NTRY=NTRY+1
28294           CALL PYKFDI(10000*KFL(ID1)+KFLSP,-KFLR,KFDUMP,KFLCH)
28295           IF(KFLCH.EQ.0.AND.NTRY.LT.100) THEN
28296             GOTO 150
28297           ELSEIF(KFLCH.EQ.0) THEN
28298             CALL PYERRM(14,'(PYSPLI:) caught in infinite loop')
28299             MINT(51)=1
28300             RETURN
28301           ENDIF
28302           KFLSP=KFL(IAGR)
28303         ENDIF
28304       ENDIF
28305  
28306 C...Add on correct sign for result.
28307       KFLCH=KFLCH*KFS
28308       KFLSP=KFLSP*KFS
28309  
28310       RETURN
28311       END
28312 
28313 C*********************************************************************
28314  
28315 C...PYGAMM
28316 C...Gives ordinary Gamma function Gamma(x) for positive, real arguments;
28317 C...see M. Abramowitz, I. A. Stegun: Handbook of Mathematical Functions
28318 C...(Dover, 1965) 6.1.36.
28319  
28320       FUNCTION PYGAMM(X)
28321  
28322 C...Double precision and integer declarations.
28323       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28324       IMPLICIT INTEGER(I-N)
28325       INTEGER PYK,PYCHGE,PYCOMP
28326 C...Local array and data.
28327       DIMENSION B(8)
28328       DATA B/-0.577191652D0,0.988205891D0,-0.897056937D0,0.918206857D0,
28329      &-0.756704078D0,0.482199394D0,-0.193527818D0,0.035868343D0/
28330  
28331       NX=INT(X)
28332       DX=X-NX
28333  
28334       PYGAMM=1D0
28335       DXP=1D0
28336       DO 100 I=1,8
28337         DXP=DXP*DX
28338         PYGAMM=PYGAMM+B(I)*DXP
28339   100 CONTINUE
28340       IF(X.LT.1D0) THEN
28341         PYGAMM=PYGAMM/X
28342       ELSE
28343         DO 110 IX=1,NX-1
28344           PYGAMM=(X-IX)*PYGAMM
28345   110   CONTINUE
28346       ENDIF
28347  
28348       RETURN
28349       END
28350  
28351 C***********************************************************************
28352  
28353 C...PYWAUX
28354 C...Calculates real and imaginary parts of the auxiliary functions W1
28355 C...and W2; see R. K. Ellis, I. Hinchliffe, M. Soldate and J. J. van
28356 C...der Bij, Nucl. Phys. B297 (1988) 221.
28357  
28358       SUBROUTINE PYWAUX(IAUX,EPS,WRE,WIM)
28359  
28360 C...Double precision and integer declarations.
28361       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28362       IMPLICIT INTEGER(I-N)
28363       INTEGER PYK,PYCHGE,PYCOMP
28364 C...Commonblocks.
28365       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28366       SAVE /PYDAT1/
28367  
28368       ASINH(X)=LOG(X+SQRT(X**2+1D0))
28369       ACOSH(X)=LOG(X+SQRT(X**2-1D0))
28370  
28371       IF(EPS.LT.0D0) THEN
28372         IF(IAUX.EQ.1) WRE=2D0*SQRT(1D0-EPS)*ASINH(SQRT(-1D0/EPS))
28373         IF(IAUX.EQ.2) WRE=4D0*(ASINH(SQRT(-1D0/EPS)))**2
28374         WIM=0D0
28375       ELSEIF(EPS.LT.1D0) THEN
28376         IF(IAUX.EQ.1) WRE=2D0*SQRT(1D0-EPS)*ACOSH(SQRT(1D0/EPS))
28377         IF(IAUX.EQ.2) WRE=4D0*(ACOSH(SQRT(1D0/EPS)))**2-PARU(1)**2
28378         IF(IAUX.EQ.1) WIM=-PARU(1)*SQRT(1D0-EPS)
28379         IF(IAUX.EQ.2) WIM=-4D0*PARU(1)*ACOSH(SQRT(1D0/EPS))
28380       ELSE
28381         IF(IAUX.EQ.1) WRE=2D0*SQRT(EPS-1D0)*ASIN(SQRT(1D0/EPS))
28382         IF(IAUX.EQ.2) WRE=-4D0*(ASIN(SQRT(1D0/EPS)))**2
28383         WIM=0D0
28384       ENDIF
28385  
28386       RETURN
28387       END
28388  
28389 C***********************************************************************
28390  
28391 C...PYI3AU
28392 C...Calculates real and imaginary parts of the auxiliary function I3;
28393 C...see R. K. Ellis, I. Hinchliffe, M. Soldate and J. J. van der Bij,
28394 C...Nucl. Phys. B297 (1988) 221.
28395  
28396       SUBROUTINE PYI3AU(EPS,RAT,Y3RE,Y3IM)
28397  
28398 C...Double precision and integer declarations.
28399       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28400       IMPLICIT INTEGER(I-N)
28401       INTEGER PYK,PYCHGE,PYCOMP
28402 C...Commonblocks.
28403       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28404       SAVE /PYDAT1/
28405  
28406       BE=0.5D0*(1D0+SQRT(1D0+RAT*EPS))
28407       IF(EPS.LT.1D0) GA=0.5D0*(1D0+SQRT(1D0-EPS))
28408  
28409       IF(EPS.LT.0D0) THEN
28410         IF(ABS(EPS).LT.1D-4.AND.ABS(RAT*EPS).LT.1D-4) THEN
28411           F3RE=PYSPEN(-0.25D0*EPS/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)-
28412      &    PYSPEN((1D0-0.25D0*EPS)/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)+
28413      &    PYSPEN(0.25D0*(RAT+1D0)*EPS/(1D0+0.25D0*RAT*EPS),0D0,1)-
28414      &    PYSPEN((RAT+1D0)/RAT,0D0,1)+0.5D0*(LOG(1D0+0.25D0*RAT*EPS)**2-
28415      &    LOG(0.25D0*RAT*EPS)**2)+LOG(1D0-0.25D0*EPS)*
28416      &    LOG((1D0+0.25D0*(RAT-1D0)*EPS)/(1D0+0.25D0*RAT*EPS))+
28417      &    LOG(-0.25D0*EPS)*LOG(0.25D0*RAT*EPS/(1D0+0.25D0*(RAT-1D0)*
28418      &    EPS))
28419         ELSEIF(ABS(EPS).LT.1D-4.AND.ABS(RAT*EPS).GE.1D-4) THEN
28420           F3RE=PYSPEN(-0.25D0*EPS/(BE-0.25D0*EPS),0D0,1)-
28421      &    PYSPEN((1D0-0.25D0*EPS)/(BE-0.25D0*EPS),0D0,1)+
28422      &    PYSPEN((BE-1D0+0.25D0*EPS)/BE,0D0,1)-
28423      &    PYSPEN((BE-1D0+0.25D0*EPS)/(BE-1D0),0D0,1)+
28424      &    0.5D0*(LOG(BE)**2-LOG(BE-1D0)**2)+
28425      &    LOG(1D0-0.25D0*EPS)*LOG((BE-0.25D0*EPS)/BE)+
28426      &    LOG(-0.25D0*EPS)*LOG((BE-1D0)/(BE-0.25D0*EPS))
28427         ELSEIF(ABS(EPS).GE.1D-4.AND.ABS(RAT*EPS).LT.1D-4) THEN
28428           F3RE=PYSPEN((GA-1D0)/(GA+0.25D0*RAT*EPS),0D0,1)-
28429      &    PYSPEN(GA/(GA+0.25D0*RAT*EPS),0D0,1)+
28430      &    PYSPEN((1D0+0.25D0*RAT*EPS-GA)/(1D0+0.25D0*RAT*EPS),0D0,1)-
28431      &    PYSPEN((1D0+0.25D0*RAT*EPS-GA)/(0.25D0*RAT*EPS),0D0,1)+
28432      &    0.5D0*(LOG(1D0+0.25D0*RAT*EPS)**2-LOG(0.25D0*RAT*EPS)**2)+
28433      &    LOG(GA)*LOG((GA+0.25D0*RAT*EPS)/(1D0+0.25D0*RAT*EPS))+
28434      &    LOG(GA-1D0)*LOG(0.25D0*RAT*EPS/(GA+0.25D0*RAT*EPS))
28435         ELSE
28436           F3RE=PYSPEN((GA-1D0)/(GA+BE-1D0),0D0,1)-
28437      &    PYSPEN(GA/(GA+BE-1D0),0D0,1)+PYSPEN((BE-GA)/BE,0D0,1)-
28438      &    PYSPEN((BE-GA)/(BE-1D0),0D0,1)+0.5D0*(LOG(BE)**2-
28439      &    LOG(BE-1D0)**2)+LOG(GA)*LOG((GA+BE-1D0)/BE)+
28440      &    LOG(GA-1D0)*LOG((BE-1D0)/(GA+BE-1D0))
28441         ENDIF
28442         F3IM=0D0
28443       ELSEIF(EPS.LT.1D0) THEN
28444         IF(ABS(EPS).LT.1D-4.AND.ABS(RAT*EPS).LT.1D-4) THEN
28445           F3RE=PYSPEN(-0.25D0*EPS/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)-
28446      &    PYSPEN((1D0-0.25D0*EPS)/(1D0+0.25D0*(RAT-1D0)*EPS),0D0,1)+
28447      &    PYSPEN((1D0-0.25D0*EPS)/(-0.25D0*(RAT+1D0)*EPS),0D0,1)-
28448      &    PYSPEN(1D0/(RAT+1D0),0D0,1)+LOG((1D0-0.25D0*EPS)/
28449      &    (0.25D0*EPS))*LOG((1D0+0.25D0*(RAT-1D0)*EPS)/
28450      &    (0.25D0*(RAT+1D0)*EPS))
28451           F3IM=-PARU(1)*LOG((1D0+0.25D0*(RAT-1D0)*EPS)/
28452      &    (0.25D0*(RAT+1D0)*EPS))
28453         ELSEIF(ABS(EPS).LT.1D-4.AND.ABS(RAT*EPS).GE.1D-4) THEN
28454           F3RE=PYSPEN(-0.25D0*EPS/(BE-0.25D0*EPS),0D0,1)-
28455      &    PYSPEN((1D0-0.25D0*EPS)/(BE-0.25D0*EPS),0D0,1)+
28456      &    PYSPEN((1D0-0.25D0*EPS)/(1D0-0.25D0*EPS-BE),0D0,1)-
28457      &    PYSPEN(-0.25D0*EPS/(1D0-0.25D0*EPS-BE),0D0,1)+
28458      &    LOG((1D0-0.25D0*EPS)/(0.25D0*EPS))*
28459      &    LOG((BE-0.25D0*EPS)/(BE-1D0+0.25D0*EPS))
28460           F3IM=-PARU(1)*LOG((BE-0.25D0*EPS)/(BE-1D0+0.25D0*EPS))
28461         ELSEIF(ABS(EPS).GE.1D-4.AND.ABS(RAT*EPS).LT.1D-4) THEN
28462           F3RE=PYSPEN((GA-1D0)/(GA+0.25D0*RAT*EPS),0D0,1)-
28463      &    PYSPEN(GA/(GA+0.25D0*RAT*EPS),0D0,1)+
28464      &    PYSPEN(GA/(GA-1D0-0.25D0*RAT*EPS),0D0,1)-
28465      &    PYSPEN((GA-1D0)/(GA-1D0-0.25D0*RAT*EPS),0D0,1)+
28466      &    LOG(GA/(1D0-GA))*LOG((GA+0.25D0*RAT*EPS)/
28467      &    (1D0+0.25D0*RAT*EPS-GA))
28468           F3IM=-PARU(1)*LOG((GA+0.25D0*RAT*EPS)/
28469      &    (1D0+0.25D0*RAT*EPS-GA))
28470         ELSE
28471           F3RE=PYSPEN((GA-1D0)/(GA+BE-1D0),0D0,1)-
28472      &    PYSPEN(GA/(GA+BE-1D0),0D0,1)+PYSPEN(GA/(GA-BE),0D0,1)-
28473      &    PYSPEN((GA-1D0)/(GA-BE),0D0,1)+LOG(GA/(1D0-GA))*
28474      &    LOG((GA+BE-1D0)/(BE-GA))
28475           F3IM=-PARU(1)*LOG((GA+BE-1D0)/(BE-GA))
28476         ENDIF
28477       ELSE
28478         RSQ=EPS/(EPS-1D0+(2D0*BE-1D0)**2)
28479         RCTHE=RSQ*(1D0-2D0*BE/EPS)
28480         RSTHE=SQRT(MAX(0D0,RSQ-RCTHE**2))
28481         RCPHI=RSQ*(1D0+2D0*(BE-1D0)/EPS)
28482         RSPHI=SQRT(MAX(0D0,RSQ-RCPHI**2))
28483         R=SQRT(RSQ)
28484         THE=ACOS(MAX(-0.999999D0,MIN(0.999999D0,RCTHE/R)))
28485         PHI=ACOS(MAX(-0.999999D0,MIN(0.999999D0,RCPHI/R)))
28486         F3RE=PYSPEN(RCTHE,RSTHE,1)+PYSPEN(RCTHE,-RSTHE,1)-
28487      &  PYSPEN(RCPHI,RSPHI,1)-PYSPEN(RCPHI,-RSPHI,1)+
28488      &  (PHI-THE)*(PHI+THE-PARU(1))
28489         F3IM=PYSPEN(RCTHE,RSTHE,2)+PYSPEN(RCTHE,-RSTHE,2)-
28490      &  PYSPEN(RCPHI,RSPHI,2)-PYSPEN(RCPHI,-RSPHI,2)
28491       ENDIF
28492  
28493       Y3RE=2D0/(2D0*BE-1D0)*F3RE
28494       Y3IM=2D0/(2D0*BE-1D0)*F3IM
28495  
28496       RETURN
28497       END
28498  
28499 C***********************************************************************
28500  
28501 C...PYSPEN
28502 C...Calculates real and imaginary part of Spence function; see
28503 C...G. 't Hooft and M. Veltman, Nucl. Phys. B153 (1979) 365.
28504  
28505       FUNCTION PYSPEN(XREIN,XIMIN,IREIM)
28506  
28507 C...Double precision and integer declarations.
28508       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28509       IMPLICIT INTEGER(I-N)
28510       INTEGER PYK,PYCHGE,PYCOMP
28511 C...Commonblocks.
28512       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28513       SAVE /PYDAT1/
28514 C...Local array and data.
28515       DIMENSION B(0:14)
28516       DATA B/
28517      &1.000000D+00,        -5.000000D-01,         1.666667D-01,
28518      &0.000000D+00,        -3.333333D-02,         0.000000D+00,
28519      &2.380952D-02,         0.000000D+00,        -3.333333D-02,
28520      &0.000000D+00,         7.575757D-02,         0.000000D+00,
28521      &-2.531135D-01,         0.000000D+00,         1.166667D+00/
28522  
28523       XRE=XREIN
28524       XIM=XIMIN
28525       IF(ABS(1D0-XRE).LT.1D-6.AND.ABS(XIM).LT.1D-6) THEN
28526         IF(IREIM.EQ.1) PYSPEN=PARU(1)**2/6D0
28527         IF(IREIM.EQ.2) PYSPEN=0D0
28528         RETURN
28529       ENDIF
28530  
28531       XMOD=SQRT(XRE**2+XIM**2)
28532       IF(XMOD.LT.1D-6) THEN
28533         IF(IREIM.EQ.1) PYSPEN=0D0
28534         IF(IREIM.EQ.2) PYSPEN=0D0
28535         RETURN
28536       ENDIF
28537  
28538       XARG=SIGN(ACOS(XRE/XMOD),XIM)
28539       SP0RE=0D0
28540       SP0IM=0D0
28541       SGN=1D0
28542       IF(XMOD.GT.1D0) THEN
28543         ALGXRE=LOG(XMOD)
28544         ALGXIM=XARG-SIGN(PARU(1),XARG)
28545         SP0RE=-PARU(1)**2/6D0-(ALGXRE**2-ALGXIM**2)/2D0
28546         SP0IM=-ALGXRE*ALGXIM
28547         SGN=-1D0
28548         XMOD=1D0/XMOD
28549         XARG=-XARG
28550         XRE=XMOD*COS(XARG)
28551         XIM=XMOD*SIN(XARG)
28552       ENDIF
28553       IF(XRE.GT.0.5D0) THEN
28554         ALGXRE=LOG(XMOD)
28555         ALGXIM=XARG
28556         XRE=1D0-XRE
28557         XIM=-XIM
28558         XMOD=SQRT(XRE**2+XIM**2)
28559         XARG=SIGN(ACOS(XRE/XMOD),XIM)
28560         ALGYRE=LOG(XMOD)
28561         ALGYIM=XARG
28562         SP0RE=SP0RE+SGN*(PARU(1)**2/6D0-(ALGXRE*ALGYRE-ALGXIM*ALGYIM))
28563         SP0IM=SP0IM-SGN*(ALGXRE*ALGYIM+ALGXIM*ALGYRE)
28564         SGN=-SGN
28565       ENDIF
28566  
28567       XRE=1D0-XRE
28568       XIM=-XIM
28569       XMOD=SQRT(XRE**2+XIM**2)
28570       XARG=SIGN(ACOS(XRE/XMOD),XIM)
28571       ZRE=-LOG(XMOD)
28572       ZIM=-XARG
28573  
28574       SPRE=0D0
28575       SPIM=0D0
28576       SAVERE=1D0
28577       SAVEIM=0D0
28578       DO 100 I=0,14
28579         IF(MAX(ABS(SAVERE),ABS(SAVEIM)).LT.1D-30) GOTO 110
28580         TERMRE=(SAVERE*ZRE-SAVEIM*ZIM)/DBLE(I+1)
28581         TERMIM=(SAVERE*ZIM+SAVEIM*ZRE)/DBLE(I+1)
28582         SAVERE=TERMRE
28583         SAVEIM=TERMIM
28584         SPRE=SPRE+B(I)*TERMRE
28585         SPIM=SPIM+B(I)*TERMIM
28586   100 CONTINUE
28587  
28588   110 IF(IREIM.EQ.1) PYSPEN=SP0RE+SGN*SPRE
28589       IF(IREIM.EQ.2) PYSPEN=SP0IM+SGN*SPIM
28590  
28591       RETURN
28592       END
28593  
28594 C***********************************************************************
28595  
28596 C...PYQQBH
28597 C...Calculates the matrix element for the processes
28598 C...g + g or q + qbar -> Q + Qbar + H (normally with Q = t).
28599 C...REDUCE output and part of the rest courtesy Z. Kunszt, see
28600 C...Z. Kunszt, Nucl. Phys. B247 (1984) 339.
28601  
28602       SUBROUTINE PYQQBH(WTQQBH)
28603  
28604 C...Double precision and integer declarations.
28605       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
28606       IMPLICIT INTEGER(I-N)
28607       INTEGER PYK,PYCHGE,PYCOMP
28608 C...Commonblocks.
28609       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
28610       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
28611       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
28612       COMMON/PYINT1/MINT(400),VINT(400)
28613       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
28614       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/,/PYINT2/
28615 C...Local arrays and function.
28616       DIMENSION PP(15,4),CLR(8,8),FM(10,10),RM(8,8),DX(8)
28617       DOT(I,J)=PP(I,4)*PP(J,4)-PP(I,1)*PP(J,1)-PP(I,2)*PP(J,2)-
28618      &PP(I,3)*PP(J,3)
28619  
28620 C...Mass parameters.
28621       WTQQBH=0D0
28622       ISUB=MINT(1)
28623       SHPR=SQRT(VINT(26))*VINT(1)
28624       PQ=PMAS(PYCOMP(KFPR(ISUB,2)),1)
28625       PH=SQRT(VINT(21))*VINT(1)
28626       SPQ=PQ**2
28627       SPH=PH**2
28628  
28629 C...Set up outgoing kinematics: 1=t, 2=tbar, 3=H.
28630       DO 100 I=1,2
28631         PT=SQRT(MAX(0D0,VINT(197+5*I)))
28632         PP(I,1)=PT*COS(VINT(198+5*I))
28633         PP(I,2)=PT*SIN(VINT(198+5*I))
28634   100 CONTINUE
28635       PP(3,1)=-PP(1,1)-PP(2,1)
28636       PP(3,2)=-PP(1,2)-PP(2,2)
28637       PMS1=SPQ+PP(1,1)**2+PP(1,2)**2
28638       PMS2=SPQ+PP(2,1)**2+PP(2,2)**2
28639       PMS3=SPH+PP(3,1)**2+PP(3,2)**2
28640       PMT3=SQRT(PMS3)
28641       PP(3,3)=PMT3*SINH(VINT(211))
28642       PP(3,4)=PMT3*COSH(VINT(211))
28643       PMS12=(SHPR-PP(3,4))**2-PP(3,3)**2
28644       PP(1,3)=(-PP(3,3)*(PMS12+PMS1-PMS2)+
28645      &VINT(213)*(SHPR-PP(3,4))*VINT(220))/(2D0*PMS12)
28646       PP(2,3)=-PP(1,3)-PP(3,3)
28647       PP(1,4)=SQRT(PMS1+PP(1,3)**2)
28648       PP(2,4)=SQRT(PMS2+PP(2,3)**2)
28649  
28650 C...Set up incoming kinematics and derived momentum combinations.
28651       DO 110 I=4,5
28652         PP(I,1)=0D0
28653         PP(I,2)=0D0
28654         PP(I,3)=-0.5D0*SHPR*(-1)**I
28655         PP(I,4)=-0.5D0*SHPR
28656   110 CONTINUE
28657       DO 120 J=1,4
28658         PP(6,J)=PP(1,J)+PP(2,J)
28659         PP(7,J)=PP(1,J)+PP(3,J)
28660         PP(8,J)=PP(1,J)+PP(4,J)
28661         PP(9,J)=PP(1,J)+PP(5,J)
28662         PP(10,J)=-PP(2,J)-PP(3,J)
28663         PP(11,J)=-PP(2,J)-PP(4,J)
28664         PP(12,J)=-PP(2,J)-PP(5,J)
28665         PP(13,J)=-PP(4,J)-PP(5,J)
28666   120 CONTINUE
28667  
28668 C...Derived kinematics invariants.
28669       X1=DOT(1,2)
28670       X2=DOT(1,3)
28671       X3=DOT(1,4)
28672       X4=DOT(1,5)
28673       X5=DOT(2,3)
28674       X6=DOT(2,4)
28675       X7=DOT(2,5)
28676       X8=DOT(3,4)
28677       X9=DOT(3,5)
28678       X10=DOT(4,5)
28679  
28680 C...Propagators.
28681       SS1=DOT(7,7)-SPQ
28682       SS2=DOT(8,8)-SPQ
28683       SS3=DOT(9,9)-SPQ
28684       SS4=DOT(10,10)-SPQ
28685       SS5=DOT(11,11)-SPQ
28686       SS6=DOT(12,12)-SPQ
28687       SS7=DOT(13,13)
28688       DX(1)=SS1*SS6
28689       DX(2)=SS2*SS6
28690       DX(3)=SS2*SS4
28691       DX(4)=SS1*SS5
28692       DX(5)=SS3*SS5
28693       DX(6)=SS3*SS4
28694       DX(7)=SS7*SS1
28695       DX(8)=SS7*SS4
28696  
28697 C...Define colour coefficients for g + g -> Q + Qbar + H.
28698       IF(ISUB.EQ.121.OR.ISUB.EQ.181.OR.ISUB.EQ.186) THEN
28699         DO 140 I=1,3
28700           DO 130 J=1,3
28701             CLR(I,J)=16D0/3D0
28702             CLR(I+3,J+3)=16D0/3D0
28703             CLR(I,J+3)=-2D0/3D0
28704             CLR(I+3,J)=-2D0/3D0
28705   130     CONTINUE
28706   140   CONTINUE
28707         DO 160 L=1,2
28708           DO 150 I=1,3
28709             CLR(I,6+L)=-6D0
28710             CLR(I+3,6+L)=6D0
28711             CLR(6+L,I)=-6D0
28712             CLR(6+L,I+3)=6D0
28713   150     CONTINUE
28714   160   CONTINUE
28715         DO 180 K1=1,2
28716           DO 170 K2=1,2
28717             CLR(6+K1,6+K2)=12D0
28718   170     CONTINUE
28719   180   CONTINUE
28720  
28721 C...Evaluate matrix elements for g + g -> Q + Qbar + H.
28722         FM(1,1)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+2*X2+X4+X9+2*
28723      &  X7+X5)+8*PQ**2*PH**2*(-X1-X4+2*X7)+16*PQ**2*(X2*X9+4*X2*
28724      &  X7+X2*X5-2*X4*X7-2*X9*X7)+8*PH**2*X4*X7-16*X2*X9*X7
28725         FM(1,2)=16*PQ**6+8*PQ**4*(-2*X1+X2-2*X3-2*X4-4*X10+X9-X8+2
28726      &  *X7-4*X6+X5)+8*PQ**2*(-2*X1*X2-2*X2*X4-2*X2*X10+X2*X7-2*
28727      &  X2*X6-2*X3*X7+2*X4*X7+4*X10*X7-X9*X7-X8*X7)+16*X2*X7*(X4+
28728      &  X10)
28729         FM(1,3)=16*PQ**6-4*PQ**4*PH**2+8*PQ**4*(-2*X1+2*X2-2*X3-4*
28730      &  X4-8*X10+X9+X8-2*X7-4*X6+2*X5)-(4*PQ**2*PH**2)*(X1+X4+X10
28731      &  +X6)+8*PQ**2*(-2*X1*X2-2*X1*X10+X1*X9+X1*X8-2*X1*X5+X2**2
28732      &  -4*X2*X4-5*X2*X10+X2*X8-X2*X7-3*X2*X6+X2*X5+X3*X9+2*X3*X7
28733      &  -X3*X5+X4*X8+2*X4*X6-3*X4*X5-5*X10*X5+X9*X8+X9*X6+X9*X5+
28734      &  X8*X7-4*X6*X5+X5**2)-(16*X2*X5)*(X1+X4+X10+X6)
28735         FM(1,4)=16*PQ**6+4*PQ**4*PH**2+16*PQ**4*(-X1+X2-X3-X4+X10-
28736      &  X9-X8+2*X7+2*X6-X5)+4*PQ**2*PH**2*(X1+X3+X4+X10+2*X7+2*X6
28737      &  )+8*PQ**2*(4*X1*X10+4*X1*X7+4*X1*X6+2*X2*X10-X2*X9-X2*X8+
28738      &  4*X2*X7+4*X2*X6-X2*X5+4*X10*X5+4*X7*X5+4*X6*X5)-(8*PH**2*
28739      &  X1)*(X10+X7+X6)+16*X2*X5*(X10+X7+X6)
28740         FM(1,5)=8*PQ**4*(-2*X1-2*X4+X10-X9)+4*PQ**2*(4*X1**2-2*X1*
28741      &  X2+8*X1*X3+6*X1*X10-2*X1*X9+4*X1*X8+4*X1*X7+4*X1*X6+2*X1*
28742      &  X5+X2*X10+4*X3*X4-X3*X9+2*X3*X7+3*X4*X8-2*X4*X6+2*X4*X5-4
28743      &  *X10*X7+3*X10*X5-3*X9*X6+3*X8*X7-4*X7**2+4*X7*X5)+8*(X1**
28744      &  2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9+X1*X3*X5-X1*X4*
28745      &  X8-X1*X4*X5+X1*X10*X9+X1*X9*X7+X1*X9*X6-X1*X8*X7-X2*X3*X7
28746      &  +X2*X4*X6-X2*X10*X7-X2*X7**2+X3*X7*X5-X4*X10*X5-X4*X7*X5-
28747      &  X4*X6*X5)
28748         FM(1,6)=16*PQ**4*(-4*X1-X4+X9-X7)+4*PQ**2*PH**2*(-2*X1-X4-
28749      &  X7)+16*PQ**2*(-2*X1**2-3*X1*X2-2*X1*X4-3*X1*X9-2*X1*X7-3*
28750      &  X1*X5-2*X2*X4-2*X7*X5)-8*PH**2*X4*X7+8*(-X1*X2*X9-2*X1*X2
28751      &  *X5-X1*X9**2-X1*X9*X5+X2**2*X7-X2*X4*X5+X2*X9*X7-X2*X7*X5
28752      &  +X4*X9*X5+X4*X5**2)
28753         FM(1,7)=8*PQ**4*(2*X3+X4+3*X10+X9+2*X8+3*X7+6*X6)+2*PQ**2*
28754      &  PH**2*(-2*X3-X4+3*X10+3*X7+6*X6)+4*PQ**2*(4*X1*X10+4*X1*
28755      &  X7+8*X1*X6+6*X2*X10+X2*X9+2*X2*X8+6*X2*X7+12*X2*X6-8*X3*
28756      &  X7+4*X4*X7+4*X4*X6+4*X10*X5+4*X9*X7+4*X9*X6-8*X8*X7+4*X7*
28757      &  X5+8*X6*X5)+4*PH**2*(-X1*X10-X1*X7-2*X1*X6+2*X3*X7-X4*X7-
28758      &  X4*X6)+8*X2*(X10*X5+X9*X7+X9*X6-2*X8*X7+X7*X5+2*X6*X5)
28759         FM(1,8)=8*PQ**4*(2*X3+X4+3*X10+2*X9+X8+3*X7+6*X6)+2*PQ**2*
28760      &  PH**2*(-2*X3-X4+2*X10+X7+2*X6)+4*PQ**2*(4*X1*X10-2*X1*X9+
28761      &  2*X1*X8+4*X1*X7+8*X1*X6+5*X2*X10+2*X2*X9+X2*X8+4*X2*X7+8*
28762      &  X2*X6-X3*X9-8*X3*X7+2*X3*X5+2*X4*X9-X4*X8+4*X4*X7+4*X4*X6
28763      &  +4*X4*X5+5*X10*X5+X9**2-X9*X8+2*X9*X7+5*X9*X6+X9*X5-7*X8*
28764      &  X7+2*X8*X5+2*X7*X5+10*X6*X5)+2*PH**2*(-X1*X10+X3*X7-2*X4*
28765      &  X7+X4*X6)+4*(-X1*X9**2+X1*X9*X8-2*X1*X9*X5-X1*X8*X5+2*X2*
28766      &  X10*X5+X2*X9*X7+X2*X9*X6-2*X2*X8*X7+3*X2*X6*X5+X3*X9*X5+
28767      &  X3*X5**2+X4*X9*X5-2*X4*X8*X5+2*X4*X5**2)
28768         FM(2,2)=16*PQ**6+16*PQ**4*(-X1+X3-X4-X10+X7-X6)+16*PQ**2*(
28769      &  X3*X10+X3*X7+X3*X6+X4*X7+X10*X7)-16*X3*X10*X7
28770         FM(2,3)=16*PQ**6+8*PQ**4*(-2*X1+X2+2*X3-4*X4-4*X10-X9+X8-2
28771      &  *X7-2*X6+X5)+8*PQ**2*(-2*X1*X5+4*X3*X10-X3*X9-X3*X8-2*X3*
28772      &  X7+2*X3*X6+X3*X5-2*X4*X5-2*X10*X5-2*X6*X5)+16*X3*X5*(X10+
28773      &  X6)
28774         FM(2,4)=8*PQ**4*(-2*X1-2*X3+X10-X8)+4*PQ**2*(4*X1**2-2*X1*
28775      &  X2+8*X1*X4+6*X1*X10+4*X1*X9-2*X1*X8+4*X1*X7+4*X1*X6+2*X1*
28776      &  X5+X2*X10+4*X3*X4+3*X3*X9-2*X3*X7+2*X3*X5-X4*X8+2*X4*X6-4
28777      &  *X10*X6+3*X10*X5+3*X9*X6-3*X8*X7-4*X6**2+4*X6*X5)+8*(-X1
28778      &  **2*X9+X1**2*X8+X1*X2*X7-X1*X2*X6-X1*X3*X9-X1*X3*X5+X1*X4
28779      &  *X8+X1*X4*X5+X1*X10*X8-X1*X9*X6+X1*X8*X7+X1*X8*X6+X2*X3*
28780      &  X7-X2*X4*X6-X2*X10*X6-X2*X6**2-X3*X10*X5-X3*X7*X5-X3*X6*
28781      &  X5+X4*X6*X5)
28782         FM(2,5)=16*PQ**4*X10+8*PQ**2*(2*X1**2+2*X1*X3+2*X1*X4+2*X1
28783      &  *X10+2*X1*X7+2*X1*X6+X3*X7+X4*X6)+8*(-2*X1**3-2*X1**2*X3-
28784      &  2*X1**2*X4-2*X1**2*X10-2*X1**2*X7-2*X1**2*X6-2*X1*X3*X4-
28785      &  X1*X3*X10-2*X1*X3*X6-X1*X4*X10-2*X1*X4*X7-X1*X10**2-X1*
28786      &  X10*X7-X1*X10*X6-2*X1*X7*X6+X3**2*X7-X3*X4*X7-X3*X4*X6+X3
28787      &  *X10*X7+X3*X7**2-X3*X7*X6+X4**2*X6+X4*X10*X6-X4*X7*X6+X4*
28788      &  X6**2)
28789         FM(2,6)=8*PQ**4*(-2*X1+X10-X9-2*X7)+4*PQ**2*(4*X1**2+2*X1*
28790      &  X2+4*X1*X3+4*X1*X4+6*X1*X10-2*X1*X9+4*X1*X8+8*X1*X6-2*X1*
28791      &  X5+4*X2*X4+3*X2*X10+2*X2*X7-3*X3*X9-2*X3*X7-4*X4**2-4*X4*
28792      &  X10+3*X4*X8+2*X4*X6+X10*X5-X9*X6+3*X8*X7+4*X7*X6)+8*(X1**
28793      &  2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9+X1*X3*X5+X1*X4*
28794      &  X9-X1*X4*X8-X1*X4*X5+X1*X10*X9+X1*X9*X6-X1*X8*X7-X2*X3*X7
28795      &  -X2*X4*X7+X2*X4*X6-X2*X10*X7+X3*X7*X5-X4**2*X5-X4*X10*X5-
28796      &  X4*X6*X5)
28797         FM(2,7)=8*PQ**4*(X3+2*X4+3*X10+X7+2*X6)+4*PQ**2*(-4*X1*X3-
28798      &  2*X1*X4-2*X1*X10+X1*X9-X1*X8-4*X1*X7-2*X1*X6+X2*X3+2*X2*
28799      &  X4+3*X2*X10+X2*X7+2*X2*X6-6*X3*X4-6*X3*X10-2*X3*X9-2*X3*
28800      &  X7-4*X3*X6-X3*X5-6*X4**2-6*X4*X10-3*X4*X9-X4*X8-4*X4*X7-2
28801      &  *X4*X6-2*X4*X5-3*X10*X9-3*X10*X8-6*X10*X7-6*X10*X6+X10*X5
28802      &  +X9*X7-2*X8*X7-2*X8*X6-6*X7*X6+X7*X5-6*X6**2+2*X6*X5)+4*(
28803      &  -X1**2*X9+X1**2*X8-2*X1*X2*X10-3*X1*X2*X7-3*X1*X2*X6+X1*
28804      &  X3*X9-X1*X3*X5+X1*X4*X9+X1*X4*X8+X1*X4*X5+X1*X10*X9+X1*
28805      &  X10*X8-X1*X9*X6+X1*X8*X6+X2*X3*X7-3*X2*X4*X7-X2*X4*X6-3*
28806      &  X2*X10*X7-3*X2*X10*X6-3*X2*X7*X6-3*X2*X6**2-2*X3*X4*X5-X3
28807      &  *X10*X5-X3*X6*X5-X4**2*X5-X4*X10*X5+X4*X6*X5)
28808         FM(2,8)=8*PQ**4*(X3+2*X4+3*X10+X7+2*X6)+4*PQ**2*(-4*X1*X3-
28809      &  2*X1*X4-2*X1*X10-X1*X9+X1*X8-4*X1*X7-2*X1*X6+X2*X3+2*X2*
28810      &  X4+X2*X10-X2*X7-2*X2*X6-6*X3*X4-6*X3*X10-2*X3*X9+X3*X8-2*
28811      &  X3*X7-4*X3*X6+X3*X5-6*X4**2-6*X4*X10-2*X4*X9-4*X4*X7-2*X4
28812      &  *X6+2*X4*X5-3*X10*X9-3*X10*X8-6*X10*X7-6*X10*X6+3*X10*X5-
28813      &  X9*X6-2*X8*X7-3*X8*X6-6*X7*X6+X7*X5-6*X6**2+2*X6*X5)+4*(
28814      &  X1**2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6-3*X1*X3*X5+X1*X4*X9-
28815      &  X1*X4*X8-3*X1*X4*X5+X1*X10*X9+X1*X10*X8-2*X1*X10*X5+X1*X9
28816      &  *X6+X1*X8*X7+X1*X8*X6-X2*X4*X7+X2*X4*X6-X2*X10*X7-X2*X10*
28817      &  X6-2*X2*X7*X6-X2*X6**2-3*X3*X4*X5-3*X3*X10*X5+X3*X7*X5-3*
28818      &  X3*X6*X5-3*X4**2*X5-3*X4*X10*X5-X4*X6*X5)
28819         FM(3,3)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+X2+2*X3+X8+X6
28820      &  +2*X5)+8*PQ**2*PH**2*(-X1+2*X3-X6)+16*PQ**2*(X2*X5-2*X3*
28821      &  X8-2*X3*X6+4*X3*X5+X8*X5)+8*PH**2*X3*X6-16*X3*X8*X5
28822         FM(3,4)=16*PQ**4*(-4*X1-X3+X8-X6)+4*PQ**2*PH**2*(-2*X1-X3-
28823      &  X6)+16*PQ**2*(-2*X1**2-3*X1*X2-2*X1*X3-3*X1*X8-2*X1*X6-3*
28824      &  X1*X5-2*X2*X3-2*X6*X5)-8*PH**2*X3*X6+8*(-X1*X2*X8-2*X1*X2
28825      &  *X5-X1*X8**2-X1*X8*X5+X2**2*X6-X2*X3*X5+X2*X8*X6-X2*X6*X5
28826      &  +X3*X8*X5+X3*X5**2)
28827         FM(3,5)=8*PQ**4*(-2*X1+X10-X8-2*X6)+4*PQ**2*(4*X1**2+2*X1*
28828      &  X2+4*X1*X3+4*X1*X4+6*X1*X10+4*X1*X9-2*X1*X8+8*X1*X7-2*X1*
28829      &  X5+4*X2*X3+3*X2*X10+2*X2*X6-4*X3**2-4*X3*X10+3*X3*X9+2*X3
28830      &  *X7-3*X4*X8-2*X4*X6+X10*X5+3*X9*X6-X8*X7+4*X7*X6)+8*(-X1
28831      &  **2*X9+X1**2*X8+X1*X2*X7-X1*X2*X6-X1*X3*X9+X1*X3*X8-X1*X3
28832      &  *X5+X1*X4*X8+X1*X4*X5+X1*X10*X8-X1*X9*X6+X1*X8*X7+X2*X3*
28833      &  X7-X2*X3*X6-X2*X4*X6-X2*X10*X6-X3**2*X5-X3*X10*X5-X3*X7*
28834      &  X5+X4*X6*X5)
28835         FM(3,6)=16*PQ**6+4*PQ**4*PH**2+16*PQ**4*(-X1-X2+2*X3+2*X4+
28836      &  X10-X9-X8-X7-X6+X5)+4*PQ**2*PH**2*(X1+2*X3+2*X4+X10+X7+X6
28837      &  )+8*PQ**2*(4*X1*X3+4*X1*X4+4*X1*X10+4*X2*X3+4*X2*X4+4*X2*
28838      &  X10-X2*X5+4*X3*X5+4*X4*X5+2*X10*X5-X9*X5-X8*X5)-(8*PH**2*
28839      &  X1)*(X3+X4+X10)+16*X2*X5*(X3+X4+X10)
28840         FM(3,7)=8*PQ**4*(3*X3+6*X4+3*X10+X9+2*X8+2*X7+X6)+2*PQ**2*
28841      &  PH**2*(X3+2*X4+2*X10-2*X7-X6)+4*PQ**2*(4*X1*X3+8*X1*X4+4*
28842      &  X1*X10+2*X1*X9-2*X1*X8+2*X2*X3+10*X2*X4+5*X2*X10+2*X2*X9+
28843      &  X2*X8+2*X2*X7+4*X2*X6-7*X3*X9+2*X3*X8-8*X3*X7+4*X3*X6+4*
28844      &  X3*X5+5*X4*X8+4*X4*X6+8*X4*X5+5*X10*X5-X9*X8-X9*X6+X9*X5+
28845      &  X8**2-X8*X7+2*X8*X6+2*X8*X5)+2*PH**2*(-X1*X10+X3*X7-2*X3*
28846      &  X6+X4*X6)+4*(-X1*X2*X9-2*X1*X2*X8+X1*X9*X8-X1*X8**2+X2**2
28847      &  *X7+2*X2**2*X6+3*X2*X4*X5+2*X2*X10*X5-2*X2*X9*X6+X2*X8*X7
28848      &  +X2*X8*X6-2*X3*X9*X5+X3*X8*X5+X4*X8*X5)
28849         FM(3,8)=8*PQ**4*(3*X3+6*X4+3*X10+2*X9+X8+2*X7+X6)+2*PQ**2*
28850      &  PH**2*(3*X3+6*X4+3*X10-2*X7-X6)+4*PQ**2*(4*X1*X3+8*X1*X4+
28851      &  4*X1*X10+4*X2*X3+8*X2*X4+4*X2*X10-8*X3*X9+4*X3*X8-8*X3*X7
28852      &  +4*X3*X6+6*X3*X5+4*X4*X8+4*X4*X6+12*X4*X5+6*X10*X5+2*X9*
28853      &  X5+X8*X5)+4*PH**2*(-X1*X3-2*X1*X4-X1*X10+2*X3*X7-X3*X6-X4
28854      &  *X6)+8*X5*(X2*X3+2*X2*X4+X2*X10-2*X3*X9+X3*X8+X4*X8)
28855         FM(4,4)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+2*X2+X3+X8+2*
28856      &  X6+X5)+8*PQ**2*PH**2*(-X1-X3+2*X6)+16*PQ**2*(X2*X8+4*X2*
28857      &  X6+X2*X5-2*X3*X6-2*X8*X6)+8*PH**2*X3*X6-16*X2*X8*X6
28858         FM(4,5)=16*PQ**6+8*PQ**4*(-2*X1+X2-2*X3-2*X4-4*X10-X9+X8-4
28859      &  *X7+2*X6+X5)+8*PQ**2*(-2*X1*X2-2*X2*X3-2*X2*X10-2*X2*X7+
28860      &  X2*X6+2*X3*X6-2*X4*X6+4*X10*X6-X9*X6-X8*X6)+16*X2*X6*(X3+
28861      &  X10)
28862         FM(4,6)=16*PQ**6-4*PQ**4*PH**2+8*PQ**4*(-2*X1+2*X2-4*X3-2*
28863      &  X4-8*X10+X9+X8-4*X7-2*X6+2*X5)-(4*PQ**2*PH**2)*(X1+X3+X10
28864      &  +X7)+8*PQ**2*(-2*X1*X2-2*X1*X10+X1*X9+X1*X8-2*X1*X5+X2**2
28865      &  -4*X2*X3-5*X2*X10+X2*X9-3*X2*X7-X2*X6+X2*X5+X3*X9+2*X3*X7
28866      &  -3*X3*X5+X4*X8+2*X4*X6-X4*X5-5*X10*X5+X9*X8+X9*X6+X8*X7+
28867      &  X8*X5-4*X7*X5+X5**2)-(16*X2*X5)*(X1+X3+X10+X7)
28868         FM(4,7)=8*PQ**4*(-X3-2*X4-3*X10-2*X9-X8-6*X7-3*X6)+2*PQ**2
28869      &  *PH**2*(X3+2*X4-3*X10-6*X7-3*X6)+4*PQ**2*(-4*X1*X10-8*X1*
28870      &  X7-4*X1*X6-6*X2*X10-2*X2*X9-X2*X8-12*X2*X7-6*X2*X6-4*X3*
28871      &  X7-4*X3*X6+8*X4*X6-4*X10*X5+8*X9*X6-4*X8*X7-4*X8*X6-8*X7*
28872      &  X5-4*X6*X5)+4*PH**2*(X1*X10+2*X1*X7+X1*X6+X3*X7+X3*X6-2*
28873      &  X4*X6)+8*X2*(-X10*X5+2*X9*X6-X8*X7-X8*X6-2*X7*X5-X6*X5)
28874         FM(4,8)=8*PQ**4*(-X3-2*X4-3*X10-X9-2*X8-6*X7-3*X6)+2*PQ**2
28875      &  *PH**2*(X3+2*X4-2*X10-2*X7-X6)+4*PQ**2*(-4*X1*X10-2*X1*X9
28876      &  +2*X1*X8-8*X1*X7-4*X1*X6-5*X2*X10-X2*X9-2*X2*X8-8*X2*X7-4
28877      &  *X2*X6+X3*X9-2*X3*X8-4*X3*X7-4*X3*X6-4*X3*X5+X4*X8+8*X4*
28878      &  X6-2*X4*X5-5*X10*X5+X9*X8+7*X9*X6-2*X9*X5-X8**2-5*X8*X7-2
28879      &  *X8*X6-X8*X5-10*X7*X5-2*X6*X5)+2*PH**2*(X1*X10-X3*X7+2*X3
28880      &  *X6-X4*X6)+4*(-X1*X9*X8+X1*X9*X5+X1*X8**2+2*X1*X8*X5-2*X2
28881      &  *X10*X5+2*X2*X9*X6-X2*X8*X7-X2*X8*X6-3*X2*X7*X5+2*X3*X9*
28882      &  X5-X3*X8*X5-2*X3*X5**2-X4*X8*X5-X4*X5**2)
28883         FM(5,5)=16*PQ**6+16*PQ**4*(-X1-X3+X4-X10-X7+X6)+16*PQ**2*(
28884      &  X3*X6+X4*X10+X4*X7+X4*X6+X10*X6)-16*X4*X10*X6
28885         FM(5,6)=16*PQ**6+8*PQ**4*(-2*X1+X2-4*X3+2*X4-4*X10+X9-X8-2
28886      &  *X7-2*X6+X5)+8*PQ**2*(-2*X1*X5-2*X3*X5+4*X4*X10-X4*X9-X4*
28887      &  X8+2*X4*X7-2*X4*X6+X4*X5-2*X10*X5-2*X7*X5)+16*X4*X5*(X10+
28888      &  X7)
28889         FM(5,7)=8*PQ**4*(-2*X3-X4-3*X10-2*X7-X6)+4*PQ**2*(2*X1*X3+
28890      &  4*X1*X4+2*X1*X10+X1*X9-X1*X8+2*X1*X7+4*X1*X6-2*X2*X3-X2*
28891      &  X4-3*X2*X10-2*X2*X7-X2*X6+6*X3**2+6*X3*X4+6*X3*X10+X3*X9+
28892      &  3*X3*X8+2*X3*X7+4*X3*X6+2*X3*X5+6*X4*X10+2*X4*X8+4*X4*X7+
28893      &  2*X4*X6+X4*X5+3*X10*X9+3*X10*X8+6*X10*X7+6*X10*X6-X10*X5+
28894      &  2*X9*X7+2*X9*X6-X8*X6+6*X7**2+6*X7*X6-2*X7*X5-X6*X5)+4*(-
28895      &  X1**2*X9+X1**2*X8+2*X1*X2*X10+3*X1*X2*X7+3*X1*X2*X6-X1*X3
28896      &  *X9-X1*X3*X8-X1*X3*X5-X1*X4*X8+X1*X4*X5-X1*X10*X9-X1*X10*
28897      &  X8-X1*X9*X7+X1*X8*X7+X2*X3*X7+3*X2*X3*X6-X2*X4*X6+3*X2*
28898      &  X10*X7+3*X2*X10*X6+3*X2*X7**2+3*X2*X7*X6+X3**2*X5+2*X3*X4
28899      &  *X5+X3*X10*X5-X3*X7*X5+X4*X10*X5+X4*X7*X5)
28900         FM(5,8)=8*PQ**4*(-2*X3-X4-3*X10-2*X7-X6)+4*PQ**2*(2*X1*X3+
28901      &  4*X1*X4+2*X1*X10-X1*X9+X1*X8+2*X1*X7+4*X1*X6-2*X2*X3-X2*
28902      &  X4-X2*X10+2*X2*X7+X2*X6+6*X3**2+6*X3*X4+6*X3*X10+2*X3*X8+
28903      &  2*X3*X7+4*X3*X6-2*X3*X5+6*X4*X10-X4*X9+2*X4*X8+4*X4*X7+2*
28904      &  X4*X6-X4*X5+3*X10*X9+3*X10*X8+6*X10*X7+6*X10*X6-3*X10*X5+
28905      &  3*X9*X7+2*X9*X6+X8*X7+6*X7**2+6*X7*X6-2*X7*X5-X6*X5)+4*(
28906      &  X1**2*X9-X1**2*X8-X1*X2*X7+X1*X2*X6+X1*X3*X9-X1*X3*X8+3*
28907      &  X1*X3*X5+3*X1*X4*X5-X1*X10*X9-X1*X10*X8+2*X1*X10*X5-X1*X9
28908      &  *X7-X1*X9*X6-X1*X8*X7-X2*X3*X7+X2*X3*X6+X2*X10*X7+X2*X10*
28909      &  X6+X2*X7**2+2*X2*X7*X6+3*X3**2*X5+3*X3*X4*X5+3*X3*X10*X5+
28910      &  X3*X7*X5+3*X4*X10*X5+3*X4*X7*X5-X4*X6*X5)
28911         FM(6,6)=64*PQ**6+16*PQ**4*PH**2+32*PQ**4*(X1+X2+2*X4+X9+X7
28912      &  +2*X5)+8*PQ**2*PH**2*(-X1+2*X4-X7)+16*PQ**2*(X2*X5-2*X4*
28913      &  X9-2*X4*X7+4*X4*X5+X9*X5)+8*PH**2*X4*X7-16*X4*X9*X5
28914         FM(6,7)=8*PQ**4*(-6*X3-3*X4-3*X10-2*X9-X8-X7-2*X6)+2*PQ**2
28915      &  *PH**2*(-2*X3-X4-2*X10+X7+2*X6)+4*PQ**2*(-8*X1*X3-4*X1*X4
28916      &  -4*X1*X10+2*X1*X9-2*X1*X8-10*X2*X3-2*X2*X4-5*X2*X10-X2*X9
28917      &  -2*X2*X8-4*X2*X7-2*X2*X6-5*X3*X9-4*X3*X7-8*X3*X5-2*X4*X9+
28918      &  7*X4*X8-4*X4*X7+8*X4*X6-4*X4*X5-5*X10*X5-X9**2+X9*X8-2*X9
28919      &  *X7+X9*X6-2*X9*X5+X8*X7-X8*X5)+2*PH**2*(X1*X10-X3*X7+2*X4
28920      &  *X7-X4*X6)+4*(2*X1*X2*X9+X1*X2*X8+X1*X9**2-X1*X9*X8-2*X2
28921      &  **2*X7-X2**2*X6-3*X2*X3*X5-2*X2*X10*X5-X2*X9*X7-X2*X9*X6+
28922      &  2*X2*X8*X7-X3*X9*X5-X4*X9*X5+2*X4*X8*X5)
28923         FM(6,8)=8*PQ**4*(-6*X3-3*X4-3*X10-X9-2*X8-X7-2*X6)+2*PQ**2
28924      &  *PH**2*(-6*X3-3*X4-3*X10+X7+2*X6)+4*PQ**2*(-8*X1*X3-4*X1*
28925      &  X4-4*X1*X10-8*X2*X3-4*X2*X4-4*X2*X10-4*X3*X9-4*X3*X7-12*
28926      &  X3*X5-4*X4*X9+8*X4*X8-4*X4*X7+8*X4*X6-6*X4*X5-6*X10*X5-X9
28927      &  *X5-2*X8*X5)+4*PH**2*(2*X1*X3+X1*X4+X1*X10+X3*X7+X4*X7-2*
28928      &  X4*X6)+8*X5*(-2*X2*X3-X2*X4-X2*X10-X3*X9-X4*X9+2*X4*X8)
28929         FM(7,7)=72*PQ**4*X10+18*PQ**2*PH**2*X10+8*PQ**2*(X1*X10+9*
28930      &  X2*X10+7*X3*X7+2*X3*X6+2*X4*X7+7*X4*X6+X10*X5+2*X9*X7+7*
28931      &  X9*X6+7*X8*X7+2*X8*X6)+2*PH**2*(-X1*X10-7*X3*X7-2*X3*X6-2
28932      &  *X4*X7-7*X4*X6)+4*X2*(X10*X5+2*X9*X7+7*X9*X6+7*X8*X7+2*X8
28933      &  *X6)
28934         FM(7,8)=72*PQ**4*X10+2*PQ**2*PH**2*X10+4*PQ**2*(2*X1*X10+
28935      &  10*X2*X10+7*X3*X9+2*X3*X8+14*X3*X7+4*X3*X6+2*X4*X9+7*X4*
28936      &  X8+4*X4*X7+14*X4*X6+10*X10*X5+X9**2+7*X9*X8+2*X9*X7+7*X9*
28937      &  X6+X8**2+7*X8*X7+2*X8*X6)+2*PH**2*(7*X1*X10-7*X3*X7-2*X3*
28938      &  X6-2*X4*X7-7*X4*X6)+2*(-2*X1*X9**2-14*X1*X9*X8-2*X1*X8**2
28939      &  +2*X2*X10*X5+2*X2*X9*X7+7*X2*X9*X6+7*X2*X8*X7+2*X2*X8*X6+
28940      &  7*X3*X9*X5+2*X3*X8*X5+2*X4*X9*X5+7*X4*X8*X5)
28941         FM(8,8)=72*PQ**4*X10+18*PQ**2*PH**2*X10+8*PQ**2*(X1*X10+X2
28942      &  *X10+7*X3*X9+2*X3*X8+7*X3*X7+2*X3*X6+2*X4*X9+7*X4*X8+2*X4
28943      &  *X7+7*X4*X6+9*X10*X5)+2*PH**2*(-X1*X10-7*X3*X7-2*X3*X6-2*
28944      &  X4*X7-7*X4*X6)+4*X5*(X2*X10+7*X3*X9+2*X3*X8+2*X4*X9+7*X4*
28945      &  X8)
28946         FM(9,9)=-4*PQ**4*X10-PQ**2*PH**2*X10+4*PQ**2*(-X1*X10-X2*X10+
28947      &  X3*X7+X4*X6-X10*X5+X9*X6+X8*X7)+PH**2*(X1*X10-X3*X7-X4*X6
28948      &  )+2*X2*(-X10*X5+X9*X6+X8*X7)
28949         FM(9,10)=-4*PQ**4*X10-PQ**2*PH**2*X10+2*PQ**2*(-2*X1*X10-2*X2*
28950      &  X10+2*X3*X9+2*X3*X7+2*X4*X6-2*X10*X5+X9*X8+2*X8*X7)+PH**2
28951      &  *(X1*X10-X3*X7-X4*X6)+2*(-X1*X9*X8-X2*X10*X5+X2*X8*X7+X3*
28952      &  X9*X5)
28953         FMXX=-4*PQ**4*X10-PQ**2*PH**2*X10+2*PQ**2*(-2*X1*X10-2*X2*
28954      &  X10+2*X4*X8+2*X4*X6+2*X3*X7-2*X10*X5+X9*X8+2*X9*X6)+PH**2
28955      &  *(X1*X10-X3*X7-X4*X6)+2*(-X1*X9*X8-X2*X10*X5+X2*X9*X6+X4*
28956      &  X8*X5)
28957         FM(9,10)=0.5D0*(FMXX+FM(9,10))
28958         FM(10,10)=-4*PQ**4*X10-PQ**2*PH**2*X10+4*PQ**2*(-X1*X10-X2*X10+
28959      &  X3*X7+X4*X6-X10*X5+X9*X3+X8*X4)+PH**2*(X1*X10-X3*X7-X4*X6
28960      &  )+2*X5*(-X10*X2+X9*X3+X8*X4)
28961  
28962 C...Repackage matrix elements.
28963         DO 200 I=1,8
28964           DO 190 J=1,8
28965             RM(I,J)=FM(I,J)
28966   190     CONTINUE
28967   200   CONTINUE
28968         RM(7,7)=FM(7,7)-2D0*FM(9,9)
28969         RM(7,8)=FM(7,8)-2D0*FM(9,10)
28970         RM(8,8)=FM(8,8)-2D0*FM(10,10)
28971  
28972 C...Produce final result: matrix elements * colours * propagators.
28973         DO 220 I=1,8
28974           DO 210 J=I,8
28975             FAC=8D0
28976             IF(I.EQ.J)FAC=4D0
28977             WTQQBH=WTQQBH+RM(I,J)*FAC*CLR(I,J)/(DX(I)*DX(J))
28978   210     CONTINUE
28979   220   CONTINUE
28980         WTQQBH=-WTQQBH/256D0
28981  
28982       ELSE
28983 C...Evaluate matrix elements for q + qbar -> Q + Qbar + H.
28984         A11=-8D0*PQ**4*X10-2D0*PQ**2*PH**2*X10-(8D0*PQ**2)*(X2*X10+X3
28985      &  *X7+X4*X6+X9*X6+X8*X7)+2D0*PH**2*(X3*X7+X4*X6)-(4D0*X2)*(X9
28986      &  *X6+X8*X7)
28987         A12=-8D0*PQ**4*X10+4D0*PQ**2*(-X2*X10-X3*X9-2D0*X3*X7-X4*X8-
28988      &  2D0*X4*X6-X10*X5-X9*X8-X9*X6-X8*X7)+2D0*PH**2*(-X1*X10+X3*X7
28989      &  +X4*X6)+2D0*(2D0*X1*X9*X8-X2*X9*X6-X2*X8*X7-X3*X9*X5-X4*X8*
28990      &  X5)
28991         A22=-8D0*PQ**4*X10-2D0*PQ**2*PH**2*X10-(8D0*PQ**2)*(X3*X9+X3*
28992      &  X7+X4*X8+X4*X6+X10*X5)+2D0*PH**2*(X3*X7+X4*X6)-(4D0*X5)*(X3
28993      &  *X9+X4*X8)
28994  
28995 C...Produce final result: matrix elements * propagators.
28996         A11=A11/DX(7)**2
28997         A12=A12/(DX(7)*DX(8))
28998         A22=A22/DX(8)**2
28999         WTQQBH=-(A11+A22+2D0*A12)/8D0
29000       ENDIF
29001  
29002       RETURN
29003       END
29004  
29005 C*********************************************************************
29006  
29007 C...PYMSIN
29008 C...Initializes supersymmetry: finds sparticle masses and
29009 C...branching ratios and stores this information.
29010 C...AUTHOR: STEPHEN MRENNA
29011  
29012       SUBROUTINE PYMSIN
29013  
29014 C...Double precision and integer declarations.
29015       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29016       IMPLICIT INTEGER(I-N)
29017       INTEGER PYK,PYCHGE,PYCOMP
29018 C...Parameter statement to help give large particle numbers.
29019       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
29020 C...Commonblocks.
29021       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
29022       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
29023       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
29024       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
29025       COMMON/PYINT4/MWID(500),WIDS(500,5)
29026       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29027       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
29028      &SFMIX(16,4)
29029       COMMON/PYHTRI/HHH(7)
29030       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYPARS/,/PYINT4/,/PYMSSM/,
29031      &/PYSSMT/
29032  
29033 C...Local variables.
29034       INTEGER NSTR
29035       DOUBLE PRECISION ALFA,BETA
29036       DOUBLE PRECISION TANB,AL,BE,COSA,COSB,SINA,SINB,XW,AEM,FACT
29037       DOUBLE PRECISION PYALEM
29038       INTEGER I,J,J1,J2,I1,I2,I3,IKNT,K1
29039       INTEGER KC,LKNT,IDLAM(200,3),IDLAM0(100,3),LKNT0
29040       DOUBLE PRECISION XLAM(0:200),XLAM0(0:200),XALL
29041       DOUBLE PRECISION WDTP(0:200),WDTE(0:200,0:5)
29042  1    DOUBLE PRECISION ATERM,TAN2T,THETA,DENOM
29043       DOUBLE PRECISION XARG,COS2B,XMW2,XMZ2
29044       DOUBLE PRECISION COSW,SINW,WDMIN,WDMAX
29045       DOUBLE PRECISION DELM,XMDIF,BRLIM
29046       DOUBLE PRECISION DX,DY,DS,DMU2,DMA2,DQ2,DU2,DD2,DL2,DE2,DHU2,DHD2
29047       DOUBLE PRECISION ARG,SGNMU,R,GAM
29048       INTEGER IS1,IS2,IS3,IS4,JS1,JS2,JS3,JS4,KS1,KS2,KS3,KS4
29049       INTEGER IMSSM,KFHIGG
29050       INTEGER IRPRTY
29051       INTEGER KFSUSY(36),MWIDSU(36),MDCYSU(36)
29052       SAVE INIT,MWIDSU,MDCYSU
29053       DATA KFSUSY/
29054      &1000001,2000001,1000002,2000002,1000003,2000003,
29055      &1000004,2000004,1000005,2000005,1000006,2000006,
29056      &1000011,2000011,1000012,2000012,1000013,2000013,
29057      &1000014,2000014,1000015,2000015,1000016,2000016,
29058      &1000021,1000022,1000023,1000025,1000035,1000024,
29059      &1000037,1000039,     25,     35,     36,     37/
29060       DATA INIT/0/
29061 
29062 C...Do nothing if SUSY not requested.
29063       IMSSM=IMSS(1)
29064       IF(IMSSM.EQ.0) RETURN
29065 
29066 C...Save copy of MWID(KC) and MDCY(KC,1) values before 
29067 C...they are set to zero for the LSP.
29068       IF(INIT.EQ.0) THEN
29069         INIT=1
29070         DO 105 I=1,36
29071           KF=KFSUSY(I)
29072           KC=PYCOMP(KF)
29073           MWIDSU(I)=MWID(KC)
29074           MDCYSU(I)=MDCY(KC,1)
29075   105   CONTINUE
29076       ENDIF
29077   
29078 C...Restore MWID(KC) and MDCY(KC,1) values previously zeroed for LSP.
29079       DO 107 I=1,36
29080         KF=KFSUSY(I)
29081         KC=PYCOMP(KF)
29082         IF(MDCY(KC,1).EQ.0.AND.MDCYSU(I).NE.0) THEN
29083           MWID(KC)=MWIDSU(I)
29084           MDCY(KC,1)=MDCYSU(I)
29085         ENDIF
29086   107 CONTINUE
29087 
29088 C...First part of routine: set masses and couplings.
29089  
29090 C...Reset mixing values in sfermion sector to pure left/right.
29091       DO 100 I=1,16
29092         SFMIX(I,1)=1D0
29093         SFMIX(I,4)=1D0
29094         SFMIX(I,2)=0D0
29095         SFMIX(I,3)=0D0
29096   100 CONTINUE
29097  
29098 C...Common couplings.
29099       TANB=RMSS(5)
29100       BETA=ATAN(TANB)
29101       COSB=COS(BETA)
29102       SINB=TANB*COSB
29103       COS2B=COS(2D0*BETA)
29104       ALFA=RMSS(18)
29105       XMW2=PMAS(24,1)**2
29106       XMZ2=PMAS(23,1)**2
29107       XW=PARU(102)
29108  
29109 C...Define sparticle masses for a general MSSM simulation.
29110       IF(IMSSM.EQ.1) THEN
29111         IF(IMSS(9).EQ.0) RMSS(22)=RMSS(9)
29112         DO 110 I=1,5,2
29113           KC=PYCOMP(KSUSY1+I)
29114           PMAS(KC,1)=SQRT(RMSS(8)**2-(2D0*XMW2+XMZ2)*COS2B/6D0)
29115           KC=PYCOMP(KSUSY2+I)
29116           PMAS(KC,1)=SQRT(RMSS(9)**2+(XMW2-XMZ2)*COS2B/3D0)
29117           KC=PYCOMP(KSUSY1+I+1)
29118           PMAS(KC,1)=SQRT(RMSS(8)**2+(4D0*XMW2-XMZ2)*COS2B/6D0)
29119           KC=PYCOMP(KSUSY2+I+1)
29120           PMAS(KC,1)=SQRT(RMSS(22)**2-(XMW2-XMZ2)*COS2B*2D0/3D0)
29121   110   CONTINUE
29122         XARG=RMSS(6)**2-PMAS(24,1)**2*ABS(COS(2D0*BETA))
29123         IF(XARG.LT.0D0) THEN
29124           WRITE(MSTU(11),*) ' SNEUTRINO MASS IS NEGATIVE'//
29125      &    ' FROM THE SUM RULE. '
29126           WRITE(MSTU(11),*) '  TRY A SMALLER VALUE OF TAN(BETA). '
29127           RETURN
29128         ELSE
29129           XARG=SQRT(XARG)
29130         ENDIF
29131         DO 120 I=11,15,2
29132           PMAS(PYCOMP(KSUSY1+I),1)=RMSS(6)
29133           PMAS(PYCOMP(KSUSY2+I),1)=RMSS(7)
29134           PMAS(PYCOMP(KSUSY1+I+1),1)=XARG
29135           PMAS(PYCOMP(KSUSY2+I+1),1)=9999D0
29136   120   CONTINUE
29137         IF(IMSS(8).EQ.1) THEN
29138           RMSS(13)=RMSS(6)
29139           RMSS(14)=RMSS(7)
29140         ENDIF
29141  
29142 C...Alternatively derive masses from SUGRA relations.
29143       ELSEIF(IMSSM.EQ.2) THEN
29144         CALL PYAPPS
29145       ENDIF
29146  
29147 C...Add in extra D-term contributions.
29148       IF(IMSS(7).EQ.1) THEN
29149         R=0.43D0
29150         DX=RMSS(23)
29151         DY=RMSS(24)
29152         DS=RMSS(25)
29153         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29154         WRITE(MSTU(11),*) 'C  NEW DTERMS ADDED TO SCALAR MASSES   '
29155         WRITE(MSTU(11),*) 'C   IN A U(B-L) THEORY                 '
29156         WRITE(MSTU(11),*) 'C   DX = ',DX
29157         WRITE(MSTU(11),*) 'C   DY = ',DY
29158         WRITE(MSTU(11),*) 'C   DS = ',DS
29159         WRITE(MSTU(11),*) 'C                                      '
29160         DY=R*DY-4D0/33D0*(1D0-R)*DX+(1D0-R)/33D0*DS
29161         WRITE(MSTU(11),*) 'C   DY AT THE WEAK SCALE = ',DY
29162         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29163         DQ2=DY/6D0-DX/3D0-DS/3D0
29164         DU2=-2D0*DY/3D0-DX/3D0-DS/3D0
29165         DD2=DY/3D0+DX-2D0*DS/3D0
29166         DL2=-DY/2D0+DX-2D0*DS/3D0
29167         DE2=DY-DX/3D0-DS/3D0
29168         DHU2=DY/2D0+2D0*DX/3D0+2D0*DS/3D0
29169         DHD2=-DY/2D0-2D0*DX/3D0+DS
29170         DMU2=(-DY/2D0-2D0/3D0*DX+(COSB**2-2D0*SINB**2/3D0)*DS)
29171      &  /ABS(COS2B)
29172         DMA2 = 2D0*DMU2+DHU2+DHD2
29173         DO 130 I=1,5,2
29174           KC=PYCOMP(KSUSY1+I)
29175           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DQ2)
29176           KC=PYCOMP(KSUSY2+I)
29177           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DD2)
29178           KC=PYCOMP(KSUSY1+I+1)
29179           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DQ2)
29180           KC=PYCOMP(KSUSY2+I+1)
29181           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DU2)
29182   130   CONTINUE
29183         DO 140 I=11,15,2
29184           KC=PYCOMP(KSUSY1+I)
29185           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DL2)
29186           KC=PYCOMP(KSUSY2+I)
29187           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DE2)
29188           KC=PYCOMP(KSUSY1+I+1)
29189           PMAS(KC,1)=SQRT(PMAS(KC,1)**2+DL2)
29190   140   CONTINUE
29191         IF(RMSS(4)**2+DMU2.LT.0D0) THEN
29192           WRITE(MSTU(11),*) ' MU2 DRIVEN NEGATIVE '
29193           STOP
29194         ENDIF
29195         SGNMU=SIGN(1D0,RMSS(4))
29196         RMSS(4)=SGNMU*SQRT(RMSS(4)**2+DMU2)
29197         ARG=RMSS(10)**2*SIGN(1D0,RMSS(10))+DQ2
29198         RMSS(10)=SIGN(SQRT(ABS(ARG)),ARG)
29199         ARG=RMSS(11)**2*SIGN(1D0,RMSS(11))+DD2
29200         RMSS(11)=SIGN(SQRT(ABS(ARG)),ARG)
29201         ARG=RMSS(12)**2*SIGN(1D0,RMSS(12))+DU2
29202         RMSS(12)=SIGN(SQRT(ABS(ARG)),ARG)
29203         ARG=RMSS(13)**2*SIGN(1D0,RMSS(13))+DL2
29204         RMSS(13)=SIGN(SQRT(ABS(ARG)),ARG)
29205         ARG=RMSS(14)**2*SIGN(1D0,RMSS(14))+DE2
29206         RMSS(14)=SIGN(SQRT(ABS(ARG)),ARG)
29207         IF( RMSS(19)**2 + DMA2 .LE. 50D0 ) THEN
29208           WRITE(MSTU(11),*) ' MA DRIVEN TOO LOW '
29209           STOP
29210         ENDIF
29211         RMSS(19)=SQRT(RMSS(19)**2+DMA2)
29212         RMSS(6)=SQRT(RMSS(6)**2+DL2)
29213         RMSS(7)=SQRT(RMSS(7)**2+DE2)
29214         WRITE(MSTU(11),*) ' MTL = ',RMSS(10)
29215         WRITE(MSTU(11),*) ' MBR = ',RMSS(11)
29216         WRITE(MSTU(11),*) ' MTR = ',RMSS(12)
29217         WRITE(MSTU(11),*) ' SEL = ',RMSS(6),RMSS(13)
29218         WRITE(MSTU(11),*) ' SER = ',RMSS(7),RMSS(14)
29219       ENDIF
29220  
29221 C...Fix the third generation sfermions.
29222       CALL PYTHRG
29223       XARG=RMSS(13)**2-PMAS(24,1)**2*ABS(COS2B)
29224       IF(XARG.LT.0D0) THEN
29225         WRITE(MSTU(11),*) ' TAU SNEUTRINO MASS IS NEGATIVE FROM'//
29226      &  ' THE SUM RULE. '
29227         WRITE(MSTU(11),*) '  TRY A SMALLER VALUE OF TAN(BETA). '
29228         RETURN
29229       ELSE
29230         PMAS(PYCOMP(KSUSY1+16),1)=SQRT(XARG)
29231       ENDIF
29232  
29233 C...Fix the neutralino--chargino--gluino sector.
29234       CALL PYINOM
29235  
29236 C...Fix the Higgs sector.
29237       CALL PYHGGM(ALFA)
29238  
29239 C...Choose the Gunion-Haber convention.
29240       ALFA=-ALFA
29241       RMSS(18)=ALFA
29242  
29243 C...Print information on mass parameters.
29244       IF(IMSSM.EQ.2.AND.MSTP(122).GT.0) THEN
29245         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29246         WRITE(MSTU(11),*) ' USING APPROXIMATE SUGRA RELATIONS '
29247         WRITE(MSTU(11),*) ' M0 = ',RMSS(8)
29248         WRITE(MSTU(11),*) ' M1/2=',RMSS(1)
29249         WRITE(MSTU(11),*) ' TANB=',RMSS(5)
29250         WRITE(MSTU(11),*) ' MU = ',RMSS(4)
29251         WRITE(MSTU(11),*) ' AT = ',RMSS(16)
29252         WRITE(MSTU(11),*) ' MA = ',RMSS(19)
29253         WRITE(MSTU(11),*) ' MTOP=',PMAS(6,1)
29254         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29255       ENDIF
29256       IF(IMSS(20).EQ.1) THEN
29257         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29258         WRITE(MSTU(11),*) ' DEBUG MODE '
29259         WRITE(MSTU(11),*) ' UMIX = ',UMIX(1,1),UMIX(1,2),
29260      &  UMIX(2,1),UMIX(2,2)
29261         WRITE(MSTU(11),*) ' VMIX = ',VMIX(1,1),VMIX(1,2),
29262      &  VMIX(2,1),VMIX(2,2)
29263         WRITE(MSTU(11),*) ' ZMIX = ',ZMIX
29264         WRITE(MSTU(11),*) ' ALFA = ',ALFA
29265         WRITE(MSTU(11),*) ' BETA = ',BETA
29266         WRITE(MSTU(11),*) ' STOP = ',(SFMIX(6,I),I=1,4)
29267         WRITE(MSTU(11),*) ' SBOT = ',(SFMIX(5,I),I=1,4)
29268         WRITE(MSTU(11),*) 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC'
29269       ENDIF
29270  
29271 C...Set up the Higgs couplings - needed here since initialization
29272 C...in PYINRE did not yet occur when PYWIDT is called below.
29273       AL=ALFA
29274       BE=BETA
29275       SINA=SIN(AL)
29276       COSA=COS(AL)
29277       COSB=COS(BE)
29278       SINB=TANB*COSB
29279       SBMA=SIN(BE-AL)
29280       SAPB=SIN(AL+BE)
29281       CAPB=COS(AL+BE)
29282       CBMA=COS(BE-AL)
29283       S2A=SIN(2D0*AL)
29284       C2A=COS(2D0*AL)
29285       C2B=COSB**2-SINB**2
29286 C...tanb (used for H+)
29287       PARU(141)=TANB
29288  
29289 C...Firstly: h
29290 C...Coupling to d-type quarks
29291       PARU(161)=SINA/COSB
29292 C...Coupling to u-type quarks
29293       PARU(162)=-COSA/SINB
29294 C...Coupling to leptons
29295       PARU(163)=PARU(161)
29296 C...Coupling to Z
29297       PARU(164)=SBMA
29298 C...Coupling to W
29299       PARU(165)=PARU(164)
29300  
29301 C...Secondly: H
29302 C...Coupling to d-type quarks
29303       PARU(171)=-COSA/COSB
29304 C...Coupling to u-type quarks
29305       PARU(172)=-SINA/SINB
29306 C...Coupling to leptons
29307       PARU(173)=PARU(171)
29308 C...Coupling to Z
29309       PARU(174)=CBMA
29310 C...Coupling to W
29311       PARU(175)=PARU(174)
29312 C...Coupling to h
29313 C      PARU(176)=COS(2D0*AL)*COS(BE+AL)-2D0*SIN(2D0*AL)*SIN(BE+AL)
29314       HHH(3)=HHH(3)+HHH(4)+HHH(5)
29315       PARU(176)=-3D0/HHH(1)*(HHH(1)*SINA**2*COSB*COSA+
29316      1 HHH(2)*COSA**2*SINB*SINA+HHH(3)*(SINA**3*SINB+COSA**3*COSB-
29317      2 2D0/3D0*CBMA)-HHH(6)*SINA*(COSB*C2A+COSA*CAPB)+
29318      3 HHH(7)*COSA*(SINB*C2A+SINA*CAPB))
29319 C...Coupling to H+
29320 C...Define later
29321 C      PARU(168)=-SBMA-COS(2D0*BE)*SAPB/2D0/(1D0-XW)
29322       PARU(168)=1D0/HHH(1)*(HHH(1)*SINB**2*COSB*SINA-
29323      1 HHH(2)*COSB**2*SINB*COSA-HHH(3)*(SINB**3*COSA-COSB**3*SINA)+
29324      2 2D0*HHH(5)*SBMA-HHH(6)*SINB*(COSB*SAPB+SINA*C2B)-
29325      3 HHH(7)*COSB*(COSA*C2B-SINB*SAPB)-(HHH(5)-HHH(4))*SBMA)
29326 C...Coupling to A
29327 C      PARU(177)=COS(2D0*BE)*COS(BE+AL)
29328       PARU(177)=-1D0/HHH(1)*(HHH(1)*SINB**2*COSB*COSA+
29329      1 HHH(2)*COSB**2*SINB*SINA+HHH(3)*(SINB**3*SINA+COSB**3*COSA)-
29330      2 2D0*HHH(5)*CBMA-HHH(6)*SINB*(COSB*CAPB+COSA*C2B)+
29331      3 HHH(7)*COSB*(SINB*CAPB+SINA*C2B))
29332 C...Coupling to H+
29333       PARU(178)=PARU(177)-(HHH(5)-HHH(4))/HHH(1)*CBMA
29334 C...Thirdly, A
29335 C...Coupling to d-type quarks
29336       PARU(181)=TANB
29337 C...Coupling to u-type quarks
29338       PARU(182)=1D0/PARU(181)
29339 C...Coupling to leptons
29340       PARU(183)=PARU(181)
29341       PARU(184)=0D0
29342       PARU(185)=0D0
29343 C...Coupling to Z h
29344       PARU(186)=COS(BE-AL)
29345 C...Coupling to Z H
29346       PARU(187)=SIN(BE-AL)
29347       PARU(188)=0D0
29348       PARU(189)=0D0
29349       PARU(190)=0D0
29350  
29351 C...Finally: H+
29352 C...Coupling to W h
29353       PARU(195)=COS(BE-AL)
29354  
29355 C...Tell that all Higgs couplings have been set.
29356       MSTP(4)=1
29357  
29358 C...Second part of routine: set decay modes and branching ratios.
29359  
29360 C...Allow chi10 -> gravitino + gamma or not.
29361       KC=PYCOMP(KSUSY1+39)
29362       IF( IMSS(11) .NE. 0 ) THEN
29363         PMAS(KC,1)=RMSS(21)/1000000000D0
29364         PMAS(KC,2)=0.0001D0
29365         IRPRTY=0
29366         WRITE(MSTU(11),*) ' ALLOWING DECAYS TO GRAVITINOS '
29367       ELSE
29368         PMAS(KC,1)=9999D0
29369         IRPRTY=1
29370       ENDIF
29371  
29372 C...Loop over sparticle and Higgs species.
29373       PMCHI1=PMAS(PYCOMP(KSUSY1+22),1)
29374 C...Find the LSP or NLSP for a gravitino LSP
29375       ILSP=0
29376       PMLSP=1D20
29377       DO 150 I=1,36
29378         KF=KFSUSY(I)
29379         IF(KF.EQ.1000039) GOTO 150
29380         KC=PYCOMP(KF)
29381         IF(PMAS(KC,1).LT.PMLSP) THEN
29382           ILSP=I
29383           PMLSP=PMAS(KC,1)
29384         ENDIF
29385   150 CONTINUE
29386       DO 210 I=1,36
29387         KF=KFSUSY(I)
29388         KC=PYCOMP(KF)
29389         LKNT=0
29390  
29391 C...Sfermion decays.
29392         IF(I.LE.24) THEN
29393 C...First check to see if sneutrino is lighter than chi10.
29394           IF((I.EQ.15.OR.I.EQ.19.OR.I.EQ.23).AND.
29395      &    PMAS(KC,1).LT.PMCHI1) THEN
29396           ELSE
29397             CALL PYSFDC(KF,XLAM,IDLAM,LKNT)
29398           ENDIF
29399  
29400 C...Gluino decays.
29401         ELSEIF(I.EQ.25) THEN
29402           CALL PYGLUI(KF,XLAM,IDLAM,LKNT)
29403           IF(I.EQ.ILSP) LKNT=0
29404  
29405 C...Neutralino decays.
29406         ELSEIF(I.GE.26.AND.I.LE.29) THEN
29407           CALL PYNJDC(KF,XLAM,IDLAM,LKNT)
29408 C...chi10 stable or chi10 -> gravitino + gamma.
29409           IF(I.EQ.26.AND.IRPRTY.EQ.1) THEN
29410             PMAS(KC,2)=1D-6
29411             MDCY(KC,1)=0
29412             MWID(KC)=0
29413           ENDIF
29414  
29415 C...Chargino decays.
29416         ELSEIF(I.GE.30.AND.I.LE.31) THEN
29417           CALL PYCJDC(KF,XLAM,IDLAM,LKNT)
29418  
29419 C...Gravitino is stable.
29420         ELSEIF(I.EQ.32) THEN
29421           MDCY(KC,1)=0
29422           MWID(KC)=0
29423  
29424 C...Higgs decays.
29425         ELSEIF(I.GE.33.AND.I.LE.36) THEN
29426 C...Calculate decays to non-SUSY particles.
29427           CALL PYWIDT(KF,PMAS(KC,1)**2,WDTP,WDTE)
29428           LKNT=0
29429           DO 160 I1=0,100
29430             XLAM(I1)=0D0
29431   160     CONTINUE
29432           DO 180 I1=1,MDCY(KC,3)
29433             K1=MDCY(KC,2)+I1-1
29434             IF(IABS(KFDP(K1,1)).GT.KSUSY1.OR.
29435      &      IABS(KFDP(K1,2)).GT.KSUSY1) GOTO 180
29436             XLAM(I1)=WDTP(I1)
29437             XLAM(0)=XLAM(0)+XLAM(I1)
29438             DO 170 J1=1,3
29439               IDLAM(I1,J1)=KFDP(K1,J1)
29440   170       CONTINUE
29441             LKNT=LKNT+1
29442   180     CONTINUE
29443 C...Add the decays to SUSY particles.
29444           CALL PYHEXT(KF,XLAM,IDLAM,LKNT)
29445         ENDIF
29446 C...Zero the branching ratios for use in loop mode
29447 C...thanks to K. Matchev (FNAL)
29448         DO 185 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
29449           BRAT(IDC)=0D0
29450   185   CONTINUE
29451  
29452 C...Set stable particles.
29453         IF(LKNT.EQ.0) THEN
29454           MDCY(KC,1)=0
29455           MWID(KC)=0
29456           PMAS(KC,2)=1D-6
29457           PMAS(KC,3)=1D-5
29458           PMAS(KC,4)=0D0
29459  
29460 C...Store branching ratios in the standard tables.
29461         ELSE
29462           IDC=MDCY(KC,2)+MDCY(KC,3)-1
29463           DELM=1D6
29464           DO 200 IL=1,LKNT
29465             IDCSV=IDC
29466   190       IDC=IDC+1
29467             BRAT(IDC)=0D0
29468             IF(IDC.EQ.MDCY(KC,2)+MDCY(KC,3)) IDC=MDCY(KC,2)
29469             IF(IDLAM(IL,1).EQ.KFDP(IDC,1).AND.IDLAM(IL,2).EQ.
29470      &      KFDP(IDC,2).AND.IDLAM(IL,3).EQ.KFDP(IDC,3)) THEN
29471               BRAT(IDC)=XLAM(IL)/XLAM(0)
29472               XMDIF=PMAS(KC,1)
29473               IF(MDME(IDC,1).GE.1) THEN
29474                 XMDIF=XMDIF-PMAS(PYCOMP(KFDP(IDC,1)),1)-
29475      &          PMAS(PYCOMP(KFDP(IDC,2)),1)
29476                 IF(KFDP(IDC,3).NE.0) XMDIF=XMDIF-
29477      &          PMAS(PYCOMP(KFDP(IDC,3)),1)
29478               ENDIF
29479               IF(I.LE.32) THEN
29480                 IF(XMDIF.GE.0D0) THEN
29481                   DELM=MIN(DELM,XMDIF)
29482                 ELSE
29483                   WRITE(MSTU(11),*) ' ERROR WITH DELM ',DELM,XMDIF
29484                   WRITE(MSTU(11),*) ' KF = ',KF
29485                   WRITE(MSTU(11),*) ' KF(decay) = ',(KFDP(IDC,J),J=1,3)
29486                 ENDIF
29487               ENDIF
29488               GOTO 200
29489             ELSEIF(IDC.EQ.IDCSV) THEN
29490               WRITE(MSTU(11),*) ' Error in PYMSIN: SUSY decay ',
29491      &        'channel not recognized:'
29492               WRITE(MSTU(11),*) KF,' -> ',(IDLAM(I,J),J=1,3)
29493               GOTO 200
29494             ELSE
29495               GOTO 190
29496             ENDIF
29497   200     CONTINUE
29498  
29499 C...Store width, cutoff and lifetime.
29500           PMAS(KC,2)=XLAM(0)
29501           IF(PMAS(KC,2).LT.0.1D0*DELM) THEN
29502             PMAS(KC,3)=PMAS(KC,2)*10D0
29503           ELSE
29504             PMAS(KC,3)=0.95D0*DELM
29505           ENDIF
29506           IF(PMAS(KC,2).NE.0D0) THEN
29507             PMAS(KC,4)=PARU(3)/PMAS(KC,2)*1D-12
29508           ENDIF
29509         ENDIF
29510   210 CONTINUE
29511  
29512       RETURN
29513       END
29514  
29515 C*********************************************************************
29516  
29517 C...PYAPPS
29518 C...Uses approximate analytical formulae to determine the full set of
29519 C...MSSM parameters from SUGRA input.
29520 C...See M. Drees and S.P. Martin, hep-ph/9504124
29521  
29522       SUBROUTINE PYAPPS
29523  
29524 C...Double precision and integer declarations.
29525       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29526       IMPLICIT INTEGER(I-N)
29527       INTEGER PYK,PYCHGE,PYCOMP
29528 C...Parameter statement to help give large particle numbers.
29529       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
29530 C...Commonblocks.
29531       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
29532       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
29533       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29534       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/
29535  
29536       IMSS(5)=0
29537       XMT=PMAS(6,1)
29538       XMZ2=PMAS(23,1)**2
29539       XMW2=PMAS(24,1)**2
29540       TANB=RMSS(5)
29541       BETA=ATAN(TANB)
29542       XW=PARU(102)
29543       XMG=RMSS(1)
29544       XMG2=XMG*XMG
29545       XM0=RMSS(8)
29546       XM02=XM0*XM0
29547       AT=-RMSS(16)
29548       RMSS(15)=AT
29549       RMSS(17)=AT
29550       COSB=COS(BETA)
29551       SINB=TANB/SQRT(TANB**2+1D0)
29552       COSB=SINB/TANB
29553  
29554       DTERM=XMZ2*COS(2D0*BETA)
29555       XMER=SQRT(XM02+0.15D0*XMG2-XW*DTERM)
29556       XMEL=SQRT(XM02+0.52D0*XMG2-(0.5D0-XW)*DTERM)
29557       RMSS(6)=XMEL
29558       RMSS(7)=XMER
29559       XMUR=SQRT(PYRNMQ(2,2D0/3D0*XW*DTERM))
29560       XMDR=SQRT(PYRNMQ(3,-1D0/3D0*XW*DTERM))
29561       XMUL=SQRT(PYRNMQ(1,(0.5D0-2D0/3D0*XW)*DTERM))
29562       XMDL=SQRT(PYRNMQ(1,-(0.5D0-1D0/3D0*XW)*DTERM))
29563       DO 100 I=1,5,2
29564         PMAS(PYCOMP(KSUSY1+I),1)=XMDL
29565         PMAS(PYCOMP(KSUSY2+I),1)=XMDR
29566         PMAS(PYCOMP(KSUSY1+I+1),1)=XMUL
29567         PMAS(PYCOMP(KSUSY2+I+1),1)=XMUR
29568   100 CONTINUE
29569       XARG=XMEL**2-XMW2*ABS(COS(2D0*BETA))
29570       IF(XARG.LT.0D0) THEN
29571         WRITE(MSTU(11),*) ' SNEUTRINO MASS IS NEGATIVE'//
29572      &  ' FROM THE SUM RULE. '
29573         WRITE(MSTU(11),*) '  TRY A SMALLER VALUE OF TAN(BETA). '
29574         RETURN
29575       ELSE
29576         XARG=SQRT(XARG)
29577       ENDIF
29578       DO 110 I=11,15,2
29579         PMAS(PYCOMP(KSUSY1+I),1)=XMEL
29580         PMAS(PYCOMP(KSUSY2+I),1)=XMER
29581         PMAS(PYCOMP(KSUSY1+I+1),1)=XARG
29582         PMAS(PYCOMP(KSUSY2+I+1),1)=9999D0
29583   110 CONTINUE
29584       XMNU=XARG
29585  
29586       RMT=PYRNMT(XMT)
29587       XTOP=(RMT/150D0/SINB)**2*(.9D0*XM02+2.1D0*XMG2+
29588      &(1D0-(RMT/190D0/SINB)**3)*(.24D0*AT**2+AT*XMG))
29589       RMB=3D0
29590       XBOT=(RMB/150D0/COSB)**2*(.9D0*XM02+2.1D0*XMG2+
29591      &(1D0-(RMB/190D0/COSB)**3)*(.24D0*AT**2+AT*XMG))
29592       XTAU=1D-4/COSB**2*(XM02+0.15D0*XMG2+AT**2/3D0)
29593       ATP=AT*(1D0-(RMT/190D0/SINB)**2)+XMG*(3.47D0-1.9D0*(RMT/190D0/
29594      &SINB)**2)
29595       RMSS(16)=-ATP
29596 C      XMU2=-XM02-0.52D0*XMG2-0.5D0*XMZ2+XTOP/(1D0-1D0/TANB**2)
29597 C.....
29598       XMU2=-.5D0*XMZ2+(SINB**2*(XM02+.52D0*XMG2-XTOP)-
29599      &COSB**2*(XM02+.52D0*XMG2-XBOT-XTAU/3D0))/(COSB**2-SINB**2)
29600 C      XMA2=(XMNU**2+XMU2-XBOT-XTAU/3D0)/SINB**2
29601 C.....
29602       XMA2=2D0*(XM02+.52D0*XMG2)-XTOP-XBOT-XTAU/3D0+2D0*XMU2
29603       XMU=SIGN(SQRT(XMU2),RMSS(4))
29604       RMSS(4)=XMU
29605       RMSS(19)=SQRT(XMA2)
29606       ARG=XM02+0.15D0*XMG2-2D0*XTAU/3D0-XW*DTERM
29607       IF(ARG.GT.0D0) THEN
29608         RMSS(14)=SQRT(ARG)
29609       ELSE
29610         WRITE(MSTU(11),*) ' RIGHT STAU MASS < 0 '
29611         STOP
29612       ENDIF
29613       ARG=XM02+0.52D0*XMG2-XTAU/3D0-(0.5D0-XW)*DTERM
29614       IF(ARG.GT.0D0) THEN
29615         RMSS(13)=SQRT(ARG)
29616       ELSE
29617         WRITE(MSTU(11),*) ' LEFT STAU MASS < 0 '
29618         STOP
29619       ENDIF
29620       ARG=PYRNMQ(1,-(XBOT+XTOP)/3D0)
29621       IF(ARG.GT.0D0) THEN
29622         RMSS(10)=SQRT(ARG)
29623       ELSE
29624         RMSS(10)=-SQRT(-ARG)
29625       ENDIF
29626       ARG=PYRNMQ(2,-2D0*XTOP/3D0)
29627       IF(ARG.GT.0D0) THEN
29628         RMSS(12)=SQRT(ARG)
29629       ELSE
29630         RMSS(12)=-SQRT(-ARG)
29631       ENDIF
29632       ARG=PYRNMQ(3,-2D0*XBOT/3D0)
29633       IF(ARG.GT.0D0) THEN
29634         RMSS(11)=SQRT(ARG)
29635       ELSE
29636         RMSS(11)=-SQRT(-ARG)
29637       ENDIF
29638  
29639       RETURN
29640       END
29641  
29642 C*********************************************************************
29643  
29644 C...PYRNMQ
29645 C...Determines the running mass of quarks.
29646  
29647       FUNCTION PYRNMQ(ID,DTERM)
29648  
29649 C...Double precision and integer declarations.
29650       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29651       IMPLICIT INTEGER(I-N)
29652       INTEGER PYK,PYCHGE,PYCOMP
29653 C...Commonblock.
29654       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29655       SAVE /PYMSSM/
29656  
29657 C...Local variables.
29658       DOUBLE PRECISION PI,R
29659       DOUBLE PRECISION TOL
29660       DOUBLE PRECISION CI(3)
29661       EXTERNAL PYALPS
29662       DOUBLE PRECISION PYALPS
29663       DATA TOL/0.001D0/
29664       DATA PI,R/3.141592654D0,.61803399D0/
29665       DATA CI/0.47D0,0.07D0,0.02D0/
29666  
29667       C=1D0-R
29668       CA=CI(ID)
29669       AG=(0.71D0)**2/4D0/PI
29670       AG=RMSS(20)
29671       XM0=RMSS(8)
29672       XMG=RMSS(1)
29673       XM02=XM0*XM0
29674       XMG2=XMG*XMG
29675  
29676       AS=PYALPS(XM02+6D0*XMG2)
29677       CG=8D0/9D0*((AS/AG)**2-1D0)
29678       BX=XM02+(CA+CG)*XMG2+DTERM
29679       AX=MIN(50D0**2,0.5D0*BX)
29680       CX=MAX(2000D0**2,2D0*BX)
29681  
29682       X0=AX
29683       X3=CX
29684       IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
29685         X1=BX
29686         X2=BX+C*(CX-BX)
29687       ELSE
29688         X2=BX
29689         X1=BX-C*(BX-AX)
29690       ENDIF
29691       AS1=PYALPS(X1)
29692       CG=8D0/9D0*((AS1/AG)**2-1D0)
29693       F1=ABS(XM02+(CA+CG)*XMG2+DTERM-X1)
29694       AS2=PYALPS(X2)
29695       CG=8D0/9D0*((AS2/AG)**2-1D0)
29696       F2=ABS(XM02+(CA+CG)*XMG2+DTERM-X2)
29697   100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
29698         IF(F2.LT.F1) THEN
29699           X0=X1
29700           X1=X2
29701           X2=R*X1+C*X3
29702           F1=F2
29703           AS2=PYALPS(X2)
29704           CG=8D0/9D0*((AS2/AG)**2-1D0)
29705           F2=ABS(XM02+(CA+CG)*XMG2+DTERM-X2)
29706         ELSE
29707           X3=X2
29708           X2=X1
29709           X1=R*X2+C*X0
29710           F2=F1
29711           AS1=PYALPS(X1)
29712           CG=8D0/9D0*((AS1/AG)**2-1D0)
29713           F1=ABS(XM02+(CA+CG)*XMG2+DTERM-X1)
29714         ENDIF
29715         GOTO 100
29716       ENDIF
29717       IF(F1.LT.F2) THEN
29718         PYRNMQ=X1
29719         XMIN=X1
29720       ELSE
29721         PYRNMQ=X2
29722         XMIN=X2
29723       ENDIF
29724  
29725       RETURN
29726       END
29727  
29728 C*********************************************************************
29729  
29730 C...PYRNMT
29731 C...Determines the running mass of the top quark.
29732  
29733       FUNCTION PYRNMT(XMT)
29734  
29735 C...Double precision and integer declarations.
29736       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29737       IMPLICIT INTEGER(I-N)
29738       INTEGER PYK,PYCHGE,PYCOMP
29739 C...Commonblock.
29740       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29741       SAVE /PYMSSM/
29742  
29743 C...Local variables.
29744       DOUBLE PRECISION XMT
29745       DOUBLE PRECISION PI,R
29746       DOUBLE PRECISION TOL
29747       EXTERNAL PYALPS
29748       DOUBLE PRECISION PYALPS
29749       DATA TOL/0.001D0/
29750       DATA PI,R/3.141592654D0,0.61803399D0/
29751  
29752       C=1D0-R
29753  
29754       BX=XMT
29755       AX=MIN(50D0,BX*0.5D0)
29756       CX=MAX(300D0,2D0*BX)
29757  
29758       X0=AX
29759       X3=CX
29760       IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
29761         X1=BX
29762         X2=BX+C*(CX-BX)
29763       ELSE
29764         X2=BX
29765         X1=BX-C*(BX-AX)
29766       ENDIF
29767       AS1=PYALPS(X1**2)/PI
29768       F1=ABS(XMT/(1D0+4D0/3D0*AS1+11D0*AS1**2)-X1)
29769       AS2=PYALPS(X2**2)/PI
29770       F2=ABS(XMT/(1D0+4D0/3D0*AS2+11D0*AS2**2)-X2)
29771   100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
29772         IF(F2.LT.F1) THEN
29773           X0=X1
29774           X1=X2
29775           X2=R*X1+C*X3
29776           F1=F2
29777           AS2=PYALPS(X2**2)/PI
29778           F2=ABS(XMT/(1D0+4D0/3D0*AS2+11D0*AS2**2)-X2)
29779         ELSE
29780           X3=X2
29781           X2=X1
29782           X1=R*X2+C*X0
29783           F2=F1
29784           AS1=PYALPS(X1**2)/PI
29785           F1=ABS(XMT/(1D0+4D0/3D0*AS1+11D0*AS1**2)-X1)
29786         ENDIF
29787         GOTO 100
29788       ENDIF
29789       IF(F1.LT.F2) THEN
29790         PYRNMT=X1
29791         XMIN=X1
29792       ELSE
29793         PYRNMT=X2
29794         XMIN=X2
29795       ENDIF
29796  
29797       RETURN
29798       END
29799  
29800 C*********************************************************************
29801  
29802 C...PYTHRG
29803 C...Calculates the mass eigenstates of the third generation sfermions.
29804 C...Created:  5-31-96
29805  
29806       SUBROUTINE PYTHRG
29807  
29808 C...Double precision and integer declarations.
29809       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
29810       IMPLICIT INTEGER(I-N)
29811       INTEGER PYK,PYCHGE,PYCOMP
29812 C...Parameter statement to help give large particle numbers.
29813       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
29814 C...Commonblocks.
29815       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
29816       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
29817       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
29818       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
29819      &SFMIX(16,4)
29820       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
29821  
29822 C...Local variables.
29823       DOUBLE PRECISION BETA
29824       DOUBLE PRECISION PYRNMT
29825       DOUBLE PRECISION AM2(2,2),RT(2,2),DI(2,2)
29826       DOUBLE PRECISION XMZ2,XMW2,TANB,XMU,COS2B,XMQL2,XMQR2
29827       DOUBLE PRECISION XMF,XMF2,DIFF,SAME,XMF12,XMF22,SMALL
29828       DOUBLE PRECISION SIN2T,COS2T,TWOT,ATR,AMQR,XXX,YYY,AMQL
29829       INTEGER ID1(3),ID2(3),ID3(3),ID4(3)
29830       INTEGER IF,I,J,II,JJ,IT,L
29831       LOGICAL DTERM
29832       DATA SMALL/1D-3/
29833       DATA ID1/10,10,13/
29834       DATA ID2/5,6,15/
29835       DATA ID3/15,16,17/
29836       DATA ID4/11,12,14/
29837       DATA DTERM/.TRUE./
29838  
29839       XMZ2=PMAS(23,1)**2
29840       XMW2=PMAS(24,1)**2
29841       TANB=RMSS(5)
29842       XMU=-RMSS(4)
29843       BETA=ATAN(TANB)
29844       COS2B=COS(2D0*BETA)
29845  
29846 C...OPTION TO FIX T1, T2, B1 MASSES AND MIXINGS
29847  
29848       IOPT=IMSS(5)
29849       IF(IOPT.EQ.1) THEN
29850         CTT=RMSS(27)
29851         CTT2=CTT**2
29852         STT2=1D0-CTT2
29853         STT=SQRT(STT2)
29854         XM12=RMSS(12)**2
29855         XM22=RMSS(10)**2
29856         XMQL2=CTT2*XM12+STT2*XM22
29857         XMQR2=STT2*XM12+CTT2*XM22
29858         XMFR=PMAS(6,1)
29859         XMF2=PYRNMT(XMFR)**2
29860         ATOP=-XMU/TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29861         ATMT=SQRT(XMF2)*(ATOP+XMU/TANB)
29862         XTEST=(XMQL2-XMQR2)*(CTT2-STT2)
29863         IF(XTEST.GT.4D0*STT*CTT*ATMT) THEN
29864          STT=-STT
29865          ATOP=-XMU/TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29866         ENDIF
29867         RMSS(16)=ATOP
29868 C......SUBTRACT OUT D-TERM AND FERMION MASS
29869         XMQL2=XMQL2-XMF2-(4D0*XMW2-XMZ2)*COS2B/6D0
29870         XMQR2=XMQR2-XMF2+(XMW2-XMZ2)*COS2B*2D0/3D0
29871         IF(XMQL2.GE.0D0) THEN
29872           RMSS(10)=SQRT(XMQL2)
29873         ELSE
29874           RMSS(10)=-SQRT(-XMQL2)
29875         ENDIF
29876         IF(XMQR2.GE.0D0) THEN
29877           RMSS(12)=SQRT(XMQR2)
29878         ELSE
29879           RMSS(12)=-SQRT(-XMQR2)
29880         ENDIF
29881 C SAME FOR BOTTOM SQUARK
29882         CTT=RMSS(26)
29883         CTT2=CTT**2
29884         STT2=1D0-CTT2
29885         STT=MAX(SQRT(STT2),1D-6)
29886         XMF=3D00
29887         XMF2=XMF**2
29888         XM12=RMSS(11)**2
29889         XMQL2=RMSS(10)**2-(2D0*XMW2+XMZ2)*COS2B/6D0+XMF2
29890         IF(ABS(CTT).EQ.1D0) THEN
29891           XM22=XM12
29892           XM12=XMQL2
29893           XMQR2=XM22
29894         ELSEIF(CTT.EQ.0D0) THEN
29895           XM22=XMQL2
29896           XMQR2=XM12
29897         ELSE
29898           XM22=(XMQL2-CTT2*XM12)/STT2
29899           XMQR2=STT2*XM12+CTT2*XM22
29900         ENDIF
29901         ABOT=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29902         ATMT=SQRT(XMF2)*(ABOT+XMU*TANB)
29903         XTEST=(XMQL2-XMQR2)*(CTT2-STT2)
29904         IF(XTEST.GT.4D0*STT*CTT*ATMT) THEN
29905           STT=-STT
29906           ABOT=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29907         ENDIF
29908         RMSS(15)=ABOT
29909 C......SUBTRACT OUT D-TERM AND FERMION MASS
29910         XMQR2=XMQR2-(XMW2-XMZ2)*COS2B/3D0-XMF2
29911         IF(XMQR2.GE.0D0) THEN
29912           RMSS(11)=SQRT(XMQR2)
29913         ELSE
29914           RMSS(11)=-SQRT(-XMQR2)
29915         ENDIF
29916 C SAME FOR TAU SLEPTON
29917         CTT=RMSS(28)
29918         CTT2=CTT**2
29919         STT2=1D0-CTT2
29920         STT=SQRT(STT2)
29921         XM12=RMSS(14)**2
29922         XM22=RMSS(13)**2
29923         XMQL2=CTT2*XM12+STT2*XM22
29924         XMQR2=STT2*XM12+CTT2*XM22
29925         XMFR=PMAS(15,1)
29926         XMF2=XMFR**2
29927         ATAU=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29928         ATMT=SQRT(XMF2)*(ATAU+XMU*TANB)
29929         XTEST=(XMQL2-XMQR2)*(CTT2-STT2)
29930         IF(XTEST.GT.4D0*STT*CTT*ATMT) THEN
29931          STT=-STT
29932          ATAU=-XMU*TANB+CTT*STT*(XM22-XM12)/SQRT(XMF2)
29933         ENDIF
29934         RMSS(17)=ATAU
29935 C......SUBTRACT OUT D-TERM AND FERMION MASS
29936         XMQL2=XMQL2-XMF2+(-.5D0*XMZ2+XMW2)*COS2B
29937         XMQR2=XMQR2-XMF2+(XMZ2-XMW2)*COS2B
29938         IF(XMQL2.GE.0D0) THEN
29939           RMSS(13)=SQRT(XMQL2)
29940         ELSE
29941           RMSS(13)=-SQRT(-XMQL2)
29942         ENDIF
29943         IF(XMQR2.GE.0D0) THEN
29944           RMSS(14)=SQRT(XMQR2)
29945         ELSE
29946           RMSS(14)=-SQRT(-XMQR2)
29947         ENDIF
29948       ENDIF
29949       DO 170 L=1,3
29950         AMQL=RMSS(ID1(L))
29951         IF(AMQL.LT.0D0) THEN
29952           XMQL2=-AMQL**2
29953         ELSE
29954           XMQL2=AMQL**2
29955         ENDIF
29956         IF=ID2(L)
29957         XMF=PMAS(IF,1)
29958         IF(L.EQ.1) XMF=3D0
29959         IF(L.EQ.2) XMF=PYRNMT(XMF)
29960         XMF2=XMF**2
29961         ATR=RMSS(ID3(L))
29962         AMQR=RMSS(ID4(L))
29963         IF(AMQR.LT.0D0) THEN
29964           XMQR2=-AMQR**2
29965         ELSE
29966           XMQR2=AMQR**2
29967         ENDIF
29968         AM2(1,1)=XMQL2+XMF2
29969         AM2(2,2)=XMQR2+XMF2
29970         IF(DTERM) THEN
29971           IF(L.EQ.1) THEN
29972             AM2(1,1)=AM2(1,1)-(2D0*XMW2+XMZ2)*COS2B/6D0
29973             AM2(2,2)=AM2(2,2)+(XMW2-XMZ2)*COS2B/3D0
29974             AM2(1,2)=XMF*(ATR+XMU*TANB)
29975           ELSEIF(L.EQ.2) THEN
29976             AM2(1,1)=AM2(1,1)+(4D0*XMW2-XMZ2)*COS2B/6D0
29977             AM2(2,2)=AM2(2,2)-(XMW2-XMZ2)*COS2B*2D0/3D0
29978             AM2(1,2)=XMF*(ATR+XMU/TANB)
29979           ELSEIF(L.EQ.3) THEN
29980             IF(IMSS(8).EQ.1) THEN
29981               AM2(1,1)=RMSS(6)**2
29982               AM2(2,2)=RMSS(7)**2
29983               AM2(1,2)=0D0
29984               RMSS(13)=RMSS(6)
29985               RMSS(14)=RMSS(7)
29986             ELSE
29987               AM2(1,2)=XMF*(ATR+XMU*TANB)
29988             ENDIF
29989           ENDIF
29990         ENDIF
29991         AM2(2,1)=AM2(1,2)
29992         DETM=AM2(1,1)*AM2(2,2)-AM2(2,1)**2
29993         IF(DETM.LT.0D0) THEN
29994           WRITE(MSTU(11),*) ID1(L),DETM
29995           CALL PYERRM(30,' NEGATIVE**2 MASS FOR SFERMION ')
29996         ENDIF
29997         SAME=0.5D0*(AM2(1,1)+AM2(2,2))
29998         DIFF=0.5D0*SQRT((AM2(1,1)-AM2(2,2))**2+4D0*AM2(1,2)*AM2(2,1))
29999         XMF12=SAME-DIFF
30000         XMF22=SAME+DIFF
30001         IT=0
30002         IF(XMF22-XMF12.GT.0D0) THEN
30003           RT(1,1) = SQRT(MAX(0D0,(XMF22-AM2(1,1))/(XMF22-XMF12)))
30004           RT(2,2) = RT(1,1)
30005           RT(1,2) = -SIGN(SQRT(MAX(0D0,1D0-RT(1,1)**2)),
30006      &    AM2(1,2)/(XMF22-XMF12))
30007           RT(2,1) = -RT(1,2)
30008         ELSE
30009           RT(1,1) = 1D0
30010           RT(2,2) = RT(1,1)
30011           RT(1,2) = 0D0
30012           RT(2,1) = -RT(1,2)
30013         ENDIF
30014   100   CONTINUE
30015         IT=IT+1
30016  
30017         DO 140 I=1,2
30018           DO 130 JJ=1,2
30019             DI(I,JJ)=0D0
30020             DO 120 II=1,2
30021               DO 110 J=1,2
30022                 DI(I,JJ)=DI(I,JJ)+RT(I,J)*AM2(J,II)*RT(JJ,II)
30023   110         CONTINUE
30024   120       CONTINUE
30025   130     CONTINUE
30026   140   CONTINUE
30027  
30028         IF(DI(1,1).GT.DI(2,2)) THEN
30029           WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION '
30030           WRITE(MSTU(11),*) L,SQRT(XMF12),SQRT(XMF22)
30031           WRITE(MSTU(11),*) AM2
30032           WRITE(MSTU(11),*) DI
30033           WRITE(MSTU(11),*) RT
30034           DI(1,1)=-RT(2,1)
30035           DI(2,2)=RT(1,2)
30036           DI(1,2)=-RT(2,2)
30037           DI(2,1)=RT(1,1)
30038           DO 160 I=1,2
30039             DO 150 J=1,2
30040               RT(I,J)=DI(I,J)
30041   150       CONTINUE
30042   160     CONTINUE
30043           GOTO 100
30044         ELSEIF(ABS(DI(1,2)*DI(2,1)/DI(1,1)/DI(2,2)).GT.SMALL) THEN
30045           WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION,'//
30046      &    ' OFF DIAGONAL ELEMENTS '
30047           WRITE(MSTU(11),*) 'MASSES = ',L,SQRT(XMF12),SQRT(XMF22)
30048           WRITE(MSTU(11),*) DI
30049           WRITE(MSTU(11),*) ' ROTATION = ',RT
30050 C...STOP
30051         ELSEIF(DI(1,1).LT.0D0.OR.DI(2,2).LT.0D0) THEN
30052           WRITE(MSTU(11),*) ' ERROR IN DIAGONALIZATION,'//
30053      &    ' NEGATIVE MASSES '
30054           STOP
30055         ENDIF
30056         PMAS(PYCOMP(KSUSY1+IF),1)=SQRT(XMF12)
30057         PMAS(PYCOMP(KSUSY2+IF),1)=SQRT(XMF22)
30058         SFMIX(IF,1)=RT(1,1)
30059         SFMIX(IF,2)=RT(1,2)
30060         SFMIX(IF,3)=RT(2,1)
30061         SFMIX(IF,4)=RT(2,2)
30062   170 CONTINUE
30063  
30064       RETURN
30065       END
30066  
30067 C*********************************************************************
30068  
30069 C...PYINOM
30070 C...Finds the mass eigenstates and mixing matrices for neutralinos
30071 C...and charginos.
30072  
30073       SUBROUTINE PYINOM
30074  
30075 C...Double precision and integer declarations.
30076       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30077       IMPLICIT INTEGER(I-N)
30078       INTEGER PYK,PYCHGE,PYCOMP
30079 C...Parameter statement to help give large particle numbers.
30080       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
30081 C...Commonblocks.
30082       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
30083       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
30084       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
30085       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
30086      &SFMIX(16,4)
30087       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
30088  
30089 C...Local variables.
30090       DOUBLE PRECISION XMW,XMZ
30091       DOUBLE PRECISION AR(4,4),WR(4),ZR(4,4)
30092       DOUBLE PRECISION ZP(4,4)
30093       DOUBLE PRECISION DETX,XI(2,2)
30094       DOUBLE PRECISION XXX,YYY,XMH,XML
30095       DOUBLE PRECISION COSW,SINW
30096       DOUBLE PRECISION XMU
30097       DOUBLE PRECISION TERMB,TERMC,DISCR,XMH2,XML2
30098       DOUBLE PRECISION TANB,AL,BE,COSA,COSB,SINA,SINB,XW
30099       DOUBLE PRECISION XM1,XM2,XM3,BETA
30100       DOUBLE PRECISION Q2,AEM,A1,A2,A3,AQ,RM1,RM2
30101       DOUBLE PRECISION ARG,X0,X1,AX0,AX1,AT,BT
30102       DOUBLE PRECISION Y0,Y1,AMGX0,AM1X0,AMGX1,AM1X1
30103       DOUBLE PRECISION ARGX0,AR1X0,ARGX1,AR1X1
30104       DOUBLE PRECISION PYALPS,PYALEM
30105       DOUBLE PRECISION PYRNM3
30106       INTEGER IERR,INDEX(4),I,J,K,L,IOPT,ILR,KFNCHI(4)
30107       DATA KFNCHI/1000022,1000023,1000025,1000035/
30108  
30109       IOPT=IMSS(2)
30110       IF(IMSS(1).EQ.2) THEN
30111         IOPT=1
30112       ENDIF
30113 C...M1, M2, AND M3 ARE INDEPENDENT
30114       IF(IOPT.EQ.0) THEN
30115         XM1=RMSS(1)
30116         XM2=RMSS(2)
30117         XM3=RMSS(3)
30118       ELSEIF(IOPT.GE.1) THEN
30119         Q2=PMAS(23,1)**2
30120         AEM=PYALEM(Q2)
30121         A2=AEM/PARU(102)
30122         A1=AEM/(1D0-PARU(102))
30123         XM1=RMSS(1)
30124         XM2=RMSS(2)
30125         IF(IMSS(1).EQ.2) XM1=RMSS(1)/RMSS(20)*A1*5D0/3D0
30126         IF(IOPT.EQ.1) THEN
30127           XM2=XM1*A2/A1*3D0/5D0
30128           RMSS(2)=XM2
30129         ELSEIF(IOPT.EQ.3) THEN
30130           XM1=XM2*5D0/3D0*A1/A2
30131           RMSS(1)=XM1
30132         ENDIF
30133         XM3=PYRNM3(XM2/A2)
30134         RMSS(3)=XM3
30135         IF(XM3.LE.0D0) THEN
30136           WRITE(MSTU(11),*) ' ERROR WITH M3 = ',XM3
30137           STOP
30138         ENDIF
30139       ENDIF
30140  
30141 C...GLUINO MASS
30142       IF(IMSS(3).EQ.1) THEN
30143         PMAS(PYCOMP(KSUSY1+21),1)=XM3
30144       ELSE
30145         AQ=0D0
30146         DO 110 I=1,4
30147           DO 100 ILR=1,2
30148             RM1=PMAS(PYCOMP(ILR*KSUSY1+I),1)**2/XM3**2
30149             AQ=AQ+0.5D0*((2D0-RM1)*(RM1*LOG(RM1)-1D0)
30150      &      +(1D0-RM1)**2*LOG(ABS(1D0-RM1)))
30151   100     CONTINUE
30152   110   CONTINUE
30153  
30154         DO 130 I=5,6
30155           DO 120 ILR=1,2
30156             RM1=PMAS(PYCOMP(ILR*KSUSY1+I),1)**2/XM3**2
30157             RM2=PMAS(I,1)**2/XM3**2
30158             ARG=(RM1-RM2-1D0)**2-4D0*RM2**2
30159             IF(ARG.GE.0D0) THEN
30160               X0=0.5D0*(1D0+RM2-RM1-SQRT(ARG))
30161               AX0=ABS(X0)
30162               X1=0.5D0*(1D0+RM2-RM1+SQRT(ARG))
30163               AX1=ABS(X1)
30164               IF(X0.EQ.1D0) THEN
30165                 AT=-1D0
30166                 BT=0.25D0
30167               ELSEIF(X0.EQ.0D0) THEN
30168                 AT=0D0
30169                 BT=-0.25D0
30170               ELSE
30171                 AT=0.5D0*LOG(ABS(1D0-X0))*(1D0-X0**2)+
30172      &          0.5D0*X0**2*LOG(AX0)
30173                 BT=(-1D0-2D0*X0)/4D0
30174               ENDIF
30175               IF(X1.EQ.1D0) THEN
30176                 AT=-1D0+AT
30177                 BT=0.25D0+BT
30178               ELSEIF(X1.EQ.0D0) THEN
30179                 AT=0D0+AT
30180                 BT=-0.25D0+BT
30181               ELSE
30182                 AT=0.5D0*LOG(ABS(1D0-X1))*(1D0-X1**2)+0.5D0*
30183      &          X1**2*LOG(AX1)+AT
30184                 BT=(-1D0-2D0*X1)/4D0+BT
30185               ENDIF
30186               AQ=AQ+AT+BT
30187             ELSE
30188               X0=0.5D0*(1D0+RM2-RM1)
30189               Y0=-0.5D0*SQRT(-ARG)
30190               AMGX0=SQRT(X0**2+Y0**2)
30191               AM1X0=SQRT((1D0-X0)**2+Y0**2)
30192               ARGX0=ATAN2(-X0,-Y0)
30193               AR1X0=ATAN2(1D0-X0,Y0)
30194               X1=X0
30195               Y1=-Y0
30196               AMGX1=AMGX0
30197               AM1X1=AM1X0
30198               ARGX1=ATAN2(-X1,-Y1)
30199               AR1X1=ATAN2(1D0-X1,Y1)
30200               AT=0.5D0*LOG(AM1X0)*(1D0-X0**2+3D0*Y0**2)
30201      &        +0.5D0*(X0**2-Y0**2)*LOG(AMGX0)
30202               BT=(-1D0-2D0*X0)/4D0+X0*Y0*( AR1X0-ARGX0 )
30203               AT=AT+0.5D0*LOG(AM1X1)*(1D0-X1**2+3D0*Y1**2)
30204      &        +0.5D0*(X1**2-Y1**2)*LOG(AMGX1)
30205               BT=BT+(-1D0-2D0*X1)/4D0+X1*Y1*( AR1X1-ARGX1 )
30206               AQ=AQ+AT+BT
30207             ENDIF
30208   120     CONTINUE
30209   130   CONTINUE
30210         PMAS(PYCOMP(KSUSY1+21),1)=XM3*(1D0+PYALPS(XM3**2)/(2D0*PARU(2))*
30211      &  (15D0+AQ))
30212       ENDIF
30213  
30214 C...NEUTRALINO MASSES
30215       XMZ=PMAS(23,1)
30216       XMW=PMAS(24,1)
30217       XMU=RMSS(4)
30218       SINW=SQRT(PARU(102))
30219       COSW=SQRT(1D0-PARU(102))
30220       TANB=RMSS(5)
30221       BETA=ATAN(TANB)
30222       COSB=COS(BETA)
30223       SINB=TANB*COSB
30224       AR(1,1) = XM1
30225       AR(2,2) = XM2
30226       AR(3,3) = 0D0
30227       AR(4,4) = 0D0
30228       AR(1,2) = 0D0
30229       AR(2,1) = 0D0
30230       AR(1,3) = -XMZ*SINW*COSB
30231       AR(3,1) = AR(1,3)
30232       AR(1,4) = XMZ*SINW*SINB
30233       AR(4,1) = AR(1,4)
30234       AR(2,3) = XMZ*COSW*COSB
30235       AR(3,2) = AR(2,3)
30236       AR(2,4) = -XMZ*COSW*SINB
30237       AR(4,2) = AR(2,4)
30238       AR(3,4) = -XMU
30239       AR(4,3) = -XMU
30240       CALL PYEIG4(AR,WR,ZR)
30241       DO 150 I=1,4
30242         SMZ(I)=WR(I)
30243         PMAS(PYCOMP(KFNCHI(I)),1)=ABS(SMZ(I))
30244         DO 140 J=1,4
30245           ZMIX(I,J)=ZR(I,J)
30246           IF(ABS(ZMIX(I,J)).LT.1D-6) ZMIX(I,J)=0D0
30247   140   CONTINUE
30248   150 CONTINUE
30249  
30250 C...CHARGINO MASSES
30251       AR(1,1) = XM2
30252       AR(2,2) = XMU
30253       AR(1,2) = SQRT(2D0)*XMW*SINB
30254       AR(2,1) = SQRT(2D0)*XMW*COSB
30255       TERMB=AR(1,1)**2+AR(2,2)**2+AR(1,2)**2+AR(2,1)**2
30256       TERMC=(AR(1,1)**2-AR(2,2)**2)**2+(AR(1,2)**2-AR(2,1)**2)**2
30257       TERMC=TERMC+2D0*(AR(1,1)**2+AR(2,2)**2)*
30258      &(AR(1,2)**2+AR(2,1)**2)+
30259      &8D0*AR(1,1)*AR(2,2)*AR(1,2)*AR(2,1)
30260       DISCR=TERMC
30261       IF(DISCR.LT.0D0) THEN
30262         WRITE(MSTU(11),*) ' PROBLEM WITH DISCR '
30263       ELSE
30264         DISCR=SQRT(DISCR)
30265       ENDIF
30266       XML2=0.5D0*(TERMB-DISCR)
30267       XMH2=0.5D0*(TERMB+DISCR)
30268       XML=SQRT(XML2)
30269       XMH=SQRT(XMH2)
30270       PMAS(PYCOMP(KSUSY1+24),1)=XML
30271       PMAS(PYCOMP(KSUSY1+37),1)=XMH
30272       SMW(1)=XML
30273       SMW(2)=XMH
30274       XXX=AR(1,1)**2+AR(2,1)**2
30275       YYY=AR(1,1)*AR(1,2)+AR(2,2)*AR(2,1)
30276       VMIX(2,2) = YYY/SQRT(YYY**2+(XML2-XXX)**2)
30277       VMIX(1,1) = SIGN(VMIX(2,2),AR(1,1)*AR(2,2)-0.5D0*AR(1,2)**2)
30278       VMIX(2,1) = -(XML2-XXX)/SQRT(YYY**2+(XML2-XXX)**2)
30279       VMIX(1,2) = -SIGN(VMIX(2,1),AR(1,1)*AR(2,2)-0.5D0*AR(1,2)**2)
30280       ZR(1,1) = XML
30281       ZR(1,2) = 0D0
30282       ZR(2,1) = 0D0
30283       ZR(2,2) = XMH
30284       DETX = AR(1,1)*AR(2,2)-AR(1,2)*AR(2,1)
30285       XI(1,1) = AR(2,2)/DETX
30286       XI(2,2) = AR(1,1)/DETX
30287       XI(1,2) = -AR(1,2)/DETX
30288       XI(2,1) = -AR(2,1)/DETX
30289       DO 190 I=1,2
30290         DO 180 J=1,2
30291           UMIX(I,J)=0D0
30292           DO 170 K=1,2
30293             DO 160 L=1,2
30294               UMIX(I,J)=UMIX(I,J)+ZR(I,K)*VMIX(K,L)*XI(L,J)
30295   160       CONTINUE
30296   170     CONTINUE
30297   180   CONTINUE
30298   190 CONTINUE
30299  
30300       RETURN
30301       END
30302  
30303  
30304  
30305 C*********************************************************************
30306  
30307 C...PYRNM3
30308 C...Calculates the running of M3, the SU(3) gluino mass parameter.
30309  
30310       FUNCTION PYRNM3(RGUT)
30311  
30312 C...Double precision and integer declarations.
30313       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30314       IMPLICIT INTEGER(I-N)
30315       INTEGER PYK,PYCHGE,PYCOMP
30316  
30317 C...Local variables.
30318       DOUBLE PRECISION PI,R
30319       DOUBLE PRECISION TOL
30320       EXTERNAL PYALPS
30321       DOUBLE PRECISION PYALPS
30322       DATA TOL/0.001D0/
30323       DATA PI,R/3.141592654D0,0.61803399D0/
30324  
30325       C=1D0-R
30326  
30327       BX=RGUT*PYALPS(RGUT**2)
30328       AX=MIN(50D0,BX*0.5D0)
30329       CX=MAX(2000D0,2D0*BX)
30330  
30331       X0=AX
30332       X3=CX
30333       IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
30334         X1=BX
30335         X2=BX+C*(CX-BX)
30336       ELSE
30337         X2=BX
30338         X1=BX-C*(BX-AX)
30339       ENDIF
30340       AS1=PYALPS(X1**2)
30341       F1=ABS(X1-RGUT*AS1)
30342       AS2=PYALPS(X2**2)
30343       F2=ABS(X2-RGUT*AS2)
30344   100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2))) THEN
30345         IF(F2.LT.F1) THEN
30346           X0=X1
30347           X1=X2
30348           X2=R*X1+C*X3
30349           F1=F2
30350           AS2=PYALPS(X2**2)
30351           F2=ABS(X2-RGUT*AS2)
30352         ELSE
30353           X3=X2
30354           X2=X1
30355           X1=R*X2+C*X0
30356           F2=F1
30357           AS1=PYALPS(X1**2)
30358           F1=ABS(X1-RGUT*AS1)
30359         ENDIF
30360         GOTO 100
30361       ENDIF
30362       IF(F1.LT.F2) THEN
30363         PYRNM3=X1
30364         XMIN=X1
30365       ELSE
30366         PYRNM3=X2
30367         XMIN=X2
30368       ENDIF
30369  
30370       RETURN
30371       END
30372  
30373 C*********************************************************************
30374  
30375 C...PYEIG4
30376 C...Finds eigenvalues and eigenvectors to a 4 * 4 matrix.
30377 C...Specific application: mixing in neutralino sector.
30378  
30379       SUBROUTINE PYEIG4(A,W,Z)
30380 
30381 C...Double precision and integer declarations.
30382       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30383       IMPLICIT INTEGER(I-N)
30384       INTEGER PYK,PYCHGE,PYCOMP
30385  
30386 C...Arrays: in call and local.
30387       DIMENSION A(4,4),W(4),Z(4,4),X(4),D(4,4),E(4)
30388  
30389 C...Coefficients of fourth-degree equation from matrix.
30390 C...x**4 + b3 * x**3 + b2 * x**2 + b1 * x + b0 = 0.
30391       B3=-(A(1,1)+A(2,2)+A(3,3)+A(4,4))
30392       B2=0D0
30393       DO 110 I=1,3
30394         DO 100 J=I+1,4
30395           B2=B2+A(I,I)*A(J,J)-A(I,J)*A(J,I)
30396   100   CONTINUE
30397   110 CONTINUE
30398       B1=0D0
30399       B0=0D0
30400       DO 120 I=1,4
30401         I1=MOD(I,4)+1
30402         I2=MOD(I+1,4)+1
30403         I3=MOD(I+2,4)+1
30404         B1=B1+A(I,I)*(-A(I1,I1)*A(I2,I2)+A(I1,I2)*A(I2,I1)+
30405      &  A(I1,I3)*A(I3,I1)+A(I2,I3)*A(I3,I2))-
30406      &  A(I,I1)*A(I1,I2)*A(I2,I)-A(I,I2)*A(I2,I1)*A(I1,I)
30407         B0=B0+(-1D0)**(I+1)*A(1,I)*(
30408      &  A(2,I1)*(A(3,I2)*A(4,I3)-A(3,I3)*A(4,I2))+
30409      &  A(2,I2)*(A(3,I3)*A(4,I1)-A(3,I1)*A(4,I3))+
30410      &  A(2,I3)*(A(3,I1)*A(4,I2)-A(3,I2)*A(4,I1)))
30411   120 CONTINUE
30412  
30413 C...Coefficients of third-degree equation needed for
30414 C...separation into two second-degree equations.
30415 C...u**3 + c2 * u**2 + c1 * u + c0 = 0.
30416       C2=-B2
30417       C1=B1*B3-4D0*B0
30418       C0=-B1**2-B0*B3**2+4D0*B0*B2
30419       CQ=C1/3D0-C2**2/9D0
30420       CR=C1*C2/6D0-C0/2D0-C2**3/27D0
30421       CQR=CQ**3+CR**2
30422  
30423 C...Cases with one or three real roots.
30424       IF(CQR.GE.0D0) THEN
30425         S1=(CR+SQRT(CQR))**(1D0/3D0)
30426         S2=(CR-SQRT(CQR))**(1D0/3D0)
30427         U=S1+S2-C2/3D0
30428       ELSE
30429         SABS=SQRT(-CQ)
30430         THE=ACOS(CR/SABS**3)/3D0
30431         SRE=SABS*COS(THE)
30432         U=2D0*SRE-C2/3D0
30433       ENDIF
30434  
30435 C...Find and solve two second-degree equations.
30436       P1=B3/2D0-SQRT(B3**2/4D0+U-B2)
30437       P2=B3/2D0+SQRT(B3**2/4D0+U-B2)
30438       Q1=U/2D0+SQRT(U**2/4D0-B0)
30439       Q2=U/2D0-SQRT(U**2/4D0-B0)
30440       IF(ABS(P1*Q1+P2*Q2-B1).LT.ABS(P1*Q2+P2*Q1-B1)) THEN
30441         QSAV=Q1
30442         Q1=Q2
30443         Q2=QSAV
30444       ENDIF
30445       X(1)=-P1/2D0+SQRT(P1**2/4D0-Q1)
30446       X(2)=-P1/2D0-SQRT(P1**2/4D0-Q1)
30447       X(3)=-P2/2D0+SQRT(P2**2/4D0-Q2)
30448       X(4)=-P2/2D0-SQRT(P2**2/4D0-Q2)
30449  
30450 C...Order eigenvalues in asceding mass.
30451       W(1)=X(1)
30452       DO 150 I1=2,4
30453         DO 130 I2=I1-1,1,-1
30454           IF(ABS(X(I1)).GE.ABS(W(I2))) GOTO 140
30455           W(I2+1)=W(I2)
30456   130   CONTINUE
30457   140   W(I2+1)=X(I1)
30458   150 CONTINUE
30459  
30460 C...Find equation system for eigenvectors.
30461       DO 250 I=1,4
30462         DO 170 J1=1,4
30463           D(J1,J1)=A(J1,J1)-W(I)
30464           DO 160 J2=J1+1,4
30465             D(J1,J2)=A(J1,J2)
30466             D(J2,J1)=A(J2,J1)
30467   160     CONTINUE
30468   170   CONTINUE
30469  
30470 C...Find largest element in matrix.
30471         DAMAX=0D0
30472         DO 190 J1=1,4
30473           DO 180 J2=1,4
30474             IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 180
30475             JA=J1
30476             JB=J2
30477             DAMAX=ABS(D(J1,J2))
30478   180     CONTINUE
30479   190   CONTINUE
30480  
30481 C...Subtract others by multiple of row selected above.
30482         DAMAX=0D0
30483         DO 210 J3=JA+1,JA+3
30484           J1=J3-4*((J3-1)/4)
30485           RL=D(J1,JB)/D(JA,JB)
30486           DO 200 J2=1,4
30487             D(J1,J2)=D(J1,J2)-RL*D(JA,J2)
30488             IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 200
30489             JC=J1
30490             JD=J2
30491             DAMAX=ABS(D(J1,J2))
30492   200     CONTINUE
30493   210   CONTINUE
30494  
30495 C...Do one more subtraction of a row.
30496         DAMAX=0D0
30497         DO 230 J3=JC+1,JC+3
30498           J1=J3-4*((J3-1)/4)
30499           IF(J1.EQ.JA) GOTO 230
30500           RL=D(J1,JD)/D(JC,JD)
30501           DO 220 J2=1,4
30502             IF(J2.EQ.JB) GOTO 220
30503             D(J1,J2)=D(J1,J2)-RL*D(JC,J2)
30504             IF(ABS(D(J1,J2)).LE.DAMAX) GOTO 220
30505             JE=J1
30506             DAMAX=ABS(D(J1,J2))
30507   220     CONTINUE
30508   230   CONTINUE
30509  
30510 C...Construct unnormalized eigenvector.
30511         JF1=JD+1-4*(JD/4)
30512         JF2=JD+2-4*((JD+1)/4)
30513         IF(JF1.EQ.JB) JF1=JD+3-4*((JD+2)/4)
30514         IF(JF2.EQ.JB) JF2=JD+3-4*((JD+2)/4)
30515         E(JF1)=-D(JE,JF2)
30516         E(JF2)=D(JE,JF1)
30517         E(JD)=-(D(JC,JF1)*E(JF1)+D(JC,JF2)*E(JF2))/D(JC,JD)
30518         E(JB)=-(D(JA,JF1)*E(JF1)+D(JA,JF2)*E(JF2)+D(JA,JD)*E(JD))/
30519      &  D(JA,JB)
30520  
30521 C...Normalize and fill in final array.
30522         EA=SQRT(E(1)**2+E(2)**2+E(3)**2+E(4)**2)
30523         SGN=(-1D0)**INT(PYR(0)+0.5D0)
30524         DO 240 J=1,4
30525           Z(I,J)=SGN*E(J)/EA
30526   240   CONTINUE
30527   250 CONTINUE
30528  
30529       RETURN
30530       END
30531  
30532 C*********************************************************************
30533  
30534 C...PYHGGM
30535 C...Determines the Higgs boson mass spectrum using several inputs.
30536  
30537       SUBROUTINE PYHGGM(ALPHA)
30538  
30539 C...Double precision and integer declarations.
30540       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30541       IMPLICIT INTEGER(I-N)
30542       INTEGER PYK,PYCHGE,PYCOMP
30543 C...Parameter statement to help give large particle numbers.
30544       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
30545 C...Commonblocks.
30546       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
30547       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
30548       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
30549       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
30550       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYMSSM/
30551  
30552 C...Local variables.
30553       DOUBLE PRECISION AT,AB,XMU,TANB,XM32,XMT2
30554       DOUBLE PRECISION ALPHA
30555       INTEGER I,J,IHOPT,II,JJ,IT
30556       DOUBLE PRECISION DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD
30557       DOUBLE PRECISION DMU,DMH,DHM,DMHCH,DSA,DCA,DTANBA
30558       DOUBLE PRECISION DMC,DMDR,DMHP,DHMP,DAMP
30559       DOUBLE PRECISION DSTOP1,DSTOP2,DSBOT1,DSBOT2
30560  
30561       IHOPT=IMSS(4)
30562       IF(IHOPT.EQ.2) THEN
30563         ALPHA=RMSS(18)
30564         RETURN
30565       ENDIF
30566       AT=RMSS(16)
30567       AB=RMSS(15)
30568       XMU=RMSS(4)
30569       TANB=RMSS(5)
30570  
30571       DMA=RMSS(19)
30572       DTANB=TANB
30573       DMQ=RMSS(10)
30574       DMUR=RMSS(12)
30575       DMDR=RMSS(11)
30576       DMTOP=PMAS(6,1)
30577       DMC=PMAS(PYCOMP(KSUSY1+37),1)
30578       DAU=AT
30579       DAD=AB
30580       DMU=XMU
30581  
30582       IF(IHOPT.EQ.0) THEN
30583         CALL PYSUBH (DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD,DMU,DMH,DHM,
30584      &  DMHCH,DSA,DCA,DTANBA)
30585       ELSEIF(IHOPT.EQ.1) THEN
30586         CALL PYSUBH (DMA,DTANB,DMQ,DMUR,DMTOP,DAU,DAD,DMU,DMH,DHM,
30587      &  DMHCH,DSA,DCA,DTANBA)
30588         CALL PYPOLE(3,DMC,DMA,DTANB,DMQ,DMUR,DMDR,DMTOP,DAU,DAD,DMU,
30589      &  DMH,DMHP,DHM,DHMP,DAMP,DSA,DCA,
30590      &  DSTOP1,DSTOP2,DSBOT1,DSBOT2,DTANBA)
30591         DMH=DMHP
30592         DHM=DHMP
30593         DMA=DAMP
30594         IF(ABS(PMAS(PYCOMP(1000006),1)-DSTOP2).GT.5D-1) THEN
30595          WRITE(MSTU(11),*) ' STOP1 MASS DOES NOT MATCH IN PYHGGM '
30596          WRITE(MSTU(11),*) ' STOP1 MASSES = ',
30597      & PMAS(PYCOMP(1000006),1),DSTOP2
30598         ENDIF
30599         IF(ABS(PMAS(PYCOMP(2000006),1)-DSTOP1).GT.5D-1) THEN
30600          WRITE(MSTU(11),*) ' STOP2 MASS DOES NOT MATCH IN PYHGGM '
30601          WRITE(MSTU(11),*) ' STOP2 MASSES = ',
30602      & PMAS(PYCOMP(2000006),1),DSTOP1
30603         ENDIF
30604         IF(ABS(PMAS(PYCOMP(1000005),1)-DSBOT2).GT.5D-1) THEN
30605          WRITE(MSTU(11),*) ' SBOT1 MASS DOES NOT MATCH IN PYHGGM '
30606          WRITE(MSTU(11),*) ' SBOT1 MASSES = ',
30607      & PMAS(PYCOMP(1000005),1),DSBOT2
30608         ENDIF
30609         IF(ABS(PMAS(PYCOMP(2000005),1)-DSBOT1).GT.5D-1) THEN
30610          WRITE(MSTU(11),*) ' SBOT2 MASS DOES NOT MATCH IN PYHGGM '
30611          WRITE(MSTU(11),*) ' SBOT2 MASSES = ',
30612      & PMAS(PYCOMP(2000005),1),DSBOT1
30613         ENDIF
30614  
30615       ENDIF
30616  
30617       ALPHA=ACOS(DCA)
30618  
30619       PMAS(25,1)=DMH
30620       PMAS(35,1)=DHM
30621       PMAS(36,1)=DMA
30622       PMAS(37,1)=DMHCH
30623  
30624       RETURN
30625       END
30626  
30627 C*********************************************************************
30628  
30629 C...PYSUBH
30630 C...This routine computes the renormalization group improved
30631 C...values of Higgs masses and couplings in the MSSM.
30632  
30633 C...Program based on the work by M. Carena, J.R. Espinosa,
30634 c...M. Quiros and C.E.M. Wagner, CERN-preprint CERN-TH/95-45
30635  
30636 C...Input: MA,TANB = TAN(BETA),MQ,MUR,MTOP,AU,AD,MU
30637 C...All masses in GeV units. MA is the CP-odd Higgs mass,
30638 C...MTOP is the physical top mass, MQ and MUR are the soft
30639 C...supersymmetry breaking mass parameters of left handed
30640 C...and right handed stops respectively, AU and AD are the
30641 C...stop and sbottom trilinear soft breaking terms,
30642 C...respectively,  and MU is the supersymmetric
30643 C...Higgs mass parameter. We use the  conventions from
30644 C...the physics report of Haber and Kane: left right
30645 C...stop mixing term proportional to (AU - MU/TANB)
30646 C...We use as input TANB defined at the scale MTOP
30647  
30648 C...Output: MH,HM,MHCH, SA = SIN(ALPHA), CA= COS(ALPHA), TANBA
30649 C...where MH and HM are the lightest and heaviest CP-even
30650 C...Higgs masses, MHCH is the charged Higgs mass and
30651 C...ALPHA is the Higgs mixing angle
30652 C...TANBA is the angle TANB at the CP-odd Higgs mass scale
30653  
30654 C...Range of validity:
30655 C...(STOP1**2 - STOP2**2)/(STOP2**2 + STOP1**2) < 0.5
30656 C...(SBOT1**2 - SBOT2**2)/(SBOT2**2 + SBOT2**2) < 0.5
30657 C...where STOP1, STOP2, SBOT1 and SBOT2 are the stop and
30658 C...are the sbottom  mass eigenvalues, respectively. This
30659 C...range automatically excludes the existence of tachyons.
30660 C...For the charged Higgs mass computation, the method is
30661 C...valid if
30662 C...2 * |MB * AD* TANB|  < M_SUSY**2,  2 * |MTOP * AU| < M_SUSY**2
30663 C...2 * |MB * MU * TANB| < M_SUSY**2,  2 * |MTOP * MU| < M_SUSY**2
30664 C...where M_SUSY**2 is the average of the squared stop mass
30665 C...eigenvalues, M_SUSY**2 = (STOP1**2 + STOP2**2)/2. The sbottom
30666 C...masses have been assumed to be of order of the stop ones
30667 C...M_SUSY**2 = (MQ**2 + MUR**2)*0.5 + MTOP**2
30668  
30669       SUBROUTINE PYSUBH (XMA,TANB,XMQ,XMUR,XMTOP,AU,AD,XMU,XMH,XHM,
30670      &XMHCH,SA,CA,TANBA)
30671  
30672 C...Double precision and integer declarations.
30673       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30674       IMPLICIT INTEGER(I-N)
30675       INTEGER PYK,PYCHGE,PYCOMP
30676 C...Parameter statement to help give large particle numbers.
30677       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
30678 C...Commonblocks.
30679       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
30680       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
30681       COMMON/PYHTRI/HHH(7)
30682       SAVE /PYDAT1/,/PYDAT2/
30683  
30684 C...Local variables.
30685       DOUBLE PRECISION PYALEM,PYALPS
30686       DOUBLE PRECISION TANB,XMQ,XMUR,XMTOP,AU,AD,XMU,XMH,XHM
30687       DOUBLE PRECISION XMHCH,SA,CA
30688       DOUBLE PRECISION XMA,AEM,ALP1,ALP2,ALPH3Z,V,PI
30689       DOUBLE PRECISION Q02
30690       DOUBLE PRECISION TANBA,TANBT,XMB,ALP3
30691       DOUBLE PRECISION RMTOP,XMS,T,SINB,COSB
30692       DOUBLE PRECISION XLAM1,XLAM2,XLAM3,XLAM4,XLAM5,XLAM6
30693       DOUBLE PRECISION XLAM7,XAU,XAD,G1,G2,G3,HU,HD,HU2
30694       DOUBLE PRECISION HD2,HU4,HD4,SINBT,COSBT
30695       DOUBLE PRECISION TRM2,DETM2,XMH2,XHM2,XMHCH2
30696       DOUBLE PRECISION SINALP,COSALP,AUD,PI2,XMS2,XMS4,AD2
30697       DOUBLE PRECISION COS2BT,AU2,XMU2,XMZ,XMS3
30698  
30699       XMZ = PMAS(23,1)
30700       Q02=XMZ**2
30701       AEM=PYALEM(Q02)
30702       ALP1=AEM/(1D0-PARU(102))
30703       ALP2=AEM/PARU(102)
30704       ALPH3Z=PYALPS(Q02)
30705  
30706       ALP1 = 0.0101D0
30707       ALP2 = 0.0337D0
30708       ALPH3Z = 0.12D0
30709  
30710       V = 174.1D0
30711       PI = PARU(1)
30712       TANBA = TANB
30713       TANBT = TANB
30714  
30715 C...MBOTTOM(MTOP) = 3. GEV
30716       XMB = 3D0
30717       ALP3 = ALPH3Z/(1D0 +(11D0 - 10D0/3D0)/4D0/PI*ALPH3Z*
30718      &LOG(XMTOP**2/XMZ**2))
30719  
30720 C...RMTOP= RUNNING TOP QUARK MASS
30721       RMTOP = XMTOP/(1D0+4D0*ALP3/3D0/PI)
30722       XMS = ((XMQ**2 + XMUR**2)/2D0 + XMTOP**2)**0.5D0
30723       T = LOG(XMS**2/XMTOP**2)
30724       SINB = TANB/((1D0 + TANB**2)**0.5D0)
30725       COSB = SINB/TANB
30726 C...IF(MA.LE.XMTOP) TANBA = TANBT
30727       IF(XMA.GT.XMTOP)
30728      &TANBA = TANBT*(1D0-3D0/32D0/PI**2*
30729      &(RMTOP**2/V**2/SINB**2-XMB**2/V**2/COSB**2)*
30730      &LOG(XMA**2/XMTOP**2))
30731  
30732       SINBT = TANBT/SQRT(1D0 + TANBT**2)
30733       COSBT = 1D0/SQRT(1D0 + TANBT**2)
30734       COS2BT = (TANBT**2 - 1D0)/(TANBT**2 + 1D0)
30735       G1 = SQRT(ALP1*4D0*PI)
30736       G2 = SQRT(ALP2*4D0*PI)
30737       G3 = SQRT(ALP3*4D0*PI)
30738       HU = RMTOP/V/SINBT
30739       HD =  XMB/V/COSBT
30740       HU2=HU*HU
30741       HD2=HD*HD
30742       HU4=HU2*HU2
30743       HD4=HD2*HD2
30744       AU2=AU**2
30745       AD2=AD**2
30746       XMS2=XMS**2
30747       XMS3=XMS**3
30748       XMS4=XMS2*XMS2
30749       XMU2=XMU*XMU
30750       PI2=PI*PI
30751  
30752       XAU = (2D0*AU2/XMS2)*(1D0 - AU2/12D0/XMS2)
30753       XAD = (2D0*AD2/XMS2)*(1D0 - AD2/12D0/XMS2)
30754       AUD = (-6D0*XMU2/XMS2 - ( XMU2- AD*AU)**2/XMS4
30755      &+ 3D0*(AU + AD)**2/XMS2)/6D0
30756       XLAM1 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HD2*T/8D0/PI2)
30757      &+(3D0*HD4/8D0/PI2) * (T + XAD/2D0 + (3D0*HD2/2D0 + HU2/2D0
30758      &- 8D0*G3**2) * (XAD*T + T**2)/16D0/PI2)
30759      &-(3D0*HU4* XMU**4/96D0/PI2/XMS4) * (1+ (9D0*HU2 -5D0* HD2
30760      &-  16D0*G3**2) *T/16D0/PI2)
30761       XLAM2 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HU2*T/8D0/PI2)
30762      &+(3D0*HU4/8D0/PI2) * (T + XAU/2D0 + (3D0*HU2/2D0 + HD2/2D0
30763      &- 8D0*G3**2) * (XAU*T + T**2)/16D0/PI2)
30764      &-(3D0*HD4* XMU**4/96D0/PI2/XMS4) * (1+ (9D0*HD2 -5D0* HU2
30765      &-  16D0*G3**2) *T/16D0/PI2)
30766       XLAM3 = ((G2**2 - G1**2)/4D0)*(1D0-3D0*
30767      &(HU2 + HD2)*T/16D0/PI2)
30768      &+(6D0*HU2*HD2/16D0/PI2) * (T + AUD/2D0 + (HU2 + HD2
30769      &- 8D0*G3**2) * (AUD*T + T**2)/16D0/PI2)
30770      &+(3D0*HU4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AU2/
30771      &XMS4)* (1D0+ (6D0*HU2 -2D0* HD2/2D0
30772      &-  16D0*G3**2) *T/16D0/PI2)
30773      &+(3D0*HD4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AD2/
30774      &XMS4)*(1D0+ (6D0*HD2 -2D0* HU2
30775      &-  16D0*G3**2) *T/16D0/PI2)
30776       XLAM4 = (- G2**2/2D0)*(1D0-3D0*(HU2 + HD2)*T/16D0/PI2)
30777      &-(6D0*HU2*HD2/16D0/PI2) * (T + AUD/2D0 + (HU2 + HD2
30778      &- 8D0*G3**2) * (AUD*T + T**2)/16D0/PI2)
30779      &+(3D0*HU4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AU2/
30780      &XMS4)*
30781      &(1+ (6D0*HU2 -2D0* HD2
30782      &-  16D0*G3**2) *T/16D0/PI2)
30783      &+(3D0*HD4/96D0/PI2) * (3D0*XMU2/XMS2 - XMU2*AD2/
30784      &XMS4)*
30785      &(1+ (6D0*HD2 -2D0* HU2/2D0
30786      &-  16D0*G3**2) *T/16D0/PI2)
30787       XLAM5 = -(3D0*HU4* XMU2*AU2/96D0/PI2/XMS4) *
30788      &(1- (2D0*HD2 -6D0* HU2 + 16D0*G3**2) *T/16D0/PI2)
30789      &-(3D0*HD4* XMU2*AD2/96D0/PI2/XMS4) *
30790      &(1- (2D0*HU2 -6D0* HD2 + 16D0*G3**2) *T/16D0/PI2)
30791       XLAM6 = (3D0*HU4* XMU**3*AU/96D0/PI2/XMS4) *
30792      &(1- (7D0*HD2/2D0 -15D0* HU2/2D0 + 16D0*G3**2) *T/16D0/PI2)
30793      &+(3D0*HD4* XMU *(AD**3/XMS3 - 6D0*AD/XMS )/96D0/PI2/XMS) *
30794      &(1- (HU2/2D0 -9D0* HD2/2D0 + 16D0*G3**2) *T/16D0/PI2)
30795       XLAM7 = (3D0*HD4* XMU**3*AD/96D0/PI2/XMS4) *
30796      &(1- (7D0*HU2/2D0 -15D0* HD2/2D0 + 16D0*G3**2) *T/16D0/PI2)
30797      &+(3D0*HU4* XMU *(AU**3/XMS3 - 6D0*AU/XMS )/96D0/PI2/XMS) *
30798      &(1- (HD2/2D0 -9D0* HU2/2D0 + 16D0*G3**2) *T/16D0/PI2)
30799       HHH(1)=XLAM1
30800       HHH(2)=XLAM2
30801       HHH(3)=XLAM3
30802       HHH(4)=XLAM4
30803       HHH(5)=XLAM5
30804       HHH(6)=XLAM6
30805       HHH(7)=XLAM7
30806       TRM2 = XMA**2 + 2D0*V**2* (XLAM1* COSBT**2 +
30807      &2D0* XLAM6*SINBT*COSBT
30808      &+ XLAM5*SINBT**2 + XLAM2* SINBT**2 + 2D0* XLAM7*SINBT*COSBT
30809      &+ XLAM5*COSBT**2)
30810       DETM2 = 4D0*V**4*(-(SINBT*COSBT*(XLAM3 + XLAM4) +
30811      &XLAM6*COSBT**2
30812      &+ XLAM7* SINBT**2)**2 + (XLAM1* COSBT**2 +
30813      &2D0* XLAM6* COSBT*SINBT
30814      &+ XLAM5*SINBT**2)*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
30815      &+ XLAM5*COSBT**2)) + XMA**2*2D0*V**2 *
30816      &((XLAM1* COSBT**2 +2D0*
30817      &XLAM6* COSBT*SINBT + XLAM5*SINBT**2)*COSBT**2 +
30818      &(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT + XLAM5*COSBT**2)
30819      &*SINBT**2
30820      &+2D0*SINBT*COSBT* (SINBT*COSBT*(XLAM3
30821      &+ XLAM4) + XLAM6*COSBT**2
30822      &+ XLAM7* SINBT**2))
30823  
30824       XMH2 = (TRM2 - SQRT(TRM2**2 - 4D0* DETM2))/2D0
30825       XHM2 = (TRM2 + SQRT(TRM2**2 - 4D0* DETM2))/2D0
30826       XHM = SQRT(XHM2)
30827       XMH = SQRT(XMH2)
30828       XMHCH2 = XMA**2 + (XLAM5 - XLAM4)* V**2
30829       XMHCH = SQRT(XMHCH2)
30830  
30831       SINALP = SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0) -
30832      &((2D0*V**2*(XLAM1* COSBT**2 + 2D0*
30833      &XLAM6* COSBT*SINBT
30834      &+ XLAM5*SINBT**2) + XMA**2*SINBT**2)
30835      &- (2D0*V**2*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
30836      &+ XLAM5*COSBT**2) + XMA**2*COSBT**2)))/
30837      &SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0))/2D0**0.5D0
30838  
30839       COSALP = (2D0*(2D0*V**2*(SINBT*COSBT*(XLAM3 + XLAM4) +
30840      &XLAM6*COSBT**2 + XLAM7* SINBT**2) -
30841      &XMA**2*SINBT*COSBT))/2D0**0.5D0/
30842      &SQRT(((TRM2**2 - 4D0* DETM2)**0.5D0)*
30843      &(((TRM2**2 - 4D0* DETM2)**0.5D0) -
30844      &((2D0*V**2*(XLAM1* COSBT**2 + 2D0*
30845      &XLAM6* COSBT*SINBT
30846      &+ XLAM5*SINBT**2) + XMA**2*SINBT**2)
30847      &- (2D0*V**2*(XLAM2* SINBT**2 +2D0* XLAM7* COSBT*SINBT
30848      &+ XLAM5*COSBT**2) + XMA**2*COSBT**2))))
30849  
30850       SA = -SINALP
30851       CA = -COSALP
30852  
30853   100 CONTINUE
30854  
30855       RETURN
30856       END
30857  
30858 C*********************************************************************
30859  
30860 C...PYPOLE
30861 C...This subroutine computes the CP-even higgs and CP-odd pole
30862 c...Higgs masses and mixing angles.
30863  
30864 C...Program based on the work by M. Carena, M. Quiros
30865 C...and C.E.M. Wagner, "Effective potential methods and
30866 C...the Higgs mass spectrum in the MSSM", CERN-TH/95-157
30867  
30868 C...Inputs: IHIGGS(explained below),MCHI,MA,TANB,MQ,MUR,MDR,MTOP,
30869 C...AT,AB,MU
30870 C...where MCHI is the largest chargino mass, MA is the running
30871 C...CP-odd higgs mass, TANB is the value of the ratio of vacuum
30872 C...expectaion values at the scale MTOP, MQ is the third generation
30873 C...left handed squark mass parameter, MUR is the third generation
30874 C...right handed stop mass parameter, MDR is the third generation
30875 C...right handed sbottom mass parameter, MTOP is the pole top quark
30876 C...mass; AT,AB are the soft supersymmetry breaking trilinear
30877 C...couplings of the stop and sbottoms, respectively, and MU is the
30878 C...supersymmetric mass parameter
30879  
30880 C...The parameter IHIGGS=0,1,2,3 corresponds to the
30881 c...number of Higgses whose pole mass is computed
30882 c...by the subroutine PYVACU(...). If IHIGGS=0 only running
30883 c...masses are given, what makes the running of the program
30884 c...much faster and it is quite generally a good approximation
30885 c...(for a theoretical discussion see ref. below).
30886 c...If IHIGGS=1, only the pole
30887 c...mass for H is computed. If IHIGGS=2, then h and H, and
30888 c...if IHIGGS=3, then h,H,A polarizations are computed
30889  
30890 C...Output: MH and MHP which are the lightest CP-even Higgs running
30891 C...and pole masses, respectively; HM and HMP are the heaviest CP-even
30892 C...Higgs running and pole masses, repectively; SA and CA are the
30893 C...SIN(ALPHA) and COS(ALPHA) where ALPHA is the Higgs mixing angle
30894 C...AMP is the CP-odd Higgs pole mass. STOP1,STOP2,SBOT1 and SBOT2
30895 C...are the stop and sbottom mass eigenvalues. Finally, TANBA is
30896 C...the value of TANB at the CP-odd Higgs mass scale
30897  
30898 C...This subroutine makes use of CERN library subroutine
30899 C...integration package, which makes the computation of the
30900 C...pole Higgs masses somewhat faster. We thank P. Janot for this
30901 C...improvement. Those who are not able to call the CERN
30902 C...libraries, please use the subroutine SUBHPOLE2.F, which
30903 C...although somewhat slower, gives identical results
30904  
30905       SUBROUTINE PYPOLE(IHIGGS,XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,XMU,
30906      &XMH,XMHP,HM,HMP,AMP,SA,CA,STOP1,STOP2,SBOT1,SBOT2,TANBA)
30907  
30908 C...Double precision and integer declarations.
30909       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
30910       IMPLICIT INTEGER(I-N)
30911  
30912 C...Parameters.
30913       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
30914       INTEGER PYK,PYCHGE,PYCOMP
30915  
30916 C...Local variables.
30917       DIMENSION DELTA(2,2),COUPT(2,2),T(2,2),SSTOP2(2),
30918      &SSBOT2(2),B(2,2),COUPB(2,2),
30919      &HCOUPT(2,2),HCOUPB(2,2),
30920      &ACOUPT(2,2),ACOUPB(2,2),PR(3), POLAR(3)
30921  
30922       DELTA(1,1) = 1D0
30923       DELTA(2,2) = 1D0
30924       DELTA(1,2) = 0D0
30925       DELTA(2,1) = 0D0
30926       V = 174.1D0
30927       XMZ=91.18D0
30928       PI=3.14159D0
30929       ALP3Z=0.12D0
30930       ALP3=1D0/(1D0/ALP3Z+23D0/6D0/PI*LOG(XMT/XMZ))
30931  
30932 C      RXMT = XMT/(1D0+4*ALP3/3D0/PI)
30933       RXMT = PYRNMT(XMT)
30934  
30935       HT = RXMT /V
30936       CALL PYRGHM(XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,
30937      &XMU,XMH,HM,SA,CA,TANBA)
30938       SINB = TANB/(TANB**2+1D0)**0.5D0
30939       COSB = 1D0/(TANB**2+1D0)**0.5D0
30940       COS2B = SINB**2 - COSB**2
30941       SINBPA = SINB*CA + COSB*SA
30942       COSBPA = COSB*CA - SINB*SA
30943       RMBOT = 3D0
30944       XMQ2 = XMQ**2
30945       XMUR2 = XMUR**2
30946       IF(XMUR.LT.0D0) XMUR2=-XMUR2
30947       XMDR2 = XMDR**2
30948       XMST11 = RXMT**2 + XMQ2  - 0.35D0*XMZ**2*COS2B
30949       XMST22 = RXMT**2 + XMUR2 - 0.15D0*XMZ**2*COS2B
30950       IF(XMST11.LT.0D0) GOTO 500
30951       IF(XMST22.LT.0D0) GOTO 500
30952       XMSB11 = RMBOT**2 + XMQ2  + 0.42D0*XMZ**2*COS2B
30953       XMSB22 = RMBOT**2 + XMDR2 + 0.08D0*XMZ**2*COS2B
30954       IF(XMSB11.LT.0D0) GOTO 500
30955       IF(XMSB22.LT.0D0) GOTO 500
30956       WMST11 = RXMT**2 + XMQ2
30957       WMST22 = RXMT**2 + XMUR2
30958       XMST12 = RXMT*(AT - XMU/TANB)
30959       XMSB12 = RMBOT*(AB - XMU*TANB)
30960  
30961 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
30962 C...STOP EIGENVALUES CALCULATION
30963 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
30964  
30965       STOP12 = 0.5D0*(XMST11+XMST22) +
30966      &0.5D0*((XMST11+XMST22)**2 -
30967      &4D0*(XMST11*XMST22 - XMST12**2))**0.5D0
30968       STOP22 = 0.5D0*(XMST11+XMST22) -
30969      &0.5D0*((XMST11+XMST22)**2 - 4D0*(XMST11*XMST22 -
30970      &XMST12**2))**0.5D0
30971  
30972       IF(STOP22.LT.0D0) GOTO 500
30973       SSTOP2(1) = STOP12
30974       SSTOP2(2) = STOP22
30975       STOP1 = STOP12**0.5D0
30976       STOP2 = STOP22**0.5D0
30977       STOP1W = STOP1
30978       STOP2W = STOP2
30979  
30980       IF(XMST12.EQ.0D0) XST11 = 1D0
30981       IF(XMST12.EQ.0D0) XST12 = 0D0
30982       IF(XMST12.EQ.0D0) XST21 = 0D0
30983       IF(XMST12.EQ.0D0) XST22 = 1D0
30984  
30985       IF(XMST12.EQ.0D0) GOTO 110
30986  
30987   100 XST11 = XMST12/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
30988       XST12 = - (XMST11-STOP12)/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
30989       XST21 = XMST12/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
30990       XST22 = - (XMST11-STOP22)/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
30991  
30992   110 T(1,1) = XST11
30993       T(2,2) = XST22
30994       T(1,2) = XST12
30995       T(2,1) = XST21
30996  
30997       SBOT12 = 0.5D0*(XMSB11+XMSB22) +
30998      &0.5D0*((XMSB11+XMSB22)**2 -
30999      &4D0*(XMSB11*XMSB22 - XMSB12**2))**0.5D0
31000       SBOT22 = 0.5D0*(XMSB11+XMSB22) -
31001      &0.5D0*((XMSB11+XMSB22)**2 - 4D0*(XMSB11*XMSB22 -
31002      &XMSB12**2))**0.5D0
31003       IF(SBOT22.LT.0D0) GOTO 500
31004       SBOT1 = SBOT12**0.5D0
31005       SBOT2 = SBOT22**0.5D0
31006  
31007       SSBOT2(1) = SBOT12
31008       SSBOT2(2) = SBOT22
31009  
31010       IF(XMSB12.EQ.0D0) XSB11 = 1D0
31011       IF(XMSB12.EQ.0D0) XSB12 = 0D0
31012       IF(XMSB12.EQ.0D0) XSB21 = 0D0
31013       IF(XMSB12.EQ.0D0) XSB22 = 1D0
31014  
31015       IF(XMSB12.EQ.0D0) GOTO 130
31016  
31017   120 XSB11 = XMSB12/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
31018       XSB12 = - (XMSB11-SBOT12)/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
31019       XSB21 = XMSB12/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
31020       XSB22 = - (XMSB11-SBOT22)/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
31021  
31022   130 B(1,1) = XSB11
31023       B(2,2) = XSB22
31024       B(1,2) = XSB12
31025       B(2,1) = XSB21
31026  
31027  
31028       SINT = 0.2320D0
31029       SQR = 2D0**0.5D0
31030       VP = 174.1D0*SQR
31031  
31032 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31033 C...STARTING OF LIGHT HIGGS
31034 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31035  
31036       IF(IHIGGS.EQ.0) GOTO 490
31037  
31038       DO 150 I = 1,2
31039         DO 140 J = 1,2
31040           COUPT(I,J) =
31041      &    SINT*XMZ**2*2D0*SQR/174.1D0/3D0*SINBPA*(DELTA(I,J) +
31042      &    (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
31043      &    -RXMT**2/174.1D0**2*VP/SINB*CA*DELTA(I,J)
31044      &    -RXMT/VP/SINB*(AT*CA + XMU*SA)*(T(1,I)*T(2,J) +
31045      &    T(1,J)*T(2,I))
31046   140   CONTINUE
31047   150 CONTINUE
31048  
31049  
31050       DO 170 I = 1,2
31051         DO 160 J = 1,2
31052           COUPB(I,J) =
31053      &    -SINT*XMZ**2*2D0*SQR/174.1D0/6D0*SINBPA*(DELTA(I,J) +
31054      &    (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
31055      &    +RMBOT**2/174.1D0**2*VP/COSB*SA*DELTA(I,J)
31056      &    +RMBOT/VP/COSB*(AB*SA + XMU*CA)*(B(1,I)*B(2,J) +
31057      &    B(1,J)*B(2,I))
31058   160   CONTINUE
31059   170 CONTINUE
31060  
31061       PRUN = XMH
31062       EPS = 1D-4*PRUN
31063       ITER = 0
31064   180 ITER = ITER + 1
31065       DO 230  I3 = 1,3
31066  
31067         PR(I3)=PRUN+(I3-2)*EPS/2
31068         P2=PR(I3)**2
31069         POLT = 0D0
31070         DO 200 I = 1,2
31071           DO 190 J = 1,2
31072             POLT = POLT + COUPT(I,J)**2*3D0*
31073      &      PYFINT(P2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31074   190     CONTINUE
31075   200   CONTINUE
31076         POLB = 0D0
31077         DO 220 I = 1,2
31078           DO 210 J = 1,2
31079             POLB = POLB + COUPB(I,J)**2*3D0*
31080      &      PYFINT(P2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31081   210     CONTINUE
31082   220   CONTINUE
31083         RXMT2 = RXMT**2
31084         XMT2=XMT**2
31085  
31086         POLTT =
31087      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31088      &  CA**2/SINB**2 *
31089      &  (-2D0*XMT**2+0.5D0*P2)*
31090      &  PYFINT(P2,XMT2,XMT2)
31091  
31092         POL = POLT + POLB + POLTT
31093         POLAR(I3) = P2 - XMH**2 - POL
31094   230 CONTINUE
31095       DERIV = (POLAR(3)-POLAR(1))/EPS
31096       DRUN = - POLAR(2)/DERIV
31097       PRUN = PRUN + DRUN
31098       P2 = PRUN**2
31099       IF( ABS(DRUN) .LT. 1D-4 .OR.ITER.GT.100 ) GOTO 240
31100       GOTO 180
31101   240 CONTINUE
31102  
31103       XMHP = P2**0.5D0
31104  
31105 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31106 C...END OF LIGHT HIGGS
31107 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31108  
31109   250 IF(IHIGGS.EQ.1) GOTO 490
31110  
31111 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31112 C... STARTING OF HEAVY HIGGS
31113 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31114  
31115       DO 270 I = 1,2
31116         DO 260 J = 1,2
31117           HCOUPT(I,J) =
31118      &    -SINT*XMZ**2*2D0*SQR/174.1D0/3D0*COSBPA*(DELTA(I,J) +
31119      &    (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
31120      &    -RXMT**2/174.1D0**2*VP/SINB*SA*DELTA(I,J)
31121      &    -RXMT/VP/SINB*(AT*SA - XMU*CA)*(T(1,I)*T(2,J) +
31122      &    T(1,J)*T(2,I))
31123   260   CONTINUE
31124   270 CONTINUE
31125  
31126       DO 290 I = 1,2
31127         DO 280 J = 1,2
31128           HCOUPB(I,J) =
31129      &    SINT*XMZ**2*2D0*SQR/174.1D0/6D0*COSBPA*(DELTA(I,J) +
31130      &    (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
31131      &    -RMBOT**2/174.1D0**2*VP/COSB*CA*DELTA(I,J)
31132      &    -RMBOT/VP/COSB*(AB*CA - XMU*SA)*(B(1,I)*B(2,J) +
31133      &    B(1,J)*B(2,I))
31134           HCOUPB(I,J)=0D0
31135   280   CONTINUE
31136   290 CONTINUE
31137  
31138       PRUN = HM
31139       EPS = 1D-4*PRUN
31140       ITER = 0
31141   300 ITER = ITER + 1
31142       DO 350 I3 = 1,3
31143         PR(I3)=PRUN+(I3-2)*EPS/2
31144         HP2=PR(I3)**2
31145  
31146         HPOLT = 0D0
31147         DO 320 I = 1,2
31148           DO 310 J = 1,2
31149             HPOLT = HPOLT + HCOUPT(I,J)**2*3D0*
31150      &      PYFINT(HP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31151   310     CONTINUE
31152   320   CONTINUE
31153  
31154         HPOLB = 0D0
31155         DO 340 I = 1,2
31156           DO 330 J = 1,2
31157             HPOLB = HPOLB + HCOUPB(I,J)**2*3D0*
31158      &      PYFINT(HP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31159   330     CONTINUE
31160   340   CONTINUE
31161  
31162         RXMT2 = RXMT**2
31163         XMT2  = XMT**2
31164  
31165         HPOLTT =
31166      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31167      &  SA**2/SINB**2 *
31168      &  (-2D0*XMT**2+0.5D0*HP2)*
31169      &  PYFINT(HP2,XMT2,XMT2)
31170  
31171         HPOL = HPOLT + HPOLB + HPOLTT
31172         POLAR(I3) =HP2-HM**2-HPOL
31173   350 CONTINUE
31174       DERIV = (POLAR(3)-POLAR(1))/EPS
31175       DRUN = - POLAR(2)/DERIV
31176       PRUN = PRUN + DRUN
31177       HP2 = PRUN**2
31178       IF( ABS(DRUN) .LT. 1D-4 .OR.ITER.GT.100 ) GOTO 360
31179       GOTO 300
31180   360 CONTINUE
31181  
31182  
31183   370 CONTINUE
31184       HMP = HP2**0.5D0
31185  
31186 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31187 C... END OF HEAVY HIGGS
31188 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31189  
31190       IF(IHIGGS.EQ.2) GOTO 490
31191  
31192 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31193 C...BEGINNING OF PSEUDOSCALAR HIGGS
31194 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31195  
31196       DO 390 I = 1,2
31197         DO 380 J = 1,2
31198           ACOUPT(I,J) =
31199      &    -RXMT/VP/SINB*(AT*COSB + XMU*SINB)*
31200      &    (T(1,I)*T(2,J) -T(1,J)*T(2,I))
31201   380   CONTINUE
31202   390 CONTINUE
31203       DO 410 I = 1,2
31204         DO 400 J = 1,2
31205           ACOUPB(I,J) =
31206      &    RMBOT/VP/COSB*(AB*SINB + XMU*COSB)*
31207      &    (B(1,I)*B(2,J) -B(1,J)*B(2,I))
31208   400   CONTINUE
31209   410 CONTINUE
31210  
31211       PRUN = XMA
31212       EPS = 1D-4*PRUN
31213       ITER = 0
31214   420 ITER = ITER + 1
31215       DO 470 I3 = 1,3
31216         PR(I3)=PRUN+(I3-2)*EPS/2
31217         AP2=PR(I3)**2
31218         APOLT = 0D0
31219         DO 440 I = 1,2
31220           DO 430 J = 1,2
31221             APOLT = APOLT + ACOUPT(I,J)**2*3D0*
31222      &      PYFINT(AP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31223   430     CONTINUE
31224   440   CONTINUE
31225         APOLB = 0D0
31226         DO 460 I = 1,2
31227           DO 450 J = 1,2
31228             APOLB = APOLB + ACOUPB(I,J)**2*3D0*
31229      &      PYFINT(AP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31230   450     CONTINUE
31231   460   CONTINUE
31232         RXMT2 = RXMT**2
31233         XMT2=XMT**2
31234         APOLTT =
31235      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31236      &  COSB**2/SINB**2 *
31237      &  (-0.5D0*AP2)*
31238      &  PYFINT(AP2,XMT2,XMT2)
31239         APOL = APOLT + APOLB + APOLTT
31240         POLAR(I3) = AP2 - XMA**2 -APOL
31241   470 CONTINUE
31242       DERIV = (POLAR(3)-POLAR(1))/EPS
31243       DRUN = - POLAR(2)/DERIV
31244       PRUN = PRUN + DRUN
31245       AP2 = PRUN**2
31246       IF( ABS(DRUN) .LT. 1D-4 .OR.ITER.GT.100 ) GOTO 480
31247       GOTO 420
31248   480 CONTINUE
31249  
31250       AMP = AP2**0.5D0
31251  
31252 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31253 C...END OF PSEUDOSCALAR HIGGS
31254 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31255  
31256       IF(IHIGGS.EQ.3) GOTO 490
31257  
31258   490 CONTINUE
31259       RETURN
31260   500 CONTINUE
31261       WRITE(MSTU(11),*) ' EXITING IN PYVACU '
31262       WRITE(MSTU(11),*) ' XMST11,XMST22 = ',XMST11,XMST22
31263       WRITE(MSTU(11),*) ' XMSB11,XMSB22 = ',XMSB11,XMSB22
31264       WRITE(MSTU(11),*) ' STOP22,SBOT22 = ',STOP22,SBOT22
31265       STOP
31266       END
31267  
31268 C*********************************************************************
31269  
31270 C...PYVACU
31271 C...Computes Higgs masses and mixing angles, see PYPOLE above.
31272  
31273       SUBROUTINE PYVACU(IHIGGS,XMC,XMA,TANB,XMQ,XMUR,XMDR,
31274      &XMT,AT,AB,XMU,XMH,XMHP,HM,HMP,AMP,STOP1,STOP2,
31275      &SBOT1,SBOT2,SA,CA,STOP1W,STOP2W,TANBA)
31276  
31277 C...Double precision and integer declarations.
31278       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
31279       IMPLICIT INTEGER(I-N)
31280 C...Parameters.
31281       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
31282       INTEGER PYK,PYCHGE,PYCOMP
31283  
31284 C...Local variables.
31285       DIMENSION DELTA(2,2),COUPT(2,2),T(2,2),SSTOP2(2),
31286      &SSBOT2(2),B(2,2),COUPB(2,2),
31287      &HCOUPT(2,2),HCOUPB(2,2),
31288      &ACOUPT(2,2),ACOUPB(2,2),PR(3), POLAR(3)
31289  
31290       DELTA(1,1) = 1D0
31291       DELTA(2,2) = 1D0
31292       DELTA(1,2) = 0D0
31293       DELTA(2,1) = 0D0
31294       V = 174.1D0
31295       XMZ=91.18D0
31296       PI=3.14159D0
31297       ALP3Z=0.12D0
31298       ALP3=1D0/(1D0/ALP3Z+23D0/6D0/PI*LOG(XMT/XMZ))
31299  
31300 C      RXMT = XMT/(1D0+4*ALP3/3D0/PI)
31301       RXMT = PYRNMT(XMT)
31302  
31303       HT = RXMT /V
31304       CALL PYRGHM(XMC,XMA,TANB,XMQ,XMUR,XMDR,XMT,AT,AB,
31305      &XMU,XMH,HM,SA,CA,TANBA)
31306       SINB = TANB/(TANB**2+1D0)**0.5D0
31307       COSB = 1D0/(TANB**2+1D0)**0.5D0
31308       COS2B = SINB**2 - COSB**2
31309       SINBPA = SINB*CA + COSB*SA
31310       COSBPA = COSB*CA - SINB*SA
31311       RMBOT = 3D0
31312       XMQ2 = XMQ**2
31313       XMUR2 = XMUR**2
31314       IF(XMUR.LT.0D0) XMUR2=-XMUR2
31315       XMDR2 = XMDR**2
31316       XMST11 = RXMT**2 + XMQ2  - 0.35D0*XMZ**2*COS2B
31317       XMST22 = RXMT**2 + XMUR2 - 0.15D0*XMZ**2*COS2B
31318       IF(XMST11.LT.0D0) GOTO 500
31319       IF(XMST22.LT.0D0) GOTO 500
31320       XMSB11 = RMBOT**2 + XMQ2  + 0.42D0*XMZ**2*COS2B
31321       XMSB22 = RMBOT**2 + XMDR2 + 0.08D0*XMZ**2*COS2B
31322       IF(XMSB11.LT.0D0) GOTO 500
31323       IF(XMSB22.LT.0D0) GOTO 500
31324       WMST11 = RXMT**2 + XMQ2
31325       WMST22 = RXMT**2 + XMUR2
31326       XMST12 = RXMT*(AT - XMU/TANB)
31327       XMSB12 = RMBOT*(AB - XMU*TANB)
31328  
31329 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31330 C...STOP EIGENVALUES CALCULATION
31331 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31332  
31333       STOP12 = 0.5D0*(XMST11+XMST22) +
31334      &0.5D0*((XMST11+XMST22)**2 -
31335      &4D0*(XMST11*XMST22 - XMST12**2))**0.5D0
31336       STOP22 = 0.5D0*(XMST11+XMST22) -
31337      &0.5D0*((XMST11+XMST22)**2 - 4D0*(XMST11*XMST22 -
31338      &XMST12**2))**0.5D0
31339  
31340       IF(STOP22.LT.0D0) GOTO 500
31341       SSTOP2(1) = STOP12
31342       SSTOP2(2) = STOP22
31343       STOP1 = STOP12**0.5D0
31344       STOP2 = STOP22**0.5D0
31345       STOP1W = STOP1
31346       STOP2W = STOP2
31347  
31348       IF(XMST12.EQ.0D0) XST11 = 1D0
31349       IF(XMST12.EQ.0D0) XST12 = 0D0
31350       IF(XMST12.EQ.0D0) XST21 = 0D0
31351       IF(XMST12.EQ.0D0) XST22 = 1D0
31352  
31353       IF(XMST12.EQ.0D0) GOTO 110
31354  
31355   100 XST11 = XMST12/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
31356       XST12 = - (XMST11-STOP12)/(XMST12**2+(XMST11-STOP12)**2)**0.5D0
31357       XST21 = XMST12/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
31358       XST22 = - (XMST11-STOP22)/(XMST12**2+(XMST11-STOP22)**2)**0.5D0
31359  
31360   110 T(1,1) = XST11
31361       T(2,2) = XST22
31362       T(1,2) = XST12
31363       T(2,1) = XST21
31364  
31365       SBOT12 = 0.5D0*(XMSB11+XMSB22) +
31366      &0.5D0*((XMSB11+XMSB22)**2 -
31367      &4D0*(XMSB11*XMSB22 - XMSB12**2))**0.5D0
31368       SBOT22 = 0.5D0*(XMSB11+XMSB22) -
31369      &0.5D0*((XMSB11+XMSB22)**2 - 4D0*(XMSB11*XMSB22 -
31370      &XMSB12**2))**0.5D0
31371       IF(SBOT22.LT.0D0) GOTO 500
31372       SBOT1 = SBOT12**0.5D0
31373       SBOT2 = SBOT22**0.5D0
31374  
31375       SSBOT2(1) = SBOT12
31376       SSBOT2(2) = SBOT22
31377  
31378       IF(XMSB12.EQ.0D0) XSB11 = 1D0
31379       IF(XMSB12.EQ.0D0) XSB12 = 0D0
31380       IF(XMSB12.EQ.0D0) XSB21 = 0D0
31381       IF(XMSB12.EQ.0D0) XSB22 = 1D0
31382  
31383       IF(XMSB12.EQ.0D0) GOTO 130
31384  
31385   120 XSB11 = XMSB12/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
31386       XSB12 = - (XMSB11-SBOT12)/(XMSB12**2+(XMSB11-SBOT12)**2)**0.5D0
31387       XSB21 = XMSB12/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
31388       XSB22 = - (XMSB11-SBOT22)/(XMSB12**2+(XMSB11-SBOT22)**2)**0.5D0
31389  
31390   130 B(1,1) = XSB11
31391       B(2,2) = XSB22
31392       B(1,2) = XSB12
31393       B(2,1) = XSB21
31394  
31395  
31396       SINT = 0.2320D0
31397       SQR = 2D0**0.5D0
31398       VP = 174.1D0*SQR
31399  
31400 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31401 C...STARTING OF LIGHT HIGGS
31402 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31403  
31404       IF(IHIGGS.EQ.0) GOTO 490
31405  
31406       DO 150 I = 1,2
31407         DO 140 J = 1,2
31408           COUPT(I,J) =
31409      &    SINT*XMZ**2*2D0*SQR/174.1D0/3D0*SINBPA*(DELTA(I,J) +
31410      &    (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
31411      &    -RXMT**2/174.1D0**2*VP/SINB*CA*DELTA(I,J)
31412      &    -RXMT/VP/SINB*(AT*CA + XMU*SA)*(T(1,I)*T(2,J) +
31413      &    T(1,J)*T(2,I))
31414   140   CONTINUE
31415   150 CONTINUE
31416  
31417  
31418       DO 170 I = 1,2
31419         DO 160 J = 1,2
31420           COUPB(I,J) =
31421      &    -SINT*XMZ**2*2D0*SQR/174.1D0/6D0*SINBPA*(DELTA(I,J) +
31422      &    (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
31423      &    +RMBOT**2/174.1D0**2*VP/COSB*SA*DELTA(I,J)
31424      &    +RMBOT/VP/COSB*(AB*SA + XMU*CA)*(B(1,I)*B(2,J) +
31425      &    B(1,J)*B(2,I))
31426   160   CONTINUE
31427   170 CONTINUE
31428  
31429       PRUN = XMH
31430       EPS = 1D-4*PRUN
31431       ITER = 0
31432   180 ITER = ITER + 1
31433       DO 230  I3 = 1,3
31434  
31435         PR(I3)=PRUN+(I3-2)*EPS/2
31436         P2=PR(I3)**2
31437         POLT = 0D0
31438         DO 200 I = 1,2
31439           DO 190 J = 1,2
31440             POLT = POLT + COUPT(I,J)**2*3D0*
31441      &      PYFINT(P2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31442   190     CONTINUE
31443   200   CONTINUE
31444         POLB = 0D0
31445         DO 220 I = 1,2
31446           DO 210 J = 1,2
31447             POLB = POLB + COUPB(I,J)**2*3D0*
31448      &      PYFINT(P2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31449   210     CONTINUE
31450   220   CONTINUE
31451         RXMT2 = RXMT**2
31452         XMT2=XMT**2
31453  
31454         POLTT =
31455      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31456      &  CA**2/SINB**2 *
31457      &  (-2D0*XMT**2+0.5D0*P2)*
31458      &  PYFINT(P2,XMT2,XMT2)
31459  
31460         POL = POLT + POLB + POLTT
31461         POLAR(I3) = P2 - XMH**2 - POL
31462   230 CONTINUE
31463       DERIV = (POLAR(3)-POLAR(1))/EPS
31464       DRUN = - POLAR(2)/DERIV
31465       PRUN = PRUN + DRUN
31466       P2 = PRUN**2
31467       IF( ABS(DRUN) .LT. 1D-4 ) GOTO 240
31468       GOTO 180
31469   240 CONTINUE
31470  
31471       XMHP = P2**0.5D0
31472  
31473 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31474 C...END OF LIGHT HIGGS
31475 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31476  
31477   250 IF(IHIGGS.EQ.1) GOTO 490
31478  
31479 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31480 C... STARTING OF HEAVY HIGGS
31481 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31482  
31483       DO 270 I = 1,2
31484         DO 260 J = 1,2
31485           HCOUPT(I,J) =
31486      &    -SINT*XMZ**2*2D0*SQR/174.1D0/3D0*COSBPA*(DELTA(I,J) +
31487      &    (3D0 - 8D0*SINT)/4D0/SINT*T(1,I)*T(1,J))
31488      &    -RXMT**2/174.1D0**2*VP/SINB*SA*DELTA(I,J)
31489      &    -RXMT/VP/SINB*(AT*SA - XMU*CA)*(T(1,I)*T(2,J) +
31490      &    T(1,J)*T(2,I))
31491   260   CONTINUE
31492   270 CONTINUE
31493  
31494       DO 290 I = 1,2
31495         DO 280 J = 1,2
31496           HCOUPB(I,J) =
31497      &    SINT*XMZ**2*2D0*SQR/174.1D0/6D0*COSBPA*(DELTA(I,J) +
31498      &    (3D0 - 4D0*SINT)/2D0/SINT*B(1,I)*B(1,J))
31499      &    -RMBOT**2/174.1D0**2*VP/COSB*CA*DELTA(I,J)
31500      &    -RMBOT/VP/COSB*(AB*CA - XMU*SA)*(B(1,I)*B(2,J) +
31501      &    B(1,J)*B(2,I))
31502           HCOUPB(I,J)=0D0
31503   280   CONTINUE
31504   290 CONTINUE
31505  
31506       PRUN = HM
31507       EPS = 1D-4*PRUN
31508       ITER = 0
31509   300 ITER = ITER + 1
31510       DO 350 I3 = 1,3
31511         PR(I3)=PRUN+(I3-2)*EPS/2
31512         HP2=PR(I3)**2
31513  
31514         HPOLT = 0D0
31515         DO 320 I = 1,2
31516           DO 310 J = 1,2
31517             HPOLT = HPOLT + HCOUPT(I,J)**2*3D0*
31518      &      PYFINT(HP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31519   310     CONTINUE
31520   320   CONTINUE
31521  
31522         HPOLB = 0D0
31523         DO 340 I = 1,2
31524           DO 330 J = 1,2
31525             HPOLB = HPOLB + HCOUPB(I,J)**2*3D0*
31526      &      PYFINT(HP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31527   330     CONTINUE
31528   340   CONTINUE
31529  
31530         RXMT2 = RXMT**2
31531         XMT2  = XMT**2
31532  
31533         HPOLTT =
31534      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31535      &  SA**2/SINB**2 *
31536      &  (-2D0*XMT**2+0.5D0*HP2)*
31537      &  PYFINT(HP2,XMT2,XMT2)
31538  
31539         HPOL = HPOLT + HPOLB + HPOLTT
31540         POLAR(I3) =HP2-HM**2-HPOL
31541   350 CONTINUE
31542       DERIV = (POLAR(3)-POLAR(1))/EPS
31543       DRUN = - POLAR(2)/DERIV
31544       PRUN = PRUN + DRUN
31545       HP2 = PRUN**2
31546       IF( ABS(DRUN) .LT. 1D-4 ) GOTO 360
31547       GOTO 300
31548   360 CONTINUE
31549  
31550  
31551   370 CONTINUE
31552       HMP = HP2**0.5D0
31553  
31554 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31555 C... END OF HEAVY HIGGS
31556 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31557  
31558       IF(IHIGGS.EQ.2) GOTO 490
31559  
31560 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31561 C...BEGINNING OF PSEUDOSCALAR HIGGS
31562 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31563  
31564       DO 390 I = 1,2
31565         DO 380 J = 1,2
31566           ACOUPT(I,J) =
31567      &    -RXMT/VP/SINB*(AT*COSB + XMU*SINB)*
31568      &    (T(1,I)*T(2,J) -T(1,J)*T(2,I))
31569   380   CONTINUE
31570   390 CONTINUE
31571       DO 410 I = 1,2
31572         DO 400 J = 1,2
31573           ACOUPB(I,J) =
31574      &    RMBOT/VP/COSB*(AB*SINB + XMU*COSB)*
31575      &    (B(1,I)*B(2,J) -B(1,J)*B(2,I))
31576   400   CONTINUE
31577   410 CONTINUE
31578  
31579       PRUN = XMA
31580       EPS = 1D-4*PRUN
31581       ITER = 0
31582   420 ITER = ITER + 1
31583       DO 470 I3 = 1,3
31584         PR(I3)=PRUN+(I3-2)*EPS/2
31585         AP2=PR(I3)**2
31586         APOLT = 0D0
31587         DO 440 I = 1,2
31588           DO 430 J = 1,2
31589             APOLT = APOLT + ACOUPT(I,J)**2*3D0*
31590      &      PYFINT(AP2,SSTOP2(I),SSTOP2(J))/16D0/PI**2
31591   430     CONTINUE
31592   440   CONTINUE
31593         APOLB = 0D0
31594         DO 460 I = 1,2
31595           DO 450 J = 1,2
31596             APOLB = APOLB + ACOUPB(I,J)**2*3D0*
31597      &      PYFINT(AP2,SSBOT2(I),SSBOT2(J))/16D0/PI**2
31598   450     CONTINUE
31599   460   CONTINUE
31600         RXMT2 = RXMT**2
31601         XMT2=XMT**2
31602         APOLTT =
31603      &  3D0*RXMT**2/8D0/PI**2/  V  **2*
31604      &  COSB**2/SINB**2 *
31605      &  (-0.5D0*AP2)*
31606      &  PYFINT(AP2,XMT2,XMT2)
31607         APOL = APOLT + APOLB + APOLTT
31608         POLAR(I3) = AP2 - XMA**2 -APOL
31609   470 CONTINUE
31610       DERIV = (POLAR(3)-POLAR(1))/EPS
31611       DRUN = - POLAR(2)/DERIV
31612       PRUN = PRUN + DRUN
31613       AP2 = PRUN**2
31614       IF( ABS(DRUN) .LT. 1D-4 ) GOTO 480
31615       GOTO 420
31616   480 CONTINUE
31617  
31618       AMP = AP2**0.5D0
31619  
31620 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31621 C...END OF PSEUDOSCALAR HIGGS
31622 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31623  
31624       IF(IHIGGS.EQ.3) GOTO 490
31625  
31626   490 CONTINUE
31627       RETURN
31628   500 CONTINUE
31629       WRITE(MSTU(11),*) ' EXITING IN PYVACU '
31630       WRITE(MSTU(11),*) ' XMST11,XMST22 = ',XMST11,XMST22
31631       WRITE(MSTU(11),*) ' XMSB11,XMSB22 = ',XMSB11,XMSB22
31632       WRITE(MSTU(11),*) ' STOP22,SBOT22 = ',STOP22,SBOT22
31633       STOP
31634       END
31635  
31636 C*********************************************************************
31637  
31638 C...PYRGHM
31639 C...Auxiliary routine to PYVACU for SUSY Higgs calculations.
31640  
31641       SUBROUTINE PYRGHM(XMC,XMA,TANB,XMQ,XMUR,XMDL,XMT,AU,AD,XMU,
31642      &XMHP,HMP,SA,CA,TANBA)
31643  
31644 C...Double precision and integer declarations.
31645       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
31646       IMPLICIT INTEGER(I-N)
31647       INTEGER PYK,PYCHGE,PYCOMP
31648       COMMON/PYHTRI/HHH(7)
31649  
31650 C...Local variables.
31651       DIMENSION VH(2,2),XM2(2,2),XM2P(2,2)
31652  
31653       XMZ = 91.18D0
31654       ALP1 = 0.0101D0
31655       ALP2 = 0.0337D0
31656       ALP3Z = 0.12D0
31657       V = 174.1D0
31658       PI = 3.14159D0
31659       TANBA = TANB
31660       TANBT = TANB
31661  
31662 C...MBOTTOM(XMT) = 3. GEV
31663       XMB = 3D0
31664       ALP3 = ALP3Z/(1D0 +(11D0 - 10D0/3D0)/4D0/PI*ALP3Z*
31665      &LOG(XMT**2/XMZ**2))
31666  
31667 C...RXMT= RUNNING TOP QUARK MASS
31668       RXMT = XMT/(1D0+4D0*ALP3/3D0/PI)
31669       TQ = LOG((XMQ**2+XMT**2)/XMT**2)
31670       TU = LOG((XMUR**2 + XMT**2)/XMT**2)
31671       TD = LOG((XMDL**2 + XMT**2)/XMT**2)
31672       SINB = TANB/((1D0 + TANB**2)**0.5D0)
31673       COSB = SINB/TANB
31674       IF(XMA.GT.XMT)
31675      &TANBA = TANB*(1D0-3D0/32D0/PI**2*
31676      &(RXMT**2/V**2/SINB**2-XMB**2/V**2/COSB**2)*
31677      &LOG(XMA**2/XMT**2))
31678       IF(XMA.LT.XMT.OR.XMA.EQ.XMT) TANBT = TANBA
31679       SINB = TANBT/((1D0 + TANBT**2)**0.5D0)
31680       COSB = 1D0/((1D0 + TANBT**2)**0.5D0)
31681       COS2B = (TANBT**2 - 1D0)/(TANBT**2 + 1D0)
31682       G1 = (ALP1*4D0*PI)**0.5D0
31683       G2 = (ALP2*4D0*PI)**0.5D0
31684       G3 = (ALP3*4D0*PI)**0.5D0
31685       HU = RXMT/V/SINB
31686       HD =  XMB/V/COSB
31687  
31688       CALL PYGFXX(XMA,TANBA,XMQ,XMUR,XMDL,XMT,AU,AD,
31689      &XMU,VH,STOP1,STOP2)
31690  
31691       IF(XMQ.GT.XMUR) TP = TQ - TU
31692       IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) TP = TU - TQ
31693       IF(XMQ.GT.XMUR) TDP = TU
31694       IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) TDP = TQ
31695       IF(XMQ.GT.XMDL) TPD = TQ - TD
31696       IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) TPD = TD - TQ
31697       IF(XMQ.GT.XMDL) TDPD = TD
31698       IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) TDPD = TQ
31699  
31700       IF(XMQ.GT.XMDL) DLAM1 = 6D0/96D0/PI**2*G1**2*HD**2*TPD
31701       IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) DLAM1 = 3D0/32D0/PI**2*
31702      &HD**2*(G1**2/3D0+G2**2)*TPD
31703  
31704       IF(XMQ.GT.XMUR) DLAM2 =12D0/96D0/PI**2*G1**2*HU**2*TP
31705       IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) DLAM2 = 3D0/32D0/PI**2*
31706      &HU**2*(-G1**2/3D0+G2**2)*TP
31707  
31708       DLAM3 = 0D0
31709       DLAM4 = 0D0
31710  
31711       IF(XMQ.GT.XMDL) DLAM3 = -1D0/32D0/PI**2*G1**2*HD**2*TPD
31712       IF(XMQ.LT.XMDL.OR.XMQ.EQ.XMDL) DLAM3 = 3D0/64D0/PI**2*HD**2*
31713      &(G2**2-G1**2/3D0)*TPD
31714  
31715       IF(XMQ.GT.XMUR) DLAM3 = DLAM3 -
31716      &1D0/16D0/PI**2*G1**2*HU**2*TP
31717       IF(XMQ.LT.XMUR.OR.XMQ.EQ.XMUR) DLAM3 = DLAM3 +
31718      &3D0/64D0/PI**2*HU**2*(G2**2+G1**2/3D0)*TP
31719  
31720       IF(XMQ.LT.XMUR) DLAM4 = -3D0/32D0/PI**2*G2**2*HU**2*TP
31721       IF(XMQ.LT.XMDL) DLAM4 = DLAM4 - 3D0/32D0/PI**2*G2**2*
31722      &HD**2*TPD
31723  
31724       XLAM1 = ((G1**2 + G2**2)/4D0)*
31725      &(1D0-3D0*HD**2*(TPD + TDPD)/8D0/PI**2)
31726      &+(3D0*HD**4/16D0/PI**2) *TPD*(1D0
31727      &+ (3D0*HD**2/2D0 + HU**2/2D0
31728      &- 8D0*G3**2) * (TPD + 2D0*TDPD)/16D0/PI**2)
31729      &+(3D0*HD**4/8D0/PI**2) *TDPD*(1D0  + (3D0*HD**2/2D0 + HU**2/2D0
31730      &- 8D0*G3**2) * TDPD/16D0/PI**2) + DLAM1
31731       XLAM2 = ((G1**2 + G2**2)/4D0)*(1D0-3D0*HU**2*
31732      &(TP + TDP)/8D0/PI**2)
31733      &+(3D0*HU**4/16D0/PI**2) *TP*(1D0
31734      &+ (3D0*HU**2/2D0 + HD**2/2D0
31735      &- 8D0*G3**2) * (TP + 2D0*TDP)/16D0/PI**2)
31736      &+(3D0*HU**4/8D0/PI**2) *TDP*(1D0 + (3D0*HU**2/2D0 + HD**2/2D0
31737      &- 8D0*G3**2) * TDP/16D0/PI**2) + DLAM2
31738       XLAM3 = ((G2**2 - G1**2)/4D0)*(1D0-3D0*
31739      &(HU**2)*(TP + TDP)/16D0/PI**2 -3D0*
31740      &(HD**2)*(TPD + TDPD)/16D0/PI**2) +DLAM3
31741       XLAM4 = (- G2**2/2D0)*(1D0
31742      &-3D0*(HU**2)*(TP + TDP)/16D0/PI**2
31743      &-3D0*(HD**2)*(TPD + TDPD)/16D0/PI**2) +DLAM4
31744  
31745       XLAM5 = 0D0
31746       XLAM6 = 0D0
31747       XLAM7 = 0D0
31748  
31749 C...Defined now in PYSUBH
31750 C      HHH(1)=XLAM1
31751 C      HHH(2)=XLAM2
31752 C      HHH(3)=XLAM3
31753 C      HHH(4)=XLAM4
31754 C      HHH(5)=XLAM5
31755 C      HHH(6)=XLAM6
31756 C      HHH(7)=XLAM7
31757  
31758       XM2(1,1) = 2D0*V**2*(XLAM1*COSB**2+2D0*XLAM6*
31759      &COSB*SINB + XLAM5*SINB**2) + XMA**2*SINB**2
31760  
31761       XM2(2,2) = 2D0*V**2*(XLAM5*COSB**2+2D0*XLAM7*
31762      &COSB*SINB + XLAM2*SINB**2) + XMA**2*COSB**2
31763       XM2(1,2) = 2D0*V**2*(XLAM6*COSB**2+(XLAM3+XLAM4)*
31764      &COSB*SINB + XLAM7*SINB**2) - XMA**2*SINB*COSB
31765  
31766       XM2(2,1) = XM2(1,2)
31767  
31768 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31769 C...THIS IS THE CONTRIBUTION FROM LIGHT CHARGINOS/NEUTRALINOS
31770 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31771  
31772       XMSSU=(0.5D0*(XMQ**2+XMUR**2)+XMT**2)**0.5D0
31773  
31774       IF(XMC.GT.XMSSU) GOTO 100
31775       IF(XMC.LT.XMT) XMC=XMT
31776  
31777       TCHAR=LOG(XMSSU**2/XMC**2)
31778  
31779       DEL12=(9D0/64D0/PI**2*G2**4+5D0/192D0/PI**2*G1**4)*TCHAR
31780       DEL3P4=(3D0/64D0/PI**2*G2**4+7D0/192D0/PI**2*G1**4
31781      &+4D0/32/PI**2*G1**2*G2**2)*TCHAR
31782  
31783       DEM112=2D0*DEL12*V**2*COSB**2
31784       DEM222=2D0*DEL12*V**2*SINB**2
31785       DEM122=2D0*DEL3P4*V**2*SINB*COSB
31786  
31787       XM2(1,1)=XM2(1,1)+DEM112
31788       XM2(2,2)=XM2(2,2)+DEM222
31789       XM2(1,2)=XM2(1,2)+DEM122
31790       XM2(2,1)=XM2(2,1)+DEM122
31791  
31792   100 CONTINUE
31793  
31794 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31795 C...END OF CHARGINOS/NEUTRALINOS
31796 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31797  
31798       DO 120 I = 1,2
31799         DO 110 J = 1,2
31800           XM2P(I,J) = XM2(I,J) + VH(I,J)
31801   110   CONTINUE
31802   120 CONTINUE
31803  
31804       TRM2P = XM2P(1,1) + XM2P(2,2)
31805       DETM2P = XM2P(1,1)*XM2P(2,2) - XM2P(1,2)*XM2P(2,1)
31806  
31807       XMH2P = (TRM2P - (TRM2P**2 - 4D0* DETM2P)**0.5D0)/2D0
31808       HM2P = (TRM2P + (TRM2P**2 - 4D0* DETM2P)**0.5D0)/2D0
31809       HMP = HM2P**0.5D0
31810       IF(XMH2P.LT.0D0) GOTO 130
31811       XMHP = XMH2P**0.5D0
31812       S2ALP = 2D0*XM2P(1,2)/(TRM2P**2-4D0*DETM2P)**0.5D0
31813       C2ALP = (XM2P(1,1)-XM2P(2,2))/(TRM2P**2-4D0*DETM2P)**0.5D0
31814       IF(C2ALP.GT.0D0) ALP = ASIN(S2ALP)/2D0
31815       IF(C2ALP.LT.0D0) ALP = -PI/2D0-ASIN(S2ALP)/2D0
31816       SA = SIN(ALP)
31817       CA = COS(ALP)
31818       SQBMA = (SINB*CA - COSB*SA)**2
31819   130 XIN = 1D0
31820   140 CONTINUE
31821  
31822       RETURN
31823       END
31824  
31825 C*********************************************************************
31826  
31827 C...PYGFXX
31828 C...Auxiliary routine to PYRGHM for SUSY Higgs calculations.
31829  
31830       SUBROUTINE PYGFXX(XMA,TANB,XMQ,XMUR,XMDL,XMT,AT,AB,XMU,VH,
31831      &STOP1,STOP2)
31832  
31833 C...Double precision and integer declarations.
31834       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
31835       IMPLICIT INTEGER(I-N)
31836       INTEGER PYK,PYCHGE,PYCOMP
31837  
31838 C...Local variables.
31839       DIMENSION DIAH(2),VH(2,2),VH1(2,2),VH2(2,2),
31840      &VH3T(2,2),VH3B(2,2),
31841      &HMIX(2,2),AL(2,2),XM2(2,2)
31842  
31843 C...Statement function.
31844       G(X,Y) = 2D0 - (X+Y)/(X-Y)*LOG(X/Y)
31845  
31846       IF(DABS(XMU).LT.0.000001D0) XMU = 0.000001D0
31847       XMQ2 = XMQ**2
31848       XMUR2 = XMUR**2
31849       XMDL2 = XMDL**2
31850       TANBA = TANB
31851       SINBA = TANBA/(TANBA**2+1D0)**0.5D0
31852       COSBA = SINBA/TANBA
31853  
31854       SINB = TANB/(TANB**2+1D0)**0.5D0
31855       COSB = SINB/TANB
31856       PI = 3.14159D0
31857       G2 = (0.0336D0*4D0*PI)**0.5D0
31858       G12 = (0.0101D0*4D0*PI)
31859       G1 = G12**0.5D0
31860       XMZ = 91.18D0
31861       V = 174.1D0
31862       MW = (G2**2*V**2/2D0)**0.5D0
31863       ALP3 = 0.12D0/(1D0+23/12D0/PI*0.12D0*LOG(XMT**2/XMZ**2))
31864  
31865       XMB = 3D0
31866       IF(XMQ.GT.XMUR) XMST = XMQ
31867       IF(XMUR.GT.XMQ.OR.XMUR.EQ.XMQ) XMST = XMUR
31868  
31869       XMSUT = (XMST**2  + XMT**2)**0.5D0
31870  
31871       IF(XMQ.GT.XMDL) XMSB = XMQ
31872       IF(XMDL.GT.XMQ.OR.XMDL.EQ.XMQ) XMSB = XMDL
31873  
31874       XMSUB = (XMSB**2 + XMB**2)**0.5D0
31875  
31876       TT = LOG(XMSUT**2/XMT**2)
31877       TB = LOG(XMSUB**2/XMT**2)
31878  
31879       RXMT = XMT/(1D0+4D0*ALP3/3D0/PI)
31880       HT = RXMT/(174.1D0*SINB)
31881       HTST = RXMT/174.1D0
31882       HB = XMB/174.1D0/COSB
31883       G32 = ALP3*4D0*PI
31884       BT2 = -(8D0*G32 - 9D0*HT**2/2D0 - HB**2/2D0)/(4D0*PI)**2
31885       BB2 = -(8D0*G32 - 9D0*HB**2/2D0 - HT**2/2D0)/(4D0*PI)**2
31886       AL2 = 3D0/8D0/PI**2*HT**2
31887       BT2ST = -(8D0*G32 - 9D0*HTST**2/2D0)/(4D0*PI)**2
31888       ALST = 3D0/8D0/PI**2*HTST**2
31889       AL1 = 3D0/8D0/PI**2*HB**2
31890  
31891       AL(1,1) = AL1
31892       AL(1,2) = (AL2+AL1)/2D0
31893       AL(2,1) = (AL2+AL1)/2D0
31894       AL(2,2) = AL2
31895  
31896       XMT4 = RXMT**4*(1D0+2D0*BT2*TT- AL2*TT)
31897       XMT2 = SQRT(XMT4)
31898       XMBOT4 = XMB**4*(1D0+2D0*BB2*TB - AL1*TB)
31899       XMBOT2 = SQRT(XMBOT4)
31900  
31901       IF(XMA.GT.XMT) THEN
31902         VI = 174.1D0*(1D0 + 3D0/32D0/PI**2*HTST**2*
31903      &  LOG(XMT**2/XMA**2))
31904         H1I = VI* COSBA
31905         H2I = VI*SINBA
31906         H1T = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMA**2/XMSUT**2))**0.25D0
31907         H2T = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMA**2/XMSUT**2))**0.25D0
31908         H1B = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMA**2/XMSUB**2))**0.25D0
31909         H2B = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMA**2/XMSUB**2))**0.25D0
31910       ELSE
31911         VI = 174.1D0
31912         H1I = VI*COSB
31913         H2I = VI*SINB
31914         H1T = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMT**2/XMSUT**2))**0.25D0
31915         H2T = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMT**2/XMSUT**2))**0.25D0
31916         H1B = H1I*(1D0+3D0/8D0/PI**2*HB**2*LOG(XMT**2/XMSUB**2))**0.25D0
31917         H2B = H2I*(1D0+3D0/8D0/PI**2*HT**2*LOG(XMT**2/XMSUB**2))**0.25D0
31918       ENDIF
31919  
31920       TANBST = H2T/H1T
31921       SINBT = TANBST/(1D0+TANBST**2)**0.5D0
31922       COSBT = SINBT/TANBST
31923  
31924       TANBSB = H2B/H1B
31925       SINBB = TANBSB/(1D0+TANBSB**2)**0.5D0
31926       COSBB = SINBB/TANBSB
31927  
31928       STOP12 = (XMQ2 + XMUR2)*0.5D0 + XMT2
31929      &+1D0/8D0*(G2**2+G1**2)*(H1T**2-H2T**2)
31930      &+(((G2**2-5D0*G1**2/3D0)/4D0*(H1T**2-H2T**2) +
31931      &XMQ2 - XMUR2)**2*0.25D0 + XMT2*(AT-XMU/TANBST)**2)**0.5D0
31932       STOP22 = (XMQ2 + XMUR2)*0.5D0 + XMT2
31933      &+1D0/8D0*(G2**2+G1**2)*(H1T**2-H2T**2)
31934      &- (((G2**2-5D0*G1**2/3D0)/4D0*(H1T**2-H2T**2) +
31935      &XMQ2 - XMUR2)**2*0.25D0
31936      &+ XMT2*(AT-XMU/TANBST)**2)**0.5D0
31937       IF(STOP22.LT.0D0) GOTO 120
31938       SBOT12 = (XMQ2 + XMDL2)*0.5D0
31939      &- 1D0/8D0*(G2**2+G1**2)*(H1B**2-H2B**2)
31940      &+ (((G1**2/3D0-G2**2)/4D0*(H1B**2-H2B**2) +
31941      &XMQ2 - XMDL2)**2*0.25D0 + XMBOT2*(AB-XMU*TANBSB)**2)**0.5D0
31942       SBOT22 = (XMQ2 + XMDL2)*0.5D0
31943      &- 1D0/8D0*(G2**2+G1**2)*(H1B**2-H2B**2)
31944      &- (((G1**2/3D0-G2**2)/4D0*(H1B**2-H2B**2) +
31945      &XMQ2 - XMDL2)**2*0.25D0 + XMBOT2*(AB-XMU*TANBSB)**2)**0.5D0
31946       IF(SBOT22.LT.0D0) GOTO 120
31947  
31948       STOP1 = STOP12**0.5D0
31949       STOP2 = STOP22**0.5D0
31950       SBOT1 = SBOT12**0.5D0
31951       SBOT2 = SBOT22**0.5D0
31952  
31953       VH1(1,1) = 1D0/TANBST
31954       VH1(2,1) = -1D0
31955       VH1(1,2) = -1D0
31956       VH1(2,2) = TANBST
31957       VH2(1,1) = TANBST
31958       VH2(1,2) = -1D0
31959       VH2(2,1) = -1D0
31960       VH2(2,2) = 1D0/TANBST
31961  
31962 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31963 C...D-TERMS
31964 CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
31965       STW=0.2320D0
31966  
31967       F1T=(XMQ2-XMUR2)/(STOP12-STOP22)*(0.5D0-4D0/3D0*STW)*
31968      &LOG(STOP1/STOP2)
31969      &+(0.5D0-2D0/3D0*STW)*LOG(STOP1*STOP2/(XMQ2+XMT2))
31970      &+ 2D0/3D0*STW*LOG(STOP1*STOP2/(XMUR2+XMT2))
31971  
31972       F1B=(XMQ2-XMDL2)/(SBOT12-SBOT22)*(-0.5D0+2D0/3D0*STW)*
31973      &LOG(SBOT1/SBOT2)
31974      &+(-0.5D0+1D0/3D0*STW)*LOG(SBOT1*SBOT2/(XMQ2+XMBOT2))
31975      &- 1D0/3D0*STW*LOG(SBOT1*SBOT2/(XMDL2+XMBOT2))
31976  
31977       F2T=XMT2**0.5D0*(AT-XMU/TANBST)/(STOP12-STOP22)*
31978      &(-0.5D0*LOG(STOP12/STOP22)
31979      &+(4D0/3D0*STW-0.5D0)*(XMQ2-XMUR2)/(STOP12-STOP22)*
31980      &G(STOP12,STOP22))
31981  
31982       F2B=XMBOT2**0.5D0*(AB-XMU*TANBSB)/(SBOT12-SBOT22)*
31983      &(0.5D0*LOG(SBOT12/SBOT22)
31984      &+(-2D0/3D0*STW+0.5D0)*(XMQ2-XMDL2)/(SBOT12-SBOT22)*
31985      &G(SBOT12,SBOT22))
31986  
31987       VH3B(1,1) = XMBOT4/(COSBB**2)*(LOG(SBOT1**2*SBOT2**2/
31988      &(XMQ2+XMBOT2)/(XMDL2+XMBOT2))
31989      &+ 2D0*(AB*(AB-XMU*TANBSB)/(SBOT1**2-SBOT2**2))*
31990      &LOG(SBOT1**2/SBOT2**2)) +
31991      &XMBOT4/(COSBB**2)*(AB*(AB-XMU*TANBSB)/
31992      &(SBOT1**2-SBOT2**2))**2*G(SBOT12,SBOT22)
31993  
31994       VH3T(1,1) =
31995      &XMT4/(SINBT**2)*(XMU*(-AT+XMU/TANBST)/(STOP1**2
31996      &-STOP2**2))**2*G(STOP12,STOP22)
31997  
31998       VH3B(1,1)=VH3B(1,1)+
31999      &XMZ**2*(2*XMBOT2*F1B-XMBOT2**0.5D0*AB*F2B)
32000  
32001       VH3T(1,1) = VH3T(1,1) +
32002      &XMZ**2*(XMT2**0.5D0*XMU/TANBST*F2T)
32003  
32004       VH3T(2,2) = XMT4/(SINBT**2)*(LOG(STOP1**2*STOP2**2/
32005      &(XMQ2+XMT2)/(XMUR2+XMT2))
32006      &+ 2D0*(AT*(AT-XMU/TANBST)/(STOP1**2-STOP2**2))*
32007      &LOG(STOP1**2/STOP2**2)) +
32008      &XMT4/(SINBT**2)*(AT*(AT-XMU/TANBST)/
32009      &(STOP1**2-STOP2**2))**2*G(STOP12,STOP22)
32010  
32011       VH3B(2,2) =
32012      &XMBOT4/(COSBB**2)*(XMU*(-AB+XMU*TANBSB)/(SBOT1**2
32013      &-SBOT2**2))**2*G(SBOT12,SBOT22)
32014  
32015       VH3T(2,2)=VH3T(2,2)+
32016      &XMZ**2*(-2*XMT2*F1T+XMT2**0.5D0*AT*F2T)
32017  
32018       VH3B(2,2) = VH3B(2,2) -XMZ**2*XMBOT2**0.5D0*XMU*TANBSB*F2B
32019  
32020       VH3T(1,2) = -
32021      &XMT4/(SINBT**2)*XMU*(AT-XMU/TANBST)/
32022      &(STOP1**2-STOP2**2)*(LOG(STOP1**2/STOP2**2) + AT*
32023      &(AT - XMU/TANBST)/(STOP1**2-STOP2**2)*G(STOP12,STOP22))
32024  
32025       VH3B(1,2) =
32026      &- XMBOT4/(COSBB**2)*XMU*(AT-XMU*TANBSB)/
32027      &(SBOT1**2-SBOT2**2)*(LOG(SBOT1**2/SBOT2**2) + AB*
32028      &(AB - XMU*TANBSB)/(SBOT1**2-SBOT2**2)*G(SBOT12,SBOT22))
32029  
32030       VH3T(1,2)=VH3T(1,2) +
32031      &XMZ**2*(XMT2/TANBST*F1T-XMT2**0.5D0*(AT/TANBST+XMU)/2D0*F2T)
32032  
32033       VH3B(1,2)=VH3B(1,2)
32034      &+XMZ**2*(-XMBOT2*TANBSB*F1B+XMBOT2**0.5D0*(AB*TANBSB+XMU)/2D0*F2B)
32035  
32036       VH3T(2,1) = VH3T(1,2)
32037       VH3B(2,1) = VH3B(1,2)
32038  
32039       TQ = LOG((XMQ2 + XMT2)/XMT2)
32040       TU = LOG((XMUR2+XMT2)/XMT2)
32041       TQD = LOG((XMQ2 + XMB**2)/XMB**2)
32042       TD = LOG((XMDL2+XMB**2)/XMB**2)
32043  
32044       DO 110 I = 1,2
32045         DO 100 J = 1,2
32046  
32047           VH(I,J) =
32048      &    6D0/(8D0*PI**2*(H1T**2+H2T**2))
32049      &    *VH3T(I,J)*0.5D0*(1D0-AL(I,J)*TT/2D0) +
32050      &    6D0/(8D0*PI**2*(H1B**2+H2B**2))
32051      &    *VH3B(I,J)*0.5D0*(1D0-AL(I,J)*TB/2D0)
32052  
32053   100   CONTINUE
32054   110 CONTINUE
32055  
32056       GOTO 150
32057   120 DO 140 I =1,2
32058         DO 130 J = 1,2
32059           VH(I,J) = -1D+15
32060   130   CONTINUE
32061   140 CONTINUE
32062  
32063   150 CONTINUE
32064  
32065       RETURN
32066       END
32067  
32068 C*********************************************************************
32069  
32070 C...PYFINT
32071 C...Auxiliary routine to PYVACU for SUSY Higgs calculations.
32072  
32073       FUNCTION PYFINT(A,B,C)
32074  
32075 C...Double precision and integer declarations.
32076       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
32077       IMPLICIT INTEGER(I-N)
32078       INTEGER PYK,PYCHGE,PYCOMP
32079 C...Commonblock.
32080       COMMON/PYINTS/XXM(20)
32081       SAVE/PYINTS/
32082  
32083 C...Local variables.
32084       EXTERNAL PYFISB
32085       DOUBLE PRECISION PYFISB
32086  
32087       XXM(1)=A
32088       XXM(2)=B
32089       XXM(3)=C
32090       XLO=0D0
32091       XHI=1D0
32092       PYFINT  = PYGAUS(PYFISB,XLO,XHI,1D-3)
32093  
32094       RETURN
32095       END
32096  
32097 C*********************************************************************
32098  
32099 C...PYFISB
32100 C...Auxiliary routine to PYFINT for SUSY Higgs calculations.
32101  
32102       FUNCTION PYFISB(X)
32103  
32104 C...Double precision and integer declarations.
32105       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
32106       IMPLICIT INTEGER(I-N)
32107       INTEGER PYK,PYCHGE,PYCOMP
32108 C...Commonblock.
32109       COMMON/PYINTS/XXM(20)
32110       SAVE/PYINTS/
32111  
32112       PYFISB = LOG(ABS(X*XXM(2)+(1-X)*XXM(3)-X*(1-X)*XXM(1))/
32113      &(X*(XXM(2)-XXM(3))+XXM(3)))
32114  
32115       RETURN
32116       END
32117  
32118 C*********************************************************************
32119  
32120 C...PYSFDC
32121 C...Calculates decays of sfermions.
32122  
32123       SUBROUTINE PYSFDC(KFIN,XLAM,IDLAM,IKNT)
32124  
32125 C...Double precision and integer declarations.
32126       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
32127       IMPLICIT INTEGER(I-N)
32128       INTEGER PYK,PYCHGE,PYCOMP
32129 C...Parameter statement to help give large particle numbers.
32130       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
32131 C...Commonblocks.
32132       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
32133       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
32134       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
32135       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
32136      &SFMIX(16,4)
32137       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
32138  
32139 C...Local variables.
32140       INTEGER KFIN,KCIN
32141       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,XMZ,
32142      &XMZ2,AXMJ,AXMI
32143       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMA2,XMB2,XMFP
32144       DOUBLE PRECISION PYLAMF,XL
32145       DOUBLE PRECISION TANW,XW,AEM,C1,AS
32146       DOUBLE PRECISION CA,CB,AL,AR,BL,BR,ALP,ARP,BLP,BRP
32147       DOUBLE PRECISION CH1,CH2,CH3,CH4
32148       DOUBLE PRECISION XMBOT,XMTOP
32149       DOUBLE PRECISION XLAM(0:200)
32150       INTEGER IDLAM(200,3)
32151       INTEGER LKNT,IX,IC,ILR,IDU,J,IJ,I,IKNT,IFL,IFP,II
32152       DOUBLE PRECISION SR2
32153       DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K
32154       DOUBLE PRECISION CW
32155       DOUBLE PRECISION BETA,ALFA,XMU,AT,AB,ATRIT,ATRIB,ATRIL
32156       DOUBLE PRECISION COSA,SINA,TANB
32157       DOUBLE PRECISION PYALEM,PI,PYALPS,EI,PYRNMT
32158       DOUBLE PRECISION GHRR,GHLL,GHLR,CF,XMB,BLR
32159       INTEGER IG,KF1,KF2,ILR2,IDP
32160       INTEGER IGG(4),KFNCHI(4),KFCCHI(2)
32161       DATA IGG/23,25,35,36/
32162       DATA PI/3.141592654D0/
32163       DATA SR2/1.4142136D0/
32164       DATA KFNCHI/1000022,1000023,1000025,1000035/
32165       DATA KFCCHI/1000024,1000037/
32166  
32167 C...COUNT THE NUMBER OF DECAY MODES
32168       LKNT=0
32169  
32170 C...NO NU_R DECAYS
32171       IF(KFIN.EQ.KSUSY2+12.OR.KFIN.EQ.KSUSY2+14.OR.
32172      &KFIN.EQ.KSUSY2+16) RETURN
32173  
32174       XMW=PMAS(24,1)
32175       XMW2=XMW**2
32176       XMZ=PMAS(23,1)
32177       XMZ2=XMZ**2
32178       XW=PARU(102)
32179       TANW = SQRT(XW/(1D0-XW))
32180       CW=SQRT(1D0-XW)
32181  
32182 C...KCIN
32183       KCIN=PYCOMP(KFIN)
32184 C...ILR is 1 for left and 2 for right.
32185       ILR=KFIN/KSUSY1
32186 C...IFL is matching non-SUSY flavour.
32187       IFL=MOD(KFIN,KSUSY1)
32188 C...IDU is weak isospin, 1 for down and 2 for up.
32189       IDU=2-MOD(IFL,2)
32190  
32191       XMI=PMAS(KCIN,1)
32192       XMI2=XMI**2
32193       AEM=PYALEM(XMI2)
32194       AS =PYALPS(XMI2)
32195       C1=AEM/XW
32196       XMI3=XMI**3
32197       EI=KCHG(IFL,1)/3D0
32198  
32199       XMBOT=3D0
32200       XMTOP=PYRNMT(PMAS(6,1))
32201       XMBOT=0D0
32202  
32203       TANB=RMSS(5)
32204       BETA=ATAN(TANB)
32205       ALFA=RMSS(18)
32206       CBETA=COS(BETA)
32207       SBETA=TANB*CBETA
32208       SINA=SIN(ALFA)
32209       COSA=COS(ALFA)
32210       XMU=-RMSS(4)
32211       ATRIT=RMSS(16)
32212       ATRIB=RMSS(15)
32213       ATRIL=RMSS(17)
32214  
32215 C...2-BODY DECAYS OF SFERMION -> GRAVITINO + FERMION
32216  
32217       IF(IMSS(11).EQ.1) THEN
32218         XMP=RMSS(29)
32219         IDG=39+KSUSY1
32220         XMGR=PMAS(PYCOMP(IDG),1)
32221         XFAC=(XMI2/(XMP*XMGR))**2*XMI/48D0/PI
32222         IF(IFL.EQ.5) THEN
32223           XMF=XMBOT
32224         ELSEIF(IFL.EQ.6) THEN
32225           XMF=XMTOP
32226         ELSE
32227           XMF=PMAS(IFL,1)
32228         ENDIF
32229         IF(XMI.GT.XMGR+XMF) THEN
32230           LKNT=LKNT+1
32231           IDLAM(LKNT,1)=IDG
32232           IDLAM(LKNT,2)=IFL
32233           IDLAM(LKNT,3)=0
32234           XLAM(LKNT)=XFAC*(1D0-XMF**2/XMI2)**4
32235         ENDIF
32236       ENDIF
32237  
32238 C...2-BODY DECAYS OF SFERMION -> FERMION + GAUGE/GAUGINO
32239  
32240 C...CHARGED DECAYS:
32241       DO 100 IX=1,2
32242 C...DI -> U CHI1-,CHI2-
32243         IF(IDU.EQ.1) THEN
32244           XMFP=PMAS(IFL+1,1)
32245           XMF =PMAS(IFL,1)
32246 C...UI -> D CHI1+,CHI2+
32247         ELSE
32248           XMFP=PMAS(IFL-1,1)
32249           XMF =PMAS(IFL,1)
32250         ENDIF
32251         XMJ=SMW(IX)
32252         AXMJ=ABS(XMJ)
32253         IF(XMI.GE.AXMJ+XMFP) THEN
32254           XMA2=XMJ**2
32255           XMB2=XMFP**2
32256           IF(IDU.EQ.2) THEN
32257             IF(IFL.EQ.6) THEN
32258               XMFP=XMBOT
32259               XMF =XMTOP
32260             ELSEIF(IFL.LT.6) THEN
32261               XMF=0D0
32262               XMFP=0D0
32263             ENDIF
32264             BL=VMIX(IX,1)
32265             AL=-XMFP*UMIX(IX,2)/SR2/XMW/CBETA
32266             BR=-XMF*VMIX(IX,2)/SR2/XMW/SBETA
32267             AR=0D0
32268           ELSE
32269             IF(IFL.EQ.5) THEN
32270               XMF =XMBOT
32271               XMFP=XMTOP
32272             ELSEIF(IFL.LT.5) THEN
32273               XMF=0D0
32274               XMFP=0D0
32275             ENDIF
32276             BL=UMIX(IX,1)
32277             AL=-XMFP*VMIX(IX,2)/SR2/XMW/SBETA
32278             BR=-XMF*UMIX(IX,2)/SR2/XMW/CBETA
32279             AR=0D0
32280           ENDIF
32281  
32282           ALP=SFMIX(IFL,1)*AL + SFMIX(IFL,2)*AR
32283           BLP=SFMIX(IFL,1)*BL + SFMIX(IFL,2)*BR
32284           ARP=SFMIX(IFL,4)*AR + SFMIX(IFL,3)*AL
32285           BRP=SFMIX(IFL,4)*BR + SFMIX(IFL,3)*BL
32286           AL=ALP
32287           BL=BLP
32288           AR=ARP
32289           BR=BRP
32290  
32291 C...F1 -> F` CHI
32292           IF(ILR.EQ.1) THEN
32293             CA=AL
32294             CB=BL
32295 C...F2 -> F` CHI
32296           ELSE
32297             CA=AR
32298             CB=BR
32299           ENDIF
32300           LKNT=LKNT+1
32301           XL=PYLAMF(XMI2,XMA2,XMB2)
32302 C...SPIN AVERAGE = 1/1 NOT 1/2....NO COLOR ENHANCEMENT
32303           XLAM(LKNT)=2D0*C1/8D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
32304      &    (CA**2+CB**2)-4D0*CA*CB*XMJ*XMFP)
32305           IDLAM(LKNT,3)=0
32306           IF(IDU.EQ.1) THEN
32307             IDLAM(LKNT,1)=-KFCCHI(IX)
32308             IDLAM(LKNT,2)=IFL+1
32309           ELSE
32310             IDLAM(LKNT,1)=KFCCHI(IX)
32311             IDLAM(LKNT,2)=IFL-1
32312           ENDIF
32313         ENDIF
32314   100 CONTINUE
32315  
32316 C...NEUTRAL DECAYS
32317       DO 110 IX=1,4
32318 C...DI -> D CHI10
32319         XMF=PMAS(IFL,1)
32320         XMJ=SMZ(IX)
32321         AXMJ=ABS(XMJ)
32322         IF(XMI.GE.AXMJ+XMF) THEN
32323           XMA2=XMJ**2
32324           XMB2=XMF**2
32325           IF(IDU.EQ.1) THEN
32326             IF(IFL.EQ.5) THEN
32327               XMF=XMBOT
32328             ELSEIF(IFL.LT.5) THEN
32329               XMF=0D0
32330             ENDIF
32331             BL=-ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI+1)
32332             AL=XMF*ZMIX(IX,3)/XMW/CBETA
32333             AR=-2D0*EI*TANW*ZMIX(IX,1)
32334             BR=AL
32335           ELSE
32336             IF(IFL.EQ.6) THEN
32337               XMF=XMTOP
32338             ELSEIF(IFL.LT.5) THEN
32339               XMF=0D0
32340             ENDIF
32341             BL=ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-1)
32342             AL=XMF*ZMIX(IX,4)/XMW/SBETA
32343             AR=-2D0*EI*TANW*ZMIX(IX,1)
32344             BR=AL
32345           ENDIF
32346  
32347           ALP=SFMIX(IFL,1)*AL + SFMIX(IFL,2)*AR
32348           BLP=SFMIX(IFL,1)*BL + SFMIX(IFL,2)*BR
32349           ARP=SFMIX(IFL,4)*AR + SFMIX(IFL,3)*AL
32350           BRP=SFMIX(IFL,4)*BR + SFMIX(IFL,3)*BL
32351           AL=ALP
32352           BL=BLP
32353           AR=ARP
32354           BR=BRP
32355  
32356 C...F1 -> F CHI
32357           IF(ILR.EQ.1) THEN
32358             CA=AL
32359             CB=BL
32360 C...F2 -> F CHI
32361           ELSE
32362             CA=AR
32363             CB=BR
32364           ENDIF
32365           LKNT=LKNT+1
32366           XL=PYLAMF(XMI2,XMA2,XMB2)
32367 C...SPIN AVERAGE = 1/1 NOT 1/2....NO COLOR ENHANCEMENT
32368           XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
32369      &    (CA**2+CB**2)-4D0*CA*CB*XMJ*XMF)
32370           IDLAM(LKNT,1)=KFNCHI(IX)
32371           IDLAM(LKNT,2)=IFL
32372           IDLAM(LKNT,3)=0
32373         ENDIF
32374   110 CONTINUE
32375  
32376 C...2-BODY DECAYS TO SM GAUGE AND HIGGS BOSONS
32377 C...IG=23,25,35,36
32378       DO 120 II=1,4
32379         IG=IGG(II)
32380         IF(ILR.EQ.1) GOTO 120
32381         XMB=PMAS(IG,1)
32382         XMSF1=PMAS(PYCOMP(KFIN-KSUSY1),1)
32383         IF(XMI.LT.XMSF1+XMB) GOTO 120
32384         IF(IG.EQ.23) THEN
32385           BL=-SIGN(.5D0,EI)/CW+EI*XW/CW
32386           BR=EI*XW/CW
32387           BLR=0D0
32388         ELSEIF(IG.EQ.25) THEN
32389           IF(IFL.EQ.5) THEN
32390             XMF=XMBOT
32391           ELSEIF(IFL.EQ.6) THEN
32392             XMF=XMTOP
32393           ELSEIF(IFL.LT.5) THEN
32394             XMF=0D0
32395           ELSE
32396             XMF=PMAS(IFL,1)
32397           ENDIF
32398           IF(IDU.EQ.2) THEN
32399             GHLL=XMZ/CW*(0.5D0-EI*XW)*(-SIN(ALFA+BETA))+
32400      &      XMF**2/XMW*COSA/SBETA
32401             GHRR=XMZ/CW*(EI*XW)*(-SIN(ALFA+BETA))+
32402      &      XMF**2/XMW*COSA/SBETA
32403           ELSE
32404             GHLL=XMZ/CW*(0.5D0-EI*XW)*(-SIN(ALFA+BETA))+
32405      &      XMF**2/XMW*(-SINA)/CBETA
32406             GHRR=XMZ/CW*(EI*XW)*(-SIN(ALFA+BETA))+
32407      &      XMF**2/XMW*(-SINA)/CBETA
32408           ENDIF
32409           IF(IFL.EQ.5) THEN
32410             AT=ATRIB
32411           ELSEIF(IFL.EQ.6) THEN
32412             AT=ATRIT
32413           ELSEIF(IFL.EQ.15) THEN
32414             AT=ATRIL
32415           ELSE
32416             AT=0D0
32417           ENDIF
32418           IF(IDU.EQ.2) THEN
32419             GHLR=XMF/2D0/XMW/SBETA*(-XMU*SINA+
32420      &      AT*COSA)
32421           ELSE
32422             GHLR=XMF/2D0/XMW/CBETA*(XMU*COSA-
32423      &      AT*SINA)
32424           ENDIF
32425           BL=GHLL
32426           BR=GHRR
32427           BLR=-GHLR
32428         ELSEIF(IG.EQ.35) THEN
32429           IF(IFL.EQ.5) THEN
32430             XMF=XMBOT
32431           ELSEIF(IFL.EQ.6) THEN
32432             XMF=XMTOP
32433           ELSEIF(IFL.LT.5) THEN
32434             XMF=0D0
32435           ELSE
32436             XMF=PMAS(IFL,1)
32437           ENDIF
32438           IF(IDU.EQ.2) THEN
32439             GHLL=XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)+
32440      &      XMF**2/XMW*SINA/SBETA
32441             GHRR=XMZ/CW*(EI*XW)*COS(ALFA+BETA)+
32442      &      XMF**2/XMW*SINA/SBETA
32443           ELSE
32444             GHLL=XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)+
32445      &      XMF**2/XMW*COSA/CBETA
32446             GHRR=XMZ/CW*(EI*XW)*COS(ALFA+BETA)+
32447      &      XMF**2/XMW*COSA/CBETA
32448           ENDIF
32449           IF(IFL.EQ.5) THEN
32450             AT=ATRIB
32451           ELSEIF(IFL.EQ.6) THEN
32452             AT=ATRIT
32453           ELSEIF(IFL.EQ.15) THEN
32454             AT=ATRIL
32455           ELSE
32456             AT=0D0
32457           ENDIF
32458           IF(IDU.EQ.2) THEN
32459             GHLR=XMF/2D0/XMW/SBETA*(XMU*COSA+
32460      &      AT*SINA)
32461           ELSE
32462             GHLR=XMF/2D0/XMW/CBETA*(XMU*SINA+
32463      &      AT*COSA)
32464           ENDIF
32465           BL=GHLL
32466           BR=GHRR
32467           BLR=GHLR
32468         ELSEIF(IG.EQ.36) THEN
32469           GHLL=0D0
32470           GHRR=0D0
32471           IF(IFL.EQ.5) THEN
32472             XMF=XMBOT
32473           ELSEIF(IFL.EQ.6) THEN
32474             XMF=XMTOP
32475           ELSEIF(IFL.LT.5) THEN
32476             XMF=0D0
32477           ELSE
32478             XMF=PMAS(IFL,1)
32479           ENDIF
32480           IF(IFL.EQ.5) THEN
32481             AT=ATRIB
32482           ELSEIF(IFL.EQ.6) THEN
32483             AT=ATRIT
32484           ELSEIF(IFL.EQ.15) THEN
32485             AT=ATRIL
32486           ELSE
32487             AT=0D0
32488           ENDIF
32489           IF(IDU.EQ.2) THEN
32490             GHLR=XMF/2D0/XMW*(-XMU+AT/TANB)
32491           ELSE
32492             GHLR=XMF/2D0/XMW/(-XMU+AT*TANB)
32493           ENDIF
32494           BL=GHLL
32495           BR=GHRR
32496           BLR=GHLR
32497         ENDIF
32498         AL=SFMIX(IFL,1)*SFMIX(IFL,3)*BL+
32499      &  SFMIX(IFL,2)*SFMIX(IFL,4)*BR+
32500      &  (SFMIX(IFL,1)*SFMIX(IFL,4)+SFMIX(IFL,3)*SFMIX(IFL,2))*BLR
32501         XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
32502         LKNT=LKNT+1
32503         IF(IG.EQ.23) THEN
32504           XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
32505         ELSE
32506           XLAM(LKNT)=C1/4D0/XMI3*SQRT(XL)*AL**2
32507         ENDIF
32508         IDLAM(LKNT,3)=0
32509         IDLAM(LKNT,1)=KFIN-KSUSY1
32510         IDLAM(LKNT,2)=IG
32511   120 CONTINUE
32512  
32513 C...SF -> SF' + W
32514       XMB=PMAS(24,1)
32515       IF(MOD(IFL,2).EQ.0) THEN
32516         KF1=KSUSY1+IFL-1
32517       ELSE
32518         KF1=KSUSY1+IFL+1
32519       ENDIF
32520       KF2=KF1+KSUSY1
32521       XMSF1=PMAS(PYCOMP(KF1),1)
32522       XMSF2=PMAS(PYCOMP(KF2),1)
32523       IF(XMI.GT.XMB+XMSF1) THEN
32524         IF(MOD(IFL,2).EQ.0) THEN
32525           IF(ILR.EQ.1) THEN
32526             AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL-1,1)
32527           ELSE
32528             AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL-1,1)
32529           ENDIF
32530         ELSE
32531           IF(ILR.EQ.1) THEN
32532             AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL+1,1)
32533           ELSE
32534             AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL+1,1)
32535           ENDIF
32536         ENDIF
32537         XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
32538         LKNT=LKNT+1
32539         XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
32540         IDLAM(LKNT,3)=0
32541         IDLAM(LKNT,1)=KF1
32542         IDLAM(LKNT,2)=SIGN(24,KCHG(IFL,1))
32543       ENDIF
32544       IF(XMI.GT.XMB+XMSF2) THEN
32545         IF(MOD(IFL,2).EQ.0) THEN
32546           IF(ILR.EQ.1) THEN
32547             AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL-1,3)
32548           ELSE
32549             AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL-1,3)
32550           ENDIF
32551         ELSE
32552           IF(ILR.EQ.1) THEN
32553             AL=1D0/SR2*SFMIX(IFL,1)*SFMIX(IFL+1,3)
32554           ELSE
32555             AL=1D0/SR2*SFMIX(IFL,3)*SFMIX(IFL+1,3)
32556           ENDIF
32557         ENDIF
32558         XL=PYLAMF(XMI2,XMSF2**2,XMB**2)
32559         LKNT=LKNT+1
32560         XLAM(LKNT)=C1/4D0/XMI3*XL**1.5D0/XMB**2*AL**2
32561         IDLAM(LKNT,3)=0
32562         IDLAM(LKNT,1)=KF2
32563         IDLAM(LKNT,2)=SIGN(24,KCHG(IFL,1))
32564       ENDIF
32565  
32566 C...SF -> SF' + HC
32567       XMB=PMAS(37,1)
32568       IF(MOD(IFL,2).EQ.0) THEN
32569         KF1=KSUSY1+IFL-1
32570       ELSE
32571         KF1=KSUSY1+IFL+1
32572       ENDIF
32573       KF2=KF1+KSUSY1
32574       XMSF1=PMAS(PYCOMP(KF1),1)
32575       XMSF2=PMAS(PYCOMP(KF2),1)
32576       IF(XMI.GT.XMB+XMSF1) THEN
32577         XMF=0D0
32578         XMFP=0D0
32579         AT=0D0
32580         AB=0D0
32581         IF(MOD(IFL,2).EQ.0) THEN
32582 C...T1-> B1 HC
32583           IF(ILR.EQ.1) THEN
32584             CH1=-SFMIX(IFL,1)*SFMIX(IFL-1,1)
32585             CH2= SFMIX(IFL,2)*SFMIX(IFL-1,2)
32586             CH3=-SFMIX(IFL,1)*SFMIX(IFL-1,2)
32587             CH4=-SFMIX(IFL,2)*SFMIX(IFL-1,1)
32588 C...T2-> B1 HC
32589           ELSE
32590             CH1= SFMIX(IFL,3)*SFMIX(IFL-1,1)
32591             CH2=-SFMIX(IFL,4)*SFMIX(IFL-1,2)
32592             CH3= SFMIX(IFL,3)*SFMIX(IFL-1,2)
32593             CH4= SFMIX(IFL,4)*SFMIX(IFL-1,1)
32594           ENDIF
32595           IF(IFL.EQ.6) THEN
32596             XMF=XMTOP
32597             XMFP=XMBOT
32598             AT=ATRIT
32599             AB=ATRIB
32600           ENDIF
32601         ELSE
32602 C...B1 -> T1 HC
32603           IF(ILR.EQ.1) THEN
32604             CH1=-SFMIX(IFL+1,1)*SFMIX(IFL,1)
32605             CH2= SFMIX(IFL+1,2)*SFMIX(IFL,2)
32606             CH3=-SFMIX(IFL+1,1)*SFMIX(IFL,2)
32607             CH4=-SFMIX(IFL+1,2)*SFMIX(IFL,1)
32608 C...B2-> T1 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,4)*SFMIX(IFL+1,1)
32613             CH4= SFMIX(IFL,3)*SFMIX(IFL+1,2)
32614           ENDIF
32615           IF(IFL.EQ.5) THEN
32616             XMF=XMTOP
32617             XMFP=XMBOT
32618             AT=ATRIT
32619             AB=ATRIB
32620           ENDIF
32621         ENDIF
32622         XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
32623         LKNT=LKNT+1
32624         AL=CH1*(XMW2*2D0*CBETA*SBETA-XMFP**2*TANB-XMF**2/TANB)+
32625      &  CH2*2D0*XMF*XMFP/(2D0*CBETA*SBETA)+
32626      &  CH3*XMFP*(-XMU+AB*TANB)+CH4*XMF*(-XMU+AT/TANB)
32627         XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)/XMW2*AL**2
32628         IDLAM(LKNT,3)=0
32629         IDLAM(LKNT,1)=KF1
32630         IDLAM(LKNT,2)=SIGN(37,KCHG(IFL,1))
32631       ENDIF
32632       IF(XMI.GT.XMB+XMSF2) THEN
32633         XMF=0D0
32634         XMFP=0D0
32635         AT=0D0
32636         AB=0D0
32637         IF(MOD(IFL,2).EQ.0) THEN
32638 C...T1-> B2 HC
32639           IF(ILR.EQ.1) THEN
32640             CH1= SFMIX(IFL-1,3)*SFMIX(IFL,1)
32641             CH2=-SFMIX(IFL-1,4)*SFMIX(IFL,2)
32642             CH3= SFMIX(IFL-1,4)*SFMIX(IFL,1)
32643             CH4= SFMIX(IFL-1,3)*SFMIX(IFL,2)
32644 C...T2-> B2 HC
32645           ELSE
32646             CH1= -SFMIX(IFL,3)*SFMIX(IFL-1,3)
32647             CH2= SFMIX(IFL,4)*SFMIX(IFL-1,4)
32648             CH3= -SFMIX(IFL,3)*SFMIX(IFL-1,4)
32649             CH4= -SFMIX(IFL,4)*SFMIX(IFL-1,3)
32650           ENDIF
32651           IF(IFL.EQ.6) THEN
32652             XMF=XMTOP
32653             XMFP=XMBOT
32654             AT=ATRIT
32655             AB=ATRIB
32656           ENDIF
32657         ELSE
32658 C...B1 -> T2 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,3)*SFMIX(IFL,2)
32663             CH4= SFMIX(IFL+1,4)*SFMIX(IFL,1)
32664 C...B2-> T2 HC
32665           ELSE
32666             CH1= -SFMIX(IFL+1,3)*SFMIX(IFL,3)
32667             CH2= SFMIX(IFL+1,4)*SFMIX(IFL,4)
32668             CH3= -SFMIX(IFL+1,3)*SFMIX(IFL,4)
32669             CH4= -SFMIX(IFL+1,4)*SFMIX(IFL,3)
32670           ENDIF
32671           IF(IFL.EQ.5) THEN
32672             XMF=XMTOP
32673             XMFP=XMBOT
32674             AT=ATRIT
32675             AB=ATRIB
32676           ENDIF
32677         ENDIF
32678         XL=PYLAMF(XMI2,XMSF1**2,XMB**2)
32679         LKNT=LKNT+1
32680         AL=CH1*(XMW2*2D0*CBETA*SBETA-XMFP**2*TANB-XMF**2/TANB)+
32681      &  CH2*2D0*XMF*XMFP/(2D0*CBETA*SBETA)+
32682      &  CH3*XMFP*(-XMU+AB*TANB)+CH4*XMF*(-XMU+AT/TANB)
32683         XLAM(LKNT)=C1/8D0/XMI3*SQRT(XL)/XMW2*AL**2
32684         IDLAM(LKNT,3)=0
32685         IDLAM(LKNT,1)=KF2
32686         IDLAM(LKNT,2)=SIGN(37,KCHG(IFL,1))
32687       ENDIF
32688  
32689 C...2-BODY DECAYS OF SQUARK -> QUARK GLUINO
32690  
32691       IF(IFL.LE.6) THEN
32692         XMFP=0D0
32693         XMF=0D0
32694         IF(IFL.EQ.6) XMF=PMAS(6,1)
32695         IF(IFL.EQ.5) XMF=PMAS(5,1)
32696         XMJ=PMAS(PYCOMP(KSUSY1+21),1)
32697         AXMJ=ABS(XMJ)
32698         IF(XMI.GE.AXMJ+XMF) THEN
32699           AL=-SFMIX(IFL,3)
32700           BL=SFMIX(IFL,1)
32701           AR=-SFMIX(IFL,4)
32702           BR=SFMIX(IFL,2)
32703 C...F1 -> F CHI
32704           IF(ILR.EQ.1) THEN
32705             CA=AL
32706             CB=BL
32707 C...F2 -> F CHI
32708           ELSE
32709             CA=AR
32710             CB=BR
32711           ENDIF
32712           LKNT=LKNT+1
32713           XMA2=XMJ**2
32714           XMB2=XMF**2
32715           XL=PYLAMF(XMI2,XMA2,XMB2)
32716           XLAM(LKNT)=4D0/3D0*AS/2D0/XMI3*SQRT(XL)*((XMI2-XMB2-XMA2)*
32717      &    (CA**2+CB**2)+4D0*CA*CB*XMJ*XMF)
32718           IDLAM(LKNT,1)=KSUSY1+21
32719           IDLAM(LKNT,2)=IFL
32720           IDLAM(LKNT,3)=0
32721         ENDIF
32722       ENDIF
32723  
32724 C...IF NOTHING ELSE FOR T1, THEN T1* -> C+CHI0
32725       IF(KFIN.EQ.KSUSY1+6.AND.PMAS(KCIN,1).GT.
32726      &PMAS(PYCOMP(KSUSY1+22),1)+PMAS(4,1)) THEN
32727 C...THIS IS A BACK-OF-THE-ENVELOPE ESTIMATE
32728 C...M = 1/(16PI**2)G**3 = G*2/(4PI) G/(4PI) = C1 * G/(4PI)
32729 C...M*M = C1**2 * G**2/(16PI**2)
32730 C...G = 1/(8PI)P/MI**2 * M*M = C1**3/(32PI**2)*LAM/(2*MI**3)
32731         LKNT=LKNT+1
32732         XL=PYLAMF(XMI2,0D0,PMAS(PYCOMP(KSUSY1+22),1)**2)
32733         XLAM(LKNT)=C1**3/64D0/PI**2/XMI3*SQRT(XL)
32734         IF(XLAM(LKNT).EQ.0) XLAM(LKNT)=1D-3
32735         IDLAM(LKNT,1)=KSUSY1+22
32736         IDLAM(LKNT,2)=4
32737         IDLAM(LKNT,3)=0
32738       ENDIF
32739  
32740       IKNT=LKNT
32741       XLAM(0)=0D0
32742       DO 130 I=1,IKNT
32743         IF(XLAM(I).LT.0D0) XLAM(I)=0D0
32744         XLAM(0)=XLAM(0)+XLAM(I)
32745   130 CONTINUE
32746       IF(XLAM(0).EQ.0D0) XLAM(0)=1D-3
32747  
32748       RETURN
32749       END
32750  
32751 C*********************************************************************
32752  
32753 C...PYGLUI
32754 C...Calculates gluino decay modes.
32755  
32756       SUBROUTINE PYGLUI(KFIN,XLAM,IDLAM,IKNT)
32757  
32758 C...Double precision and integer declarations.
32759       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
32760       IMPLICIT INTEGER(I-N)
32761       INTEGER PYK,PYCHGE,PYCOMP
32762 C...Parameter statement to help give large particle numbers.
32763       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
32764 C...Commonblocks.
32765       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
32766       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
32767       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
32768       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
32769      &SFMIX(16,4)
32770       COMMON/PYINTS/XXM(20)
32771       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
32772  
32773 C...Local variables.
32774       INTEGER KFIN,KCIN,KF
32775       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
32776      &XMZ,XMZ2,AXMJ,AXMI
32777       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMA2,XMB2,XMFP
32778       DOUBLE PRECISION C1L,C1R,D1L,D1R
32779       DOUBLE PRECISION C2L,C2R,D2L,D2R
32780       DOUBLE PRECISION PYLAMF,XL
32781       DOUBLE PRECISION TANW,XW,AEM,C1,AS,S12MAX,S12MIN
32782       DOUBLE PRECISION CA,CB,AL,AR,BL,BR
32783       DOUBLE PRECISION ALFA,BETA
32784       DOUBLE PRECISION SW,CW,SINB,COSB,QT,T3
32785       DOUBLE PRECISION XLAM(0:200)
32786       INTEGER IDLAM(200,3)
32787       INTEGER LKNT,IX,IC,ILR,IDU,J,IJ,I,IKNT,IFL
32788       DOUBLE PRECISION SR2
32789       DOUBLE PRECISION GAM
32790       DOUBLE PRECISION PYALEM,PI,PYALPS,EI
32791       EXTERNAL PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
32792       DOUBLE PRECISION PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
32793       DOUBLE PRECISION PREC
32794       INTEGER KFNCHI(4),KFCCHI(2)
32795       DATA PI/3.141592654D0/
32796       DATA SR2/1.4142136D0/
32797       DATA PREC/1D-2/
32798       DATA KFNCHI/1000022,1000023,1000025,1000035/
32799       DATA KFCCHI/1000024,1000037/
32800  
32801 C...COUNT THE NUMBER OF DECAY MODES
32802       LKNT=0
32803       IF(KFIN.NE.KSUSY1+21) RETURN
32804       KCIN=PYCOMP(KFIN)
32805  
32806       XMW=PMAS(24,1)
32807       XMW2=XMW**2
32808       XMZ=PMAS(23,1)
32809       XMZ2=XMZ**2
32810       XW=PARU(102)
32811       TANW = SQRT(XW/(1D0-XW))
32812  
32813       XMI=PMAS(KCIN,1)
32814       AXMI=ABS(XMI)
32815       XMI2=XMI**2
32816       AEM=PYALEM(XMI2)
32817       AS =PYALPS(XMI2)
32818       C1=AEM/XW
32819       XMI3=XMI**3
32820       BETA=ATAN(RMSS(5))
32821  
32822 C...2-BODY DECAYS OF GLUINO -> GRAVITINO GLUON
32823  
32824       IF(IMSS(11).EQ.1) THEN
32825         XMP=RMSS(29)
32826         IDG=39+KSUSY1
32827         XMGR=PMAS(PYCOMP(IDG),1)
32828         XFAC=(XMI2/(XMP*XMGR))**2*XMI/48D0/PI
32829         IF(AXMI.GT.XMGR) THEN
32830           LKNT=LKNT+1
32831           IDLAM(LKNT,1)=IDG
32832           IDLAM(LKNT,2)=21
32833           IDLAM(LKNT,3)=0
32834           XLAM(LKNT)=XFAC
32835         ENDIF
32836       ENDIF
32837  
32838 C...2-BODY DECAYS OF GLUINO -> QUARK SQUARK
32839  
32840       DO 110 IFL=1,6
32841         DO 100 ILR=1,2
32842           XMJ=PMAS(PYCOMP(ILR*KSUSY1+IFL),1)
32843           AXMJ=ABS(XMJ)
32844           XMF=PMAS(IFL,1)
32845           IDU=3-(1+MOD(IFL,2))
32846           IF(XMI.GE.AXMJ+XMF) THEN
32847 C...Minus sign difference from gluino-quark-squark feynman rules
32848             AL=SFMIX(IFL,1)
32849             BL=-SFMIX(IFL,3)
32850             AR=SFMIX(IFL,2)
32851             BR=-SFMIX(IFL,4)
32852 C...F1 -> F CHI
32853             IF(ILR.EQ.1) THEN
32854               CA=AL
32855               CB=BL
32856 C...F2 -> F CHI
32857             ELSE
32858               CA=AR
32859               CB=BR
32860             ENDIF
32861             LKNT=LKNT+1
32862             XMA2=XMJ**2
32863             XMB2=XMF**2
32864             XL=PYLAMF(XMI2,XMA2,XMB2)
32865             XLAM(LKNT)=4D0/8D0*AS/4D0/XMI3*SQRT(XL)*((XMI2+XMB2-XMA2)*
32866      &      (CA**2+CB**2)-4D0*CA*CB*XMI*XMF)
32867             IDLAM(LKNT,1)=ILR*KSUSY1+IFL
32868             IDLAM(LKNT,2)=-IFL
32869             IDLAM(LKNT,3)=0
32870             LKNT=LKNT+1
32871             XLAM(LKNT)=XLAM(LKNT-1)
32872             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
32873             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
32874             IDLAM(LKNT,3)=0
32875           ENDIF
32876   100   CONTINUE
32877   110 CONTINUE
32878  
32879 C...3-BODY DECAYS TO GAUGINO FERMION-FERMION
32880 C...GLUINO -> NI Q QBAR
32881       DO 160 IX=1,4
32882         XMJ=SMZ(IX)
32883         AXMJ=ABS(XMJ)
32884         IF(XMI.GE.AXMJ) THEN
32885           XXM(1)=0D0
32886           XXM(2)=XMJ
32887           XXM(3)=0D0
32888           XXM(4)=XMI
32889           XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
32890           XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
32891           XXM(7)=1D6
32892           XXM(8)=0D0
32893           XXM(9)=0D0
32894           XXM(10)=0D0
32895           S12MIN=0D0
32896           S12MAX=(XMI-AXMJ)**2
32897 C...D-TYPE QUARKS
32898           XXM(11)=0D0
32899           XXM(12)=0D0
32900           XXM(13)=1D0
32901           XXM(14)=-SR2*(-0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
32902           XXM(15)=1D0
32903           XXM(16)=SR2*(-TANW*ZMIX(IX,1)/3D0)
32904           IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 120
32905           IF(XMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
32906             LKNT=LKNT+1
32907             XLAM(LKNT)=C1*AS/XMI3/(16D0*PI)*
32908      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-2)
32909             IDLAM(LKNT,1)=KFNCHI(IX)
32910             IDLAM(LKNT,2)=1
32911             IDLAM(LKNT,3)=-1
32912           ENDIF
32913           IF(XMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
32914             LKNT=LKNT+1
32915             XLAM(LKNT)=XLAM(LKNT-1)
32916             IDLAM(LKNT,1)=KFNCHI(IX)
32917             IDLAM(LKNT,2)=3
32918             IDLAM(LKNT,3)=-3
32919           ENDIF
32920   120     CONTINUE
32921           IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 130
32922           IF(XMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
32923             CALL PYTBBN(IX,80,-1D0/3D0,AXMI,GAM)
32924             LKNT=LKNT+1
32925             XLAM(LKNT)=GAM
32926             IDLAM(LKNT,1)=KFNCHI(IX)
32927             IDLAM(LKNT,2)=5
32928             IDLAM(LKNT,3)=-5
32929           ENDIF
32930 C...U-TYPE QUARKS
32931   130     CONTINUE
32932           XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
32933           XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
32934           XXM(13)=1D0
32935           XXM(14)=-SR2*(0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
32936           XXM(15)=1D0
32937           XXM(16)=SR2*(2D0*TANW*ZMIX(IX,1)/3D0)
32938           IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 140
32939           IF(XMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
32940             LKNT=LKNT+1
32941             XLAM(LKNT)=C1*AS/XMI3/(16D0*PI)*
32942      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-2)
32943             IDLAM(LKNT,1)=KFNCHI(IX)
32944             IDLAM(LKNT,2)=2
32945             IDLAM(LKNT,3)=-2
32946           ENDIF
32947           IF(XMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
32948             LKNT=LKNT+1
32949             XLAM(LKNT)=XLAM(LKNT-1)
32950             IDLAM(LKNT,1)=KFNCHI(IX)
32951             IDLAM(LKNT,2)=4
32952             IDLAM(LKNT,3)=-4
32953           ENDIF
32954   140     CONTINUE
32955 C...INCLUDE THE DECAY GLUINO -> NJ + T + T~
32956 C...IF THE DECAY GLUINO -> ST + T CANNOT OCCUR
32957           IF(XMI.GE.PMAS(PYCOMP(KSUSY1+6),1)+PMAS(6,1)) GOTO 150
32958           XMF=PMAS(6,1)
32959           IF(XMI.GE.AXMJ+2D0*XMF) THEN
32960             CALL PYTBBN(IX,80,2D0/3D0,AXMI,GAM)
32961             LKNT=LKNT+1
32962             XLAM(LKNT)=GAM
32963             IDLAM(LKNT,1)=KFNCHI(IX)
32964             IDLAM(LKNT,2)=6
32965             IDLAM(LKNT,3)=-6
32966           ENDIF
32967   150     CONTINUE
32968         ENDIF
32969   160 CONTINUE
32970  
32971 C...GLUINO -> CI Q QBAR'
32972       DO 190 IX=1,2
32973         XMJ=SMW(IX)
32974         AXMJ=ABS(XMJ)
32975         IF(XMI.GE.AXMJ) THEN
32976           S12MIN=0D0
32977           S12MAX=(AXMI-AXMJ)**2
32978           XXM(1)=0D0
32979           XXM(2)=XMJ
32980           XXM(3)=0D0
32981           XXM(4)=XMI
32982           XXM(5)=0D0
32983           XXM(6)=0D0
32984           XXM(9)=1D6
32985           XXM(10)=0D0
32986           XXM(7)=UMIX(IX,1)*SR2
32987           XXM(8)=VMIX(IX,1)*SR2
32988           XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
32989           XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
32990           IF( XXM(11).LT.AXMI .OR. XXM(12).LT.AXMI ) GOTO 170
32991           IF(XMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
32992             LKNT=LKNT+1
32993             XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
32994      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
32995             IDLAM(LKNT,1)=KFCCHI(IX)
32996             IDLAM(LKNT,2)=1
32997             IDLAM(LKNT,3)=-2
32998             LKNT=LKNT+1
32999             XLAM(LKNT)=XLAM(LKNT-1)
33000             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
33001             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
33002             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
33003           ENDIF
33004           IF(XMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
33005             LKNT=LKNT+1
33006             XLAM(LKNT)=XLAM(LKNT-1)
33007             IDLAM(LKNT,1)=KFCCHI(IX)
33008             IDLAM(LKNT,2)=3
33009             IDLAM(LKNT,3)=-4
33010             LKNT=LKNT+1
33011             XLAM(LKNT)=XLAM(LKNT-1)
33012             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
33013             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
33014             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
33015           ENDIF
33016   170     CONTINUE
33017  
33018           IF(XMI.GE.PMAS(PYCOMP(KSUSY1+5),1)+PMAS(5,1)) GOTO 180
33019           IF(XMI.GE.PMAS(PYCOMP(KSUSY1+6),1)+PMAS(6,1)) GOTO 180
33020           XMF=PMAS(6,1)
33021           XMFP=PMAS(5,1)
33022           IF(XMI.GE.AXMJ+XMF+XMFP) THEN
33023             CALL PYTBBC(IX,80,AXMI,GAM)
33024             LKNT=LKNT+1
33025             XLAM(LKNT)=GAM
33026             IDLAM(LKNT,1)=KFCCHI(IX)
33027             IDLAM(LKNT,2)=5
33028             IDLAM(LKNT,3)=-6
33029             LKNT=LKNT+1
33030             XLAM(LKNT)=XLAM(LKNT-1)
33031             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
33032             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
33033             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
33034           ENDIF
33035   180     CONTINUE
33036         ENDIF
33037   190 CONTINUE
33038  
33039       IKNT=LKNT
33040       XLAM(0)=0D0
33041       DO 200 I=1,IKNT
33042         IF(XLAM(I).LT.0D0) XLAM(I)=0D0
33043         XLAM(0)=XLAM(0)+XLAM(I)
33044   200 CONTINUE
33045       IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
33046  
33047       RETURN
33048       END
33049 
33050 C*********************************************************************
33051  
33052 C...PYTECM
33053 C...Finds the s-hat dependent eigenvalues of the inverse propagator
33054 C...matrix for gamma, Z, technirho, and techniomega to optimize the
33055 C...phase space generation.
33056  
33057       SUBROUTINE PYTECM(S1,S2)
33058  
33059 C...Double precision and integer declarations.
33060       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
33061       IMPLICIT INTEGER(I-N)
33062       INTEGER PYK,PYCHGE,PYCOMP
33063 C...Parameter statement to help give large particle numbers.
33064       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
33065 C...Commonblocks.
33066       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
33067       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
33068       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
33069       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/
33070  
33071 C...Local variables.
33072       DOUBLE PRECISION AR(4,4),WR(4),ZR(4,4),ZI(4,4),WORK(12,12),
33073      &AT(4,4),WI(4),FV1(4),FV2(4),FV3(4),sh,aem,tanw,ct2w,qupd,alprht,
33074      &far,fao,fzr,fzo,shr,R1,R2,S1,S2,WDTP(0:200),WDTE(0:200,0:5)
33075       INTEGER i,j,ierr
33076 
33077       SH=PMAS(54,1)**2
33078       AEM=PYALEM(SH)
33079 
33080       TANW=SQRT(PARU(102)/(1D0-PARU(102)))
33081       CT2W=(1D0-2D0*PARU(102))/(2D0*PARU(102)/TANW)
33082       QUPD=2D0*PARP(143)-1D0
33083 
33084       ALPRHT=2.91D0*(3D0/PARP(144))
33085       FAR=SQRT(AEM/ALPRHT)
33086       FAO=FAR*QUPD
33087       FZR=FAR*CT2W
33088       FZO=-FAO*TANW
33089 
33090       AR(1,1) = SH
33091       AR(2,2) = SH-PMAS(23,1)**2
33092       AR(3,3) = SH-PMAS(54,1)**2
33093       AR(4,4) = SH-PMAS(56,1)**2
33094       AR(1,2) = 0D0
33095       AR(2,1) = 0D0
33096       AR(1,3) = -SH*FAR
33097       AR(3,1) = AR(1,3)
33098       AR(1,4) = -SH*FAO
33099       AR(4,1) = AR(1,4)
33100       AR(2,3) = -SH*FZR
33101       AR(3,2) = AR(2,3)
33102       AR(2,4) = -SH*FZO
33103       AR(4,2) = AR(2,4)
33104       AR(3,4) = 0D0
33105       AR(4,3) = 0D0
33106 CCCCCCCC
33107       DO 110 I=1,4
33108         DO 100 J=1,4
33109           AT(I,J)=0D0
33110   100   CONTINUE
33111   110 CONTINUE
33112       SHR=SQRT(SH)
33113       CALL PYWIDT(23,SH,WDTP,WDTE)
33114       AT(2,2) = WDTP(0)*SHR
33115       CALL PYWIDT(54,SH,WDTP,WDTE)
33116       AT(3,3) = WDTP(0)*SHR
33117       CALL PYWIDT(56,SH,WDTP,WDTE)
33118       AT(4,4) = WDTP(0)*SHR
33119 CCCC
33120       CALL PYEICG(4,4,AR,AT,WR,WI,0,ZR,ZI,FV1,FV2,FV3,IERR)
33121       DO 120 I=1,4
33122         WI(I)=SQRT(ABS(SH-WR(I)))
33123         WR(I)=ABS(WR(I))
33124   120 CONTINUE
33125       R1=MIN(WR(1),WR(2),WR(3),WR(4))
33126       R2=1D20
33127       S1=0D0
33128       S2=0D0
33129       DO 130 I=1,4
33130         IF(ABS(WR(I)-R1).LT.1D-6) THEN
33131           S1=WI(I)
33132           GOTO 130
33133         ENDIF
33134         IF(WR(I).LE.R2) THEN
33135           R2=WR(I)
33136           S2=WI(I)
33137         ENDIF
33138   130 CONTINUE
33139       S1=S1**2
33140       S2=S2**2
33141       RETURN
33142       END
33143 
33144 
33145 
33146 C*********************************************************************
33147 
33148 C...PYEIGC
33149 C...Finds eigenvalues of a general complex matrix
33150 
33151       SUBROUTINE PYEICG(NM,N,AR,AI,WR,WI,MATZ,ZR,ZI,FV1,FV2,FV3,IERR)
33152 C
33153       INTEGER N,NM,IS1,IS2,IERR,MATZ
33154       DOUBLE PRECISION AR(NM,N),AI(NM,N),WR(N),WI(N),ZR(NM,N),ZI(NM,N),
33155      X       FV1(N),FV2(N),FV3(N)
33156 C
33157 C     THIS SUBROUTINE CALLS THE RECOMMENDED SEQUENCE OF
33158 C     SUBROUTINES FROM THE EIGENSYSTEM SUBROUTINE PACKAGE (EISPACK)
33159 C     TO FIND THE EIGENVALUES AND EIGENVECTORS (IF DESIRED)
33160 C     OF A COMPLEX GENERAL MATRIX.
33161 C
33162 C     ON INPUT
33163 C
33164 C        NM  MUST BE SET TO THE ROW DIMENSION OF THE TWO-DIMENSIONAL
33165 C        ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33166 C        DIMENSION STATEMENT.
33167 C
33168 C        N  IS THE ORDER OF THE MATRIX  A=(AR,AI).
33169 C
33170 C        AR  AND  AI  CONTAIN THE REAL AND IMAGINARY PARTS,
33171 C        RESPECTIVELY, OF THE COMPLEX GENERAL MATRIX.
33172 C
33173 C        MATZ  IS AN INTEGER VARIABLE SET EQUAL TO ZERO IF
33174 C        ONLY EIGENVALUES ARE DESIRED.  OTHERWISE IT IS SET TO
33175 C        ANY NON-ZERO INTEGER FOR BOTH EIGENVALUES AND EIGENVECTORS.
33176 C
33177 C     ON OUTPUT
33178 C
33179 C        WR  AND  WI  CONTAIN THE REAL AND IMAGINARY PARTS,
33180 C        RESPECTIVELY, OF THE EIGENVALUES.
33181 C
33182 C        ZR  AND  ZI  CONTAIN THE REAL AND IMAGINARY PARTS,
33183 C        RESPECTIVELY, OF THE EIGENVECTORS IF MATZ IS NOT ZERO.
33184 C
33185 C        IERR  IS AN INTEGER OUTPUT VARIABLE SET EQUAL TO AN ERROR
33186 C           COMPLETION CODE DESCRIBED IN THE DOCUMENTATION FOR COMQR
33187 C           AND COMQR2.  THE NORMAL COMPLETION CODE IS ZERO.
33188 C
33189 C        FV1, FV2, AND  FV3  ARE TEMPORARY STORAGE ARRAYS.
33190 C
33191 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33192 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33193 C
33194 C     THIS VERSION DATED AUGUST 1983.
33195 C
33196 C     ------------------------------------------------------------------
33197 C
33198       IF (N .LE. NM) GO TO 10
33199       IERR = 10 * N
33200       GO TO 50
33201 C
33202    10 CALL  CBAL(NM,N,AR,AI,IS1,IS2,FV1)
33203       CALL  CORTH(NM,N,IS1,IS2,AR,AI,FV2,FV3)
33204       IF (MATZ .NE. 0) GO TO 20
33205 C     .......... FIND EIGENVALUES ONLY ..........
33206       CALL  COMQR(NM,N,IS1,IS2,AR,AI,WR,WI,IERR)
33207       GO TO 50
33208 C     .......... FIND BOTH EIGENVALUES AND EIGENVECTORS ..........
33209    20 CALL  COMQR2(NM,N,IS1,IS2,FV2,FV3,AR,AI,WR,WI,ZR,ZI,IERR)
33210       IF (IERR .NE. 0) GO TO 50
33211       CALL  CBABK2(NM,N,IS1,IS2,FV1,N,ZR,ZI)
33212    50 RETURN
33213       END
33214       SUBROUTINE CBABK2(NM,N,LOW,IGH,SCALE,M,ZR,ZI)
33215 C
33216       INTEGER I,J,K,M,N,II,NM,IGH,LOW
33217       DOUBLE PRECISION SCALE(N),ZR(NM,M),ZI(NM,M)
33218       DOUBLE PRECISION S
33219 C
33220 C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE
33221 C     CBABK2, WHICH IS A COMPLEX VERSION OF BALBAK,
33222 C     NUM. MATH. 13, 293-304(1969) BY PARLETT AND REINSCH.
33223 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 315-326(1971).
33224 C
33225 C     THIS SUBROUTINE FORMS THE EIGENVECTORS OF A COMPLEX GENERAL
33226 C     MATRIX BY BACK TRANSFORMING THOSE OF THE CORRESPONDING
33227 C     BALANCED MATRIX DETERMINED BY  CBAL.
33228 C
33229 C     ON INPUT
33230 C
33231 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
33232 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33233 C          DIMENSION STATEMENT.
33234 C
33235 C        N IS THE ORDER OF THE MATRIX.
33236 C
33237 C        LOW AND IGH ARE INTEGERS DETERMINED BY  CBAL.
33238 C
33239 C        SCALE CONTAINS INFORMATION DETERMINING THE PERMUTATIONS
33240 C          AND SCALING FACTORS USED BY  CBAL.
33241 C
33242 C        M IS THE NUMBER OF EIGENVECTORS TO BE BACK TRANSFORMED.
33243 C
33244 C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
33245 C          RESPECTIVELY, OF THE EIGENVECTORS TO BE
33246 C          BACK TRANSFORMED IN THEIR FIRST M COLUMNS.
33247 C
33248 C     ON OUTPUT
33249 C
33250 C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
33251 C          RESPECTIVELY, OF THE TRANSFORMED EIGENVECTORS
33252 C          IN THEIR FIRST M COLUMNS.
33253 C
33254 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33255 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33256 C
33257 C     THIS VERSION DATED AUGUST 1983.
33258 C
33259 C     ------------------------------------------------------------------
33260 C
33261       IF (M .EQ. 0) GO TO 200
33262       IF (IGH .EQ. LOW) GO TO 120
33263 C
33264       DO 110 I = LOW, IGH
33265          S = SCALE(I)
33266 C     .......... LEFT HAND EIGENVECTORS ARE BACK TRANSFORMED
33267 C                IF THE FOREGOING STATEMENT IS REPLACED BY
33268 C                S=1.0D0/SCALE(I). ..........
33269          DO 100 J = 1, M
33270             ZR(I,J) = ZR(I,J) * S
33271             ZI(I,J) = ZI(I,J) * S
33272   100    CONTINUE
33273 C
33274   110 CONTINUE
33275 C     .......... FOR I=LOW-1 STEP -1 UNTIL 1,
33276 C                IGH+1 STEP 1 UNTIL N DO -- ..........
33277   120 DO 140 II = 1, N
33278          I = II
33279          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 140
33280          IF (I .LT. LOW) I = LOW - II
33281          K = SCALE(I)
33282          IF (K .EQ. I) GO TO 140
33283 C
33284          DO 130 J = 1, M
33285             S = ZR(I,J)
33286             ZR(I,J) = ZR(K,J)
33287             ZR(K,J) = S
33288             S = ZI(I,J)
33289             ZI(I,J) = ZI(K,J)
33290             ZI(K,J) = S
33291   130    CONTINUE
33292 C
33293   140 CONTINUE
33294 C
33295   200 RETURN
33296       END
33297       SUBROUTINE CBAL(NM,N,AR,AI,LOW,IGH,SCALE)
33298 C
33299       INTEGER I,J,K,L,M,N,JJ,NM,IGH,LOW,IEXC
33300       DOUBLE PRECISION AR(NM,N),AI(NM,N),SCALE(N)
33301       DOUBLE PRECISION C,F,G,R,S,B2,RADIX
33302       LOGICAL NOCONV
33303 C
33304 C     THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE
33305 C     CBALANCE, WHICH IS A COMPLEX VERSION OF BALANCE,
33306 C     NUM. MATH. 13, 293-304(1969) BY PARLETT AND REINSCH.
33307 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 315-326(1971).
33308 C
33309 C     THIS SUBROUTINE BALANCES A COMPLEX MATRIX AND ISOLATES
33310 C     EIGENVALUES WHENEVER POSSIBLE.
33311 C
33312 C     ON INPUT
33313 C
33314 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
33315 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33316 C          DIMENSION STATEMENT.
33317 C
33318 C        N IS THE ORDER OF THE MATRIX.
33319 C
33320 C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
33321 C          RESPECTIVELY, OF THE COMPLEX MATRIX TO BE BALANCED.
33322 C
33323 C     ON OUTPUT
33324 C
33325 C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
33326 C          RESPECTIVELY, OF THE BALANCED MATRIX.
33327 C
33328 C        LOW AND IGH ARE TWO INTEGERS SUCH THAT AR(I,J) AND AI(I,J)
33329 C          ARE EQUAL TO ZERO IF
33330 C           (1) I IS GREATER THAN J AND
33331 C           (2) J=1,...,LOW-1 OR I=IGH+1,...,N.
33332 C
33333 C        SCALE CONTAINS INFORMATION DETERMINING THE
33334 C           PERMUTATIONS AND SCALING FACTORS USED.
33335 C
33336 C     SUPPOSE THAT THE PRINCIPAL SUBMATRIX IN ROWS LOW THROUGH IGH
33337 C     HAS BEEN BALANCED, THAT P(J) DENOTES THE INDEX INTERCHANGED
33338 C     WITH J DURING THE PERMUTATION STEP, AND THAT THE ELEMENTS
33339 C     OF THE DIAGONAL MATRIX USED ARE DENOTED BY D(I,J).  THEN
33340 C        SCALE(J) = P(J),    FOR J = 1,...,LOW-1
33341 C                 = D(J,J)       J = LOW,...,IGH
33342 C                 = P(J)         J = IGH+1,...,N.
33343 C     THE ORDER IN WHICH THE INTERCHANGES ARE MADE IS N TO IGH+1,
33344 C     THEN 1 TO LOW-1.
33345 C
33346 C     NOTE THAT 1 IS RETURNED FOR IGH IF IGH IS ZERO FORMALLY.
33347 C
33348 C     THE ALGOL PROCEDURE EXC CONTAINED IN CBALANCE APPEARS IN
33349 C     CBAL  IN LINE.  (NOTE THAT THE ALGOL ROLES OF IDENTIFIERS
33350 C     K,L HAVE BEEN REVERSED.)
33351 C
33352 C     ARITHMETIC IS REAL THROUGHOUT.
33353 C
33354 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33355 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33356 C
33357 C     THIS VERSION DATED AUGUST 1983.
33358 C
33359 C     ------------------------------------------------------------------
33360 C
33361       RADIX = 16.0D0
33362 C
33363       B2 = RADIX * RADIX
33364       K = 1
33365       L = N
33366       GO TO 100
33367 C     .......... IN-LINE PROCEDURE FOR ROW AND
33368 C                COLUMN EXCHANGE ..........
33369    20 SCALE(M) = J
33370       IF (J .EQ. M) GO TO 50
33371 C
33372       DO 30 I = 1, L
33373          F = AR(I,J)
33374          AR(I,J) = AR(I,M)
33375          AR(I,M) = F
33376          F = AI(I,J)
33377          AI(I,J) = AI(I,M)
33378          AI(I,M) = F
33379    30 CONTINUE
33380 C
33381       DO 40 I = K, N
33382          F = AR(J,I)
33383          AR(J,I) = AR(M,I)
33384          AR(M,I) = F
33385          F = AI(J,I)
33386          AI(J,I) = AI(M,I)
33387          AI(M,I) = F
33388    40 CONTINUE
33389 C
33390    50 GO TO (80,130), IEXC
33391 C     .......... SEARCH FOR ROWS ISOLATING AN EIGENVALUE
33392 C                AND PUSH THEM DOWN ..........
33393    80 IF (L .EQ. 1) GO TO 280
33394       L = L - 1
33395 C     .......... FOR J=L STEP -1 UNTIL 1 DO -- ..........
33396   100 DO 120 JJ = 1, L
33397          J = L + 1 - JJ
33398 C
33399          DO 110 I = 1, L
33400             IF (I .EQ. J) GO TO 110
33401             IF (AR(J,I) .NE. 0.0D0 .OR. AI(J,I) .NE. 0.0D0) GO TO 120
33402   110    CONTINUE
33403 C
33404          M = L
33405          IEXC = 1
33406          GO TO 20
33407   120 CONTINUE
33408 C
33409       GO TO 140
33410 C     .......... SEARCH FOR COLUMNS ISOLATING AN EIGENVALUE
33411 C                AND PUSH THEM LEFT ..........
33412   130 K = K + 1
33413 C
33414   140 DO 170 J = K, L
33415 C
33416          DO 150 I = K, L
33417             IF (I .EQ. J) GO TO 150
33418             IF (AR(I,J) .NE. 0.0D0 .OR. AI(I,J) .NE. 0.0D0) GO TO 170
33419   150    CONTINUE
33420 C
33421          M = K
33422          IEXC = 2
33423          GO TO 20
33424   170 CONTINUE
33425 C     .......... NOW BALANCE THE SUBMATRIX IN ROWS K TO L ..........
33426       DO 180 I = K, L
33427   180 SCALE(I) = 1.0D0
33428 C     .......... ITERATIVE LOOP FOR NORM REDUCTION ..........
33429   190 NOCONV = .FALSE.
33430 C
33431       DO 270 I = K, L
33432          C = 0.0D0
33433          R = 0.0D0
33434 C
33435          DO 200 J = K, L
33436             IF (J .EQ. I) GO TO 200
33437             C = C + DABS(AR(J,I)) + DABS(AI(J,I))
33438             R = R + DABS(AR(I,J)) + DABS(AI(I,J))
33439   200    CONTINUE
33440 C     .......... GUARD AGAINST ZERO C OR R DUE TO UNDERFLOW ..........
33441          IF (C .EQ. 0.0D0 .OR. R .EQ. 0.0D0) GO TO 270
33442          G = R / RADIX
33443          F = 1.0D0
33444          S = C + R
33445   210    IF (C .GE. G) GO TO 220
33446          F = F * RADIX
33447          C = C * B2
33448          GO TO 210
33449   220    G = R * RADIX
33450   230    IF (C .LT. G) GO TO 240
33451          F = F / RADIX
33452          C = C / B2
33453          GO TO 230
33454 C     .......... NOW BALANCE ..........
33455   240    IF ((C + R) / F .GE. 0.95D0 * S) GO TO 270
33456          G = 1.0D0 / F
33457          SCALE(I) = SCALE(I) * F
33458          NOCONV = .TRUE.
33459 C
33460          DO 250 J = K, N
33461             AR(I,J) = AR(I,J) * G
33462             AI(I,J) = AI(I,J) * G
33463   250    CONTINUE
33464 C
33465          DO 260 J = 1, L
33466             AR(J,I) = AR(J,I) * F
33467             AI(J,I) = AI(J,I) * F
33468   260    CONTINUE
33469 C
33470   270 CONTINUE
33471 C
33472       IF (NOCONV) GO TO 190
33473 C
33474   280 LOW = K
33475       IGH = L
33476       RETURN
33477       END
33478       SUBROUTINE CDIV(AR,AI,BR,BI,CR,CI)
33479       DOUBLE PRECISION AR,AI,BR,BI,CR,CI
33480 C
33481 C     COMPLEX DIVISION, (CR,CI) = (AR,AI)/(BR,BI)
33482 C
33483       DOUBLE PRECISION S,ARS,AIS,BRS,BIS
33484       S = DABS(BR) + DABS(BI)
33485       ARS = AR/S
33486       AIS = AI/S
33487       BRS = BR/S
33488       BIS = BI/S
33489       S = BRS**2 + BIS**2
33490       CR = (ARS*BRS + AIS*BIS)/S
33491       CI = (AIS*BRS - ARS*BIS)/S
33492       RETURN
33493       END
33494       SUBROUTINE COMQR(NM,N,LOW,IGH,HR,HI,WR,WI,IERR)
33495 C
33496       INTEGER I,J,L,N,EN,LL,NM,IGH,ITN,ITS,LOW,LP1,ENM1,IERR
33497       DOUBLE PRECISION HR(NM,N),HI(NM,N),WR(N),WI(N)
33498       DOUBLE PRECISION SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,NORM,TST1,TST2,
33499      X       PYTHAG
33500 C
33501 C     THIS SUBROUTINE IS A TRANSLATION OF A UNITARY ANALOGUE OF THE
33502 C     ALGOL PROCEDURE  COMLR, NUM. MATH. 12, 369-376(1968) BY MARTIN
33503 C     AND WILKINSON.
33504 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 396-403(1971).
33505 C     THE UNITARY ANALOGUE SUBSTITUTES THE QR ALGORITHM OF FRANCIS
33506 C     (COMP. JOUR. 4, 332-345(1962)) FOR THE LR ALGORITHM.
33507 C
33508 C     THIS SUBROUTINE FINDS THE EIGENVALUES OF A COMPLEX
33509 C     UPPER HESSENBERG MATRIX BY THE QR METHOD.
33510 C
33511 C     ON INPUT
33512 C
33513 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
33514 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33515 C          DIMENSION STATEMENT.
33516 C
33517 C        N IS THE ORDER OF THE MATRIX.
33518 C
33519 C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
33520 C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
33521 C          SET LOW=1, IGH=N.
33522 C
33523 C        HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
33524 C          RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
33525 C          THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN
33526 C          INFORMATION ABOUT THE UNITARY TRANSFORMATIONS USED IN
33527 C          THE REDUCTION BY  CORTH, IF PERFORMED.
33528 C
33529 C     ON OUTPUT
33530 C
33531 C        THE UPPER HESSENBERG PORTIONS OF HR AND HI HAVE BEEN
33532 C          DESTROYED.  THEREFORE, THEY MUST BE SAVED BEFORE
33533 C          CALLING  COMQR  IF SUBSEQUENT CALCULATION OF
33534 C          EIGENVECTORS IS TO BE PERFORMED.
33535 C
33536 C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
33537 C          RESPECTIVELY, OF THE EIGENVALUES.  IF AN ERROR
33538 C          EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
33539 C          FOR INDICES IERR+1,...,N.
33540 C
33541 C        IERR IS SET TO
33542 C          ZERO       FOR NORMAL RETURN,
33543 C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
33544 C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
33545 C
33546 C     CALLS CDIV FOR COMPLEX DIVISION.
33547 C     CALLS CSROOT FOR COMPLEX SQUARE ROOT.
33548 C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
33549 C
33550 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33551 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33552 C
33553 C     THIS VERSION DATED AUGUST 1983.
33554 C
33555 C     ------------------------------------------------------------------
33556 C
33557       IERR = 0
33558       IF (LOW .EQ. IGH) GO TO 180
33559 C     .......... CREATE REAL SUBDIAGONAL ELEMENTS ..........
33560       L = LOW + 1
33561 C
33562       DO 170 I = L, IGH
33563          LL = MIN0(I+1,IGH)
33564          IF (HI(I,I-1) .EQ. 0.0D0) GO TO 170
33565          NORM = PYTHAG(HR(I,I-1),HI(I,I-1))
33566          YR = HR(I,I-1) / NORM
33567          YI = HI(I,I-1) / NORM
33568          HR(I,I-1) = NORM
33569          HI(I,I-1) = 0.0D0
33570 C
33571          DO 155 J = I, IGH
33572             SI = YR * HI(I,J) - YI * HR(I,J)
33573             HR(I,J) = YR * HR(I,J) + YI * HI(I,J)
33574             HI(I,J) = SI
33575   155    CONTINUE
33576 C
33577          DO 160 J = LOW, LL
33578             SI = YR * HI(J,I) + YI * HR(J,I)
33579             HR(J,I) = YR * HR(J,I) - YI * HI(J,I)
33580             HI(J,I) = SI
33581   160    CONTINUE
33582 C
33583   170 CONTINUE
33584 C     .......... STORE ROOTS ISOLATED BY CBAL ..........
33585   180 DO 200 I = 1, N
33586          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
33587          WR(I) = HR(I,I)
33588          WI(I) = HI(I,I)
33589   200 CONTINUE
33590 C
33591       EN = IGH
33592       TR = 0.0D0
33593       TI = 0.0D0
33594       ITN = 30*N
33595 C     .......... SEARCH FOR NEXT EIGENVALUE ..........
33596   220 IF (EN .LT. LOW) GO TO 1001
33597       ITS = 0
33598       ENM1 = EN - 1
33599 C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
33600 C                FOR L=EN STEP -1 UNTIL LOW D0 -- ..........
33601   240 DO 260 LL = LOW, EN
33602          L = EN + LOW - LL
33603          IF (L .EQ. LOW) GO TO 300
33604          TST1 = DABS(HR(L-1,L-1)) + DABS(HI(L-1,L-1))
33605      X            + DABS(HR(L,L)) + DABS(HI(L,L))
33606          TST2 = TST1 + DABS(HR(L,L-1))
33607          IF (TST2 .EQ. TST1) GO TO 300
33608   260 CONTINUE
33609 C     .......... FORM SHIFT ..........
33610   300 IF (L .EQ. EN) GO TO 660
33611       IF (ITN .EQ. 0) GO TO 1000
33612       IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
33613       SR = HR(EN,EN)
33614       SI = HI(EN,EN)
33615       XR = HR(ENM1,EN) * HR(EN,ENM1)
33616       XI = HI(ENM1,EN) * HR(EN,ENM1)
33617       IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 340
33618       YR = (HR(ENM1,ENM1) - SR) / 2.0D0
33619       YI = (HI(ENM1,ENM1) - SI) / 2.0D0
33620       CALL CSROOT(YR**2-YI**2+XR,2.0D0*YR*YI+XI,ZZR,ZZI)
33621       IF (YR * ZZR + YI * ZZI .GE. 0.0D0) GO TO 310
33622       ZZR = -ZZR
33623       ZZI = -ZZI
33624   310 CALL CDIV(XR,XI,YR+ZZR,YI+ZZI,XR,XI)
33625       SR = SR - XR
33626       SI = SI - XI
33627       GO TO 340
33628 C     .......... FORM EXCEPTIONAL SHIFT ..........
33629   320 SR = DABS(HR(EN,ENM1)) + DABS(HR(ENM1,EN-2))
33630       SI = 0.0D0
33631 C
33632   340 DO 360 I = LOW, EN
33633          HR(I,I) = HR(I,I) - SR
33634          HI(I,I) = HI(I,I) - SI
33635   360 CONTINUE
33636 C
33637       TR = TR + SR
33638       TI = TI + SI
33639       ITS = ITS + 1
33640       ITN = ITN - 1
33641 C     .......... REDUCE TO TRIANGLE (ROWS) ..........
33642       LP1 = L + 1
33643 C
33644       DO 500 I = LP1, EN
33645          SR = HR(I,I-1)
33646          HR(I,I-1) = 0.0D0
33647          NORM = PYTHAG(PYTHAG(HR(I-1,I-1),HI(I-1,I-1)),SR)
33648          XR = HR(I-1,I-1) / NORM
33649          WR(I-1) = XR
33650          XI = HI(I-1,I-1) / NORM
33651          WI(I-1) = XI
33652          HR(I-1,I-1) = NORM
33653          HI(I-1,I-1) = 0.0D0
33654          HI(I,I-1) = SR / NORM
33655 C
33656          DO 490 J = I, EN
33657             YR = HR(I-1,J)
33658             YI = HI(I-1,J)
33659             ZZR = HR(I,J)
33660             ZZI = HI(I,J)
33661             HR(I-1,J) = XR * YR + XI * YI + HI(I,I-1) * ZZR
33662             HI(I-1,J) = XR * YI - XI * YR + HI(I,I-1) * ZZI
33663             HR(I,J) = XR * ZZR - XI * ZZI - HI(I,I-1) * YR
33664             HI(I,J) = XR * ZZI + XI * ZZR - HI(I,I-1) * YI
33665   490    CONTINUE
33666 C
33667   500 CONTINUE
33668 C
33669       SI = HI(EN,EN)
33670       IF (SI .EQ. 0.0D0) GO TO 540
33671       NORM = PYTHAG(HR(EN,EN),SI)
33672       SR = HR(EN,EN) / NORM
33673       SI = SI / NORM
33674       HR(EN,EN) = NORM
33675       HI(EN,EN) = 0.0D0
33676 C     .......... INVERSE OPERATION (COLUMNS) ..........
33677   540 DO 600 J = LP1, EN
33678          XR = WR(J-1)
33679          XI = WI(J-1)
33680 C
33681          DO 580 I = L, J
33682             YR = HR(I,J-1)
33683             YI = 0.0D0
33684             ZZR = HR(I,J)
33685             ZZI = HI(I,J)
33686             IF (I .EQ. J) GO TO 560
33687             YI = HI(I,J-1)
33688             HI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
33689   560       HR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
33690             HR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
33691             HI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
33692   580    CONTINUE
33693 C
33694   600 CONTINUE
33695 C
33696       IF (SI .EQ. 0.0D0) GO TO 240
33697 C
33698       DO 630 I = L, EN
33699          YR = HR(I,EN)
33700          YI = HI(I,EN)
33701          HR(I,EN) = SR * YR - SI * YI
33702          HI(I,EN) = SR * YI + SI * YR
33703   630 CONTINUE
33704 C
33705       GO TO 240
33706 C     .......... A ROOT FOUND ..........
33707   660 WR(EN) = HR(EN,EN) + TR
33708       WI(EN) = HI(EN,EN) + TI
33709       EN = ENM1
33710       GO TO 220
33711 C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
33712 C                CONVERGED AFTER 30*N ITERATIONS ..........
33713  1000 IERR = EN
33714  1001 RETURN
33715       END
33716       SUBROUTINE COMQR2(NM,N,LOW,IGH,ORTR,ORTI,HR,HI,WR,WI,ZR,ZI,IERR)
33717 C  MESHED OVERFLOW CONTROL WITH VECTORS OF ISOLATED ROOTS (10/19/89 BSG)
33718 C  MESHED OVERFLOW CONTROL WITH TRIANGULAR MULTIPLY (10/30/89 BSG)
33719 C
33720       INTEGER I,J,K,L,M,N,EN,II,JJ,LL,NM,NN,IGH,IP1,
33721      X        ITN,ITS,LOW,LP1,ENM1,IEND,IERR
33722       DOUBLE PRECISION HR(NM,N),HI(NM,N),WR(N),WI(N),ZR(NM,N),ZI(NM,N),
33723      X       ORTR(IGH),ORTI(IGH)
33724       DOUBLE PRECISION SI,SR,TI,TR,XI,XR,YI,YR,ZZI,ZZR,NORM,TST1,TST2,
33725      X       PYTHAG
33726 C
33727 C     THIS SUBROUTINE IS A TRANSLATION OF A UNITARY ANALOGUE OF THE
33728 C     ALGOL PROCEDURE  COMLR2, NUM. MATH. 16, 181-204(1970) BY PETERS
33729 C     AND WILKINSON.
33730 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
33731 C     THE UNITARY ANALOGUE SUBSTITUTES THE QR ALGORITHM OF FRANCIS
33732 C     (COMP. JOUR. 4, 332-345(1962)) FOR THE LR ALGORITHM.
33733 C
33734 C     THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
33735 C     OF A COMPLEX UPPER HESSENBERG MATRIX BY THE QR
33736 C     METHOD.  THE EIGENVECTORS OF A COMPLEX GENERAL MATRIX
33737 C     CAN ALSO BE FOUND IF  CORTH  HAS BEEN USED TO REDUCE
33738 C     THIS GENERAL MATRIX TO HESSENBERG FORM.
33739 C
33740 C     ON INPUT
33741 C
33742 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
33743 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
33744 C          DIMENSION STATEMENT.
33745 C
33746 C        N IS THE ORDER OF THE MATRIX.
33747 C
33748 C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
33749 C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
33750 C          SET LOW=1, IGH=N.
33751 C
33752 C        ORTR AND ORTI CONTAIN INFORMATION ABOUT THE UNITARY TRANS-
33753 C          FORMATIONS USED IN THE REDUCTION BY  CORTH, IF PERFORMED.
33754 C          ONLY ELEMENTS LOW THROUGH IGH ARE USED.  IF THE EIGENVECTORS
33755 C          OF THE HESSENBERG MATRIX ARE DESIRED, SET ORTR(J) AND
33756 C          ORTI(J) TO 0.0D0 FOR THESE ELEMENTS.
33757 C
33758 C        HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
33759 C          RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
33760 C          THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN FURTHER
33761 C          INFORMATION ABOUT THE TRANSFORMATIONS WHICH WERE USED IN THE
33762 C          REDUCTION BY  CORTH, IF PERFORMED.  IF THE EIGENVECTORS OF
33763 C          THE HESSENBERG MATRIX ARE DESIRED, THESE ELEMENTS MAY BE
33764 C          ARBITRARY.
33765 C
33766 C     ON OUTPUT
33767 C
33768 C        ORTR, ORTI, AND THE UPPER HESSENBERG PORTIONS OF HR AND HI
33769 C          HAVE BEEN DESTROYED.
33770 C
33771 C        WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
33772 C          RESPECTIVELY, OF THE EIGENVALUES.  IF AN ERROR
33773 C          EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
33774 C          FOR INDICES IERR+1,...,N.
33775 C
33776 C        ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
33777 C          RESPECTIVELY, OF THE EIGENVECTORS.  THE EIGENVECTORS
33778 C          ARE UNNORMALIZED.  IF AN ERROR EXIT IS MADE, NONE OF
33779 C          THE EIGENVECTORS HAS BEEN FOUND.
33780 C
33781 C        IERR IS SET TO
33782 C          ZERO       FOR NORMAL RETURN,
33783 C          J          IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED
33784 C                     WHILE THE J-TH EIGENVALUE IS BEING SOUGHT.
33785 C
33786 C     CALLS CDIV FOR COMPLEX DIVISION.
33787 C     CALLS CSROOT FOR COMPLEX SQUARE ROOT.
33788 C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
33789 C
33790 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
33791 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
33792 C
33793 C     THIS VERSION DATED OCTOBER 1989.
33794 C
33795 C     ------------------------------------------------------------------
33796 C
33797       IERR = 0
33798 C     .......... INITIALIZE EIGENVECTOR MATRIX ..........
33799       DO 101 J = 1, N
33800 C
33801          DO 100 I = 1, N
33802             ZR(I,J) = 0.0D0
33803             ZI(I,J) = 0.0D0
33804   100    CONTINUE
33805          ZR(J,J) = 1.0D0
33806   101 CONTINUE
33807 C     .......... FORM THE MATRIX OF ACCUMULATED TRANSFORMATIONS
33808 C                FROM THE INFORMATION LEFT BY CORTH ..........
33809       IEND = IGH - LOW - 1
33810       IF (IEND) 180, 150, 105
33811 C     .......... FOR I=IGH-1 STEP -1 UNTIL LOW+1 DO -- ..........
33812   105 DO 140 II = 1, IEND
33813          I = IGH - II
33814          IF (ORTR(I) .EQ. 0.0D0 .AND. ORTI(I) .EQ. 0.0D0) GO TO 140
33815          IF (HR(I,I-1) .EQ. 0.0D0 .AND. HI(I,I-1) .EQ. 0.0D0) GO TO 140
33816 C     .......... NORM BELOW IS NEGATIVE OF H FORMED IN CORTH ..........
33817          NORM = HR(I,I-1) * ORTR(I) + HI(I,I-1) * ORTI(I)
33818          IP1 = I + 1
33819 C
33820          DO 110 K = IP1, IGH
33821             ORTR(K) = HR(K,I-1)
33822             ORTI(K) = HI(K,I-1)
33823   110    CONTINUE
33824 C
33825          DO 130 J = I, IGH
33826             SR = 0.0D0
33827             SI = 0.0D0
33828 C
33829             DO 115 K = I, IGH
33830                SR = SR + ORTR(K) * ZR(K,J) + ORTI(K) * ZI(K,J)
33831                SI = SI + ORTR(K) * ZI(K,J) - ORTI(K) * ZR(K,J)
33832   115       CONTINUE
33833 C
33834             SR = SR / NORM
33835             SI = SI / NORM
33836 C
33837             DO 120 K = I, IGH
33838                ZR(K,J) = ZR(K,J) + SR * ORTR(K) - SI * ORTI(K)
33839                ZI(K,J) = ZI(K,J) + SR * ORTI(K) + SI * ORTR(K)
33840   120       CONTINUE
33841 C
33842   130    CONTINUE
33843 C
33844   140 CONTINUE
33845 C     .......... CREATE REAL SUBDIAGONAL ELEMENTS ..........
33846   150 L = LOW + 1
33847 C
33848       DO 170 I = L, IGH
33849          LL = MIN0(I+1,IGH)
33850          IF (HI(I,I-1) .EQ. 0.0D0) GO TO 170
33851          NORM = PYTHAG(HR(I,I-1),HI(I,I-1))
33852          YR = HR(I,I-1) / NORM
33853          YI = HI(I,I-1) / NORM
33854          HR(I,I-1) = NORM
33855          HI(I,I-1) = 0.0D0
33856 C
33857          DO 155 J = I, N
33858             SI = YR * HI(I,J) - YI * HR(I,J)
33859             HR(I,J) = YR * HR(I,J) + YI * HI(I,J)
33860             HI(I,J) = SI
33861   155    CONTINUE
33862 C
33863          DO 160 J = 1, LL
33864             SI = YR * HI(J,I) + YI * HR(J,I)
33865             HR(J,I) = YR * HR(J,I) - YI * HI(J,I)
33866             HI(J,I) = SI
33867   160    CONTINUE
33868 C
33869          DO 165 J = LOW, IGH
33870             SI = YR * ZI(J,I) + YI * ZR(J,I)
33871             ZR(J,I) = YR * ZR(J,I) - YI * ZI(J,I)
33872             ZI(J,I) = SI
33873   165    CONTINUE
33874 C
33875   170 CONTINUE
33876 C     .......... STORE ROOTS ISOLATED BY CBAL ..........
33877   180 DO 200 I = 1, N
33878          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 200
33879          WR(I) = HR(I,I)
33880          WI(I) = HI(I,I)
33881   200 CONTINUE
33882 C
33883       EN = IGH
33884       TR = 0.0D0
33885       TI = 0.0D0
33886       ITN = 30*N
33887 C     .......... SEARCH FOR NEXT EIGENVALUE ..........
33888   220 IF (EN .LT. LOW) GO TO 680
33889       ITS = 0
33890       ENM1 = EN - 1
33891 C     .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT
33892 C                FOR L=EN STEP -1 UNTIL LOW DO -- ..........
33893   240 DO 260 LL = LOW, EN
33894          L = EN + LOW - LL
33895          IF (L .EQ. LOW) GO TO 300
33896          TST1 = DABS(HR(L-1,L-1)) + DABS(HI(L-1,L-1))
33897      X            + DABS(HR(L,L)) + DABS(HI(L,L))
33898          TST2 = TST1 + DABS(HR(L,L-1))
33899          IF (TST2 .EQ. TST1) GO TO 300
33900   260 CONTINUE
33901 C     .......... FORM SHIFT ..........
33902   300 IF (L .EQ. EN) GO TO 660
33903       IF (ITN .EQ. 0) GO TO 1000
33904       IF (ITS .EQ. 10 .OR. ITS .EQ. 20) GO TO 320
33905       SR = HR(EN,EN)
33906       SI = HI(EN,EN)
33907       XR = HR(ENM1,EN) * HR(EN,ENM1)
33908       XI = HI(ENM1,EN) * HR(EN,ENM1)
33909       IF (XR .EQ. 0.0D0 .AND. XI .EQ. 0.0D0) GO TO 340
33910       YR = (HR(ENM1,ENM1) - SR) / 2.0D0
33911       YI = (HI(ENM1,ENM1) - SI) / 2.0D0
33912       CALL CSROOT(YR**2-YI**2+XR,2.0D0*YR*YI+XI,ZZR,ZZI)
33913       IF (YR * ZZR + YI * ZZI .GE. 0.0D0) GO TO 310
33914       ZZR = -ZZR
33915       ZZI = -ZZI
33916   310 CALL CDIV(XR,XI,YR+ZZR,YI+ZZI,XR,XI)
33917       SR = SR - XR
33918       SI = SI - XI
33919       GO TO 340
33920 C     .......... FORM EXCEPTIONAL SHIFT ..........
33921   320 SR = DABS(HR(EN,ENM1)) + DABS(HR(ENM1,EN-2))
33922       SI = 0.0D0
33923 C
33924   340 DO 360 I = LOW, EN
33925          HR(I,I) = HR(I,I) - SR
33926          HI(I,I) = HI(I,I) - SI
33927   360 CONTINUE
33928 C
33929       TR = TR + SR
33930       TI = TI + SI
33931       ITS = ITS + 1
33932       ITN = ITN - 1
33933 C     .......... REDUCE TO TRIANGLE (ROWS) ..........
33934       LP1 = L + 1
33935 C
33936       DO 500 I = LP1, EN
33937          SR = HR(I,I-1)
33938          HR(I,I-1) = 0.0D0
33939          NORM = PYTHAG(PYTHAG(HR(I-1,I-1),HI(I-1,I-1)),SR)
33940          XR = HR(I-1,I-1) / NORM
33941          WR(I-1) = XR
33942          XI = HI(I-1,I-1) / NORM
33943          WI(I-1) = XI
33944          HR(I-1,I-1) = NORM
33945          HI(I-1,I-1) = 0.0D0
33946          HI(I,I-1) = SR / NORM
33947 C
33948          DO 490 J = I, N
33949             YR = HR(I-1,J)
33950             YI = HI(I-1,J)
33951             ZZR = HR(I,J)
33952             ZZI = HI(I,J)
33953             HR(I-1,J) = XR * YR + XI * YI + HI(I,I-1) * ZZR
33954             HI(I-1,J) = XR * YI - XI * YR + HI(I,I-1) * ZZI
33955             HR(I,J) = XR * ZZR - XI * ZZI - HI(I,I-1) * YR
33956             HI(I,J) = XR * ZZI + XI * ZZR - HI(I,I-1) * YI
33957   490    CONTINUE
33958 C
33959   500 CONTINUE
33960 C
33961       SI = HI(EN,EN)
33962       IF (SI .EQ. 0.0D0) GO TO 540
33963       NORM = PYTHAG(HR(EN,EN),SI)
33964       SR = HR(EN,EN) / NORM
33965       SI = SI / NORM
33966       HR(EN,EN) = NORM
33967       HI(EN,EN) = 0.0D0
33968       IF (EN .EQ. N) GO TO 540
33969       IP1 = EN + 1
33970 C
33971       DO 520 J = IP1, N
33972          YR = HR(EN,J)
33973          YI = HI(EN,J)
33974          HR(EN,J) = SR * YR + SI * YI
33975          HI(EN,J) = SR * YI - SI * YR
33976   520 CONTINUE
33977 C     .......... INVERSE OPERATION (COLUMNS) ..........
33978   540 DO 600 J = LP1, EN
33979          XR = WR(J-1)
33980          XI = WI(J-1)
33981 C
33982          DO 580 I = 1, J
33983             YR = HR(I,J-1)
33984             YI = 0.0D0
33985             ZZR = HR(I,J)
33986             ZZI = HI(I,J)
33987             IF (I .EQ. J) GO TO 560
33988             YI = HI(I,J-1)
33989             HI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
33990   560       HR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
33991             HR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
33992             HI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
33993   580    CONTINUE
33994 C
33995          DO 590 I = LOW, IGH
33996             YR = ZR(I,J-1)
33997             YI = ZI(I,J-1)
33998             ZZR = ZR(I,J)
33999             ZZI = ZI(I,J)
34000             ZR(I,J-1) = XR * YR - XI * YI + HI(J,J-1) * ZZR
34001             ZI(I,J-1) = XR * YI + XI * YR + HI(J,J-1) * ZZI
34002             ZR(I,J) = XR * ZZR + XI * ZZI - HI(J,J-1) * YR
34003             ZI(I,J) = XR * ZZI - XI * ZZR - HI(J,J-1) * YI
34004   590    CONTINUE
34005 C
34006   600 CONTINUE
34007 C
34008       IF (SI .EQ. 0.0D0) GO TO 240
34009 C
34010       DO 630 I = 1, EN
34011          YR = HR(I,EN)
34012          YI = HI(I,EN)
34013          HR(I,EN) = SR * YR - SI * YI
34014          HI(I,EN) = SR * YI + SI * YR
34015   630 CONTINUE
34016 C
34017       DO 640 I = LOW, IGH
34018          YR = ZR(I,EN)
34019          YI = ZI(I,EN)
34020          ZR(I,EN) = SR * YR - SI * YI
34021          ZI(I,EN) = SR * YI + SI * YR
34022   640 CONTINUE
34023 C
34024       GO TO 240
34025 C     .......... A ROOT FOUND ..........
34026   660 HR(EN,EN) = HR(EN,EN) + TR
34027       WR(EN) = HR(EN,EN)
34028       HI(EN,EN) = HI(EN,EN) + TI
34029       WI(EN) = HI(EN,EN)
34030       EN = ENM1
34031       GO TO 220
34032 C     .......... ALL ROOTS FOUND.  BACKSUBSTITUTE TO FIND
34033 C                VECTORS OF UPPER TRIANGULAR FORM ..........
34034   680 NORM = 0.0D0
34035 C
34036       DO 720 I = 1, N
34037 C
34038          DO 720 J = I, N
34039             TR = DABS(HR(I,J)) + DABS(HI(I,J))
34040             IF (TR .GT. NORM) NORM = TR
34041   720 CONTINUE
34042 C
34043       IF (N .EQ. 1 .OR. NORM .EQ. 0.0D0) GO TO 1001
34044 C     .......... FOR EN=N STEP -1 UNTIL 2 DO -- ..........
34045       DO 800 NN = 2, N
34046          EN = N + 2 - NN
34047          XR = WR(EN)
34048          XI = WI(EN)
34049          HR(EN,EN) = 1.0D0
34050          HI(EN,EN) = 0.0D0
34051          ENM1 = EN - 1
34052 C     .......... FOR I=EN-1 STEP -1 UNTIL 1 DO -- ..........
34053          DO 780 II = 1, ENM1
34054             I = EN - II
34055             ZZR = 0.0D0
34056             ZZI = 0.0D0
34057             IP1 = I + 1
34058 C
34059             DO 740 J = IP1, EN
34060                ZZR = ZZR + HR(I,J) * HR(J,EN) - HI(I,J) * HI(J,EN)
34061                ZZI = ZZI + HR(I,J) * HI(J,EN) + HI(I,J) * HR(J,EN)
34062   740       CONTINUE
34063 C
34064             YR = XR - WR(I)
34065             YI = XI - WI(I)
34066             IF (YR .NE. 0.0D0 .OR. YI .NE. 0.0D0) GO TO 765
34067                TST1 = NORM
34068                YR = TST1
34069   760          YR = 0.01D0 * YR
34070                TST2 = NORM + YR
34071                IF (TST2 .GT. TST1) GO TO 760
34072   765       CONTINUE
34073             CALL CDIV(ZZR,ZZI,YR,YI,HR(I,EN),HI(I,EN))
34074 C     .......... OVERFLOW CONTROL ..........
34075             TR = DABS(HR(I,EN)) + DABS(HI(I,EN))
34076             IF (TR .EQ. 0.0D0) GO TO 780
34077             TST1 = TR
34078             TST2 = TST1 + 1.0D0/TST1
34079             IF (TST2 .GT. TST1) GO TO 780
34080             DO 770 J = I, EN
34081                HR(J,EN) = HR(J,EN)/TR
34082                HI(J,EN) = HI(J,EN)/TR
34083   770       CONTINUE
34084 C
34085   780    CONTINUE
34086 C
34087   800 CONTINUE
34088 C     .......... END BACKSUBSTITUTION ..........
34089 C     .......... VECTORS OF ISOLATED ROOTS ..........
34090       DO  840 I = 1, N
34091          IF (I .GE. LOW .AND. I .LE. IGH) GO TO 840
34092 C
34093          DO 820 J = I, N
34094             ZR(I,J) = HR(I,J)
34095             ZI(I,J) = HI(I,J)
34096   820    CONTINUE
34097 C
34098   840 CONTINUE
34099 C     .......... MULTIPLY BY TRANSFORMATION MATRIX TO GIVE
34100 C                VECTORS OF ORIGINAL FULL MATRIX.
34101 C                FOR J=N STEP -1 UNTIL LOW DO -- ..........
34102       DO 880 JJ = LOW, N
34103          J = N + LOW - JJ
34104          M = MIN0(J,IGH)
34105 C
34106          DO 880 I = LOW, IGH
34107             ZZR = 0.0D0
34108             ZZI = 0.0D0
34109 C
34110             DO 860 K = LOW, M
34111                ZZR = ZZR + ZR(I,K) * HR(K,J) - ZI(I,K) * HI(K,J)
34112                ZZI = ZZI + ZR(I,K) * HI(K,J) + ZI(I,K) * HR(K,J)
34113   860       CONTINUE
34114 C
34115             ZR(I,J) = ZZR
34116             ZI(I,J) = ZZI
34117   880 CONTINUE
34118 C
34119       GO TO 1001
34120 C     .......... SET ERROR -- ALL EIGENVALUES HAVE NOT
34121 C                CONVERGED AFTER 30*N ITERATIONS ..........
34122  1000 IERR = EN
34123  1001 RETURN
34124       END
34125       SUBROUTINE CORTH(NM,N,LOW,IGH,AR,AI,ORTR,ORTI)
34126 C
34127       INTEGER I,J,M,N,II,JJ,LA,MP,NM,IGH,KP1,LOW
34128       DOUBLE PRECISION AR(NM,N),AI(NM,N),ORTR(IGH),ORTI(IGH)
34129       DOUBLE PRECISION F,G,H,FI,FR,SCALE,PYTHAG
34130 C
34131 C     THIS SUBROUTINE IS A TRANSLATION OF A COMPLEX ANALOGUE OF
34132 C     THE ALGOL PROCEDURE ORTHES, NUM. MATH. 12, 349-368(1968)
34133 C     BY MARTIN AND WILKINSON.
34134 C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
34135 C
34136 C     GIVEN A COMPLEX GENERAL MATRIX, THIS SUBROUTINE
34137 C     REDUCES A SUBMATRIX SITUATED IN ROWS AND COLUMNS
34138 C     LOW THROUGH IGH TO UPPER HESSENBERG FORM BY
34139 C     UNITARY SIMILARITY TRANSFORMATIONS.
34140 C
34141 C     ON INPUT
34142 C
34143 C        NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
34144 C          ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
34145 C          DIMENSION STATEMENT.
34146 C
34147 C        N IS THE ORDER OF THE MATRIX.
34148 C
34149 C        LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
34150 C          SUBROUTINE  CBAL.  IF  CBAL  HAS NOT BEEN USED,
34151 C          SET LOW=1, IGH=N.
34152 C
34153 C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
34154 C          RESPECTIVELY, OF THE COMPLEX INPUT MATRIX.
34155 C
34156 C     ON OUTPUT
34157 C
34158 C        AR AND AI CONTAIN THE REAL AND IMAGINARY PARTS,
34159 C          RESPECTIVELY, OF THE HESSENBERG MATRIX.  INFORMATION
34160 C          ABOUT THE UNITARY TRANSFORMATIONS USED IN THE REDUCTION
34161 C          IS STORED IN THE REMAINING TRIANGLES UNDER THE
34162 C          HESSENBERG MATRIX.
34163 C
34164 C        ORTR AND ORTI CONTAIN FURTHER INFORMATION ABOUT THE
34165 C          TRANSFORMATIONS.  ONLY ELEMENTS LOW THROUGH IGH ARE USED.
34166 C
34167 C     CALLS PYTHAG FOR  DSQRT(A*A + B*B) .
34168 C
34169 C     QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO BURTON S. GARBOW,
34170 C     MATHEMATICS AND COMPUTER SCIENCE DIV, ARGONNE NATIONAL LABORATORY
34171 C
34172 C     THIS VERSION DATED AUGUST 1983.
34173 C
34174 C     ------------------------------------------------------------------
34175 C
34176       LA = IGH - 1
34177       KP1 = LOW + 1
34178       IF (LA .LT. KP1) GO TO 200
34179 C
34180       DO 180 M = KP1, LA
34181          H = 0.0D0
34182          ORTR(M) = 0.0D0
34183          ORTI(M) = 0.0D0
34184          SCALE = 0.0D0
34185 C     .......... SCALE COLUMN (ALGOL TOL THEN NOT NEEDED) ..........
34186          DO 90 I = M, IGH
34187    90    SCALE = SCALE + DABS(AR(I,M-1)) + DABS(AI(I,M-1))
34188 C
34189          IF (SCALE .EQ. 0.0D0) GO TO 180
34190          MP = M + IGH
34191 C     .......... FOR I=IGH STEP -1 UNTIL M DO -- ..........
34192          DO 100 II = M, IGH
34193             I = MP - II
34194             ORTR(I) = AR(I,M-1) / SCALE
34195             ORTI(I) = AI(I,M-1) / SCALE
34196             H = H + ORTR(I) * ORTR(I) + ORTI(I) * ORTI(I)
34197   100    CONTINUE
34198 C
34199          G = DSQRT(H)
34200          F = PYTHAG(ORTR(M),ORTI(M))
34201          IF (F .EQ. 0.0D0) GO TO 103
34202          H = H + F * G
34203          G = G / F
34204          ORTR(M) = (1.0D0 + G) * ORTR(M)
34205          ORTI(M) = (1.0D0 + G) * ORTI(M)
34206          GO TO 105
34207 C
34208   103    ORTR(M) = G
34209          AR(M,M-1) = SCALE
34210 C     .......... FORM (I-(U*UT)/H) * A ..........
34211   105    DO 130 J = M, N
34212             FR = 0.0D0
34213             FI = 0.0D0
34214 C     .......... FOR I=IGH STEP -1 UNTIL M DO -- ..........
34215             DO 110 II = M, IGH
34216                I = MP - II
34217                FR = FR + ORTR(I) * AR(I,J) + ORTI(I) * AI(I,J)
34218                FI = FI + ORTR(I) * AI(I,J) - ORTI(I) * AR(I,J)
34219   110       CONTINUE
34220 C
34221             FR = FR / H
34222             FI = FI / H
34223 C
34224             DO 120 I = M, IGH
34225                AR(I,J) = AR(I,J) - FR * ORTR(I) + FI * ORTI(I)
34226                AI(I,J) = AI(I,J) - FR * ORTI(I) - FI * ORTR(I)
34227   120       CONTINUE
34228 C
34229   130    CONTINUE
34230 C     .......... FORM (I-(U*UT)/H)*A*(I-(U*UT)/H) ..........
34231          DO 160 I = 1, IGH
34232             FR = 0.0D0
34233             FI = 0.0D0
34234 C     .......... FOR J=IGH STEP -1 UNTIL M DO -- ..........
34235             DO 140 JJ = M, IGH
34236                J = MP - JJ
34237                FR = FR + ORTR(J) * AR(I,J) - ORTI(J) * AI(I,J)
34238                FI = FI + ORTR(J) * AI(I,J) + ORTI(J) * AR(I,J)
34239   140       CONTINUE
34240 C
34241             FR = FR / H
34242             FI = FI / H
34243 C
34244             DO 150 J = M, IGH
34245                AR(I,J) = AR(I,J) - FR * ORTR(J) - FI * ORTI(J)
34246                AI(I,J) = AI(I,J) + FR * ORTI(J) - FI * ORTR(J)
34247   150       CONTINUE
34248 C
34249   160    CONTINUE
34250 C
34251          ORTR(M) = SCALE * ORTR(M)
34252          ORTI(M) = SCALE * ORTI(M)
34253          AR(M,M-1) = -G * AR(M,M-1)
34254          AI(M,M-1) = -G * AI(M,M-1)
34255   180 CONTINUE
34256 C
34257   200 RETURN
34258       END
34259       SUBROUTINE CSROOT(XR,XI,YR,YI)
34260       DOUBLE PRECISION XR,XI,YR,YI
34261 C
34262 C     (YR,YI) = COMPLEX DSQRT(XR,XI) 
34263 C     BRANCH CHOSEN SO THAT YR .GE. 0.0 AND SIGN(YI) .EQ. SIGN(XI)
34264 C
34265       DOUBLE PRECISION S,TR,TI,PYTHAG
34266       TR = XR
34267       TI = XI
34268       S = DSQRT(0.5D0*(PYTHAG(TR,TI) + DABS(TR)))
34269       IF (TR .GE. 0.0D0) YR = S
34270       IF (TI .LT. 0.0D0) S = -S
34271       IF (TR .LE. 0.0D0) YI = S
34272       IF (TR .LT. 0.0D0) YR = 0.5D0*(TI/YI)
34273       IF (TR .GT. 0.0D0) YI = 0.5D0*(TI/YR)
34274       RETURN
34275       END
34276       DOUBLE PRECISION FUNCTION PYTHAG(A,B)
34277       DOUBLE PRECISION A,B
34278 C
34279 C     FINDS DSQRT(A**2+B**2) WITHOUT OVERFLOW OR DESTRUCTIVE UNDERFLOW
34280 C
34281       DOUBLE PRECISION P,R,S,T,U
34282       P = DMAX1(DABS(A),DABS(B))
34283       IF (P .EQ. 0.0D0) GO TO 20
34284       R = (DMIN1(DABS(A),DABS(B))/P)**2
34285    10 CONTINUE
34286          T = 4.0D0 + R
34287          IF (T .EQ. 4.0D0) GO TO 20
34288          S = R/T
34289          U = 1.0D0 + 2.0D0*S
34290          P = U*P
34291          R = (S/U)**2 * R
34292       GO TO 10
34293    20 PYTHAG = P
34294       RETURN
34295       END
34296  
34297 C*********************************************************************
34298  
34299 C...PYTBBN
34300 C...Calculates the three-body decay of gluinos into
34301 C...neutralinos and third generation fermions.
34302  
34303       SUBROUTINE PYTBBN(I,NN,E,XMGLU,GAM)
34304  
34305 C...Double precision and integer declarations.
34306       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
34307       IMPLICIT INTEGER(I-N)
34308       INTEGER PYK,PYCHGE,PYCOMP
34309 C...Parameter statement to help give large particle numbers.
34310       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
34311 C...Commonblocks.
34312       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
34313       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
34314       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
34315       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
34316      &SFMIX(16,4)
34317       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
34318  
34319 C...Local variables.
34320       EXTERNAL PYSIMP,PYLAMF
34321       DOUBLE PRECISION PYSIMP,PYLAMF
34322       INTEGER LIN,NN
34323       DOUBLE PRECISION COSD,SIND,COSD2,SIND2,COS2D,SIN2D
34324       DOUBLE PRECISION HL,HR,FL,FR,HL2,HR2,FL2,FR2
34325       DOUBLE PRECISION XMS2(2),XM,XM2,XMG,XMG2,XMR,XMR2
34326       DOUBLE PRECISION SBAR,SMIN,SMAX,XMQA,W,GRS,G(0:6),SUMME(0:100)
34327       DOUBLE PRECISION FF,HH,HFL,HFR,HRFL,HLFR,XMQ4,XM24
34328       DOUBLE PRECISION XLN1,XLN2,B1,B2
34329       DOUBLE PRECISION E,XMGLU,GAM
34330       DOUBLE PRECISION HRB(4),HLB(4),FLB(4),FRB(4)
34331       SAVE HRB,HLB,FLB,FRB
34332       DOUBLE PRECISION ALPHAW,ALPHAS,GSU2
34333       DOUBLE PRECISION HLT(4),HRT(4),FLT(4),FRT(4)
34334       SAVE HLT,HRT,FLT,FRT
34335       DOUBLE PRECISION AMC(2),AMN(4),AN(4,4),ZN(3),FLU(4),FRU(4),
34336      &FLD(4),FRD(4)
34337       SAVE AMC,AMN,AN,ZN,FLU,FRU,FLD,FRD
34338       DOUBLE PRECISION AMBOT,AMSB(2),SINC,COSC
34339       DOUBLE PRECISION AMTOP,AMST(2),SINA,COSA
34340       SAVE AMSB,AMST
34341       DOUBLE PRECISION SINW,COSW,TANW,COSW2,SINW2
34342       DOUBLE PRECISION ROT1(4,4)
34343       LOGICAL IFIRST
34344       SAVE IFIRST
34345       DATA IFIRST/.TRUE./
34346  
34347       TANB=RMSS(5)
34348       SINB=TANB/SQRT(1D0+TANB**2)
34349       COSB=SINB/TANB
34350       XW=PARU(102)
34351       SINW=SQRT(XW)
34352       COSW=SQRT(1D0-XW)
34353       TANW=SINW/COSW
34354       AMW=PMAS(24,1)
34355       COSC=SFMIX(5,1)
34356       SINC=SFMIX(5,3)
34357       COSA=SFMIX(6,1)
34358       SINA=SFMIX(6,3)
34359       AMBOT=0D0
34360       AMTOP=PYRNMT(PMAS(6,1))
34361       W2=SQRT(2D0)
34362       FAKT1=AMBOT/W2/AMW/COSB
34363       FAKT2=AMTOP/W2/AMW/SINB
34364       IF(IFIRST) THEN
34365         DO 110 II=1,4
34366           AMN(II)=SMZ(II)
34367           DO 100 J=1,4
34368             ROT1(II,J)=0D0
34369             AN(II,J)=0D0
34370   100     CONTINUE
34371   110   CONTINUE
34372         ROT1(1,1)=COSW
34373         ROT1(1,2)=-SINW
34374         ROT1(2,1)=-ROT1(1,2)
34375         ROT1(2,2)=ROT1(1,1)
34376         ROT1(3,3)=COSB
34377         ROT1(3,4)=SINB
34378         ROT1(4,3)=-ROT1(3,4)
34379         ROT1(4,4)=ROT1(3,3)
34380         DO 140 II=1,4
34381           DO 130 J=1,4
34382             DO 120 JJ=1,4
34383               AN(II,J)=AN(II,J)+ZMIX(II,JJ)*ROT1(JJ,J)
34384   120       CONTINUE
34385   130     CONTINUE
34386   140   CONTINUE
34387         DO 150 J=1,4
34388           ZN(1)=-FAKT2*(-SINB*AN(J,3)+COSB*AN(J,4))
34389           ZN(2)=-2D0*W2/3D0*SINW*(TANW*AN(J,2)-AN(J,1))
34390           ZN(3)=-2*W2/3D0*SINW*AN(J,1)-W2*(0.5D0-2D0/3D0*
34391      &    XW)*AN(J,2)/COSW
34392           HRT(J)=ZN(1)*COSA-ZN(3)*SINA
34393           HLT(J)=ZN(1)*COSA+ZN(2)*SINA
34394           FLT(J)=ZN(3)*COSA+ZN(1)*SINA
34395           FRT(J)=ZN(2)*COSA-ZN(1)*SINA
34396           FLU(J)=ZN(3)
34397           FRU(J)=ZN(2)
34398           ZN(1)=-FAKT1*(COSB*AN(J,3)+SINB*AN(J,4))
34399           ZN(2)=W2/3D0*SINW*(TANW*AN(J,2)-AN(J,1))
34400           ZN(3)=W2/3D0*SINW*AN(J,1)+W2*(0.5D0-XW/3D0)*AN(J,2)/COSW
34401           HRB(J)=ZN(1)*COSC-ZN(3)*SINC
34402           HLB(J)=ZN(1)*COSC+ZN(2)*SINC
34403           FLB(J)=ZN(3)*COSC+ZN(1)*SINC
34404           FRB(J)=ZN(2)*COSC-ZN(1)*SINC
34405           FLD(J)=ZN(3)
34406           FRD(J)=ZN(2)
34407   150   CONTINUE
34408         AMST(1)=PMAS(PYCOMP(KSUSY1+6),1)
34409         AMST(2)=PMAS(PYCOMP(KSUSY2+6),1)
34410         AMSB(1)=PMAS(PYCOMP(KSUSY1+5),1)
34411         AMSB(2)=PMAS(PYCOMP(KSUSY2+5),1)
34412         IFIRST=.FALSE.
34413       ENDIF
34414  
34415       IF(NINT(3D0*E).EQ.2) THEN
34416         HL=HLT(I)
34417         HR=HRT(I)
34418         FL=FLT(I)
34419         FR=FRT(I)
34420         COSD=SFMIX(6,1)
34421         SIND=SFMIX(6,3)
34422         XMS2(1)=PMAS(PYCOMP(KSUSY1+6),1)**2
34423         XMS2(2)=PMAS(PYCOMP(KSUSY2+6),1)**2
34424         XM=PMAS(6,1)
34425       ELSE
34426         HL=HLB(I)
34427         HR=HRB(I)
34428         FL=FLB(I)
34429         FR=FRB(I)
34430         COSD=SFMIX(5,1)
34431         SIND=SFMIX(5,3)
34432         XMS2(1)=PMAS(PYCOMP(KSUSY1+5),1)**2
34433         XMS2(2)=PMAS(PYCOMP(KSUSY2+5),1)**2
34434         XM=PMAS(5,1)
34435       ENDIF
34436       COSD2=COSD*COSD
34437       SIND2=SIND*SIND
34438       COS2D=COSD2-SIND2
34439       SIN2D=SIND*COSD*2D0
34440       HL2=HL*HL
34441       HR2=HR*HR
34442       FL2=FL*FL
34443       FR2=FR*FR
34444       FF=FL*FR
34445       HH=HL*HR
34446       HFL=HL*FL
34447       HFR=HR*FR
34448       HRFL=HR*FL
34449       HLFR=HL*FR
34450       XM2=XM*XM
34451       XMG=XMGLU
34452       XMG2=XMG*XMG
34453       ALPHAW=PYALEM(XMG2)
34454       ALPHAS=PYALPS(XMG2)
34455       XMR=AMN(I)
34456       XMR2=XMR*XMR
34457       XMQ4=XMG*XM2*XMR
34458       XM24=(XMG2+XM2)*(XM2+XMR2)
34459       SMIN=4D0*XM2
34460       SMAX=(XMG-ABS(XMR))**2
34461       XMQA=XMG2+2D0*XM2+XMR2
34462       DO 170 LIN=1,NN-1
34463         SBAR=SMIN+DBLE(LIN)*(SMAX-SMIN)/DBLE(NN)
34464         GRS=SBAR-XMQA
34465         W=PYLAMF(XMG2,XMR2,SBAR)*(0.25D0-XM2/SBAR)
34466         W=DSQRT(W)
34467         XLN1=LOG(ABS((GRS/2D0+XMS2(1)-W)/(GRS/2D0+XMS2(1)+W)))
34468         XLN2=LOG(ABS((GRS/2D0+XMS2(2)-W)/(GRS/2D0+XMS2(2)+W)))
34469         B1=1D0/(GRS/2D0+XMS2(1)-W)-1D0/(GRS/2D0+XMS2(1)+W)
34470         B2=1D0/(GRS/2D0+XMS2(2)-W)-1D0/(GRS/2D0+XMS2(2)+W)
34471         G(0)=-2D0*(HL2+FL2+HR2+FR2+(HFR-HFL)*SIN2D
34472      &  +2D0*(FF*SIND2-HH*COSD2))*W
34473         G(1)=((HL2+FL2)*(XMQA-2D0*XMS2(1)-2D0*XM*XMG*SIN2D)
34474      &  +4D0*HFL*XM*XMR)*XLN1
34475      &  +((HL2+FL2)*((XMQA-XMS2(1))*XMS2(1)-XM24
34476      &  +2D0*XM*XMG*(XM2+XMR2-XMS2(1))*SIN2D)
34477      &  -4D0*HFL*XMR*XM*(XMG2+XM2-XMS2(1))
34478      &  +8D0*HFL*XMQ4*SIN2D)*B1
34479         G(2)=((HR2+FR2)*(XMQA-2D0*XMS2(2)+2D0*XM*XMG*SIN2D)
34480      &  +4D0*HFR*XMR*XM)*XLN2
34481      &  +((HR2+FR2)*((XMQA-XMS2(2))*XMS2(2)-XM24
34482      &  +2D0*XMG*XM*SIN2D*(XMS2(2)-XM2-XMR2))
34483      &  +4D0*HFR*XM*XMR*(XMS2(2)-XMG2-XM2)
34484      &  -8D0*HFR*XMQ4*SIN2D)*B2
34485         G(3)=(2D0*HFL*SIN2D*(XMS2(1)*(GRS+XMS2(1))+XM2*(SBAR-XMG2-XMR2)
34486      &  +XMG2*XMR2+XM2*XM2)-2D0*XMR*XMG*(HL2*SIND2+FL2*COSD2)*SBAR
34487      &  -2D0*XMG*XM*HFL*(SBAR+XMR2-XMG2)
34488      &  +XMR*XM*(HL2+FL2)*SIN2D*(SBAR+XMG2-XMR2)
34489      &  -4D0*XMQ4*(HL2-FL2)*COS2D)/(GRS+2D0*XMS2(1))*XLN1
34490         G(4)=4D0*COS2D*XM*XMG/(XMS2(1)-XMS2(2))*
34491      &  (((HLFR+HRFL)*(XM2+XMR2)+2D0*XM*XMR*(HH+FF))*(XLN1-XLN2)
34492      &  +(HLFR+HRFL)*(XMS2(2)*XLN2-XMS2(1)*XLN1))
34493         G(5)=(2D0*(HH*COSD2-FF*SIND2)
34494      &  *((XMS2(2)*(XMS2(2)+GRS)+XM2*XM2+XMG2*XMR2)*XLN2
34495      &  +(XMS2(1)*(XMS2(1)+GRS)+XM2*XM2+XMG2*XMR2)*XLN1)
34496      &  +XM*((HH-FF)*SIN2D*XMG-(HRFL-HLFR)*XMR)
34497      &  *((GRS+XMS2(1)*2D0)*XLN1-(GRS+XMS2(2)*2D0)*XLN2)
34498      &  +((HRFL-HLFR)*XMR*(SIN2D*XMG*(SBAR-4D0*XM2)
34499      &  +COS2D*XM*(SBAR+XMG2-XMR2))
34500      &  +2D0*(FF*COSD2-HH*SIND2)*XM2*(SBAR-XMG2-XMR2))
34501      &  *(XLN1+XLN2))/(GRS+XMS2(1)+XMS2(2))
34502         G(6)=(-2D0*HFR*SIN2D*(XMS2(2)*(GRS+XMS2(2))+XM2*(SBAR-XMG2-XMR2)
34503      &  +XMG2*XMR2+XM2*XM2)-2D0*XMR*XMG*(HR2*SIND2+FR2*COSD2)*SBAR
34504      &  -2D0*XMG*XM*HFR*(SBAR+XMR2-XMG2)
34505      &  -XMR*XM*(HR2+FR2)*SIN2D*(SBAR+XMG2-XMR2)
34506      &  -4D0*XMQ4*(HR2-FR2)*COS2D)/(GRS+2D0*XMS2(2))*XLN2
34507         SUMME(LIN)=0D0
34508         DO 160 J=0,6
34509           SUMME(LIN)=SUMME(LIN)+G(J)
34510   160   CONTINUE
34511   170 CONTINUE
34512       SUMME(0)=0D0
34513       SUMME(NN)=0D0
34514       GAM = ALPHAW * ALPHAS * PYSIMP(SUMME,SMIN,SMAX,NN)
34515      &/ (16D0 * PARU(1) * PARU(102) * XMGLU**3)
34516  
34517       RETURN
34518       END
34519  
34520 C*********************************************************************
34521  
34522 C...PYTBBC
34523 C...Calculates the three-body decay of gluinos into
34524 C...charginos and third generation fermions.
34525  
34526       SUBROUTINE PYTBBC(I,NN,XMGLU,GAM)
34527  
34528 C...Double precision and integer declarations.
34529       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
34530       IMPLICIT INTEGER(I-N)
34531       INTEGER PYK,PYCHGE,PYCOMP
34532 C...Parameter statement to help give large particle numbers.
34533       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
34534 C...Commonblocks.
34535       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
34536       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
34537       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
34538       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
34539      &SFMIX(16,4)
34540       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/
34541  
34542 C...Local variables.
34543       EXTERNAL PYSIMP,PYLAMF
34544       DOUBLE PRECISION PYSIMP,PYLAMF
34545       INTEGER I,NN,LIN
34546       DOUBLE PRECISION XMG,XMG2,XMB,XMB2,XMR,XMR2
34547       DOUBLE PRECISION XMT,XMT2,XMST(4),XMSB(4)
34548       DOUBLE PRECISION ULR(2),VLR(2),XMQ2,XMQ4,AM,W,SBAR,SMIN,SMAX
34549       DOUBLE PRECISION SUMME(0:100),A(4,8)
34550       DOUBLE PRECISION COS2A,SIN2A,COS2C,SIN2C
34551       DOUBLE PRECISION GRS,XMQ3,XMGBTR,XMGTBR,ANT1,ANT2,ANB1,ANB2
34552       DOUBLE PRECISION XMGLU,GAM
34553       DOUBLE PRECISION XX1(2),XX2(2),AAA(2),BBB(2),CCC(2),
34554      &DDD(2),EEE(2),FFF(2)
34555       SAVE XX1,XX2,AAA,BBB,CCC,DDD,EEE,FFF
34556       DOUBLE PRECISION ALPHAW,ALPHAS,GSU2
34557       DOUBLE PRECISION AMC(2),AMN(4)
34558       SAVE AMC,AMN
34559       DOUBLE PRECISION AMBOT,AMSB(2),SINC,COSC
34560       DOUBLE PRECISION AMTOP,AMST(2),SINA,COSA
34561       SAVE AMSB,AMST
34562       DOUBLE PRECISION SINW,COSW,TANW,COSW2,SINW2
34563       LOGICAL IFIRST
34564       SAVE IFIRST
34565       DATA IFIRST/.TRUE./
34566  
34567       TANB=RMSS(5)
34568       SINB=TANB/SQRT(1D0+TANB**2)
34569       COSB=SINB/TANB
34570       XW=PARU(102)
34571       SINW=SQRT(XW)
34572       COSW=SQRT(1D0-XW)
34573       AMW=PMAS(24,1)
34574       COSC=SFMIX(5,1)
34575       SINC=SFMIX(5,3)
34576       COSA=SFMIX(6,1)
34577       SINA=SFMIX(6,3)
34578       AMBOT=0D0
34579       AMTOP=PYRNMT(PMAS(6,1))
34580       W2=SQRT(2D0)
34581       AMW=PMAS(24,1)
34582       FAKT1=AMBOT/W2/AMW/COSB
34583       FAKT2=AMTOP/W2/AMW/SINB
34584       IF(IFIRST) THEN
34585         AMC(1)=SMW(1)
34586         AMC(2)=SMW(2)
34587         DO 100 JJ=1,2
34588           CCC(JJ)=FAKT1*UMIX(JJ,2)*SINC-UMIX(JJ,1)*COSC
34589           EEE(JJ)=FAKT2*VMIX(JJ,2)*COSC
34590           DDD(JJ)=FAKT1*UMIX(JJ,2)*COSC+UMIX(JJ,1)*SINC
34591           FFF(JJ)=FAKT2*VMIX(JJ,2)*SINC
34592           XX1(JJ)=FAKT2*VMIX(JJ,2)*SINA-VMIX(JJ,1)*COSA
34593           AAA(JJ)=FAKT1*UMIX(JJ,2)*COSA
34594           XX2(JJ)=FAKT2*VMIX(JJ,2)*COSA+VMIX(JJ,1)*SINA
34595           BBB(JJ)=FAKT1*UMIX(JJ,2)*SINA
34596   100   CONTINUE
34597         AMST(1)=PMAS(PYCOMP(KSUSY1+6),1)
34598         AMST(2)=PMAS(PYCOMP(KSUSY2+6),1)
34599         AMSB(1)=PMAS(PYCOMP(KSUSY1+5),1)
34600         AMSB(2)=PMAS(PYCOMP(KSUSY2+5),1)
34601         IFIRST=.FALSE.
34602       ENDIF
34603       AMTOP=PMAS(6,1)
34604  
34605       ULR(1)=XX1(I)*XX1(I)+AAA(I)*AAA(I)
34606       ULR(2)=XX2(I)*XX2(I)+BBB(I)*BBB(I)
34607       VLR(1)=CCC(I)*CCC(I)+EEE(I)*EEE(I)
34608       VLR(2)=DDD(I)*DDD(I)+FFF(I)*FFF(I)
34609  
34610       COS2A=COSA**2-SINA**2
34611       SIN2A=SINA*COSA*2D0
34612       COS2C=COSC**2-SINC**2
34613       SIN2C=SINC*COSC*2D0
34614  
34615       XMG=XMGLU
34616       XMT=AMTOP
34617       XMB=0D0
34618       XMR=AMC(I)
34619       XMG2=XMG*XMG
34620       ALPHAW=PYALEM(XMG2)
34621       ALPHAS=PYALPS(XMG2)
34622       XMT2=XMT*XMT
34623       XMB2=XMB*XMB
34624       XMR2=XMR*XMR
34625       XMQ2=XMG2+XMT2+XMB2+XMR2
34626       XMQ4=XMG*XMT*XMB*XMR
34627       XMQ3=XMG2*XMR2+XMT2*XMB2
34628       XMGBTR=(XMG2+XMB2)*(XMT2+XMR2)
34629       XMGTBR=(XMG2+XMT2)*(XMB2+XMR2)
34630  
34631       XMST(1)=AMST(1)*AMST(1)
34632       XMST(2)=AMST(1)*AMST(1)
34633       XMST(3)=AMST(2)*AMST(2)
34634       XMST(4)=AMST(2)*AMST(2)
34635       XMSB(1)=AMSB(1)*AMSB(1)
34636       XMSB(2)=AMSB(2)*AMSB(2)
34637       XMSB(3)=AMSB(1)*AMSB(1)
34638       XMSB(4)=AMSB(2)*AMSB(2)
34639  
34640       A(1,1)=-COSA*SINC*CCC(I)*AAA(I)-SINA*COSC*EEE(I)*XX1(I)
34641       A(1,2)=XMG*XMB*(COSA*COSC*CCC(I)*AAA(I)+SINA*SINC*EEE(I)*XX1(I))
34642       A(1,3)=-XMG*XMR*(COSA*COSC*CCC(I)*XX1(I)+SINA*SINC*EEE(I)*AAA(I))
34643       A(1,4)=XMB*XMR*(COSA*SINC*CCC(I)*XX1(I)+SINA*COSC*EEE(I)*AAA(I))
34644       A(1,5)=XMG*XMT*(COSA*COSC*EEE(I)*XX1(I)+SINA*SINC*CCC(I)*AAA(I))
34645       A(1,6)=-XMT*XMB*(COSA*SINC*EEE(I)*XX1(I)+SINA*COSC*CCC(I)*AAA(I))
34646       A(1,7)=XMT*XMR*(COSA*SINC*EEE(I)*AAA(I)+SINA*COSC*CCC(I)*XX1(I))
34647       A(1,8)=-XMQ4*(COSA*COSC*EEE(I)*AAA(I)+SINA*SINC*CCC(I)*XX1(I))
34648  
34649       A(2,1)=-COSA*COSC*DDD(I)*AAA(I)-SINA*SINC*FFF(I)*XX1(I)
34650       A(2,2)=-XMG*XMB*(COSA*SINC*DDD(I)*AAA(I)+SINA*COSC*FFF(I)*XX1(I))
34651       A(2,3)=XMG*XMR*(COSA*SINC*DDD(I)*XX1(I)+SINA*COSC*FFF(I)*AAA(I))
34652       A(2,4)=XMB*XMR*(COSA*COSC*DDD(I)*XX1(I)+SINA*SINC*FFF(I)*AAA(I))
34653       A(2,5)=XMG*XMT*(COSA*SINC*FFF(I)*XX1(I)+SINA*COSC*DDD(I)*AAA(I))
34654       A(2,6)=XMT*XMB*(COSA*COSC*FFF(I)*XX1(I)+SINA*SINC*DDD(I)*AAA(I))
34655       A(2,7)=-XMT*XMR*(COSA*COSC*FFF(I)*AAA(I)+SINA*SINC*DDD(I)*XX1(I))
34656       A(2,8)=-XMQ4*(COSA*SINC*FFF(I)*AAA(I)+SINA*COSC*DDD(I)*XX1(I))
34657  
34658       A(3,1)=-COSA*COSC*EEE(I)*XX2(I)-SINA*SINC*CCC(I)*BBB(I)
34659       A(3,2)=XMG*XMB*(COSA*SINC*EEE(I)*XX2(I)+SINA*COSC*CCC(I)*BBB(I))
34660       A(3,3)=XMG*XMR*(COSA*SINC*EEE(I)*BBB(I)+SINA*COSC*CCC(I)*XX2(I))
34661       A(3,4)=-XMB*XMR*(COSA*COSC*EEE(I)*BBB(I)+SINA*SINC*CCC(I)*XX2(I))
34662       A(3,5)=-XMG*XMT*(COSA*SINC*CCC(I)*BBB(I)+SINA*COSC*EEE(I)*XX2(I))
34663       A(3,6)=XMT*XMB*(COSA*COSC*CCC(I)*BBB(I)+SINA*SINC*EEE(I)*XX2(I))
34664       A(3,7)=XMT*XMR*(COSA*COSC*CCC(I)*XX2(I)+SINA*SINC*EEE(I)*BBB(I))
34665       A(3,8)=-XMQ4*(COSA*SINC*CCC(I)*XX2(I)+SINA*COSC*EEE(I)*BBB(I))
34666  
34667       A(4,1)=-COSA*SINC*FFF(I)*XX2(I)-SINA*COSC*DDD(I)*BBB(I)
34668       A(4,2)=-XMG*XMB*(COSA*COSC*FFF(I)*XX2(I)+SINA*SINC*DDD(I)*BBB(I))
34669       A(4,3)=-XMG*XMR*(COSA*COSC*FFF(I)*BBB(I)+SINA*SINC*DDD(I)*XX2(I))
34670       A(4,4)=-XMB*XMR*(COSA*SINC*FFF(I)*BBB(I)+SINA*COSC*DDD(I)*XX2(I))
34671       A(4,5)=-XMG*XMT*(COSA*COSC*DDD(I)*BBB(I)+SINA*SINC*FFF(I)*XX2(I))
34672       A(4,6)=-XMT*XMB*(COSA*SINC*DDD(I)*BBB(I)+SINA*COSC*FFF(I)*XX2(I))
34673       A(4,7)=-XMT*XMR*(COSA*SINC*DDD(I)*XX2(I)+SINA*COSC*FFF(I)*BBB(I))
34674       A(4,8)=-XMQ4*(COSA*COSC*DDD(I)*XX2(I)+SINA*SINC*FFF(I)*BBB(I))
34675  
34676       SMAX=(XMG-ABS(XMR))**2
34677       SMIN=(XMB+XMT)**2+0.1D0
34678  
34679       DO 120 LIN=0,NN-1
34680         SBAR=SMIN+DBLE(LIN)*(SMAX-SMIN)/DBLE(NN)
34681         AM=(XMG2-XMR2)*(XMT2-XMB2)/2D0/SBAR
34682         GRS=SBAR-XMQ2
34683         W=PYLAMF(SBAR,XMB2,XMT2)*PYLAMF(SBAR,XMG2,XMR2)
34684         W=DSQRT(W)/2D0/SBAR
34685         ANT1=LOG(ABS((GRS/2D0+AM+XMST(1)-W)/(GRS/2D0+AM+XMST(1)+W)))
34686         ANT2=LOG(ABS((GRS/2D0+AM+XMST(3)-W)/(GRS/2D0+AM+XMST(3)+W)))
34687         ANB1=LOG(ABS((GRS/2D0-AM+XMSB(1)-W)/(GRS/2D0-AM+XMSB(1)+W)))
34688         ANB2=LOG(ABS((GRS/2D0-AM+XMSB(2)-W)/(GRS/2D0-AM+XMSB(2)+W)))
34689         SUMME(LIN)=-ULR(1)*W+(ULR(1)*(XMQ2/2D0-XMST(1)-XMG*XMT*SIN2A)
34690      &  +2D0*XX1(I)*AAA(I)*XMR*XMB)*ANT1
34691      &  +(ULR(1)/2D0*(XMST(1)*(XMQ2-XMST(1))-XMGTBR
34692      &  -2D0*XMG*XMT*SIN2A*(XMST(1)-XMB2-XMR2))
34693      &  +2D0*XX1(I)*AAA(I)*XMR*XMB*(XMST(1)-XMG2-XMT2)
34694      &  +4D0*SIN2A*XX1(I)*AAA(I)*XMQ4)
34695      &  *(1D0/(GRS/2D0+AM+XMST(1)-W)-1D0/(GRS/2D0+AM+XMST(1)+W))
34696         SUMME(LIN)=SUMME(LIN)-ULR(2)*W
34697      &  +(ULR(2)*(XMQ2/2D0-XMST(3)+XMG*XMT*SIN2A)
34698      &  -2D0*XX2(I)*BBB(I)*XMR*XMB)*ANT2
34699      &  +(ULR(2)/2D0*(XMST(3)*(XMQ2-XMST(3))-XMGTBR
34700      &  +2D0*XMG*XMT*SIN2A*(XMST(3)-XMB2-XMR2))
34701      &  -2D0*XX2(I)*BBB(I)*XMR*XMB*(XMST(3)-XMG2-XMT2)
34702      &  +4D0*SIN2A*XX2(I)*BBB(I)*XMQ4)
34703      &  *(1D0/(GRS/2D0+AM+XMST(3)-W)-1D0/(GRS/2D0+AM+XMST(3)+W))
34704         SUMME(LIN)=SUMME(LIN)-VLR(1)*W
34705      &  +(VLR(1)*(XMQ2/2D0-XMSB(1)-XMG*XMB*SIN2C)
34706      &  +2D0*CCC(I)*EEE(I)*XMR*XMT)*ANB1
34707      &  +(VLR(1)/2D0*(XMSB(1)*(XMQ2-XMSB(1))-XMGBTR
34708      &  -2D0*XMG*XMB*SIN2C*(XMSB(1)-XMT2-XMR2))
34709      &  +2D0*CCC(I)*EEE(I)*XMR*XMT*(XMSB(1)-XMG2-XMB2)
34710      &  +4D0*SIN2C*CCC(I)*EEE(I)*XMQ4)
34711      &  *(1D0/(GRS/2D0-AM+XMSB(1)-W)-1D0/(GRS/2D0-AM+XMSB(1)+W))
34712         SUMME(LIN)=SUMME(LIN)-VLR(2)*W
34713      &  +(VLR(2)*(XMQ2/2D0-XMSB(2)+XMG*XMB*SIN2C)
34714      &  -2D0*DDD(I)*FFF(I)*XMR*XMT)*ANB2
34715      &  +(VLR(2)/2D0*(XMSB(2)*(XMQ2-XMSB(2))-XMGBTR
34716      &  +2D0*XMG*XMB*SIN2C*(XMSB(2)-XMT2-XMR2))
34717      &  -2D0*DDD(I)*FFF(I)*XMR*XMT*(XMSB(2)-XMG2-XMB2)
34718      &  +4D0*SIN2C*DDD(I)*FFF(I)*XMQ4)
34719      &  *(1D0/(GRS/2D0-AM+XMSB(2)-W)-1D0/(GRS/2D0-AM+XMSB(2)+W))
34720         SUMME(LIN)=SUMME(LIN)+2D0*XMG*XMT*COS2A/(XMST(3)-XMST(1))
34721      &  *((AAA(I)*BBB(I)-XX1(I)*XX2(I))
34722      &  *((XMST(3)-XMB2-XMR2)*ANT2-(XMST(1)-XMB2-XMR2)*ANT1)
34723      &  +2D0*(AAA(I)*XX2(I)-XX1(I)*BBB(I))*XMB*XMR*(ANT2-ANT1))
34724         SUMME(LIN)=SUMME(LIN)+2D0*XMG*XMB*COS2C/(XMSB(2)-XMSB(1))
34725      &  *((EEE(I)*FFF(I)-CCC(I)*DDD(I))
34726      &  *((XMSB(2)-XMT2-XMR2)*ANB2-(XMSB(1)-XMT2-XMR2)*ANB1)
34727      &  +2D0*(EEE(I)*DDD(I)-CCC(I)*FFF(I))*XMT*XMR*(ANB2-ANB1))
34728         DO 110 J=1,4
34729           SUMME(LIN)=SUMME(LIN)-2D0*A(J,1)*W
34730      &    +((-A(J,1)*(XMSB(J)*(GRS+XMSB(J))+XMQ3)
34731      &    +A(J,2)*(XMSB(J)-XMT2-XMR2)+A(J,3)*(SBAR-XMB2-XMT2)
34732      &    +A(J,4)*(XMSB(J)+SBAR-XMB2-XMR2)
34733      &    -A(J,5)*(XMSB(J)+SBAR-XMG2-XMT2)+A(J,6)*(XMG2+XMR2-SBAR)
34734      &    -A(J,7)*(XMSB(J)-XMG2-XMB2)+2D0*A(J,8))
34735      &    *LOG(ABS((GRS/2D0+XMSB(J)-AM-W)/(GRS/2D0+XMSB(J)-AM+W)))
34736      &    -(A(J,1)*(XMST(J)*(GRS+XMST(J))+XMQ3)
34737      &    +A(J,2)*(XMST(J)+SBAR-XMG2-XMB2)-A(J,3)*(SBAR-XMB2-XMT2)
34738      &    +A(J,4)*(XMST(J)-XMG2-XMT2)-A(J,5)*(XMST(J)-XMR2-XMB2)
34739      &    -A(J,6)*(XMG2+XMR2-SBAR)
34740      &    -A(J,7)*(XMST(J)+SBAR-XMT2-XMR2)-2D0*A(J,8))
34741      &    *LOG(ABS((GRS/2D0+XMST(J)+AM-W)/(GRS/2D0+XMST(J)+AM+W))))
34742      &    /(GRS+XMSB(J)+XMST(J))
34743   110   CONTINUE
34744   120 CONTINUE
34745       SUMME(NN)=0D0
34746       GAM= ALPHAW * ALPHAS * PYSIMP(SUMME,SMIN,SMAX,NN)
34747      &/ (16D0 * PARU(1) * PARU(102) * XMGLU**3)
34748  
34749       RETURN
34750       END
34751  
34752 C*********************************************************************
34753  
34754 C...PYNJDC
34755 C...Calculates decay widths for the neutralinos (admixtures of
34756 C...Bino, W3-ino, Higgs1-ino, Higgs2-ino)
34757  
34758 C...Input:  KCIN = KF code for particle
34759 C...Output: XLAM = widths
34760 C...        IDLAM = KF codes for decay particles
34761 C...        IKNT = number of decay channels defined
34762 C...AUTHOR: STEPHEN MRENNA
34763 C...Last change:
34764 C...10-15-95:  force decay chi^0_2 -> chi^0_1 + gamma
34765 C...when CHIGAMMA .NE. 0
34766 C...10 FEB 96:  Calculate this decay for small tan(beta)
34767  
34768       SUBROUTINE PYNJDC(KFIN,XLAM,IDLAM,IKNT)
34769  
34770 C...Double precision and integer declarations.
34771       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
34772       IMPLICIT INTEGER(I-N)
34773       INTEGER PYK,PYCHGE,PYCOMP
34774 C...Parameter statement to help give large particle numbers.
34775       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
34776 C...Commonblocks.
34777       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
34778       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
34779       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
34780       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
34781      &SFMIX(16,4)
34782       COMMON/PYINTS/XXM(20)
34783       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
34784  
34785 C...Local variables.
34786       INTEGER KFIN,KCIN
34787       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
34788      &XMZ,XMZ2,AXMJ,AXMI
34789       DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG,XMK
34790       DOUBLE PRECISION S12MIN,S12MAX
34791       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2
34792       DOUBLE PRECISION PYLAMF,XL,QIJ,RIJ
34793       DOUBLE PRECISION TANW,XW,AEM,C1,AS,EI,T3
34794       DOUBLE PRECISION PYX2XH,PYX2XG
34795       DOUBLE PRECISION XLAM(0:200)
34796       INTEGER IDLAM(200,3)
34797       INTEGER LKNT,IX,IH,J,IJ,I,IKNT,FID
34798       INTEGER ITH(3),KF1,KF2
34799       INTEGER ITHC
34800       DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
34801       DOUBLE PRECISION SR2
34802       DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K
34803       DOUBLE PRECISION GAMCON,XMT1,XMT2
34804       DOUBLE PRECISION PYALEM,PI,PYALPS
34805       DOUBLE PRECISION AL,BL,AR,BR,ALP,ARP,BLP,BRP
34806       DOUBLE PRECISION RAT1,RAT2
34807       DOUBLE PRECISION T3T,CA,CB,FCOL
34808       DOUBLE PRECISION ALFA,BETA,TANB
34809       DOUBLE PRECISION PYXXGA
34810       EXTERNAL PYXXW5,PYGAUS,PYXXZ5
34811       DOUBLE PRECISION PYXXW5,PYGAUS,PYXXZ5
34812       DOUBLE PRECISION PREC
34813       INTEGER KFNCHI(4),KFCCHI(2)
34814       DATA ETAH/1D0,1D0,-1D0/
34815       DATA ITH/25,35,36/
34816       DATA ITHC/37/
34817       DATA PREC/1D-2/
34818       DATA PI/3.141592654D0/
34819       DATA SR2/1.4142136D0/
34820       DATA KFNCHI/1000022,1000023,1000025,1000035/
34821       DATA KFCCHI/1000024,1000037/
34822  
34823 C...COUNT THE NUMBER OF DECAY MODES
34824       LKNT=0
34825  
34826       XMW=PMAS(24,1)
34827       XMW2=XMW**2
34828       XMZ=PMAS(23,1)
34829       XMZ2=XMZ**2
34830       XW=1D0-XMW2/XMZ2
34831       TANW = SQRT(XW/(1D0-XW))
34832  
34833 C...IX IS 1 - 4 DEPENDING ON SEQUENCE NUMBER
34834       KCIN=PYCOMP(KFIN)
34835       IX=1
34836       IF(KFIN.EQ.KFNCHI(2)) IX=2
34837       IF(KFIN.EQ.KFNCHI(3)) IX=3
34838       IF(KFIN.EQ.KFNCHI(4)) IX=4
34839  
34840       XMI=SMZ(IX)
34841       XMI2=XMI**2
34842       AXMI=ABS(XMI)
34843       AEM=PYALEM(XMI2)
34844       AS =PYALPS(XMI2)
34845       C1=AEM/XW
34846       XMI3=ABS(XMI**3)
34847  
34848       TANB=RMSS(5)
34849       BETA=ATAN(TANB)
34850       ALFA=RMSS(18)
34851       CBETA=COS(BETA)
34852       SBETA=TANB*CBETA
34853       CALFA=COS(ALFA)
34854       SALFA=SIN(ALFA)
34855  
34856 C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
34857       IF(IX.EQ.1.AND.IMSS(11).EQ.0) GOTO 260
34858  
34859 C...FORCE CHI0_2 -> CHI0_1 + GAMMA
34860       IF(IX.EQ.2 .AND. IMSS(10).NE.0 ) THEN
34861         XMJ=SMZ(1)
34862         AXMJ=ABS(XMJ)
34863         LKNT=LKNT+1
34864         GAMCON=AEM**3/8D0/PI/XMW2/XW
34865         XMT1=(PMAS(PYCOMP(KSUSY1+6),1)/PMAS(6,1))**2
34866         XMT2=(PMAS(PYCOMP(KSUSY2+6),1)/PMAS(6,1))**2
34867         XLAM(LKNT)=PYXXGA(GAMCON,AXMI,AXMJ,XMT1,XMT2)
34868         IDLAM(LKNT,1)=KSUSY1+22
34869         IDLAM(LKNT,2)=22
34870         IDLAM(LKNT,3)=0
34871         WRITE(MSTU(11),*) 'FORCED N2 -> N1 + GAMMA ',XLAM(LKNT)
34872         GOTO 300
34873       ENDIF
34874  
34875 C...GRAVITINO DECAY MODES
34876  
34877       IF(IMSS(11).EQ.1) THEN
34878         XMP=RMSS(29)
34879         IDG=39+KSUSY1
34880         XMGR=PMAS(PYCOMP(IDG),1)
34881         SINW=SQRT(XW)
34882         COSW=SQRT(1D0-XW)
34883         XFAC=(XMI2/(XMP*XMGR))**2*AXMI/48D0/PI
34884         IF(AXMI.GT.XMGR+PMAS(22,1)) THEN
34885           LKNT=LKNT+1
34886           IDLAM(LKNT,1)=IDG
34887           IDLAM(LKNT,2)=22
34888           IDLAM(LKNT,3)=0
34889           XLAM(LKNT)=XFAC*(ZMIX(IX,1)*COSW+ZMIX(IX,2)*SINW)**2
34890         ENDIF
34891         IF(AXMI.GT.XMGR+XMZ) THEN
34892           LKNT=LKNT+1
34893           IDLAM(LKNT,1)=IDG
34894           IDLAM(LKNT,2)=23
34895           IDLAM(LKNT,3)=0
34896           XLAM(LKNT)=XFAC*((ZMIX(IX,1)*SINW-ZMIX(IX,2)*COSW)**2 +
34897      $  .5D0*(ZMIX(IX,3)*CBETA-ZMIX(IX,4)*SBETA)**2)*(1D0-XMZ2/XMI2)**4
34898         ENDIF
34899         IF(AXMI.GT.XMGR+PMAS(25,1)) THEN
34900           LKNT=LKNT+1
34901           IDLAM(LKNT,1)=IDG
34902           IDLAM(LKNT,2)=25
34903           IDLAM(LKNT,3)=0
34904           XLAM(LKNT)=XFAC*((ZMIX(IX,3)*SALFA-ZMIX(IX,4)*CALFA)**2)*
34905      $  .5D0*(1D0-PMAS(25,1)**2/XMI2)**4
34906         ENDIF
34907         IF(AXMI.GT.XMGR+PMAS(35,1)) THEN
34908           LKNT=LKNT+1
34909           IDLAM(LKNT,1)=IDG
34910           IDLAM(LKNT,2)=35
34911           IDLAM(LKNT,3)=0
34912           XLAM(LKNT)=XFAC*((ZMIX(IX,3)*CALFA+ZMIX(IX,4)*SALFA)**2)*
34913      $  .5D0*(1D0-PMAS(35,1)**2/XMI2)**4
34914         ENDIF
34915         IF(AXMI.GT.XMGR+PMAS(36,1)) THEN
34916           LKNT=LKNT+1
34917           IDLAM(LKNT,1)=IDG
34918           IDLAM(LKNT,2)=36
34919           IDLAM(LKNT,3)=0
34920           XLAM(LKNT)=XFAC*((ZMIX(IX,3)*SBETA+ZMIX(IX,4)*CBETA)**2)*
34921      $  .5D0*(1D0-PMAS(36,1)**2/XMI2)**4
34922         ENDIF
34923         IF(IX.EQ.1) GOTO 260
34924       ENDIF
34925  
34926       DO 180 IJ=1,IX-1
34927         XMJ=SMZ(IJ)
34928         AXMJ=ABS(XMJ)
34929         XMJ2=XMJ**2
34930  
34931 C...CHI0_I -> CHI0_J + GAMMA
34932         IF(AXMI.GE.AXMJ.AND.SBETA/CBETA.LE.2D0) THEN
34933           RAT1=ZMIX(IJ,1)**2+ZMIX(IJ,2)**2
34934           RAT1=RAT1/( 1D-6+ZMIX(IX,3)**2+ZMIX(IX,4)**2 )
34935           RAT2=ZMIX(IX,1)**2+ZMIX(IX,2)**2
34936           RAT2=RAT2/( 1D-6+ZMIX(IJ,3)**2+ZMIX(IJ,4)**2 )
34937           IF((RAT1.GT. 0.90D0 .AND. RAT1.LT. 1.10D0) .OR.
34938      &    (RAT2.GT. 0.90D0 .AND. RAT2.LT. 1.10D0)) THEN
34939             LKNT=LKNT+1
34940             IDLAM(LKNT,1)=KFNCHI(IJ)
34941             IDLAM(LKNT,2)=22
34942             IDLAM(LKNT,3)=0
34943             GAMCON=AEM**3/8D0/PI/XMW2/XW
34944             XMT1=(PMAS(PYCOMP(KSUSY1+6),1)/PMAS(6,1))**2
34945             XMT2=(PMAS(PYCOMP(KSUSY2+6),1)/PMAS(6,1))**2
34946             XLAM(LKNT)=PYXXGA(GAMCON,AXMI,AXMJ,XMT1,XMT2)
34947           ENDIF
34948         ENDIF
34949  
34950 C...CHI0_I -> CHI0_J + Z0
34951         IF(AXMI.GE.AXMJ+XMZ) THEN
34952           LKNT=LKNT+1
34953           GL=-0.5D0*(ZMIX(IX,3)*ZMIX(IJ,3)-ZMIX(IX,4)*ZMIX(IJ,4))
34954           GR=-GL
34955           XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMZ,GL,GR)
34956           IDLAM(LKNT,1)=KFNCHI(IJ)
34957           IDLAM(LKNT,2)=23
34958           IDLAM(LKNT,3)=0
34959         ELSEIF(AXMI.GE.AXMJ) THEN
34960           FID=11
34961           EI=KCHG(FID,1)/3D0
34962           T3=-0.5D0
34963           XXM(1)=0D0
34964           XXM(2)=XMJ
34965           XXM(3)=0D0
34966           XXM(4)=XMI
34967           XXM(5)=PMAS(PYCOMP(KSUSY1+11),1)
34968           XXM(6)=PMAS(PYCOMP(KSUSY2+11),1)
34969           XXM(7)=XMZ
34970           XXM(8)=PMAS(23,2)
34971           XXM(9)=-0.5D0*(ZMIX(IX,3)*ZMIX(IJ,3)-ZMIX(IX,4)*ZMIX(IJ,4))
34972           XXM(10)=-XXM(9)
34973           XXM(11)=(T3-EI*XW)/(1D0-XW)
34974           XXM(12)=-EI*XW/(1D0-XW)
34975           XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
34976           XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
34977           XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
34978           XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
34979           S12MIN=0D0
34980           S12MAX=(AXMI-AXMJ)**2
34981  
34982 C...CHARGED LEPTONS
34983           IF( XXM(5).LT.AXMI ) THEN
34984             XXM(5)=1D6
34985           ENDIF
34986           IF(XXM(6).LT.AXMI ) THEN
34987             XXM(6)=1D6
34988           ENDIF
34989           IF(AXMI.GE.AXMJ+2D0*PMAS(11,1)) THEN
34990             LKNT=LKNT+1
34991             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
34992      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
34993             IDLAM(LKNT,1)=KFNCHI(IJ)
34994             IDLAM(LKNT,2)=11
34995             IDLAM(LKNT,3)=-11
34996             IF(AXMI.GE.AXMJ+2D0*PMAS(13,1)) THEN
34997               LKNT=LKNT+1
34998               XLAM(LKNT)=XLAM(LKNT-1)
34999               IDLAM(LKNT,1)=KFNCHI(IJ)
35000               IDLAM(LKNT,2)=13
35001               IDLAM(LKNT,3)=-13
35002             ENDIF
35003           ENDIF
35004   100     CONTINUE
35005           IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
35006             XXM(5)=PMAS(PYCOMP(KSUSY1+15),1)
35007             XXM(6)=PMAS(PYCOMP(KSUSY2+15),1)
35008           ELSE
35009             XXM(6)=PMAS(PYCOMP(KSUSY1+15),1)
35010             XXM(5)=PMAS(PYCOMP(KSUSY2+15),1)
35011           ENDIF
35012           IF( XXM(5).LT.AXMI ) THEN
35013             XXM(5)=1D6
35014           ENDIF
35015           IF(XXM(6).LT.AXMI ) THEN
35016             XXM(6)=1D6
35017           ENDIF
35018  
35019           IF(AXMI.GE.AXMJ+2D0*PMAS(15,1)) THEN
35020             LKNT=LKNT+1
35021             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35022      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35023             IDLAM(LKNT,1)=KFNCHI(IJ)
35024             IDLAM(LKNT,2)=15
35025             IDLAM(LKNT,3)=-15
35026           ENDIF
35027  
35028 C...NEUTRINOS
35029   110     CONTINUE
35030           FID=12
35031           EI=KCHG(FID,1)/3D0
35032           T3=0.5D0
35033           XXM(5)=PMAS(PYCOMP(KSUSY1+12),1)
35034           XXM(6)=1D6
35035           XXM(11)=(T3-EI*XW)/(1D0-XW)
35036           XXM(12)=-EI*XW/(1D0-XW)
35037           XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
35038           XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
35039           XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
35040           XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
35041  
35042           IF( XXM(5).LT.AXMI ) THEN
35043             XXM(5)=1D6
35044           ENDIF
35045  
35046           LKNT=LKNT+1
35047           XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35048      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35049           IDLAM(LKNT,1)=KFNCHI(IJ)
35050           IDLAM(LKNT,2)=12
35051           IDLAM(LKNT,3)=-12
35052           LKNT=LKNT+1
35053           XLAM(LKNT)=XLAM(LKNT-1)
35054           IDLAM(LKNT,1)=KFNCHI(IJ)
35055           IDLAM(LKNT,2)=14
35056           IDLAM(LKNT,3)=-14
35057   120     CONTINUE
35058           XXM(5)=PMAS(PYCOMP(KSUSY1+16),1)
35059           IF( XXM(5).LT.AXMI ) THEN
35060             XXM(5)=1D6
35061           ENDIF
35062           LKNT=LKNT+1
35063           XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35064      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35065           IDLAM(LKNT,1)=KFNCHI(IJ)
35066           IDLAM(LKNT,2)=16
35067           IDLAM(LKNT,3)=-16
35068  
35069 C...D-TYPE QUARKS
35070   130     CONTINUE
35071           XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
35072           XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
35073           FID=1
35074           EI=KCHG(FID,1)/3D0
35075           T3=-0.5D0
35076  
35077           XXM(11)=(T3-EI*XW)/(1D0-XW)
35078           XXM(12)=-EI*XW/(1D0-XW)
35079           XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
35080           XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
35081           XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
35082           XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
35083  
35084           IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 140
35085           IF( XXM(5).LT.AXMI ) THEN
35086             XXM(5)=1D6
35087           ELSEIF( XXM(6).LT.AXMI ) THEN
35088             XXM(6)=1D6
35089           ENDIF
35090           IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
35091             LKNT=LKNT+1
35092             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35093      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
35094             IDLAM(LKNT,1)=KFNCHI(IJ)
35095             IDLAM(LKNT,2)=1
35096             IDLAM(LKNT,3)=-1
35097             IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
35098               LKNT=LKNT+1
35099               XLAM(LKNT)=XLAM(LKNT-1)
35100               IDLAM(LKNT,1)=KFNCHI(IJ)
35101               IDLAM(LKNT,2)=3
35102               IDLAM(LKNT,3)=-3
35103             ENDIF
35104           ENDIF
35105   140     CONTINUE
35106           IF(ABS(SFMIX(5,1)).GT.ABS(SFMIX(5,2))) THEN
35107             XXM(5)=PMAS(PYCOMP(KSUSY1+5),1)
35108             XXM(6)=PMAS(PYCOMP(KSUSY2+5),1)
35109           ELSE
35110             XXM(6)=PMAS(PYCOMP(KSUSY1+5),1)
35111             XXM(5)=PMAS(PYCOMP(KSUSY2+5),1)
35112           ENDIF
35113           IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 150
35114           IF(XXM(5).LT.AXMI) THEN
35115             XXM(5)=1D6
35116           ELSEIF(XXM(6).LT.AXMI) THEN
35117             XXM(6)=1D6
35118           ENDIF
35119           IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
35120             LKNT=LKNT+1
35121             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35122      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
35123             IDLAM(LKNT,1)=KFNCHI(IJ)
35124             IDLAM(LKNT,2)=5
35125             IDLAM(LKNT,3)=-5
35126           ENDIF
35127  
35128 C...U-TYPE QUARKS
35129   150     CONTINUE
35130           XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
35131           XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
35132           FID=2
35133           EI=KCHG(FID,1)/3D0
35134           T3=0.5D0
35135  
35136           XXM(11)=(T3-EI*XW)/(1D0-XW)
35137           XXM(12)=-EI*XW/(1D0-XW)
35138           XXM(13)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))
35139           XXM(14)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))
35140           XXM(15)=SR2*TANW*(EI*ZMIX(IX,1))
35141           XXM(16)=SR2*TANW*(EI*ZMIX(IJ,1))
35142  
35143           IF( XXM(5).LT.AXMI .AND. XXM(6).LT.AXMI ) GOTO 160
35144           IF(XXM(5).LT.AXMI) THEN
35145             XXM(5)=1D6
35146           ELSEIF(XXM(6).LT.AXMI) THEN
35147             XXM(6)=1D6
35148           ENDIF
35149           IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
35150             LKNT=LKNT+1
35151             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35152      &      PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)*3D0
35153             IDLAM(LKNT,1)=KFNCHI(IJ)
35154             IDLAM(LKNT,2)=2
35155             IDLAM(LKNT,3)=-2
35156             IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
35157               LKNT=LKNT+1
35158               XLAM(LKNT)=XLAM(LKNT-1)
35159               IDLAM(LKNT,1)=KFNCHI(IJ)
35160               IDLAM(LKNT,2)=4
35161               IDLAM(LKNT,3)=-4
35162             ENDIF
35163           ENDIF
35164   160     CONTINUE
35165         ENDIF
35166  
35167 C...CHI0_I -> CHI0_J + H0_K
35168         EH(1)=SIN(ALFA)
35169         EH(2)=COS(ALFA)
35170         EH(3)=-SIN(BETA)
35171         DH(1)=COS(ALFA)
35172         DH(2)=-SIN(ALFA)
35173         DH(3)=COS(BETA)
35174  
35175         QIJ=ZMIX(IX,3)*ZMIX(IJ,2)+ZMIX(IJ,3)*ZMIX(IX,2)-
35176      &  TANW*(ZMIX(IX,3)*ZMIX(IJ,1)+ZMIX(IJ,3)*ZMIX(IX,1))
35177         RIJ=ZMIX(IX,4)*ZMIX(IJ,2)+ZMIX(IJ,4)*ZMIX(IX,2)-
35178      &  TANW*(ZMIX(IX,4)*ZMIX(IJ,1)+ZMIX(IJ,4)*ZMIX(IX,1))
35179  
35180         DO 170 IH=1,3
35181           XMH=PMAS(ITH(IH),1)
35182           XMH2=XMH**2
35183           IF(AXMI.GE.AXMJ+XMH) THEN
35184             LKNT=LKNT+1
35185             XL=PYLAMF(XMI2,XMJ2,XMH2)
35186             F21K=0.5D0*(QIJ*EH(IH)+RIJ*DH(IH))
35187             F12K=F21K
35188 C...SIGN OF MASSES I,J
35189             XMK=XMJ
35190             IF(IH.EQ.3) XMK=-XMK
35191             XLAM(LKNT)=PYX2XH(C1,XMI,XMK,XMH,F12K,F21K)
35192             IDLAM(LKNT,1)=KFNCHI(IJ)
35193             IDLAM(LKNT,2)=ITH(IH)
35194             IDLAM(LKNT,3)=0
35195           ENDIF
35196   170   CONTINUE
35197   180 CONTINUE
35198  
35199 C...CHI0_I -> CHI+_J + W-
35200       DO 220 IJ=1,2
35201         XMJ=SMW(IJ)
35202         AXMJ=ABS(XMJ)
35203         XMJ2=XMJ**2
35204         IF(AXMI.GE.AXMJ+XMW) THEN
35205           LKNT=LKNT+1
35206           GL=ZMIX(IX,2)*VMIX(IJ,1)-ZMIX(IX,4)*VMIX(IJ,2)/SR2
35207           GR=ZMIX(IX,2)*UMIX(IJ,1)+ZMIX(IX,3)*UMIX(IJ,2)/SR2
35208           XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMW,GL,GR)
35209           IDLAM(LKNT,1)=KFCCHI(IJ)
35210           IDLAM(LKNT,2)=-24
35211           IDLAM(LKNT,3)=0
35212           LKNT=LKNT+1
35213           XLAM(LKNT)=XLAM(LKNT-1)
35214           IDLAM(LKNT,1)=-KFCCHI(IJ)
35215           IDLAM(LKNT,2)=24
35216           IDLAM(LKNT,3)=0
35217         ELSEIF(AXMI.GE.AXMJ) THEN
35218           S12MIN=0D0
35219           S12MAX=(AXMI-AXMJ)**2
35220           XXM(5)=ZMIX(IX,2)*VMIX(IJ,1)-ZMIX(IX,4)*VMIX(IJ,2)/SR2
35221           XXM(6)=ZMIX(IX,2)*UMIX(IJ,1)+ZMIX(IX,3)*UMIX(IJ,2)/SR2
35222  
35223 C...LEPTONS
35224           FID=11
35225           EI=KCHG(FID,1)/3D0
35226           T3=-0.5D0
35227           XXM(7)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*UMIX(IJ,1)
35228           FID=12
35229           EI=KCHG(FID,1)/3D0
35230           T3=0.5D0
35231           XXM(8)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*VMIX(IJ,1)
35232  
35233           XXM(1)=0D0
35234           XXM(2)=XMJ
35235           XXM(3)=0D0
35236           XXM(4)=XMI
35237           XXM(9)=PMAS(24,1)
35238           XXM(10)=PMAS(24,2)
35239           XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
35240           XXM(12)=PMAS(PYCOMP(KSUSY1+12),1)
35241           IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 190
35242           IF(XXM(11).LT.AXMI) THEN
35243             XXM(11)=1D6
35244           ELSEIF(XXM(12).LT.AXMI) THEN
35245             XXM(12)=1D6
35246           ENDIF
35247           IF(AXMI.GE.AXMJ+PMAS(11,1)+PMAS(12,1)) THEN
35248             LKNT=LKNT+1
35249             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35250      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35251             IDLAM(LKNT,1)=KFCCHI(IJ)
35252             IDLAM(LKNT,2)=11
35253             IDLAM(LKNT,3)=-12
35254             LKNT=LKNT+1
35255             XLAM(LKNT)=XLAM(LKNT-1)
35256             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35257             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35258             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35259             IF(AXMI.GE.AXMJ+PMAS(13,1)+PMAS(14,1)) THEN
35260               LKNT=LKNT+1
35261               XLAM(LKNT)=XLAM(LKNT-1)
35262               IDLAM(LKNT,1)=KFCCHI(IJ)
35263               IDLAM(LKNT,2)=13
35264               IDLAM(LKNT,3)=-14
35265               LKNT=LKNT+1
35266               XLAM(LKNT)=XLAM(LKNT-1)
35267               IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35268               IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35269               IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35270             ENDIF
35271           ENDIF
35272   190     CONTINUE
35273           IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
35274             XXM(11)=PMAS(PYCOMP(KSUSY1+15),1)
35275             XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
35276           ELSE
35277             XXM(11)=PMAS(PYCOMP(KSUSY2+15),1)
35278             XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
35279           ENDIF
35280  
35281           IF(XXM(11).LT.AXMI) THEN
35282             XXM(11)=1D6
35283           ENDIF
35284           IF(XXM(12).LT.AXMI) THEN
35285             XXM(12)=1D6
35286           ENDIF
35287           IF(AXMI.GE.AXMJ+PMAS(15,1)+PMAS(16,1)) THEN
35288             LKNT=LKNT+1
35289             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35290      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35291             XLAM(LKNT)=XLAM(LKNT-1)
35292             IDLAM(LKNT,1)=KFCCHI(IJ)
35293             IDLAM(LKNT,2)=15
35294             IDLAM(LKNT,3)=-16
35295             LKNT=LKNT+1
35296             XLAM(LKNT)=XLAM(LKNT-1)
35297             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35298             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35299             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35300           ENDIF
35301  
35302 C...NOW, DO THE QUARKS
35303   200     CONTINUE
35304           FID=1
35305           EI=KCHG(FID,1)/3D0
35306           T3=-0.5D0
35307           XXM(7)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*UMIX(IJ,1)
35308           FID=2
35309           EI=KCHG(FID,1)/3D0
35310           T3=0.5D0
35311           XXM(8)=-SR2*(T3*ZMIX(IX,2)-TANW*(T3-EI)*ZMIX(IX,1))*VMIX(IJ,1)
35312  
35313           XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
35314           XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
35315           IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 210
35316           IF(XXM(11).LT.AXMI) THEN
35317             XXM(11)=1D6
35318           ELSEIF(XXM(12).LT.AXMI) THEN
35319             XXM(12)=1D6
35320           ENDIF
35321           IF(AXMI.GE.AXMJ+PMAS(2,1)+PMAS(1,1)) THEN
35322             LKNT=LKNT+1
35323             XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
35324      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35325             IDLAM(LKNT,1)=KFCCHI(IJ)
35326             IDLAM(LKNT,2)=1
35327             IDLAM(LKNT,3)=-2
35328             LKNT=LKNT+1
35329             XLAM(LKNT)=XLAM(LKNT-1)
35330             IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35331             IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35332             IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35333             IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
35334               LKNT=LKNT+1
35335               XLAM(LKNT)=XLAM(LKNT-1)
35336               IDLAM(LKNT,1)=KFCCHI(IJ)
35337               IDLAM(LKNT,2)=3
35338               IDLAM(LKNT,3)=-4
35339               LKNT=LKNT+1
35340               XLAM(LKNT)=XLAM(LKNT-1)
35341               IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35342               IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35343               IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35344             ENDIF
35345           ENDIF
35346   210     CONTINUE
35347         ENDIF
35348   220 CONTINUE
35349   230 CONTINUE
35350  
35351 C...CHI0_I -> CHI+_I + H-
35352       DO 240 IJ=1,2
35353         XMJ=SMW(IJ)
35354         AXMJ=ABS(XMJ)
35355         XMJ2=XMJ**2
35356         XMHP=PMAS(ITHC,1)
35357         XMHP2=XMHP**2
35358         IF(AXMI.GE.AXMJ+XMHP) THEN
35359           LKNT=LKNT+1
35360           GL=CBETA*(ZMIX(IX,4)*VMIX(IJ,1)+(ZMIX(IX,2)+
35361      &    ZMIX(IX,1)*TANW)*VMIX(IJ,2)/SR2)
35362           GR=SBETA*(ZMIX(IX,3)*UMIX(IJ,1)-(ZMIX(IX,2)+
35363      &    ZMIX(IX,1)*TANW)*UMIX(IJ,2)/SR2)
35364           XLAM(LKNT)=PYX2XH(C1,XMI,XMJ,XMHP,GL,GR)
35365           IDLAM(LKNT,1)=KFCCHI(IJ)
35366           IDLAM(LKNT,2)=-ITHC
35367           IDLAM(LKNT,3)=0
35368           LKNT=LKNT+1
35369           XLAM(LKNT)=XLAM(LKNT-1)
35370           IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35371           IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35372           IDLAM(LKNT,3)=-IDLAM(LKNT-1,3)
35373         ELSE
35374  
35375         ENDIF
35376   240 CONTINUE
35377  
35378 C...2-BODY DECAYS TO FERMION SFERMION
35379       DO 250 J=1,16
35380         IF(J.GE.7.AND.J.LE.10) GOTO 250
35381         KF1=KSUSY1+J
35382         KF2=KSUSY2+J
35383         XMSF1=PMAS(PYCOMP(KF1),1)
35384         XMSF2=PMAS(PYCOMP(KF2),1)
35385         XMF=PMAS(J,1)
35386         IF(J.LE.6) THEN
35387           FCOL=3D0
35388         ELSE
35389           FCOL=1D0
35390         ENDIF
35391  
35392         EI=KCHG(J,1)/3D0
35393         T3T=SIGN(1D0,EI)
35394         IF(J.EQ.12.OR.J.EQ.14.OR.J.EQ.16) T3T=1D0
35395         IF(MOD(J,2).EQ.0) THEN
35396           BL=T3T*ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-T3T)
35397           AL=XMF*ZMIX(IX,4)/XMW/SBETA
35398           AR=-2D0*EI*TANW*ZMIX(IX,1)
35399           BR=AL
35400         ELSE
35401           BL=T3T*ZMIX(IX,2)+TANW*ZMIX(IX,1)*(2D0*EI-T3T)
35402           AL=XMF*ZMIX(IX,3)/XMW/CBETA
35403           AR=-2D0*EI*TANW*ZMIX(IX,1)
35404           BR=AL
35405         ENDIF
35406  
35407 C...D~ D_L
35408         IF(AXMI.GE.XMF+XMSF1) THEN
35409           LKNT=LKNT+1
35410           XMA2=XMSF1**2
35411           XMB2=XMF**2
35412           XL=PYLAMF(XMI2,XMA2,XMB2)
35413           CA=AL*SFMIX(J,1)+AR*SFMIX(J,2)
35414           CB=BL*SFMIX(J,1)+BR*SFMIX(J,2)
35415           XLAM(LKNT)=0.5D0*FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
35416      &    (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
35417           IDLAM(LKNT,1)=KF1
35418           IDLAM(LKNT,2)=-J
35419           IDLAM(LKNT,3)=0
35420           LKNT=LKNT+1
35421           XLAM(LKNT)=XLAM(LKNT-1)
35422           IDLAM(LKNT,1)=-IDLAM(LKNT-1,1)
35423           IDLAM(LKNT,2)=-IDLAM(LKNT-1,2)
35424           IDLAM(LKNT,3)=0
35425         ENDIF
35426  
35427 C...D~ D_R
35428         IF(AXMI.GE.XMF+XMSF2) THEN
35429           LKNT=LKNT+1
35430           XMA2=XMSF2**2
35431           XMB2=XMF**2
35432           CA=AL*SFMIX(J,3)+AR*SFMIX(J,4)
35433           CB=BL*SFMIX(J,3)+BR*SFMIX(J,4)
35434           XL=PYLAMF(XMI2,XMA2,XMB2)
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)=KF2
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   250 CONTINUE
35447   260 CONTINUE
35448 C...3-BODY DECAY TO Q Q~ GLUINO
35449       XMJ=PMAS(PYCOMP(KSUSY1+21),1)
35450       IF(AXMI.GE.XMJ) THEN
35451         AXMJ=ABS(XMJ)
35452         XXM(1)=0D0
35453         XXM(2)=XMJ
35454         XXM(3)=0D0
35455         XXM(4)=XMI
35456         XXM(5)=PMAS(PYCOMP(KSUSY1+1),1)
35457         XXM(6)=PMAS(PYCOMP(KSUSY2+1),1)
35458         XXM(7)=1D6
35459         XXM(8)=0D0
35460         XXM(9)=0D0
35461         XXM(10)=0D0
35462         S12MIN=0D0
35463         S12MAX=(AXMI-AXMJ)**2
35464 C...ALL QUARKS BUT T
35465         XXM(11)=0D0
35466         XXM(12)=0D0
35467         XXM(13)=1D0
35468         XXM(14)=-SR2*(-0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
35469         XXM(15)=1D0
35470         XXM(16)=SR2*(-TANW*ZMIX(IX,1)/3D0)
35471         IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 270
35472         IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
35473           LKNT=LKNT+1
35474           XLAM(LKNT)=4D0*C1*AS/XMI3/(16D0*PI)*
35475      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35476           IDLAM(LKNT,1)=KSUSY1+21
35477           IDLAM(LKNT,2)=1
35478           IDLAM(LKNT,3)=-1
35479           IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
35480             LKNT=LKNT+1
35481             XLAM(LKNT)=XLAM(LKNT-1)
35482             IDLAM(LKNT,1)=KSUSY1+21
35483             IDLAM(LKNT,2)=3
35484             IDLAM(LKNT,3)=-3
35485           ENDIF
35486         ENDIF
35487   270   CONTINUE
35488         IF(ABS(SFMIX(5,1)).GT.ABS(SFMIX(5,2))) THEN
35489           XXM(5)=PMAS(PYCOMP(KSUSY1+5),1)
35490           XXM(6)=PMAS(PYCOMP(KSUSY2+5),1)
35491         ELSE
35492           XXM(6)=PMAS(PYCOMP(KSUSY1+5),1)
35493           XXM(5)=PMAS(PYCOMP(KSUSY2+5),1)
35494         ENDIF
35495         IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 280
35496         IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
35497           LKNT=LKNT+1
35498           XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
35499      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35500           IDLAM(LKNT,1)=KSUSY1+21
35501           IDLAM(LKNT,2)=5
35502           IDLAM(LKNT,3)=-5
35503         ENDIF
35504 C...U-TYPE QUARKS
35505   280   CONTINUE
35506         XXM(5)=PMAS(PYCOMP(KSUSY1+2),1)
35507         XXM(6)=PMAS(PYCOMP(KSUSY2+2),1)
35508         XXM(13)=1D0
35509         XXM(14)=-SR2*(0.5D0*ZMIX(IX,2)+TANW*ZMIX(IX,1)/6D0)
35510         XXM(15)=1D0
35511         XXM(16)=SR2*(2D0*TANW*ZMIX(IX,1)/3D0)
35512         IF( XXM(5).LT.AXMI .OR. XXM(6).LT.AXMI ) GOTO 290
35513         IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
35514           LKNT=LKNT+1
35515           XLAM(LKNT)=0.5D0*C1*AS/XMI3/(16D0*PI)*
35516      &    PYGAUS(PYXXZ5,S12MIN,S12MAX,1D-3)
35517           IDLAM(LKNT,1)=KSUSY1+21
35518           IDLAM(LKNT,2)=2
35519           IDLAM(LKNT,3)=-2
35520           IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
35521             LKNT=LKNT+1
35522             XLAM(LKNT)=XLAM(LKNT-1)
35523             IDLAM(LKNT,1)=KSUSY1+21
35524             IDLAM(LKNT,2)=4
35525             IDLAM(LKNT,3)=-4
35526           ENDIF
35527         ENDIF
35528   290   CONTINUE
35529       ENDIF
35530  
35531   300 IKNT=LKNT
35532       XLAM(0)=0D0
35533       DO 310 I=1,IKNT
35534         IF(XLAM(I).LT.0D0) XLAM(I)=0D0
35535         XLAM(0)=XLAM(0)+XLAM(I)
35536   310 CONTINUE
35537       IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
35538  
35539       RETURN
35540       END
35541  
35542 C*********************************************************************
35543  
35544 C...PYCJDC
35545 C...Calculate decay widths for the charginos (admixtures of
35546 C...charged Wino and charged Higgsino.
35547  
35548 C...Input:  KCIN = KF code for particle
35549 C...Output: XLAM = widths
35550 C...        IDLAM = KF codes for decay particles
35551 C...        IKNT = number of decay channels defined
35552 C...AUTHOR: STEPHEN MRENNA
35553 C...Last change:
35554 C...10-16-95:  force decay chi^+_1 -> chi^0_1 e+ nu_e
35555 C...when CHIENU .NE. 0
35556  
35557       SUBROUTINE PYCJDC(KFIN,XLAM,IDLAM,IKNT)
35558  
35559 C...Double precision and integer declarations.
35560       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
35561       IMPLICIT INTEGER(I-N)
35562       INTEGER PYK,PYCHGE,PYCOMP
35563 C...Parameter statement to help give large particle numbers.
35564       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
35565 C...Commonblocks.
35566       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
35567       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
35568       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
35569       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
35570      &SFMIX(16,4)
35571       COMMON/PYINTS/XXM(20)
35572       SAVE /PYDAT1/,/PYDAT2/,/PYMSSM/,/PYSSMT/,/PYINTS/
35573  
35574 C...Local variables.
35575       INTEGER KFIN,KCIN
35576       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
35577      &XMZ,XMZ2,AXMJ,AXMI
35578       DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG
35579       DOUBLE PRECISION S12MIN,S12MAX
35580       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2,XMK
35581       DOUBLE PRECISION PYLAMF,XL
35582       DOUBLE PRECISION TANW,XW,AEM,C1,AS,EI,T3,BETA,ALFA
35583       DOUBLE PRECISION PYX2XH,PYX2XG
35584       DOUBLE PRECISION XLAM(0:200)
35585       INTEGER IDLAM(200,3)
35586       INTEGER LKNT,IX,IH,J,IJ,I,IKNT,FID
35587       INTEGER ITH(3)
35588       INTEGER ITHC
35589       DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
35590       DOUBLE PRECISION SR2
35591       DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K,TANB
35592  
35593       DOUBLE PRECISION PYALEM,PI,PYALPS
35594       DOUBLE PRECISION AL,BL,AR,BR,ALP,BLP,ARP,BRP
35595       DOUBLE PRECISION CA,CB,FCOL
35596       INTEGER KF1,KF2,ISF
35597       INTEGER KFNCHI(4),KFCCHI(2)
35598  
35599       DOUBLE PRECISION TEMP
35600       EXTERNAL PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
35601       DOUBLE PRECISION PYGAUS,PYXXZ5,PYXXW5,PYXXZ2
35602       DOUBLE PRECISION PREC
35603       DATA ITH/25,35,36/
35604       DATA ITHC/37/
35605       DATA ETAH/1D0,1D0,-1D0/
35606       DATA SR2/1.4142136D0/
35607       DATA PI/3.141592654D0/
35608       DATA PREC/1D-2/
35609       DATA KFNCHI/1000022,1000023,1000025,1000035/
35610       DATA KFCCHI/1000024,1000037/
35611  
35612 C...COUNT THE NUMBER OF DECAY MODES
35613       LKNT=0
35614       XMW=PMAS(24,1)
35615       XMW2=XMW**2
35616       XMZ=PMAS(23,1)
35617       XMZ2=XMZ**2
35618       XW=1D0-XMW2/XMZ2
35619       TANW = SQRT(XW/(1D0-XW))
35620  
35621 C...1 OR 2 DEPENDING ON CHARGINO TYPE
35622       IX=1
35623       IF(KFIN.EQ.KFCCHI(2)) IX=2
35624       KCIN=PYCOMP(KFIN)
35625  
35626       XMI=SMW(IX)
35627       XMI2=XMI**2
35628       AXMI=ABS(XMI)
35629       AEM=PYALEM(XMI2)
35630       AS =PYALPS(XMI2)
35631       C1=AEM/XW
35632       XMI3=ABS(XMI**3)
35633       TANB=RMSS(5)
35634       BETA=ATAN(TANB)
35635       CBETA=COS(BETA)
35636       SBETA=TANB*CBETA
35637       ALFA=RMSS(18)
35638  
35639 C...GRAVITINO DECAY MODES
35640  
35641       IF(IMSS(11).EQ.1) THEN
35642         XMP=RMSS(29)
35643         IDG=39+KSUSY1
35644         XMGR=PMAS(PYCOMP(IDG),1)
35645         SINW=SQRT(XW)
35646         COSW=SQRT(1D0-XW)
35647         XFAC=(XMI2/(XMP*XMGR))**2*AXMI/48D0/PI
35648         IF(AXMI.GT.XMGR+XMW) THEN
35649           LKNT=LKNT+1
35650           IDLAM(LKNT,1)=IDG
35651           IDLAM(LKNT,2)=24
35652           IDLAM(LKNT,3)=0
35653           XLAM(LKNT)=XFAC*(.5D0*(VMIX(IX,1)**2+UMIX(IX,1)**2)+
35654      &  .5D0*((VMIX(IX,2)*SBETA)**2+(UMIX(IX,2)*CBETA)**2))*
35655      &  (1D0-XMW2/XMI2)**4
35656         ENDIF
35657         IF(AXMI.GT.XMGR+PMAS(37,1)) THEN
35658           LKNT=LKNT+1
35659           IDLAM(LKNT,1)=IDG
35660           IDLAM(LKNT,2)=37
35661           IDLAM(LKNT,3)=0
35662           XLAM(LKNT)=XFAC*(.5D0*((VMIX(IX,2)*CBETA)**2+
35663      &   (UMIX(IX,2)*SBETA)**2))
35664      &   *(1D0-PMAS(37,1)**2/XMI2)**4
35665        ENDIF
35666       ENDIF
35667  
35668 C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
35669       IF(IX.EQ.1) GOTO 150
35670       XMJ=SMW(1)
35671       AXMJ=ABS(XMJ)
35672       XMJ2=XMJ**2
35673  
35674 C...CHI_2+ -> CHI_1+ + Z0
35675       IF(AXMI.GE.AXMJ+XMZ) THEN
35676         LKNT=LKNT+1
35677         GL=VMIX(2,1)*VMIX(1,1)+0.5D0*VMIX(2,2)*VMIX(1,2)
35678         GR=UMIX(2,1)*UMIX(1,1)+0.5D0*UMIX(2,2)*UMIX(1,2)
35679         XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMZ,GL,GR)
35680         IDLAM(LKNT,1)=KFCCHI(1)
35681         IDLAM(LKNT,2)=23
35682         IDLAM(LKNT,3)=0
35683  
35684 C...CHARGED LEPTONS
35685       ELSEIF(AXMI.GE.AXMJ) THEN
35686         XXM(5)=-(VMIX(2,1)*VMIX(1,1)+0.5D0*VMIX(2,2)*VMIX(1,2))
35687         XXM(6)=-(UMIX(2,1)*UMIX(1,1)+0.5D0*UMIX(2,2)*UMIX(1,2))
35688         XXM(9)=XMZ
35689         XXM(10)=PMAS(23,2)
35690         XXM(1)=0D0
35691         XXM(2)=XMJ
35692         XXM(3)=0D0
35693         XXM(4)=XMI
35694         S12MIN=0D0
35695         S12MAX=(AXMJ-AXMI)**2
35696         XXM(7)= (-0.5D0+XW)/(1D0-XW)
35697         XXM(8)= XW/(1D0-XW)
35698         XXM(11)=PMAS(PYCOMP(KSUSY1+12),1)
35699         XXM(12)=VMIX(2,1)*VMIX(1,1)
35700         IF( XXM(11).LT.AXMI ) THEN
35701           XXM(11)=1D6
35702         ENDIF
35703         IF(AXMI.GE.AXMJ+2D0*PMAS(11,1)) THEN
35704           LKNT=LKNT+1
35705           XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35706      &    PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
35707           IDLAM(LKNT,1)=KFCCHI(1)
35708           IDLAM(LKNT,2)=11
35709           IDLAM(LKNT,3)=-11
35710           IF(AXMI.GE.AXMJ+2D0*PMAS(13,1)) THEN
35711             LKNT=LKNT+1
35712             XLAM(LKNT)=XLAM(LKNT-1)
35713             IDLAM(LKNT,1)=KFCCHI(1)
35714             IDLAM(LKNT,2)=13
35715             IDLAM(LKNT,3)=-13
35716             IF(AXMI.GE.AXMJ+2D0*PMAS(15,1)) THEN
35717               LKNT=LKNT+1
35718               XLAM(LKNT)=XLAM(LKNT-1)
35719               IDLAM(LKNT,1)=KFCCHI(1)
35720               IDLAM(LKNT,2)=15
35721               IDLAM(LKNT,3)=-15
35722             ENDIF
35723           ENDIF
35724         ENDIF
35725  
35726 C...NEUTRINOS
35727   100   CONTINUE
35728         XXM(7)= (0.5D0)/(1D0-XW)
35729         XXM(8)= 0D0
35730         XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
35731         XXM(12)=UMIX(2,1)*UMIX(1,1)
35732         IF( XXM(11).LT.AXMI ) THEN
35733           XXM(11)=1D6
35734         ENDIF
35735         IF(AXMI.GE.AXMJ+2D0*PMAS(12,1)) THEN
35736           LKNT=LKNT+1
35737           XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*
35738      &    PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
35739           IDLAM(LKNT,1)=KFCCHI(1)
35740           IDLAM(LKNT,2)=12
35741           IDLAM(LKNT,3)=-12
35742           LKNT=LKNT+1
35743           XLAM(LKNT)=XLAM(LKNT-1)
35744           IDLAM(LKNT,1)=KFCCHI(1)
35745           IDLAM(LKNT,2)=14
35746           IDLAM(LKNT,3)=-14
35747           LKNT=LKNT+1
35748           XLAM(LKNT)=XLAM(LKNT-1)
35749           IDLAM(LKNT,1)=KFCCHI(1)
35750           IDLAM(LKNT,2)=16
35751           IDLAM(LKNT,3)=-16
35752         ENDIF
35753  
35754 C...D-TYPE QUARKS
35755   110   CONTINUE
35756         XXM(7)= (-0.5D0+XW/3D0)/(1D0-XW)
35757         XXM(8)= XW/3D0/(1D0-XW)
35758         XXM(11)=PMAS(PYCOMP(KSUSY1+2),1)
35759         XXM(12)=VMIX(2,1)*VMIX(1,1)
35760         IF( XXM(11).LT.AXMI ) GOTO 120
35761         IF(AXMI.GE.AXMJ+2D0*PMAS(1,1)) THEN
35762           LKNT=LKNT+1
35763           XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
35764      &    PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
35765           IDLAM(LKNT,1)=KFCCHI(1)
35766           IDLAM(LKNT,2)=1
35767           IDLAM(LKNT,3)=-1
35768           IF(AXMI.GE.AXMJ+2D0*PMAS(3,1)) THEN
35769             LKNT=LKNT+1
35770             XLAM(LKNT)=XLAM(LKNT-1)
35771             IDLAM(LKNT,1)=KFCCHI(1)
35772             IDLAM(LKNT,2)=3
35773             IDLAM(LKNT,3)=-3
35774             IF(AXMI.GE.AXMJ+2D0*PMAS(5,1)) THEN
35775               LKNT=LKNT+1
35776               XLAM(LKNT)=XLAM(LKNT-1)
35777               IDLAM(LKNT,1)=KFCCHI(1)
35778               IDLAM(LKNT,2)=5
35779               IDLAM(LKNT,3)=-5
35780             ENDIF
35781           ENDIF
35782         ENDIF
35783  
35784 C...U-TYPE QUARKS
35785   120   CONTINUE
35786         XXM(7)= (0.5D0-2D0*XW/3D0)/(1D0-XW)
35787         XXM(8)= -2D0*XW/3D0/(1D0-XW)
35788         XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
35789         XXM(12)=UMIX(2,1)*UMIX(1,1)
35790         IF( XXM(11).LT.AXMI ) GOTO 130
35791         IF(AXMI.GE.AXMJ+2D0*PMAS(2,1)) THEN
35792           LKNT=LKNT+1
35793           XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
35794      &    PYGAUS(PYXXZ2,S12MIN,S12MAX,PREC)
35795           IDLAM(LKNT,1)=KFCCHI(1)
35796           IDLAM(LKNT,2)=2
35797           IDLAM(LKNT,3)=-2
35798           IF(AXMI.GE.AXMJ+2D0*PMAS(4,1)) THEN
35799             LKNT=LKNT+1
35800             XLAM(LKNT)=XLAM(LKNT-1)
35801             IDLAM(LKNT,1)=KFCCHI(1)
35802             IDLAM(LKNT,2)=4
35803             IDLAM(LKNT,3)=-4
35804           ENDIF
35805         ENDIF
35806   130   CONTINUE
35807       ENDIF
35808  
35809 C...CHI_2+ -> CHI_1+ + H0_K
35810       EH(2)=COS(ALFA)
35811       EH(1)=SIN(ALFA)
35812       EH(3)=-SBETA
35813       DH(2)=-SIN(ALFA)
35814       DH(1)=COS(ALFA)
35815       DH(3)=COS(BETA)
35816       DO 140 IH=1,3
35817         XMH=PMAS(ITH(IH),1)
35818         XMH2=XMH**2
35819 C...NO 3-BODY OPTION
35820         IF(AXMI.GE.AXMJ+XMH) THEN
35821           LKNT=LKNT+1
35822           XL=PYLAMF(XMI2,XMJ2,XMH2)
35823           F21K=(VMIX(2,1)*UMIX(1,2)*EH(IH) -
35824      &    VMIX(2,2)*UMIX(1,1)*DH(IH))/SR2
35825           F12K=(VMIX(1,1)*UMIX(2,2)*EH(IH) -
35826      &    VMIX(1,2)*UMIX(2,1)*DH(IH))/SR2
35827           XMK=XMJ*ETAH(IH)
35828           XLAM(LKNT)=PYX2XH(C1,XMI,XMK,XMH,F12K,F21K)
35829           IDLAM(LKNT,1)=KFCCHI(1)
35830           IDLAM(LKNT,2)=ITH(IH)
35831           IDLAM(LKNT,3)=0
35832         ENDIF
35833   140 CONTINUE
35834  
35835 C...CHI1 JUMPS TO HERE
35836   150 CONTINUE
35837  
35838 C...CHI+_I -> CHI0_J + W+
35839       DO 180 IJ=1,4
35840         XMJ=SMZ(IJ)
35841         AXMJ=ABS(XMJ)
35842         XMJ2=XMJ**2
35843         IF(AXMI.GE.AXMJ+XMW) THEN
35844           LKNT=LKNT+1
35845           GL=ZMIX(IJ,2)*VMIX(IX,1)-ZMIX(IJ,4)*VMIX(IX,2)/SR2
35846           GR=ZMIX(IJ,2)*UMIX(IX,1)+ZMIX(IJ,3)*UMIX(IX,2)/SR2
35847           XLAM(LKNT)=PYX2XG(C1/XMW2,XMI,XMJ,XMW,GL,GR)
35848           IDLAM(LKNT,1)=KFNCHI(IJ)
35849           IDLAM(LKNT,2)=24
35850           IDLAM(LKNT,3)=0
35851  
35852 C...LEPTONS
35853         ELSEIF(AXMI.GE.AXMJ) THEN
35854           XMF1=0D0
35855           XMF2=0D0
35856           S12MIN=(XMF1+XMF2)**2
35857           S12MAX=(AXMJ-AXMI)**2
35858           XXM(5)=-1D0/SR2*ZMIX(IJ,4)*VMIX(IX,2)+ZMIX(IJ,2)*VMIX(IX,1)
35859           XXM(6)= 1D0/SR2*ZMIX(IJ,3)*UMIX(IX,2)+ZMIX(IJ,2)*UMIX(IX,1)
35860           FID=11
35861           EI=KCHG(FID,1)/3D0
35862           T3=-0.5D0
35863           XXM(7)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*UMIX(IX,1)
35864           FID=12
35865           EI=KCHG(FID,1)/3D0
35866           T3=0.5D0
35867           XXM(8)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*VMIX(IX,1)
35868  
35869           XXM(4)=XMI
35870           XXM(1)=XMF1
35871           XXM(2)=XMJ
35872           XXM(3)=XMF2
35873           XXM(9)=PMAS(24,1)
35874           XXM(10)=PMAS(24,2)
35875           XXM(11)=PMAS(PYCOMP(KSUSY1+11),1)
35876           XXM(12)=PMAS(PYCOMP(KSUSY1+12),1)
35877  
35878 C...1/(2PI)**3*/(32*M**3)*G^4, G^2/(4*PI)= AEM/XW,
35879 C...--> 1/(16PI)/M**3*(AEM/XW)**2
35880  
35881           IF(XXM(11).LT.AXMI) THEN
35882             XXM(11)=1D6
35883           ENDIF
35884           IF(XXM(12).LT.AXMI) THEN
35885             XXM(12)=1D6
35886           ENDIF
35887           IF(AXMI.GE.AXMJ+PMAS(11,1)+PMAS(12,1)) THEN
35888             LKNT=LKNT+1
35889             TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35890             XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
35891             IDLAM(LKNT,1)=KFNCHI(IJ)
35892             IDLAM(LKNT,2)=-11
35893             IDLAM(LKNT,3)=12
35894  
35895 C...ONLY DECAY CHI+1 -> E+ NU_E
35896             IF( IMSS(12).NE. 0 ) GOTO 220
35897             IF(AXMI.GE.AXMJ+PMAS(13,1)+PMAS(14,1)) THEN
35898               LKNT=LKNT+1
35899               XXM(11)=PMAS(PYCOMP(KSUSY1+13),1)
35900               XXM(12)=PMAS(PYCOMP(KSUSY1+14),1)
35901               IF(XXM(11).LT.AXMI) THEN
35902                 XXM(11)=1D6
35903               ELSEIF(XXM(12).LT.AXMI) THEN
35904                 XXM(12)=1D6
35905               ENDIF
35906               TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35907               XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
35908               IDLAM(LKNT,1)=KFNCHI(IJ)
35909               IDLAM(LKNT,2)=-13
35910               IDLAM(LKNT,3)=14
35911               IF(AXMI.GE.AXMJ+PMAS(15,1)+PMAS(16,1)) THEN
35912                 LKNT=LKNT+1
35913                 IF(ABS(SFMIX(15,1)).GT.ABS(SFMIX(15,2))) THEN
35914                   XXM(11)=PMAS(PYCOMP(KSUSY1+15),1)
35915                 ELSE
35916                   XXM(11)=PMAS(PYCOMP(KSUSY2+15),1)
35917                 ENDIF
35918                 XXM(12)=PMAS(PYCOMP(KSUSY1+16),1)
35919                 IF(XXM(11).LT.AXMI) THEN
35920                   XXM(11)=1D6
35921                 ENDIF
35922                 IF(XXM(12).LT.AXMI) THEN
35923                   XXM(12)=1D6
35924                 ENDIF
35925                 TEMP=PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35926                 XLAM(LKNT)=C1**2/XMI3/(16D0*PI)*TEMP
35927                 IDLAM(LKNT,1)=KFNCHI(IJ)
35928                 IDLAM(LKNT,2)=-15
35929                 IDLAM(LKNT,3)=16
35930               ENDIF
35931             ENDIF
35932           ENDIF
35933  
35934 C...NOW, DO THE QUARKS
35935   160     CONTINUE
35936           FID=1
35937           EI=KCHG(FID,1)/3D0
35938           T3=-0.5D0
35939           XXM(7)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*UMIX(IX,1)
35940           FID=1
35941           EI=KCHG(FID,1)/3D0
35942           T3=0.5D0
35943           XXM(8)=-SR2*(T3*ZMIX(IJ,2)-TANW*(T3-EI)*ZMIX(IJ,1))*VMIX(IX,1)
35944  
35945           XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
35946           XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
35947           IF( XXM(11).LT.AXMI .AND. XXM(12).LT.AXMI ) GOTO 170
35948           IF(XXM(11).LT.AXMI) THEN
35949             XXM(11)=1D6
35950           ELSEIF(XXM(12).LT.AXMI) THEN
35951             XXM(12)=1D6
35952           ENDIF
35953           IF(AXMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
35954             LKNT=LKNT+1
35955             XLAM(LKNT)=3D0*C1**2/XMI3/(16D0*PI)*
35956      &      PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
35957             IDLAM(LKNT,1)=KFNCHI(IJ)
35958             IDLAM(LKNT,2)=-1
35959             IDLAM(LKNT,3)=2
35960             IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
35961               LKNT=LKNT+1
35962               XLAM(LKNT)=XLAM(LKNT-1)
35963               IDLAM(LKNT,1)=KFNCHI(IJ)
35964               IDLAM(LKNT,2)=-3
35965               IDLAM(LKNT,3)=4
35966             ENDIF
35967           ENDIF
35968   170     CONTINUE
35969         ENDIF
35970   180 CONTINUE
35971  
35972 C...CHI+_I -> CHI0_J + H+
35973       DO 190 IJ=1,4
35974         XMJ=SMZ(IJ)
35975         AXMJ=ABS(XMJ)
35976         XMJ2=XMJ**2
35977         XMHP=PMAS(ITHC,1)
35978         XMHP2=XMHP**2
35979         IF(AXMI.GE.AXMJ+XMHP) THEN
35980           LKNT=LKNT+1
35981           GL=CBETA*(ZMIX(IJ,4)*VMIX(IX,1)+(ZMIX(IJ,2)+
35982      &    ZMIX(IJ,1)*TANW)*VMIX(IX,2)/SR2)
35983           GR=SBETA*(ZMIX(IJ,3)*UMIX(IX,1)-(ZMIX(IJ,2)+
35984      &    ZMIX(IJ,1)*TANW)*UMIX(IX,2)/SR2)
35985           XLAM(LKNT)=PYX2XH(C1,XMI,XMJ,XMHP,GL,GR)
35986           IDLAM(LKNT,1)=KFNCHI(IJ)
35987           IDLAM(LKNT,2)=ITHC
35988           IDLAM(LKNT,3)=0
35989         ELSE
35990  
35991         ENDIF
35992   190 CONTINUE
35993  
35994 C...2-BODY DECAYS TO FERMION SFERMION
35995       DO 200 J=1,16
35996         IF(J.GE.7.AND.J.LE.10) GOTO 200
35997         IF(MOD(J,2).EQ.0) THEN
35998           KF1=KSUSY1+J-1
35999         ELSE
36000           KF1=KSUSY1+J+1
36001         ENDIF
36002         KF2=KF1+KSUSY1
36003         XMSF1=PMAS(PYCOMP(KF1),1)
36004         XMSF2=PMAS(PYCOMP(KF2),1)
36005         XMF=PMAS(J,1)
36006         IF(J.LE.6) THEN
36007           FCOL=3D0
36008         ELSE
36009           FCOL=1D0
36010         ENDIF
36011  
36012 C...U~ D_L
36013         IF(MOD(J,2).EQ.0) THEN
36014           XMFP=PMAS(J-1,1)
36015           AL=UMIX(IX,1)
36016           BL=-XMF*VMIX(IX,2)/XMW/SBETA/SR2
36017           AR=-XMFP*UMIX(IX,2)/XMW/CBETA/SR2
36018           BR=0D0
36019           ISF=J-1
36020         ELSE
36021           XMFP=PMAS(J+1,1)
36022           AL=VMIX(IX,1)
36023           BL=-XMF*UMIX(IX,2)/XMW/CBETA/SR2
36024           BR=0D0
36025           AR=-XMFP*VMIX(IX,2)/XMW/SBETA/SR2
36026           ISF=J+1
36027         ENDIF
36028  
36029 C...~U_L D
36030         IF(AXMI.GE.XMF+XMSF1) THEN
36031           LKNT=LKNT+1
36032           XMA2=XMSF1**2
36033           XMB2=XMF**2
36034           XL=PYLAMF(XMI2,XMA2,XMB2)
36035           CA=AL*SFMIX(ISF,1)+AR*SFMIX(ISF,2)
36036           CB=BL*SFMIX(ISF,1)+BR*SFMIX(ISF,2)
36037           XLAM(LKNT)=FCOL*C1/8D0/XMI3*SQRT(XL)*( (XMI2+XMB2-XMA2)*
36038      &    (CA**2+CB**2)+4D0*CA*CB*XMF*XMI)
36039           IDLAM(LKNT,3)=0
36040           IF(MOD(J,2).EQ.0) THEN
36041             IDLAM(LKNT,1)=-KF1
36042             IDLAM(LKNT,2)=J
36043           ELSE
36044             IDLAM(LKNT,1)=KF1
36045             IDLAM(LKNT,2)=-J
36046           ENDIF
36047         ENDIF
36048  
36049 C...U~ D_R
36050         IF(AXMI.GE.XMF+XMSF2) THEN
36051           LKNT=LKNT+1
36052           XMA2=XMSF2**2
36053           XMB2=XMF**2
36054           CA=AL*SFMIX(ISF,3)+AR*SFMIX(ISF,4)
36055           CB=BL*SFMIX(ISF,3)+BR*SFMIX(ISF,4)
36056           XL=PYLAMF(XMI2,XMA2,XMB2)
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)=-KF2
36062             IDLAM(LKNT,2)=J
36063           ELSE
36064             IDLAM(LKNT,1)=KF2
36065             IDLAM(LKNT,2)=-J
36066           ENDIF
36067         ENDIF
36068   200 CONTINUE
36069  
36070 C...3-BODY DECAY TO Q Q~' GLUINO, ONLY IF IT CANNOT PROCEED THROUGH
36071 C...A 2-BODY -- 2-BODY CHAIN
36072       XMJ=PMAS(PYCOMP(KSUSY1+21),1)
36073       IF(AXMI.GE.XMJ) THEN
36074         AXMJ=ABS(XMJ)
36075         S12MIN=0D0
36076         S12MAX=(AXMI-AXMJ)**2
36077         XXM(1)=0D0
36078         XXM(2)=XMJ
36079         XXM(3)=0D0
36080         XXM(4)=XMI
36081         XXM(5)=0D0
36082         XXM(6)=0D0
36083         XXM(9)=1D6
36084         XXM(10)=0D0
36085         XXM(7)=UMIX(IX,1)*SR2
36086         XXM(8)=VMIX(IX,1)*SR2
36087         XXM(11)=PMAS(PYCOMP(KSUSY1+1),1)
36088         XXM(12)=PMAS(PYCOMP(KSUSY1+2),1)
36089         IF( XXM(11).LT.AXMI .OR. XXM(12).LT.AXMI ) GOTO 210
36090         IF(AXMI.GE.AXMJ+PMAS(1,1)+PMAS(2,1)) THEN
36091           LKNT=LKNT+1
36092           XLAM(LKNT)=4D0*C1*AS/XMI3/(16D0*PI)*
36093      &    PYGAUS(PYXXW5,S12MIN,S12MAX,PREC)
36094           IDLAM(LKNT,1)=KSUSY1+21
36095           IDLAM(LKNT,2)=-1
36096           IDLAM(LKNT,3)=2
36097           IF(AXMI.GE.AXMJ+PMAS(3,1)+PMAS(4,1)) THEN
36098             LKNT=LKNT+1
36099             XLAM(LKNT)=XLAM(LKNT-1)
36100             IDLAM(LKNT,1)=KSUSY1+21
36101             IDLAM(LKNT,2)=-3
36102             IDLAM(LKNT,3)=4
36103           ENDIF
36104         ENDIF
36105   210   CONTINUE
36106       ENDIF
36107  
36108   220 IKNT=LKNT
36109       XLAM(0)=0D0
36110       DO 230 I=1,IKNT
36111         XLAM(0)=XLAM(0)+XLAM(I)
36112         IF(XLAM(I).LT.0D0) THEN
36113           WRITE(MSTU(11),*) ' XLAM(I) = ',XLAM(I),KCIN,
36114      &    (IDLAM(I,J),J=1,3)
36115           XLAM(I)=0D0
36116         ENDIF
36117   230 CONTINUE
36118       IF(XLAM(0).EQ.0D0) THEN
36119         XLAM(0)=1D-6
36120         WRITE(MSTU(11),*) ' XLAM(0) = ',XLAM(0)
36121         WRITE(MSTU(11),*) LKNT
36122         WRITE(MSTU(11),*) (XLAM(J),J=1,LKNT)
36123       ENDIF
36124  
36125       RETURN
36126       END
36127  
36128 C*********************************************************************
36129  
36130 C...PYXXZ5
36131 C...Calculates chi0 -> chi0 + f + ~f.
36132  
36133       FUNCTION PYXXZ5(X)
36134  
36135 C...Double precision and integer declarations.
36136       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36137       IMPLICIT INTEGER(I-N)
36138       INTEGER PYK,PYCHGE,PYCOMP
36139 C...Parameter statement to help give large particle numbers.
36140       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
36141 C...Commonblocks.
36142       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
36143       COMMON/PYINTS/XXM(20)
36144       SAVE /PYDAT1/,/PYINTS/
36145  
36146 C...Local variables.
36147       DOUBLE PRECISION PYXXZ5,X
36148       DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,WPROP2
36149       DOUBLE PRECISION WW,WF1,WF2,WFL1,WFL2
36150       DOUBLE PRECISION SIJ
36151       DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSU,XMSD
36152       DOUBLE PRECISION LE,RE,LE2,RE2,OL2,OR2,FLI,FLJ,FRI,FRJ
36153       DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
36154       INTEGER I
36155       DATA SR2/1.4142136D0/
36156  
36157 C...Statement functions.
36158 C...Integral from x to y of (t-a)(b-t) dt.
36159       TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
36160 C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
36161       TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
36162      &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
36163 C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
36164       TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
36165      &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
36166 C...Integral from x to y of (t-a)/(b-t) dt.
36167       UTINT(X,Y,A,B)=LOG(ABS((X-A)/(B-X)*(B-Y)/(Y-A)))/(B-A)
36168 C...Integral from x to y of 1/(t-a) dt.
36169       TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
36170  
36171       XM12=XXM(1)**2
36172       XM22=XXM(2)**2
36173       XM32=XXM(3)**2
36174       S=XXM(4)**2
36175       S13=X
36176  
36177       S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
36178       S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
36179      &( (X-XM22-S)**2  -4D0*XM22*S  ) )
36180  
36181       S23MIN=(S23AVE-S23DEL)
36182       S23MAX=(S23AVE+S23DEL)
36183  
36184       XMV=XXM(7)
36185       XMG=XXM(8)
36186       XMSD=XXM(5)**2
36187       XMSU=XXM(6)**2
36188       OL=XXM(9)
36189       OR=XXM(10)
36190       OL2=OL**2
36191       OR2=OR**2
36192       LE=XXM(11)
36193       RE=XXM(12)
36194       LE2=LE**2
36195       RE2=RE**2
36196       FLI=XXM(13)
36197       FLJ=XXM(14)
36198       FRI=XXM(15)
36199       FRJ=XXM(16)
36200  
36201       WPROP2=(S13-XMV**2)**2+(XMV*XMG)**2
36202       SIJ=2D0*XXM(2)*XXM(4)*S13
36203  
36204       IF(XMV.LE.1000D0) THEN
36205         WW=2D0*(LE2+RE2)*(OL2)*( 2D0*TINT(S23MAX,S23MIN,XM22,S)
36206      &  +SIJ*(S23MAX-S23MIN) )/WPROP2
36207         IF(XXM(5).LE.10000D0) THEN
36208           WFL1=2D0*FLI*FLJ*OL*LE*( 2D0*TINT2(S23MAX,S23MIN,XM22,S,XMSD)
36209      &    + SIJ*TPROP(S23MAX,S23MIN,XMSD) )
36210           WFL1=WFL1*(S13-XMV**2)/WPROP2
36211         ELSE
36212           WFL1=0D0
36213         ENDIF
36214         IF(XXM(6).LE.10000D0) THEN
36215           WFL2=2D0*FRI*FRJ*OR*RE*( 2D0*TINT2(S23MAX,S23MIN,XM22,S,XMSU)
36216      &    + SIJ*TPROP(S23MAX,S23MIN,XMSU) )
36217           WFL2=WFL2*(S13-XMV**2)/WPROP2
36218         ELSE
36219           WFL2=0D0
36220         ENDIF
36221       ELSE
36222         WW=0D0
36223         WFL1=0D0
36224         WFL2=0D0
36225       ENDIF
36226       IF(XXM(5).LE.10000D0) THEN
36227         WF1=0.5D0*(FLI*FLJ)**2*( 2D0*TINT3(S23MAX,S23MIN,XM22,S,XMSD)
36228      &  + SIJ*UTINT(S23MAX,S23MIN,XMSD,XM22+S-S13-XMSD) )
36229       ELSE
36230         WF1=0D0
36231       ENDIF
36232       IF(XXM(6).LE.10000D0) THEN
36233         WF2=0.5D0*(FRI*FRJ)**2*( 2D0*TINT3(S23MAX,S23MIN,XM22,S,XMSU)
36234      &  + SIJ*UTINT(S23MAX,S23MIN,XMSU,XM22+S-S13-XMSU) )
36235       ELSE
36236         WF2=0D0
36237       ENDIF
36238  
36239 C...WFL1=0.0
36240 C...WFL2=0.0
36241       PYXXZ5=(WW+WF1+WF2+WFL1+WFL2)
36242       IF(PYXXZ5.LT.0D0) THEN
36243         WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXZ5 '
36244         WRITE(MSTU(11),*) XXM(1),XXM(2),XXM(3),XXM(4)
36245         WRITE(MSTU(11),*) (XXM(I),I=5,8)
36246         WRITE(MSTU(11),*) (XXM(I),I=9,12)
36247         WRITE(MSTU(11),*) (XXM(I),I=13,16)
36248         WRITE(MSTU(11),*) WW,WF1,WF2,WFL1,WFL2
36249         WRITE(MSTU(11),*) S23MIN,S23MAX
36250         PYXXZ5=0D0
36251       ENDIF
36252  
36253       RETURN
36254       END
36255  
36256 C*********************************************************************
36257  
36258 C...PYXXW5
36259 C...Calculates chi0(+) -> chi+(0) + f + ~f'.
36260  
36261       FUNCTION PYXXW5(X)
36262  
36263 C...Double precision and integer declarations.
36264       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36265       IMPLICIT INTEGER(I-N)
36266       INTEGER PYK,PYCHGE,PYCOMP
36267 C...Parameter statement to help give large particle numbers.
36268       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
36269 C...Commonblocks.
36270       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
36271       COMMON/PYINTS/XXM(20)
36272       SAVE /PYDAT1/,/PYINTS/
36273  
36274 C...Local variables.
36275       DOUBLE PRECISION PYXXW5,X
36276       DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,S12,WPROP2
36277       DOUBLE PRECISION WW,WU,WD,WWU,WWD,WUD
36278       DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSD,XMSU
36279       DOUBLE PRECISION SIJ
36280       DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
36281       INTEGER IK
36282       SAVE IK
36283       DATA IK/0/
36284       DATA SR2/1.4142136D0/
36285  
36286 C...Statement functions.
36287 C...Integral from x to y of (t-a)(b-t) dt.
36288       TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
36289 C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
36290       TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
36291      &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
36292 C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
36293       TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
36294      &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
36295 C...Integral from x to y of (t-a)/(b-t) dt.
36296       UTINT(X,Y,A,B)=LOG(ABS((X-A)/(B-X)*(B-Y)/(Y-A)))/(B-A)
36297 C...Integral from x to y of 1/(t-a) dt.
36298       TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
36299  
36300       XM12=XXM(1)**2
36301       XM22=XXM(2)**2
36302       XM32=XXM(3)**2
36303       S=XXM(4)**2
36304       S13=X
36305       IF(XXM(1).EQ.0.AND.XXM(3).EQ.0D0) THEN
36306         S23AVE=0.5D0*(XM22+S-S13)
36307         S23DEL=0.5D0*SQRT( (X-XM22-S)**2-4D0*XM22*S )
36308       ELSE
36309         S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
36310         S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
36311      &  ( (X-XM22-S)**2  -4D0*XM22*S  ) )
36312       ENDIF
36313       S23MIN=(S23AVE-S23DEL)
36314       S23MAX=(S23AVE+S23DEL)
36315       IF(S23DEL.LT.1D-3) THEN
36316         PYXXW5=0D0
36317         RETURN
36318       ENDIF
36319       XMV=XXM(9)
36320       XMG=XXM(10)
36321       XMSD=XXM(11)**2
36322       XMSU=XXM(12)**2
36323       OL=XXM(5)
36324       OR=XXM(6)
36325       FLD=XXM(7)
36326       FLU=XXM(8)
36327  
36328       WPROP2=((S13-XMV**2)**2+(XMV*XMG)**2)
36329       SIJ=S13*XXM(2)*XXM(4)
36330       IF(XMV.LE.1000D0) THEN
36331         WW=(OR**2+OL**2)*TINT(S23MAX,S23MIN,XM22,S)
36332      &  -2D0*OL*OR*SIJ*(S23MAX-S23MIN)
36333         WW=WW/WPROP2
36334         IF(XXM(11).LE.10000D0) THEN
36335           WWD=OL*SIJ*TPROP(S23MAX,S23MIN,XMSD)
36336      &    -OR*TINT2(S23MAX,S23MIN,XM22,S,XMSD)
36337           WWD=-WWD*SR2*FLD
36338           WWD=WWD*(S13-XMV**2)/WPROP2
36339         ELSE
36340           WWD=0D0
36341         ENDIF
36342         IF(XXM(12).LE.10000D0) THEN
36343           WWU=OR*SIJ*TPROP(S23MAX,S23MIN,XMSU)
36344      &    -OL*TINT2(S23MAX,S23MIN,XM22,S,XMSU)
36345           WWU=WWU*SR2*FLU
36346           WWU=WWU*(S13-XMV**2)/WPROP2
36347         ELSE
36348           WWU=0D0
36349         ENDIF
36350       ELSE
36351         WW=0D0
36352         WWD=0D0
36353         WWU=0D0
36354       ENDIF
36355       IF(XXM(12).LE.10000D0) THEN
36356         WU=0.5D0*FLU**2*TINT3(S23MAX,S23MIN,XM22,S,XMSU)
36357       ELSE
36358         WU=0D0
36359       ENDIF
36360       IF(XXM(11).LE.10000D0) THEN
36361         WD=0.5D0*FLD**2*TINT3(S23MAX,S23MIN,XM22,S,XMSD)
36362       ELSE
36363         WD=0D0
36364       ENDIF
36365       IF(XXM(11).LE.10000D0.AND.XXM(12).LE.10000D0) THEN
36366         WUD=FLU*FLD*SIJ*UTINT(S23MAX,S23MIN,XMSD,XM22+S-S13-XMSU)
36367       ELSE
36368         WUD=0D0
36369       ENDIF
36370  
36371       PYXXW5=WW+WU+WD+WWU+WWD+WUD
36372  
36373       IF(PYXXW5.LT.0D0) THEN
36374         IF(IK.EQ.0) THEN
36375           WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXW5 '
36376           WRITE(MSTU(11),*) WW,WU,WD
36377           WRITE(MSTU(11),*) WWD,WWU,WUD
36378           WRITE(MSTU(11),*) SQRT(S13)
36379           WRITE(MSTU(11),*) TINT(S23MAX,S23MIN,XM22,S)
36380           IK=1
36381         ENDIF
36382         PYXXW5=0D0
36383       ENDIF
36384  
36385       RETURN
36386       END
36387  
36388 C*********************************************************************
36389  
36390 C...PYXXGA
36391 C...Calculates chi0_i -> chi0_j + gamma.
36392  
36393       FUNCTION PYXXGA(C0,XM1,XM2,XMTR,XMTL)
36394  
36395 C...Double precision and integer declarations.
36396       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36397       IMPLICIT INTEGER(I-N)
36398       INTEGER PYK,PYCHGE,PYCOMP
36399  
36400 C...Local variables.
36401       DOUBLE PRECISION PYXXGA,C0,XM1,XM2,XMTR,XMTL
36402       DOUBLE PRECISION F1,F2
36403  
36404       F1=(1D0+XMTR/(1D0-XMTR)*LOG(XMTR))/(1D0-XMTR)
36405       F2=(1D0+XMTL/(1D0-XMTL)*LOG(XMTL))/(1D0-XMTL)
36406       PYXXGA=C0*((XM1**2-XM2**2)/XM1)**3
36407       PYXXGA=PYXXGA*(2D0/3D0*(F1+F2)-13D0/12D0)**2
36408  
36409       RETURN
36410       END
36411  
36412 C*********************************************************************
36413  
36414 C...PYX2XG
36415 C...Calculates the decay rate for ino -> ino + gauge boson.
36416  
36417       FUNCTION PYX2XG(C1,XM1,XM2,XM3,GL,GR)
36418  
36419 C...Double precision and integer declarations.
36420       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36421       IMPLICIT INTEGER(I-N)
36422       INTEGER PYK,PYCHGE,PYCOMP
36423  
36424 C...Local variables.
36425       DOUBLE PRECISION PYX2XG,XM1,XM2,XM3,GL,GR
36426       DOUBLE PRECISION XL,PYLAMF,C1
36427       DOUBLE PRECISION XMI2,XMJ2,XMV2,XMI3
36428  
36429       XMI2=XM1**2
36430       XMI3=ABS(XM1**3)
36431       XMJ2=XM2**2
36432       XMV2=XM3**2
36433       XL=PYLAMF(XMI2,XMJ2,XMV2)
36434       PYX2XG=C1/8D0/XMI3*SQRT(XL)
36435      &*((GL**2+GR**2)*(XL+3D0*XMV2*(XMI2+XMJ2-XMV2))-
36436      &12D0*GL*GR*XM1*XM2*XMV2)
36437  
36438       RETURN
36439       END
36440  
36441 C*********************************************************************
36442  
36443 C...PYX2XH
36444 C...Calculates the decay rate for ino -> ino + H.
36445  
36446       FUNCTION PYX2XH(C1,XM1,XM2,XM3,GL,GR)
36447  
36448 C...Double precision and integer declarations.
36449       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36450       IMPLICIT INTEGER(I-N)
36451       INTEGER PYK,PYCHGE,PYCOMP
36452  
36453 C...Local variables.
36454       DOUBLE PRECISION PYX2XH,XM1,XM2,XM3,GL,GR
36455       DOUBLE PRECISION XL,PYLAMF,C1
36456       DOUBLE PRECISION XMI2,XMJ2,XMV2,XMI3
36457  
36458       XMI2=XM1**2
36459       XMI3=ABS(XM1**3)
36460       XMJ2=XM2**2
36461       XMV2=XM3**2
36462       XL=PYLAMF(XMI2,XMJ2,XMV2)
36463       PYX2XH=C1/8D0/XMI3*SQRT(XL)
36464      &*((GL**2+GR**2)*(XMI2+XMJ2-XMV2)+
36465      &4D0*GL*GR*XM1*XM2)
36466  
36467       RETURN
36468       END
36469  
36470 C*********************************************************************
36471  
36472 C...PYXXZ2
36473 C...Calculates chi+ -> chi+ + f + ~f.
36474  
36475       FUNCTION PYXXZ2(X)
36476  
36477 C...Double precision and integer declarations.
36478       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36479       IMPLICIT INTEGER(I-N)
36480       INTEGER PYK,PYCHGE,PYCOMP
36481 C...Parameter statement to help give large particle numbers.
36482       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
36483 C...Commonblocks.
36484       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
36485       COMMON/PYINTS/XXM(20)
36486       SAVE /PYDAT1/,/PYINTS/
36487  
36488 C...Local variables.
36489       DOUBLE PRECISION PYXXZ2,X
36490       DOUBLE PRECISION XM12,XM22,XM32,S,S23,S13,S12,WPROP2
36491       DOUBLE PRECISION WW,WU,WD,WWU,WWD,WUD
36492       DOUBLE PRECISION SR2,OL,OR,FLD,FLU,XMV,XMG,XMSL
36493       DOUBLE PRECISION SIJ
36494       DOUBLE PRECISION LE,RE,LE2,RE2,OL2,OR2,CT
36495       DOUBLE PRECISION S23MIN,S23MAX,S23AVE,S23DEL
36496       INTEGER I
36497       DATA SR2/1.4142136D0/
36498  
36499 C...Statement functions.
36500 C...Integral from x to y of (t-a)(b-t) dt.
36501       TINT(X,Y,A,B)=(X-Y)*(-(X**2+X*Y+Y**2)/3D0+(B+A)*(X+Y)/2D0-A*B)
36502 C...Integral from x to y of (t-a)(b-t)/(t-c) dt.
36503       TINT2(X,Y,A,B,C)=(X-Y)*(-0.5D0*(X+Y)+(B+A-C))-
36504      &LOG(ABS((X-C)/(Y-C)))*(C-B)*(C-A)
36505 C...Integral from x to y of (t-a)(b-t)/(t-c)**2 dt.
36506       TINT3(X,Y,A,B,C)=-(X-Y)+(C-A)*(C-B)*(Y-X)/(X-C)/(Y-C)+
36507      &(B+A-2D0*C)*LOG(ABS((X-C)/(Y-C)))
36508 C...Integral from x to y of 1/(t-a) dt.
36509       TPROP(X,Y,A)=LOG(ABS((X-A)/(Y-A)))
36510  
36511       XM12=XXM(1)**2
36512       XM22=XXM(2)**2
36513       XM32=XXM(3)**2
36514       S=XXM(4)**2
36515       S13=X
36516       IF(XXM(1).EQ.0.AND.XXM(3).EQ.0D0) THEN
36517         S23AVE=0.5D0*(XM22+S-S13)
36518         S23DEL=0.5D0*SQRT( (X-XM22-S)**2-4D0*XM22*S )
36519       ELSE
36520         S23AVE=XM22+XM32-0.5D0/X*(X+XM32-XM12)*(X+XM22-S)
36521         S23DEL=0.5D0/X*SQRT( ( (X-XM12-XM32)**2-4D0*XM12*XM32)*
36522      &  ( (X-XM22-S)**2  -4D0*XM22*S  ) )
36523       ENDIF
36524       S23MIN=(S23AVE-S23DEL)
36525       S23MAX=(S23AVE+S23DEL)
36526       IF(S23DEL.LT.1D-3) THEN
36527         PYXXZ2=0D0
36528         RETURN
36529       ENDIF
36530  
36531       XMV=XXM(9)
36532       XMG=XXM(10)
36533       XMSL=XXM(11)**2
36534       OL=XXM(5)
36535       OR=XXM(6)
36536       OL2=OL**2
36537       OR2=OR**2
36538       LE=XXM(7)
36539       RE=XXM(8)
36540       LE2=LE**2
36541       RE2=RE**2
36542       CT=XXM(12)
36543  
36544       WPROP2=(S13-XMV**2)**2+(XMV*XMG)**2
36545       SIJ=XXM(2)*XXM(4)*S13
36546       WW=(LE2+RE2)*(OR2+OL2)*2D0*TINT(S23MAX,S23MIN,XM22,S)
36547      &- 4D0*(LE2+RE2)*OL*OR*SIJ*(S23MAX-S23MIN)
36548       WW=WW/WPROP2
36549       IF(XMSL.GT.1D4*S) THEN
36550         WD=0D0
36551         WWD=0D0
36552       ELSE
36553         WD=0.5D0*CT**2*TINT3(S23MAX,S23MIN,XM22,S,XMSL)
36554         WWD=OL*TINT2(S23MAX,S23MIN,XM22,S,XMSL)-
36555      &  OR*SIJ*TPROP(S23MAX,S23MIN,XMSL)
36556         WWD=2D0*WWD*LE*CT*(S13-XMV**2)/WPROP2
36557       ENDIF
36558  
36559       PYXXZ2=(WW+WD+WWD)
36560       IF(PYXXZ2.LT.0D0) THEN
36561         WRITE(MSTU(11),*) ' NEGATIVE WT IN PYXXZ2 '
36562         WRITE(MSTU(11),*) WW,WD,WWD
36563         WRITE(MSTU(11),*) S23MIN,S23MAX
36564         WRITE(MSTU(11),*) (XXM(I),I=1,4)
36565         WRITE(MSTU(11),*) (XXM(I),I=5,8)
36566         WRITE(MSTU(11),*) (XXM(I),I=9,12)
36567         PYXXZ2=0D0
36568       ENDIF
36569  
36570       RETURN
36571       END
36572  
36573 C*********************************************************************
36574  
36575 C...PYHEXT
36576 C...Calculates the non-standard decay modes of the Higgs boson.
36577  
36578       SUBROUTINE PYHEXT(KFIN,XLAM,IDLAM,IKNT)
36579  
36580 C...Double precision and integer declarations.
36581       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
36582       IMPLICIT INTEGER(I-N)
36583       INTEGER PYK,PYCHGE,PYCOMP
36584 C...Parameter statement to help give large particle numbers.
36585       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
36586 C...Commonblocks.
36587       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
36588       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
36589       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
36590       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
36591       COMMON/PYSSMT/ZMIX(4,4),UMIX(2,2),VMIX(2,2),SMZ(4),SMW(2),
36592      &SFMIX(16,4)
36593       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYMSSM/,/PYSSMT/
36594  
36595 C...Local variables.
36596       INTEGER KFIN
36597       DOUBLE PRECISION XMI,XMJ,XMF,XMSF1,XMSF2,XMW,XMW2,
36598      &XMZ,XMZ2,AXMJ,AXMI
36599       DOUBLE PRECISION XMFP,XMF1,XMF2,XMSL,XMG
36600       DOUBLE PRECISION S12MIN,S12MAX
36601       DOUBLE PRECISION XMI2,XMI3,XMJ2,XMH,XMH2,XMHP,XMHP2,XMA2,XMB2
36602       DOUBLE PRECISION PYLAMF,XL,CF,EI
36603       INTEGER IDU,IC,ILR,IFL
36604       DOUBLE PRECISION TANW,XW,AEM,C1,AS
36605       DOUBLE PRECISION PYH2XX,GHLL,GHRR,GHLR
36606       DOUBLE PRECISION XLAM(0:200)
36607       INTEGER IDLAM(200,3)
36608       INTEGER LKNT,IX,IH,J,IJ,I,IKNT,IK
36609       INTEGER ITH(4)
36610       INTEGER KFNCHI(4),KFCCHI(2)
36611       DOUBLE PRECISION ETAH(3),CH(3),DH(3),EH(3)
36612       DOUBLE PRECISION SR2
36613       DOUBLE PRECISION BETA,ALFA
36614       DOUBLE PRECISION CBETA,SBETA,GR,GL,F12K,F21K,TANB
36615       DOUBLE PRECISION PYALEM,PI,PYALPS
36616       DOUBLE PRECISION AL,BL,AR,BR,ALP,ARP,BLP,BRP,ALR
36617       DOUBLE PRECISION XMK,AXMK,XMK2,COSA,SINA,CW,XML
36618       DOUBLE PRECISION XMUZ,ATRIT,ATRIB,ATRIL
36619       DOUBLE PRECISION XMJL,XMJR,XM1,XM2
36620       DATA ITH/25,35,36,37/
36621       DATA ETAH/1D0,1D0,-1D0/
36622       DATA SR2/1.4142136D0/
36623       DATA PI/3.141592654D0/
36624       DATA KFNCHI/1000022,1000023,1000025,1000035/
36625       DATA KFCCHI/1000024,1000037/
36626  
36627 C...COUNT THE NUMBER OF DECAY MODES
36628       LKNT=IKNT
36629  
36630       XMW=PMAS(24,1)
36631       XMW2=XMW**2
36632       XMZ=PMAS(23,1)
36633       XMZ2=XMZ**2
36634       XW=PARU(102)
36635       TANW = SQRT(XW/(1D0-XW))
36636       CW=SQRT(1D0-XW)
36637  
36638 C...1 - 4 DEPENDING ON Higgs species.
36639       IH=1
36640       IF(KFIN.EQ.ITH(2)) IH=2
36641       IF(KFIN.EQ.ITH(3)) IH=3
36642       IF(KFIN.EQ.ITH(4)) IH=4
36643  
36644       XMI=PMAS(KFIN,1)
36645       XMI2=XMI**2
36646       AXMI=ABS(XMI)
36647       AEM=PYALEM(XMI2)
36648       AS =PYALPS(XMI2)
36649       C1=AEM/XW
36650       XMI3=ABS(XMI**3)
36651  
36652       TANB=RMSS(5)
36653       BETA=ATAN(TANB)
36654       CBETA=COS(BETA)
36655       SBETA=TANB*CBETA
36656       ALFA=RMSS(18)
36657       COSA=COS(ALFA)
36658       SINA=SIN(ALFA)
36659       ATRIT=RMSS(16)
36660       ATRIB=RMSS(15)
36661       ATRIL=RMSS(17)
36662       XMUZ=-RMSS(4)
36663  
36664       IF(IH.EQ.4) GOTO 180
36665  
36666 C...CHECK ALL 2-BODY DECAYS TO GAUGE AND HIGGS BOSONS
36667 C...H0_K -> CHI0_I + CHI0_J
36668       EH(1)=SINA
36669       EH(2)=COSA
36670       EH(3)=-SBETA
36671       DH(1)=COSA
36672       DH(2)=-SINA
36673       DH(3)=CBETA
36674       DO 110 IJ=1,4
36675         XMJ=SMZ(IJ)
36676         AXMJ=ABS(XMJ)
36677         DO 100 IK=1,IJ
36678           XMK=SMZ(IK)
36679           AXMK=ABS(XMK)
36680           IF(AXMI.GE.AXMJ+AXMK) THEN
36681             LKNT=LKNT+1
36682             F21K=0.5D0*
36683      &      EH(IH)*( ZMIX(IK,3)*ZMIX(IJ,2)+ZMIX(IJ,3)*ZMIX(IK,2)
36684      &      -TANW*(ZMIX(IK,3)*ZMIX(IJ,1)+ZMIX(IJ,3)*ZMIX(IK,1)) )+
36685      &      0.5D0*DH(IH)*( ZMIX(IK,4)*ZMIX(IJ,2)+ZMIX(IJ,4)*ZMIX(IK,2)
36686      &      -TANW*(ZMIX(IK,4)*ZMIX(IJ,1)+ZMIX(IJ,4)*ZMIX(IK,1)) )
36687             F12K=0.5D0*
36688      &      EH(IH)*(ZMIX(IJ,3)*ZMIX(IK,2)+ZMIX(IK,3)*ZMIX(IJ,2)
36689      &      -TANW*(ZMIX(IJ,3)*ZMIX(IK,1)+ZMIX(IK,3)*ZMIX(IJ,1)))+
36690      &      0.5D0*DH(IH)*( ZMIX(IJ,4)*ZMIX(IK,2)+ZMIX(IK,4)*ZMIX(IJ,2)
36691      &      -TANW*(ZMIX(IJ,4)*ZMIX(IK,1)+ZMIX(IK,4)*ZMIX(IJ,1)) )
36692 C...SIGN OF MASSES I,J
36693             XML=XMK*ETAH(IH)
36694             XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,XML,F12K,F21K)
36695             IF(IJ.EQ.IK) XLAM(LKNT)=XLAM(LKNT)*0.5D0
36696             IDLAM(LKNT,1)=KFNCHI(IJ)
36697             IDLAM(LKNT,2)=KFNCHI(IK)
36698             IDLAM(LKNT,3)=0
36699           ENDIF
36700   100   CONTINUE
36701   110 CONTINUE
36702  
36703 C...H0_K -> CHI+_I CHI-_J
36704       DO 130 IJ=1,2
36705         XMJ=SMW(IJ)
36706         AXMJ=ABS(XMJ)
36707         DO 120 IK=1,2
36708           XMK=SMW(IK)
36709           AXMK=ABS(XMK)
36710           IF(AXMI.GE.AXMJ+AXMK) THEN
36711             LKNT=LKNT+1
36712             F21K=(VMIX(IJ,1)*UMIX(IK,2)*EH(IH) -
36713      &      VMIX(IJ,2)*UMIX(IK,1)*DH(IH))/SR2
36714             F12K=(VMIX(IK,1)*UMIX(IJ,2)*EH(IH) -
36715      &      VMIX(IK,2)*UMIX(IJ,1)*DH(IH))/SR2
36716             XML=-XMK*ETAH(IH)
36717             XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,XML,F12K,F21K)
36718             IDLAM(LKNT,1)=KFCCHI(IJ)
36719             IDLAM(LKNT,2)=-KFCCHI(IK)
36720             IDLAM(LKNT,3)=0
36721           ENDIF
36722   120   CONTINUE
36723   130 CONTINUE
36724  
36725 C...HIGGS TO SFERMION SFERMION
36726       DO 160 IFL=1,16
36727         IF(IFL.GE.7.AND.IFL.LE.10) GOTO 160
36728         IJ=KSUSY1+IFL
36729         XMJL=PMAS(PYCOMP(IJ),1)
36730         XMJR=PMAS(PYCOMP(IJ+KSUSY1),1)
36731         IF(AXMI.GE.2D0*MIN(XMJL,XMJR)) THEN
36732           XMJ=XMJL
36733           XMJ2=XMJ**2
36734           XL=PYLAMF(XMI2,XMJ2,XMJ2)
36735           XMF=PMAS(IFL,1)
36736           EI=KCHG(IFL,1)/3D0
36737           IDU=2-MOD(IFL,2)
36738  
36739           IF(IH.EQ.1) THEN
36740             IF(IDU.EQ.1) THEN
36741               GHLL=-XMZ/CW*(0.5D0+EI*XW)*SIN(ALFA+BETA)+
36742      &        XMF**2/XMW*SINA/CBETA
36743               GHRR=XMZ/CW*(EI*XW)*SIN(ALFA+BETA)+
36744      &        XMF**2/XMW*SINA/CBETA
36745               IF(IFL.EQ.5) THEN
36746                 GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*COSA-
36747      &          ATRIB*SINA)
36748               ELSEIF(IFL.EQ.15) THEN
36749                 GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*COSA-
36750      &          ATRIL*SINA)
36751               ELSE
36752                 GHLR=0D0
36753               ENDIF
36754             ELSE
36755               GHLL=XMZ/CW*(0.5D0-EI*XW)*SIN(ALFA+BETA)-
36756      &        XMF**2/XMW*COSA/SBETA
36757               GHRR=XMZ/CW*(EI*XW)*SIN(ALFA+BETA)-
36758      &        XMF**2/XMW*COSA/SBETA
36759               IF(IFL.EQ.6) THEN
36760                 GHLR=XMF/2D0/XMW/SBETA*(XMUZ*SINA-
36761      &          ATRIT*COSA)
36762               ELSE
36763                 GHLR=0D0
36764               ENDIF
36765             ENDIF
36766  
36767           ELSEIF(IH.EQ.2) THEN
36768             IF(IDU.EQ.1) THEN
36769               GHLL=XMZ/CW*(0.5D0+EI*XW)*COS(ALFA+BETA)-
36770      &        XMF**2/XMW*COSA/CBETA
36771               GHRR=-XMZ/CW*(EI*XW)*COS(ALFA+BETA)-
36772      &        XMF**2/XMW*COSA/CBETA
36773               IF(IFL.EQ.5) THEN
36774                 GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*SINA+
36775      &          ATRIB*COSA)
36776               ELSEIF(IFL.EQ.15) THEN
36777                 GHLR=-XMF/2D0/XMW/CBETA*(XMUZ*SINA+
36778      &          ATRIL*COSA)
36779               ELSE
36780                 GHLR=0D0
36781               ENDIF
36782             ELSE
36783               GHLL=-XMZ/CW*(0.5D0-EI*XW)*COS(ALFA+BETA)-
36784      &        XMF**2/XMW*SINA/SBETA
36785               GHRR=-XMZ/CW*(EI*XW)*COS(ALFA+BETA)-
36786      &        XMF**2/XMW*SINA/SBETA
36787               IF(IFL.EQ.6) THEN
36788                 GHLR=-XMF/2D0/XMW/SBETA*(XMUZ*COSA+
36789      &          ATRIT*SINA)
36790               ELSE
36791                 GHLR=0D0
36792               ENDIF
36793             ENDIF
36794  
36795           ELSEIF(IH.EQ.3) THEN
36796             GHLL=0D0
36797             GHRR=0D0
36798             GHLR=0D0
36799             IF(IDU.EQ.1) THEN
36800               IF(IFL.EQ.5) THEN
36801                 GHLR=XMF/2D0/XMW*(ATRIB*TANB-XMUZ)
36802               ELSEIF(IFL.EQ.15) THEN
36803                 GHLR=XMF/2D0/XMW*(ATRIL*TANB-XMUZ)
36804               ENDIF
36805             ELSE
36806               IF(IFL.EQ.6) THEN
36807                 GHLR=XMF/2D0/XMW*(ATRIT/TANB-XMUZ)
36808               ENDIF
36809             ENDIF
36810           ENDIF
36811           IF(IH.EQ.3) GOTO 140
36812  
36813           AL=SFMIX(IFL,1)**2
36814           AR=SFMIX(IFL,2)**2
36815           ALR=SFMIX(IFL,1)*SFMIX(IFL,2)
36816           IF(IFL.LE.6) THEN
36817             CF=3D0
36818           ELSE
36819             CF=1D0
36820           ENDIF
36821  
36822           IF(AXMI.GE.2D0*XMJ) THEN
36823             LKNT=LKNT+1
36824             XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36825      &      (GHLL*AL+GHRR*AR
36826      &      +2D0*GHLR*ALR)**2
36827             IDLAM(LKNT,1)=IJ
36828             IDLAM(LKNT,2)=-IJ
36829             IDLAM(LKNT,3)=0
36830           ENDIF
36831  
36832           IF(AXMI.GE.2D0*XMJR) THEN
36833             LKNT=LKNT+1
36834             AL=SFMIX(IFL,3)**2
36835             AR=SFMIX(IFL,4)**2
36836             ALR=SFMIX(IFL,3)*SFMIX(IFL,4)
36837             XMJ=XMJR
36838             XMJ2=XMJ**2
36839             XL=PYLAMF(XMI2,XMJ2,XMJ2)
36840             XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36841      &      (GHLL*AL+GHRR*AR
36842      &      +2D0*GHLR*ALR)**2
36843             IDLAM(LKNT,1)=IJ+KSUSY1
36844             IDLAM(LKNT,2)=-(IJ+KSUSY1)
36845             IDLAM(LKNT,3)=0
36846           ENDIF
36847   140     CONTINUE
36848  
36849           IF(AXMI.GE.XMJL+XMJR) THEN
36850             LKNT=LKNT+1
36851             AL=SFMIX(IFL,1)*SFMIX(IFL,3)
36852             AR=SFMIX(IFL,2)*SFMIX(IFL,4)
36853             ALR=SFMIX(IFL,1)*SFMIX(IFL,4)+SFMIX(IFL,2)*SFMIX(IFL,3)
36854             XMJ=XMJR
36855             XMJ2=XMJ**2
36856             XL=PYLAMF(XMI2,XMJ2,XMJL**2)
36857             XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36858      &      (GHLL*AL+GHRR*AR)**2
36859             IDLAM(LKNT,1)=IJ
36860             IDLAM(LKNT,2)=-(IJ+KSUSY1)
36861             IDLAM(LKNT,3)=0
36862             LKNT=LKNT+1
36863             IDLAM(LKNT,1)=-IJ
36864             IDLAM(LKNT,2)=IJ+KSUSY1
36865             IDLAM(LKNT,3)=0
36866             XLAM(LKNT)=XLAM(LKNT-1)
36867           ENDIF
36868         ENDIF
36869   150   CONTINUE
36870   160 CONTINUE
36871   170 CONTINUE
36872  
36873       GOTO 230
36874   180 CONTINUE
36875  
36876 C...H+ -> CHI+_I + CHI0_J
36877       DO 200 IJ=1,4
36878         XMJ=SMZ(IJ)
36879         AXMJ=ABS(XMJ)
36880         XMJ2=XMJ**2
36881         DO 190 IK=1,2
36882           XMK=SMW(IK)
36883           AXMK=ABS(XMK)
36884           XMK2=XMK**2
36885           IF(AXMI.GE.AXMJ+AXMK) THEN
36886             LKNT=LKNT+1
36887             GL=CBETA*(ZMIX(IJ,4)*VMIX(IK,1)+(ZMIX(IJ,2)+ZMIX(IJ,1)*
36888      &      TANW)*VMIX(IK,2)/SR2)
36889             GR=SBETA*(ZMIX(IJ,3)*UMIX(IK,1)-(ZMIX(IJ,2)+ZMIX(IJ,1)*
36890      &      TANW)*UMIX(IK,2)/SR2)
36891             XLAM(LKNT)=PYH2XX(C1,XMI,XMJ,-XMK,GL,GR)
36892             IDLAM(LKNT,1)=KFNCHI(IJ)
36893             IDLAM(LKNT,2)=KFCCHI(IK)
36894             IDLAM(LKNT,3)=0
36895           ENDIF
36896   190   CONTINUE
36897   200 CONTINUE
36898  
36899       GL=-XMW/SR2*(SIN(2D0*BETA)-PMAS(6,1)**2/TANB/XMW2)
36900       GR=-PMAS(6,1)/SR2/XMW*(XMUZ-ATRIT/TANB)
36901       AL=0D0
36902       AR=0D0
36903       CF=3D0
36904  
36905 C...H+ -> T_1 B_1~
36906       XM1=PMAS(PYCOMP(KSUSY1+6),1)
36907       XM2=PMAS(PYCOMP(KSUSY1+5),1)
36908       IF(XMI.GE.XM1+XM2) THEN
36909         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36910         LKNT=LKNT+1
36911         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36912      &  (GL*SFMIX(6,1)*SFMIX(5,1)+GR*SFMIX(6,2)*SFMIX(5,1))**2
36913         IDLAM(LKNT,1)=KSUSY1+6
36914         IDLAM(LKNT,2)=-(KSUSY1+5)
36915         IDLAM(LKNT,3)=0
36916       ENDIF
36917  
36918 C...H+ -> T_2 B_1~
36919       XM1=PMAS(PYCOMP(KSUSY2+6),1)
36920       XM2=PMAS(PYCOMP(KSUSY1+5),1)
36921       IF(XMI.GE.XM1+XM2) THEN
36922         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36923         LKNT=LKNT+1
36924         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36925      &  (GL*SFMIX(6,3)*SFMIX(5,1)+GR*SFMIX(6,4)*SFMIX(5,1))**2
36926         IDLAM(LKNT,1)=KSUSY2+6
36927         IDLAM(LKNT,2)=-(KSUSY1+5)
36928         IDLAM(LKNT,3)=0
36929       ENDIF
36930  
36931 C...H+ -> T_1 B_2~
36932       XM1=PMAS(PYCOMP(KSUSY1+6),1)
36933       XM2=PMAS(PYCOMP(KSUSY2+5),1)
36934       IF(XMI.GE.XM1+XM2) THEN
36935         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36936         LKNT=LKNT+1
36937         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36938      &  (GL*SFMIX(6,1)*SFMIX(5,3)+GR*SFMIX(6,2)*SFMIX(5,3))**2
36939         IDLAM(LKNT,1)=KSUSY1+6
36940         IDLAM(LKNT,2)=-(KSUSY2+5)
36941         IDLAM(LKNT,3)=0
36942       ENDIF
36943  
36944 C...H+ -> T_2 B_2~
36945       XM1=PMAS(PYCOMP(KSUSY2+6),1)
36946       XM2=PMAS(PYCOMP(KSUSY2+5),1)
36947       IF(XMI.GE.XM1+XM2) THEN
36948         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36949         LKNT=LKNT+1
36950         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*
36951      &  (GL*SFMIX(6,3)*SFMIX(5,3)+GR*SFMIX(6,4)*SFMIX(5,3))**2
36952         IDLAM(LKNT,1)=KSUSY2+6
36953         IDLAM(LKNT,2)=-(KSUSY2+5)
36954         IDLAM(LKNT,3)=0
36955       ENDIF
36956  
36957 C...H+ -> UL DL~
36958       GL=-XMW/SR2*SIN(2D0*BETA)
36959       DO 210 IJ=1,3,2
36960         XM1=PMAS(PYCOMP(KSUSY1+IJ),1)
36961         XM2=PMAS(PYCOMP(KSUSY1+IJ+1),1)
36962         IF(XMI.GE.XM1+XM2) THEN
36963           XL=PYLAMF(XMI2,XM1**2,XM2**2)
36964           LKNT=LKNT+1
36965           XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2
36966           IDLAM(LKNT,1)=-(KSUSY1+IJ)
36967           IDLAM(LKNT,2)=KSUSY1+IJ+1
36968           IDLAM(LKNT,3)=0
36969         ENDIF
36970   210 CONTINUE
36971  
36972 C...H+ -> EL~ NUL
36973       CF=1D0
36974       DO 220 IJ=11,13,2
36975         XM1=PMAS(PYCOMP(KSUSY1+IJ),1)
36976         XM2=PMAS(PYCOMP(KSUSY1+IJ+1),1)
36977         IF(XMI.GE.XM1+XM2) THEN
36978           XL=PYLAMF(XMI2,XM1**2,XM2**2)
36979           LKNT=LKNT+1
36980           XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2
36981           IDLAM(LKNT,1)=-(KSUSY1+IJ)
36982           IDLAM(LKNT,2)=KSUSY1+IJ+1
36983           IDLAM(LKNT,3)=0
36984         ENDIF
36985   220 CONTINUE
36986  
36987 C...H+ -> TAU1 NUTAUL
36988       XM1=PMAS(PYCOMP(KSUSY1+15),1)
36989       XM2=PMAS(PYCOMP(KSUSY1+16),1)
36990       IF(XMI.GE.XM1+XM2) THEN
36991         XL=PYLAMF(XMI2,XM1**2,XM2**2)
36992         LKNT=LKNT+1
36993         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2*SFMIX(15,1)**2
36994         IDLAM(LKNT,1)=-(KSUSY1+15)
36995         IDLAM(LKNT,2)= KSUSY1+16
36996         IDLAM(LKNT,3)=0
36997       ENDIF
36998  
36999 C...H+ -> TAU2 NUTAUL
37000       XM1=PMAS(PYCOMP(KSUSY2+15),1)
37001       XM2=PMAS(PYCOMP(KSUSY1+16),1)
37002       IF(XMI.GE.XM1+XM2) THEN
37003         XL=PYLAMF(XMI2,XM1**2,XM2**2)
37004         LKNT=LKNT+1
37005         XLAM(LKNT)=CF*SQRT(XL)/4D0*C1/XMI3*(GL)**2*SFMIX(15,3)**2
37006         IDLAM(LKNT,1)=-(KSUSY2+15)
37007         IDLAM(LKNT,2)= KSUSY1+16
37008         IDLAM(LKNT,3)=0
37009       ENDIF
37010  
37011   230 CONTINUE
37012       IKNT=LKNT
37013       XLAM(0)=0D0
37014       DO 240 I=1,IKNT
37015         IF(XLAM(I).LE.0D0) XLAM(I)=0D0
37016         XLAM(0)=XLAM(0)+XLAM(I)
37017   240 CONTINUE
37018       IF(XLAM(0).EQ.0D0) XLAM(0)=1D-6
37019  
37020       RETURN
37021       END
37022  
37023 C*********************************************************************
37024  
37025 C...PYH2XX
37026 C...Calculates the decay rate for a Higgs to an ino pair.
37027  
37028       FUNCTION PYH2XX(C1,XM1,XM2,XM3,GL,GR)
37029  
37030 C...Double precision and integer declarations.
37031       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37032       IMPLICIT INTEGER(I-N)
37033       INTEGER PYK,PYCHGE,PYCOMP
37034 C...Commonblocks.
37035       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37036       SAVE /PYDAT1/
37037  
37038 C...Local variables.
37039       DOUBLE PRECISION PYH2XX,XM1,XM2,XM3,GL,GR
37040       DOUBLE PRECISION XL,PYLAMF,C1
37041       DOUBLE PRECISION XMI2,XMJ2,XMK2,XMI3
37042  
37043       XMI2=XM1**2
37044       XMI3=ABS(XM1**3)
37045       XMJ2=XM2**2
37046       XMK2=XM3**2
37047       XL=PYLAMF(XMI2,XMJ2,XMK2)
37048       PYH2XX=C1/4D0/XMI3*SQRT(XL)
37049      &*((GL**2+GR**2)*(XMI2-XMJ2-XMK2)-
37050      &4D0*GL*GR*XM3*XM2)
37051       IF(PYH2XX.LT.0D0) THEN
37052         WRITE(MSTU(11),*) ' NEGATIVE WIDTH IN PYH2XX '
37053         WRITE(MSTU(11),*) XMI2,XMJ2,XMK2,GL,GR,XM1,XM2,XM3
37054         STOP
37055       ENDIF
37056  
37057       RETURN
37058       END
37059  
37060 C*********************************************************************
37061  
37062 C...PYGAUS
37063 C...Integration by adaptive Gaussian quadrature.
37064 C...Adapted from the CERNLIB DGAUSS routine by K.S. Kolbig.
37065  
37066       FUNCTION PYGAUS(F, A, B, EPS)
37067  
37068 C...Double precision and integer declarations.
37069       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37070       IMPLICIT INTEGER(I-N)
37071       INTEGER PYK,PYCHGE,PYCOMP
37072  
37073 C...Local declarations.
37074       EXTERNAL F
37075       DOUBLE PRECISION F,W(12), X(12)
37076       DATA X( 1) /9.6028985649753623D-1/, W( 1) /1.0122853629037626D-1/
37077       DATA X( 2) /7.9666647741362674D-1/, W( 2) /2.2238103445337447D-1/
37078       DATA X( 3) /5.2553240991632899D-1/, W( 3) /3.1370664587788729D-1/
37079       DATA X( 4) /1.8343464249564980D-1/, W( 4) /3.6268378337836198D-1/
37080       DATA X( 5) /9.8940093499164993D-1/, W( 5) /2.7152459411754095D-2/
37081       DATA X( 6) /9.4457502307323258D-1/, W( 6) /6.2253523938647893D-2/
37082       DATA X( 7) /8.6563120238783174D-1/, W( 7) /9.5158511682492785D-2/
37083       DATA X( 8) /7.5540440835500303D-1/, W( 8) /1.2462897125553387D-1/
37084       DATA X( 9) /6.1787624440264375D-1/, W( 9) /1.4959598881657673D-1/
37085       DATA X(10) /4.5801677765722739D-1/, W(10) /1.6915651939500254D-1/
37086       DATA X(11) /2.8160355077925891D-1/, W(11) /1.8260341504492359D-1/
37087       DATA X(12) /9.5012509837637440D-2/, W(12) /1.8945061045506850D-1/
37088  
37089 C...The Gaussian quadrature algorithm.
37090       H = 0D0
37091       IF(B .EQ. A) GO TO 140
37092       CONST = 5D-3 / ABS(B-A)
37093       BB = A
37094   100 CONTINUE
37095       AA = BB
37096       BB = B
37097   110 CONTINUE
37098       C1 = 0.5D0*(BB+AA)
37099       C2 = 0.5D0*(BB-AA)
37100       S8 = 0D0
37101       DO 120 I = 1, 4
37102         U = C2*X(I)
37103         S8 = S8 + W(I) * (F(C1+U) + F(C1-U))
37104   120 CONTINUE
37105       S16 = 0D0
37106       DO 130 I = 5, 12
37107         U = C2*X(I)
37108         S16 = S16 + W(I) * (F(C1+U) + F(C1-U))
37109   130 CONTINUE
37110       S16 = C2*S16
37111       IF(DABS(S16-C2*S8) .LE. EPS*(1D0+DABS(S16))) THEN
37112         H = H + S16
37113         IF(BB .NE. B) GO TO 100
37114       ELSE
37115         BB = C1
37116         IF(1D0 + CONST*ABS(C2) .NE. 1D0) GO TO 110
37117         H = 0D0
37118         CALL PYERRM(18,'(PYGAUS:) too high accuracy required')
37119         GO TO 140
37120       ENDIF
37121   140 CONTINUE
37122       PYGAUS = H
37123  
37124       RETURN
37125       END
37126  
37127 C*********************************************************************
37128  
37129 C...PYSIMP
37130 C...Simpson formula for an integral.
37131  
37132       FUNCTION PYSIMP(Y,X0,X1,N)
37133  
37134 C...Double precision and integer declarations.
37135       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37136       IMPLICIT INTEGER(I-N)
37137       INTEGER PYK,PYCHGE,PYCOMP
37138  
37139 C...Local variables.
37140       DOUBLE PRECISION Y,X0,X1,H,S
37141       DIMENSION Y(0:N)
37142  
37143       S=0D0
37144       H=(X1-X0)/N
37145       DO 100 I=0,N-2,2
37146         S=S+Y(I)+4D0*Y(I+1)+Y(I+2)
37147   100 CONTINUE
37148       PYSIMP=S*H/3D0
37149  
37150       RETURN
37151       END
37152  
37153 C*********************************************************************
37154  
37155 C...PYLAMF
37156 C...The standard lambda function.
37157  
37158       FUNCTION PYLAMF(X,Y,Z)
37159  
37160 C...Double precision and integer declarations.
37161       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37162       IMPLICIT INTEGER(I-N)
37163       INTEGER PYK,PYCHGE,PYCOMP
37164  
37165 C...Local variables.
37166       DOUBLE PRECISION PYLAMF,X,Y,Z
37167  
37168       PYLAMF=(X-(Y+Z))**2-4D0*Y*Z
37169       IF(PYLAMF.LT.0D0) PYLAMF=0D0
37170  
37171       RETURN
37172       END
37173  
37174 C*********************************************************************
37175  
37176 C...PYTBDY
37177 C...Generates 3-body decays of gauginos.
37178  
37179       SUBROUTINE PYTBDY(XM)
37180  
37181 C...Double precision and integer declarations.
37182       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37183       IMPLICIT INTEGER(I-N)
37184       INTEGER PYK,PYCHGE,PYCOMP
37185 C...Parameter statement to help give large particle numbers.
37186       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
37187 C...Commonblocks.
37188       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37189       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37190       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37191       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
37192       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
37193       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYPARS/
37194  
37195 C...Local variables.
37196       DOUBLE PRECISION XM(5)
37197       DOUBLE PRECISION S12MIN,S12MAX,YJACO1,S23AVE,S23DF1,S23DF2
37198       DOUBLE PRECISION D1,D2,D3,P1,P2,P3,CTHE1,STHE1,CTHE3,STHE3
37199       DOUBLE PRECISION CPHI1,SPHI1
37200       DOUBLE PRECISION S23DEL,EPS
37201       DOUBLE PRECISION GOLDEN,AX,BX,CX,TOL,XMIN,R,C
37202       PARAMETER (R=0.61803399D0,C=1D0-R,TOL=1D-3)
37203       DOUBLE PRECISION F1,F2,X0,X1,X2,X3
37204       DATA EPS/1D-6/
37205  
37206 C...GENERATE S12
37207       S12MIN=(XM(1)+XM(2))**2
37208       S12MAX=(XM(5)-XM(3))**2
37209       YJACO1=S12MAX-S12MIN
37210  
37211 C...FIND S12*
37212       AX=S12MIN
37213       CX=S12MAX
37214       BX=S12MIN+0.5D0*YJACO1
37215       X0=AX
37216       X3=CX
37217       IF(ABS(CX-BX).GT.ABS(BX-AX))THEN
37218         X1=BX
37219         X2=BX+C*(CX-BX)
37220       ELSE
37221         X2=BX
37222         X1=BX-C*(BX-AX)
37223       ENDIF
37224  
37225 C...SOLVE FOR F1 AND F2
37226       S23DF1=(X1-XM(2)**2-XM(1)**2)**2
37227      &-(2D0*XM(1)*XM(2))**2
37228       S23DF2=(X1-XM(3)**2-XM(5)**2)**2
37229      &-(2D0*XM(3)*XM(5))**2
37230       S23DF1=S23DF1*EPS
37231       S23DF2=S23DF2*EPS
37232       S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X1)
37233       F1=-2D0*S23DEL/EPS
37234       S23DF1=(X2-XM(2)**2-XM(1)**2)**2
37235      &-(2D0*XM(1)*XM(2))**2
37236       S23DF2=(X2-XM(3)**2-XM(5)**2)**2
37237      &-(2D0*XM(3)*XM(5))**2
37238       S23DF1=S23DF1*EPS
37239       S23DF2=S23DF2*EPS
37240       S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X2)
37241       F2=-2D0*S23DEL/EPS
37242  
37243   100 IF(ABS(X3-X0).GT.TOL*(ABS(X1)+ABS(X2)))THEN
37244         IF(F2.LT.F1)THEN
37245           X0=X1
37246           X1=X2
37247           X2=R*X1+C*X3
37248           F1=F2
37249           S23DF1=(X2-XM(2)**2-XM(1)**2)**2
37250      &    -(2D0*XM(1)*XM(2))**2
37251           S23DF2=(X2-XM(3)**2-XM(5)**2)**2
37252      &    -(2D0*XM(3)*XM(5))**2
37253           S23DF1=S23DF1*EPS
37254           S23DF2=S23DF2*EPS
37255           S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X2)
37256           F2=-2D0*S23DEL/EPS
37257         ELSE
37258           X3=X2
37259           X2=X1
37260           X1=R*X2+C*X0
37261           F2=F1
37262           S23DF1=(X1-XM(2)**2-XM(1)**2)**2
37263      &    -(2D0*XM(1)*XM(2))**2
37264           S23DF2=(X1-XM(3)**2-XM(5)**2)**2
37265      &    -(2D0*XM(3)*XM(5))**2
37266           S23DF1=S23DF1*EPS
37267           S23DF2=S23DF2*EPS
37268           S23DEL=SQRT(S23DF1*S23DF2)/(2D0*X1)
37269           F1=-2D0*S23DEL/EPS
37270         ENDIF
37271         GOTO 100
37272       ENDIF
37273 C...WE WANT THE MAXIMUM, NOT THE MINIMUM
37274       IF(F1.LT.F2)THEN
37275         GOLDEN=-F1
37276         XMIN=X1
37277       ELSE
37278         GOLDEN=-F2
37279         XMIN=X2
37280       ENDIF
37281  
37282       IKNT=0
37283   110 S12=S12MIN+PYR(0)*YJACO1
37284       IKNT=IKNT+1
37285 C...GENERATE S23
37286       S23AVE=XM(2)**2+XM(3)**2-(S12+XM(2)**2-XM(1)**2)
37287      &*(S12+XM(3)**2-XM(5)**2)/(2D0*S12)
37288       S23DF1=(S12-XM(2)**2-XM(1)**2)**2
37289      &-(2D0*XM(1)*XM(2))**2
37290       S23DF2=(S12-XM(3)**2-XM(5)**2)**2
37291      &-(2D0*XM(3)*XM(5))**2
37292       S23DF1=S23DF1*EPS
37293       S23DF2=S23DF2*EPS
37294       S23DEL=SQRT(S23DF1*S23DF2)/(2D0*S12)
37295       S23DEL=S23DEL/EPS
37296       S23MIN=S23AVE-S23DEL
37297       S23MAX=S23AVE+S23DEL
37298       YJACO2=S23MAX-S23MIN
37299       S23=S23MIN+PYR(0)*YJACO2
37300  
37301 C...CHECK THE SAMPLING
37302       IF(IKNT.GT.100) THEN
37303         WRITE(MSTU(11),*) ' IKNT > 100 IN PYTBDY '
37304         GOTO 120
37305       ENDIF
37306       IF(YJACO2.LT.PYR(0)*GOLDEN) GOTO 110
37307   120 D3=(XM(5)**2+XM(3)**2-S12)/(2D0*XM(5))
37308       D1=(XM(5)**2+XM(1)**2-S23)/(2D0*XM(5))
37309       D2=XM(5)-D1-D3
37310       P1=SQRT(D1*D1-XM(1)**2)
37311       P2=SQRT(D2*D2-XM(2)**2)
37312       P3=SQRT(D3*D3-XM(3)**2)
37313       CTHE1=2D0*PYR(0)-1D0
37314       ANG1=2D0*PYR(0)*PARU(1)
37315       CPHI1=COS(ANG1)
37316       SPHI1=SIN(ANG1)
37317       ARG=1D0-CTHE1**2
37318       IF(ARG.LT.0D0.AND.ARG.GT.-1D-3) ARG=0D0
37319       STHE1=SQRT(ARG)
37320       P(N+1,1)=P1*STHE1*CPHI1
37321       P(N+1,2)=P1*STHE1*SPHI1
37322       P(N+1,3)=P1*CTHE1
37323       P(N+1,4)=D1
37324  
37325 C...GET CPHI3
37326       ANG3=2D0*PYR(0)*PARU(1)
37327       CPHI3=COS(ANG3)
37328       SPHI3=SIN(ANG3)
37329       CTHE3=(P2**2-P1**2-P3**2)/2D0/P1/P3
37330       ARG=1D0-CTHE3**2
37331       IF(ARG.LT.0D0.AND.ARG.GT.-1D-3) ARG=0D0
37332       STHE3=SQRT(ARG)
37333       P(N+3,1)=-P3*STHE3*CPHI3*CTHE1*CPHI1
37334      &+P3*STHE3*SPHI3*SPHI1
37335      &+P3*CTHE3*STHE1*CPHI1
37336       P(N+3,2)=-P3*STHE3*CPHI3*CTHE1*SPHI1
37337      &-P3*STHE3*SPHI3*CPHI1
37338      &+P3*CTHE3*STHE1*SPHI1
37339       P(N+3,3)=P3*STHE3*CPHI3*STHE1
37340      &+P3*CTHE3*CTHE1
37341       P(N+3,4)=D3
37342  
37343       DO 130 I=1,3
37344         P(N+2,I)=-P(N+1,I)-P(N+3,I)
37345   130 CONTINUE
37346       P(N+2,4)=D2
37347  
37348       RETURN
37349       END
37350  
37351 C*********************************************************************
37352  
37353 C...PY1ENT
37354 C...Stores one parton/particle in commonblock PYJETS.
37355  
37356       SUBROUTINE PY1ENT(IP,KF,PE,THE,PHI)
37357  
37358 C...Double precision and integer declarations.
37359       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37360       IMPLICIT INTEGER(I-N)
37361       INTEGER PYK,PYCHGE,PYCOMP
37362 C...Commonblocks.
37363       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37364       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37365       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37366       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
37367  
37368 C...Standard checks.
37369       MSTU(28)=0
37370       IF(MSTU(12).GE.1) CALL PYLIST(0)
37371       IPA=MAX(1,IABS(IP))
37372       IF(IPA.GT.MSTU(4)) CALL PYERRM(21,
37373      &'(PY1ENT:) writing outside PYJETS memory')
37374       KC=PYCOMP(KF)
37375       IF(KC.EQ.0) CALL PYERRM(12,'(PY1ENT:) unknown flavour code')
37376  
37377 C...Find mass. Reset K, P and V vectors.
37378       PM=0D0
37379       IF(MSTU(10).EQ.1) PM=P(IPA,5)
37380       IF(MSTU(10).GE.2) PM=PYMASS(KF)
37381       DO 100 J=1,5
37382         K(IPA,J)=0
37383         P(IPA,J)=0D0
37384         V(IPA,J)=0D0
37385   100 CONTINUE
37386  
37387 C...Store parton/particle in K and P vectors.
37388       K(IPA,1)=1
37389       IF(IP.LT.0) K(IPA,1)=2
37390       K(IPA,2)=KF
37391       P(IPA,5)=PM
37392       P(IPA,4)=MAX(PE,PM)
37393       PA=SQRT(P(IPA,4)**2-P(IPA,5)**2)
37394       P(IPA,1)=PA*SIN(THE)*COS(PHI)
37395       P(IPA,2)=PA*SIN(THE)*SIN(PHI)
37396       P(IPA,3)=PA*COS(THE)
37397  
37398 C...Set N. Optionally fragment/decay.
37399       N=IPA
37400       IF(IP.EQ.0) CALL PYEXEC
37401  
37402       RETURN
37403       END
37404  
37405 C*********************************************************************
37406  
37407 C...PY2ENT
37408 C...Stores two partons/particles in their CM frame,
37409 C...with the first along the +z axis.
37410  
37411       SUBROUTINE PY2ENT(IP,KF1,KF2,PECM)
37412  
37413 C...Double precision and integer declarations.
37414       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37415       IMPLICIT INTEGER(I-N)
37416       INTEGER PYK,PYCHGE,PYCOMP
37417 C...Commonblocks.
37418       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37419       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37420       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37421       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
37422  
37423 C...Standard checks.
37424       MSTU(28)=0
37425       IF(MSTU(12).GE.1) CALL PYLIST(0)
37426       IPA=MAX(1,IABS(IP))
37427       IF(IPA.GT.MSTU(4)-1) CALL PYERRM(21,
37428      &'(PY2ENT:) writing outside PYJETS memory')
37429       KC1=PYCOMP(KF1)
37430       KC2=PYCOMP(KF2)
37431       IF(KC1.EQ.0.OR.KC2.EQ.0) CALL PYERRM(12,
37432      &'(PY2ENT:) unknown flavour code')
37433  
37434 C...Find masses. Reset K, P and V vectors.
37435       PM1=0D0
37436       IF(MSTU(10).EQ.1) PM1=P(IPA,5)
37437       IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
37438       PM2=0D0
37439       IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
37440       IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
37441       DO 110 I=IPA,IPA+1
37442         DO 100 J=1,5
37443           K(I,J)=0
37444           P(I,J)=0D0
37445           V(I,J)=0D0
37446   100   CONTINUE
37447   110 CONTINUE
37448  
37449 C...Check flavours.
37450       KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
37451       KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
37452       IF(MSTU(19).EQ.1) THEN
37453         MSTU(19)=0
37454       ELSE
37455         IF(KQ1+KQ2.NE.0.AND.KQ1+KQ2.NE.4) CALL PYERRM(2,
37456      &  '(PY2ENT:) unphysical flavour combination')
37457       ENDIF
37458       K(IPA,2)=KF1
37459       K(IPA+1,2)=KF2
37460  
37461 C...Store partons/particles in K vectors for normal case.
37462       IF(IP.GE.0) THEN
37463         K(IPA,1)=1
37464         IF(KQ1.NE.0.AND.KQ2.NE.0) K(IPA,1)=2
37465         K(IPA+1,1)=1
37466  
37467 C...Store partons in K vectors for parton shower evolution.
37468       ELSE
37469         K(IPA,1)=3
37470         K(IPA+1,1)=3
37471         K(IPA,4)=MSTU(5)*(IPA+1)
37472         K(IPA,5)=K(IPA,4)
37473         K(IPA+1,4)=MSTU(5)*IPA
37474         K(IPA+1,5)=K(IPA+1,4)
37475       ENDIF
37476  
37477 C...Check kinematics and store partons/particles in P vectors.
37478       IF(PECM.LE.PM1+PM2) CALL PYERRM(13,
37479      &'(PY2ENT:) energy smaller than sum of masses')
37480       PA=SQRT(MAX(0D0,(PECM**2-PM1**2-PM2**2)**2-(2D0*PM1*PM2)**2))/
37481      &(2D0*PECM)
37482       P(IPA,3)=PA
37483       P(IPA,4)=SQRT(PM1**2+PA**2)
37484       P(IPA,5)=PM1
37485       P(IPA+1,3)=-PA
37486       P(IPA+1,4)=SQRT(PM2**2+PA**2)
37487       P(IPA+1,5)=PM2
37488  
37489 C...Set N. Optionally fragment/decay.
37490       N=IPA+1
37491       IF(IP.EQ.0) CALL PYEXEC
37492  
37493       RETURN
37494       END
37495  
37496 C*********************************************************************
37497  
37498 C...PY3ENT
37499 C...Stores three partons or particles in their CM frame,
37500 C...with the first along the +z axis and the third in the (x,z)
37501 C...plane with x > 0.
37502  
37503       SUBROUTINE PY3ENT(IP,KF1,KF2,KF3,PECM,X1,X3)
37504  
37505 C...Double precision and integer declarations.
37506       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37507       IMPLICIT INTEGER(I-N)
37508       INTEGER PYK,PYCHGE,PYCOMP
37509 C...Commonblocks.
37510       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37511       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37512       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37513       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
37514  
37515 C...Standard checks.
37516       MSTU(28)=0
37517       IF(MSTU(12).GE.1) CALL PYLIST(0)
37518       IPA=MAX(1,IABS(IP))
37519       IF(IPA.GT.MSTU(4)-2) CALL PYERRM(21,
37520      &'(PY3ENT:) writing outside PYJETS memory')
37521       KC1=PYCOMP(KF1)
37522       KC2=PYCOMP(KF2)
37523       KC3=PYCOMP(KF3)
37524       IF(KC1.EQ.0.OR.KC2.EQ.0.OR.KC3.EQ.0) CALL PYERRM(12,
37525      &'(PY3ENT:) unknown flavour code')
37526  
37527 C...Find masses. Reset K, P and V vectors.
37528       PM1=0D0
37529       IF(MSTU(10).EQ.1) PM1=P(IPA,5)
37530       IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
37531       PM2=0D0
37532       IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
37533       IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
37534       PM3=0D0
37535       IF(MSTU(10).EQ.1) PM3=P(IPA+2,5)
37536       IF(MSTU(10).GE.2) PM3=PYMASS(KF3)
37537       DO 110 I=IPA,IPA+2
37538         DO 100 J=1,5
37539           K(I,J)=0
37540           P(I,J)=0D0
37541           V(I,J)=0D0
37542   100   CONTINUE
37543   110 CONTINUE
37544  
37545 C...Check flavours.
37546       KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
37547       KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
37548       KQ3=KCHG(KC3,2)*ISIGN(1,KF3)
37549       IF(MSTU(19).EQ.1) THEN
37550         MSTU(19)=0
37551       ELSEIF(KQ1.EQ.0.AND.KQ2.EQ.0.AND.KQ3.EQ.0) THEN
37552       ELSEIF(KQ1.NE.0.AND.KQ2.EQ.2.AND.(KQ1+KQ3.EQ.0.OR.
37553      &  KQ1+KQ3.EQ.4)) THEN
37554       ELSE
37555         CALL PYERRM(2,'(PY3ENT:) unphysical flavour combination')
37556       ENDIF
37557       K(IPA,2)=KF1
37558       K(IPA+1,2)=KF2
37559       K(IPA+2,2)=KF3
37560  
37561 C...Store partons/particles in K vectors for normal case.
37562       IF(IP.GE.0) THEN
37563         K(IPA,1)=1
37564         IF(KQ1.NE.0.AND.(KQ2.NE.0.OR.KQ3.NE.0)) K(IPA,1)=2
37565         K(IPA+1,1)=1
37566         IF(KQ2.NE.0.AND.KQ3.NE.0) K(IPA+1,1)=2
37567         K(IPA+2,1)=1
37568  
37569 C...Store partons in K vectors for parton shower evolution.
37570       ELSE
37571         K(IPA,1)=3
37572         K(IPA+1,1)=3
37573         K(IPA+2,1)=3
37574         KCS=4
37575         IF(KQ1.EQ.-1) KCS=5
37576         K(IPA,KCS)=MSTU(5)*(IPA+1)
37577         K(IPA,9-KCS)=MSTU(5)*(IPA+2)
37578         K(IPA+1,KCS)=MSTU(5)*(IPA+2)
37579         K(IPA+1,9-KCS)=MSTU(5)*IPA
37580         K(IPA+2,KCS)=MSTU(5)*IPA
37581         K(IPA+2,9-KCS)=MSTU(5)*(IPA+1)
37582       ENDIF
37583  
37584 C...Check kinematics.
37585       MKERR=0
37586       IF(0.5D0*X1*PECM.LE.PM1.OR.0.5D0*(2D0-X1-X3)*PECM.LE.PM2.OR.
37587      &0.5D0*X3*PECM.LE.PM3) MKERR=1
37588       PA1=SQRT(MAX(1D-10,(0.5D0*X1*PECM)**2-PM1**2))
37589       PA2=SQRT(MAX(1D-10,(0.5D0*(2D0-X1-X3)*PECM)**2-PM2**2))
37590       PA3=SQRT(MAX(1D-10,(0.5D0*X3*PECM)**2-PM3**2))
37591       CTHE2=(PA3**2-PA1**2-PA2**2)/(2D0*PA1*PA2)
37592       CTHE3=(PA2**2-PA1**2-PA3**2)/(2D0*PA1*PA3)
37593       IF(ABS(CTHE2).GE.1.001D0.OR.ABS(CTHE3).GE.1.001D0) MKERR=1
37594       CTHE3=MAX(-1D0,MIN(1D0,CTHE3))
37595       IF(MKERR.NE.0) CALL PYERRM(13,
37596      &'(PY3ENT:) unphysical kinematical variable setup')
37597  
37598 C...Store partons/particles in P vectors.
37599       P(IPA,3)=PA1
37600       P(IPA,4)=SQRT(PA1**2+PM1**2)
37601       P(IPA,5)=PM1
37602       P(IPA+2,1)=PA3*SQRT(1D0-CTHE3**2)
37603       P(IPA+2,3)=PA3*CTHE3
37604       P(IPA+2,4)=SQRT(PA3**2+PM3**2)
37605       P(IPA+2,5)=PM3
37606       P(IPA+1,1)=-P(IPA+2,1)
37607       P(IPA+1,3)=-P(IPA,3)-P(IPA+2,3)
37608       P(IPA+1,4)=SQRT(P(IPA+1,1)**2+P(IPA+1,3)**2+PM2**2)
37609       P(IPA+1,5)=PM2
37610  
37611 C...Set N. Optionally fragment/decay.
37612       N=IPA+2
37613       IF(IP.EQ.0) CALL PYEXEC
37614  
37615       RETURN
37616       END
37617  
37618 C*********************************************************************
37619  
37620 C...PY4ENT
37621 C...Stores four partons or particles in their CM frame, with
37622 C...the first along the +z axis, the last in the xz plane with x > 0
37623 C...and the second having y < 0 and y > 0 with equal probability.
37624  
37625       SUBROUTINE PY4ENT(IP,KF1,KF2,KF3,KF4,PECM,X1,X2,X4,X12,X14)
37626  
37627 C...Double precision and integer declarations.
37628       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37629       IMPLICIT INTEGER(I-N)
37630       INTEGER PYK,PYCHGE,PYCOMP
37631 C...Commonblocks.
37632       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37633       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37634       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
37635       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
37636  
37637 C...Standard checks.
37638       MSTU(28)=0
37639       IF(MSTU(12).GE.1) CALL PYLIST(0)
37640       IPA=MAX(1,IABS(IP))
37641       IF(IPA.GT.MSTU(4)-3) CALL PYERRM(21,
37642      &'(PY4ENT:) writing outside PYJETS momory')
37643       KC1=PYCOMP(KF1)
37644       KC2=PYCOMP(KF2)
37645       KC3=PYCOMP(KF3)
37646       KC4=PYCOMP(KF4)
37647       IF(KC1.EQ.0.OR.KC2.EQ.0.OR.KC3.EQ.0.OR.KC4.EQ.0) CALL PYERRM(12,
37648      &'(PY4ENT:) unknown flavour code')
37649  
37650 C...Find masses. Reset K, P and V vectors.
37651       PM1=0D0
37652       IF(MSTU(10).EQ.1) PM1=P(IPA,5)
37653       IF(MSTU(10).GE.2) PM1=PYMASS(KF1)
37654       PM2=0D0
37655       IF(MSTU(10).EQ.1) PM2=P(IPA+1,5)
37656       IF(MSTU(10).GE.2) PM2=PYMASS(KF2)
37657       PM3=0D0
37658       IF(MSTU(10).EQ.1) PM3=P(IPA+2,5)
37659       IF(MSTU(10).GE.2) PM3=PYMASS(KF3)
37660       PM4=0D0
37661       IF(MSTU(10).EQ.1) PM4=P(IPA+3,5)
37662       IF(MSTU(10).GE.2) PM4=PYMASS(KF4)
37663       DO 110 I=IPA,IPA+3
37664         DO 100 J=1,5
37665           K(I,J)=0
37666           P(I,J)=0D0
37667           V(I,J)=0D0
37668   100   CONTINUE
37669   110 CONTINUE
37670  
37671 C...Check flavours.
37672       KQ1=KCHG(KC1,2)*ISIGN(1,KF1)
37673       KQ2=KCHG(KC2,2)*ISIGN(1,KF2)
37674       KQ3=KCHG(KC3,2)*ISIGN(1,KF3)
37675       KQ4=KCHG(KC4,2)*ISIGN(1,KF4)
37676       IF(MSTU(19).EQ.1) THEN
37677         MSTU(19)=0
37678       ELSEIF(KQ1.EQ.0.AND.KQ2.EQ.0.AND.KQ3.EQ.0.AND.KQ4.EQ.0) THEN
37679       ELSEIF(KQ1.NE.0.AND.KQ2.EQ.2.AND.KQ3.EQ.2.AND.(KQ1+KQ4.EQ.0.OR.
37680      &  KQ1+KQ4.EQ.4)) THEN
37681       ELSEIF(KQ1.NE.0.AND.KQ1+KQ2.EQ.0.AND.KQ3.NE.0.AND.KQ3+KQ4.EQ.0D0)
37682      &  THEN
37683       ELSE
37684         CALL PYERRM(2,'(PY4ENT:) unphysical flavour combination')
37685       ENDIF
37686       K(IPA,2)=KF1
37687       K(IPA+1,2)=KF2
37688       K(IPA+2,2)=KF3
37689       K(IPA+3,2)=KF4
37690  
37691 C...Store partons/particles in K vectors for normal case.
37692       IF(IP.GE.0) THEN
37693         K(IPA,1)=1
37694         IF(KQ1.NE.0.AND.(KQ2.NE.0.OR.KQ3.NE.0.OR.KQ4.NE.0)) K(IPA,1)=2
37695         K(IPA+1,1)=1
37696         IF(KQ2.NE.0.AND.KQ1+KQ2.NE.0.AND.(KQ3.NE.0.OR.KQ4.NE.0))
37697      &  K(IPA+1,1)=2
37698         K(IPA+2,1)=1
37699         IF(KQ3.NE.0.AND.KQ4.NE.0) K(IPA+2,1)=2
37700         K(IPA+3,1)=1
37701  
37702 C...Store partons for parton shower evolution from q-g-g-qbar or
37703 C...g-g-g-g event.
37704       ELSEIF(KQ1+KQ2.NE.0) THEN
37705         K(IPA,1)=3
37706         K(IPA+1,1)=3
37707         K(IPA+2,1)=3
37708         K(IPA+3,1)=3
37709         KCS=4
37710         IF(KQ1.EQ.-1) KCS=5
37711         K(IPA,KCS)=MSTU(5)*(IPA+1)
37712         K(IPA,9-KCS)=MSTU(5)*(IPA+3)
37713         K(IPA+1,KCS)=MSTU(5)*(IPA+2)
37714         K(IPA+1,9-KCS)=MSTU(5)*IPA
37715         K(IPA+2,KCS)=MSTU(5)*(IPA+3)
37716         K(IPA+2,9-KCS)=MSTU(5)*(IPA+1)
37717         K(IPA+3,KCS)=MSTU(5)*IPA
37718         K(IPA+3,9-KCS)=MSTU(5)*(IPA+2)
37719  
37720 C...Store partons for parton shower evolution from q-qbar-q-qbar event.
37721       ELSE
37722         K(IPA,1)=3
37723         K(IPA+1,1)=3
37724         K(IPA+2,1)=3
37725         K(IPA+3,1)=3
37726         K(IPA,4)=MSTU(5)*(IPA+1)
37727         K(IPA,5)=K(IPA,4)
37728         K(IPA+1,4)=MSTU(5)*IPA
37729         K(IPA+1,5)=K(IPA+1,4)
37730         K(IPA+2,4)=MSTU(5)*(IPA+3)
37731         K(IPA+2,5)=K(IPA+2,4)
37732         K(IPA+3,4)=MSTU(5)*(IPA+2)
37733         K(IPA+3,5)=K(IPA+3,4)
37734       ENDIF
37735  
37736 C...Check kinematics.
37737       MKERR=0
37738       IF(0.5D0*X1*PECM.LE.PM1.OR.0.5D0*X2*PECM.LE.PM2.OR.
37739      &0.5D0*(2D0-X1-X2-X4)*PECM.LE.PM3.OR.0.5D0*X4*PECM.LE.PM4)
37740      &MKERR=1
37741       PA1=SQRT(MAX(1D-10,(0.5D0*X1*PECM)**2-PM1**2))
37742       PA2=SQRT(MAX(1D-10,(0.5D0*X2*PECM)**2-PM2**2))
37743       PA4=SQRT(MAX(1D-10,(0.5D0*X4*PECM)**2-PM4**2))
37744       X24=X1+X2+X4-1D0-X12-X14+(PM3**2-PM1**2-PM2**2-PM4**2)/PECM**2
37745       CTHE4=(X1*X4-2D0*X14)*PECM**2/(4D0*PA1*PA4)
37746       IF(ABS(CTHE4).GE.1.002D0) MKERR=1
37747       CTHE4=MAX(-1D0,MIN(1D0,CTHE4))
37748       STHE4=SQRT(1D0-CTHE4**2)
37749       CTHE2=(X1*X2-2D0*X12)*PECM**2/(4D0*PA1*PA2)
37750       IF(ABS(CTHE2).GE.1.002D0) MKERR=1
37751       CTHE2=MAX(-1D0,MIN(1D0,CTHE2))
37752       STHE2=SQRT(1D0-CTHE2**2)
37753       CPHI2=((X2*X4-2D0*X24)*PECM**2-4D0*PA2*CTHE2*PA4*CTHE4)/
37754      &MAX(1D-8*PECM**2,4D0*PA2*STHE2*PA4*STHE4)
37755       IF(ABS(CPHI2).GE.1.05D0) MKERR=1
37756       CPHI2=MAX(-1D0,MIN(1D0,CPHI2))
37757       IF(MKERR.EQ.1) CALL PYERRM(13,
37758      &'(PY4ENT:) unphysical kinematical variable setup')
37759  
37760 C...Store partons/particles in P vectors.
37761       P(IPA,3)=PA1
37762       P(IPA,4)=SQRT(PA1**2+PM1**2)
37763       P(IPA,5)=PM1
37764       P(IPA+3,1)=PA4*STHE4
37765       P(IPA+3,3)=PA4*CTHE4
37766       P(IPA+3,4)=SQRT(PA4**2+PM4**2)
37767       P(IPA+3,5)=PM4
37768       P(IPA+1,1)=PA2*STHE2*CPHI2
37769       P(IPA+1,2)=PA2*STHE2*SQRT(1D0-CPHI2**2)*(-1D0)**INT(PYR(0)+0.5D0)
37770       P(IPA+1,3)=PA2*CTHE2
37771       P(IPA+1,4)=SQRT(PA2**2+PM2**2)
37772       P(IPA+1,5)=PM2
37773       P(IPA+2,1)=-P(IPA+1,1)-P(IPA+3,1)
37774       P(IPA+2,2)=-P(IPA+1,2)
37775       P(IPA+2,3)=-P(IPA,3)-P(IPA+1,3)-P(IPA+3,3)
37776       P(IPA+2,4)=SQRT(P(IPA+2,1)**2+P(IPA+2,2)**2+P(IPA+2,3)**2+PM3**2)
37777       P(IPA+2,5)=PM3
37778  
37779 C...Set N. Optionally fragment/decay.
37780       N=IPA+3
37781       IF(IP.EQ.0) CALL PYEXEC
37782  
37783       RETURN
37784       END
37785 
37786 C*********************************************************************
37787  
37788 C...PY2FRM
37789 C...An interface from a two-fermion generator to include
37790 C...parton showers and hadronization.
37791  
37792       SUBROUTINE PY2FRM(IRAD,ITAU,ICOM)
37793 
37794 C...Double precision and integer declarations.
37795       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37796       IMPLICIT INTEGER(I-N)
37797       INTEGER PYK,PYCHGE,PYCOMP
37798 C...Commonblocks.
37799       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37800       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37801       SAVE /PYJETS/,/PYDAT1/
37802 C...Local arrays.
37803       DIMENSION IJOIN(2),INTAU(2)
37804  
37805 C...Call PYHEPC to convert input from HEPEVT to PYJETS common.
37806       IF(ICOM.EQ.0) THEN 
37807         MSTU(28)=0
37808         CALL PYHEPC(2)
37809       ENDIF
37810  
37811 C...Loop through entries and pick up all final fermions/antifermions.
37812       I1=0
37813       I2=0
37814       DO 100 I=1,N
37815       IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
37816       KFA=IABS(K(I,2))
37817       IF((KFA.GE.1.AND.KFA.LE.6).OR.(KFA.GE.11.AND.KFA.LE.16)) THEN
37818         IF(K(I,2).GT.0) THEN
37819           IF(I1.EQ.0) THEN
37820             I1=I
37821           ELSE
37822             CALL PYERRM(16,'(PY2FRM:) more than one fermion')
37823           ENDIF
37824         ELSE
37825           IF(I2.EQ.0) THEN
37826             I2=I
37827           ELSE
37828             CALL PYERRM(16,'(PY2FRM:) more than one antifermion')
37829           ENDIF
37830         ENDIF
37831       ENDIF
37832   100 CONTINUE
37833  
37834 C...Check that event is arranged according to conventions.
37835       IF(I1.EQ.0.OR.I2.EQ.0) THEN
37836         CALL PYERRM(16,'(PY2FRM:) event contains too few fermions')
37837       ENDIF
37838       IF(I2.LT.I1) THEN
37839         CALL PYERRM(6,'(PY2FRM:) fermions arranged in wrong order')
37840       ENDIF
37841  
37842 C...Check whether fermion pair is quarks or leptons.
37843       IF(IABS(K(I1,2)).LT.10.AND.IABS(K(I2,2)).LT.10) THEN
37844         IQL12=1
37845       ELSEIF(IABS(K(I1,2)).GT.10.AND.IABS(K(I2,2)).GT.10) THEN
37846         IQL12=2
37847       ELSE
37848         CALL PYERRM(16,'(PY2FRM:) fermion pair inconsistent')
37849       ENDIF
37850  
37851 C...Decide whether to allow or not photon radiation in showers.
37852       MSTJ(41)=2
37853       IF(IRAD.EQ.0) MSTJ(41)=1
37854  
37855 C...Do colour joining and parton showers.
37856       IP1=I1
37857       IP2=I2 
37858       IF(IQL12.EQ.1) THEN 
37859         IJOIN(1)=IP1
37860         IJOIN(2)=IP2
37861         CALL PYJOIN(2,IJOIN)
37862       ENDIF
37863       IF(IQL12.EQ.1.OR.IRAD.EQ.1) THEN
37864         PM12S=(P(IP1,4)+P(IP2,4))**2-(P(IP1,1)+P(IP2,1))**2-
37865      &  (P(IP1,2)+P(IP2,2))**2-(P(IP1,3)+P(IP2,3))**2
37866         CALL PYSHOW(IP1,IP2,SQRT(MAX(0D0,PM12S)))
37867       ENDIF
37868  
37869 C...Do fragmentation and decays. Possibly except tau decay.
37870       IF(ITAU.EQ.0) THEN
37871         NTAU=0
37872         DO 110 I=1,N
37873         IF(IABS(K(I,2)).EQ.15.AND.K(I,1).EQ.1) THEN
37874           NTAU=NTAU+1
37875           INTAU(NTAU)=I
37876           K(I,1)=11
37877         ENDIF
37878   110   CONTINUE
37879       ENDIF       
37880       CALL PYEXEC
37881       IF(ITAU.EQ.0) THEN
37882         DO 120 I=1,NTAU
37883         K(INTAU(I),1)=1
37884   120   CONTINUE
37885       ENDIF       
37886  
37887 C...Call PYHEPC to convert output from PYJETS to HEPEVT common.
37888       IF(ICOM.EQ.0) THEN 
37889         MSTU(28)=0
37890         CALL PYHEPC(1)
37891       ENDIF
37892  
37893       END
37894  
37895 C*********************************************************************
37896  
37897 C...PY4FRM
37898 C...An interface from a four-fermion generator to include
37899 C...parton showers and hadronization.
37900  
37901       SUBROUTINE PY4FRM(ATOTSQ,A1SQ,A2SQ,ISTRAT,IRAD,ITAU,ICOM)
37902 
37903 C...Double precision and integer declarations.
37904       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
37905       IMPLICIT INTEGER(I-N)
37906       INTEGER PYK,PYCHGE,PYCOMP
37907 C...Commonblocks.
37908       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
37909       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
37910       SAVE /PYJETS/,/PYDAT1/
37911 C...Local arrays.
37912       DIMENSION IJOIN(2),INTAU(4)
37913  
37914 C...Call PYHEPC to convert input from HEPEVT to PYJETS common.
37915       IF(ICOM.EQ.0) THEN 
37916         MSTU(28)=0
37917         CALL PYHEPC(2)
37918       ENDIF
37919  
37920 C...Loop through entries and pick up all final fermions/antifermions.
37921       I1=0
37922       I2=0
37923       I3=0
37924       I4=0
37925       DO 100 I=1,N
37926       IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
37927       KFA=IABS(K(I,2))
37928       IF((KFA.GE.1.AND.KFA.LE.6).OR.(KFA.GE.11.AND.KFA.LE.16)) THEN
37929         IF(K(I,2).GT.0) THEN
37930           IF(I1.EQ.0) THEN
37931             I1=I
37932           ELSEIF(I3.EQ.0) THEN
37933             I3=I
37934           ELSE
37935             CALL PYERRM(16,'(PY4FRM:) more than two fermions')
37936           ENDIF
37937         ELSE
37938           IF(I2.EQ.0) THEN
37939             I2=I
37940           ELSEIF(I4.EQ.0) THEN
37941             I4=I
37942           ELSE
37943             CALL PYERRM(16,'(PY4FRM:) more than two antifermions')
37944           ENDIF
37945         ENDIF
37946       ENDIF
37947   100 CONTINUE
37948  
37949 C...Check that event is arranged according to conventions.
37950       IF(I3.EQ.0.OR.I4.EQ.0) THEN
37951         CALL PYERRM(16,'(PY4FRM:) event contains too few fermions')
37952       ENDIF
37953       IF(I2.LT.I1.OR.I3.LT.I2.OR.I4.LT.I3) THEN
37954         CALL PYERRM(6,'(PY4FRM:) fermions arranged in wrong order')
37955       ENDIF
37956  
37957 C...Check which fermion pairs are quarks and which leptons.
37958       IF(IABS(K(I1,2)).LT.10.AND.IABS(K(I2,2)).LT.10) THEN
37959         IQL12=1
37960       ELSEIF(IABS(K(I1,2)).GT.10.AND.IABS(K(I2,2)).GT.10) THEN
37961         IQL12=2
37962       ELSE
37963         CALL PYERRM(16,'(PY4FRM:) first fermion pair inconsistent')
37964       ENDIF
37965       IF(IABS(K(I3,2)).LT.10.AND.IABS(K(I4,2)).LT.10) THEN
37966         IQL34=1
37967       ELSEIF(IABS(K(I3,2)).GT.10.AND.IABS(K(I4,2)).GT.10) THEN
37968         IQL34=2
37969       ELSE
37970         CALL PYERRM(16,'(PY4FRM:) second fermion pair inconsistent')
37971       ENDIF
37972  
37973 C...Decide whether to allow or not photon radiation in showers.
37974       MSTJ(41)=2
37975       IF(IRAD.EQ.0) MSTJ(41)=1
37976  
37977 C...Decide on dipole pairing.
37978       IP1=I1
37979       IP2=I2
37980       IP3=I3
37981       IP4=I4
37982       IF(IQL12.EQ.IQL34) THEN
37983         R1SQ=A1SQ
37984         R2SQ=A2SQ
37985         DELTA=ATOTSQ-A1SQ-A2SQ
37986         IF(ISTRAT.EQ.1) THEN
37987           IF(DELTA.GT.0D0) R1SQ=R1SQ+DELTA
37988           IF(DELTA.LT.0D0) R2SQ=MAX(0D0,R2SQ+DELTA)
37989         ELSEIF(ISTRAT.EQ.2) THEN
37990           IF(DELTA.GT.0D0) R2SQ=R2SQ+DELTA
37991           IF(DELTA.LT.0D0) R1SQ=MAX(0D0,R1SQ+DELTA)
37992         ENDIF
37993         IF(R2SQ.GT.PYR(0)*(R1SQ+R2SQ)) THEN
37994           IP2=I4
37995           IP4=I2
37996         ENDIF
37997       ENDIF
37998  
37999 C...Do colour joinings and parton showers.
38000       IF(IQL12.EQ.1) THEN 
38001         IJOIN(1)=IP1
38002         IJOIN(2)=IP2
38003         CALL PYJOIN(2,IJOIN)
38004       ENDIF
38005       IF(IQL12.EQ.1.OR.IRAD.EQ.1) THEN
38006         PM12S=(P(IP1,4)+P(IP2,4))**2-(P(IP1,1)+P(IP2,1))**2-
38007      &  (P(IP1,2)+P(IP2,2))**2-(P(IP1,3)+P(IP2,3))**2
38008         CALL PYSHOW(IP1,IP2,SQRT(MAX(0D0,PM12S)))
38009       ENDIF
38010       IF(IQL34.EQ.1) THEN
38011         IJOIN(1)=IP3
38012         IJOIN(2)=IP4
38013         CALL PYJOIN(2,IJOIN)
38014       ENDIF
38015       IF(IQL34.EQ.1.OR.IRAD.EQ.1) THEN        
38016         PM34S=(P(IP3,4)+P(IP4,4))**2-(P(IP3,1)+P(IP4,1))**2-
38017      &  (P(IP3,2)+P(IP4,2))**2-(P(IP3,3)+P(IP4,3))**2
38018         CALL PYSHOW(IP3,IP4,SQRT(MAX(0D0,PM34S)))
38019       ENDIF
38020  
38021 C...Do fragmentation and decays. Possibly except tau decay.
38022       IF(ITAU.EQ.0) THEN
38023         NTAU=0
38024         DO 110 I=1,N
38025         IF(IABS(K(I,2)).EQ.15.AND.K(I,1).EQ.1) THEN
38026           NTAU=NTAU+1
38027           INTAU(NTAU)=I
38028           K(I,1)=11
38029         ENDIF
38030   110   CONTINUE
38031       ENDIF       
38032       CALL PYEXEC
38033       IF(ITAU.EQ.0) THEN
38034         DO 120 I=1,NTAU
38035         K(INTAU(I),1)=1
38036   120   CONTINUE
38037       ENDIF       
38038  
38039 C...Call PYHEPC to convert output from PYJETS to HEPEVT common.
38040       IF(ICOM.EQ.0) THEN 
38041         MSTU(28)=0
38042         CALL PYHEPC(1)
38043       ENDIF
38044  
38045       END
38046   
38047 C*********************************************************************
38048  
38049 C...PY6FRM
38050 C...An interface from a six-fermion generator to include
38051 C...parton showers and hadronization.
38052  
38053       SUBROUTINE PY6FRM(P12,P13,P21,P23,P31,P32,PTOP,IRAD,ITAU,ICOM)
38054 
38055 C...Double precision and integer declarations.
38056       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38057       IMPLICIT INTEGER(I-N)
38058       INTEGER PYK,PYCHGE,PYCOMP
38059 C...Commonblocks.
38060       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38061       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
38062       SAVE /PYJETS/,/PYDAT1/
38063 C...Local arrays.
38064       DIMENSION IJOIN(2),INTAU(6),BETA(3),BETAO(3),BETAN(3)
38065  
38066 C...Call PYHEPC to convert input from HEPEVT to PYJETS common.
38067       IF(ICOM.EQ.0) THEN
38068         MSTU(28)=0
38069         CALL PYHEPC(2)
38070       ENDIF
38071  
38072 C...Loop through entries and pick up all final fermions/antifermions.
38073       I1=0
38074       I2=0
38075       I3=0
38076       I4=0
38077       I5=0
38078       I6=0
38079       DO 100 I=1,N
38080       IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
38081       KFA=IABS(K(I,2))
38082       IF((KFA.GE.1.AND.KFA.LE.6).OR.(KFA.GE.11.AND.KFA.LE.16)) THEN
38083         IF(K(I,2).GT.0) THEN
38084           IF(I1.EQ.0) THEN
38085             I1=I
38086           ELSEIF(I3.EQ.0) THEN
38087             I3=I
38088           ELSEIF(I5.EQ.0) THEN
38089             I5=I
38090           ELSE
38091             CALL PYERRM(16,'(PY6FRM:) more than three fermions')
38092           ENDIF
38093         ELSE
38094           IF(I2.EQ.0) THEN
38095             I2=I
38096           ELSEIF(I4.EQ.0) THEN
38097             I4=I
38098           ELSEIF(I6.EQ.0) THEN
38099             I6=I
38100           ELSE
38101             CALL PYERRM(16,'(PY6FRM:) more than three antifermions')
38102           ENDIF
38103         ENDIF
38104       ENDIF
38105   100 CONTINUE
38106  
38107 C...Check that event is arranged according to conventions.
38108       IF(I5.EQ.0.OR.I6.EQ.0) THEN
38109         CALL PYERRM(16,'(PY6FRM:) event contains too few fermions')
38110       ENDIF
38111       IF(I2.LT.I1.OR.I3.LT.I2.OR.I4.LT.I3.OR.I5.LT.I4.OR.I6.LT.I5) THEN
38112         CALL PYERRM(6,'(PY6FRM:) fermions arranged in wrong order')
38113       ENDIF
38114  
38115 C...Check which fermion pairs are quarks and which leptons.
38116       IF(IABS(K(I1,2)).LT.10.AND.IABS(K(I2,2)).LT.10) THEN
38117         IQL12=1
38118       ELSEIF(IABS(K(I1,2)).GT.10.AND.IABS(K(I2,2)).GT.10) THEN
38119         IQL12=2
38120       ELSE
38121         CALL PYERRM(16,'(PY6FRM:) first fermion pair inconsistent')
38122       ENDIF
38123       IF(IABS(K(I3,2)).LT.10.AND.IABS(K(I4,2)).LT.10) THEN
38124         IQL34=1
38125       ELSEIF(IABS(K(I3,2)).GT.10.AND.IABS(K(I4,2)).GT.10) THEN
38126         IQL34=2
38127       ELSE
38128         CALL PYERRM(16,'(PY6FRM:) second fermion pair inconsistent')
38129       ENDIF
38130       IF(IABS(K(I5,2)).LT.10.AND.IABS(K(I6,2)).LT.10) THEN
38131         IQL56=1
38132       ELSEIF(IABS(K(I5,2)).GT.10.AND.IABS(K(I6,2)).GT.10) THEN
38133         IQL56=2
38134       ELSE
38135         CALL PYERRM(16,'(PY6FRM:) third fermion pair inconsistent')
38136       ENDIF
38137  
38138 C...Decide whether to allow or not photon radiation in showers.
38139       MSTJ(41)=2
38140       IF(IRAD.EQ.0) MSTJ(41)=1
38141  
38142 C...Allow dipole pairings only among leptons and quarks separately.
38143       P12D=P12
38144       P13D=0D0
38145       IF(IQL34.EQ.IQL56) P13D=P13
38146       P21D=0D0
38147       IF(IQL12.EQ.IQL34) P21D=P21
38148       P23D=0D0
38149       IF(IQL12.EQ.IQL34.AND.IQL12.EQ.IQL56) P23D=P23
38150       P31D=0D0
38151       IF(IQL12.EQ.IQL34.AND.IQL12.EQ.IQL56) P31D=P31
38152       P32D=0D0
38153       IF(IQL12.EQ.IQL56) P32D=P32
38154  
38155 C...Decide whether t+tbar.
38156       ITOP=0
38157       IF(PYR(0).LT.PTOP) THEN
38158         ITOP=1
38159  
38160 C...If t+tbar: reconstruct t's.
38161         IT=N+1
38162         ITB=N+2
38163         DO 110 J=1,5
38164           K(IT,J)=0
38165           K(ITB,J)=0
38166           P(IT,J)=P(I1,J)+P(I3,J)+P(I4,J)
38167           P(ITB,J)=P(I2,J)+P(I5,J)+P(I6,J)
38168           V(IT,J)=0D0
38169           V(ITB,J)=0D0
38170   110   CONTINUE
38171         K(IT,1)=1
38172         K(ITB,1)=1
38173         K(IT,2)=6
38174         K(ITB,2)=-6
38175         P(IT,5)=SQRT(MAX(0D0,P(IT,4)**2-P(IT,1)**2-P(IT,2)**2-
38176      &  P(IT,3)**2))
38177         P(ITB,5)=SQRT(MAX(0D0,P(ITB,4)**2-P(ITB,1)**2-P(ITB,2)**2-
38178      &  P(ITB,3)**2))
38179         N=N+2
38180  
38181 C...If t+tbar: colour join t's and let them shower.
38182         IJOIN(1)=IT
38183         IJOIN(2)=ITB
38184         CALL PYJOIN(2,IJOIN)
38185         PMTTS=(P(IT,4)+P(ITB,4))**2-(P(IT,1)+P(ITB,1))**2-
38186      &  (P(IT,2)+P(ITB,2))**2-(P(IT,3)+P(ITB,3))**2
38187         CALL PYSHOW(IT,ITB,SQRT(MAX(0D0,PMTTS)))
38188  
38189 C...If t+tbar: pick up the t's after shower.
38190         ITNEW=IT
38191         ITBNEW=ITB
38192         DO 120 I=ITB+1,N
38193           IF(K(I,2).EQ.6) ITNEW=I
38194           IF(K(I,2).EQ.-6) ITBNEW=I
38195   120   CONTINUE
38196  
38197 C...If t+tbar: loop over two top systems.
38198         DO 200 IT1=1,2
38199           IF(IT1.EQ.1) THEN
38200             ITO=IT
38201             ITN=ITNEW
38202             IBO=I1
38203             IW1=I3
38204             IW2=I4
38205           ELSE
38206             ITO=ITB
38207             ITN=ITBNEW
38208             IBO=I2
38209             IW1=I5
38210             IW2=I6
38211           ENDIF
38212           IF(IABS(K(IBO,2)).NE.5) CALL PYERRM(6,
38213      &    '(PY6FRM:) not b in t decay')
38214  
38215 C...If t+tbar: find boost from original to new top frame.
38216           DO 130 J=1,3
38217             BETAO(J)=P(ITO,J)/P(ITO,4)
38218             BETAN(J)=P(ITN,J)/P(ITN,4)
38219   130     CONTINUE
38220  
38221 C...If t+tbar: boost copy of b by t shower and connect it in colour.
38222           N=N+1
38223           IB=N
38224           K(IB,1)=3
38225           K(IB,2)=K(IBO,2)
38226           K(IB,3)=ITN
38227           DO 140 J=1,5
38228             P(IB,J)=P(IBO,J)
38229             V(IB,J)=0D0
38230   140     CONTINUE
38231           CALL PYROBO(IB,IB,0D0,0D0,-BETAO(1),-BETAO(2),-BETAO(3))
38232           CALL PYROBO(IB,IB,0D0,0D0,BETAN(1),BETAN(2),BETAN(3))
38233           K(IB,4)=MSTU(5)*ITN
38234           K(IB,5)=MSTU(5)*ITN
38235           K(ITN,4)=K(ITN,4)+IB
38236           K(ITN,5)=K(ITN,5)+IB
38237           K(ITN,1)=K(ITN,1)+10
38238           K(IBO,1)=K(IBO,1)+10
38239  
38240 C...If t+tbar: construct W recoiling against b.
38241           N=N+1
38242           IW=N
38243           DO 150 J=1,5
38244             K(IW,J)=0
38245             V(IW,J)=0D0
38246   150     CONTINUE
38247           K(IW,1)=1
38248           KCHW=PYCHGE(K(IW1,2))+PYCHGE(K(IW2,2))
38249           IF(IABS(KCHW).EQ.3) THEN
38250             K(IW,2)=ISIGN(24,KCHW)
38251           ELSE
38252             CALL PYERRM(16,'(PY6FRM:) fermion pair inconsistent with W')
38253           ENDIF
38254           K(IW,3)=IW1
38255  
38256 C...If t+tbar: construct W momentum, including boost by t shower.
38257           DO 160 J=1,4
38258             P(IW,J)=P(IW1,J)+P(IW2,J)
38259   160     CONTINUE
38260           P(IW,5)=SQRT(MAX(0D0,P(IW,4)**2-P(IW,1)**2-P(IW,2)**2-
38261      &    P(IW,3)**2))
38262           CALL PYROBO(IW,IW,0D0,0D0,-BETAO(1),-BETAO(2),-BETAO(3))
38263           CALL PYROBO(IW,IW,0D0,0D0,BETAN(1),BETAN(2),BETAN(3))
38264  
38265 C...If t+tbar: boost b and W to top rest frame.
38266           DO 170 J=1,3
38267             BETA(J)=(P(IB,J)+P(IW,J))/(P(IB,4)+P(IW,4))
38268   170     CONTINUE
38269           CALL PYROBO(IB,IB,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38270           CALL PYROBO(IW,IW,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38271  
38272 C...If t+tbar: let b shower and pick up modified W.
38273           PMTS=(P(IB,4)+P(IW,4))**2-(P(IB,1)+P(IW,1))**2-
38274      &    (P(IB,2)+P(IW,2))**2-(P(IB,3)+P(IW,3))**2
38275           CALL PYSHOW(IB,IW,SQRT(MAX(0D0,PMTS)))
38276           DO 180 I=IW,N
38277             IF(IABS(K(I,2)).EQ.24) IWM=I
38278   180     CONTINUE
38279  
38280 C...If t+tbar: take copy of W decay products.
38281           DO 190 J=1,5
38282             K(N+1,J)=K(IW1,J)
38283             P(N+1,J)=P(IW1,J)
38284             V(N+1,J)=V(IW1,J)
38285             K(N+2,J)=K(IW2,J)
38286             P(N+2,J)=P(IW2,J)
38287             V(N+2,J)=V(IW2,J)
38288   190     CONTINUE
38289           K(IW1,1)=K(IW1,1)+10
38290           K(IW2,1)=K(IW2,1)+10
38291           K(IWM,1)=K(IWM,1)+10
38292           K(IWM,4)=N+1
38293           K(IWM,5)=N+2
38294           K(N+1,3)=IWM
38295           K(N+2,3)=IWM
38296           IF(IT1.EQ.1) THEN
38297             I3=N+1
38298             I4=N+2
38299           ELSE
38300             I5=N+1
38301             I6=N+2
38302           ENDIF
38303           N=N+2
38304  
38305 C...If t+tbar: boost W decay products, first by effects of t shower,
38306 C...then by those of b shower. b and its shower simple boost back.
38307           CALL PYROBO(N-1,N,0D0,0D0,-BETAO(1),-BETAO(2),-BETAO(3))
38308           CALL PYROBO(N-1,N,0D0,0D0,BETAN(1),BETAN(2),BETAN(3))
38309           CALL PYROBO(N-1,N,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38310           CALL PYROBO(N-1,N,0D0,0D0,-P(IW,1)/P(IW,4),
38311      &    -P(IW,2)/P(IW,4),-P(IW,3)/P(IW,4))
38312           CALL PYROBO(N-1,N,0D0,0D0,P(IWM,1)/P(IWM,4),
38313      &    P(IWM,2)/P(IWM,4),P(IWM,3)/P(IWM,4))
38314           CALL PYROBO(IB,IB,0D0,0D0,BETA(1),BETA(2),BETA(3))
38315           CALL PYROBO(IW,N,0D0,0D0,BETA(1),BETA(2),BETA(3))
38316   200   CONTINUE
38317       ENDIF
38318  
38319 C...Decide on dipole pairing.
38320       IP1=I1
38321       IP3=I3
38322       IP5=I5
38323       PRN=PYR(0)*(P12D+P13D+P21D+P23D+P31D+P32D)
38324       IF(ITOP.EQ.1.OR.PRN.LT.P12D) THEN
38325         IP2=I2
38326         IP4=I4
38327         IP6=I6
38328       ELSEIF(PRN.LT.P12D+P13D) THEN
38329         IP2=I2
38330         IP4=I6
38331         IP6=I4
38332       ELSEIF(PRN.LT.P12D+P13D+P21D) THEN
38333         IP2=I4
38334         IP4=I2
38335         IP6=I6
38336       ELSEIF(PRN.LT.P12D+P13D+P21D+P23D) THEN
38337         IP2=I4
38338         IP4=I6
38339         IP6=I2
38340       ELSEIF(PRN.LT.P12D+P13D+P21D+P23D+P31D) THEN
38341         IP2=I6
38342         IP4=I2
38343         IP6=I4
38344       ELSE
38345         IP2=I6
38346         IP4=I4
38347         IP6=I2
38348       ENDIF
38349  
38350 C...Do colour joinings and parton showers
38351 C...(except ones already made for t+tbar).
38352       IF(ITOP.EQ.0) THEN
38353         IF(IQL12.EQ.1) THEN
38354           IJOIN(1)=IP1
38355           IJOIN(2)=IP2
38356           CALL PYJOIN(2,IJOIN)
38357         ENDIF
38358         IF(IQL12.EQ.1.OR.IRAD.EQ.1) THEN
38359           PM12S=(P(IP1,4)+P(IP2,4))**2-(P(IP1,1)+P(IP2,1))**2-
38360      &    (P(IP1,2)+P(IP2,2))**2-(P(IP1,3)+P(IP2,3))**2
38361           CALL PYSHOW(IP1,IP2,SQRT(MAX(0D0,PM12S)))
38362         ENDIF
38363       ENDIF
38364       IF(IQL34.EQ.1) THEN
38365         IJOIN(1)=IP3
38366         IJOIN(2)=IP4
38367         CALL PYJOIN(2,IJOIN)
38368       ENDIF
38369       IF(IQL34.EQ.1.OR.IRAD.EQ.1) THEN
38370         PM34S=(P(IP3,4)+P(IP4,4))**2-(P(IP3,1)+P(IP4,1))**2-
38371      &  (P(IP3,2)+P(IP4,2))**2-(P(IP3,3)+P(IP4,3))**2
38372         CALL PYSHOW(IP3,IP4,SQRT(MAX(0D0,PM34S)))
38373       ENDIF
38374       IF(IQL56.EQ.1) THEN
38375         IJOIN(1)=IP5
38376         IJOIN(2)=IP6
38377         CALL PYJOIN(2,IJOIN)
38378       ENDIF
38379       IF(IQL56.EQ.1.OR.IRAD.EQ.1) THEN
38380         PM56S=(P(IP5,4)+P(IP6,4))**2-(P(IP5,1)+P(IP6,1))**2-
38381      &  (P(IP5,2)+P(IP6,2))**2-(P(IP5,3)+P(IP6,3))**2
38382         CALL PYSHOW(IP5,IP6,SQRT(MAX(0D0,PM56S)))
38383       ENDIF
38384  
38385 C...Do fragmentation and decays. Possibly except tau decay.
38386       IF(ITAU.EQ.0) THEN
38387         NTAU=0
38388         DO 210 I=1,N
38389         IF(IABS(K(I,2)).EQ.15.AND.K(I,1).EQ.1) THEN
38390           NTAU=NTAU+1
38391           INTAU(NTAU)=I
38392           K(I,1)=11
38393         ENDIF
38394   210   CONTINUE
38395       ENDIF
38396       CALL PYEXEC
38397       IF(ITAU.EQ.0) THEN
38398         DO 220 I=1,NTAU
38399         K(INTAU(I),1)=1
38400   220   CONTINUE
38401       ENDIF
38402  
38403 C...Call PYHEPC to convert output from PYJETS to HEPEVT common.
38404       IF(ICOM.EQ.0) THEN
38405         MSTU(28)=0
38406         CALL PYHEPC(1)
38407       ENDIF
38408  
38409       END
38410   
38411 C*********************************************************************
38412 
38413 C...PY4JET
38414 C...An interface from a four-parton generator to include
38415 C...parton showers and hadronization.
38416  
38417       SUBROUTINE PY4JET(PMAX,IRAD,ICOM)
38418 
38419 C...Double precision and integer declarations.
38420       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38421       IMPLICIT INTEGER(I-N)
38422       INTEGER PYK,PYCHGE,PYCOMP
38423 C...Commonblocks.
38424       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38425       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
38426       SAVE /PYJETS/,/PYDAT1/
38427 C...Local arrays.
38428       DIMENSION IJOIN(2),PTOT(4),BETA(3)
38429  
38430 C...Call PYHEPC to convert input from HEPEVT to PYJETS common.
38431       IF(ICOM.EQ.0) THEN 
38432         MSTU(28)=0
38433         CALL PYHEPC(2)
38434       ENDIF
38435  
38436 C...Loop through entries and pick up all final partons.
38437       I1=0
38438       I2=0
38439       I3=0
38440       I4=0
38441       DO 100 I=1,N
38442       IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
38443       KFA=IABS(K(I,2))
38444       IF((KFA.GE.1.AND.KFA.LE.6).OR.KFA.EQ.21) THEN
38445         IF(K(I,2).GT.0.AND.K(I,2).LE.6) THEN
38446           IF(I1.EQ.0) THEN
38447             I1=I
38448           ELSEIF(I3.EQ.0) THEN
38449             I3=I
38450           ELSE
38451             CALL PYERRM(16,'(PY4JET:) more than two quarks')
38452           ENDIF
38453         ELSEIF(K(I,2).LT.0) THEN
38454           IF(I2.EQ.0) THEN
38455             I2=I
38456           ELSEIF(I4.EQ.0) THEN
38457             I4=I
38458           ELSE
38459             CALL PYERRM(16,'(PY4JET:) more than two antiquarks')
38460           ENDIF
38461         ELSE
38462           IF(I3.EQ.0) THEN
38463             I3=I
38464           ELSEIF(I4.EQ.0) THEN
38465             I4=I
38466           ELSE
38467             CALL PYERRM(16,'(PY4JET:) more than two gluons')
38468           ENDIF
38469         ENDIF
38470       ENDIF
38471   100 CONTINUE
38472  
38473 C...Check that event is arranged according to conventions.
38474       IF(I1.EQ.0.OR.I2.EQ.0.OR.I3.EQ.0.OR.I4.EQ.0) THEN
38475         CALL PYERRM(16,'(PY4JET:) event contains too few partons')
38476       ENDIF
38477       IF(I2.LT.I1.OR.I3.LT.I2.OR.I4.LT.I3) THEN
38478         CALL PYERRM(6,'(PY4JET:) partons arranged in wrong order')
38479       ENDIF
38480  
38481 C...Check whether second pair are quarks or gluons.
38482       IF(IABS(K(I3,2)).LT.10.AND.IABS(K(I4,2)).LT.10) THEN
38483         IQG34=1
38484       ELSEIF(K(I3,2).EQ.21.AND.K(I4,2).EQ.21) THEN
38485         IQG34=2
38486       ELSE
38487         CALL PYERRM(16,'(PY4JET:) second parton pair inconsistent')
38488       ENDIF
38489 
38490 C...Boost partons to their cm frame.
38491       DO 110 J=1,4
38492         PTOT(J)=P(I1,J)+P(I2,J)+P(I3,J)+P(I4,J)
38493   110 CONTINUE
38494       ECM=SQRT(MAX(0D0,PTOT(4)**2-PTOT(1)**2-PTOT(2)**2-PTOT(3)**2))
38495       DO 120 J=1,3
38496         BETA(J)=PTOT(J)/PTOT(4)
38497   120 CONTINUE
38498       CALL PYROBO(I1,I1,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38499       CALL PYROBO(I2,I2,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38500       CALL PYROBO(I3,I3,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38501       CALL PYROBO(I4,I4,0D0,0D0,-BETA(1),-BETA(2),-BETA(3))
38502       NSAV=N
38503  
38504 C...Decide and set up shower history for q qbar q' qbar' events.
38505       IF(IQG34.EQ.1) THEN
38506         W1=PY4JTW(0,I1,I3,I4)        
38507         W2=PY4JTW(0,I2,I3,I4)
38508         IF(W1.GT.PYR(0)*(W1+W2)) THEN
38509           CALL PY4JTS(0,I1,I3,I4,I2,QMAX)
38510         ELSE
38511           CALL PY4JTS(0,I2,I3,I4,I1,QMAX)
38512         ENDIF
38513 
38514 C...Decide and set up shower history for q qbar g g events.
38515       ELSE
38516         W1=PY4JTW(I1,I3,I2,I4)        
38517         W2=PY4JTW(I1,I4,I2,I3)
38518         W3=PY4JTW(0,I3,I1,I4)        
38519         W4=PY4JTW(0,I4,I1,I3)        
38520         W5=PY4JTW(0,I3,I2,I4)        
38521         W6=PY4JTW(0,I4,I2,I3)        
38522         W7=PY4JTW(0,I1,I3,I4)        
38523         W8=PY4JTW(0,I2,I3,I4)
38524         WR=(W1+W2+W3+W4+W5+W6+W7+W8)*PYR(0)
38525         IF(W1.GT.WR) THEN
38526           CALL PY4JTS(I1,I3,I2,I4,0,QMAX)
38527         ELSEIF(W1+W2.GT.WR) THEN
38528           CALL PY4JTS(I1,I4,I2,I3,0,QMAX) 
38529         ELSEIF(W1+W2+W3.GT.WR) THEN
38530           CALL PY4JTS(0,I3,I1,I4,I2,QMAX) 
38531         ELSEIF(W1+W2+W3+W4.GT.WR) THEN
38532           CALL PY4JTS(0,I4,I1,I3,I2,QMAX) 
38533         ELSEIF(W1+W2+W3+W4+W5.GT.WR) THEN
38534           CALL PY4JTS(0,I3,I2,I4,I1,QMAX) 
38535         ELSEIF(W1+W2+W3+W4+W5+W6.GT.WR) THEN
38536           CALL PY4JTS(0,I4,I2,I3,I1,QMAX) 
38537         ELSEIF(W1+W2+W3+W4+W5+W6+W7.GT.WR) THEN
38538           CALL PY4JTS(0,I1,I3,I4,I2,QMAX) 
38539         ELSE
38540           CALL PY4JTS(0,I2,I3,I4,I1,QMAX)
38541         ENDIF
38542       ENDIF 
38543 
38544 C...Boost back original partons and mark them as deleted.
38545       CALL PYROBO(I1,I1,0D0,0D0,BETA(1),BETA(2),BETA(3))
38546       CALL PYROBO(I2,I2,0D0,0D0,BETA(1),BETA(2),BETA(3))
38547       CALL PYROBO(I3,I3,0D0,0D0,BETA(1),BETA(2),BETA(3))
38548       CALL PYROBO(I4,I4,0D0,0D0,BETA(1),BETA(2),BETA(3))
38549       K(I1,1)=K(I1,1)+10 
38550       K(I2,1)=K(I2,1)+10 
38551       K(I3,1)=K(I3,1)+10 
38552       K(I4,1)=K(I4,1)+10 
38553 
38554 C...Rotate shower initiating partons to be along z axis.
38555       PHI=PYANGL(P(NSAV+1,1),P(NSAV+1,2)) 
38556       CALL PYROBO(NSAV+1,NSAV+6,0D0,-PHI,0D0,0D0,0D0)
38557       THE=PYANGL(P(NSAV+1,3),P(NSAV+1,1)) 
38558       CALL PYROBO(NSAV+1,NSAV+6,-THE,0D0,0D0,0D0,0D0)
38559 
38560 C...Set up copy of shower initiating partons as on mass shell.
38561       DO 140 I=N+1,N+2
38562         DO 130 J=1,5
38563           K(I,J)=0
38564           P(I,J)=0D0
38565           V(I,J)=V(I1,J) 
38566   130   CONTINUE 
38567         K(I,1)=1
38568         K(I,2)=K(I-6,2)  
38569   140 CONTINUE   
38570       IF(K(NSAV+1,2).EQ.K(I1,2)) THEN
38571         K(N+1,3)=I1
38572         P(N+1,5)=P(I1,5)
38573         K(N+2,3)=I2
38574         P(N+2,5)=P(I2,5)
38575       ELSE
38576         K(N+1,3)=I2
38577         P(N+1,5)=P(I2,5)
38578         K(N+2,3)=I1
38579         P(N+2,5)=P(I1,5)
38580       ENDIF
38581       PABS=SQRT(MAX(0D0,(ECM**2-P(N+1,5)**2-P(N+2,5)**2)**2-
38582      &(2D0*P(N+1,5)*P(N+2,5))**2))/(2D0*ECM)
38583       P(N+1,3)=PABS
38584       P(N+1,4)=SQRT(PABS**2+P(N+1,5)**2)
38585       P(N+2,3)=-PABS
38586       P(N+2,4)=SQRT(PABS**2+P(N+2,5)**2)
38587       N=N+2
38588   
38589 C...Decide whether to allow or not photon radiation in showers.
38590 C...Connect up colours.
38591       MSTJ(41)=2
38592       IF(IRAD.EQ.0) MSTJ(41)=1
38593       IJOIN(1)=N-1
38594       IJOIN(2)=N
38595       CALL PYJOIN(2,IJOIN)
38596 
38597 C...Decide on maximum virtuality and do parton shower.
38598       IF(PMAX.LT.PARJ(82)) THEN
38599         PQMAX=QMAX
38600       ELSE
38601         PQMAX=PMAX
38602       ENDIF  
38603       CALL PYSHOW(NSAV+1,-8,PQMAX)
38604 
38605 C...Rotate and boost back system.
38606       CALL PYROBO(NSAV+1,N,THE,PHI,BETA(1),BETA(2),BETA(3))
38607  
38608 C...Do fragmentation and decays. 
38609       CALL PYEXEC
38610  
38611 C...Call PYHEPC to convert output from PYJETS to HEPEVT common.
38612       IF(ICOM.EQ.0) THEN 
38613         MSTU(28)=0
38614         CALL PYHEPC(1)
38615       ENDIF
38616  
38617       RETURN
38618       END
38619  
38620 C*********************************************************************
38621  
38622 C...PY4JTW
38623 C...Auxiliary to PY4JET, to evaluate weight of configuration.
38624  
38625       FUNCTION PY4JTW(IA1,IA2,IA3,IA4)
38626 
38627 C...Double precision and integer declarations.
38628       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38629       IMPLICIT INTEGER(I-N)
38630       INTEGER PYK,PYCHGE,PYCOMP
38631 C...Commonblocks.
38632       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38633       SAVE /PYJETS/
38634 
38635 C...First case: when both original partons radiate.
38636 C...IA1 /= 0: N+1 -> IA1 + IA2, N+2 -> IA3 + IA4.
38637       IF(IA1.NE.0) THEN
38638         DO 100 J=1,4
38639           P(N+1,J)=P(IA1,J)+P(IA2,J)
38640           P(N+2,J)=P(IA3,J)+P(IA4,J)
38641   100   CONTINUE   
38642         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38643      &  P(N+1,3)**2))
38644         P(N+2,5)=SQRT(MAX(0D0,P(N+2,4)**2-P(N+2,1)**2-P(N+2,2)**2-
38645      &  P(N+2,3)**2))
38646         Z1=P(IA1,4)/P(N+1,4) 
38647         WT1=(4D0/3D0)*((1D0+Z1**2)/(1D0-Z1))/(P(N+1,5)**2-P(IA1,5)**2)
38648         Z2=P(IA3,4)/P(N+2,4)
38649         WT2=(4D0/3D0)*((1D0+Z2**2)/(1D0-Z2))/(P(N+2,5)**2-P(IA3,5)**2)
38650 
38651 C...Second case: when one original parton radiates to three.
38652 C...IA1  = 0: N+1 -> IA2 + N+2, N+2 -> IA3 + IA4.
38653       ELSE
38654         DO 110 J=1,4
38655           P(N+2,J)=P(IA3,J)+P(IA4,J)
38656           P(N+1,J)=P(N+2,J)+P(IA2,J)
38657   110   CONTINUE   
38658         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38659      &  P(N+1,3)**2))
38660         P(N+2,5)=SQRT(MAX(0D0,P(N+2,4)**2-P(N+2,1)**2-P(N+2,2)**2-
38661      &  P(N+2,3)**2))
38662         IF(K(IA2,2).EQ.21) THEN
38663           Z1=P(N+2,4)/P(N+1,4)
38664           WT1=(4D0/3D0)*((1D0+Z1**2)/(1D0-Z1))/(P(N+1,5)**2-
38665      &    P(IA3,5)**2)
38666         ELSE
38667           Z1=P(IA2,4)/P(N+1,4)
38668           WT1=(4D0/3D0)*((1D0+Z1**2)/(1D0-Z1))/(P(N+1,5)**2-
38669      &    P(IA2,5)**2)
38670         ENDIF           
38671         Z2=P(IA3,4)/P(N+2,4)
38672         IF(K(IA2,2).EQ.21) THEN
38673           WT2=(4D0/3D0)*((1D0+Z2**2)/(1D0-Z2))/(P(N+2,5)**2-
38674      &    P(IA3,5)**2)
38675         ELSEIF(K(IA3,2).EQ.21) THEN
38676           WT2=3D0*((1D0-Z2*(1D0-Z2))**2/(Z2*(1D0-Z2)))/P(N+2,5)**2
38677         ELSE
38678           WT2=0.5D0*(Z2**2+(1D0-Z2)**2)
38679         ENDIF 
38680       ENDIF 
38681  
38682 C...Total weight.
38683       PY4JTW=WT1*WT2
38684 
38685       RETURN
38686       END 
38687  
38688 C*********************************************************************
38689  
38690 C...PY4JTS
38691 C...Auxiliary to PY4JET, to set up chosen configuration.
38692  
38693       SUBROUTINE PY4JTS(IA1,IA2,IA3,IA4,IA5,QMAX)
38694 
38695 C...Double precision and integer declarations.
38696       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38697       IMPLICIT INTEGER(I-N)
38698       INTEGER PYK,PYCHGE,PYCOMP
38699 C...Commonblocks.
38700       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38701       SAVE /PYJETS/
38702 
38703 C...Reset info.
38704       DO 110 I=N+1,N+6
38705         DO 100 J=1,5
38706           K(I,J)=0
38707           V(I,J)=V(IA2,J) 
38708   100   CONTINUE
38709         K(I,1)=16   
38710   110 CONTINUE   
38711           
38712 C...First case: when both original partons radiate.
38713 C...N+1 -> (IA1=N+3) + (IA2=N+4), N+2 -> (IA3=N+5) + (IA4=N+6).
38714       IF(IA1.NE.0) THEN
38715 
38716 C...Set up flavour and history pointers for new partons.
38717         K(N+1,2)=K(IA1,2)
38718         K(N+2,2)=K(IA3,2)
38719         K(N+3,2)=K(IA1,2)
38720         K(N+4,2)=K(IA2,2)
38721         K(N+5,2)=K(IA3,2)
38722         K(N+6,2)=K(IA4,2)
38723         K(N+1,3)=IA1
38724         K(N+1,4)=N+3
38725         K(N+1,5)=N+4
38726         K(N+2,3)=IA3
38727         K(N+2,4)=N+5
38728         K(N+2,5)=N+6
38729         K(N+3,3)=N+1
38730         K(N+4,3)=N+1
38731         K(N+5,3)=N+2
38732         K(N+6,3)=N+2
38733 
38734 C...Set up momenta for new partons.
38735         DO 120 J=1,5
38736           P(N+1,J)=P(IA1,J)+P(IA2,J)
38737           P(N+2,J)=P(IA3,J)+P(IA4,J)
38738           P(N+3,J)=P(IA1,J)
38739           P(N+4,J)=P(IA2,J) 
38740           P(N+5,J)=P(IA3,J)
38741           P(N+6,J)=P(IA4,J) 
38742   120   CONTINUE   
38743         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38744      &  P(N+1,3)**2))
38745         P(N+2,5)=SQRT(MAX(0D0,P(N+2,4)**2-P(N+2,1)**2-P(N+2,2)**2-
38746      &  P(N+2,3)**2))
38747         QMAX=MIN(P(N+1,5),P(N+2,5))
38748           
38749 C...Second case: q radiates twice.
38750 C...N+1 -> (IA2=N+4) + N+3, N+3 -> (IA3=N+5) + (IA4=N+6),
38751 C...IA5=N+2 does not radiate.
38752       ELSEIF(K(IA2,2).EQ.21) THEN
38753 
38754 C...Set up flavour and history pointers for new partons.
38755         K(N+1,2)=K(IA3,2)
38756         K(N+2,2)=K(IA5,2)
38757         K(N+3,2)=K(IA3,2)
38758         K(N+4,2)=K(IA2,2)
38759         K(N+5,2)=K(IA3,2)
38760         K(N+6,2)=K(IA4,2)
38761         K(N+1,3)=IA3
38762         K(N+1,4)=N+3
38763         K(N+1,5)=N+4
38764         K(N+2,3)=IA5
38765         K(N+3,3)=N+1
38766         K(N+3,4)=N+5
38767         K(N+3,5)=N+6
38768         K(N+4,3)=N+1
38769         K(N+5,3)=N+3
38770         K(N+6,3)=N+3
38771 
38772 C...Set up momenta for new partons.
38773         DO 130 J=1,5
38774           P(N+1,J)=P(IA2,J)+P(IA3,J)+P(IA4,J)
38775           P(N+2,J)=P(IA5,J)
38776           P(N+3,J)=P(IA3,J)+P(IA4,J)
38777           P(N+4,J)=P(IA2,J) 
38778           P(N+5,J)=P(IA3,J)
38779           P(N+6,J)=P(IA4,J) 
38780   130   CONTINUE   
38781         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38782      &  P(N+1,3)**2))
38783         P(N+3,5)=SQRT(MAX(0D0,P(N+3,4)**2-P(N+3,1)**2-P(N+3,2)**2-
38784      &  P(N+3,3)**2))
38785         QMAX=P(N+3,5)
38786           
38787 C...Third case: q radiates g, g branches.
38788 C...N+1 -> (IA2=N+3) + N+4, N+4 -> (IA3=N+5) + (IA4=N+6),
38789 C...IA5=N+2 does not radiate.
38790       ELSE
38791 
38792 C...Set up flavour and history pointers for new partons.
38793         K(N+1,2)=K(IA2,2) 
38794         K(N+2,2)=K(IA5,2)
38795         K(N+3,2)=K(IA2,2) 
38796         K(N+4,2)=21 
38797         K(N+5,2)=K(IA3,2)
38798         K(N+6,2)=K(IA4,2)
38799         K(N+1,3)=IA2 
38800         K(N+1,4)=N+3
38801         K(N+1,5)=N+4
38802         K(N+2,3)=IA5
38803         K(N+3,3)=N+1
38804         K(N+4,3)=N+1 
38805         K(N+4,4)=N+5
38806         K(N+4,5)=N+6
38807         K(N+5,3)=N+4  
38808         K(N+6,3)=N+4  
38809 
38810 C...Set up momenta for new partons.
38811         DO 140 J=1,5
38812           P(N+1,J)=P(IA2,J)+P(IA3,J)+P(IA4,J)
38813           P(N+2,J)=P(IA5,J)
38814           P(N+3,J)=P(IA2,J) 
38815           P(N+4,J)=P(IA3,J)+P(IA4,J) 
38816           P(N+5,J)=P(IA3,J)
38817           P(N+6,J)=P(IA4,J) 
38818   140   CONTINUE  
38819         P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
38820      &  P(N+1,3)**2))
38821         P(N+4,5)=SQRT(MAX(0D0,P(N+4,4)**2-P(N+4,1)**2-P(N+4,2)**2-
38822      &  P(N+4,3)**2))
38823         QMAX=P(N+4,5)
38824 
38825       ENDIF 
38826       N=N+6
38827 
38828       RETURN
38829       END
38830   
38831 C*********************************************************************
38832  
38833 C...PYJOIN
38834 C...Connects a sequence of partons with colour flow indices,
38835 C...as required for subsequent shower evolution (or other operations).
38836  
38837       SUBROUTINE PYJOIN(NJOIN,IJOIN)
38838  
38839 C...Double precision and integer declarations.
38840       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38841       IMPLICIT INTEGER(I-N)
38842       INTEGER PYK,PYCHGE,PYCOMP
38843 C...Commonblocks.
38844       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38845       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
38846       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
38847       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
38848 C...Local array.
38849       DIMENSION IJOIN(*)
38850  
38851 C...Check that partons are of right types to be connected.
38852       IF(NJOIN.LT.2) GOTO 120
38853       KQSUM=0
38854       DO 100 IJN=1,NJOIN
38855         I=IJOIN(IJN)
38856         IF(I.LE.0.OR.I.GT.N) GOTO 120
38857         IF(K(I,1).LT.1.OR.K(I,1).GT.3) GOTO 120
38858         KC=PYCOMP(K(I,2))
38859         IF(KC.EQ.0) GOTO 120
38860         KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
38861         IF(KQ.EQ.0) GOTO 120
38862         IF(IJN.NE.1.AND.IJN.NE.NJOIN.AND.KQ.NE.2) GOTO 120
38863         IF(KQ.NE.2) KQSUM=KQSUM+KQ
38864         IF(IJN.EQ.1) KQS=KQ
38865   100 CONTINUE
38866       IF(KQSUM.NE.0) GOTO 120
38867  
38868 C...Connect the partons sequentially (closing for gluon loop).
38869       KCS=(9-KQS)/2
38870       IF(KQS.EQ.2) KCS=INT(4.5D0+PYR(0))
38871       DO 110 IJN=1,NJOIN
38872         I=IJOIN(IJN)
38873         K(I,1)=3
38874         IF(IJN.NE.1) IP=IJOIN(IJN-1)
38875         IF(IJN.EQ.1) IP=IJOIN(NJOIN)
38876         IF(IJN.NE.NJOIN) IN=IJOIN(IJN+1)
38877         IF(IJN.EQ.NJOIN) IN=IJOIN(1)
38878         K(I,KCS)=MSTU(5)*IN
38879         K(I,9-KCS)=MSTU(5)*IP
38880         IF(IJN.EQ.1.AND.KQS.NE.2) K(I,9-KCS)=0
38881         IF(IJN.EQ.NJOIN.AND.KQS.NE.2) K(I,KCS)=0
38882   110 CONTINUE
38883  
38884 C...Error exit: no action taken.
38885       RETURN
38886   120 CALL PYERRM(12,
38887      &'(PYJOIN:) given entries can not be joined by one string')
38888  
38889       RETURN
38890       END
38891  
38892 C*********************************************************************
38893  
38894 C...PYGIVE
38895 C...Sets values of commonblock variables.
38896  
38897       SUBROUTINE PYGIVE(CHIN)
38898  
38899 C...Double precision and integer declarations.
38900       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
38901       IMPLICIT INTEGER(I-N)
38902       INTEGER PYK,PYCHGE,PYCOMP
38903 C...Commonblocks.
38904       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
38905       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
38906       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
38907       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
38908       COMMON/PYDAT4/CHAF(500,2)
38909       CHARACTER CHAF*16
38910       COMMON/PYDATR/MRPY(6),RRPY(100)
38911       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
38912       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
38913       COMMON/PYINT1/MINT(400),VINT(400)
38914       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
38915       COMMON/PYINT3/XSFX(2,-40:40),ISIG(1000,3),SIGH(1000)
38916       COMMON/PYINT4/MWID(500),WIDS(500,5)
38917       COMMON/PYINT5/NGENPD,NGEN(0:500,3),XSEC(0:500,3)
38918       COMMON/PYINT6/PROC(0:500)
38919       CHARACTER PROC*28
38920       COMMON/PYINT7/SIGT(0:6,0:6,0:5)
38921       COMMON/PYINT8/XPVMD(-6:6),XPANL(-6:6),XPANH(-6:6),XPBEH(-6:6),
38922      &XPDIR(-6:6)
38923       COMMON/PYMSSM/IMSS(0:99),RMSS(0:99)
38924       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYDATR/,
38925      &/PYSUBS/,/PYPARS/,/PYINT1/,/PYINT2/,/PYINT3/,/PYINT4/,
38926      &/PYINT5/,/PYINT6/,/PYINT7/,/PYINT8/,/PYMSSM/
38927 C...Local arrays and character variables.
38928       CHARACTER CHIN*(*),CHFIX*104,CHBIT*104,CHOLD*8,CHNEW*8,CHOLD2*28,
38929      &CHNEW2*28,CHNAM*6,CHVAR(49)*6,CHALP(2)*26,CHIND*8,CHINI*10,
38930      &CHINR*16
38931       DIMENSION MSVAR(49,8)
38932  
38933 C...For each variable to be translated give: name,
38934 C...integer/real/character, no. of indices, lower&upper index bounds.
38935       DATA CHVAR/'N','K','P','V','MSTU','PARU','MSTJ','PARJ','KCHG',
38936      &'PMAS','PARF','VCKM','MDCY','MDME','BRAT','KFDP','CHAF','MRPY',
38937      &'RRPY','MSEL','MSUB','KFIN','CKIN','MSTP','PARP','MSTI','PARI',
38938      &'MINT','VINT','ISET','KFPR','COEF','ICOL','XSFX','ISIG','SIGH',
38939      &'MWID','WIDS','NGEN','XSEC','PROC','SIGT','XPVMD','XPANL',
38940      &'XPANH','XPBEH','XPDIR','IMSS','RMSS'/
38941       DATA ((MSVAR(I,J),J=1,8),I=1,49)/ 1,7*0,  1,2,1,4000,1,5,2*0,
38942      &2,2,1,4000,1,5,2*0,  2,2,1,4000,1,5,2*0,  1,1,1,200,4*0,
38943      &2,1,1,200,4*0,  1,1,1,200,4*0,  2,1,1,200,4*0,
38944      &1,2,1,500,1,4,2*0,  2,2,1,500,1,4,2*0,  2,1,1,2000,4*0,
38945      &2,2,1,4,1,4,2*0,  1,2,1,500,1,3,2*0,  1,2,1,4000,1,2,2*0,
38946      &2,1,1,4000,4*0,  1,2,1,4000,1,5,2*0,  3,2,1,500,1,2,2*0,
38947      &1,1,1,6,4*0,  2,1,1,100,4*0,
38948      &1,7*0,  1,1,1,500,4*0,  1,2,1,2,-40,40,2*0,  2,1,1,200,4*0,
38949      &1,1,1,200,4*0,  2,1,1,200,4*0,  1,1,1,200,4*0,  2,1,1,200,4*0,
38950      &1,1,1,400,4*0,  2,1,1,400,4*0,  1,1,1,500,4*0,
38951      &1,2,1,500,1,2,2*0,  2,2,1,500,1,20,2*0,  1,3,1,40,1,4,1,2,
38952      &2,2,1,2,-40,40,2*0,  1,2,1,1000,1,3,2*0,  2,1,1,1000,4*0,
38953      &1,1,1,500,4*0,   2,2,1,500,1,5,2*0,   1,2,0,500,1,3,2*0,
38954      &2,2,0,500,1,3,2*0,   4,1,0,500,4*0,   2,3,0,6,0,6,0,5,
38955      &2,1,-6,6,4*0,     2,1,-6,6,4*0,    2,1,-6,6,4*0,
38956      &2,1,-6,6,4*0,  2,1,-6,6,4*0,  1,1,0,99,4*0,  2,1,0,99,4*0/
38957       DATA CHALP/'abcdefghijklmnopqrstuvwxyz',
38958      &'ABCDEFGHIJKLMNOPQRSTUVWXYZ'/
38959  
38960 C...Length of character variable. Subdivide it into instructions.
38961       IF(MSTU(12).GE.1) CALL PYLIST(0)
38962       CHBIT=CHIN//' '
38963       LBIT=101
38964   100 LBIT=LBIT-1
38965       IF(CHBIT(LBIT:LBIT).EQ.' ') GOTO 100
38966       LTOT=0
38967       DO 110 LCOM=1,LBIT
38968         IF(CHBIT(LCOM:LCOM).EQ.' ') GOTO 110
38969         LTOT=LTOT+1
38970         CHFIX(LTOT:LTOT)=CHBIT(LCOM:LCOM)
38971   110 CONTINUE
38972       LLOW=0
38973   120 LHIG=LLOW+1
38974   130 LHIG=LHIG+1
38975       IF(LHIG.LE.LTOT.AND.CHFIX(LHIG:LHIG).NE.';') GOTO 130
38976       LBIT=LHIG-LLOW-1
38977       CHBIT(1:LBIT)=CHFIX(LLOW+1:LHIG-1)
38978  
38979 C...Identify commonblock variable.
38980       LNAM=1
38981   140 LNAM=LNAM+1
38982       IF(CHBIT(LNAM:LNAM).NE.'('.AND.CHBIT(LNAM:LNAM).NE.'='.AND.
38983      &LNAM.LE.6) GOTO 140
38984       CHNAM=CHBIT(1:LNAM-1)//' '
38985       DO 160 LCOM=1,LNAM-1
38986         DO 150 LALP=1,26
38987           IF(CHNAM(LCOM:LCOM).EQ.CHALP(1)(LALP:LALP)) CHNAM(LCOM:LCOM)=
38988      &    CHALP(2)(LALP:LALP)
38989   150   CONTINUE
38990   160 CONTINUE
38991       IVAR=0
38992       DO 170 IV=1,49
38993         IF(CHNAM.EQ.CHVAR(IV)) IVAR=IV
38994   170 CONTINUE
38995       IF(IVAR.EQ.0) THEN
38996         CALL PYERRM(18,'(PYGIVE:) do not recognize variable '//CHNAM)
38997         LLOW=LHIG
38998         IF(LLOW.LT.LTOT) GOTO 120
38999         RETURN
39000       ENDIF
39001  
39002 C...Identify any indices.
39003       I1=0
39004       I2=0
39005       I3=0
39006       NINDX=0
39007       IF(CHBIT(LNAM:LNAM).EQ.'(') THEN
39008         LIND=LNAM
39009   180   LIND=LIND+1
39010         IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 180
39011         CHIND=' '
39012         IF((CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.'c')
39013      &  .AND.(IVAR.EQ.9.OR.IVAR.EQ.10.OR.IVAR.EQ.13.OR.IVAR.EQ.17))
39014      &  THEN
39015           CHIND(LNAM-LIND+11:8)=CHBIT(LNAM+2:LIND-1)
39016           READ(CHIND,'(I8)') KF
39017           I1=PYCOMP(KF)
39018         ELSEIF(CHBIT(LNAM+1:LNAM+1).EQ.'C'.OR.CHBIT(LNAM+1:LNAM+1).EQ.
39019      &    'c') THEN
39020           CALL PYERRM(18,'(PYGIVE:) not allowed to use C index for '//
39021      &    CHNAM)
39022           LLOW=LHIG
39023           IF(LLOW.LT.LTOT) GOTO 120
39024           RETURN
39025         ELSE
39026           CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
39027           READ(CHIND,'(I8)') I1
39028         ENDIF
39029         LNAM=LIND
39030         IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
39031         NINDX=1
39032       ENDIF
39033       IF(CHBIT(LNAM:LNAM).EQ.',') THEN
39034         LIND=LNAM
39035   190   LIND=LIND+1
39036         IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 190
39037         CHIND=' '
39038         CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
39039         READ(CHIND,'(I8)') I2
39040         LNAM=LIND
39041         IF(CHBIT(LNAM:LNAM).EQ.')') LNAM=LNAM+1
39042         NINDX=2
39043       ENDIF
39044       IF(CHBIT(LNAM:LNAM).EQ.',') THEN
39045         LIND=LNAM
39046   200   LIND=LIND+1
39047         IF(CHBIT(LIND:LIND).NE.')'.AND.CHBIT(LIND:LIND).NE.',') GOTO 200
39048         CHIND=' '
39049         CHIND(LNAM-LIND+10:8)=CHBIT(LNAM+1:LIND-1)
39050         READ(CHIND,'(I8)') I3
39051         LNAM=LIND+1
39052         NINDX=3
39053       ENDIF
39054  
39055 C...Check that indices allowed.
39056       IERR=0
39057       IF(NINDX.NE.MSVAR(IVAR,2)) IERR=1
39058       IF(NINDX.GE.1.AND.(I1.LT.MSVAR(IVAR,3).OR.I1.GT.MSVAR(IVAR,4)))
39059      &IERR=2
39060       IF(NINDX.GE.2.AND.(I2.LT.MSVAR(IVAR,5).OR.I2.GT.MSVAR(IVAR,6)))
39061      &IERR=3
39062       IF(NINDX.EQ.3.AND.(I3.LT.MSVAR(IVAR,7).OR.I3.GT.MSVAR(IVAR,8)))
39063      &IERR=4
39064       IF(CHBIT(LNAM:LNAM).NE.'=') IERR=5
39065       IF(IERR.GE.1) THEN
39066         CALL PYERRM(18,'(PYGIVE:) unallowed indices for '//
39067      &  CHBIT(1:LNAM-1))
39068         LLOW=LHIG
39069         IF(LLOW.LT.LTOT) GOTO 120
39070         RETURN
39071       ENDIF
39072  
39073 C...Save old value of variable.
39074       IF(IVAR.EQ.1) THEN
39075         IOLD=N
39076       ELSEIF(IVAR.EQ.2) THEN
39077         IOLD=K(I1,I2)
39078       ELSEIF(IVAR.EQ.3) THEN
39079         ROLD=P(I1,I2)
39080       ELSEIF(IVAR.EQ.4) THEN
39081         ROLD=V(I1,I2)
39082       ELSEIF(IVAR.EQ.5) THEN
39083         IOLD=MSTU(I1)
39084       ELSEIF(IVAR.EQ.6) THEN
39085         ROLD=PARU(I1)
39086       ELSEIF(IVAR.EQ.7) THEN
39087         IOLD=MSTJ(I1)
39088       ELSEIF(IVAR.EQ.8) THEN
39089         ROLD=PARJ(I1)
39090       ELSEIF(IVAR.EQ.9) THEN
39091         IOLD=KCHG(I1,I2)
39092       ELSEIF(IVAR.EQ.10) THEN
39093         ROLD=PMAS(I1,I2)
39094       ELSEIF(IVAR.EQ.11) THEN
39095         ROLD=PARF(I1)
39096       ELSEIF(IVAR.EQ.12) THEN
39097         ROLD=VCKM(I1,I2)
39098       ELSEIF(IVAR.EQ.13) THEN
39099         IOLD=MDCY(I1,I2)
39100       ELSEIF(IVAR.EQ.14) THEN
39101         IOLD=MDME(I1,I2)
39102       ELSEIF(IVAR.EQ.15) THEN
39103         ROLD=BRAT(I1)
39104       ELSEIF(IVAR.EQ.16) THEN
39105         IOLD=KFDP(I1,I2)
39106       ELSEIF(IVAR.EQ.17) THEN
39107         CHOLD=CHAF(I1,I2)
39108       ELSEIF(IVAR.EQ.18) THEN
39109         IOLD=MRPY(I1)
39110       ELSEIF(IVAR.EQ.19) THEN
39111         ROLD=RRPY(I1)
39112       ELSEIF(IVAR.EQ.20) THEN
39113         IOLD=MSEL
39114       ELSEIF(IVAR.EQ.21) THEN
39115         IOLD=MSUB(I1)
39116       ELSEIF(IVAR.EQ.22) THEN
39117         IOLD=KFIN(I1,I2)
39118       ELSEIF(IVAR.EQ.23) THEN
39119         ROLD=CKIN(I1)
39120       ELSEIF(IVAR.EQ.24) THEN
39121         IOLD=MSTP(I1)
39122       ELSEIF(IVAR.EQ.25) THEN
39123         ROLD=PARP(I1)
39124       ELSEIF(IVAR.EQ.26) THEN
39125         IOLD=MSTI(I1)
39126       ELSEIF(IVAR.EQ.27) THEN
39127         ROLD=PARI(I1)
39128       ELSEIF(IVAR.EQ.28) THEN
39129         IOLD=MINT(I1)
39130       ELSEIF(IVAR.EQ.29) THEN
39131         ROLD=VINT(I1)
39132       ELSEIF(IVAR.EQ.30) THEN
39133         IOLD=ISET(I1)
39134       ELSEIF(IVAR.EQ.31) THEN
39135         IOLD=KFPR(I1,I2)
39136       ELSEIF(IVAR.EQ.32) THEN
39137         ROLD=COEF(I1,I2)
39138       ELSEIF(IVAR.EQ.33) THEN
39139         IOLD=ICOL(I1,I2,I3)
39140       ELSEIF(IVAR.EQ.34) THEN
39141         ROLD=XSFX(I1,I2)
39142       ELSEIF(IVAR.EQ.35) THEN
39143         IOLD=ISIG(I1,I2)
39144       ELSEIF(IVAR.EQ.36) THEN
39145         ROLD=SIGH(I1)
39146       ELSEIF(IVAR.EQ.37) THEN
39147         IOLD=MWID(I1)
39148       ELSEIF(IVAR.EQ.38) THEN
39149         ROLD=WIDS(I1,I2)
39150       ELSEIF(IVAR.EQ.39) THEN
39151         IOLD=NGEN(I1,I2)
39152       ELSEIF(IVAR.EQ.40) THEN
39153         ROLD=XSEC(I1,I2)
39154       ELSEIF(IVAR.EQ.41) THEN
39155         CHOLD2=PROC(I1)
39156       ELSEIF(IVAR.EQ.42) THEN
39157         ROLD=SIGT(I1,I2,I3)
39158       ELSEIF(IVAR.EQ.43) THEN
39159         ROLD=XPVMD(I1)
39160       ELSEIF(IVAR.EQ.44) THEN
39161         ROLD=XPANL(I1)
39162       ELSEIF(IVAR.EQ.45) THEN
39163         ROLD=XPANH(I1)
39164       ELSEIF(IVAR.EQ.46) THEN
39165         ROLD=XPBEH(I1)
39166       ELSEIF(IVAR.EQ.47) THEN
39167         ROLD=XPDIR(I1)
39168       ELSEIF(IVAR.EQ.48) THEN
39169         IOLD=IMSS(I1)
39170       ELSEIF(IVAR.EQ.49) THEN
39171         ROLD=RMSS(I1)
39172       ENDIF
39173  
39174 C...Print current value of variable. Loop back.
39175       IF(LNAM.GE.LBIT) THEN
39176         CHBIT(LNAM:14)=' '
39177         CHBIT(15:60)=' has the value                                '
39178         IF(MSVAR(IVAR,1).EQ.1) THEN
39179           WRITE(CHBIT(51:60),'(I10)') IOLD
39180         ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
39181           WRITE(CHBIT(47:60),'(F14.5)') ROLD
39182         ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
39183           CHBIT(53:60)=CHOLD
39184         ELSE
39185           CHBIT(33:60)=CHOLD
39186         ENDIF
39187         IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
39188         LLOW=LHIG
39189         IF(LLOW.LT.LTOT) GOTO 120
39190         RETURN
39191       ENDIF
39192  
39193 C...Read in new variable value.
39194       IF(MSVAR(IVAR,1).EQ.1) THEN
39195         CHINI=' '
39196         CHINI(LNAM-LBIT+11:10)=CHBIT(LNAM+1:LBIT)
39197         READ(CHINI,'(I10)') INEW
39198       ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
39199         CHINR=' '
39200         CHINR(LNAM-LBIT+17:16)=CHBIT(LNAM+1:LBIT)
39201         READ(CHINR,*) RNEW
39202       ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
39203         CHNEW=CHBIT(LNAM+1:LBIT)//' '
39204       ELSE
39205         CHNEW2=CHBIT(LNAM+1:LBIT)//' '
39206       ENDIF
39207  
39208 C...Store new variable value.
39209       IF(IVAR.EQ.1) THEN
39210         N=INEW
39211       ELSEIF(IVAR.EQ.2) THEN
39212         K(I1,I2)=INEW
39213       ELSEIF(IVAR.EQ.3) THEN
39214         P(I1,I2)=RNEW
39215       ELSEIF(IVAR.EQ.4) THEN
39216         V(I1,I2)=RNEW
39217       ELSEIF(IVAR.EQ.5) THEN
39218         MSTU(I1)=INEW
39219       ELSEIF(IVAR.EQ.6) THEN
39220         PARU(I1)=RNEW
39221       ELSEIF(IVAR.EQ.7) THEN
39222         MSTJ(I1)=INEW
39223       ELSEIF(IVAR.EQ.8) THEN
39224         PARJ(I1)=RNEW
39225       ELSEIF(IVAR.EQ.9) THEN
39226         KCHG(I1,I2)=INEW
39227       ELSEIF(IVAR.EQ.10) THEN
39228         PMAS(I1,I2)=RNEW
39229       ELSEIF(IVAR.EQ.11) THEN
39230         PARF(I1)=RNEW
39231       ELSEIF(IVAR.EQ.12) THEN
39232         VCKM(I1,I2)=RNEW
39233       ELSEIF(IVAR.EQ.13) THEN
39234         MDCY(I1,I2)=INEW
39235       ELSEIF(IVAR.EQ.14) THEN
39236         MDME(I1,I2)=INEW
39237       ELSEIF(IVAR.EQ.15) THEN
39238         BRAT(I1)=RNEW
39239       ELSEIF(IVAR.EQ.16) THEN
39240         KFDP(I1,I2)=INEW
39241       ELSEIF(IVAR.EQ.17) THEN
39242         CHAF(I1,I2)=CHNEW
39243       ELSEIF(IVAR.EQ.18) THEN
39244         MRPY(I1)=INEW
39245       ELSEIF(IVAR.EQ.19) THEN
39246         RRPY(I1)=RNEW
39247       ELSEIF(IVAR.EQ.20) THEN
39248         MSEL=INEW
39249       ELSEIF(IVAR.EQ.21) THEN
39250         MSUB(I1)=INEW
39251       ELSEIF(IVAR.EQ.22) THEN
39252         KFIN(I1,I2)=INEW
39253       ELSEIF(IVAR.EQ.23) THEN
39254         CKIN(I1)=RNEW
39255       ELSEIF(IVAR.EQ.24) THEN
39256         MSTP(I1)=INEW
39257       ELSEIF(IVAR.EQ.25) THEN
39258         PARP(I1)=RNEW
39259       ELSEIF(IVAR.EQ.26) THEN
39260         MSTI(I1)=INEW
39261       ELSEIF(IVAR.EQ.27) THEN
39262         PARI(I1)=RNEW
39263       ELSEIF(IVAR.EQ.28) THEN
39264         MINT(I1)=INEW
39265       ELSEIF(IVAR.EQ.29) THEN
39266         VINT(I1)=RNEW
39267       ELSEIF(IVAR.EQ.30) THEN
39268         ISET(I1)=INEW
39269       ELSEIF(IVAR.EQ.31) THEN
39270         KFPR(I1,I2)=INEW
39271       ELSEIF(IVAR.EQ.32) THEN
39272         COEF(I1,I2)=RNEW
39273       ELSEIF(IVAR.EQ.33) THEN
39274         ICOL(I1,I2,I3)=INEW
39275       ELSEIF(IVAR.EQ.34) THEN
39276         XSFX(I1,I2)=RNEW
39277       ELSEIF(IVAR.EQ.35) THEN
39278         ISIG(I1,I2)=INEW
39279       ELSEIF(IVAR.EQ.36) THEN
39280         SIGH(I1)=RNEW
39281       ELSEIF(IVAR.EQ.37) THEN
39282         MWID(I1)=INEW
39283       ELSEIF(IVAR.EQ.38) THEN
39284         WIDS(I1,I2)=RNEW
39285       ELSEIF(IVAR.EQ.39) THEN
39286         NGEN(I1,I2)=INEW
39287       ELSEIF(IVAR.EQ.40) THEN
39288         XSEC(I1,I2)=RNEW
39289       ELSEIF(IVAR.EQ.41) THEN
39290         PROC(I1)=CHNEW2
39291       ELSEIF(IVAR.EQ.42) THEN
39292         SIGT(I1,I2,I3)=RNEW
39293       ELSEIF(IVAR.EQ.43) THEN
39294         XPVMD(I1)=RNEW
39295       ELSEIF(IVAR.EQ.44) THEN
39296         XPANL(I1)=RNEW
39297       ELSEIF(IVAR.EQ.45) THEN
39298         XPANH(I1)=RNEW
39299       ELSEIF(IVAR.EQ.46) THEN
39300         XPBEH(I1)=RNEW
39301       ELSEIF(IVAR.EQ.47) THEN
39302         XPDIR(I1)=RNEW
39303       ELSEIF(IVAR.EQ.48) THEN
39304         IMSS(I1)=INEW
39305       ELSEIF(IVAR.EQ.49) THEN
39306         RMSS(I1)=RNEW
39307       ENDIF
39308  
39309 C...Write old and new value. Loop back.
39310       CHBIT(LNAM:14)=' '
39311       CHBIT(15:60)=' changed from                to               '
39312       IF(MSVAR(IVAR,1).EQ.1) THEN
39313         WRITE(CHBIT(33:42),'(I10)') IOLD
39314         WRITE(CHBIT(51:60),'(I10)') INEW
39315         IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
39316       ELSEIF(MSVAR(IVAR,1).EQ.2) THEN
39317         WRITE(CHBIT(29:42),'(F14.5)') ROLD
39318         WRITE(CHBIT(47:60),'(F14.5)') RNEW
39319         IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
39320       ELSEIF(MSVAR(IVAR,1).EQ.3) THEN
39321         CHBIT(35:42)=CHOLD
39322         CHBIT(53:60)=CHNEW
39323         IF(MSTU(13).GE.1) WRITE(MSTU(11),5000) CHBIT(1:60)
39324       ELSE
39325         CHBIT(15:88)=' changed from '//CHOLD2//' to '//CHNEW2
39326         IF(MSTU(13).GE.1) WRITE(MSTU(11),5100) CHBIT(1:88)
39327       ENDIF
39328       LLOW=LHIG
39329       IF(LLOW.LT.LTOT) GOTO 120
39330  
39331 C...Format statement for output on unit MSTU(11) (by default 6).
39332  5000 FORMAT(5X,A60)
39333  5100 FORMAT(5X,A88)
39334  
39335       RETURN
39336       END
39337  
39338 C*********************************************************************
39339  
39340 C...PYEXEC
39341 C...Administrates the fragmentation and decay chain.
39342  
39343       SUBROUTINE PYEXEC
39344  
39345 C...Double precision and integer declarations.
39346       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
39347       IMPLICIT INTEGER(I-N)
39348       INTEGER PYK,PYCHGE,PYCOMP
39349 C...Commonblocks.
39350       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
39351       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
39352       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
39353       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
39354       COMMON/PYINT4/MWID(500),WIDS(500,5)
39355       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/,/PYINT4/
39356 C...Local array.
39357       DIMENSION PS(2,6),IJOIN(100)
39358  
39359 C...Initialize and reset.
39360       MSTU(24)=0
39361       IF(MSTU(12).GE.1) CALL PYLIST(0)
39362       MSTU(31)=MSTU(31)+1
39363       MSTU(1)=0
39364       MSTU(2)=0
39365       MSTU(3)=0
39366       IF(MSTU(17).LE.0) MSTU(90)=0
39367       MCONS=1
39368  
39369 C...Sum up momentum, energy and charge for starting entries.
39370       NSAV=N
39371       DO 110 I=1,2
39372         DO 100 J=1,6
39373           PS(I,J)=0D0
39374   100   CONTINUE
39375   110 CONTINUE
39376       DO 130 I=1,N
39377         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 130
39378         DO 120 J=1,4
39379           PS(1,J)=PS(1,J)+P(I,J)
39380   120   CONTINUE
39381         PS(1,6)=PS(1,6)+PYCHGE(K(I,2))
39382   130 CONTINUE
39383       PARU(21)=PS(1,4)
39384  
39385 C...Prepare system for subsequent fragmentation/decay.
39386       CALL PYPREP(0)
39387  
39388 C...Loop through jet fragmentation and particle decays.
39389       MBE=0
39390   140 MBE=MBE+1
39391       IP=0
39392   150 IP=IP+1
39393       KC=0
39394       IF(K(IP,1).GT.0.AND.K(IP,1).LE.10) KC=PYCOMP(K(IP,2))
39395       IF(KC.EQ.0) THEN
39396  
39397 C...Deal with any remaining undecayed resonance
39398 C...(normally the task of PYEVNT, so seldom used).
39399       ELSEIF(MWID(KC).NE.0) THEN
39400         IBEG=IP
39401         IF(KCHG(KC,2).NE.0.AND.K(I,1).NE.3) THEN
39402           IBEG=IP+1
39403   160     IBEG=IBEG-1
39404           IF(IBEG.GE.2.AND.K(IBEG,1).EQ.2) GOTO 160
39405           IF(K(IBEG,1).NE.2) IBEG=IBEG+1
39406           IEND=IP-1
39407   170     IEND=IEND+1
39408           IF(IEND.LT.N.AND.K(IEND,1).EQ.2) GOTO 170
39409           IF(IEND.LT.N.AND.KCHG(PYCOMP(K(IEND,2)),2).EQ.0) GOTO 170
39410           NJOIN=0
39411           DO 180 I=IBEG,IEND
39412             IF(KCHG(PYCOMP(K(IEND,2)),2).NE.0) THEN
39413               NJOIN=NJOIN+1
39414               IJOIN(NJOIN)=I
39415             ENDIF
39416   180     CONTINUE
39417         ENDIF
39418         CALL PYRESD(IP)
39419         CALL PYPREP(IBEG)
39420  
39421 C...Particle decay if unstable and allowed. Save long-lived particle
39422 C...decays until second pass after Bose-Einstein effects.
39423       ELSEIF(KCHG(KC,2).EQ.0) THEN
39424         IF(MSTJ(21).GE.1.AND.MDCY(KC,1).GE.1.AND.(MSTJ(51).LE.0.OR.MBE
39425      &  .EQ.2.OR.PMAS(KC,2).GE.PARJ(91).OR.IABS(K(IP,2)).EQ.311))
39426      &  CALL PYDECY(IP)
39427  
39428 C...Decay products may develop a shower.
39429         IF(MSTJ(92).GT.0) THEN
39430           IP1=MSTJ(92)
39431           QMAX=SQRT(MAX(0D0,(P(IP1,4)+P(IP1+1,4))**2-(P(IP1,1)+P(IP1+1,
39432      &    1))**2-(P(IP1,2)+P(IP1+1,2))**2-(P(IP1,3)+P(IP1+1,3))**2))
39433           CALL PYSHOW(IP1,IP1+1,QMAX)
39434           CALL PYPREP(IP1)
39435           MSTJ(92)=0
39436         ELSEIF(MSTJ(92).LT.0) THEN
39437           IP1=-MSTJ(92)
39438           CALL PYSHOW(IP1,-3,P(IP,5))
39439           CALL PYPREP(IP1)
39440           MSTJ(92)=0
39441         ENDIF
39442  
39443 C...Jet fragmentation: string or independent fragmentation.
39444       ELSEIF(K(IP,1).EQ.1.OR.K(IP,1).EQ.2) THEN
39445         MFRAG=MSTJ(1)
39446         IF(MFRAG.GE.1.AND.K(IP,1).EQ.1) MFRAG=2
39447         IF(MSTJ(21).GE.2.AND.K(IP,1).EQ.2.AND.N.GT.IP) THEN
39448           IF(K(IP+1,1).EQ.1.AND.K(IP+1,3).EQ.K(IP,3).AND.
39449      &    K(IP,3).GT.0.AND.K(IP,3).LT.IP) THEN
39450             IF(KCHG(PYCOMP(K(K(IP,3),2)),2).EQ.0) MFRAG=MIN(1,MFRAG)
39451           ENDIF
39452         ENDIF
39453         IF(MFRAG.EQ.1) CALL PYSTRF(IP)
39454         IF(MFRAG.EQ.2) CALL PYINDF(IP)
39455         IF(MFRAG.EQ.2.AND.K(IP,1).EQ.1) MCONS=0
39456         IF(MFRAG.EQ.2.AND.(MSTJ(3).LE.0.OR.MOD(MSTJ(3),5).EQ.0)) MCONS=0
39457       ENDIF
39458  
39459 C...Loop back if enough space left in PYJETS and no error abort.
39460       IF(MSTU(24).NE.0.AND.MSTU(21).GE.2) THEN
39461       ELSEIF(IP.LT.N.AND.N.LT.MSTU(4)-20-MSTU(32)) THEN
39462         GOTO 150
39463       ELSEIF(IP.LT.N) THEN
39464         CALL PYERRM(11,'(PYEXEC:) no more memory left in PYJETS')
39465       ENDIF
39466  
39467 C...Include simple Bose-Einstein effect parametrization if desired.
39468       IF(MBE.EQ.1.AND.MSTJ(51).GE.1) THEN
39469         CALL PYBOEI(NSAV)
39470         GOTO 140
39471       ENDIF
39472  
39473 C...Check that momentum, energy and charge were conserved.
39474       DO 200 I=1,N
39475         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 200
39476         DO 190 J=1,4
39477           PS(2,J)=PS(2,J)+P(I,J)
39478   190   CONTINUE
39479         PS(2,6)=PS(2,6)+PYCHGE(K(I,2))
39480   200 CONTINUE
39481       PDEV=(ABS(PS(2,1)-PS(1,1))+ABS(PS(2,2)-PS(1,2))+ABS(PS(2,3)-
39482      &PS(1,3))+ABS(PS(2,4)-PS(1,4)))/(1D0+ABS(PS(2,4))+ABS(PS(1,4)))
39483       IF(MCONS.EQ.1.AND.PDEV.GT.PARU(11)) CALL PYERRM(15,
39484      &'(PYEXEC:) four-momentum was not conserved')
39485       IF(MCONS.EQ.1.AND.ABS(PS(2,6)-PS(1,6)).GT.0.1D0) CALL PYERRM(15,
39486      &'(PYEXEC:) charge was not conserved')
39487  
39488       RETURN
39489       END
39490  
39491 C*********************************************************************
39492 
39493 C...PYPREP
39494 C...Rearranges partons along strings. 
39495 C...Allows small systems to collapse into one or two particles. 
39496 C...Checks flavours and colour singlet invarient masses.
39497  
39498       SUBROUTINE PYPREP(IP)
39499  
39500 C...Double precision and integer declarations.
39501       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
39502       INTEGER PYK,PYCHGE,PYCOMP
39503 C...Commonblocks.
39504       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
39505       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
39506       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
39507       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
39508       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
39509 C...Local arrays.
39510       DIMENSION DPS(5),DPC(5),UE(3),PG(5),
39511      &E1(3),E2(3),E3(3),E4(3),ECL(3)
39512  
39513 C...Function to give four-product.
39514       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)
39515  
39516 C...Rearrange parton shower product listing along strings: begin loop.
39517       I1=N
39518       DO 130 MQGST=1,2
39519         DO 120 I=MAX(1,IP),N
39520           IF(K(I,1).NE.3) GOTO 120
39521           KC=PYCOMP(K(I,2))
39522           IF(KC.EQ.0) GOTO 120
39523           KQ=KCHG(KC,2)
39524           IF(KQ.EQ.0.OR.(MQGST.EQ.1.AND.KQ.EQ.2)) GOTO 120
39525  
39526 C...Pick up loose string end.
39527           KCS=4
39528           IF(KQ*ISIGN(1,K(I,2)).LT.0) KCS=5
39529           IA=I
39530           NSTP=0
39531   100     NSTP=NSTP+1
39532           IF(NSTP.GT.4*N) THEN
39533             CALL PYERRM(14,'(PYPREP:) caught in infinite loop')
39534             RETURN
39535           ENDIF
39536  
39537 C...Copy undecayed parton.
39538           IF(K(IA,1).EQ.3) THEN
39539             IF(I1.GE.MSTU(4)-MSTU(32)-5) THEN
39540               CALL PYERRM(11,'(PYPREP:) no more memory left in PYJETS')
39541               RETURN
39542             ENDIF
39543             I1=I1+1
39544             K(I1,1)=2
39545             IF(NSTP.GE.2.AND.KCHG(PYCOMP(K(IA,2)),2).NE.2) K(I1,1)=1
39546             K(I1,2)=K(IA,2)
39547             K(I1,3)=IA
39548             K(I1,4)=0
39549             K(I1,5)=0
39550             DO 110 J=1,5
39551               P(I1,J)=P(IA,J)
39552               V(I1,J)=V(IA,J)
39553   110       CONTINUE
39554             K(IA,1)=K(IA,1)+10
39555             IF(K(I1,1).EQ.1) GOTO 120
39556           ENDIF
39557  
39558 C...Go to next parton in colour space.
39559           IB=IA
39560           IF(MOD(K(IB,KCS)/MSTU(5)**2,2).EQ.0.AND.MOD(K(IB,KCS),MSTU(5))
39561      &    .NE.0) THEN
39562             IA=MOD(K(IB,KCS),MSTU(5))
39563             K(IB,KCS)=K(IB,KCS)+MSTU(5)**2
39564             MREV=0
39565           ELSE
39566             IF(K(IB,KCS).GE.2*MSTU(5)**2.OR.MOD(K(IB,KCS)/MSTU(5),
39567      &      MSTU(5)).EQ.0) KCS=9-KCS
39568             IA=MOD(K(IB,KCS)/MSTU(5),MSTU(5))
39569             K(IB,KCS)=K(IB,KCS)+2*MSTU(5)**2
39570             MREV=1
39571           ENDIF
39572           IF(IA.LE.0.OR.IA.GT.N) THEN
39573             CALL PYERRM(12,'(PYPREP:) colour rearrangement failed')
39574             RETURN
39575           ENDIF
39576           IF(MOD(K(IA,4)/MSTU(5),MSTU(5)).EQ.IB.OR.MOD(K(IA,5)/MSTU(5),
39577      &    MSTU(5)).EQ.IB) THEN
39578             IF(MREV.EQ.1) KCS=9-KCS
39579             IF(MOD(K(IA,KCS)/MSTU(5),MSTU(5)).NE.IB) KCS=9-KCS
39580             K(IA,KCS)=K(IA,KCS)+2*MSTU(5)**2
39581           ELSE
39582             IF(MREV.EQ.0) KCS=9-KCS
39583             IF(MOD(K(IA,KCS),MSTU(5)).NE.IB) KCS=9-KCS
39584             K(IA,KCS)=K(IA,KCS)+MSTU(5)**2
39585           ENDIF
39586           IF(IA.NE.I) GOTO 100
39587           K(I1,1)=1
39588   120   CONTINUE
39589   130 CONTINUE
39590       N=I1
39591  
39592 C...Done if no checks on small-mass systems.
39593       IF(MSTJ(14).LT.0) RETURN
39594       IF(MSTJ(14).EQ.0) GOTO 540
39595  
39596 C...Find lowest-mass colour singlet jet system.
39597       NS=N
39598   140 NSIN=N-NS
39599       PDMIN=1D0+PARJ(32)
39600       IC=0
39601       DO 190 I=MAX(1,IP),N
39602         IF(K(I,1).NE.1.AND.K(I,1).NE.2) THEN
39603         ELSEIF(K(I,1).EQ.2.AND.IC.EQ.0) THEN
39604           NSIN=NSIN+1
39605           IC=I
39606           DO 150 J=1,4
39607             DPS(J)=P(I,J)
39608   150     CONTINUE
39609           MSTJ(93)=1
39610           DPS(5)=PYMASS(K(I,2))
39611         ELSEIF(K(I,1).EQ.2) THEN
39612           DO 160 J=1,4
39613             DPS(J)=DPS(J)+P(I,J)
39614   160     CONTINUE
39615         ELSEIF(IC.NE.0.AND.KCHG(PYCOMP(K(I,2)),2).NE.0) THEN
39616           DO 170 J=1,4
39617             DPS(J)=DPS(J)+P(I,J)
39618   170     CONTINUE
39619           MSTJ(93)=1
39620           DPS(5)=DPS(5)+PYMASS(K(I,2))
39621           PD=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))-
39622      &    DPS(5)
39623           IF(PD.LT.PDMIN) THEN
39624             PDMIN=PD
39625             DO 180 J=1,5
39626               DPC(J)=DPS(J)
39627   180       CONTINUE
39628             IC1=IC
39629             IC2=I
39630           ENDIF
39631           IC=0
39632         ELSE
39633           NSIN=NSIN+1
39634         ENDIF
39635   190 CONTINUE
39636  
39637 C...Done if lowest-mass system above threshold for string frag.
39638       IF(PDMIN.GE.PARJ(32)) GOTO 540
39639  
39640 C...Fill small-mass system as cluster.
39641       NSAV=N
39642       PECM=SQRT(MAX(0D0,DPC(4)**2-DPC(1)**2-DPC(2)**2-DPC(3)**2))
39643       K(N+1,1)=11
39644       K(N+1,2)=91
39645       K(N+1,3)=IC1
39646       P(N+1,1)=DPC(1)
39647       P(N+1,2)=DPC(2)
39648       P(N+1,3)=DPC(3)
39649       P(N+1,4)=DPC(4)
39650       P(N+1,5)=PECM
39651  
39652 C...Set up history, assuming cluster -> 2 hadrons.
39653       NBODY=2
39654       K(N+1,4)=N+2
39655       K(N+1,5)=N+3
39656       K(N+2,1)=1
39657       K(N+3,1)=1
39658       IF(MSTU(16).NE.2) THEN
39659         K(N+2,3)=N+1
39660         K(N+3,3)=N+1
39661       ELSE
39662         K(N+2,3)=IC1
39663         K(N+3,3)=IC2
39664       ENDIF
39665       K(N+2,4)=0
39666       K(N+3,4)=0
39667       K(N+2,5)=0
39668       K(N+3,5)=0
39669       V(N+1,5)=0D0
39670       V(N+2,5)=0D0
39671       V(N+3,5)=0D0
39672  
39673 C...Form two particles from flavours of lowest-mass system, if feasible.
39674       NTRY = 0
39675   200 NTRY = NTRY + 1
39676 C...Open string.
39677       IF(IABS(K(IC1,2)).NE.21) THEN
39678         KC1=PYCOMP(K(IC1,2))
39679         KC2=PYCOMP(K(IC2,2))
39680         IF(KC1.EQ.0.OR.KC2.EQ.0) GOTO 540
39681         KQ1=KCHG(KC1,2)*ISIGN(1,K(IC1,2))
39682         KQ2=KCHG(KC2,2)*ISIGN(1,K(IC2,2))
39683         IF(KQ1+KQ2.NE.0) GOTO 540
39684 C...Start with qq, if there is one. Only allow for rank 1 popcorn meson
39685   210   K1=K(IC1,2)
39686         IF(IABS(K(IC2,2)).GT.10) K1=K(IC2,2)
39687         MSTU(125)=0
39688         CALL PYDCYK(K1,0,KFLN,K(N+2,2))
39689         CALL PYDCYK(K(IC1,2)+K(IC2,2)-K1,-KFLN,KFLDMP,K(N+3,2))
39690         IF(K(N+2,2).EQ.0.OR.K(N+3,2).EQ.0) GOTO 210
39691 C...Closed string.
39692       ELSE
39693         IF(IABS(K(IC2,2)).NE.21) GOTO 540
39694 C...No room for popcorn mesons in closed string -> 2 hadrons.
39695         MSTU(125)=0
39696   220   CALL PYDCYK(1+INT((2D0+PARJ(2))*PYR(0)),0,KFLN,KFDMP)
39697         CALL PYDCYK(KFLN,0,KFLM,K(N+2,2))
39698         CALL PYDCYK(-KFLN,-KFLM,KFLDMP,K(N+3,2))
39699         IF(K(N+2,2).EQ.0.OR.K(N+3,2).EQ.0) GOTO 220
39700       ENDIF
39701       P(N+2,5)=PYMASS(K(N+2,2))
39702       P(N+3,5)=PYMASS(K(N+3,2))
39703  
39704 C...If it does not work: try again (a number of times), give up
39705 C...(if no place to shuffle momentum), or form one hadron.
39706       IF(P(N+2,5)+P(N+3,5)+PARJ(64).GE.PECM) THEN
39707         IF(NTRY.LT.MSTJ(17)) THEN
39708           GOTO 200
39709         ELSEIF(NSIN.EQ.1) THEN
39710           GOTO 540
39711         ELSE
39712           GOTO 290
39713         END IF
39714       END IF
39715  
39716 C...Perform two-particle decay of jet system.
39717 C...First step: find reference axis in decaying system rest frame.
39718 C...(Borrow slot N+2 for temporary direction.)
39719       DO 230 J=1,4
39720         P(N+2,J)=P(IC1,J)
39721   230 CONTINUE
39722       DO 250 I=IC1+1,IC2-1
39723         IF((K(I,1).EQ.1.OR.K(I,1).EQ.2).AND.
39724      &  KCHG(PYCOMP(K(I,2)),2).NE.0) THEN
39725           FRAC1=FOUR(IC2,I)/(FOUR(IC1,I)+FOUR(IC2,I))
39726           DO 240 J=1,4
39727             P(N+2,J)=P(N+2,J)+FRAC1*P(I,J)
39728   240     CONTINUE
39729         ENDIF
39730   250 CONTINUE
39731       CALL PYROBO(N+2,N+2,0D0,0D0,-DPC(1)/DPC(4),-DPC(2)/DPC(4),
39732      &-DPC(3)/DPC(4))
39733       THE1=PYANGL(P(N+2,3),SQRT(P(N+2,1)**2+P(N+2,2)**2))
39734       PHI1=PYANGL(P(N+2,1),P(N+2,2))
39735  
39736 C...Second step: generate isotropic/anisotropic decay.
39737       PA=SQRT((PECM**2-(P(N+2,5)+P(N+3,5))**2)*(PECM**2-
39738      &(P(N+2,5)-P(N+3,5))**2))/(2D0*PECM)
39739   260 UE(3)=PYR(0)
39740       PT2=(1D0-UE(3)**2)*PA**2
39741       IF(MSTJ(16).LE.0) THEN
39742         PREV=0.5D0
39743       ELSE
39744         IF(EXP(-PT2/(2D0*PARJ(21)**2)).LT.PYR(0)) GOTO 260
39745         PR1=P(N+2,5)**2+PT2
39746         PR2=P(N+3,5)**2+PT2
39747         ALAMBD=SQRT(MAX(0D0,(PECM**2-PR1-PR2)**2-4D0*PR1*PR2))
39748         PREVCF=PARJ(42)
39749         IF(MSTJ(11).EQ.2) PREVCF=PARJ(39)
39750         PREV=1D0/(1D0+EXP(MIN(50D0,PREVCF*ALAMBD)))
39751       ENDIF
39752       IF(PYR(0).LT.PREV) UE(3)=-UE(3)
39753       PHI=PARU(2)*PYR(0)
39754       UE(1)=SQRT(1D0-UE(3)**2)*COS(PHI)
39755       UE(2)=SQRT(1D0-UE(3)**2)*SIN(PHI)
39756       DO 270 J=1,3
39757         P(N+2,J)=PA*UE(J)
39758         P(N+3,J)=-PA*UE(J)
39759   270 CONTINUE
39760       P(N+2,4)=SQRT(PA**2+P(N+2,5)**2)
39761       P(N+3,4)=SQRT(PA**2+P(N+3,5)**2)
39762  
39763 C...Third step: move back to event frame and set production vertex.
39764       CALL PYROBO(N+2,N+3,THE1,PHI1,DPC(1)/DPC(4),DPC(2)/DPC(4),
39765      &DPC(3)/DPC(4))
39766       DO 280 J=1,4
39767         V(N+1,J)=V(IC1,J)
39768         V(N+2,J)=V(IC1,J)
39769         V(N+3,J)=V(IC2,J)
39770   280 CONTINUE
39771       N=N+3
39772       GOTO 520
39773  
39774 C...Else form one particle, if possible.
39775   290 NBODY=1
39776       K(N+1,5)=N+2
39777       DO 300 J=1,4
39778         V(N+1,J)=V(IC1,J)
39779         V(N+2,J)=V(IC1,J)
39780   300 CONTINUE
39781  
39782 C...Select hadron flavour from available quark flavours.
39783   310 IF(IABS(K(IC1,2)).GT.100.AND.IABS(K(IC2,2)).GT.100) THEN
39784         GOTO 540
39785       ELSEIF(IABS(K(IC1,2)).NE.21) THEN
39786         CALL PYKFDI(K(IC1,2),K(IC2,2),KFLDMP,K(N+2,2))
39787       ELSE
39788         KFLN=1+INT((2D0+PARJ(2))*PYR(0))
39789         CALL PYKFDI(KFLN,-KFLN,KFLDMP,K(N+2,2))
39790       ENDIF
39791       IF(K(N+2,2).EQ.0) GOTO 310
39792       P(N+2,5)=PYMASS(K(N+2,2))
39793  
39794 C...Use old algorithm for E/p conservation? (EN)
39795       IF (MSTJ(16).LE.0) GOTO 480
39796  
39797 C...Find the string piece closest to the cluster by a loop
39798 C...over the undecayed partons not in present cluster. (EN)
39799       DGLOMI=1D30
39800       IBEG=0
39801       I0=0
39802       DO 340 I1=MAX(1,IP),N-1
39803         IF(I1.GE.IC1-1.AND.I1.LE.IC2) THEN
39804           I0=0
39805         ELSEIF(K(I1,1).EQ.2) THEN
39806           IF(I0.EQ.0) I0=I1
39807           I2=I1
39808   320     I2=I2+1
39809           IF(KCHG(PYCOMP(K(I2,2)),2).EQ.0) GOTO 320
39810  
39811 C...Define velocity vectors e1, e2, ecl and differences e3, e4.
39812           DO 330 J=1,3
39813             E1(J)=P(I1,J)/P(I1,4)
39814             E2(J)=P(I2,J)/P(I2,4)
39815             ECL(J)=P(N+1,J)/P(N+1,4)
39816             E3(J)=E2(J)-E1(J)
39817             E4(J)=ECL(J)-E1(J)
39818   330     CONTINUE
39819  
39820 C...Calculate minimal D=(e4-alpha*e3)**2 for 0<alpha<1.
39821           E3S=E3(1)**2+E3(2)**2+E3(3)**2
39822           E4S=E4(1)**2+E4(2)**2+E4(3)**2
39823           E34=E3(1)*E4(1)+E3(2)*E4(2)+E3(3)*E4(3)
39824           IF(E34.LE.0D0) THEN
39825             DDMIN=E4S
39826           ELSEIF(E34.LT.E3S) THEN
39827             DDMIN=E4S-E34**2/E3S
39828           ELSE
39829             DDMIN=E4S-2D0*E34+E3S
39830           ENDIF
39831  
39832 C...Is this the smallest so far?
39833           IF(DDMIN.LT.DGLOMI) THEN
39834             DGLOMI=DDMIN
39835             IBEG=I0
39836             IPCS=I1
39837           ENDIF
39838         ELSEIF(K(I1,1).EQ.1.AND.KCHG(PYCOMP(K(I1,2)),2).NE.0) THEN
39839           I0=0
39840         ENDIF
39841   340 CONTINUE
39842  
39843 C... Check if there are any strings to connect to the new gluon. (EN)
39844       IF (IBEG.EQ.0) GOTO 480
39845  
39846 C...Delta_m = m_clus - m_had > 0: emit a 'gluon' (EN)
39847       IF (P(N+1,5).GE.P(N+2,5)) THEN
39848  
39849 C...Construct 'gluon' that is needed to put hadron on the mass shell.
39850         FRAC=P(N+2,5)/P(N+1,5)
39851         DO 350 J=1,5
39852           P(N+2,J)=FRAC*P(N+1,J)
39853           PG(J)=(1D0-FRAC)*P(N+1,J)
39854   350   CONTINUE
39855  
39856 C... Copy string with new gluon put in.
39857         N=N+2
39858         I=IBEG-1
39859   360   I=I+1
39860         IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 360
39861         IF(KCHG(PYCOMP(K(I,2)),2).EQ.0) GOTO 360
39862         N=N+1
39863         DO 370 J=1,5
39864           K(N,J)=K(I,J)
39865           P(N,J)=P(I,J)
39866           V(N,J)=V(I,J)
39867   370   CONTINUE
39868         K(I,1)=K(I,1)+10
39869         K(I,4)=N
39870         K(I,5)=N
39871         K(N,3)=I
39872         IF(I.EQ.IPCS) THEN
39873           N=N+1
39874           DO 380 J=1,5
39875             K(N,J)=K(N-1,J)
39876             P(N,J)=PG(J)
39877             V(N,J)=V(N-1,J)
39878   380     CONTINUE
39879           K(N,2)=21
39880           K(N,3)=NSAV+1
39881         ENDIF
39882         IF(K(I,1).EQ.12) GOTO 360
39883         GOTO 520
39884  
39885 C...Delta_m = m_clus - m_had < 0: have to absorb a 'gluon' instead,
39886 C...from string piece endpoints.
39887       ELSE
39888  
39889 C...Begin by copying string that should give energy to cluster.
39890         N=N+2
39891         I=IBEG-1
39892   390   I=I+1
39893         IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 390
39894         IF(KCHG(PYCOMP(K(I,2)),2).EQ.0) GOTO 390
39895         N=N+1
39896         DO 400 J=1,5
39897           K(N,J)=K(I,J)
39898           P(N,J)=P(I,J)
39899           V(N,J)=V(I,J)
39900   400   CONTINUE
39901         K(I,1)=K(I,1)+10
39902         K(I,4)=N
39903         K(I,5)=N
39904         K(N,3)=I
39905         IF(I.EQ.IPCS) I1=N
39906         IF(K(I,1).EQ.12) GOTO 390
39907         I2=I1+1
39908  
39909 C...Set initial Phad.
39910         DO 410 J=1,4
39911           P(NSAV+2,J)=P(NSAV+1,J)
39912   410   CONTINUE
39913  
39914 C...Calculate Pg, a part of which will be added to Phad later. (EN)
39915   420   IF(MSTJ(16).EQ.1) THEN
39916           ALPHA=1D0
39917           BETA=1D0
39918         ELSE
39919           ALPHA=FOUR(NSAV+1,I2)/FOUR(I1,I2)
39920           BETA=FOUR(NSAV+1,I1)/FOUR(I1,I2)
39921         ENDIF
39922         DO 430 J=1,4
39923           PG(J)=ALPHA*P(I1,J)+BETA*P(I2,J)
39924   430   CONTINUE
39925         PG(5)=SQRT(MAX(1D-20,PG(4)**2-PG(1)**2-PG(2)**2-PG(3)**2))
39926  
39927 C..Solve 2nd order equation, use the best (smallest) solution. (EN)
39928         PMSCOL=P(NSAV+2,4)**2-P(NSAV+2,1)**2-P(NSAV+2,2)**2-
39929      &  P(NSAV+2,3)**2
39930         PCLPG=(P(NSAV+2,4)*PG(4)-P(NSAV+2,1)*PG(1)-
39931      &  P(NSAV+2,2)*PG(2)-P(NSAV+2,3)*PG(3))/PG(5)**2
39932         DELTA=SQRT(PCLPG**2+(P(NSAV+2,5)**2-PMSCOL)/PG(5)**2)-PCLPG
39933  
39934 C...If all gluon energy eaten, zero it and take a step back.
39935         ITER=0
39936         IF(DELTA*ALPHA.GT.1D0.AND.I1.GT.NSAV+3) THEN
39937           ITER=1
39938           DO 440 J=1,4
39939             P(NSAV+2,J)=P(NSAV+2,J)+P(I1,J)
39940             P(I1,J)=0D0
39941   440     CONTINUE
39942           P(I1,5)=0D0
39943           I1=I1-1
39944         ENDIF
39945         IF(DELTA*BETA.GT.1D0.AND.I2.LT.N) THEN
39946           ITER=1
39947           DO 450 J=1,4
39948             P(NSAV+2,J)=P(NSAV+2,J)+P(I2,J)
39949             P(I2,J)=0D0
39950   450     CONTINUE
39951           P(I2,5)=0D0
39952           I2=I2+1
39953         ENDIF
39954         IF(ITER.EQ.1) GOTO 420
39955  
39956 C...If also all endpoint energy eaten, revert to old procedure.
39957         IF((1D0-DELTA*ALPHA)*P(I1,4).LT.P(I1,5).OR.
39958      &  (1D0-DELTA*BETA)*P(I2,4).LT.P(I2,5)) THEN
39959           DO 460 I=NSAV+3,N
39960             IM=K(I,3)
39961             K(IM,1)=K(IM,1)-10
39962             K(IM,4)=0
39963             K(IM,5)=0
39964   460     CONTINUE
39965           N=NSAV
39966           GOTO 480
39967         ENDIF
39968  
39969 C... Construct the collapsed hadron and modified string partons.
39970         DO 470 J=1,4
39971           P(NSAV+2,J)=P(NSAV+2,J)+DELTA*PG(J)
39972           P(I1,J)=(1D0-DELTA*ALPHA)*P(I1,J)
39973           P(I2,J)=(1D0-DELTA*BETA)*P(I2,J)
39974   470   CONTINUE
39975           P(I1,5)=(1D0-DELTA*ALPHA)*P(I1,5)
39976           P(I2,5)=(1D0-DELTA*BETA)*P(I2,5)
39977  
39978 C...Finished with string collapse in new scheme.
39979         GOTO 520
39980       ENDIF
39981  
39982 C... Use old algorithm; by choice or when in trouble.
39983   480 CONTINUE
39984 C...Find parton/particle which combines to largest extra mass.
39985       IR=0
39986       HA=0D0
39987       HSM=0D0
39988       DO 500 MCOMB=1,3
39989         IF(IR.NE.0) GOTO 500
39990         DO 490 I=MAX(1,IP),N
39991           IF(K(I,1).LE.0.OR.K(I,1).GT.10.OR.(I.GE.IC1.AND.I.LE.IC2
39992      &    .AND.K(I,1).GE.1.AND.K(I,1).LE.2)) GOTO 490
39993           IF(MCOMB.EQ.1) KCI=PYCOMP(K(I,2))
39994           IF(MCOMB.EQ.1.AND.KCI.EQ.0) GOTO 490
39995           IF(MCOMB.EQ.1.AND.KCHG(KCI,2).EQ.0.AND.I.LE.NS) GOTO 490
39996           IF(MCOMB.EQ.2.AND.IABS(K(I,2)).GT.10.AND.IABS(K(I,2)).LE.100)
39997      &    GOTO 490
39998           HCR=DPC(4)*P(I,4)-DPC(1)*P(I,1)-DPC(2)*P(I,2)-DPC(3)*P(I,3)
39999           HSR=2D0*HCR+PECM**2-P(N+2,5)**2-2D0*P(N+2,5)*P(I,5)
40000           IF(HSR.GT.HSM) THEN
40001             IR=I
40002             HA=HCR
40003             HSM=HSR
40004           ENDIF
40005   490   CONTINUE
40006   500 CONTINUE
40007  
40008 C...Shuffle energy and momentum to put new particle on mass shell.
40009       IF(IR.NE.0) THEN
40010         HB=PECM**2+HA
40011         HC=P(N+2,5)**2+HA
40012         HD=P(IR,5)**2+HA
40013         HK2=0.5D0*(HB*SQRT(MAX(0D0,((HB+HC)**2-4D0*(HB+HD)*P(N+2,5)**2)/
40014      &  (HA**2-(PECM*P(IR,5))**2)))-(HB+HC))/(HB+HD)
40015         HK1=(0.5D0*(P(N+2,5)**2-PECM**2)+HD*HK2)/HB
40016         DO 510 J=1,4
40017           P(N+2,J)=(1D0+HK1)*DPC(J)-HK2*P(IR,J)
40018           P(IR,J)=(1D0+HK2)*P(IR,J)-HK1*DPC(J)
40019   510   CONTINUE
40020         N=N+2
40021       ELSE
40022         CALL PYERRM(3,'(PYPREP:) no match for collapsing cluster')
40023         RETURN
40024       ENDIF
40025  
40026 C...Mark collapsed system and store daughter pointers. Iterate.
40027   520 DO 530 I=IC1,IC2
40028         IF((K(I,1).EQ.1.OR.K(I,1).EQ.2).AND.
40029      &  KCHG(PYCOMP(K(I,2)),2).NE.0) THEN
40030           K(I,1)=K(I,1)+10
40031           IF(MSTU(16).NE.2) THEN
40032             K(I,4)=NSAV+1
40033             K(I,5)=NSAV+1
40034           ELSE
40035             K(I,4)=NSAV+2
40036             K(I,5)=NSAV+1+NBODY
40037           ENDIF
40038         ENDIF
40039   530 CONTINUE
40040       IF(N.LT.MSTU(4)-MSTU(32)-5) GOTO 140
40041  
40042 C...Check flavours and invariant masses in parton systems.
40043   540 NP=0
40044       KFN=0
40045       KQS=0
40046       DO 550 J=1,5
40047         DPS(J)=0D0
40048   550 CONTINUE
40049       DO 580 I=MAX(1,IP),N
40050         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 580
40051         KC=PYCOMP(K(I,2))
40052         IF(KC.EQ.0) GOTO 580
40053         KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
40054         IF(KQ.EQ.0) GOTO 580
40055         NP=NP+1
40056         IF(KQ.NE.2) THEN
40057           KFN=KFN+1
40058           KQS=KQS+KQ
40059           MSTJ(93)=1
40060           DPS(5)=DPS(5)+PYMASS(K(I,2))
40061         ENDIF
40062         DO 560 J=1,4
40063           DPS(J)=DPS(J)+P(I,J)
40064   560   CONTINUE
40065         IF(K(I,1).EQ.1) THEN
40066           IF(NP.NE.1.AND.(KFN.EQ.1.OR.KFN.GE.3.OR.KQS.NE.0)) CALL
40067      &    PYERRM(2,'(PYPREP:) unphysical flavour combination')
40068           IF(NP.NE.1.AND.DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2.LT.
40069      &    (0.9D0*PARJ(32)+DPS(5))**2) THEN
40070             CALL PYERRM(3,'(PYPREP:) too small mass in jet system')
40071           END IF
40072           NP=0
40073           KFN=0
40074           KQS=0
40075           DO 570 J=1,5
40076             DPS(J)=0D0
40077   570     CONTINUE
40078         ENDIF
40079   580 CONTINUE
40080  
40081       RETURN
40082       END
40083  
40084 C*********************************************************************
40085  
40086 C...PYSTRF
40087 C...Handles the fragmentation of an arbitrary colour singlet
40088 C...jet system according to the Lund string fragmentation model.
40089  
40090       SUBROUTINE PYSTRF(IP)
40091  
40092 C...Double precision and integer declarations.
40093       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
40094       IMPLICIT INTEGER(I-N)
40095       INTEGER PYK,PYCHGE,PYCOMP
40096 C...Commonblocks.
40097       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
40098       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
40099       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
40100       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
40101 C...Local arrays. All MOPS variables ends with MO
40102       DIMENSION DPS(5),KFL(3),PMQ(3),PX(3),PY(3),GAM(3),IE(2),PR(2),
40103      &IN(9),DHM(4),DHG(4),DP(5,5),IRANK(2),MJU(4),IJU(3),PJU(5,5),
40104      &TJU(5),KFJH(2),NJS(2),KFJS(2),PJS(4,5),MSTU9T(8),PARU9T(8),
40105      &INMO(9),PM2QMO(2),XTMO(2)
40106  
40107 C...Function: four-product of two vectors.
40108       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)
40109       DFOUR(I,J)=DP(I,4)*DP(J,4)-DP(I,1)*DP(J,1)-DP(I,2)*DP(J,2)-
40110      &DP(I,3)*DP(J,3)
40111  
40112 C...Reset counters. Identify parton system.
40113       MSTJ(91)=0
40114       NSAV=N
40115       MSTU90=MSTU(90)
40116       NP=0
40117       KQSUM=0
40118       DO 100 J=1,5
40119         DPS(J)=0D0
40120   100 CONTINUE
40121       MJU(1)=0
40122       MJU(2)=0
40123       I=IP-1
40124   110 I=I+1
40125       IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
40126         CALL PYERRM(12,'(PYSTRF:) failed to reconstruct jet system')
40127         IF(MSTU(21).GE.1) RETURN
40128       ENDIF
40129       IF(K(I,1).NE.1.AND.K(I,1).NE.2.AND.K(I,1).NE.41) GOTO 110
40130       KC=PYCOMP(K(I,2))
40131       IF(KC.EQ.0) GOTO 110
40132       KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
40133       IF(KQ.EQ.0) GOTO 110
40134       IF(N+5*NP+11.GT.MSTU(4)-MSTU(32)-5) THEN
40135         CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
40136         IF(MSTU(21).GE.1) RETURN
40137       ENDIF
40138  
40139 C...Take copy of partons to be considered. Check flavour sum.
40140       NP=NP+1
40141       DO 120 J=1,5
40142         K(N+NP,J)=K(I,J)
40143         P(N+NP,J)=P(I,J)
40144         IF(J.NE.4) DPS(J)=DPS(J)+P(I,J)
40145   120 CONTINUE
40146       DPS(4)=DPS(4)+SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
40147       K(N+NP,3)=I
40148       IF(KQ.NE.2) KQSUM=KQSUM+KQ
40149       IF(K(I,1).EQ.41) THEN
40150         KQSUM=KQSUM+2*KQ
40151         IF(KQSUM.EQ.KQ) MJU(1)=N+NP
40152         IF(KQSUM.NE.KQ) MJU(2)=N+NP
40153       ENDIF
40154       IF(K(I,1).EQ.2.OR.K(I,1).EQ.41) GOTO 110
40155       IF(KQSUM.NE.0) THEN
40156         CALL PYERRM(12,'(PYSTRF:) unphysical flavour combination')
40157         IF(MSTU(21).GE.1) RETURN
40158       ENDIF
40159  
40160 C...Boost copied system to CM frame (for better numerical precision).
40161       IF(ABS(DPS(3)).LT.0.99D0*DPS(4)) THEN
40162         MBST=0
40163         MSTU(33)=1
40164         CALL PYROBO(N+1,N+NP,0D0,0D0,-DPS(1)/DPS(4),-DPS(2)/DPS(4),
40165      &  -DPS(3)/DPS(4))
40166       ELSE
40167         MBST=1
40168         HHBZ=SQRT(MAX(1D-6,DPS(4)+DPS(3))/MAX(1D-6,DPS(4)-DPS(3)))
40169         DO 130 I=N+1,N+NP
40170           HHPMT=P(I,1)**2+P(I,2)**2+P(I,5)**2
40171           IF(P(I,3).GT.0D0) THEN
40172             HHPEZ=MAX(1D-10,(P(I,4)+P(I,3))/HHBZ)
40173             P(I,3)=0.5D0*(HHPEZ-HHPMT/HHPEZ)
40174             P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
40175           ELSE
40176             HHPEZ=MAX(1D-10,(P(I,4)-P(I,3))*HHBZ)
40177             P(I,3)=-0.5D0*(HHPEZ-HHPMT/HHPEZ)
40178             P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
40179           ENDIF
40180   130   CONTINUE
40181       ENDIF
40182  
40183 C...Search for very nearby partons that may be recombined.
40184       NTRYR=0
40185       PARU12=PARU(12)
40186       PARU13=PARU(13)
40187       MJU(3)=MJU(1)
40188       MJU(4)=MJU(2)
40189       NR=NP
40190   140 IF(NR.GE.3) THEN
40191         PDRMIN=2D0*PARU12
40192         DO 150 I=N+1,N+NR
40193           IF(I.EQ.N+NR.AND.IABS(K(N+1,2)).NE.21) GOTO 150
40194           I1=I+1
40195           IF(I.EQ.N+NR) I1=N+1
40196           IF(K(I,1).EQ.41.OR.K(I1,1).EQ.41) GOTO 150
40197           IF(MJU(1).NE.0.AND.I1.LT.MJU(1).AND.IABS(K(I1,2)).NE.21)
40198      &    GOTO 150
40199           IF(MJU(2).NE.0.AND.I.GT.MJU(2).AND.IABS(K(I,2)).NE.21)
40200      &    GOTO 150
40201           PAP=SQRT((P(I,1)**2+P(I,2)**2+P(I,3)**2)*(P(I1,1)**2+
40202      &    P(I1,2)**2+P(I1,3)**2))
40203           PVP=P(I,1)*P(I1,1)+P(I,2)*P(I1,2)+P(I,3)*P(I1,3)
40204           PDR=4D0*(PAP-PVP)**2/MAX(1D-6,PARU13**2*PAP+2D0*(PAP-PVP))
40205           IF(PDR.LT.PDRMIN) THEN
40206             IR=I
40207             PDRMIN=PDR
40208           ENDIF
40209   150   CONTINUE
40210  
40211 C...Recombine very nearby partons to avoid machine precision problems.
40212         IF(PDRMIN.LT.PARU12.AND.IR.EQ.N+NR) THEN
40213           DO 160 J=1,4
40214             P(N+1,J)=P(N+1,J)+P(N+NR,J)
40215   160     CONTINUE
40216           P(N+1,5)=SQRT(MAX(0D0,P(N+1,4)**2-P(N+1,1)**2-P(N+1,2)**2-
40217      &    P(N+1,3)**2))
40218           NR=NR-1
40219           GOTO 140
40220         ELSEIF(PDRMIN.LT.PARU12) THEN
40221           DO 170 J=1,4
40222             P(IR,J)=P(IR,J)+P(IR+1,J)
40223   170     CONTINUE
40224           P(IR,5)=SQRT(MAX(0D0,P(IR,4)**2-P(IR,1)**2-P(IR,2)**2-
40225      &    P(IR,3)**2))
40226           DO 190 I=IR+1,N+NR-1
40227             K(I,2)=K(I+1,2)
40228             DO 180 J=1,5
40229               P(I,J)=P(I+1,J)
40230   180       CONTINUE
40231   190     CONTINUE
40232           IF(IR.EQ.N+NR-1) K(IR,2)=K(N+NR,2)
40233           NR=NR-1
40234           IF(MJU(1).GT.IR) MJU(1)=MJU(1)-1
40235           IF(MJU(2).GT.IR) MJU(2)=MJU(2)-1
40236           GOTO 140
40237         ENDIF
40238       ENDIF
40239       NTRYR=NTRYR+1
40240  
40241 C...Reset particle counter. Skip ahead if no junctions are present;
40242 C...this is usually the case!
40243       NRS=MAX(5*NR+11,NP)
40244       NTRY=0
40245   200 NTRY=NTRY+1
40246       IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
40247         PARU12=4D0*PARU12
40248         PARU13=2D0*PARU13
40249         GOTO 140
40250       ELSEIF(NTRY.GT.100) THEN
40251         CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
40252         IF(MSTU(21).GE.1) RETURN
40253       ENDIF
40254       I=N+NRS
40255       MSTU(90)=MSTU90
40256       IF(MJU(1).EQ.0.AND.MJU(2).EQ.0) GOTO 580
40257       IF(MSTJ(12).GE.4) CALL PYERRM(29,'(PYSTRF:) sorry,'//
40258      &     ' junction strings not handled by MSTJ(12)>3 options')
40259       DO 570 JT=1,2
40260         NJS(JT)=0
40261         IF(MJU(JT).EQ.0) GOTO 570
40262         JS=3-2*JT
40263  
40264 C...Find and sum up momentum on three sides of junction. Check flavours.
40265         DO 220 IU=1,3
40266           IJU(IU)=0
40267           DO 210 J=1,5
40268             PJU(IU,J)=0D0
40269   210     CONTINUE
40270   220   CONTINUE
40271         IU=0
40272         DO 240 I1=N+1+(JT-1)*(NR-1),N+NR+(JT-1)*(1-NR),JS
40273           IF(K(I1,2).NE.21.AND.IU.LE.2) THEN
40274             IU=IU+1
40275             IJU(IU)=I1
40276           ENDIF
40277           DO 230 J=1,4
40278             PJU(IU,J)=PJU(IU,J)+P(I1,J)
40279   230     CONTINUE
40280   240   CONTINUE
40281         DO 250 IU=1,3
40282           PJU(IU,5)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+PJU(IU,3)**2)
40283   250   CONTINUE
40284         IF(K(IJU(3),2)/100.NE.10*K(IJU(1),2)+K(IJU(2),2).AND.
40285      &  K(IJU(3),2)/100.NE.10*K(IJU(2),2)+K(IJU(1),2)) THEN
40286           CALL PYERRM(12,'(PYSTRF:) unphysical flavour combination')
40287           IF(MSTU(21).GE.1) RETURN
40288         ENDIF
40289  
40290 C...Calculate (approximate) boost to rest frame of junction.
40291         T12=(PJU(1,1)*PJU(2,1)+PJU(1,2)*PJU(2,2)+PJU(1,3)*PJU(2,3))/
40292      &  (PJU(1,5)*PJU(2,5))
40293         T13=(PJU(1,1)*PJU(3,1)+PJU(1,2)*PJU(3,2)+PJU(1,3)*PJU(3,3))/
40294      &  (PJU(1,5)*PJU(3,5))
40295         T23=(PJU(2,1)*PJU(3,1)+PJU(2,2)*PJU(3,2)+PJU(2,3)*PJU(3,3))/
40296      &  (PJU(2,5)*PJU(3,5))
40297         T11=SQRT((2D0/3D0)*(1D0-T12)*(1D0-T13)/(1D0-T23))
40298         T22=SQRT((2D0/3D0)*(1D0-T12)*(1D0-T23)/(1D0-T13))
40299         TSQ=SQRT((2D0*T11*T22+T12-1D0)*(1D0+T12))
40300         T1F=(TSQ-T22*(1D0+T12))/(1D0-T12**2)
40301         T2F=(TSQ-T11*(1D0+T12))/(1D0-T12**2)
40302         DO 260 J=1,3
40303           TJU(J)=-(T1F*PJU(1,J)/PJU(1,5)+T2F*PJU(2,J)/PJU(2,5))
40304   260   CONTINUE
40305         TJU(4)=SQRT(1D0+TJU(1)**2+TJU(2)**2+TJU(3)**2)
40306         DO 270 IU=1,3
40307           PJU(IU,5)=TJU(4)*PJU(IU,4)-TJU(1)*PJU(IU,1)-TJU(2)*PJU(IU,2)-
40308      &    TJU(3)*PJU(IU,3)
40309   270   CONTINUE
40310  
40311 C...Put junction at rest if motion could give inconsistencies.
40312         IF(PJU(1,5)+PJU(2,5).GT.PJU(1,4)+PJU(2,4)) THEN
40313           DO 280 J=1,3
40314             TJU(J)=0D0
40315   280     CONTINUE
40316           TJU(4)=1D0
40317           PJU(1,5)=PJU(1,4)
40318           PJU(2,5)=PJU(2,4)
40319           PJU(3,5)=PJU(3,4)
40320         ENDIF
40321  
40322 C...Start preparing for fragmentation of two strings from junction.
40323         ISTA=I
40324         DO 550 IU=1,2
40325           NS=IJU(IU+1)-IJU(IU)
40326  
40327 C...Junction strings: find longitudinal string directions.
40328           DO 310 IS=1,NS
40329             IS1=IJU(IU)+IS-1
40330             IS2=IJU(IU)+IS
40331             DO 290 J=1,5
40332               DP(1,J)=0.5D0*P(IS1,J)
40333               IF(IS.EQ.1) DP(1,J)=P(IS1,J)
40334               DP(2,J)=0.5D0*P(IS2,J)
40335               IF(IS.EQ.NS) DP(2,J)=-PJU(IU,J)
40336   290       CONTINUE
40337             IF(IS.EQ.NS) DP(2,4)=SQRT(PJU(IU,1)**2+PJU(IU,2)**2+
40338      &      PJU(IU,3)**2)
40339             IF(IS.EQ.NS) DP(2,5)=0D0
40340             DP(3,5)=DFOUR(1,1)
40341             DP(4,5)=DFOUR(2,2)
40342             DHKC=DFOUR(1,2)
40343             IF(DP(3,5)+2D0*DHKC+DP(4,5).LE.0D0) THEN
40344               DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
40345               DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
40346               DP(3,5)=0D0
40347               DP(4,5)=0D0
40348               DHKC=DFOUR(1,2)
40349             ENDIF
40350             DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
40351             DHK1=0.5D0*((DP(4,5)+DHKC)/DHKS-1D0)
40352             DHK2=0.5D0*((DP(3,5)+DHKC)/DHKS-1D0)
40353             IN1=N+NR+4*IS-3
40354             P(IN1,5)=SQRT(DP(3,5)+2D0*DHKC+DP(4,5))
40355             DO 300 J=1,4
40356               P(IN1,J)=(1D0+DHK1)*DP(1,J)-DHK2*DP(2,J)
40357               P(IN1+1,J)=(1D0+DHK2)*DP(2,J)-DHK1*DP(1,J)
40358   300       CONTINUE
40359   310     CONTINUE
40360  
40361 C...Junction strings: initialize flavour, momentum and starting pos.
40362           ISAV=I
40363           MSTU91=MSTU(90)
40364   320     NTRY=NTRY+1
40365           IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
40366             PARU12=4D0*PARU12
40367             PARU13=2D0*PARU13
40368             GOTO 140
40369           ELSEIF(NTRY.GT.100) THEN
40370             CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
40371             IF(MSTU(21).GE.1) RETURN
40372           ENDIF
40373           I=ISAV
40374           MSTU(90)=MSTU91
40375           IRANKJ=0
40376           IE(1)=K(N+1+(JT/2)*(NP-1),3)
40377           IN(4)=N+NR+1
40378           IN(5)=IN(4)+1
40379           IN(6)=N+NR+4*NS+1
40380           DO 340 JQ=1,2
40381             DO 330 IN1=N+NR+2+JQ,N+NR+4*NS-2+JQ,4
40382               P(IN1,1)=2-JQ
40383               P(IN1,2)=JQ-1
40384               P(IN1,3)=1D0
40385   330       CONTINUE
40386   340     CONTINUE
40387           KFL(1)=K(IJU(IU),2)
40388           PX(1)=0D0
40389           PY(1)=0D0
40390           GAM(1)=0D0
40391           DO 350 J=1,5
40392             PJU(IU+3,J)=0D0
40393   350     CONTINUE
40394  
40395 C...Junction strings: find initial transverse directions.
40396           DO 360 J=1,4
40397             DP(1,J)=P(IN(4),J)
40398             DP(2,J)=P(IN(4)+1,J)
40399             DP(3,J)=0D0
40400             DP(4,J)=0D0
40401   360     CONTINUE
40402           DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
40403           DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
40404           DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
40405           DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
40406           DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
40407           IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
40408           IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
40409           IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
40410           IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
40411           DHC12=DFOUR(1,2)
40412           DHCX1=DFOUR(3,1)/DHC12
40413           DHCX2=DFOUR(3,2)/DHC12
40414           DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
40415           DHCY1=DFOUR(4,1)/DHC12
40416           DHCY2=DFOUR(4,2)/DHC12
40417           DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
40418           DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
40419           DO 370 J=1,4
40420             DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
40421             P(IN(6),J)=DP(3,J)
40422             P(IN(6)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
40423      &      DHCYX*DP(3,J))
40424   370     CONTINUE
40425  
40426 C...Junction strings: produce new particle, origin.
40427   380     I=I+1
40428           IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
40429             CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
40430             IF(MSTU(21).GE.1) RETURN
40431           ENDIF
40432           IRANKJ=IRANKJ+1
40433           K(I,1)=1
40434           K(I,3)=IE(1)
40435           K(I,4)=0
40436           K(I,5)=0
40437  
40438 C...Junction strings: generate flavour, hadron, pT, z and Gamma.
40439   390     CALL PYKFDI(KFL(1),0,KFL(3),K(I,2))
40440           IF(K(I,2).EQ.0) GOTO 320
40441           IF(IRANKJ.EQ.1.AND.IABS(KFL(1)).LE.10.AND.
40442      &    IABS(KFL(3)).GT.10) THEN
40443             IF(PYR(0).GT.PARJ(19)) GOTO 390
40444           ENDIF
40445           P(I,5)=PYMASS(K(I,2))
40446           CALL PYPTDI(KFL(1),PX(3),PY(3))
40447           PR(1)=P(I,5)**2+(PX(1)+PX(3))**2+(PY(1)+PY(3))**2
40448           CALL PYZDIS(KFL(1),KFL(3),PR(1),Z)
40449           IF(IABS(KFL(1)).GE.4.AND.IABS(KFL(1)).LE.8.AND.
40450      &    MSTU(90).LT.8) THEN
40451             MSTU(90)=MSTU(90)+1
40452             MSTU(90+MSTU(90))=I
40453             PARU(90+MSTU(90))=Z
40454           ENDIF
40455           GAM(3)=(1D0-Z)*(GAM(1)+PR(1)/Z)
40456           DO 400 J=1,3
40457             IN(J)=IN(3+J)
40458   400     CONTINUE
40459  
40460 C...Junction strings: stepping within or from 'low' string region easy.
40461           IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
40462      &    P(IN(1),5)**2.GE.PR(1)) THEN
40463             P(IN(1)+2,4)=Z*P(IN(1)+2,3)
40464             P(IN(2)+2,4)=PR(1)/(P(IN(1)+2,4)*P(IN(1),5)**2)
40465             DO 410 J=1,4
40466               P(I,J)=(PX(1)+PX(3))*P(IN(3),J)+(PY(1)+PY(3))*P(IN(3)+1,J)
40467   410       CONTINUE
40468             GOTO 500
40469           ELSEIF(IN(1)+1.EQ.IN(2)) THEN
40470             P(IN(2)+2,4)=P(IN(2)+2,3)
40471             P(IN(2)+2,1)=1D0
40472             IN(2)=IN(2)+4
40473             IF(IN(2).GT.N+NR+4*NS) GOTO 320
40474             IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
40475               P(IN(1)+2,4)=P(IN(1)+2,3)
40476               P(IN(1)+2,1)=0D0
40477               IN(1)=IN(1)+4
40478             ENDIF
40479           ENDIF
40480  
40481 C...Junction strings: find new transverse directions.
40482   420     IF(IN(1).GT.N+NR+4*NS.OR.IN(2).GT.N+NR+4*NS.OR.
40483      &    IN(1).GT.IN(2)) GOTO 320
40484           IF(IN(1).NE.IN(4).OR.IN(2).NE.IN(5)) THEN
40485             DO 430 J=1,4
40486               DP(1,J)=P(IN(1),J)
40487               DP(2,J)=P(IN(2),J)
40488               DP(3,J)=0D0
40489               DP(4,J)=0D0
40490   430       CONTINUE
40491             DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
40492             DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
40493             DHC12=DFOUR(1,2)
40494             IF(DHC12.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               GOTO 420
40499             ENDIF
40500             IN(3)=N+NR+4*NS+5
40501             DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
40502             DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
40503             DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
40504             IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
40505             IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
40506             IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
40507             IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
40508             DHCX1=DFOUR(3,1)/DHC12
40509             DHCX2=DFOUR(3,2)/DHC12
40510             DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
40511             DHCY1=DFOUR(4,1)/DHC12
40512             DHCY2=DFOUR(4,2)/DHC12
40513             DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
40514             DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
40515             DO 440 J=1,4
40516               DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
40517               P(IN(3),J)=DP(3,J)
40518               P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
40519      &        DHCYX*DP(3,J))
40520   440       CONTINUE
40521 C...Express pT with respect to new axes, if sensible.
40522             PXP=-(PX(3)*FOUR(IN(6),IN(3))+PY(3)*FOUR(IN(6)+1,IN(3)))
40523             PYP=-(PX(3)*FOUR(IN(6),IN(3)+1)+PY(3)*FOUR(IN(6)+1,IN(3)+1))
40524             IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01D0) THEN
40525               PX(3)=PXP
40526               PY(3)=PYP
40527             ENDIF
40528           ENDIF
40529  
40530 C...Junction strings: sum up known four-momentum, coefficients for m2.
40531           DO 470 J=1,4
40532             DHG(J)=0D0
40533             P(I,J)=PX(1)*P(IN(6),J)+PY(1)*P(IN(6)+1,J)+PX(3)*P(IN(3),J)+
40534      &      PY(3)*P(IN(3)+1,J)
40535             DO 450 IN1=IN(4),IN(1)-4,4
40536               P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
40537   450       CONTINUE
40538             DO 460 IN2=IN(5),IN(2)-4,4
40539               P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
40540   460       CONTINUE
40541   470     CONTINUE
40542           DHM(1)=FOUR(I,I)
40543           DHM(2)=2D0*FOUR(I,IN(1))
40544           DHM(3)=2D0*FOUR(I,IN(2))
40545           DHM(4)=2D0*FOUR(IN(1),IN(2))
40546  
40547 C...Junction strings: find coefficients for Gamma expression.
40548           DO 490 IN2=IN(1)+1,IN(2),4
40549             DO 480 IN1=IN(1),IN2-1,4
40550               DHC=2D0*FOUR(IN1,IN2)
40551               DHG(1)=DHG(1)+P(IN1+2,1)*P(IN2+2,1)*DHC
40552               IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-P(IN2+2,1)*DHC
40553               IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+P(IN1+2,1)*DHC
40554               IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
40555   480       CONTINUE
40556   490     CONTINUE
40557  
40558 C...Junction strings: solve (m2, Gamma) equation system for energies.
40559           DHS1=DHM(3)*DHG(4)-DHM(4)*DHG(3)
40560           IF(ABS(DHS1).LT.1D-4) GOTO 320
40561           DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(2)*DHG(3)-DHG(4)*
40562      &    (P(I,5)**2-DHM(1))+DHG(2)*DHM(3)
40563           DHS3=DHM(2)*(GAM(3)-DHG(1))-DHG(2)*(P(I,5)**2-DHM(1))
40564           P(IN(2)+2,4)=0.5D0*(SQRT(MAX(0D0,DHS2**2-4D0*DHS1*DHS3))/
40565      &    ABS(DHS1)-DHS2/DHS1)
40566           IF(DHM(2)+DHM(4)*P(IN(2)+2,4).LE.0D0) GOTO 320
40567           P(IN(1)+2,4)=(P(I,5)**2-DHM(1)-DHM(3)*P(IN(2)+2,4))/
40568      &    (DHM(2)+DHM(4)*P(IN(2)+2,4))
40569  
40570 C...Junction strings: step to new region if necessary.
40571           IF(P(IN(2)+2,4).GT.P(IN(2)+2,3)) THEN
40572             P(IN(2)+2,4)=P(IN(2)+2,3)
40573             P(IN(2)+2,1)=1D0
40574             IN(2)=IN(2)+4
40575             IF(IN(2).GT.N+NR+4*NS) GOTO 320
40576             IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
40577               P(IN(1)+2,4)=P(IN(1)+2,3)
40578               P(IN(1)+2,1)=0D0
40579               IN(1)=IN(1)+4
40580             ENDIF
40581             GOTO 420
40582           ELSEIF(P(IN(1)+2,4).GT.P(IN(1)+2,3)) THEN
40583             P(IN(1)+2,4)=P(IN(1)+2,3)
40584             P(IN(1)+2,1)=0D0
40585             IN(1)=IN(1)+JS
40586             GOTO 890
40587           ENDIF
40588  
40589 C...Junction strings: particle four-momentum, remainder, loop back.
40590   500     DO 510 J=1,4
40591             P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+
40592      &      P(IN(2)+2,4)*P(IN(2),J)
40593             PJU(IU+3,J)=PJU(IU+3,J)+P(I,J)
40594   510     CONTINUE
40595           IF(P(I,4).LT.P(I,5)) GOTO 320
40596           PJU(IU+3,5)=TJU(4)*PJU(IU+3,4)-TJU(1)*PJU(IU+3,1)-
40597      &    TJU(2)*PJU(IU+3,2)-TJU(3)*PJU(IU+3,3)
40598           IF(PJU(IU+3,5).LT.PJU(IU,5)) THEN
40599             KFL(1)=-KFL(3)
40600             PX(1)=-PX(3)
40601             PY(1)=-PY(3)
40602             GAM(1)=GAM(3)
40603             IF(IN(3).NE.IN(6)) THEN
40604               DO 520 J=1,4
40605                 P(IN(6),J)=P(IN(3),J)
40606                 P(IN(6)+1,J)=P(IN(3)+1,J)
40607   520         CONTINUE
40608             ENDIF
40609             DO 530 JQ=1,2
40610               IN(3+JQ)=IN(JQ)
40611               P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
40612               P(IN(JQ)+2,1)=P(IN(JQ)+2,1)-(3-2*JQ)*P(IN(JQ)+2,4)
40613   530       CONTINUE
40614             GOTO 380
40615           ENDIF
40616  
40617 C...Junction strings: save quantities left after each string.
40618           IF(IABS(KFL(1)).GT.10) GOTO 320
40619           I=I-1
40620           KFJH(IU)=KFL(1)
40621           DO 540 J=1,4
40622             PJU(IU+3,J)=PJU(IU+3,J)-P(I+1,J)
40623   540     CONTINUE
40624   550   CONTINUE
40625  
40626 C...Junction strings: put together to new effective string endpoint.
40627         NJS(JT)=I-ISTA
40628         KFJS(JT)=K(K(MJU(JT+2),3),2)
40629         KFLS=2*INT(PYR(0)+3D0*PARJ(4)/(1D0+3D0*PARJ(4)))+1
40630         IF(KFJH(1).EQ.KFJH(2)) KFLS=3
40631         IF(ISTA.NE.I) KFJS(JT)=ISIGN(1000*MAX(IABS(KFJH(1)),
40632      &  IABS(KFJH(2)))+100*MIN(IABS(KFJH(1)),IABS(KFJH(2)))+
40633      &  KFLS,KFJH(1))
40634         DO 560 J=1,4
40635           PJS(JT,J)=PJU(1,J)+PJU(2,J)+P(MJU(JT),J)
40636           PJS(JT+2,J)=PJU(4,J)+PJU(5,J)
40637   560   CONTINUE
40638         PJS(JT,5)=SQRT(MAX(0D0,PJS(JT,4)**2-PJS(JT,1)**2-PJS(JT,2)**2-
40639      &  PJS(JT,3)**2))
40640   570 CONTINUE
40641  
40642 C...Open versus closed strings. Choose breakup region for latter.
40643   580 IF(MJU(1).NE.0.AND.MJU(2).NE.0) THEN
40644         NS=MJU(2)-MJU(1)
40645         NB=MJU(1)-N
40646       ELSEIF(MJU(1).NE.0) THEN
40647         NS=N+NR-MJU(1)
40648         NB=MJU(1)-N
40649       ELSEIF(MJU(2).NE.0) THEN
40650         NS=MJU(2)-N
40651         NB=1
40652       ELSEIF(IABS(K(N+1,2)).NE.21) THEN
40653         NS=NR-1
40654         NB=1
40655       ELSE
40656         NS=NR+1
40657         W2SUM=0D0
40658         DO 590 IS=1,NR
40659           P(N+NR+IS,1)=0.5D0*FOUR(N+IS,N+IS+1-NR*(IS/NR))
40660           W2SUM=W2SUM+P(N+NR+IS,1)
40661   590   CONTINUE
40662         W2RAN=PYR(0)*W2SUM
40663         NB=0
40664   600   NB=NB+1
40665         W2SUM=W2SUM-P(N+NR+NB,1)
40666         IF(W2SUM.GT.W2RAN.AND.NB.LT.NR) GOTO 600
40667       ENDIF
40668  
40669 C...Find longitudinal string directions (i.e. lightlike four-vectors).
40670       DO 630 IS=1,NS
40671         IS1=N+IS+NB-1-NR*((IS+NB-2)/NR)
40672         IS2=N+IS+NB-NR*((IS+NB-1)/NR)
40673         DO 610 J=1,5
40674           DP(1,J)=P(IS1,J)
40675           IF(IABS(K(IS1,2)).EQ.21) DP(1,J)=0.5D0*DP(1,J)
40676           IF(IS1.EQ.MJU(1)) DP(1,J)=PJS(1,J)-PJS(3,J)
40677           DP(2,J)=P(IS2,J)
40678           IF(IABS(K(IS2,2)).EQ.21) DP(2,J)=0.5D0*DP(2,J)
40679           IF(IS2.EQ.MJU(2)) DP(2,J)=PJS(2,J)-PJS(4,J)
40680   610   CONTINUE
40681         DP(3,5)=DFOUR(1,1)
40682         DP(4,5)=DFOUR(2,2)
40683         DHKC=DFOUR(1,2)
40684         IF(DP(3,5)+2D0*DHKC+DP(4,5).LE.0D0) THEN
40685           DP(3,5)=DP(1,5)**2
40686           DP(4,5)=DP(2,5)**2
40687           DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2+DP(1,5)**2)
40688           DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2+DP(2,5)**2)
40689           DHKC=DFOUR(1,2)
40690         ENDIF
40691         DHKS=SQRT(DHKC**2-DP(3,5)*DP(4,5))
40692         DHK1=0.5D0*((DP(4,5)+DHKC)/DHKS-1D0)
40693         DHK2=0.5D0*((DP(3,5)+DHKC)/DHKS-1D0)
40694         IN1=N+NR+4*IS-3
40695         P(IN1,5)=SQRT(DP(3,5)+2D0*DHKC+DP(4,5))
40696         DO 620 J=1,4
40697           P(IN1,J)=(1D0+DHK1)*DP(1,J)-DHK2*DP(2,J)
40698           P(IN1+1,J)=(1D0+DHK2)*DP(2,J)-DHK1*DP(1,J)
40699   620   CONTINUE
40700   630 CONTINUE
40701  
40702 C...Begin initialization: sum up energy, set starting position.
40703       ISAV=I
40704       MSTU91=MSTU(90)
40705   640 NTRY=NTRY+1
40706       IF(NTRY.GT.100.AND.NTRYR.LE.4) THEN
40707         PARU12=4D0*PARU12
40708         PARU13=2D0*PARU13
40709         GOTO 140
40710       ELSEIF(NTRY.GT.100) THEN
40711         CALL PYERRM(14,'(PYSTRF:) caught in infinite loop')
40712         IF(MSTU(21).GE.1) RETURN
40713       ENDIF
40714       I=ISAV
40715       MSTU(90)=MSTU91
40716       DO 660 J=1,4
40717         P(N+NRS,J)=0D0
40718         DO 650 IS=1,NR
40719           P(N+NRS,J)=P(N+NRS,J)+P(N+IS,J)
40720   650   CONTINUE
40721   660 CONTINUE
40722       DO 680 JT=1,2
40723         IRANK(JT)=0
40724         IF(MJU(JT).NE.0) IRANK(JT)=NJS(JT)
40725         IF(NS.GT.NR) IRANK(JT)=1
40726         IE(JT)=K(N+1+(JT/2)*(NP-1),3)
40727         IN(3*JT+1)=N+NR+1+4*(JT/2)*(NS-1)
40728         IN(3*JT+2)=IN(3*JT+1)+1
40729         IN(3*JT+3)=N+NR+4*NS+2*JT-1
40730         DO 670 IN1=N+NR+2+JT,N+NR+4*NS-2+JT,4
40731           P(IN1,1)=2-JT
40732           P(IN1,2)=JT-1
40733           P(IN1,3)=1D0
40734   670   CONTINUE
40735   680 CONTINUE
40736 C.. MOPS variables and switches
40737       NRVMO=0
40738       XBMO=1D0
40739       MSTU(121)=0
40740       MSTU(122)=0
40741  
40742 C...Initialize flavour and pT variables for open string.
40743       IF(NS.LT.NR) THEN
40744         PX(1)=0D0
40745         PY(1)=0D0
40746         IF(NS.EQ.1.AND.MJU(1)+MJU(2).EQ.0) CALL PYPTDI(0,PX(1),PY(1))
40747         PX(2)=-PX(1)
40748         PY(2)=-PY(1)
40749         DO 690 JT=1,2
40750           KFL(JT)=K(IE(JT),2)
40751           IF(MJU(JT).NE.0) KFL(JT)=KFJS(JT)
40752           MSTJ(93)=1
40753           PMQ(JT)=PYMASS(KFL(JT))
40754           GAM(JT)=0D0
40755   690   CONTINUE
40756  
40757 C...Closed string: random initial breakup flavour, pT and vertex.
40758       ELSE
40759         KFL(3)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
40760         IBMO=0
40761   700   CALL PYKFDI(KFL(3),0,KFL(1),KDUMP)
40762 C.. Closed string: first vertex diq attempt => enforced second
40763 C.. vertex diq
40764         IF(IABS(KFL(1)).GT.10)THEN
40765            IBMO=1
40766            MSTU(121)=0
40767            GOTO 700
40768         ENDIF
40769         IF(IBMO.EQ.1) MSTU(121)=-1
40770         KFL(2)=-KFL(1)
40771         CALL PYPTDI(KFL(1),PX(1),PY(1))
40772         PX(2)=-PX(1)
40773         PY(2)=-PY(1)
40774         PR3=MIN(25D0,0.1D0*P(N+NR+1,5)**2)
40775   710   CALL PYZDIS(KFL(1),KFL(2),PR3,Z)
40776         ZR=PR3/(Z*P(N+NR+1,5)**2)
40777         IF(ZR.GE.1D0) GOTO 710
40778         DO 720 JT=1,2
40779           MSTJ(93)=1
40780           PMQ(JT)=PYMASS(KFL(JT))
40781           GAM(JT)=PR3*(1D0-Z)/Z
40782           IN1=N+NR+3+4*(JT/2)*(NS-1)
40783           P(IN1,JT)=1D0-Z
40784           P(IN1,3-JT)=JT-1
40785           P(IN1,3)=(2-JT)*(1D0-Z)+(JT-1)*Z
40786           P(IN1+1,JT)=ZR
40787           P(IN1+1,3-JT)=2-JT
40788           P(IN1+1,3)=(2-JT)*(1D0-ZR)+(JT-1)*ZR
40789   720   CONTINUE
40790       ENDIF
40791 C.. MOPS variables
40792       DO 730 JT=1,2
40793          XTMO(JT)=1D0
40794          PM2QMO(JT)=PMQ(JT)**2
40795          IF(IABS(KFL(JT)).GT.10) PM2QMO(JT)=0D0
40796   730 CONTINUE
40797  
40798 C...Find initial transverse directions (i.e. spacelike four-vectors).
40799       DO 770 JT=1,2
40800         IF(JT.EQ.1.OR.NS.EQ.NR-1) THEN
40801           IN1=IN(3*JT+1)
40802           IN3=IN(3*JT+3)
40803           DO 740 J=1,4
40804             DP(1,J)=P(IN1,J)
40805             DP(2,J)=P(IN1+1,J)
40806             DP(3,J)=0D0
40807             DP(4,J)=0D0
40808   740     CONTINUE
40809           DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
40810           DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
40811           DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
40812           DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
40813           DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
40814           IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
40815           IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
40816           IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
40817           IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
40818           DHC12=DFOUR(1,2)
40819           DHCX1=DFOUR(3,1)/DHC12
40820           DHCX2=DFOUR(3,2)/DHC12
40821           DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
40822           DHCY1=DFOUR(4,1)/DHC12
40823           DHCY2=DFOUR(4,2)/DHC12
40824           DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
40825           DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
40826           DO 750 J=1,4
40827             DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
40828             P(IN3,J)=DP(3,J)
40829             P(IN3+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
40830      &      DHCYX*DP(3,J))
40831   750     CONTINUE
40832         ELSE
40833           DO 760 J=1,4
40834             P(IN3+2,J)=P(IN3,J)
40835             P(IN3+3,J)=P(IN3+1,J)
40836   760     CONTINUE
40837         ENDIF
40838   770 CONTINUE
40839  
40840 C...Remove energy used up in junction string fragmentation.
40841       IF(MJU(1)+MJU(2).GT.0) THEN
40842         DO 790 JT=1,2
40843           IF(NJS(JT).EQ.0) GOTO 790
40844           DO 780 J=1,4
40845             P(N+NRS,J)=P(N+NRS,J)-PJS(JT+2,J)
40846   780     CONTINUE
40847   790   CONTINUE
40848       ENDIF
40849  
40850 C...Produce new particle: side, origin.
40851   800 I=I+1
40852       IF(2*I-NSAV.GE.MSTU(4)-MSTU(32)-5) THEN
40853         CALL PYERRM(11,'(PYSTRF:) no more memory left in PYJETS')
40854         IF(MSTU(21).GE.1) RETURN
40855       ENDIF
40856 C.. New side priority for popcorn systems
40857       IF(MSTU(121).LE.0)THEN
40858          JT=1.5D0+PYR(0)
40859          IF(IABS(KFL(3-JT)).GT.10) JT=3-JT
40860          IF(IABS(KFL(3-JT)).GE.4.AND.IABS(KFL(3-JT)).LE.8) JT=3-JT
40861       ENDIF
40862       JR=3-JT
40863       JS=3-2*JT
40864       IRANK(JT)=IRANK(JT)+1
40865       K(I,1)=1
40866       K(I,3)=IE(JT)
40867       K(I,4)=0
40868       K(I,5)=0
40869  
40870 C...Generate flavour, hadron and pT.
40871   810 CONTINUE
40872       CALL PYKFDI(KFL(JT),0,KFL(3),K(I,2))
40873       IF(K(I,2).EQ.0) GOTO 640
40874       MU90MO=MSTU(90)
40875       IF(MSTU(121).EQ.-1) GOTO 840
40876       IF(IRANK(JT).EQ.1.AND.IABS(KFL(JT)).LE.10.AND.
40877      &IABS(KFL(3)).GT.10) THEN
40878         IF(PYR(0).GT.PARJ(19)) GOTO 810
40879       ENDIF
40880       P(I,5)=PYMASS(K(I,2))
40881       CALL PYPTDI(KFL(JT),PX(3),PY(3))
40882       PR(JT)=P(I,5)**2+(PX(JT)+PX(3))**2+(PY(JT)+PY(3))**2
40883  
40884 C...Final hadrons for small invariant mass.
40885       MSTJ(93)=1
40886       PMQ(3)=PYMASS(KFL(3))
40887       PARJST=PARJ(33)
40888       IF(MSTJ(11).EQ.2) PARJST=PARJ(34)
40889       WMIN=PARJST+PMQ(1)+PMQ(2)+PARJ(36)*PMQ(3)
40890       IF(IABS(KFL(JT)).GT.10.AND.IABS(KFL(3)).GT.10) WMIN=
40891      &WMIN-0.5D0*PARJ(36)*PMQ(3)
40892       WREM2=FOUR(N+NRS,N+NRS)
40893       IF(WREM2.LT.0.10D0) GOTO 640
40894       IF(WREM2.LT.MAX(WMIN*(1D0+(2D0*PYR(0)-1D0)*PARJ(37)),
40895      &PARJ(32)+PMQ(1)+PMQ(2))**2) GOTO 1010
40896  
40897 C...Choose z, which gives Gamma. Shift z for heavy flavours.
40898       CALL PYZDIS(KFL(JT),KFL(3),PR(JT),Z)
40899       IF(IABS(KFL(JT)).GE.4.AND.IABS(KFL(JT)).LE.8.AND.
40900      &MSTU(90).LT.8) THEN
40901         MSTU(90)=MSTU(90)+1
40902         MSTU(90+MSTU(90))=I
40903         PARU(90+MSTU(90))=Z
40904       ENDIF
40905       KFL1A=IABS(KFL(1))
40906       KFL2A=IABS(KFL(2))
40907       IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
40908      &MOD(KFL2A/1000,10)).GE.4) THEN
40909         PR(JR)=(PMQ(JR)+PMQ(3))**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
40910         PW12=SQRT(MAX(0D0,(WREM2-PR(1)-PR(2))**2-4D0*PR(1)*PR(2)))
40911         Z=(WREM2+PR(JT)-PR(JR)+PW12*(2D0*Z-1D0))/(2D0*WREM2)
40912         PR(JR)=(PMQ(JR)+PARJST)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
40913         IF((1D0-Z)*(WREM2-PR(JT)/Z).LT.PR(JR)) GOTO 1010
40914       ENDIF
40915       GAM(3)=(1D0-Z)*(GAM(JT)+PR(JT)/Z)
40916  
40917 C.. MOPS baryon model modification
40918       XTMO3=(1D0-Z)*XTMO(JT)
40919       IF(IABS(KFL(3)).LE.10) NRVMO=0
40920       IF(IABS(KFL(3)).GT.10.AND.MSTJ(12).GE.4) THEN
40921          GTSTMO=1D0
40922          PTSTMO=1D0
40923          RTSTMO=PYR(0)
40924          IF(IABS(KFL(JT)).LE.10)THEN
40925             XBMO=MIN(XTMO3,1D0-(2D-10))
40926             GBMO=GAM(3)
40927             PMMO=0D0
40928             PGMO=GBMO+LOG(1D0-XBMO)*PM2QMO(JT)
40929             GTSTMO=1D0-PARF(192)**PGMO
40930          ELSE
40931             IF(IRANK(JT).EQ.1) THEN
40932                GBMO=GAM(JT)
40933                PMMO=0D0
40934                XBMO=1D0
40935             ENDIF
40936             IF(XBMO.LT.1D0-(1D-10))THEN
40937                PGNMO=GBMO*XTMO3/XBMO+PM2QMO(JT)*LOG(1D0-XTMO3)
40938                GTSTMO=(1D0-PARF(192)**PGNMO)/(1D0-PARF(192)**PGMO)
40939                PGMO=PGNMO
40940             ENDIF
40941             IF(MSTJ(12).GE.5)THEN
40942                PMNMO=SQRT((XBMO-XTMO3)*(GAM(3)/XTMO3-GBMO/XBMO))
40943                PMMO=PMMO+PMAS(PYCOMP(K(I,2)),1)-PMAS(PYCOMP(K(I,2)),3)
40944                PTSTMO=EXP((PMMO-PMNMO)*PARF(193))
40945                PMMO=PMNMO
40946             ENDIF
40947          ENDIF
40948  
40949 C.. MOPS Accepting popcorn system hadron.
40950          IF(PTSTMO*GTSTMO.GT.RTSTMO) THEN
40951             IF(IRANK(JT).EQ.1.OR.IABS(KFL(JT)).LE.10) THEN
40952                NRVMO=I-N-NR
40953                IF(I+NRVMO.GT.MSTU(4)-MSTU(32)-5) THEN
40954                   CALL PYERRM(11,
40955      &                 '(PYSTRF:) no more memory left in PYJETS')
40956                   IF(MSTU(21).GE.1) RETURN
40957                ENDIF
40958                IMO=I
40959                KFLMO=KFL(JT)
40960                PMQMO=PMQ(JT)
40961                PXMO=PX(JT)
40962                PYMO=PY(JT)
40963                GAMMO=GAM(JT)
40964                IRMO=IRANK(JT)
40965                XMO=XTMO(JT)
40966                DO 830 J=1,9
40967                   IF(J.LE.5) THEN
40968                      DO 820 LINE=1,I-N-NR
40969                         P(MSTU(4)-MSTU(32)-LINE,J)=P(N+NR+LINE,J)
40970                         K(MSTU(4)-MSTU(32)-LINE,J)=K(N+NR+LINE,J)
40971   820                CONTINUE
40972                   ENDIF
40973                   INMO(J)=IN(J)
40974   830          CONTINUE
40975             ENDIF
40976          ELSE
40977 C..Reject popcorn system, flag=-1 if enforcing new one
40978             MSTU(121)=-1
40979             IF(PTSTMO.GT.RTSTMO) MSTU(121)=-2
40980          ENDIF
40981       ENDIF
40982  
40983  
40984 C..Lift restoring string outside MOPS block
40985   840 IF(MSTU(121).LT.0) THEN
40986          IF(MSTU(121).EQ.-2) MSTU(121)=0
40987          MSTU(90)=MU90MO
40988          NRVMO=0
40989          IF(IRANK(JT).EQ.1.OR.IABS(KFL(JT)).LE.10) GOTO 810
40990          I=IMO
40991          KFL(JT)=KFLMO
40992          PMQ(JT)=PMQMO
40993          PX(JT)=PXMO
40994          PY(JT)=PYMO
40995          GAM(JT)=GAMMO
40996          IRANK(JT)=IRMO
40997          XTMO(JT)=XMO
40998          DO 860 J=1,9
40999             IF(J.LE.5) THEN
41000                DO 850 LINE=1,I-N-NR
41001                   P(N+NR+LINE,J)=P(MSTU(4)-MSTU(32)-LINE,J)
41002                   K(N+NR+LINE,J)=K(MSTU(4)-MSTU(32)-LINE,J)
41003   850          CONTINUE
41004             ENDIF
41005             IN(J)=INMO(J)
41006   860    CONTINUE
41007          GOTO 810
41008       ENDIF
41009       XTMO(JT)=XTMO3
41010 C.. MOPS end of modification
41011  
41012       DO 870 J=1,3
41013         IN(J)=IN(3*JT+J)
41014   870 CONTINUE
41015  
41016 C...Stepping within or from 'low' string region easy.
41017       IF(IN(1)+1.EQ.IN(2).AND.Z*P(IN(1)+2,3)*P(IN(2)+2,3)*
41018      &P(IN(1),5)**2.GE.PR(JT)) THEN
41019         P(IN(JT)+2,4)=Z*P(IN(JT)+2,3)
41020         P(IN(JR)+2,4)=PR(JT)/(P(IN(JT)+2,4)*P(IN(1),5)**2)
41021         DO 880 J=1,4
41022           P(I,J)=(PX(JT)+PX(3))*P(IN(3),J)+(PY(JT)+PY(3))*P(IN(3)+1,J)
41023   880   CONTINUE
41024         GOTO 970
41025       ELSEIF(IN(1)+1.EQ.IN(2)) THEN
41026         P(IN(JR)+2,4)=P(IN(JR)+2,3)
41027         P(IN(JR)+2,JT)=1D0
41028         IN(JR)=IN(JR)+4*JS
41029         IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 640
41030         IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
41031           P(IN(JT)+2,4)=P(IN(JT)+2,3)
41032           P(IN(JT)+2,JT)=0D0
41033           IN(JT)=IN(JT)+4*JS
41034         ENDIF
41035       ENDIF
41036  
41037 C...Find new transverse directions (i.e. spacelike string vectors).
41038   890 IF(JS*IN(1).GT.JS*IN(3*JR+1).OR.JS*IN(2).GT.JS*IN(3*JR+2).OR.
41039      &IN(1).GT.IN(2)) GOTO 640
41040       IF(IN(1).NE.IN(3*JT+1).OR.IN(2).NE.IN(3*JT+2)) THEN
41041         DO 900 J=1,4
41042           DP(1,J)=P(IN(1),J)
41043           DP(2,J)=P(IN(2),J)
41044           DP(3,J)=0D0
41045           DP(4,J)=0D0
41046   900   CONTINUE
41047         DP(1,4)=SQRT(DP(1,1)**2+DP(1,2)**2+DP(1,3)**2)
41048         DP(2,4)=SQRT(DP(2,1)**2+DP(2,2)**2+DP(2,3)**2)
41049         DHC12=DFOUR(1,2)
41050         IF(DHC12.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           GOTO 890
41055         ENDIF
41056         IN(3)=N+NR+4*NS+5
41057         DP(5,1)=DP(1,1)/DP(1,4)-DP(2,1)/DP(2,4)
41058         DP(5,2)=DP(1,2)/DP(1,4)-DP(2,2)/DP(2,4)
41059         DP(5,3)=DP(1,3)/DP(1,4)-DP(2,3)/DP(2,4)
41060         IF(DP(5,1)**2.LE.DP(5,2)**2+DP(5,3)**2) DP(3,1)=1D0
41061         IF(DP(5,1)**2.GT.DP(5,2)**2+DP(5,3)**2) DP(3,3)=1D0
41062         IF(DP(5,2)**2.LE.DP(5,1)**2+DP(5,3)**2) DP(4,2)=1D0
41063         IF(DP(5,2)**2.GT.DP(5,1)**2+DP(5,3)**2) DP(4,3)=1D0
41064         DHCX1=DFOUR(3,1)/DHC12
41065         DHCX2=DFOUR(3,2)/DHC12
41066         DHCXX=1D0/SQRT(1D0+2D0*DHCX1*DHCX2*DHC12)
41067         DHCY1=DFOUR(4,1)/DHC12
41068         DHCY2=DFOUR(4,2)/DHC12
41069         DHCYX=DHCXX*(DHCX1*DHCY2+DHCX2*DHCY1)*DHC12
41070         DHCYY=1D0/SQRT(1D0+2D0*DHCY1*DHCY2*DHC12-DHCYX**2)
41071         DO 910 J=1,4
41072           DP(3,J)=DHCXX*(DP(3,J)-DHCX2*DP(1,J)-DHCX1*DP(2,J))
41073           P(IN(3),J)=DP(3,J)
41074           P(IN(3)+1,J)=DHCYY*(DP(4,J)-DHCY2*DP(1,J)-DHCY1*DP(2,J)-
41075      &    DHCYX*DP(3,J))
41076   910   CONTINUE
41077 C...Express pT with respect to new axes, if sensible.
41078         PXP=-(PX(3)*FOUR(IN(3*JT+3),IN(3))+PY(3)*
41079      &  FOUR(IN(3*JT+3)+1,IN(3)))
41080         PYP=-(PX(3)*FOUR(IN(3*JT+3),IN(3)+1)+PY(3)*
41081      &  FOUR(IN(3*JT+3)+1,IN(3)+1))
41082         IF(ABS(PXP**2+PYP**2-PX(3)**2-PY(3)**2).LT.0.01D0) THEN
41083           PX(3)=PXP
41084           PY(3)=PYP
41085         ENDIF
41086       ENDIF
41087  
41088 C...Sum up known four-momentum. Gives coefficients for m2 expression.
41089       DO 940 J=1,4
41090         DHG(J)=0D0
41091         P(I,J)=PX(JT)*P(IN(3*JT+3),J)+PY(JT)*P(IN(3*JT+3)+1,J)+
41092      &  PX(3)*P(IN(3),J)+PY(3)*P(IN(3)+1,J)
41093         DO 920 IN1=IN(3*JT+1),IN(1)-4*JS,4*JS
41094           P(I,J)=P(I,J)+P(IN1+2,3)*P(IN1,J)
41095   920   CONTINUE
41096         DO 930 IN2=IN(3*JT+2),IN(2)-4*JS,4*JS
41097           P(I,J)=P(I,J)+P(IN2+2,3)*P(IN2,J)
41098   930   CONTINUE
41099   940 CONTINUE
41100       DHM(1)=FOUR(I,I)
41101       DHM(2)=2D0*FOUR(I,IN(1))
41102       DHM(3)=2D0*FOUR(I,IN(2))
41103       DHM(4)=2D0*FOUR(IN(1),IN(2))
41104  
41105 C...Find coefficients for Gamma expression.
41106       DO 960 IN2=IN(1)+1,IN(2),4
41107         DO 950 IN1=IN(1),IN2-1,4
41108           DHC=2D0*FOUR(IN1,IN2)
41109           DHG(1)=DHG(1)+P(IN1+2,JT)*P(IN2+2,JT)*DHC
41110           IF(IN1.EQ.IN(1)) DHG(2)=DHG(2)-JS*P(IN2+2,JT)*DHC
41111           IF(IN2.EQ.IN(2)) DHG(3)=DHG(3)+JS*P(IN1+2,JT)*DHC
41112           IF(IN1.EQ.IN(1).AND.IN2.EQ.IN(2)) DHG(4)=DHG(4)-DHC
41113   950   CONTINUE
41114   960 CONTINUE
41115  
41116 C...Solve (m2, Gamma) equation system for energies taken.
41117       DHS1=DHM(JR+1)*DHG(4)-DHM(4)*DHG(JR+1)
41118       IF(ABS(DHS1).LT.1D-4) GOTO 640
41119       DHS2=DHM(4)*(GAM(3)-DHG(1))-DHM(JT+1)*DHG(JR+1)-DHG(4)*
41120      &(P(I,5)**2-DHM(1))+DHG(JT+1)*DHM(JR+1)
41121       DHS3=DHM(JT+1)*(GAM(3)-DHG(1))-DHG(JT+1)*(P(I,5)**2-DHM(1))
41122       P(IN(JR)+2,4)=0.5D0*(SQRT(MAX(0D0,DHS2**2-4D0*DHS1*DHS3))/
41123      &ABS(DHS1)-DHS2/DHS1)
41124       IF(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4).LE.0D0) GOTO 640
41125       P(IN(JT)+2,4)=(P(I,5)**2-DHM(1)-DHM(JR+1)*P(IN(JR)+2,4))/
41126      &(DHM(JT+1)+DHM(4)*P(IN(JR)+2,4))
41127  
41128 C...Step to new region if necessary.
41129       IF(P(IN(JR)+2,4).GT.P(IN(JR)+2,3)) THEN
41130         P(IN(JR)+2,4)=P(IN(JR)+2,3)
41131         P(IN(JR)+2,JT)=1D0
41132         IN(JR)=IN(JR)+4*JS
41133         IF(JS*IN(JR).GT.JS*IN(4*JR)) GOTO 640
41134         IF(FOUR(IN(1),IN(2)).LE.1D-2) THEN
41135           P(IN(JT)+2,4)=P(IN(JT)+2,3)
41136           P(IN(JT)+2,JT)=0D0
41137           IN(JT)=IN(JT)+4*JS
41138         ENDIF
41139         GOTO 890
41140       ELSEIF(P(IN(JT)+2,4).GT.P(IN(JT)+2,3)) THEN
41141         P(IN(JT)+2,4)=P(IN(JT)+2,3)
41142         P(IN(JT)+2,JT)=0D0
41143         IN(JT)=IN(JT)+4*JS
41144         GOTO 890
41145       ENDIF
41146  
41147 C...Four-momentum of particle. Remaining quantities. Loop back.
41148   970 DO 980 J=1,4
41149         P(I,J)=P(I,J)+P(IN(1)+2,4)*P(IN(1),J)+P(IN(2)+2,4)*P(IN(2),J)
41150         P(N+NRS,J)=P(N+NRS,J)-P(I,J)
41151   980 CONTINUE
41152       IF(P(I,4).LT.P(I,5)) GOTO 640
41153       KFL(JT)=-KFL(3)
41154       PMQ(JT)=PMQ(3)
41155       PX(JT)=-PX(3)
41156       PY(JT)=-PY(3)
41157       GAM(JT)=GAM(3)
41158       IF(IN(3).NE.IN(3*JT+3)) THEN
41159         DO 990 J=1,4
41160           P(IN(3*JT+3),J)=P(IN(3),J)
41161           P(IN(3*JT+3)+1,J)=P(IN(3)+1,J)
41162   990   CONTINUE
41163       ENDIF
41164       DO 1000 JQ=1,2
41165         IN(3*JT+JQ)=IN(JQ)
41166         P(IN(JQ)+2,3)=P(IN(JQ)+2,3)-P(IN(JQ)+2,4)
41167         P(IN(JQ)+2,JT)=P(IN(JQ)+2,JT)-JS*(3-2*JQ)*P(IN(JQ)+2,4)
41168  1000 CONTINUE
41169       GOTO 800
41170  
41171 C...Final hadron: side, flavour, hadron, mass.
41172  1010 I=I+1
41173       K(I,1)=1
41174       K(I,3)=IE(JR)
41175       K(I,4)=0
41176       K(I,5)=0
41177       CALL PYKFDI(KFL(JR),-KFL(3),KFLDMP,K(I,2))
41178       IF(K(I,2).EQ.0) GOTO 640
41179       P(I,5)=PYMASS(K(I,2))
41180       PR(JR)=P(I,5)**2+(PX(JR)-PX(3))**2+(PY(JR)-PY(3))**2
41181  
41182 C...Final two hadrons: find common setup of four-vectors.
41183       JQ=1
41184       IF(P(IN(4)+2,3)*P(IN(5)+2,3)*FOUR(IN(4),IN(5)).LT.
41185      &P(IN(7)+2,3)*P(IN(8)+2,3)*FOUR(IN(7),IN(8))) JQ=2
41186       DHC12=FOUR(IN(3*JQ+1),IN(3*JQ+2))
41187       DHR1=FOUR(N+NRS,IN(3*JQ+2))/DHC12
41188       DHR2=FOUR(N+NRS,IN(3*JQ+1))/DHC12
41189       IF(IN(4).NE.IN(7).OR.IN(5).NE.IN(8)) THEN
41190         PX(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3))-PX(JQ)
41191         PY(3-JQ)=-FOUR(N+NRS,IN(3*JQ+3)+1)-PY(JQ)
41192         PR(3-JQ)=P(I+(JT+JQ-3)**2-1,5)**2+(PX(3-JQ)+(2*JQ-3)*JS*
41193      &  PX(3))**2+(PY(3-JQ)+(2*JQ-3)*JS*PY(3))**2
41194       ENDIF
41195  
41196 C...Solve kinematics for final two hadrons, if possible.
41197       WREM2=WREM2+(PX(1)+PX(2))**2+(PY(1)+PY(2))**2
41198       FD=(SQRT(PR(1))+SQRT(PR(2)))/SQRT(WREM2)
41199       IF(MJU(1)+MJU(2).NE.0.AND.I.EQ.ISAV+2.AND.FD.GE.1D0) GOTO 200
41200       IF(FD.GE.1D0) GOTO 640
41201       FA=WREM2+PR(JT)-PR(JR)
41202       FB=SQRT(MAX(0D0,FA**2-4D0*WREM2*PR(JT)))
41203       PREVCF=PARJ(42)
41204       IF(MSTJ(11).EQ.2) PREVCF=PARJ(39)
41205       PREV=1D0/(1D0+EXP(MIN(50D0,PREVCF*FB)))
41206       FB=SIGN(FB,JS*(PYR(0)-PREV))
41207       KFL1A=IABS(KFL(1))
41208       KFL2A=IABS(KFL(2))
41209       IF(MAX(MOD(KFL1A,10),MOD(KFL1A/1000,10),MOD(KFL2A,10),
41210      &MOD(KFL2A/1000,10)).GE.6) FB=SIGN(SQRT(MAX(0D0,FA**2-
41211      &4D0*WREM2*PR(JT))),DBLE(JS))
41212       DO 1020 J=1,4
41213         P(I-1,J)=(PX(JT)+PX(3))*P(IN(3*JQ+3),J)+(PY(JT)+PY(3))*
41214      &  P(IN(3*JQ+3)+1,J)+0.5D0*(DHR1*(FA+FB)*P(IN(3*JQ+1),J)+
41215      &  DHR2*(FA-FB)*P(IN(3*JQ+2),J))/WREM2
41216         P(I,J)=P(N+NRS,J)-P(I-1,J)
41217  1020 CONTINUE
41218       IF(P(I-1,4).LT.P(I-1,5).OR.P(I,4).LT.P(I,5)) GOTO 640
41219  
41220 C...Mark jets as fragmented and give daughter pointers.
41221       N=I-NRS+1
41222       DO 1030 I=NSAV+1,NSAV+NP
41223         IM=K(I,3)
41224         K(IM,1)=K(IM,1)+10
41225         IF(MSTU(16).NE.2) THEN
41226           K(IM,4)=NSAV+1
41227           K(IM,5)=NSAV+1
41228         ELSE
41229           K(IM,4)=NSAV+2
41230           K(IM,5)=N
41231         ENDIF
41232  1030 CONTINUE
41233  
41234 C...Document string system. Move up particles.
41235       NSAV=NSAV+1
41236       K(NSAV,1)=11
41237       K(NSAV,2)=92
41238       K(NSAV,3)=IP
41239       K(NSAV,4)=NSAV+1
41240       K(NSAV,5)=N
41241       DO 1040 J=1,4
41242         P(NSAV,J)=DPS(J)
41243         V(NSAV,J)=V(IP,J)
41244  1040 CONTINUE
41245       P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
41246       V(NSAV,5)=0D0
41247       DO 1060 I=NSAV+1,N
41248         DO 1050 J=1,5
41249           K(I,J)=K(I+NRS-1,J)
41250           P(I,J)=P(I+NRS-1,J)
41251           V(I,J)=0D0
41252  1050   CONTINUE
41253  1060 CONTINUE
41254       MSTU91=MSTU(90)
41255       DO 1070 IZ=MSTU90+1,MSTU91
41256         MSTU9T(IZ)=MSTU(90+IZ)-NRS+1-NSAV+N
41257         PARU9T(IZ)=PARU(90+IZ)
41258  1070 CONTINUE
41259       MSTU(90)=MSTU90
41260  
41261 C...Order particles in rank along the chain. Update mother pointer.
41262       DO 1090 I=NSAV+1,N
41263         DO 1080 J=1,5
41264           K(I-NSAV+N,J)=K(I,J)
41265           P(I-NSAV+N,J)=P(I,J)
41266  1080   CONTINUE
41267  1090 CONTINUE
41268       I1=NSAV
41269       DO 1120 I=N+1,2*N-NSAV
41270         IF(K(I,3).NE.IE(1)) GOTO 1120
41271         I1=I1+1
41272         DO 1100 J=1,5
41273           K(I1,J)=K(I,J)
41274           P(I1,J)=P(I,J)
41275  1100   CONTINUE
41276         IF(MSTU(16).NE.2) K(I1,3)=NSAV
41277         DO 1110 IZ=MSTU90+1,MSTU91
41278           IF(MSTU9T(IZ).EQ.I) THEN
41279             MSTU(90)=MSTU(90)+1
41280             MSTU(90+MSTU(90))=I1
41281             PARU(90+MSTU(90))=PARU9T(IZ)
41282           ENDIF
41283  1110   CONTINUE
41284  1120 CONTINUE
41285       DO 1150 I=2*N-NSAV,N+1,-1
41286         IF(K(I,3).EQ.IE(1)) GOTO 1150
41287         I1=I1+1
41288         DO 1130 J=1,5
41289           K(I1,J)=K(I,J)
41290           P(I1,J)=P(I,J)
41291  1130   CONTINUE
41292         IF(MSTU(16).NE.2) K(I1,3)=NSAV
41293         DO 1140 IZ=MSTU90+1,MSTU91
41294           IF(MSTU9T(IZ).EQ.I) THEN
41295             MSTU(90)=MSTU(90)+1
41296             MSTU(90+MSTU(90))=I1
41297             PARU(90+MSTU(90))=PARU9T(IZ)
41298           ENDIF
41299  1140   CONTINUE
41300  1150 CONTINUE
41301  
41302 C...Boost back particle system. Set production vertices.
41303       IF(MBST.EQ.0) THEN
41304         MSTU(33)=1
41305         CALL PYROBO(NSAV+1,N,0D0,0D0,DPS(1)/DPS(4),DPS(2)/DPS(4),
41306      &  DPS(3)/DPS(4))
41307       ELSE
41308         DO 1160 I=NSAV+1,N
41309           HHPMT=P(I,1)**2+P(I,2)**2+P(I,5)**2
41310           IF(P(I,3).GT.0D0) THEN
41311             HHPEZ=(P(I,4)+P(I,3))*HHBZ
41312             P(I,3)=0.5D0*(HHPEZ-HHPMT/HHPEZ)
41313             P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
41314           ELSE
41315             HHPEZ=(P(I,4)-P(I,3))/HHBZ
41316             P(I,3)=-0.5D0*(HHPEZ-HHPMT/HHPEZ)
41317             P(I,4)=0.5D0*(HHPEZ+HHPMT/HHPEZ)
41318           ENDIF
41319  1160   CONTINUE
41320       ENDIF
41321       DO 1180 I=NSAV+1,N
41322         DO 1170 J=1,4
41323           V(I,J)=V(IP,J)
41324  1170   CONTINUE
41325  1180 CONTINUE
41326  
41327       RETURN
41328       END
41329  
41330 C*********************************************************************
41331  
41332 C...PYINDF
41333 C...Handles the fragmentation of a jet system (or a single
41334 C...jet) according to independent fragmentation models.
41335  
41336       SUBROUTINE PYINDF(IP)
41337  
41338 C...Double precision and integer declarations.
41339       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
41340       IMPLICIT INTEGER(I-N)
41341       INTEGER PYK,PYCHGE,PYCOMP
41342 C...Commonblocks.
41343       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
41344       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
41345       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
41346       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
41347 C...Local arrays.
41348       DIMENSION DPS(5),PSI(4),NFI(3),NFL(3),IFET(3),KFLF(3),
41349      &KFLO(2),PXO(2),PYO(2),WO(2)
41350  
41351 C.. MOPS error message
41352       IF(MSTJ(12).GT.3) CALL PYERRM(9,'(PYINDF:) MSTJ(12)>3 options'//
41353      &' are not treated as expected in independent fragmentation')
41354  
41355 C...Reset counters. Identify parton system and take copy. Check flavour.
41356       NSAV=N
41357       MSTU90=MSTU(90)
41358       NJET=0
41359       KQSUM=0
41360       DO 100 J=1,5
41361         DPS(J)=0D0
41362   100 CONTINUE
41363       I=IP-1
41364   110 I=I+1
41365       IF(I.GT.MIN(N,MSTU(4)-MSTU(32))) THEN
41366         CALL PYERRM(12,'(PYINDF:) failed to reconstruct jet system')
41367         IF(MSTU(21).GE.1) RETURN
41368       ENDIF
41369       IF(K(I,1).NE.1.AND.K(I,1).NE.2) GOTO 110
41370       KC=PYCOMP(K(I,2))
41371       IF(KC.EQ.0) GOTO 110
41372       KQ=KCHG(KC,2)*ISIGN(1,K(I,2))
41373       IF(KQ.EQ.0) GOTO 110
41374       NJET=NJET+1
41375       IF(KQ.NE.2) KQSUM=KQSUM+KQ
41376       DO 120 J=1,5
41377         K(NSAV+NJET,J)=K(I,J)
41378         P(NSAV+NJET,J)=P(I,J)
41379         DPS(J)=DPS(J)+P(I,J)
41380   120 CONTINUE
41381       K(NSAV+NJET,3)=I
41382       IF(K(I,1).EQ.2.OR.(MSTJ(3).LE.5.AND.N.GT.I.AND.
41383      &K(I+1,1).EQ.2)) GOTO 110
41384       IF(NJET.NE.1.AND.KQSUM.NE.0) THEN
41385         CALL PYERRM(12,'(PYINDF:) unphysical flavour combination')
41386         IF(MSTU(21).GE.1) RETURN
41387       ENDIF
41388  
41389 C...Boost copied system to CM frame. Find CM energy and sum flavours.
41390       IF(NJET.NE.1) THEN
41391         MSTU(33)=1
41392         CALL PYROBO(NSAV+1,NSAV+NJET,0D0,0D0,-DPS(1)/DPS(4),
41393      &  -DPS(2)/DPS(4),-DPS(3)/DPS(4))
41394       ENDIF
41395       PECM=0D0
41396       DO 130 J=1,3
41397         NFI(J)=0
41398   130 CONTINUE
41399       DO 140 I=NSAV+1,NSAV+NJET
41400         PECM=PECM+P(I,4)
41401         KFA=IABS(K(I,2))
41402         IF(KFA.LE.3) THEN
41403           NFI(KFA)=NFI(KFA)+ISIGN(1,K(I,2))
41404         ELSEIF(KFA.GT.1000) THEN
41405           KFLA=MOD(KFA/1000,10)
41406           KFLB=MOD(KFA/100,10)
41407           IF(KFLA.LE.3) NFI(KFLA)=NFI(KFLA)+ISIGN(1,K(I,2))
41408           IF(KFLB.LE.3) NFI(KFLB)=NFI(KFLB)+ISIGN(1,K(I,2))
41409         ENDIF
41410   140 CONTINUE
41411  
41412 C...Loop over attempts made. Reset counters.
41413       NTRY=0
41414   150 NTRY=NTRY+1
41415       IF(NTRY.GT.200) THEN
41416         CALL PYERRM(14,'(PYINDF:) caught in infinite loop')
41417         IF(MSTU(21).GE.1) RETURN
41418       ENDIF
41419       N=NSAV+NJET
41420       MSTU(90)=MSTU90
41421       DO 160 J=1,3
41422         NFL(J)=NFI(J)
41423         IFET(J)=0
41424         KFLF(J)=0
41425   160 CONTINUE
41426  
41427 C...Loop over jets to be fragmented.
41428       DO 230 IP1=NSAV+1,NSAV+NJET
41429         MSTJ(91)=0
41430         NSAV1=N
41431         MSTU91=MSTU(90)
41432  
41433 C...Initial flavour and momentum values. Jet along +z axis.
41434         KFLH=IABS(K(IP1,2))
41435         IF(KFLH.GT.10) KFLH=MOD(KFLH/1000,10)
41436         KFLO(2)=0
41437         WF=P(IP1,4)+SQRT(P(IP1,1)**2+P(IP1,2)**2+P(IP1,3)**2)
41438  
41439 C...Initial values for quark or diquark jet.
41440   170   IF(IABS(K(IP1,2)).NE.21) THEN
41441           NSTR=1
41442           KFLO(1)=K(IP1,2)
41443           CALL PYPTDI(0,PXO(1),PYO(1))
41444           WO(1)=WF
41445  
41446 C...Initial values for gluon treated like random quark jet.
41447         ELSEIF(MSTJ(2).LE.2) THEN
41448           NSTR=1
41449           IF(MSTJ(2).EQ.2) MSTJ(91)=1
41450           KFLO(1)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
41451           CALL PYPTDI(0,PXO(1),PYO(1))
41452           WO(1)=WF
41453  
41454 C...Initial values for gluon treated like quark-antiquark jet pair,
41455 C...sharing energy according to Altarelli-Parisi splitting function.
41456         ELSE
41457           NSTR=2
41458           IF(MSTJ(2).EQ.4) MSTJ(91)=1
41459           KFLO(1)=INT(1D0+(2D0+PARJ(2))*PYR(0))*(-1)**INT(PYR(0)+0.5D0)
41460           KFLO(2)=-KFLO(1)
41461           CALL PYPTDI(0,PXO(1),PYO(1))
41462           PXO(2)=-PXO(1)
41463           PYO(2)=-PYO(1)
41464           WO(1)=WF*PYR(0)**(1D0/3D0)
41465           WO(2)=WF-WO(1)
41466         ENDIF
41467  
41468 C...Initial values for rank, flavour, pT and W+.
41469         DO 220 ISTR=1,NSTR
41470   180     I=N
41471           MSTU(90)=MSTU91
41472           IRANK=0
41473           KFL1=KFLO(ISTR)
41474           PX1=PXO(ISTR)
41475           PY1=PYO(ISTR)
41476           W=WO(ISTR)
41477  
41478 C...New hadron. Generate flavour and hadron species.
41479   190     I=I+1
41480           IF(I.GE.MSTU(4)-MSTU(32)-NJET-5) THEN
41481             CALL PYERRM(11,'(PYINDF:) no more memory left in PYJETS')
41482             IF(MSTU(21).GE.1) RETURN
41483           ENDIF
41484           IRANK=IRANK+1
41485           K(I,1)=1
41486           K(I,3)=IP1
41487           K(I,4)=0
41488           K(I,5)=0
41489   200     CALL PYKFDI(KFL1,0,KFL2,K(I,2))
41490           IF(K(I,2).EQ.0) GOTO 180
41491           IF(IRANK.EQ.1.AND.IABS(KFL1).LE.10.AND.IABS(KFL2).GT.10) THEN
41492             IF(PYR(0).GT.PARJ(19)) GOTO 200
41493           ENDIF
41494  
41495 C...Find hadron mass. Generate four-momentum.
41496           P(I,5)=PYMASS(K(I,2))
41497           CALL PYPTDI(KFL1,PX2,PY2)
41498           P(I,1)=PX1+PX2
41499           P(I,2)=PY1+PY2
41500           PR=P(I,5)**2+P(I,1)**2+P(I,2)**2
41501           CALL PYZDIS(KFL1,KFL2,PR,Z)
41502           MZSAV=0
41503           IF(IABS(KFL1).GE.4.AND.IABS(KFL1).LE.8.AND.MSTU(90).LT.8) THEN
41504             MZSAV=1
41505             MSTU(90)=MSTU(90)+1
41506             MSTU(90+MSTU(90))=I
41507             PARU(90+MSTU(90))=Z
41508           ENDIF
41509           P(I,3)=0.5D0*(Z*W-PR/MAX(1D-4,Z*W))
41510           P(I,4)=0.5D0*(Z*W+PR/MAX(1D-4,Z*W))
41511           IF(MSTJ(3).GE.1.AND.IRANK.EQ.1.AND.KFLH.GE.4.AND.
41512      &    P(I,3).LE.0.001D0) THEN
41513             IF(W.GE.P(I,5)+0.5D0*PARJ(32)) GOTO 180
41514             P(I,3)=0.0001D0
41515             P(I,4)=SQRT(PR)
41516             Z=P(I,4)/W
41517           ENDIF
41518  
41519 C...Remaining flavour and momentum.
41520           KFL1=-KFL2
41521           PX1=-PX2
41522           PY1=-PY2
41523           W=(1D0-Z)*W
41524           DO 210 J=1,5
41525             V(I,J)=0D0
41526   210     CONTINUE
41527  
41528 C...Check if pL acceptable. Go back for new hadron if enough energy.
41529           IF(MSTJ(3).GE.0.AND.P(I,3).LT.0D0) THEN
41530             I=I-1
41531             IF(MZSAV.EQ.1) MSTU(90)=MSTU(90)-1
41532           ENDIF
41533           IF(W.GT.PARJ(31)) GOTO 190
41534           N=I
41535   220   CONTINUE
41536         IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) WF=WF+0.1D0*PARJ(32)
41537         IF(MOD(MSTJ(3),5).EQ.4.AND.N.EQ.NSAV1) GOTO 170
41538  
41539 C...Rotate jet to new direction.
41540         THE=PYANGL(P(IP1,3),SQRT(P(IP1,1)**2+P(IP1,2)**2))
41541         PHI=PYANGL(P(IP1,1),P(IP1,2))
41542         MSTU(33)=1
41543         CALL PYROBO(NSAV1+1,N,THE,PHI,0D0,0D0,0D0)
41544         K(K(IP1,3),4)=NSAV1+1
41545         K(K(IP1,3),5)=N
41546  
41547 C...End of jet generation loop. Skip conservation in some cases.
41548   230 CONTINUE
41549       IF(NJET.EQ.1.OR.MSTJ(3).LE.0) GOTO 490
41550       IF(MOD(MSTJ(3),5).NE.0.AND.N-NSAV-NJET.LT.2) GOTO 150
41551  
41552 C...Subtract off produced hadron flavours, finished if zero.
41553       DO 240 I=NSAV+NJET+1,N
41554         KFA=IABS(K(I,2))
41555         KFLA=MOD(KFA/1000,10)
41556         KFLB=MOD(KFA/100,10)
41557         KFLC=MOD(KFA/10,10)
41558         IF(KFLA.EQ.0) THEN
41559           IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))*(-1)**KFLB
41560           IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(I,2))*(-1)**KFLB
41561         ELSE
41562           IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)-ISIGN(1,K(I,2))
41563           IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)-ISIGN(1,K(I,2))
41564           IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISIGN(1,K(I,2))
41565         ENDIF
41566   240 CONTINUE
41567       NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
41568      &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
41569       IF(NREQ.EQ.0) GOTO 320
41570  
41571 C...Take away flavour of low-momentum particles until enough freedom.
41572       NREM=0
41573   250 IREM=0
41574       P2MIN=PECM**2
41575       DO 260 I=NSAV+NJET+1,N
41576         P2=P(I,1)**2+P(I,2)**2+P(I,3)**2
41577         IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) IREM=I
41578         IF(K(I,1).EQ.1.AND.P2.LT.P2MIN) P2MIN=P2
41579   260 CONTINUE
41580       IF(IREM.EQ.0) GOTO 150
41581       K(IREM,1)=7
41582       KFA=IABS(K(IREM,2))
41583       KFLA=MOD(KFA/1000,10)
41584       KFLB=MOD(KFA/100,10)
41585       KFLC=MOD(KFA/10,10)
41586       IF(KFLA.GE.4.OR.KFLB.GE.4) K(IREM,1)=8
41587       IF(K(IREM,1).EQ.8) GOTO 250
41588       IF(KFLA.EQ.0) THEN
41589         ISGN=ISIGN(1,K(IREM,2))*(-1)**KFLB
41590         IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISGN
41591         IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)-ISGN
41592       ELSE
41593         IF(KFLA.LE.3) NFL(KFLA)=NFL(KFLA)+ISIGN(1,K(IREM,2))
41594         IF(KFLB.LE.3) NFL(KFLB)=NFL(KFLB)+ISIGN(1,K(IREM,2))
41595         IF(KFLC.LE.3) NFL(KFLC)=NFL(KFLC)+ISIGN(1,K(IREM,2))
41596       ENDIF
41597       NREM=NREM+1
41598       NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
41599      &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
41600       IF(NREQ.GT.NREM) GOTO 250
41601       DO 270 I=NSAV+NJET+1,N
41602         IF(K(I,1).EQ.8) K(I,1)=1
41603   270 CONTINUE
41604  
41605 C...Find combination of existing and new flavours for hadron.
41606   280 NFET=2
41607       IF(NFL(1)+NFL(2)+NFL(3).NE.0) NFET=3
41608       IF(NREQ.LT.NREM) NFET=1
41609       IF(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)).EQ.0) NFET=0
41610       DO 290 J=1,NFET
41611         IFET(J)=1+(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3)))*PYR(0)
41612         KFLF(J)=ISIGN(1,NFL(1))
41613         IF(IFET(J).GT.IABS(NFL(1))) KFLF(J)=ISIGN(2,NFL(2))
41614         IF(IFET(J).GT.IABS(NFL(1))+IABS(NFL(2))) KFLF(J)=ISIGN(3,NFL(3))
41615   290 CONTINUE
41616       IF(NFET.EQ.2.AND.(IFET(1).EQ.IFET(2).OR.KFLF(1)*KFLF(2).GT.0))
41617      &GOTO 280
41618       IF(NFET.EQ.3.AND.(IFET(1).EQ.IFET(2).OR.IFET(1).EQ.IFET(3).OR.
41619      &IFET(2).EQ.IFET(3).OR.KFLF(1)*KFLF(2).LT.0.OR.KFLF(1)*KFLF(3)
41620      &.LT.0.OR.KFLF(1)*(NFL(1)+NFL(2)+NFL(3)).LT.0)) GOTO 280
41621       IF(NFET.EQ.0) KFLF(1)=1+INT((2D0+PARJ(2))*PYR(0))
41622       IF(NFET.EQ.0) KFLF(2)=-KFLF(1)
41623       IF(NFET.EQ.1) KFLF(2)=ISIGN(1+INT((2D0+PARJ(2))*PYR(0)),-KFLF(1))
41624       IF(NFET.LE.2) KFLF(3)=0
41625       IF(KFLF(3).NE.0) THEN
41626         KFLFC=ISIGN(1000*MAX(IABS(KFLF(1)),IABS(KFLF(3)))+
41627      &  100*MIN(IABS(KFLF(1)),IABS(KFLF(3)))+1,KFLF(1))
41628         IF(KFLF(1).EQ.KFLF(3).OR.(1D0+3D0*PARJ(4))*PYR(0).GT.1D0)
41629      &  KFLFC=KFLFC+ISIGN(2,KFLFC)
41630       ELSE
41631         KFLFC=KFLF(1)
41632       ENDIF
41633       CALL PYKFDI(KFLFC,KFLF(2),KFLDMP,KF)
41634       IF(KF.EQ.0) GOTO 280
41635       DO 300 J=1,MAX(2,NFET)
41636         NFL(IABS(KFLF(J)))=NFL(IABS(KFLF(J)))-ISIGN(1,KFLF(J))
41637   300 CONTINUE
41638  
41639 C...Store hadron at random among free positions.
41640       NPOS=MIN(1+INT(PYR(0)*NREM),NREM)
41641       DO 310 I=NSAV+NJET+1,N
41642         IF(K(I,1).EQ.7) NPOS=NPOS-1
41643         IF(K(I,1).EQ.1.OR.NPOS.NE.0) GOTO 310
41644         K(I,1)=1
41645         K(I,2)=KF
41646         P(I,5)=PYMASS(K(I,2))
41647         P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
41648   310 CONTINUE
41649       NREM=NREM-1
41650       NREQ=(IABS(NFL(1))+IABS(NFL(2))+IABS(NFL(3))-IABS(NFL(1)+
41651      &NFL(2)+NFL(3)))/2+IABS(NFL(1)+NFL(2)+NFL(3))/3
41652       IF(NREM.GT.0) GOTO 280
41653  
41654 C...Compensate for missing momentum in global scheme (3 options).
41655   320 IF(MOD(MSTJ(3),5).NE.0.AND.MOD(MSTJ(3),5).NE.4) THEN
41656         DO 340 J=1,3
41657           PSI(J)=0D0
41658           DO 330 I=NSAV+NJET+1,N
41659             PSI(J)=PSI(J)+P(I,J)
41660   330     CONTINUE
41661   340   CONTINUE
41662         PSI(4)=PSI(1)**2+PSI(2)**2+PSI(3)**2
41663         PWS=0D0
41664         DO 350 I=NSAV+NJET+1,N
41665           IF(MOD(MSTJ(3),5).EQ.1) PWS=PWS+P(I,4)
41666           IF(MOD(MSTJ(3),5).EQ.2) PWS=PWS+SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
41667      &    PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
41668           IF(MOD(MSTJ(3),5).EQ.3) PWS=PWS+1D0
41669   350   CONTINUE
41670         DO 370 I=NSAV+NJET+1,N
41671           IF(MOD(MSTJ(3),5).EQ.1) PW=P(I,4)
41672           IF(MOD(MSTJ(3),5).EQ.2) PW=SQRT(P(I,5)**2+(PSI(1)*P(I,1)+
41673      &    PSI(2)*P(I,2)+PSI(3)*P(I,3))**2/PSI(4))
41674           IF(MOD(MSTJ(3),5).EQ.3) PW=1D0
41675           DO 360 J=1,3
41676             P(I,J)=P(I,J)-PSI(J)*PW/PWS
41677   360     CONTINUE
41678           P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
41679   370   CONTINUE
41680  
41681 C...Compensate for missing momentum withing each jet separately.
41682       ELSEIF(MOD(MSTJ(3),5).EQ.4) THEN
41683         DO 390 I=N+1,N+NJET
41684           K(I,1)=0
41685           DO 380 J=1,5
41686             P(I,J)=0D0
41687   380     CONTINUE
41688   390   CONTINUE
41689         DO 410 I=NSAV+NJET+1,N
41690           IR1=K(I,3)
41691           IR2=N+IR1-NSAV
41692           K(IR2,1)=K(IR2,1)+1
41693           PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
41694      &    (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
41695           DO 400 J=1,3
41696             P(IR2,J)=P(IR2,J)+P(I,J)-PLS*P(IR1,J)
41697   400     CONTINUE
41698           P(IR2,4)=P(IR2,4)+P(I,4)
41699           P(IR2,5)=P(IR2,5)+PLS
41700   410   CONTINUE
41701         PSS=0D0
41702         DO 420 I=N+1,N+NJET
41703           IF(K(I,1).NE.0) PSS=PSS+P(I,4)/(PECM*(0.8D0*P(I,5)+0.2D0))
41704   420   CONTINUE
41705         DO 440 I=NSAV+NJET+1,N
41706           IR1=K(I,3)
41707           IR2=N+IR1-NSAV
41708           PLS=(P(I,1)*P(IR1,1)+P(I,2)*P(IR1,2)+P(I,3)*P(IR1,3))/
41709      &    (P(IR1,1)**2+P(IR1,2)**2+P(IR1,3)**2)
41710           DO 430 J=1,3
41711             P(I,J)=P(I,J)-P(IR2,J)/K(IR2,1)+(1D0/(P(IR2,5)*PSS)-1D0)*
41712      &      PLS*P(IR1,J)
41713   430     CONTINUE
41714           P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
41715   440   CONTINUE
41716       ENDIF
41717  
41718 C...Scale momenta for energy conservation.
41719       IF(MOD(MSTJ(3),5).NE.0) THEN
41720         PMS=0D0
41721         PES=0D0
41722         PQS=0D0
41723         DO 450 I=NSAV+NJET+1,N
41724           PMS=PMS+P(I,5)
41725           PES=PES+P(I,4)
41726           PQS=PQS+P(I,5)**2/P(I,4)
41727   450   CONTINUE
41728         IF(PMS.GE.PECM) GOTO 150
41729         NECO=0
41730   460   NECO=NECO+1
41731         PFAC=(PECM-PQS)/(PES-PQS)
41732         PES=0D0
41733         PQS=0D0
41734         DO 480 I=NSAV+NJET+1,N
41735           DO 470 J=1,3
41736             P(I,J)=PFAC*P(I,J)
41737   470     CONTINUE
41738           P(I,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2+P(I,5)**2)
41739           PES=PES+P(I,4)
41740           PQS=PQS+P(I,5)**2/P(I,4)
41741   480   CONTINUE
41742         IF(NECO.LT.10.AND.ABS(PECM-PES).GT.2D-6*PECM) GOTO 460
41743       ENDIF
41744  
41745 C...Origin of produced particles and parton daughter pointers.
41746   490 DO 500 I=NSAV+NJET+1,N
41747         IF(MSTU(16).NE.2) K(I,3)=NSAV+1
41748         IF(MSTU(16).EQ.2) K(I,3)=K(K(I,3),3)
41749   500 CONTINUE
41750       DO 510 I=NSAV+1,NSAV+NJET
41751         I1=K(I,3)
41752         K(I1,1)=K(I1,1)+10
41753         IF(MSTU(16).NE.2) THEN
41754           K(I1,4)=NSAV+1
41755           K(I1,5)=NSAV+1
41756         ELSE
41757           K(I1,4)=K(I1,4)-NJET+1
41758           K(I1,5)=K(I1,5)-NJET+1
41759           IF(K(I1,5).LT.K(I1,4)) THEN
41760             K(I1,4)=0
41761             K(I1,5)=0
41762           ENDIF
41763         ENDIF
41764   510 CONTINUE
41765  
41766 C...Document independent fragmentation system. Remove copy of jets.
41767       NSAV=NSAV+1
41768       K(NSAV,1)=11
41769       K(NSAV,2)=93
41770       K(NSAV,3)=IP
41771       K(NSAV,4)=NSAV+1
41772       K(NSAV,5)=N-NJET+1
41773       DO 520 J=1,4
41774         P(NSAV,J)=DPS(J)
41775         V(NSAV,J)=V(IP,J)
41776   520 CONTINUE
41777       P(NSAV,5)=SQRT(MAX(0D0,DPS(4)**2-DPS(1)**2-DPS(2)**2-DPS(3)**2))
41778       V(NSAV,5)=0D0
41779       DO 540 I=NSAV+NJET,N
41780         DO 530 J=1,5
41781           K(I-NJET+1,J)=K(I,J)
41782           P(I-NJET+1,J)=P(I,J)
41783           V(I-NJET+1,J)=V(I,J)
41784   530   CONTINUE
41785   540 CONTINUE
41786       N=N-NJET+1
41787       DO 550 IZ=MSTU90+1,MSTU(90)
41788         MSTU(90+IZ)=MSTU(90+IZ)-NJET+1
41789   550 CONTINUE
41790  
41791 C...Boost back particle system. Set production vertices.
41792       IF(NJET.NE.1) CALL PYROBO(NSAV+1,N,0D0,0D0,DPS(1)/DPS(4),
41793      &DPS(2)/DPS(4),DPS(3)/DPS(4))
41794       DO 570 I=NSAV+1,N
41795         DO 560 J=1,4
41796           V(I,J)=V(IP,J)
41797   560   CONTINUE
41798   570 CONTINUE
41799  
41800       RETURN
41801       END
41802  
41803 C*********************************************************************
41804  
41805 C...PYDECY
41806 C...Handles the decay of unstable particles.
41807  
41808       SUBROUTINE PYDECY(IP)
41809  
41810 C...Double precision and integer declarations.
41811       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
41812       IMPLICIT INTEGER(I-N)
41813       INTEGER PYK,PYCHGE,PYCOMP
41814 C...Commonblocks.
41815       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
41816       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
41817       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
41818       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
41819       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
41820 C...Local arrays.
41821       DIMENSION VDCY(4),KFLO(4),KFL1(4),PV(10,5),RORD(10),UE(3),BE(3),
41822      &WTCOR(10),PTAU(4),PCMTAU(4),DBETAU(3)
41823       CHARACTER CIDC*4
41824       DATA WTCOR/2D0,5D0,15D0,60D0,250D0,1500D0,1.2D4,1.2D5,150D0,16D0/
41825  
41826 C...Functions: momentum in two-particle decays and four-product.
41827       PAWT(A,B,C)=SQRT((A**2-(B+C)**2)*(A**2-(B-C)**2))/(2D0*A)
41828       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)
41829  
41830 C...Initial values.
41831       NTRY=0
41832       NSAV=N
41833       KFA=IABS(K(IP,2))
41834       KFS=ISIGN(1,K(IP,2))
41835       KC=PYCOMP(KFA)
41836       MSTJ(92)=0
41837  
41838 C...Choose lifetime and determine decay vertex.
41839       IF(K(IP,1).EQ.5) THEN
41840         V(IP,5)=0D0
41841       ELSEIF(K(IP,1).NE.4) THEN
41842         V(IP,5)=-PMAS(KC,4)*LOG(PYR(0))
41843       ENDIF
41844       DO 100 J=1,4
41845         VDCY(J)=V(IP,J)+V(IP,5)*P(IP,J)/P(IP,5)
41846   100 CONTINUE
41847  
41848 C...Determine whether decay allowed or not.
41849       MOUT=0
41850       IF(MSTJ(22).EQ.2) THEN
41851         IF(PMAS(KC,4).GT.PARJ(71)) MOUT=1
41852       ELSEIF(MSTJ(22).EQ.3) THEN
41853         IF(VDCY(1)**2+VDCY(2)**2+VDCY(3)**2.GT.PARJ(72)**2) MOUT=1
41854       ELSEIF(MSTJ(22).EQ.4) THEN
41855         IF(VDCY(1)**2+VDCY(2)**2.GT.PARJ(73)**2) MOUT=1
41856         IF(ABS(VDCY(3)).GT.PARJ(74)) MOUT=1
41857       ENDIF
41858       IF(MOUT.EQ.1.AND.K(IP,1).NE.5) THEN
41859         K(IP,1)=4
41860         RETURN
41861       ENDIF
41862  
41863 C...Interface to external tau decay library (for tau polarization).
41864       IF(KFA.EQ.15.AND.MSTJ(28).GE.1) THEN
41865  
41866 C...Starting values for pointers and momenta.
41867         ITAU=IP
41868         DO 110 J=1,4
41869           PTAU(J)=P(ITAU,J)
41870           PCMTAU(J)=P(ITAU,J)
41871   110   CONTINUE
41872  
41873 C...Iterate to find position and code of mother of tau.
41874         IMTAU=ITAU
41875   120   IMTAU=K(IMTAU,3)
41876  
41877         IF(IMTAU.EQ.0) THEN
41878 C...If no known origin then impossible to do anything further.
41879           KFORIG=0
41880           IORIG=0
41881  
41882         ELSEIF(K(IMTAU,2).EQ.K(ITAU,2)) THEN
41883 C...If tau -> tau + gamma then add gamma energy and loop.
41884           IF(K(K(IMTAU,4),2).EQ.22) THEN
41885             DO 130 J=1,4
41886               PCMTAU(J)=PCMTAU(J)+P(K(IMTAU,4),J)
41887   130       CONTINUE
41888           ELSEIF(K(K(IMTAU,5),2).EQ.22) THEN
41889             DO 140 J=1,4
41890               PCMTAU(J)=PCMTAU(J)+P(K(IMTAU,5),J)
41891   140       CONTINUE
41892           ENDIF
41893           GOTO 120
41894  
41895         ELSEIF(IABS(K(IMTAU,2)).GT.100) THEN
41896 C...If coming from weak decay of hadron then W is not stored in record,
41897 C...but can be reconstructed by adding neutrino momentum.
41898           KFORIG=-ISIGN(24,K(ITAU,2))
41899           IORIG=0
41900           DO 160 II=K(IMTAU,4),K(IMTAU,5)
41901             IF(K(II,2)*ISIGN(1,K(ITAU,2)).EQ.-16) THEN
41902               DO 150 J=1,4
41903                 PCMTAU(J)=PCMTAU(J)+P(II,J)
41904   150         CONTINUE
41905             ENDIF
41906   160     CONTINUE
41907  
41908         ELSE
41909 C...If coming from resonance decay then find latest copy of this
41910 C...resonance (may not completely agree).
41911           KFORIG=K(IMTAU,2)
41912           IORIG=IMTAU
41913           DO 170 II=IMTAU+1,IP-1
41914             IF(K(II,2).EQ.KFORIG.AND.K(II,3).EQ.IORIG.AND.
41915      &      ABS(P(II,5)-P(IORIG,5)).LT.1D-5*P(IORIG,5)) IORIG=II
41916   170     CONTINUE
41917           DO 180 J=1,4
41918             PCMTAU(J)=P(IORIG,J)
41919   180     CONTINUE
41920         ENDIF
41921  
41922 C...Boost tau to rest frame of production process (where known)
41923 C...and rotate it to sit along +z axis.
41924         DO 190 J=1,3
41925           DBETAU(J)=PCMTAU(J)/PCMTAU(4)
41926   190   CONTINUE
41927         IF(KFORIG.NE.0) CALL PYROBO(ITAU,ITAU,0D0,0D0,-DBETAU(1),
41928      &  -DBETAU(2),-DBETAU(3))
41929         PHITAU=PYANGL(P(ITAU,1),P(ITAU,2))
41930         CALL PYROBO(ITAU,ITAU,0D0,-PHITAU,0D0,0D0,0D0)
41931         THETAU=PYANGL(P(ITAU,3),P(ITAU,1))
41932         CALL PYROBO(ITAU,ITAU,-THETAU,0D0,0D0,0D0,0D0)
41933  
41934 C...Call tau decay routine (if meaningful) and fill extra info.
41935         IF(KFORIG.NE.0.OR.MSTJ(28).EQ.2) THEN
41936           CALL PYTAUD(ITAU,IORIG,KFORIG,NDECAY)
41937           DO 200 II=NSAV+1,NSAV+NDECAY
41938             K(II,1)=1
41939             K(II,3)=IP
41940             K(II,4)=0
41941             K(II,5)=0
41942   200     CONTINUE
41943           N=NSAV+NDECAY
41944         ENDIF
41945  
41946 C...Boost back decay tau and decay products.
41947         DO 210 J=1,4
41948           P(ITAU,J)=PTAU(J)
41949   210   CONTINUE
41950         IF(KFORIG.NE.0.OR.MSTJ(28).EQ.2) THEN
41951           CALL PYROBO(NSAV+1,N,THETAU,PHITAU,0D0,0D0,0D0)
41952           IF(KFORIG.NE.0) CALL PYROBO(NSAV+1,N,0D0,0D0,DBETAU(1),
41953      &    DBETAU(2),DBETAU(3))
41954  
41955 C...Skip past ordinary tau decay treatment.
41956           MMAT=0
41957           MBST=0
41958           ND=0
41959           GOTO 630
41960         ENDIF
41961       ENDIF
41962  
41963 C...B-Bbar mixing: flip sign of meson appropriately.
41964       MMIX=0
41965       IF((KFA.EQ.511.OR.KFA.EQ.531).AND.MSTJ(26).GE.1) THEN
41966         XBBMIX=PARJ(76)
41967         IF(KFA.EQ.531) XBBMIX=PARJ(77)
41968         IF(SIN(0.5D0*XBBMIX*V(IP,5)/PMAS(KC,4))**2.GT.PYR(0)) MMIX=1
41969         IF(MMIX.EQ.1) KFS=-KFS
41970       ENDIF
41971  
41972 C...Check existence of decay channels. Particle/antiparticle rules.
41973       KCA=KC
41974       IF(MDCY(KC,2).GT.0) THEN
41975         MDMDCY=MDME(MDCY(KC,2),2)
41976         IF(MDMDCY.GT.80.AND.MDMDCY.LE.90) KCA=MDMDCY
41977       ENDIF
41978       IF(MDCY(KCA,2).LE.0.OR.MDCY(KCA,3).LE.0) THEN
41979         CALL PYERRM(9,'(PYDECY:) no decay channel defined')
41980         RETURN
41981       ENDIF
41982       IF(MOD(KFA/1000,10).EQ.0.AND.KCA.EQ.85) KFS=-KFS
41983       IF(KCHG(KC,3).EQ.0) THEN
41984         KFSP=1
41985         KFSN=0
41986         IF(PYR(0).GT.0.5D0) KFS=-KFS
41987       ELSEIF(KFS.GT.0) THEN
41988         KFSP=1
41989         KFSN=0
41990       ELSE
41991         KFSP=0
41992         KFSN=1
41993       ENDIF
41994  
41995 C...Sum branching ratios of allowed decay channels.
41996   220 NOPE=0
41997       BRSU=0D0
41998       DO 230 IDL=MDCY(KCA,2),MDCY(KCA,2)+MDCY(KCA,3)-1
41999         IF(MDME(IDL,1).NE.1.AND.KFSP*MDME(IDL,1).NE.2.AND.
42000      &  KFSN*MDME(IDL,1).NE.3) GOTO 230
42001         IF(MDME(IDL,2).GT.100) GOTO 230
42002         NOPE=NOPE+1
42003         BRSU=BRSU+BRAT(IDL)
42004   230 CONTINUE
42005       IF(NOPE.EQ.0) THEN
42006         CALL PYERRM(2,'(PYDECY:) all decay channels closed by user')
42007         RETURN
42008       ENDIF
42009  
42010 C...Select decay channel among allowed ones.
42011   240 RBR=BRSU*PYR(0)
42012       IDL=MDCY(KCA,2)-1
42013   250 IDL=IDL+1
42014       IF(MDME(IDL,1).NE.1.AND.KFSP*MDME(IDL,1).NE.2.AND.
42015      &KFSN*MDME(IDL,1).NE.3) THEN
42016         IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1) GOTO 250
42017       ELSEIF(MDME(IDL,2).GT.100) THEN
42018         IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1) GOTO 250
42019       ELSE
42020         IDC=IDL
42021         RBR=RBR-BRAT(IDL)
42022         IF(IDL.LT.MDCY(KCA,2)+MDCY(KCA,3)-1.AND.RBR.GT.0D0) GOTO 250
42023       ENDIF
42024  
42025 C...Start readout of decay channel: matrix element, reset counters.
42026       MMAT=MDME(IDC,2)
42027   260 NTRY=NTRY+1
42028       IF(MOD(NTRY,200).EQ.0) THEN
42029         WRITE(CIDC,'(I4)') IDC
42030 C...Do not print warning for some well-known special cases.
42031         IF(KFA.NE.113.AND.KFA.NE.115.AND.KFA.NE.215)
42032      &  CALL PYERRM(4,'(PYDECY:) caught in loop for decay channel'//
42033      &  CIDC)
42034         GOTO 240
42035       ENDIF
42036       IF(NTRY.GT.1000) THEN
42037         CALL PYERRM(14,'(PYDECY:) caught in infinite loop')
42038         IF(MSTU(21).GE.1) RETURN
42039       ENDIF
42040       I=N
42041       NP=0
42042       NQ=0
42043       MBST=0
42044       IF(MMAT.GE.11.AND.P(IP,4).GT.20D0*P(IP,5)) MBST=1
42045       DO 270 J=1,4
42046         PV(1,J)=0D0
42047         IF(MBST.EQ.0) PV(1,J)=P(IP,J)
42048   270 CONTINUE
42049       IF(MBST.EQ.1) PV(1,4)=P(IP,5)
42050       PV(1,5)=P(IP,5)
42051       PS=0D0
42052       PSQ=0D0
42053       MREM=0
42054       MHADDY=0
42055       IF(KFA.GT.80) MHADDY=1
42056 C.. Random flavour and popcorn system memory.
42057       IRNDMO=0
42058       JTMO=0
42059       MSTU(121)=0
42060       MSTU(125)=10
42061  
42062 C...Read out decay products. Convert to standard flavour code.
42063       JTMAX=5
42064       IF(MDME(IDC+1,2).EQ.101) JTMAX=10
42065       DO 280 JT=1,JTMAX
42066         IF(JT.LE.5) KP=KFDP(IDC,JT)
42067         IF(JT.GE.6) KP=KFDP(IDC+1,JT-5)
42068         IF(KP.EQ.0) GOTO 280
42069         KPA=IABS(KP)
42070         KCP=PYCOMP(KPA)
42071         IF(KPA.GT.80) MHADDY=1
42072         IF(KCHG(KCP,3).EQ.0.AND.KPA.NE.81.AND.KPA.NE.82) THEN
42073           KFP=KP
42074         ELSEIF(KPA.NE.81.AND.KPA.NE.82) THEN
42075           KFP=KFS*KP
42076         ELSEIF(KPA.EQ.81.AND.MOD(KFA/1000,10).EQ.0) THEN
42077           KFP=-KFS*MOD(KFA/10,10)
42078         ELSEIF(KPA.EQ.81.AND.MOD(KFA/100,10).GE.MOD(KFA/10,10)) THEN
42079           KFP=KFS*(100*MOD(KFA/10,100)+3)
42080         ELSEIF(KPA.EQ.81) THEN
42081           KFP=KFS*(1000*MOD(KFA/10,10)+100*MOD(KFA/100,10)+1)
42082         ELSEIF(KP.EQ.82) THEN
42083           CALL PYDCYK(-KFS*INT(1D0+(2D0+PARJ(2))*PYR(0)),0,KFP,KDUMP)
42084           IF(KFP.EQ.0) GOTO 260
42085           KFP=-KFP
42086           IRNDMO=1
42087           MSTJ(93)=1
42088           IF(PV(1,5).LT.PARJ(32)+2D0*PYMASS(KFP)) GOTO 260
42089         ELSEIF(KP.EQ.-82) THEN
42090           KFP=MSTU(124)
42091         ENDIF
42092         IF(KPA.EQ.81.OR.KPA.EQ.82) KCP=PYCOMP(KFP)
42093  
42094 C...Add decay product to event record or to quark flavour list.
42095         KFPA=IABS(KFP)
42096         KQP=KCHG(KCP,2)
42097         IF(MMAT.GE.11.AND.MMAT.LE.30.AND.KQP.NE.0) THEN
42098           NQ=NQ+1
42099           KFLO(NQ)=KFP
42100 C...set rndmflav popcorn system pointer
42101           IF(KP.EQ.82.AND.MSTU(121).GT.0) JTMO=NQ
42102           MSTJ(93)=2
42103           PSQ=PSQ+PYMASS(KFLO(NQ))
42104         ELSEIF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.48).AND.NP.EQ.3.AND.
42105      &    MOD(NQ,2).EQ.1) THEN
42106           NQ=NQ-1
42107           PS=PS-P(I,5)
42108           K(I,1)=1
42109           KFI=K(I,2)
42110           CALL PYKFDI(KFP,KFI,KFLDMP,K(I,2))
42111           IF(K(I,2).EQ.0) GOTO 260
42112           MSTJ(93)=1
42113           P(I,5)=PYMASS(K(I,2))
42114           PS=PS+P(I,5)
42115         ELSE
42116           I=I+1
42117           NP=NP+1
42118           IF(MMAT.NE.33.AND.KQP.NE.0) NQ=NQ+1
42119           IF(MMAT.EQ.33.AND.KQP.NE.0.AND.KQP.NE.2) NQ=NQ+1
42120           K(I,1)=1+MOD(NQ,2)
42121           IF(MMAT.EQ.4.AND.JT.LE.2.AND.KFP.EQ.21) K(I,1)=2
42122           IF(MMAT.EQ.4.AND.JT.EQ.3) K(I,1)=1
42123           K(I,2)=KFP
42124           K(I,3)=IP
42125           K(I,4)=0
42126           K(I,5)=0
42127           P(I,5)=PYMASS(KFP)
42128           PS=PS+P(I,5)
42129         ENDIF
42130   280 CONTINUE
42131  
42132 C...Check masses for resonance decays.
42133       IF(MHADDY.EQ.0) THEN
42134         IF(PS+PARJ(64).GT.PV(1,5)) GOTO 240
42135       ENDIF
42136  
42137 C...Choose decay multiplicity in phase space model.
42138   290 IF(MMAT.GE.11.AND.MMAT.LE.30) THEN
42139         PSP=PS
42140         CNDE=PARJ(61)*LOG(MAX((PV(1,5)-PS-PSQ)/PARJ(62),1.1D0))
42141         IF(MMAT.EQ.12) CNDE=CNDE+PARJ(63)
42142   300   NTRY=NTRY+1
42143 C...Reset popcorn flags if new attempt. Re-select rndmflav if failed.
42144         IF(IRNDMO.EQ.0) THEN
42145            MSTU(121)=0
42146            JTMO=0
42147         ELSEIF(IRNDMO.EQ.1) THEN
42148            IRNDMO=2
42149         ELSE
42150            GOTO 260
42151         ENDIF
42152         IF(NTRY.GT.1000) THEN
42153           CALL PYERRM(14,'(PYDECY:) caught in infinite loop')
42154           IF(MSTU(21).GE.1) RETURN
42155         ENDIF
42156         IF(MMAT.LE.20) THEN
42157           GAUSS=SQRT(-2D0*CNDE*LOG(MAX(1D-10,PYR(0))))*
42158      &    SIN(PARU(2)*PYR(0))
42159           ND=0.5D0+0.5D0*NP+0.25D0*NQ+CNDE+GAUSS
42160           IF(ND.LT.NP+NQ/2.OR.ND.LT.2.OR.ND.GT.10) GOTO 300
42161           IF(MMAT.EQ.13.AND.ND.EQ.2) GOTO 300
42162           IF(MMAT.EQ.14.AND.ND.LE.3) GOTO 300
42163           IF(MMAT.EQ.15.AND.ND.LE.4) GOTO 300
42164         ELSE
42165           ND=MMAT-20
42166         ENDIF
42167 C.. Set maximum popcorn meson number. Test rndmflav popcorn size.
42168         MSTU(125)=ND-NQ/2
42169         IF(MSTU(121).GT.MSTU(125)) GOTO 300
42170  
42171 C...Form hadrons from flavour content.
42172         DO 310 JT=1,NQ
42173           KFL1(JT)=KFLO(JT)
42174   310   CONTINUE
42175         IF(ND.EQ.NP+NQ/2) GOTO 330
42176         DO 320 I=N+NP+1,N+ND-NQ/2
42177 C.. Stick to started popcorn system, else pick side at random
42178           JT=JTMO
42179           IF(JT.EQ.0) JT=1+INT((NQ-1)*PYR(0))
42180           CALL PYDCYK(KFL1(JT),0,KFL2,K(I,2))
42181           IF(K(I,2).EQ.0) GOTO 300
42182           MSTU(125)=MSTU(125)-1
42183           JTMO=0
42184           IF(MSTU(121).GT.0) JTMO=JT
42185           KFL1(JT)=-KFL2
42186   320   CONTINUE
42187   330   JT=2
42188         JT2=3
42189         JT3=4
42190         IF(NQ.EQ.4.AND.PYR(0).LT.PARJ(66)) JT=4
42191         IF(JT.EQ.4.AND.ISIGN(1,KFL1(1)*(10-IABS(KFL1(1))))*
42192      &  ISIGN(1,KFL1(JT)*(10-IABS(KFL1(JT)))).GT.0) JT=3
42193         IF(JT.EQ.3) JT2=2
42194         IF(JT.EQ.4) JT3=2
42195         CALL PYDCYK(KFL1(1),KFL1(JT),KFLDMP,K(N+ND-NQ/2+1,2))
42196         IF(K(N+ND-NQ/2+1,2).EQ.0) GOTO 300
42197         IF(NQ.EQ.4) CALL PYDCYK(KFL1(JT2),KFL1(JT3),KFLDMP,K(N+ND,2))
42198         IF(NQ.EQ.4.AND.K(N+ND,2).EQ.0) GOTO 300
42199  
42200 C...Check that sum of decay product masses not too large.
42201         PS=PSP
42202         DO 340 I=N+NP+1,N+ND
42203           K(I,1)=1
42204           K(I,3)=IP
42205           K(I,4)=0
42206           K(I,5)=0
42207           P(I,5)=PYMASS(K(I,2))
42208           PS=PS+P(I,5)
42209   340   CONTINUE
42210         IF(PS+PARJ(64).GT.PV(1,5)) GOTO 300
42211  
42212 C...Rescale energy to subtract off spectator quark mass.
42213       ELSEIF((MMAT.EQ.31.OR.MMAT.EQ.33.OR.MMAT.EQ.44)
42214      &  .AND.NP.GE.3) THEN
42215         PS=PS-P(N+NP,5)
42216         PQT=(P(N+NP,5)+PARJ(65))/PV(1,5)
42217         DO 350 J=1,5
42218           P(N+NP,J)=PQT*PV(1,J)
42219           PV(1,J)=(1D0-PQT)*PV(1,J)
42220   350   CONTINUE
42221         IF(PS+PARJ(64).GT.PV(1,5)) GOTO 260
42222         ND=NP-1
42223         MREM=1
42224  
42225 C...Fully specified final state: check mass broadening effects.
42226       ELSE
42227         IF(NP.GE.2.AND.PS+PARJ(64).GT.PV(1,5)) GOTO 260
42228         ND=NP
42229       ENDIF
42230  
42231 C...Determine position of grandmother, number of sisters.
42232       NM=0
42233       KFAS=0
42234       MSGN=0
42235       IF(MMAT.EQ.3) THEN
42236         IM=K(IP,3)
42237         IF(IM.LT.0.OR.IM.GE.IP) IM=0
42238         IF(IM.NE.0) KFAM=IABS(K(IM,2))
42239         IF(IM.NE.0) THEN
42240           DO 360 IL=MAX(IP-2,IM+1),MIN(IP+2,N)
42241             IF(K(IL,3).EQ.IM) NM=NM+1
42242             IF(K(IL,3).EQ.IM.AND.IL.NE.IP) ISIS=IL
42243   360     CONTINUE
42244           IF(NM.NE.2.OR.KFAM.LE.100.OR.MOD(KFAM,10).NE.1.OR.
42245      &    MOD(KFAM/1000,10).NE.0) NM=0
42246           IF(NM.EQ.2) THEN
42247             KFAS=IABS(K(ISIS,2))
42248             IF((KFAS.LE.100.OR.MOD(KFAS,10).NE.1.OR.
42249      &      MOD(KFAS/1000,10).NE.0).AND.KFAS.NE.22) NM=0
42250           ENDIF
42251         ENDIF
42252       ENDIF
42253  
42254 C...Kinematics of one-particle decays.
42255       IF(ND.EQ.1) THEN
42256         DO 370 J=1,4
42257           P(N+1,J)=P(IP,J)
42258   370   CONTINUE
42259         GOTO 630
42260       ENDIF
42261  
42262 C...Calculate maximum weight ND-particle decay.
42263       PV(ND,5)=P(N+ND,5)
42264       IF(ND.GE.3) THEN
42265         WTMAX=1D0/WTCOR(ND-2)
42266         PMAX=PV(1,5)-PS+P(N+ND,5)
42267         PMIN=0D0
42268         DO 380 IL=ND-1,1,-1
42269           PMAX=PMAX+P(N+IL,5)
42270           PMIN=PMIN+P(N+IL+1,5)
42271           WTMAX=WTMAX*PAWT(PMAX,PMIN,P(N+IL,5))
42272   380   CONTINUE
42273       ENDIF
42274  
42275 C...Find virtual gamma mass in Dalitz decay.
42276   390 IF(ND.EQ.2) THEN
42277       ELSEIF(MMAT.EQ.2) THEN
42278         PMES=4D0*PMAS(11,1)**2
42279         PMRHO2=PMAS(131,1)**2
42280         PGRHO2=PMAS(131,2)**2
42281   400   PMST=PMES*(P(IP,5)**2/PMES)**PYR(0)
42282         WT=(1+0.5D0*PMES/PMST)*SQRT(MAX(0D0,1D0-PMES/PMST))*
42283      &  (1D0-PMST/P(IP,5)**2)**3*(1D0+PGRHO2/PMRHO2)/
42284      &  ((1D0-PMST/PMRHO2)**2+PGRHO2/PMRHO2)
42285         IF(WT.LT.PYR(0)) GOTO 400
42286         PV(2,5)=MAX(2.00001D0*PMAS(11,1),SQRT(PMST))
42287  
42288 C...M-generator gives weight. If rejected, try again.
42289       ELSE
42290   410   RORD(1)=1D0
42291         DO 440 IL1=2,ND-1
42292           RSAV=PYR(0)
42293           DO 420 IL2=IL1-1,1,-1
42294             IF(RSAV.LE.RORD(IL2)) GOTO 430
42295             RORD(IL2+1)=RORD(IL2)
42296   420     CONTINUE
42297   430     RORD(IL2+1)=RSAV
42298   440   CONTINUE
42299         RORD(ND)=0D0
42300         WT=1D0
42301         DO 450 IL=ND-1,1,-1
42302           PV(IL,5)=PV(IL+1,5)+P(N+IL,5)+(RORD(IL)-RORD(IL+1))*
42303      &    (PV(1,5)-PS)
42304           WT=WT*PAWT(PV(IL,5),PV(IL+1,5),P(N+IL,5))
42305   450   CONTINUE
42306         IF(WT.LT.PYR(0)*WTMAX) GOTO 410
42307       ENDIF
42308  
42309 C...Perform two-particle decays in respective CM frame.
42310   460 DO 480 IL=1,ND-1
42311         PA=PAWT(PV(IL,5),PV(IL+1,5),P(N+IL,5))
42312         UE(3)=2D0*PYR(0)-1D0
42313         PHI=PARU(2)*PYR(0)
42314         UE(1)=SQRT(1D0-UE(3)**2)*COS(PHI)
42315         UE(2)=SQRT(1D0-UE(3)**2)*SIN(PHI)
42316         DO 470 J=1,3
42317           P(N+IL,J)=PA*UE(J)
42318           PV(IL+1,J)=-PA*UE(J)
42319   470   CONTINUE
42320         P(N+IL,4)=SQRT(PA**2+P(N+IL,5)**2)
42321         PV(IL+1,4)=SQRT(PA**2+PV(IL+1,5)**2)
42322   480 CONTINUE
42323  
42324 C...Lorentz transform decay products to lab frame.
42325       DO 490 J=1,4
42326         P(N+ND,J)=PV(ND,J)
42327   490 CONTINUE
42328       DO 530 IL=ND-1,1,-1
42329         DO 500 J=1,3
42330           BE(J)=PV(IL,J)/PV(IL,4)
42331   500   CONTINUE
42332         GA=PV(IL,4)/PV(IL,5)
42333         DO 520 I=N+IL,N+ND
42334           BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
42335           DO 510 J=1,3
42336             P(I,J)=P(I,J)+GA*(GA*BEP/(1D0+GA)+P(I,4))*BE(J)
42337   510     CONTINUE
42338           P(I,4)=GA*(P(I,4)+BEP)
42339   520   CONTINUE
42340   530 CONTINUE
42341  
42342 C...Check that no infinite loop in matrix element weight.
42343       NTRY=NTRY+1
42344       IF(NTRY.GT.800) GOTO 560
42345  
42346 C...Matrix elements for omega and phi decays.
42347       IF(MMAT.EQ.1) THEN
42348         WT=(P(N+1,5)*P(N+2,5)*P(N+3,5))**2-(P(N+1,5)*FOUR(N+2,N+3))**2
42349      &  -(P(N+2,5)*FOUR(N+1,N+3))**2-(P(N+3,5)*FOUR(N+1,N+2))**2
42350      &  +2D0*FOUR(N+1,N+2)*FOUR(N+1,N+3)*FOUR(N+2,N+3)
42351         IF(MAX(WT*WTCOR(9)/P(IP,5)**6,0.001D0).LT.PYR(0)) GOTO 390
42352  
42353 C...Matrix elements for pi0 or eta Dalitz decay to gamma e+ e-.
42354       ELSEIF(MMAT.EQ.2) THEN
42355         FOUR12=FOUR(N+1,N+2)
42356         FOUR13=FOUR(N+1,N+3)
42357         WT=(PMST-0.5D0*PMES)*(FOUR12**2+FOUR13**2)+
42358      &  PMES*(FOUR12*FOUR13+FOUR12**2+FOUR13**2)
42359         IF(WT.LT.PYR(0)*0.25D0*PMST*(P(IP,5)**2-PMST)**2) GOTO 460
42360  
42361 C...Matrix element for S0 -> S1 + V1 -> S1 + S2 + S3 (S scalar,
42362 C...V vector), of form cos**2(theta02) in V1 rest frame, and for
42363 C...S0 -> gamma + V1 -> gamma + S2 + S3, of form sin**2(theta02).
42364       ELSEIF(MMAT.EQ.3.AND.NM.EQ.2) THEN
42365         FOUR10=FOUR(IP,IM)
42366         FOUR12=FOUR(IP,N+1)
42367         FOUR02=FOUR(IM,N+1)
42368         PMS1=P(IP,5)**2
42369         PMS0=P(IM,5)**2
42370         PMS2=P(N+1,5)**2
42371         IF(KFAS.NE.22) HNUM=(FOUR10*FOUR12-PMS1*FOUR02)**2
42372         IF(KFAS.EQ.22) HNUM=PMS1*(2D0*FOUR10*FOUR12*FOUR02-
42373      &  PMS1*FOUR02**2-PMS0*FOUR12**2-PMS2*FOUR10**2+PMS1*PMS0*PMS2)
42374         HNUM=MAX(1D-6*PMS1**2*PMS0*PMS2,HNUM)
42375         HDEN=(FOUR10**2-PMS1*PMS0)*(FOUR12**2-PMS1*PMS2)
42376         IF(HNUM.LT.PYR(0)*HDEN) GOTO 460
42377  
42378 C...Matrix element for "onium" -> g + g + g or gamma + g + g.
42379       ELSEIF(MMAT.EQ.4) THEN
42380         HX1=2D0*FOUR(IP,N+1)/P(IP,5)**2
42381         HX2=2D0*FOUR(IP,N+2)/P(IP,5)**2
42382         HX3=2D0*FOUR(IP,N+3)/P(IP,5)**2
42383         WT=((1D0-HX1)/(HX2*HX3))**2+((1D0-HX2)/(HX1*HX3))**2+
42384      &  ((1D0-HX3)/(HX1*HX2))**2
42385         IF(WT.LT.2D0*PYR(0)) GOTO 390
42386         IF(K(IP+1,2).EQ.22.AND.(1D0-HX1)*P(IP,5)**2.LT.4D0*PARJ(32)**2)
42387      &  GOTO 390
42388  
42389 C...Effective matrix element for nu spectrum in tau -> nu + hadrons.
42390       ELSEIF(MMAT.EQ.41) THEN
42391         HX1=2D0*FOUR(IP,N+1)/P(IP,5)**2
42392         HXM=MIN(0.75D0,2D0*(1D0-PS/P(IP,5)))
42393         IF(HX1*(3D0-2D0*HX1).LT.PYR(0)*HXM*(3D0-2D0*HXM)) GOTO 390
42394  
42395 C...Matrix elements for weak decays (only semileptonic for c and b)
42396       ELSEIF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48)
42397      &  .AND.ND.EQ.3) THEN
42398         IF(MBST.EQ.0) WT=FOUR(IP,N+1)*FOUR(N+2,N+3)
42399         IF(MBST.EQ.1) WT=P(IP,5)*P(N+1,4)*FOUR(N+2,N+3)
42400         IF(WT.LT.PYR(0)*P(IP,5)*PV(1,5)**3/WTCOR(10)) GOTO 390
42401       ELSEIF(MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48) THEN
42402         DO 550 J=1,4
42403           P(N+NP+1,J)=0D0
42404           DO 540 IS=N+3,N+NP
42405             P(N+NP+1,J)=P(N+NP+1,J)+P(IS,J)
42406   540     CONTINUE
42407   550   CONTINUE
42408         IF(MBST.EQ.0) WT=FOUR(IP,N+1)*FOUR(N+2,N+NP+1)
42409         IF(MBST.EQ.1) WT=P(IP,5)*P(N+1,4)*FOUR(N+2,N+NP+1)
42410         IF(WT.LT.PYR(0)*P(IP,5)*PV(1,5)**3/WTCOR(10)) GOTO 390
42411       ENDIF
42412  
42413 C...Scale back energy and reattach spectator.
42414   560 IF(MREM.EQ.1) THEN
42415         DO 570 J=1,5
42416           PV(1,J)=PV(1,J)/(1D0-PQT)
42417   570   CONTINUE
42418         ND=ND+1
42419         MREM=0
42420       ENDIF
42421  
42422 C...Low invariant mass for system with spectator quark gives particle,
42423 C...not two jets. Readjust momenta accordingly.
42424       IF(MMAT.EQ.31.AND.ND.EQ.3) THEN
42425         MSTJ(93)=1
42426         PM2=PYMASS(K(N+2,2))
42427         MSTJ(93)=1
42428         PM3=PYMASS(K(N+3,2))
42429         IF(P(N+2,5)**2+P(N+3,5)**2+2D0*FOUR(N+2,N+3).GE.
42430      &  (PARJ(32)+PM2+PM3)**2) GOTO 630
42431         K(N+2,1)=1
42432         KFTEMP=K(N+2,2)
42433         CALL PYKFDI(KFTEMP,K(N+3,2),KFLDMP,K(N+2,2))
42434         IF(K(N+2,2).EQ.0) GOTO 260
42435         P(N+2,5)=PYMASS(K(N+2,2))
42436         PS=P(N+1,5)+P(N+2,5)
42437         PV(2,5)=P(N+2,5)
42438         MMAT=0
42439         ND=2
42440         GOTO 460
42441       ELSEIF(MMAT.EQ.44) THEN
42442         MSTJ(93)=1
42443         PM3=PYMASS(K(N+3,2))
42444         MSTJ(93)=1
42445         PM4=PYMASS(K(N+4,2))
42446         IF(P(N+3,5)**2+P(N+4,5)**2+2D0*FOUR(N+3,N+4).GE.
42447      &  (PARJ(32)+PM3+PM4)**2) GOTO 600
42448         K(N+3,1)=1
42449         KFTEMP=K(N+3,2)
42450         CALL PYKFDI(KFTEMP,K(N+4,2),KFLDMP,K(N+3,2))
42451         IF(K(N+3,2).EQ.0) GOTO 260
42452         P(N+3,5)=PYMASS(K(N+3,2))
42453         DO 580 J=1,3
42454           P(N+3,J)=P(N+3,J)+P(N+4,J)
42455   580   CONTINUE
42456         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)
42457         HA=P(N+1,4)**2-P(N+2,4)**2
42458         HB=HA-(P(N+1,5)**2-P(N+2,5)**2)
42459         HC=(P(N+1,1)-P(N+2,1))**2+(P(N+1,2)-P(N+2,2))**2+
42460      &  (P(N+1,3)-P(N+2,3))**2
42461         HD=(PV(1,4)-P(N+3,4))**2
42462         HE=HA**2-2D0*HD*(P(N+1,4)**2+P(N+2,4)**2)+HD**2
42463         HF=HD*HC-HB**2
42464         HG=HD*HC-HA*HB
42465         HH=(SQRT(HG**2+HE*HF)-HG)/(2D0*HF)
42466         DO 590 J=1,3
42467           PCOR=HH*(P(N+1,J)-P(N+2,J))
42468           P(N+1,J)=P(N+1,J)+PCOR
42469           P(N+2,J)=P(N+2,J)-PCOR
42470   590   CONTINUE
42471         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)
42472         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)
42473         ND=ND-1
42474       ENDIF
42475  
42476 C...Check invariant mass of W jets. May give one particle or start over.
42477   600 IF((MMAT.EQ.42.OR.MMAT.EQ.43.OR.MMAT.EQ.44.OR.MMAT.EQ.48)
42478      &.AND.IABS(K(N+1,2)).LT.10) THEN
42479         PMR=SQRT(MAX(0D0,P(N+1,5)**2+P(N+2,5)**2+2D0*FOUR(N+1,N+2)))
42480         MSTJ(93)=1
42481         PM1=PYMASS(K(N+1,2))
42482         MSTJ(93)=1
42483         PM2=PYMASS(K(N+2,2))
42484         IF(PMR.GT.PARJ(32)+PM1+PM2) GOTO 610
42485         KFLDUM=INT(1.5D0+PYR(0))
42486         CALL PYKFDI(K(N+1,2),-ISIGN(KFLDUM,K(N+1,2)),KFLDMP,KF1)
42487         CALL PYKFDI(K(N+2,2),-ISIGN(KFLDUM,K(N+2,2)),KFLDMP,KF2)
42488         IF(KF1.EQ.0.OR.KF2.EQ.0) GOTO 260
42489         PSM=PYMASS(KF1)+PYMASS(KF2)
42490         IF((MMAT.EQ.42.OR.MMAT.EQ.48).AND.PMR.GT.PARJ(64)+PSM) GOTO 610
42491         IF(MMAT.GE.43.AND.PMR.GT.0.2D0*PARJ(32)+PSM) GOTO 610
42492         IF(MMAT.EQ.48) GOTO 390
42493         IF(ND.EQ.4.OR.KFA.EQ.15) GOTO 260
42494         K(N+1,1)=1
42495         KFTEMP=K(N+1,2)
42496         CALL PYKFDI(KFTEMP,K(N+2,2),KFLDMP,K(N+1,2))
42497         IF(K(N+1,2).EQ.0) GOTO 260
42498         P(N+1,5)=PYMASS(K(N+1,2))
42499         K(N+2,2)=K(N+3,2)
42500         P(N+2,5)=P(N+3,5)
42501         PS=P(N+1,5)+P(N+2,5)
42502         IF(PS+PARJ(64).GT.PV(1,5)) GOTO 260
42503         PV(2,5)=P(N+3,5)
42504         MMAT=0
42505         ND=2
42506         GOTO 460
42507       ENDIF
42508  
42509 C...Phase space decay of partons from W decay.
42510   610 IF((MMAT.EQ.42.OR.MMAT.EQ.48).AND.IABS(K(N+1,2)).LT.10) THEN
42511         KFLO(1)=K(N+1,2)
42512         KFLO(2)=K(N+2,2)
42513         K(N+1,1)=K(N+3,1)
42514         K(N+1,2)=K(N+3,2)
42515         DO 620 J=1,5
42516           PV(1,J)=P(N+1,J)+P(N+2,J)
42517           P(N+1,J)=P(N+3,J)
42518   620   CONTINUE
42519         PV(1,5)=PMR
42520         N=N+1
42521         NP=0
42522         NQ=2
42523         PS=0D0
42524         MSTJ(93)=2
42525         PSQ=PYMASS(KFLO(1))
42526         MSTJ(93)=2
42527         PSQ=PSQ+PYMASS(KFLO(2))
42528         MMAT=11
42529         GOTO 290
42530       ENDIF
42531  
42532 C...Boost back for rapidly moving particle.
42533   630 N=N+ND
42534       IF(MBST.EQ.1) THEN
42535         DO 640 J=1,3
42536           BE(J)=P(IP,J)/P(IP,4)
42537   640   CONTINUE
42538         GA=P(IP,4)/P(IP,5)
42539         DO 660 I=NSAV+1,N
42540           BEP=BE(1)*P(I,1)+BE(2)*P(I,2)+BE(3)*P(I,3)
42541           DO 650 J=1,3
42542             P(I,J)=P(I,J)+GA*(GA*BEP/(1D0+GA)+P(I,4))*BE(J)
42543   650     CONTINUE
42544           P(I,4)=GA*(P(I,4)+BEP)
42545   660   CONTINUE
42546       ENDIF
42547  
42548 C...Fill in position of decay vertex.
42549       DO 680 I=NSAV+1,N
42550         DO 670 J=1,4
42551           V(I,J)=VDCY(J)
42552   670   CONTINUE
42553         V(I,5)=0D0
42554   680 CONTINUE
42555  
42556 C...Set up for parton shower evolution from jets.
42557       IF(MSTJ(23).GE.1.AND.MMAT.EQ.4.AND.K(NSAV+1,2).EQ.21) THEN
42558         K(NSAV+1,1)=3
42559         K(NSAV+2,1)=3
42560         K(NSAV+3,1)=3
42561         K(NSAV+1,4)=MSTU(5)*(NSAV+2)
42562         K(NSAV+1,5)=MSTU(5)*(NSAV+3)
42563         K(NSAV+2,4)=MSTU(5)*(NSAV+3)
42564         K(NSAV+2,5)=MSTU(5)*(NSAV+1)
42565         K(NSAV+3,4)=MSTU(5)*(NSAV+1)
42566         K(NSAV+3,5)=MSTU(5)*(NSAV+2)
42567         MSTJ(92)=-(NSAV+1)
42568       ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.4) THEN
42569         K(NSAV+2,1)=3
42570         K(NSAV+3,1)=3
42571         K(NSAV+2,4)=MSTU(5)*(NSAV+3)
42572         K(NSAV+2,5)=MSTU(5)*(NSAV+3)
42573         K(NSAV+3,4)=MSTU(5)*(NSAV+2)
42574         K(NSAV+3,5)=MSTU(5)*(NSAV+2)
42575         MSTJ(92)=NSAV+2
42576       ELSEIF(MSTJ(23).GE.1.AND.(MMAT.EQ.32.OR.MMAT.EQ.44).AND.
42577      &  IABS(K(NSAV+1,2)).LE.10.AND.IABS(K(NSAV+2,2)).LE.10) THEN
42578         K(NSAV+1,1)=3
42579         K(NSAV+2,1)=3
42580         K(NSAV+1,4)=MSTU(5)*(NSAV+2)
42581         K(NSAV+1,5)=MSTU(5)*(NSAV+2)
42582         K(NSAV+2,4)=MSTU(5)*(NSAV+1)
42583         K(NSAV+2,5)=MSTU(5)*(NSAV+1)
42584         MSTJ(92)=NSAV+1
42585       ELSEIF(MSTJ(23).GE.1.AND.(MMAT.EQ.32.OR.MMAT.EQ.44).AND.
42586      &  IABS(K(NSAV+1,2)).LE.20.AND.IABS(K(NSAV+2,2)).LE.20) THEN
42587         MSTJ(92)=NSAV+1
42588       ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.33.AND.IABS(K(NSAV+2,2)).EQ.21)
42589      &  THEN
42590         K(NSAV+1,1)=3
42591         K(NSAV+2,1)=3
42592         K(NSAV+3,1)=3
42593         KCP=PYCOMP(K(NSAV+1,2))
42594         KQP=KCHG(KCP,2)*ISIGN(1,K(NSAV+1,2))
42595         JCON=4
42596         IF(KQP.LT.0) JCON=5
42597         K(NSAV+1,JCON)=MSTU(5)*(NSAV+2)
42598         K(NSAV+2,9-JCON)=MSTU(5)*(NSAV+1)
42599         K(NSAV+2,JCON)=MSTU(5)*(NSAV+3)
42600         K(NSAV+3,9-JCON)=MSTU(5)*(NSAV+2)
42601         MSTJ(92)=NSAV+1
42602       ELSEIF(MSTJ(23).GE.1.AND.MMAT.EQ.33) THEN
42603         K(NSAV+1,1)=3
42604         K(NSAV+3,1)=3
42605         K(NSAV+1,4)=MSTU(5)*(NSAV+3)
42606         K(NSAV+1,5)=MSTU(5)*(NSAV+3)
42607         K(NSAV+3,4)=MSTU(5)*(NSAV+1)
42608         K(NSAV+3,5)=MSTU(5)*(NSAV+1)
42609         MSTJ(92)=NSAV+1
42610       ENDIF
42611  
42612 C...Mark decayed particle; special option for B-Bbar mixing.
42613       IF(K(IP,1).EQ.5) K(IP,1)=15
42614       IF(K(IP,1).LE.10) K(IP,1)=11
42615       IF(MMIX.EQ.1.AND.MSTJ(26).EQ.2.AND.K(IP,1).EQ.11) K(IP,1)=12
42616       K(IP,4)=NSAV+1
42617       K(IP,5)=N
42618  
42619       RETURN
42620       END
42621  
42622   
42623 C*********************************************************************
42624  
42625 C...PYDCYK
42626 C...Handles flavour production in the decay of unstable particles
42627 C...and small string clusters.
42628  
42629       SUBROUTINE PYDCYK(KFL1,KFL2,KFL3,KF)
42630  
42631 C...Double precision and integer declarations.
42632       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
42633       IMPLICIT INTEGER(I-N)
42634       INTEGER PYK,PYCHGE,PYCOMP
42635 C...Commonblocks.
42636       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
42637       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
42638       SAVE /PYDAT1/,/PYDAT2/
42639  
42640  
42641 C.. Call PYKFDI directly if no popcorn option is on
42642       IF(MSTJ(12).LT.2) THEN
42643          CALL PYKFDI(KFL1,KFL2,KFL3,KF)
42644          MSTU(124)=KFL3
42645          RETURN
42646       ENDIF
42647  
42648       KFL3=0
42649       KF=0
42650       IF(KFL1.EQ.0) RETURN
42651       KF1A=IABS(KFL1)
42652       KF2A=IABS(KFL2)
42653  
42654       NSTO=130
42655       NMAX=MIN(MSTU(125),10)
42656  
42657 C.. Identify rank 0 cluster qq
42658       IRANK=1
42659       IF(KF1A.GT.10.AND.KF1A.LT.10000) IRANK=0
42660  
42661       IF(KF2A.GT.0)THEN
42662 C.. Join jets: Fails if store not empty
42663          IF(MSTU(121).GT.0) THEN
42664             MSTU(121)=0
42665             RETURN
42666          ENDIF
42667          CALL PYKFDI(KFL1,KFL2,KFL3,KF)
42668       ELSEIF(KF1A.GT.10.AND.MSTU(121).GT.0)THEN
42669 C.. Pick popcorn meson from store, return same qq, decrease store
42670          KF=MSTU(NSTO+MSTU(121))
42671          KFL3=-KFL1
42672          MSTU(121)=MSTU(121)-1
42673       ELSE
42674 C.. Generate new flavour. Then done if no diquark is generated
42675   100    CALL PYKFDI(KFL1,0,KFL3,KF)
42676          IF(MSTU(121).EQ.-1) GOTO 100
42677          MSTU(124)=KFL3
42678          IF(KF.EQ.0.OR.IABS(KFL3).LE.10) RETURN
42679  
42680 C.. Simple case if no dynamical popcorn suppressions are considered
42681          IF(MSTJ(12).LT.4) THEN
42682             IF(MSTU(121).EQ.0) RETURN
42683             NMES=1
42684             KFPREV=-KFL3
42685             CALL PYKFDI(KFPREV,0,KFL3,KFM)
42686 C.. Due to eta+eta' suppr., a qq->M+qq attempt might end as qq->B+q
42687             IF(IABS(KFL3).LE.10)THEN
42688                KFL3=-KFPREV
42689                RETURN
42690             ENDIF
42691             GOTO 120
42692          ENDIF
42693  
42694 C test output qq against fake Gamma, then return if no popcorn.
42695          GB=2D0
42696          IF(IRANK.NE.0)THEN
42697             CALL PYZDIS(1,2103,5D0,Z)
42698             GB=5D0*(1D0-Z)/Z
42699             IF(1D0-PARF(192)**GB.LT.PYR(0)) THEN
42700                MSTU(121)=0
42701                GOTO 100
42702             ENDIF
42703          ENDIF
42704          IF(MSTU(121).EQ.0) RETURN
42705  
42706 C..Set store size memory. Pick fake dynamical variables of qq.
42707          NMES=MSTU(121)
42708          CALL PYPTDI(1,PX3,PY3)
42709          X=1D0
42710          POPM=0D0
42711          G=GB
42712          POPG=GB
42713  
42714 C.. Pick next popcorn meson, test with fake dynamical variables
42715   110    KFPREV=-KFL3
42716          PX1=-PX3
42717          PY1=-PY3
42718          CALL PYKFDI(KFPREV,0,KFL3,KFM)
42719          IF(MSTU(121).EQ.-1) GOTO 100
42720          CALL PYPTDI(KFL3,PX3,PY3)
42721          PM=PYMASS(KFM)**2+(PX1+PX3)**2+(PY1+PY3)**2
42722          CALL PYZDIS(KFPREV,KFL3,PM,Z)
42723          G=(1D0-Z)*(G+PM/Z)
42724          X=(1D0-Z)*X
42725  
42726          PTST=1D0
42727          GTST=1D0
42728          RTST=PYR(0)
42729          IF(MSTJ(12).GT.4)THEN
42730             POPMN=SQRT((1D0-X)*(G/X-GB))
42731             POPM=POPM+PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
42732             PTST=EXP((POPM-POPMN)*PARF(193))
42733             POPM=POPMN
42734          ENDIF
42735          IF(IRANK.NE.0)THEN
42736             POPGN=X*GB
42737             GTST=(1D0-PARF(192)**POPGN)/(1D0-PARF(192)**POPG)
42738             POPG=POPGN
42739          ENDIF
42740          IF(RTST.GT.PTST*GTST)THEN
42741             MSTU(121)=0
42742             IF(RTST.GT.PTST) MSTU(121)=-1
42743             GOTO 100
42744          ENDIF
42745  
42746 C.. Store meson
42747   120    IF(NMES.LE.NMAX) MSTU(NSTO+MSTU(121)+1)=KFM
42748          IF(MSTU(121).GT.0) GOTO 110
42749  
42750 C.. Test accepted system size. If OK set global popcorn size variable.
42751          IF(NMES.GT.NMAX)THEN
42752             KF=0
42753             KFL3=0
42754             RETURN
42755          ENDIF
42756          MSTU(121)=NMES
42757       ENDIF
42758  
42759       RETURN
42760       END
42761  
42762 C********************************************************************
42763  
42764 C...PYKFDI
42765 C...Generates a new flavour pair and combines off a hadron
42766  
42767       SUBROUTINE PYKFDI(KFL1,KFL2,KFL3,KF)
42768  
42769 C...Double precision and integer declarations.
42770       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
42771       IMPLICIT INTEGER(I-N)
42772       INTEGER PYK,PYCHGE,PYCOMP
42773 C...Commonblocks.
42774       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
42775       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
42776       SAVE /PYDAT1/,/PYDAT2/
42777 C...Local arrays.
42778       DIMENSION PD(7)
42779  
42780       IF(MSTU(123).EQ.0.AND.MSTJ(12).GT.0)  CALL PYKFIN
42781 
42782 C...Default flavour values. Input consistency checks.
42783       KF1A=IABS(KFL1)
42784       KF2A=IABS(KFL2)
42785       KFL3=0
42786       KF=0
42787       IF(KF1A.EQ.0) RETURN
42788       IF(KF2A.NE.0)THEN
42789         IF(KF1A.LE.10.AND.KF2A.LE.10.AND.KFL1*KFL2.GT.0) RETURN
42790         IF(KF1A.GT.10.AND.KF2A.GT.10) RETURN
42791         IF((KF1A.GT.10.OR.KF2A.GT.10).AND.KFL1*KFL2.LT.0) RETURN
42792       ENDIF
42793  
42794 C...Check if tabulated flavour probabilities are to be used.
42795       IF(MSTJ(15).EQ.1) THEN
42796         IF(MSTJ(12).GE.5)  CALL PYERRM(29,
42797      &        '(PYKFDI:) Sorry, option MSTJ(15)=1 not available' //
42798      &        ' together with MSTJ(12)>=5 modification')
42799         KTAB1=-1
42800         IF(KF1A.GE.1.AND.KF1A.LE.6) KTAB1=KF1A
42801         KFL1A=MOD(KF1A/1000,10)
42802         KFL1B=MOD(KF1A/100,10)
42803         KFL1S=MOD(KF1A,10)
42804         IF(KFL1A.GE.1.AND.KFL1A.LE.4.AND.KFL1B.GE.1.AND.KFL1B.LE.4)
42805      &  KTAB1=6+KFL1A*(KFL1A-2)+2*KFL1B+(KFL1S-1)/2
42806         IF(KFL1A.GE.1.AND.KFL1A.LE.4.AND.KFL1A.EQ.KFL1B) KTAB1=KTAB1-1
42807         IF(KF1A.GE.1.AND.KF1A.LE.6) KFL1A=KF1A
42808         KTAB2=0
42809         IF(KF2A.NE.0) THEN
42810           KTAB2=-1
42811           IF(KF2A.GE.1.AND.KF2A.LE.6) KTAB2=KF2A
42812           KFL2A=MOD(KF2A/1000,10)
42813           KFL2B=MOD(KF2A/100,10)
42814           KFL2S=MOD(KF2A,10)
42815           IF(KFL2A.GE.1.AND.KFL2A.LE.4.AND.KFL2B.GE.1.AND.KFL2B.LE.4)
42816      &    KTAB2=6+KFL2A*(KFL2A-2)+2*KFL2B+(KFL2S-1)/2
42817           IF(KFL2A.GE.1.AND.KFL2A.LE.4.AND.KFL2A.EQ.KFL2B) KTAB2=KTAB2-1
42818         ENDIF
42819         IF(KTAB1.GE.0.AND.KTAB2.GE.0) GOTO 140
42820       ENDIF
42821  
42822 C.. Recognize rank 0 diquark case
42823   100 IRANK=1
42824       KFDIQ=MAX(KF1A,KF2A)
42825       IF(KFDIQ.GT.10.AND.KFDIQ.LT.10000) IRANK=0
42826  
42827 C.. Join two flavours to meson or baryon. Test for popcorn.
42828       IF(KF2A.GT.0)THEN
42829         MBARY=0
42830         IF(KFDIQ.GT.10) THEN
42831           IF(IRANK.EQ.0.AND.MSTJ(12).LT.5)
42832      &         CALL PYNMES(KFDIQ)
42833           IF(MSTU(121).NE.0) THEN
42834              MSTU(121)=0
42835              RETURN
42836           ENDIF
42837           MBARY=2
42838         ENDIF
42839         KFQOLD=KF1A
42840         KFQVER=KF2A
42841         GOTO 130
42842       ENDIF
42843  
42844 C.. Separate incoming flavours, curtain flavour consistency check
42845       KFIN=KFL1
42846       KFQOLD=KF1A
42847       KFQPOP=KF1A/10000
42848       IF(KF1A.GT.10)THEN
42849          KFIN=-KFL1
42850          KFL1A=MOD(KF1A/1000,10)
42851          KFL1B=MOD(KF1A/100,10)
42852          IF(IRANK.EQ.0)THEN
42853             QAWT=1D0
42854             IF(KFL1A.GE.3) QAWT=PARF(136+KFL1A/4)
42855             IF(KFL1B.GE.3) QAWT=QAWT/PARF(136+KFL1B/4)
42856             KFQPOP=KFL1A+(KFL1B-KFL1A)*INT(1D0/(QAWT+1D0)+PYR(0))
42857          ENDIF
42858          IF(KFQPOP.NE.KFL1B.AND.KFQPOP.NE.KFL1A) THEN
42859              MSTU(121)=0
42860              RETURN
42861           ENDIF
42862          KFQOLD=KFL1A+KFL1B-KFQPOP
42863       ENDIF
42864  
42865 C...Meson/baryon choice. Set number of mesons if starting a popcorn
42866 C...system.
42867   110 MBARY=0
42868       IF(KF1A.LE.10.AND.MSTJ(12).GT.0)THEN
42869          IF(MSTU(121).EQ.-1.OR.(1D0+PARJ(1))*PYR(0).GT.1D0)THEN
42870             MBARY=1
42871             CALL PYNMES(0)
42872          ENDIF
42873       ELSEIF(KF1A.GT.10)THEN
42874          MBARY=2
42875          IF(IRANK.EQ.0) CALL PYNMES(KF1A)
42876          IF(MSTU(121).GT.0) MBARY=-1
42877       ENDIF
42878  
42879 C..x->H+q: Choose single vertex quark. Jump to form hadron.
42880       IF(MBARY.EQ.0.OR.MBARY.EQ.2)THEN
42881          KFQVER=1+INT((2D0+PARJ(2))*PYR(0))
42882          KFL3=ISIGN(KFQVER,-KFIN)
42883          GOTO 130
42884       ENDIF
42885  
42886 C..x->H+qq: (IDW=proper PARF position for diquark weights)
42887       IDW=160
42888       IF(MBARY.EQ.1)THEN
42889          IF(MSTU(121).EQ.0) IDW=150
42890          SQWT=PARF(IDW+1)
42891          IF(MSTU(121).GT.0) SQWT=SQWT*PARF(135)*PARF(138)**MSTU(121)
42892          KFQPOP=1+INT((2D0+SQWT)*PYR(0))
42893 C..   Shift to s-curtain parameters if needed
42894          IF(KFQPOP.GE.3.AND.MSTJ(12).GE.5)THEN
42895             PARF(194)=PARF(138)*PARF(139)
42896             PARF(193)=PARJ(8)+PARJ(9)
42897          ENDIF
42898       ENDIF
42899  
42900 C.. x->H+qq: Get vertex quark
42901       IF(MBARY.EQ.-1.AND.MSTJ(12).GE.5)THEN
42902          IDW=MSTU(122)
42903          MSTU(121)=MSTU(121)-1
42904          IF(IDW.EQ.170) THEN
42905             IF(MSTU(121).EQ.0)THEN
42906                IPOS=3*MIN(KFQPOP-1,2)+MIN(KFQOLD-1,2)
42907             ELSE
42908                IPOS=3*3+3*MAX(0,MIN(KFQPOP-2,1))+MIN(KFQOLD-1,2)
42909             ENDIF
42910          ELSE
42911             IF(MSTU(121).EQ.0)THEN
42912                IPOS=3*5+5*MIN(KFQPOP-1,3)+MIN(KFQOLD-1,4)
42913             ELSE
42914                IPOS=3*5+5*4+MIN(KFQOLD-1,4)
42915             ENDIF
42916          ENDIF
42917          IPOS=200+30*IPOS+1
42918  
42919          IMES=-1
42920          RMES=PYR(0)*PARF(194)
42921   120    IMES=IMES+1
42922          RMES=RMES-PARF(IPOS+IMES)
42923          IF(IMES.EQ.30) THEN
42924             MSTU(121)=-1
42925             KF=-111
42926             RETURN
42927          ENDIF
42928          IF(RMES.GT.0D0) GOTO 120
42929          KMUL=IMES/5
42930          KFJ=2*KMUL+1
42931          IF(KMUL.EQ.2) KFJ=10003
42932          IF(KMUL.EQ.3) KFJ=10001
42933          IF(KMUL.EQ.4) KFJ=20003
42934          IF(KMUL.EQ.5) KFJ=5
42935          IDIAG=0
42936          KFQVER=MOD(IMES,5)+1
42937          IF(KFQVER.GE.KFQOLD) KFQVER=KFQVER+1
42938          IF(KFQVER.GT.3)THEN
42939             IDIAG=KFQVER-3
42940             KFQVER=KFQOLD
42941          ENDIF
42942       ELSE
42943          IF(MBARY.EQ.-1) IDW=170
42944          SQWT=PARF(IDW+2)
42945          IF(KFQPOP.EQ.3) SQWT=PARF(IDW+3)
42946          IF(KFQPOP.GT.3) SQWT=PARF(IDW+3)*(1D0/PARF(IDW+5)+1D0)/2D0
42947          KFQVER=MIN(3,1+INT((2D0+SQWT)*PYR(0)))
42948          IF(KFQPOP.LT.3.AND.KFQVER.LT.3)THEN
42949             KFQVER=KFQPOP
42950             IF(PYR(0).GT.PARF(IDW+4)) KFQVER=3-KFQPOP
42951          ENDIF
42952       ENDIF
42953  
42954 C..x->H+qq: form outgoing diquark with KFQPOP flag at 10000-pos
42955       KFLDS=3
42956       IF(KFQPOP.NE.KFQVER)THEN
42957          SWT=PARF(IDW+7)
42958          IF(KFQVER.EQ.3) SWT=PARF(IDW+6)
42959          IF(KFQPOP.GE.3) SWT=PARF(IDW+5)
42960          IF((1D0+SWT)*PYR(0).LT.1D0) KFLDS=1
42961       ENDIF
42962       KFDIQ=900*MAX(KFQVER,KFQPOP)+100*(KFQVER+KFQPOP)+KFLDS
42963      &      +10000*KFQPOP
42964       KFL3=ISIGN(KFDIQ,KFIN)
42965  
42966 C..x->M+y: flavour for meson.
42967   130 IF(MBARY.LE.0)THEN
42968         KFLA=MAX(KFQOLD,KFQVER)
42969         KFLB=MIN(KFQOLD,KFQVER)
42970         KFS=ISIGN(1,KFL1)
42971         IF(KFLA.NE.KFQOLD) KFS=-KFS
42972 C... Form meson, with spin and flavour mixing for diagonal states.
42973         IF(MBARY.EQ.-1.AND.MSTJ(12).GE.5)THEN
42974            IF(IDIAG.GT.0) KF=110*IDIAG+KFJ
42975            IF(IDIAG.EQ.0) KF=(100*KFLA+10*KFLB+KFJ)*KFS*(-1)**KFLA
42976            RETURN
42977         ENDIF
42978         IF(KFLA.LE.2) KMUL=INT(PARJ(11)+PYR(0))
42979         IF(KFLA.EQ.3) KMUL=INT(PARJ(12)+PYR(0))
42980         IF(KFLA.GE.4) KMUL=INT(PARJ(13)+PYR(0))
42981         IF(KMUL.EQ.0.AND.PARJ(14).GT.0D0)THEN
42982           IF(PYR(0).LT.PARJ(14)) KMUL=2
42983         ELSEIF(KMUL.EQ.1.AND.PARJ(15)+PARJ(16)+PARJ(17).GT.0D0)THEN
42984           RMUL=PYR(0)
42985           IF(RMUL.LT.PARJ(15)) KMUL=3
42986           IF(KMUL.EQ.1.AND.RMUL.LT.PARJ(15)+PARJ(16)) KMUL=4
42987           IF(KMUL.EQ.1.AND.RMUL.LT.PARJ(15)+PARJ(16)+PARJ(17)) KMUL=5
42988         ENDIF
42989         KFLS=3
42990         IF(KMUL.EQ.0.OR.KMUL.EQ.3) KFLS=1
42991         IF(KMUL.EQ.5) KFLS=5
42992         IF(KFLA.NE.KFLB)THEN
42993           KF=(100*KFLA+10*KFLB+KFLS)*KFS*(-1)**KFLA
42994         ELSE
42995           RMIX=PYR(0)
42996           IMIX=2*KFLA+10*KMUL
42997           IF(KFLA.LE.3) KF=110*(1+INT(RMIX+PARF(IMIX-1))+
42998      &    INT(RMIX+PARF(IMIX)))+KFLS
42999           IF(KFLA.GE.4) KF=110*KFLA+KFLS
43000         ENDIF
43001         IF(KMUL.EQ.2.OR.KMUL.EQ.3) KF=KF+ISIGN(10000,KF)
43002         IF(KMUL.EQ.4) KF=KF+ISIGN(20000,KF)
43003  
43004 C..Optional extra suppression of eta and eta'.
43005 C..Allow shift to qq->B+q in old version (set IRANK to 0)
43006         IF(KF.EQ.221.OR.KF.EQ.331)THEN
43007            IF(PYR(0).GT.PARJ(25+KF/300))THEN
43008               IF(KF2A.GT.0) GOTO 130
43009               IF(MSTJ(12).LT.4) IRANK=0
43010               GOTO 110
43011            ENDIF
43012         ENDIF
43013         MSTU(121)=0
43014  
43015 C.. x->B+y: Flavour for baryon
43016       ELSE
43017         KFLA=KFQVER
43018         IF(KF1A.LE.10) KFLA=KFQOLD
43019         KFLB=MOD(KFDIQ/1000,10)
43020         KFLC=MOD(KFDIQ/100,10)
43021         KFLDS=MOD(KFDIQ,10)
43022         KFLD=MAX(KFLA,KFLB,KFLC)
43023         KFLF=MIN(KFLA,KFLB,KFLC)
43024         KFLE=KFLA+KFLB+KFLC-KFLD-KFLF
43025  
43026 C...  SU(6) factors for formation of baryon.
43027         KBARY=3
43028         KDMAX=5
43029         KFLG=KFLB
43030         IF(KFLB.NE.KFLC)THEN
43031            KBARY=2*KFLDS-1
43032            KDMAX=1+KFLDS/2
43033            IF(KFLB.GT.2) KDMAX=KDMAX+2
43034         ENDIF
43035         IF(KFLA.NE.KFLB.AND.KFLA.NE.KFLC)THEN
43036            KBARY=KBARY+1
43037            KFLG=KFLA
43038         ENDIF
43039  
43040         SU6MAX=PARF(140+KDMAX)
43041         SU6DEC=PARJ(18)
43042         SU6S  =PARF(146)
43043         IF(MSTJ(12).GE.5.AND.IRANK.EQ.0) THEN
43044            SU6MAX=1D0
43045            SU6DEC=1D0
43046            SU6S  =1D0
43047         ENDIF
43048         SU6OCT=PARF(60+KBARY)
43049         IF(KFLG.GT.MAX(KFLA+KFLB-KFLG,2))THEN
43050            SU6OCT=SU6OCT*4*SU6S/(3*SU6S+1)
43051            IF(KBARY.EQ.2) SU6OCT=PARF(60+KBARY)*4/(3*SU6S+1)
43052         ELSE
43053            IF(KBARY.EQ.6) SU6OCT=SU6OCT*(3+SU6S)/(3*SU6S+1)
43054         ENDIF
43055         SU6WT=SU6OCT+SU6DEC*PARF(70+KBARY)
43056  
43057 C..   SU(6) test. Old options enforce new baryon if q->B+qq is rejected.
43058         IF(SU6WT.LT.PYR(0)*SU6MAX.AND.KF2A.EQ.0)THEN
43059            MSTU(121)=0
43060            IF(MSTJ(12).LE.2.AND.MBARY.EQ.1) MSTU(121)=-1
43061            GOTO 110
43062         ENDIF
43063  
43064 C.. Form baryon. Distinguish Lambda- and Sigmalike baryons.
43065         KSIG=1
43066         KFLS=2
43067         IF(SU6WT*PYR(0).GT.SU6OCT) KFLS=4
43068         IF(KFLS.EQ.2.AND.KFLD.GT.KFLE.AND.KFLE.GT.KFLF)THEN
43069           KSIG=KFLDS/3
43070           IF(KFLA.NE.KFLD) KSIG=INT(3*SU6S/(3*SU6S+KFLDS**2)+PYR(0))
43071         ENDIF
43072         KF=ISIGN(1000*KFLD+100*KFLE+10*KFLF+KFLS,KFL1)
43073         IF(KSIG.EQ.0) KF=ISIGN(1000*KFLD+100*KFLF+10*KFLE+KFLS,KFL1)
43074       ENDIF
43075       RETURN
43076  
43077 C...Use tabulated probabilities to select new flavour and hadron.
43078   140 IF(KTAB2.EQ.0.AND.MSTJ(12).LE.0) THEN
43079         KT3L=1
43080         KT3U=6
43081       ELSEIF(KTAB2.EQ.0.AND.KTAB1.GE.7.AND.MSTJ(12).LE.1) THEN
43082         KT3L=1
43083         KT3U=6
43084       ELSEIF(KTAB2.EQ.0) THEN
43085         KT3L=1
43086         KT3U=22
43087       ELSE
43088         KT3L=KTAB2
43089         KT3U=KTAB2
43090       ENDIF
43091       RFL=0D0
43092       DO 160 KTS=0,2
43093         DO 150 KT3=KT3L,KT3U
43094           RFL=RFL+PARF(120+80*KTAB1+25*KTS+KT3)
43095   150   CONTINUE
43096   160 CONTINUE
43097       RFL=PYR(0)*RFL
43098       DO 180 KTS=0,2
43099         KTABS=KTS
43100         DO 170 KT3=KT3L,KT3U
43101           KTAB3=KT3
43102           RFL=RFL-PARF(120+80*KTAB1+25*KTS+KT3)
43103           IF(RFL.LE.0D0) GOTO 190
43104   170   CONTINUE
43105   180 CONTINUE
43106   190 CONTINUE
43107  
43108 C...Reconstruct flavour of produced quark/diquark.
43109       IF(KTAB3.LE.6) THEN
43110         KFL3A=KTAB3
43111         KFL3B=0
43112         KFL3=ISIGN(KFL3A,KFL1*(2*KTAB1-13))
43113       ELSE
43114         KFL3A=1
43115         IF(KTAB3.GE.8) KFL3A=2
43116         IF(KTAB3.GE.11) KFL3A=3
43117         IF(KTAB3.GE.16) KFL3A=4
43118         KFL3B=(KTAB3-6-KFL3A*(KFL3A-2))/2
43119         KFL3=1000*KFL3A+100*KFL3B+1
43120         IF(KFL3A.EQ.KFL3B.OR.KTAB3.NE.6+KFL3A*(KFL3A-2)+2*KFL3B) KFL3=
43121      &  KFL3+2
43122         KFL3=ISIGN(KFL3,KFL1*(13-2*KTAB1))
43123       ENDIF
43124  
43125 C...Reconstruct meson code.
43126       IF(KFL3A.EQ.KFL1A.AND.KFL3B.EQ.KFL1B.AND.(KFL3A.LE.3.OR.
43127      &KFL3B.NE.0)) THEN
43128         RFL=PYR(0)*(PARF(143+80*KTAB1+25*KTABS)+PARF(144+80*KTAB1+
43129      &  25*KTABS)+PARF(145+80*KTAB1+25*KTABS))
43130         KF=110+2*KTABS+1
43131         IF(RFL.GT.PARF(143+80*KTAB1+25*KTABS)) KF=220+2*KTABS+1
43132         IF(RFL.GT.PARF(143+80*KTAB1+25*KTABS)+PARF(144+80*KTAB1+
43133      &  25*KTABS)) KF=330+2*KTABS+1
43134       ELSEIF(KTAB1.LE.6.AND.KTAB3.LE.6) THEN
43135         KFLA=MAX(KTAB1,KTAB3)
43136         KFLB=MIN(KTAB1,KTAB3)
43137         KFS=ISIGN(1,KFL1)
43138         IF(KFLA.NE.KF1A) KFS=-KFS
43139         KF=(100*KFLA+10*KFLB+2*KTABS+1)*KFS*(-1)**KFLA
43140       ELSEIF(KTAB1.GE.7.AND.KTAB3.GE.7) THEN
43141         KFS=ISIGN(1,KFL1)
43142         IF(KFL1A.EQ.KFL3A) THEN
43143           KFLA=MAX(KFL1B,KFL3B)
43144           KFLB=MIN(KFL1B,KFL3B)
43145           IF(KFLA.NE.KFL1B) KFS=-KFS
43146         ELSEIF(KFL1A.EQ.KFL3B) THEN
43147           KFLA=KFL3A
43148           KFLB=KFL1B
43149           KFS=-KFS
43150         ELSEIF(KFL1B.EQ.KFL3A) THEN
43151           KFLA=KFL1A
43152           KFLB=KFL3B
43153         ELSEIF(KFL1B.EQ.KFL3B) THEN
43154           KFLA=MAX(KFL1A,KFL3A)
43155           KFLB=MIN(KFL1A,KFL3A)
43156           IF(KFLA.NE.KFL1A) KFS=-KFS
43157         ELSE
43158           CALL PYERRM(2,'(PYKFDI:) no matching flavours for qq -> qq')
43159           GOTO 100
43160         ENDIF
43161         KF=(100*KFLA+10*KFLB+2*KTABS+1)*KFS*(-1)**KFLA
43162  
43163 C...Reconstruct baryon code.
43164       ELSE
43165         IF(KTAB1.GE.7) THEN
43166           KFLA=KFL3A
43167           KFLB=KFL1A
43168           KFLC=KFL1B
43169         ELSE
43170           KFLA=KFL1A
43171           KFLB=KFL3A
43172           KFLC=KFL3B
43173         ENDIF
43174         KFLD=MAX(KFLA,KFLB,KFLC)
43175         KFLF=MIN(KFLA,KFLB,KFLC)
43176         KFLE=KFLA+KFLB+KFLC-KFLD-KFLF
43177         IF(KTABS.EQ.0) KF=ISIGN(1000*KFLD+100*KFLF+10*KFLE+2,KFL1)
43178         IF(KTABS.GE.1) KF=ISIGN(1000*KFLD+100*KFLE+10*KFLF+2*KTABS,KFL1)
43179       ENDIF
43180  
43181 C...Check that constructed flavour code is an allowed one.
43182       IF(KFL2.NE.0) KFL3=0
43183       KC=PYCOMP(KF)
43184       IF(KC.EQ.0) THEN
43185         CALL PYERRM(2,'(PYKFDI:) user-defined flavour probabilities '//
43186      &  'failed')
43187         GOTO 100
43188       ENDIF
43189  
43190       RETURN
43191       END
43192 
43193 C*********************************************************************
43194  
43195 C...PYNMES
43196 C...Generates number of popcorn mesons and stores some relevant
43197 C...parameters.
43198  
43199       SUBROUTINE PYNMES(KFDIQ)
43200  
43201 C...Double precision and integer declarations.
43202       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43203       IMPLICIT INTEGER(I-N)
43204       INTEGER PYK,PYCHGE,PYCOMP
43205 C...Commonblocks.
43206       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43207       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
43208       SAVE /PYDAT1/,/PYDAT2/
43209  
43210       MSTU(121)=0
43211       IF(MSTJ(12).LT.2) RETURN
43212  
43213 C..Old version: Get 1 or 0 popcorn mesons
43214       IF(MSTJ(12).LT.5)THEN
43215          POPWT=PARF(131)
43216          IF(KFDIQ.NE.0) THEN
43217             KFDIQA=IABS(KFDIQ)
43218             KFA=MOD(KFDIQA/1000,10)
43219             KFB=MOD(KFDIQA/100,10)
43220             KFS=MOD(KFDIQA,10)
43221             POPWT=PARF(132)
43222             IF(KFA.EQ.3) POPWT=PARF(133)
43223             IF(KFB.EQ.3) POPWT=PARF(134)
43224             IF(KFS.EQ.1) POPWT=POPWT*SQRT(PARJ(4))
43225          ENDIF
43226          MSTU(121)=INT(POPWT/(1D0+POPWT)+PYR(0))
43227          RETURN
43228       ENDIF
43229  
43230 C..New version: Store popcorn- or rank 0 diquark parameters
43231       MSTU(122)=170
43232       PARF(193)=PARJ(8)
43233       PARF(194)=PARF(139)
43234       IF(KFDIQ.NE.0) THEN
43235          MSTU(122)=180
43236          PARF(193)=PARJ(10)
43237          PARF(194)=PARF(140)
43238       ENDIF
43239       IF(PARF(194).LT.1D-5.OR.PARF(194).GT.1D0-1D-5) THEN
43240          IF(PARF(194).GT.1D0-1D-5) CALL PYERRM(9,
43241      &        '(PYNMES:) Neglecting too large popcorn possibility')
43242          RETURN
43243       ENDIF
43244  
43245 C..New version: Get number of popcorn mesons
43246   100 RTST=PYR(0)
43247       MSTU(121)=-1
43248   110 MSTU(121)=MSTU(121)+1
43249       RTST=RTST/PARF(194)
43250       IF(RTST.LT.1D0) GOTO 110
43251       IF(KFDIQ.EQ.0.AND.PYR(0)*(2D0+PARF(135)*PARF(161)).GT.
43252      &     (2D0+PARF(135)*PARF(161)*PARF(138)**MSTU(121))) GOTO 100
43253       RETURN
43254       END
43255   
43256 C***************************************************************
43257 
43258 C...PYKFIN
43259 C...Precalculates a set of diquark and popcorn weights.
43260  
43261       SUBROUTINE PYKFIN
43262  
43263 C...Double precision and integer declarations.
43264       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43265       IMPLICIT INTEGER(I-N)
43266       INTEGER PYK,PYCHGE,PYCOMP
43267 C...Commonblocks.
43268       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43269       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
43270       SAVE /PYDAT1/,/PYDAT2/
43271  
43272       DIMENSION SU6(12),SU6M(7),QBB(7),QBM(7),DMB(14)
43273         
43274  
43275       MSTU(123)=1
43276 C..Diquark indices for dimensional variables
43277       IUD1=1
43278       IUU1=2
43279       IUS0=3
43280       ISU0=4
43281       IUS1=5
43282       ISU1=6
43283       ISS1=7
43284 
43285 C.. *** SU(6) factors **
43286 C..Modify with decuplet- (and Sigma/Lambda-) suppression.
43287       PARF(146)=1D0
43288       IF(MSTJ(12).GE.5) PARF(146)=3D0*PARJ(18)/(2D0*PARJ(18)+1D0)
43289       IF(PARJ(18).LT.1D0-1D-5.AND.MSTJ(12).LT.5) CALL PYERRM(9,
43290      &     '(PYKFIN:) PARJ(18)<1 combined with 0<MSTJ(12)<5 option')
43291       DO 100 I=1,6
43292          SU6(I)=PARF(60+I)
43293          SU6(6+I)=SU6(I)*4*PARF(146)/(3*PARF(146)+1)
43294   100 CONTINUE
43295       SU6(8)=SU6(2)*4/(3*PARF(146)+1)
43296       SU6(6)=SU6(6)*(3+PARF(146))/(3*PARF(146)+1)
43297       DO 110 I=1,6
43298          SU6(I)=SU6(I)+PARJ(18)*PARF(70+I)
43299          SU6(6+I)=SU6(6+I)+PARJ(18)*PARF(70+I)
43300   110 CONTINUE
43301  
43302 C..SU(6)max            q       q'     s,c,b
43303       SU6MUD    =MAX(SU6(1) ,       SU6(8) )
43304       SU6M(IUD1)=MAX(SU6(5) ,       SU6(12))
43305       SU6M(ISU0)=MAX(SU6(7) ,SU6(2),SU6MUD )
43306       SU6M(IUU1)=MAX(SU6(3) ,SU6(4),SU6(10))
43307       SU6M(ISU1)=MAX(SU6(11),SU6(6),SU6M(IUD1))
43308       SU6M(IUS0)=SU6M(ISU0)
43309       SU6M(ISS1)=SU6M(IUU1)
43310       SU6M(IUS1)=SU6M(ISU1)
43311  
43312 C..Store SU(6)max, in order UD0,UD1,US0,US1,QQ1
43313       PARF(141)=SU6MUD
43314       PARF(142)=SU6M(IUD1)
43315       PARF(143)=SU6M(ISU0)
43316       PARF(144)=SU6M(ISU1)
43317       PARF(145)=SU6M(ISS1)
43318 
43319 C..diquark SU(6) survival = 
43320 C..sum over quark (quark tunnel weight)*(SU(6)).
43321       PUD0=(2D0*SU6(1)+PARJ(2)*SU6(8))
43322       DMB(ISU0)=(SU6(7)+SU6(2)+PARJ(2)*SU6(1))/PUD0
43323       DMB(IUS0)=DMB(ISU0)
43324       DMB(ISS1)=(2D0*SU6(4)+PARJ(2)*SU6(3))/PUD0
43325       DMB(IUU1)=(SU6(3)+SU6(4)+PARJ(2)*SU6(10))/PUD0
43326       DMB(ISU1)=(SU6(11)+SU6(6)+PARJ(2)*SU6(5))/PUD0
43327       DMB(IUS1)=DMB(ISU1)
43328       DMB(IUD1)=(2D0*SU6(5)+PARJ(2)*SU6(12))/PUD0
43329  
43330 C.. *** Tunneling factors for Diquark production***
43331 C.. T: half a curtain pair = sqrt(curtain pair factor)
43332       IF(MSTJ(12).GE.5) THEN
43333          PMUD0=PYMASS(2101)
43334          PMUD1=PYMASS(2103)-PMUD0
43335          PMUS0=PYMASS(3201)-PMUD0
43336          PMUS1=PYMASS(3203)-PMUS0-PMUD0
43337          PMSS1=PYMASS(3303)-PMUS0-PMUD0
43338          QBB(ISU0)=EXP(-(PARJ(9)+PARJ(8))*PMUS0-PARJ(9)*PARF(191))
43339          QBB(IUS0)=EXP(-PARJ(8)*PMUS0)
43340          QBB(ISS1)=EXP(-(PARJ(9)+PARJ(8))*PMSS1)*QBB(ISU0)
43341          QBB(IUU1)=EXP(-PARJ(8)*PMUD1)
43342          QBB(ISU1)=EXP(-(PARJ(9)+PARJ(8))*PMUS1)*QBB(ISU0)
43343          QBB(IUS1)=EXP(-PARJ(8)*PMUS1)*QBB(IUS0)
43344          QBB(IUD1)=QBB(IUU1)
43345       ELSE
43346          PAR2M=SQRT(PARJ(2))
43347          PAR3M=SQRT(PARJ(3))
43348          PAR4M=SQRT(PARJ(4))
43349          QBB(ISU0)=PAR2M*PAR3M
43350          QBB(IUS0)=PAR3M
43351          QBB(ISS1)=PAR2M*PARJ(3)*PAR4M
43352          QBB(IUU1)=PAR4M
43353          QBB(ISU1)=PAR4M*QBB(ISU0)
43354          QBB(IUS1)=PAR4M*QBB(IUS0)
43355          QBB(IUD1)=PAR4M
43356       ENDIF
43357  
43358 C.. tau: spin*(vertex factor)*(T = half-curtain factor)
43359       QBM(ISU0)=QBB(ISU0)
43360       QBM(IUS0)=PARJ(2)*QBB(IUS0)
43361       QBM(ISS1)=PARJ(2)*6D0*QBB(ISS1)
43362       QBM(IUU1)=6D0*QBB(IUU1)
43363       QBM(ISU1)=3D0*QBB(ISU1)
43364       QBM(IUS1)=PARJ(2)*3D0*QBB(IUS1)
43365       QBM(IUD1)=3D0*QBB(IUD1)
43366 
43367 C.. Combine T and tau to diquark weight for q-> B+B+..
43368       DO 120 I=1,7
43369          QBB(I)=QBB(I)*QBM(I)
43370   120 CONTINUE
43371   
43372       IF(MSTJ(12).GE.5)THEN
43373 C..New version: tau  for rank 0 diquark.
43374          DMB(7+ISU0)=EXP(-PARJ(10)*PMUS0)
43375          DMB(7+IUS0)=PARJ(2)*DMB(7+ISU0)
43376          DMB(7+ISS1)=6D0*PARJ(2)*EXP(-PARJ(10)*PMSS1)*DMB(7+ISU0)
43377          DMB(7+IUU1)=6D0*EXP(-PARJ(10)*PMUD1)
43378          DMB(7+ISU1)=3D0*EXP(-PARJ(10)*PMUS1)*DMB(7+ISU0)
43379          DMB(7+IUS1)=PARJ(2)*DMB(7+ISU1)
43380          DMB(7+IUD1)=DMB(7+IUU1)/2D0
43381  
43382 C..New version: curtain flavour ratios.
43383 C.. s/u for q->B+M+...
43384 C.. s/u for rank 0 diquark: su -> ...M+B+...
43385 C.. Q/q for heavy rank 0 diquark: Qu -> ...M+B+...
43386          WU=1D0+QBM(IUD1)+QBM(IUS0)+QBM(IUS1)+QBM(IUU1)
43387          PARF(135)=(2D0*(QBM(ISU0)+QBM(ISU1))+QBM(ISS1))/WU
43388          WU=1D0+DMB(7+IUD1)+DMB(7+IUS0)+DMB(7+IUS1)+DMB(7+IUU1)
43389          PARF(136)=(2D0*(DMB(7+ISU0)+DMB(7+ISU1))+DMB(7+ISS1))/WU
43390          PARF(137)=(DMB(7+ISU0)+DMB(7+ISU1))*
43391      &        (2D0+DMB(7+ISS1)/(2D0*DMB(7+ISU1)))/WU
43392       ELSE
43393 C..Old version: reset unused rank 0 diquark weights and 
43394 C..             unused diquark SU(6) survival weights
43395          DO 130 I=1,7
43396             IF(MSTJ(12).LT.3) DMB(I)=1D0
43397             DMB(7+I)=1D0
43398  130     CONTINUE
43399 
43400 C..Old version: Shuffle PARJ(7) into tau
43401          QBM(IUS0)=QBM(IUS0)*PARJ(7)
43402          QBM(ISS1)=QBM(ISS1)*PARJ(7)
43403          QBM(IUS1)=QBM(IUS1)*PARJ(7)
43404  
43405 C..Old version: curtain flavour ratios.
43406 C.. s/u for q->B+M+...
43407 C.. s/u for rank 0 diquark: su -> ...M+B+...
43408 C.. Q/q for heavy rank 0 diquark: Qu -> ...M+B+...
43409          WU=1D0+QBM(IUD1)+QBM(IUS0)+QBM(IUS1)+QBM(IUU1)
43410          PARF(135)=(2D0*(QBM(ISU0)+QBM(ISU1))+QBM(ISS1))/WU
43411          PARF(136)=PARF(135)*PARJ(6)*QBM(ISU0)/QBM(IUS0)
43412          PARF(137)=(1D0+QBM(IUD1))*(2D0+QBM(IUS0))/WU
43413       ENDIF
43414  
43415 C..Combine diquark SU(6) survival, SU(6)max, tau and T into factors for:
43416 C..  rank0 D->M+B+..; D->M+B+..; q->B+M+..; q->B+B..
43417       DO 140 I=1,7
43418          DMB(7+I)=DMB(7+I)*DMB(I)
43419          DMB(I)=DMB(I)*QBM(I)
43420          QBM(I)=QBM(I)*SU6M(I)/SU6MUD
43421          QBB(I)=QBB(I)*SU6M(I)/SU6MUD
43422   140 CONTINUE
43423 
43424 C.. *** Popcorn factors ***
43425  
43426       IF(MSTJ(12).LT.5)THEN
43427 C.. Old version: Resulting popcorn weights.
43428          PARF(138)=PARJ(6)
43429          WS=PARF(135)*PARF(138)
43430          WQ=WU*PARJ(5)/3D0
43431          PARF(132)=WQ*QBM(IUD1)/QBB(IUD1)
43432          PARF(133)=WQ*
43433      &        (QBM(IUS1)/QBB(IUS1)+WS*QBM(ISU1)/QBB(ISU1))/2D0
43434          PARF(134)=WQ*WS*QBM(ISS1)/QBB(ISS1)
43435          PARF(131)=WQ*(1D0+QBM(IUD1)+QBM(IUU1)+QBM(IUS0)+QBM(IUS1)+
43436      &                 WS*(QBM(ISU0)+QBM(ISU1)+QBM(ISS1)/2D0))/
43437      &        (1D0+QBB(IUD1)+QBB(IUU1)+
43438      &        2D0*(QBB(IUS0)+QBB(IUS1))+QBB(ISS1)/2D0)
43439       ELSE
43440 C..New version: Store weights for popcorn mesons,
43441 C..get prel. popcorn weights.
43442          DO 150 IPOS=201,1400
43443             PARF(IPOS)=0D0
43444   150    CONTINUE
43445          DO 160 I=138,140
43446             PARF(I)=0D0
43447   160    CONTINUE
43448          IPOS=200
43449          PARF(193)=PARJ(8)
43450          DO 240 MR=0,7,7
43451            IF(MR.EQ.7) PARF(193)=PARJ(10)
43452            SQWT=2D0*(DMB(MR+IUS0)+DMB(MR+IUS1))/
43453      &          (1D0+DMB(MR+IUD1)+DMB(MR+IUU1))
43454            QQWT=DMB(MR+IUU1)/(1D0+DMB(MR+IUD1)+DMB(MR+IUU1))
43455            DO 230 NMES=0,1
43456              IF(NMES.EQ.1) SQWT=PARJ(2)
43457              DO 220 KFQPOP=1,4
43458                IF(MR.EQ.0.AND.KFQPOP.GT.3) GOTO 220
43459                IF(NMES.EQ.0.AND.KFQPOP.GE.3)THEN
43460                   SQWT=DMB(MR+ISS1)/(DMB(MR+ISU0)+DMB(MR+ISU1))
43461                   QQWT=0.5D0
43462                   IF(MR.EQ.0) PARF(193)=PARJ(8)+PARJ(9)
43463                   IF(KFQPOP.EQ.4) SQWT=SQWT*(1D0/DMB(7+ISU1)+1D0)/2D0
43464                ENDIF
43465                DO 210 KFQOLD =1,5
43466                   IF(MR.EQ.0.AND.KFQOLD.GT.3) GOTO 210
43467                   IF(NMES.EQ.1) THEN
43468                      IF(MR.EQ.0.AND.KFQPOP.EQ.1) GOTO 210
43469                      IF(MR.EQ.7.AND.KFQPOP.NE.1) GOTO 210
43470                   ENDIF
43471                   WTTOT=0D0
43472                   WTFAIL=0D0
43473       DO 190 KMUL=0,5
43474          PJWT=PARJ(12+KMUL)
43475          IF(KMUL.EQ.0) PJWT=1D0-PARJ(14)
43476          IF(KMUL.EQ.1) PJWT=1D0-PARJ(15)-PARJ(16)-PARJ(17)
43477          IF(PJWT.LE.0D0) GOTO 190
43478          IF(PJWT.GT.1D0) PJWT=1D0
43479          IMES=5*KMUL
43480          IMIX=2*KFQOLD+10*KMUL
43481          KFJ=2*KMUL+1
43482          IF(KMUL.EQ.2) KFJ=10003
43483          IF(KMUL.EQ.3) KFJ=10001
43484          IF(KMUL.EQ.4) KFJ=20003
43485          IF(KMUL.EQ.5) KFJ=5
43486          DO 180 KFQVER =1,3
43487             KFLA=MAX(KFQOLD,KFQVER)
43488             KFLB=MIN(KFQOLD,KFQVER)
43489             SWT=PARJ(11+KFLA/3+KFLA/4)
43490             IF(KMUL.EQ.0.OR.KMUL.EQ.2) SWT=1D0-SWT
43491             SWT=SWT*PJWT
43492             QWT=SQWT/(2D0+SQWT)
43493             IF(KFQVER.LT.3)THEN
43494                IF(KFQVER.EQ.KFQPOP) QWT=(1D0-QWT)*QQWT
43495                IF(KFQVER.NE.KFQPOP) QWT=(1D0-QWT)*(1D0-QQWT)
43496             ENDIF
43497             IF(KFQVER.NE.KFQOLD)THEN
43498                IMES=IMES+1
43499                KFM=100*KFLA+10*KFLB+KFJ
43500                PMM=PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
43501                PARF(IPOS+IMES)=QWT*SWT*EXP(-PARF(193)*PMM)
43502                WTTOT=WTTOT+PARF(IPOS+IMES)
43503             ELSE
43504                DO 170 ID=3,5
43505                   IF(ID.EQ.3) DWT=1D0-PARF(IMIX-1)
43506                   IF(ID.EQ.4) DWT=PARF(IMIX-1)-PARF(IMIX)
43507                   IF(ID.EQ.5) DWT=PARF(IMIX)
43508                   KFM=110*(ID-2)+KFJ
43509                   PMM=PMAS(PYCOMP(KFM),1)-PMAS(PYCOMP(KFM),3)
43510                   PARF(IPOS+5*KMUL+ID)=QWT*SWT*DWT*EXP(-PARF(193)*PMM)
43511                   IF(KMUL.EQ.0.AND.ID.GT.3) THEN
43512                      WTFAIL=WTFAIL+QWT*SWT*DWT*(1D0-PARJ(21+ID))
43513                      PARF(IPOS+5*KMUL+ID)=
43514      &                    PARF(IPOS+5*KMUL+ID)*PARJ(21+ID)
43515                   ENDIF
43516                   WTTOT=WTTOT+PARF(IPOS+5*KMUL+ID)
43517   170          CONTINUE
43518             ENDIF
43519   180    CONTINUE
43520   190 CONTINUE
43521                   DO 200 IMES=1,30
43522                      PARF(IPOS+IMES)=PARF(IPOS+IMES)/(1D0-WTFAIL)
43523   200             CONTINUE
43524                   IF(MR.EQ.7) PARF(140)=
43525      &                 MAX(PARF(140),WTTOT/(1D0-WTFAIL))
43526                   IF(MR.EQ.0) PARF(139-KFQPOP/3)=
43527      &                 MAX(PARF(139-KFQPOP/3),WTTOT/(1D0-WTFAIL))
43528                   IPOS=IPOS+30
43529   210           CONTINUE
43530   220         CONTINUE
43531   230       CONTINUE
43532   240    CONTINUE
43533          IF(PARF(139).GT.1D-10) PARF(138)=PARF(138)/PARF(139)
43534          MSTU(121)=0
43535  
43536       ENDIF
43537  
43538 C..Recombine diquark weights to flavour and spin ratios
43539       PARF(151)=(2D0*(QBB(ISU0)+QBB(ISU1))+QBB(ISS1))/
43540      &        (1D0+QBB(IUD1)+QBB(IUU1)+QBB(IUS0)+QBB(IUS1))
43541       PARF(152)=2D0*(QBB(IUS0)+QBB(IUS1))/(1D0+QBB(IUD1)+QBB(IUU1))
43542       PARF(153)=QBB(ISS1)/(QBB(ISU0)+QBB(ISU1))
43543       PARF(154)=QBB(IUU1)/(1D0+QBB(IUD1)+QBB(IUU1))
43544       PARF(155)=QBB(ISU1)/QBB(ISU0)
43545       PARF(156)=QBB(IUS1)/QBB(IUS0)
43546       PARF(157)=QBB(IUD1)
43547 
43548       PARF(161)=(2D0*(QBM(ISU0)+QBM(ISU1))+QBM(ISS1))/
43549      &        (1D0+QBM(IUD1)+QBM(IUU1)+QBM(IUS0)+QBM(IUS1))
43550       PARF(162)=2D0*(QBM(IUS0)+QBM(IUS1))/(1D0+QBM(IUD1)+QBM(IUU1))
43551       PARF(163)=QBM(ISS1)/(QBM(ISU0)+QBM(ISU1))
43552       PARF(164)=QBM(IUU1)/(1D0+QBM(IUD1)+QBM(IUU1))
43553       PARF(165)=QBM(ISU1)/QBM(ISU0)
43554       PARF(166)=QBM(IUS1)/QBM(IUS0)
43555       PARF(167)=QBM(IUD1)
43556 
43557       PARF(171)=(2D0*(DMB(ISU0)+DMB(ISU1))+DMB(ISS1))/
43558      &        (1D0+DMB(IUD1)+DMB(IUU1)+DMB(IUS0)+DMB(IUS1))
43559       PARF(172)=2D0*(DMB(IUS0)+DMB(IUS1))/(1D0+DMB(IUD1)+DMB(IUU1))
43560       PARF(173)=DMB(ISS1)/(DMB(ISU0)+DMB(ISU1))
43561       PARF(174)=DMB(IUU1)/(1D0+DMB(IUD1)+DMB(IUU1))
43562       PARF(175)=DMB(ISU1)/DMB(ISU0)
43563       PARF(176)=DMB(IUS1)/DMB(IUS0)
43564       PARF(177)=DMB(IUD1)
43565 
43566       PARF(185)=DMB(7+ISU1)/DMB(7+ISU0)
43567       PARF(186)=DMB(7+IUS1)/DMB(7+IUS0)
43568       PARF(187)=DMB(7+IUD1)
43569 
43570       RETURN
43571       END
43572  
43573 
43574 C*********************************************************************
43575  
43576 C...PYPTDI
43577 C...Generates transverse momentum according to a Gaussian.
43578  
43579       SUBROUTINE PYPTDI(KFL,PX,PY)
43580  
43581 C...Double precision and integer declarations.
43582       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43583       IMPLICIT INTEGER(I-N)
43584       INTEGER PYK,PYCHGE,PYCOMP
43585 C...Commonblocks.
43586       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43587       SAVE /PYDAT1/
43588  
43589 C...Generate p_T and azimuthal angle, gives p_x and p_y.
43590       KFLA=IABS(KFL)
43591       PT=PARJ(21)*SQRT(-LOG(MAX(1D-10,PYR(0))))
43592       IF(PARJ(23).GT.PYR(0)) PT=PARJ(24)*PT
43593       IF(MSTJ(91).EQ.1) PT=PARJ(22)*PT
43594       IF(KFLA.EQ.0.AND.MSTJ(13).LE.0) PT=0D0
43595       PHI=PARU(2)*PYR(0)
43596       PX=PT*COS(PHI)
43597       PY=PT*SIN(PHI)
43598  
43599       RETURN
43600       END
43601  
43602 C*********************************************************************
43603  
43604 C...PYZDIS
43605 C...Generates the longitudinal splitting variable z.
43606  
43607       SUBROUTINE PYZDIS(KFL1,KFL2,PR,Z)
43608  
43609 C...Double precision and integer declarations.
43610       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43611       IMPLICIT INTEGER(I-N)
43612       INTEGER PYK,PYCHGE,PYCOMP
43613 C...Commonblocks.
43614       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43615       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
43616       SAVE /PYDAT1/,/PYDAT2/
43617  
43618 C...Check if heavy flavour fragmentation.
43619       KFLA=IABS(KFL1)
43620       KFLB=IABS(KFL2)
43621       KFLH=KFLA
43622       IF(KFLA.GE.10) KFLH=MOD(KFLA/1000,10)
43623  
43624 C...Lund symmetric scaling function: determine parameters of shape.
43625       IF(MSTJ(11).EQ.1.OR.(MSTJ(11).EQ.3.AND.KFLH.LE.3).OR.
43626      &MSTJ(11).GE.4) THEN
43627         FA=PARJ(41)
43628         IF(MSTJ(91).EQ.1) FA=PARJ(43)
43629         IF(KFLB.GE.10) FA=FA+PARJ(45)
43630         FBB=PARJ(42)
43631         IF(MSTJ(91).EQ.1) FBB=PARJ(44)
43632         FB=FBB*PR
43633         FC=1D0
43634         IF(KFLA.GE.10) FC=FC-PARJ(45)
43635         IF(KFLB.GE.10) FC=FC+PARJ(45)
43636         IF(MSTJ(11).GE.4.AND.KFLH.GE.4.AND.KFLH.LE.5) THEN
43637           FRED=PARJ(46)
43638           IF(MSTJ(11).EQ.5.AND.KFLH.EQ.5) FRED=PARJ(47)
43639           FC=FC+FRED*FBB*PARF(100+KFLH)**2
43640         ELSEIF(MSTJ(11).GE.4.AND.KFLH.GE.6.AND.KFLH.LE.8) THEN
43641           FRED=PARJ(46)
43642           IF(MSTJ(11).EQ.5) FRED=PARJ(48)
43643           FC=FC+FRED*FBB*PMAS(KFLH,1)**2
43644         ENDIF
43645         MC=1
43646         IF(ABS(FC-1D0).GT.0.01D0) MC=2
43647  
43648 C...Determine position of maximum. Special cases for a = 0 or a = c.
43649         IF(FA.LT.0.02D0) THEN
43650           MA=1
43651           ZMAX=1D0
43652           IF(FC.GT.FB) ZMAX=FB/FC
43653         ELSEIF(ABS(FC-FA).LT.0.01D0) THEN
43654           MA=2
43655           ZMAX=FB/(FB+FC)
43656         ELSE
43657           MA=3
43658           ZMAX=0.5D0*(FB+FC-SQRT((FB-FC)**2+4D0*FA*FB))/(FC-FA)
43659           IF(ZMAX.GT.0.9999D0.AND.FB.GT.100D0) ZMAX=MIN(ZMAX,1D0-FA/FB)
43660         ENDIF
43661  
43662 C...Subdivide z range if distribution very peaked near endpoint.
43663         MMAX=2
43664         IF(ZMAX.LT.0.1D0) THEN
43665           MMAX=1
43666           ZDIV=2.75D0*ZMAX
43667           IF(MC.EQ.1) THEN
43668             FINT=1D0-LOG(ZDIV)
43669           ELSE
43670             ZDIVC=ZDIV**(1D0-FC)
43671             FINT=1D0+(1D0-1D0/ZDIVC)/(FC-1D0)
43672           ENDIF
43673         ELSEIF(ZMAX.GT.0.85D0.AND.FB.GT.1D0) THEN
43674           MMAX=3
43675           FSCB=SQRT(4D0+(FC/FB)**2)
43676           ZDIV=FSCB-1D0/ZMAX-(FC/FB)*LOG(ZMAX*0.5D0*(FSCB+FC/FB))
43677           IF(MA.GE.2) ZDIV=ZDIV+(FA/FB)*LOG(1D0-ZMAX)
43678           ZDIV=MIN(ZMAX,MAX(0D0,ZDIV))
43679           FINT=1D0+FB*(1D0-ZDIV)
43680         ENDIF
43681  
43682 C...Choice of z, preweighted for peaks at low or high z.
43683   100   Z=PYR(0)
43684         FPRE=1D0
43685         IF(MMAX.EQ.1) THEN
43686           IF(FINT*PYR(0).LE.1D0) THEN
43687             Z=ZDIV*Z
43688           ELSEIF(MC.EQ.1) THEN
43689             Z=ZDIV**Z
43690             FPRE=ZDIV/Z
43691           ELSE
43692             Z=(ZDIVC+Z*(1D0-ZDIVC))**(1D0/(1D0-FC))
43693             FPRE=(ZDIV/Z)**FC
43694           ENDIF
43695         ELSEIF(MMAX.EQ.3) THEN
43696           IF(FINT*PYR(0).LE.1D0) THEN
43697             Z=ZDIV+LOG(Z)/FB
43698             FPRE=EXP(FB*(Z-ZDIV))
43699           ELSE
43700             Z=ZDIV+Z*(1D0-ZDIV)
43701           ENDIF
43702         ENDIF
43703  
43704 C...Weighting according to correct formula.
43705         IF(Z.LE.0D0.OR.Z.GE.1D0) GOTO 100
43706         FEXP=FC*LOG(ZMAX/Z)+FB*(1D0/ZMAX-1D0/Z)
43707         IF(MA.GE.2) FEXP=FEXP+FA*LOG((1D0-Z)/(1D0-ZMAX))
43708         FVAL=EXP(MAX(-50D0,MIN(50D0,FEXP)))
43709         IF(FVAL.LT.PYR(0)*FPRE) GOTO 100
43710  
43711 C...Generate z according to Field-Feynman, SLAC, (1-z)**c OR z**c.
43712       ELSE
43713         FC=PARJ(50+MAX(1,KFLH))
43714         IF(MSTJ(91).EQ.1) FC=PARJ(59)
43715   110   Z=PYR(0)
43716         IF(FC.GE.0D0.AND.FC.LE.1D0) THEN
43717           IF(FC.GT.PYR(0)) Z=1D0-Z**(1D0/3D0)
43718         ELSEIF(FC.GT.-1.AND.FC.LT.0D0) THEN
43719           IF(-4D0*FC*Z*(1D0-Z)**2.LT.PYR(0)*((1D0-Z)**2-FC*Z)**2)
43720      &    GOTO 110
43721         ELSE
43722           IF(FC.GT.0D0) Z=1D0-Z**(1D0/FC)
43723           IF(FC.LT.0D0) Z=Z**(-1D0/FC)
43724         ENDIF
43725       ENDIF
43726  
43727       RETURN
43728       END
43729  
43730 C*********************************************************************
43731  
43732 C...PYSHOW
43733 C...Generates timelike parton showers from given partons.
43734  
43735       SUBROUTINE PYSHOW(IP1,IP2,QMAX)
43736  
43737 C...Double precision and integer declarations.
43738       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
43739       IMPLICIT INTEGER(I-N)
43740       INTEGER PYK,PYCHGE,PYCOMP
43741 C...Commonblocks.
43742       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
43743       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
43744       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
43745       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
43746 C...Local arrays.
43747       DIMENSION PMTH(5,50),PS(5),PMA(4),PMSD(4),IEP(4),IPA(4),
43748      &KFLA(4),KFLD(4),KFL(4),ITRY(4),ISI(4),ISL(4),DP(4),DPT(5,4),
43749      &KSH(0:40),KCII(2),NIIS(2),IIIS(2,2),THEIIS(2,2),PHIIIS(2,2),
43750      &ISII(2),ISSET(3)
43751  
43752 C...Check that QMAX not too low.
43753       IF(MSTJ(41).LE.0) THEN
43754         RETURN
43755       ELSEIF(MSTJ(41).EQ.1) THEN
43756         IF(QMAX.LE.PARJ(82).AND.IP2.GT.-5) RETURN
43757       ELSE
43758         IF(QMAX.LE.MIN(PARJ(82),PARJ(83),PARJ(90)).AND.IP2.GT.-5) 
43759      &  RETURN
43760       ENDIF
43761  
43762 C...Initialization of cutoff masses etc.
43763       DO 100 IFL=0,40
43764         KSH(IFL)=0
43765   100 CONTINUE
43766       KSH(21)=1
43767       PMTH(1,21)=PYMASS(21)
43768       PMTH(2,21)=SQRT(PMTH(1,21)**2+0.25D0*PARJ(82)**2)
43769       PMTH(3,21)=2D0*PMTH(2,21)
43770       PMTH(4,21)=PMTH(3,21)
43771       PMTH(5,21)=PMTH(3,21)
43772       PMTH(1,22)=PYMASS(22)
43773       PMTH(2,22)=SQRT(PMTH(1,22)**2+0.25D0*PARJ(83)**2)
43774       PMTH(3,22)=2D0*PMTH(2,22)
43775       PMTH(4,22)=PMTH(3,22)
43776       PMTH(5,22)=PMTH(3,22)
43777       PMQTH1=PARJ(82)
43778       IF(MSTJ(41).GE.2) PMQTH1=MIN(PARJ(82),PARJ(83))
43779       PMQT1E=MIN(PMQTH1,PARJ(90))
43780       PMQTH2=PMTH(2,21)
43781       IF(MSTJ(41).GE.2) PMQTH2=MIN(PMTH(2,21),PMTH(2,22))
43782       PMQT2E=MIN(PMQTH2,0.5D0*PARJ(90))
43783       DO 110 IFL=1,8
43784         KSH(IFL)=1
43785         PMTH(1,IFL)=PYMASS(IFL)
43786         PMTH(2,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PMQTH1**2)
43787         PMTH(3,IFL)=PMTH(2,IFL)+PMQTH2
43788         PMTH(4,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(82)**2)+PMTH(2,21)
43789         PMTH(5,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(83)**2)+PMTH(2,22)
43790   110 CONTINUE
43791       DO 120 IFL=11,17,2
43792         IF(MSTJ(41).GE.2) KSH(IFL)=1
43793         PMTH(1,IFL)=PYMASS(IFL)
43794         PMTH(2,IFL)=SQRT(PMTH(1,IFL)**2+0.25D0*PARJ(90)**2)
43795         PMTH(3,IFL)=PMTH(2,IFL)+0.5D0*PARJ(90)
43796         PMTH(4,IFL)=PMTH(3,IFL)
43797         PMTH(5,IFL)=PMTH(3,IFL)
43798   120 CONTINUE
43799       PT2MIN=MAX(0.5D0*PARJ(82),1.1D0*PARJ(81))**2
43800       ALAMS=PARJ(81)**2
43801       ALFM=LOG(PT2MIN/ALAMS)
43802  
43803 C...Store positions of shower initiating partons.
43804       MPSPD=0
43805       IF(IP1.GT.0.AND.IP1.LE.MIN(N,MSTU(4)-MSTU(32)).AND.IP2.EQ.0) THEN
43806         NPA=1
43807         IPA(1)=IP1
43808       ELSEIF(MIN(IP1,IP2).GT.0.AND.MAX(IP1,IP2).LE.MIN(N,MSTU(4)-
43809      &  MSTU(32))) THEN
43810         NPA=2
43811         IPA(1)=IP1
43812         IPA(2)=IP2
43813       ELSEIF(IP1.GT.0.AND.IP1.LE.MIN(N,MSTU(4)-MSTU(32)).AND.IP2.LT.0
43814      &  .AND.IP2.GE.-3) THEN
43815         NPA=IABS(IP2)
43816         DO 130 I=1,NPA
43817           IPA(I)=IP1+I-1
43818   130   CONTINUE
43819       ELSEIF(IP1.GT.0.AND.IP1.LE.MIN(N,MSTU(4)-MSTU(32)).AND.
43820      &IP2.EQ.-8) THEN
43821         MPSPD=1
43822         NPA=2
43823         IPA(1)=IP1+6
43824         IPA(2)=IP1+7  
43825       ELSE
43826         CALL PYERRM(12,
43827      &  '(PYSHOW:) failed to reconstruct showering system')
43828         IF(MSTU(21).GE.1) RETURN
43829       ENDIF
43830  
43831 C...Check on phase space available for emission.
43832       IREJ=0
43833       DO 140 J=1,5
43834         PS(J)=0D0
43835   140 CONTINUE
43836       PM=0D0
43837       DO 160 I=1,NPA
43838         KFLA(I)=IABS(K(IPA(I),2))
43839         PMA(I)=P(IPA(I),5)
43840 C...Special cutoff masses for t, l, h with variable masses.
43841         IFLA=KFLA(I)
43842         IF(KFLA(I).GE.6.AND.KFLA(I).LE.8) THEN
43843           IFLA=37+KFLA(I)+ISIGN(2,K(IPA(I),2))
43844           PMTH(1,IFLA)=PMA(I)
43845           PMTH(2,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PMQTH1**2)
43846           PMTH(3,IFLA)=PMTH(2,IFLA)+PMQTH2
43847           PMTH(4,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PARJ(82)**2)+
43848      &    PMTH(2,21)
43849           PMTH(5,IFLA)=SQRT(PMTH(1,IFLA)**2+0.25D0*PARJ(83)**2)+
43850      &    PMTH(2,22)
43851         ENDIF
43852         IF(KFLA(I).LE.40) THEN
43853           IF(KSH(KFLA(I)).EQ.1) PMA(I)=PMTH(3,IFLA)
43854         ENDIF
43855         PM=PM+PMA(I)
43856         IF(KFLA(I).GT.40) THEN
43857           IREJ=IREJ+1
43858         ELSE
43859           IF(KSH(KFLA(I)).EQ.0.OR.PMA(I).GT.QMAX) IREJ=IREJ+1
43860         ENDIF
43861         DO 150 J=1,4
43862           PS(J)=PS(J)+P(IPA(I),J)
43863   150   CONTINUE
43864   160 CONTINUE
43865       IF(IREJ.EQ.NPA.AND.IP2.GT.-5) RETURN
43866       PS(5)=SQRT(MAX(0D0,PS(4)**2-PS(1)**2-PS(2)**2-PS(3)**2))
43867       IF(NPA.EQ.1) PS(5)=PS(4)
43868       IF(PS(5).LE.PM+PMQT1E) RETURN
43869  
43870 C...Check if 3-jet matrix elements to be used.
43871       M3JC=0
43872       IF(NPA.EQ.2.AND.MSTJ(47).GE.1.AND.MPSPD.EQ.0) THEN
43873         IF(KFLA(1).GE.1.AND.KFLA(1).LE.8.AND.KFLA(2).GE.1.AND.
43874      &  KFLA(2).LE.8) M3JC=1
43875         IF((KFLA(1).EQ.11.OR.KFLA(1).EQ.13.OR.KFLA(1).EQ.15.OR.
43876      &  KFLA(1).EQ.17).AND.KFLA(2).EQ.KFLA(1)) M3JC=1
43877         IF((KFLA(1).EQ.11.OR.KFLA(1).EQ.13.OR.KFLA(1).EQ.15.OR.
43878      &  KFLA(1).EQ.17).AND.KFLA(2).EQ.KFLA(1)+1) M3JC=1
43879         IF((KFLA(1).EQ.12.OR.KFLA(1).EQ.14.OR.KFLA(1).EQ.16.OR.
43880      &  KFLA(1).EQ.18).AND.KFLA(2).EQ.KFLA(1)-1) M3JC=1
43881         IF(MSTJ(47).EQ.2.OR.MSTJ(47).EQ.4) M3JC=1
43882         M3JCM=0
43883         IF(M3JC.EQ.1.AND.MSTJ(47).GE.3.AND.KFLA(1).EQ.KFLA(2)) THEN
43884           M3JCM=1
43885           PQMES=PMTH(1,KFLA(1))**2
43886           QME=4D0*PQMES/PS(5)**2
43887           RESCZ=MIN(1D0,LOG(PMTH(2,KFLA(1))/PS(5))/
43888      &    LOG(PMTH(2,21)/PS(5)))
43889         ENDIF
43890       ENDIF
43891  
43892 C...Find if interference with initial state partons.
43893       MIIS=0
43894       IF(MSTJ(50).GE.1.AND.MSTJ(50).LE.3.AND.NPA.EQ.2.AND.MPSPD.EQ.0) 
43895      &MIIS=MSTJ(50)
43896       IF(MIIS.NE.0) THEN
43897         DO 180 I=1,2
43898           KCII(I)=0
43899           KCA=PYCOMP(KFLA(I))
43900           IF(KCA.NE.0) KCII(I)=KCHG(KCA,2)*ISIGN(1,K(IPA(I),2))
43901           NIIS(I)=0
43902           IF(KCII(I).NE.0) THEN
43903             DO 170 J=1,2
43904               ICSI=MOD(K(IPA(I),3+J)/MSTU(5),MSTU(5))
43905               IF(ICSI.GT.0.AND.ICSI.NE.IPA(1).AND.ICSI.NE.IPA(2).AND.
43906      &        (KCII(I).EQ.(-1)**(J+1).OR.KCII(I).EQ.2)) THEN
43907                 NIIS(I)=NIIS(I)+1
43908                 IIIS(I,NIIS(I))=ICSI
43909               ENDIF
43910   170       CONTINUE
43911           ENDIF
43912   180   CONTINUE
43913         IF(NIIS(1)+NIIS(2).EQ.0) MIIS=0
43914       ENDIF
43915  
43916 C...Boost interfering initial partons to rest frame
43917 C...and reconstruct their polar and azimuthal angles.
43918       IF(MIIS.NE.0) THEN
43919         DO 200 I=1,2
43920           DO 190 J=1,5
43921             K(N+I,J)=K(IPA(I),J)
43922             P(N+I,J)=P(IPA(I),J)
43923             V(N+I,J)=0D0
43924   190     CONTINUE
43925   200   CONTINUE
43926         DO 220 I=3,2+NIIS(1)
43927           DO 210 J=1,5
43928             K(N+I,J)=K(IIIS(1,I-2),J)
43929             P(N+I,J)=P(IIIS(1,I-2),J)
43930             V(N+I,J)=0D0
43931   210     CONTINUE
43932   220   CONTINUE
43933         DO 240 I=3+NIIS(1),2+NIIS(1)+NIIS(2)
43934           DO 230 J=1,5
43935             K(N+I,J)=K(IIIS(2,I-2-NIIS(1)),J)
43936             P(N+I,J)=P(IIIS(2,I-2-NIIS(1)),J)
43937             V(N+I,J)=0D0
43938   230     CONTINUE
43939   240   CONTINUE
43940         CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),0D0,0D0,-PS(1)/PS(4),
43941      &  -PS(2)/PS(4),-PS(3)/PS(4))
43942         PHI=PYANGL(P(N+1,1),P(N+1,2))
43943         CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),0D0,-PHI,0D0,0D0,0D0)
43944         THE=PYANGL(P(N+1,3),P(N+1,1))
43945         CALL PYROBO(N+1,N+2+NIIS(1)+NIIS(2),-THE,0D0,0D0,0D0,0D0)
43946         DO 250 I=3,2+NIIS(1)
43947           THEIIS(1,I-2)=PYANGL(P(N+I,3),SQRT(P(N+I,1)**2+P(N+I,2)**2))
43948           PHIIIS(1,I-2)=PYANGL(P(N+I,1),P(N+I,2))
43949   250   CONTINUE
43950         DO 260 I=3+NIIS(1),2+NIIS(1)+NIIS(2)
43951           THEIIS(2,I-2-NIIS(1))=PARU(1)-PYANGL(P(N+I,3),
43952      &    SQRT(P(N+I,1)**2+P(N+I,2)**2))
43953           PHIIIS(2,I-2-NIIS(1))=PYANGL(P(N+I,1),P(N+I,2))
43954   260   CONTINUE
43955       ENDIF
43956  
43957 C...Define imagined single initiator of shower for parton system.
43958       NS=N
43959       IF(N.GT.MSTU(4)-MSTU(32)-5) THEN
43960         CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
43961         IF(MSTU(21).GE.1) RETURN
43962       ENDIF
43963   265 N=NS
43964       IF(NPA.GE.2) THEN
43965         K(N+1,1)=11
43966         K(N+1,2)=21
43967         K(N+1,3)=0
43968         K(N+1,4)=0
43969         K(N+1,5)=0
43970         P(N+1,1)=0D0
43971         P(N+1,2)=0D0
43972         P(N+1,3)=0D0
43973         P(N+1,4)=PS(5)
43974         P(N+1,5)=PS(5)
43975         V(N+1,5)=PS(5)**2
43976         N=N+1
43977       ENDIF
43978  
43979 C...Loop over partons that may branch.
43980       NEP=NPA
43981       IM=NS
43982       IF(NPA.EQ.1) IM=NS-1
43983   270 IM=IM+1
43984       IF(N.GT.NS) THEN
43985         IF(IM.GT.N) GOTO 510
43986         KFLM=IABS(K(IM,2))
43987         IF(KFLM.GT.40) GOTO 270
43988         IF(KSH(KFLM).EQ.0) GOTO 270
43989         IFLM=KFLM
43990         IF(KFLM.GE.6.AND.KFLM.LE.8) IFLM=37+KFLM+ISIGN(2,K(IM,2))
43991         IF(P(IM,5).LT.PMTH(2,IFLM)) GOTO 270
43992         IGM=K(IM,3)
43993       ELSE
43994         IGM=-1
43995       ENDIF
43996       IF(N+NEP.GT.MSTU(4)-MSTU(32)-5) THEN
43997         CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
43998         IF(MSTU(21).GE.1) RETURN
43999       ENDIF
44000  
44001 C...Position of aunt (sister to branching parton).
44002 C...Origin and flavour of daughters.
44003       IAU=0
44004       IF(IGM.GT.0) THEN
44005         IF(K(IM-1,3).EQ.IGM) IAU=IM-1
44006         IF(N.GE.IM+1.AND.K(IM+1,3).EQ.IGM) IAU=IM+1
44007       ENDIF
44008       IF(IGM.GE.0) THEN
44009         K(IM,4)=N+1
44010         DO 280 I=1,NEP
44011           K(N+I,3)=IM
44012   280   CONTINUE
44013       ELSE
44014         K(N+1,3)=IPA(1)
44015       ENDIF
44016       IF(IGM.LE.0) THEN
44017         DO 290 I=1,NEP
44018           K(N+I,2)=K(IPA(I),2)
44019   290   CONTINUE
44020       ELSEIF(KFLM.NE.21) THEN
44021         K(N+1,2)=K(IM,2)
44022         K(N+2,2)=K(IM,5)
44023       ELSEIF(K(IM,5).EQ.21) THEN
44024         K(N+1,2)=21
44025         K(N+2,2)=21
44026       ELSE
44027         K(N+1,2)=K(IM,5)
44028         K(N+2,2)=-K(IM,5)
44029       ENDIF
44030  
44031 C...Reset flags on daughters and tries made.
44032       DO 300 IP=1,NEP
44033         K(N+IP,1)=3
44034         K(N+IP,4)=0
44035         K(N+IP,5)=0
44036         KFLD(IP)=IABS(K(N+IP,2))
44037         IF(KCHG(PYCOMP(KFLD(IP)),2).EQ.0) K(N+IP,1)=1
44038         ITRY(IP)=0
44039         ISL(IP)=0
44040         ISI(IP)=0
44041         IF(KFLD(IP).LE.40) THEN
44042           IF(KSH(KFLD(IP)).EQ.1) ISI(IP)=1
44043         ENDIF
44044   300 CONTINUE
44045       ISLM=0
44046  
44047 C...Maximum virtuality of daughters.
44048       IF(IGM.LE.0) THEN
44049         DO 310 I=1,NPA
44050           IF(NPA.GE.3) P(N+I,4)=(PS(4)*P(IPA(I),4)-PS(1)*P(IPA(I),1)-
44051      &    PS(2)*P(IPA(I),2)-PS(3)*P(IPA(I),3))/PS(5)
44052           P(N+I,5)=MIN(QMAX,PS(5))
44053           IF(IP2.LE.-5) P(N+I,5)=MAX(P(N+I,5),
44054      &    2D0*PMTH(3,IABS(K(N+I,2))))
44055           IF(NPA.GE.3) P(N+I,5)=MIN(P(N+I,5),P(N+I,4))
44056           IF(ISI(I).EQ.0) P(N+I,5)=P(IPA(I),5)
44057   310   CONTINUE
44058       ELSE
44059         IF(MSTJ(43).LE.2) PEM=V(IM,2)
44060         IF(MSTJ(43).GE.3) PEM=P(IM,4)
44061         P(N+1,5)=MIN(P(IM,5),V(IM,1)*PEM)
44062         P(N+2,5)=MIN(P(IM,5),(1D0-V(IM,1))*PEM)
44063         IF(K(N+2,2).EQ.22) P(N+2,5)=PMTH(1,22)
44064       ENDIF
44065       DO 320 I=1,NEP
44066         PMSD(I)=P(N+I,5)
44067         IF(ISI(I).EQ.1) THEN
44068           IFLD=KFLD(I)
44069           IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
44070      &    ISIGN(2,K(N+I,2))
44071           IF(P(N+I,5).LE.PMTH(3,IFLD)) P(N+I,5)=PMTH(1,IFLD)
44072         ENDIF
44073         V(N+I,5)=P(N+I,5)**2
44074   320 CONTINUE
44075  
44076 C...Choose one of the daughters for evolution.
44077   330 INUM=0
44078       IF(NEP.EQ.1) INUM=1
44079       DO 340 I=1,NEP
44080         IF(INUM.EQ.0.AND.ISL(I).EQ.1) INUM=I
44081   340 CONTINUE
44082       DO 350 I=1,NEP
44083         IF(INUM.EQ.0.AND.ITRY(I).EQ.0.AND.ISI(I).EQ.1) THEN
44084           IFLD=KFLD(I)
44085           IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
44086      &    ISIGN(2,K(N+I,2))
44087           IF(P(N+I,5).GE.PMTH(2,IFLD)) INUM=I
44088         ENDIF
44089   350 CONTINUE
44090       IF(INUM.EQ.0) THEN
44091         RMAX=0D0
44092         DO 360 I=1,NEP
44093           IF(ISI(I).EQ.1.AND.PMSD(I).GE.PMQT2E) THEN
44094             RPM=P(N+I,5)/PMSD(I)
44095             IFLD=KFLD(I)
44096             IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
44097      &      ISIGN(2,K(N+I,2))
44098             IF(RPM.GT.RMAX.AND.P(N+I,5).GE.PMTH(2,IFLD)) THEN
44099               RMAX=RPM
44100               INUM=I
44101             ENDIF
44102           ENDIF
44103   360   CONTINUE
44104       ENDIF
44105 
44106 C...Cancel choice of predetermined daughter already treated.
44107       INUM=MAX(1,INUM)
44108       INUMT=INUM 
44109       IF(MPSPD.EQ.1.AND.IGM.EQ.0.AND.ITRY(INUMT).GE.1) THEN
44110         IF(K(IP1-1+INUM,4).GT.0) INUM=3-INUM
44111       ELSEIF(MPSPD.EQ.1.AND.IM.EQ.NS+2.AND.ITRY(INUMT).GE.1) THEN
44112         IF(KFLD(INUMT).NE.21.AND.K(IP1+2,4).GT.0) INUM=3-INUM
44113         IF(KFLD(INUMT).EQ.21.AND.K(IP1+3,4).GT.0) INUM=3-INUM
44114       ENDIF
44115        
44116 C...Store information on choice of evolving daughter.
44117       IEP(1)=N+INUM
44118       DO 370 I=2,NEP
44119         IEP(I)=IEP(I-1)+1
44120         IF(IEP(I).GT.N+NEP) IEP(I)=N+1
44121   370 CONTINUE
44122       DO 380 I=1,NEP
44123         KFL(I)=IABS(K(IEP(I),2))
44124   380 CONTINUE
44125       ITRY(INUM)=ITRY(INUM)+1
44126       IF(ITRY(INUM).GT.200) THEN
44127         CALL PYERRM(14,'(PYSHOW:) caught in infinite loop')
44128         IF(MSTU(21).GE.1) RETURN
44129       ENDIF
44130       Z=0.5D0
44131       IF(KFL(1).GT.40) GOTO 430
44132       IF(KSH(KFL(1)).EQ.0) GOTO 430
44133       IFL=KFL(1)
44134       IF(KFL(1).GE.6.AND.KFL(1).LE.8) IFL=37+KFL(1)+
44135      &ISIGN(2,K(IEP(1),2))
44136       IF(P(IEP(1),5).LT.PMTH(2,IFL)) GOTO 430
44137 
44138 C...Check if evolution already predetermined for daughter.
44139       IPSPD=0
44140       IF(MPSPD.EQ.1.AND.IGM.EQ.0) THEN
44141         IF(K(IP1-1+INUM,4).GT.0) IPSPD=IP1-1+INUM
44142       ELSEIF(MPSPD.EQ.1.AND.IM.EQ.NS+2) THEN
44143         IF(KFL(1).NE.21.AND.K(IP1+2,4).GT.0) IPSPD=IP1+2
44144         IF(KFL(1).EQ.21.AND.K(IP1+3,4).GT.0) IPSPD=IP1+3
44145       ENDIF
44146       ISSET(INUM)=0
44147       IF(IPSPD.NE.0) ISSET(INUM)=1  
44148  
44149 C...Select side for interference with initial state partons.
44150       IF(MIIS.GE.1.AND.IEP(1).LE.NS+3) THEN
44151         III=IEP(1)-NS-1
44152         ISII(III)=0
44153         IF(IABS(KCII(III)).EQ.1.AND.NIIS(III).EQ.1) THEN
44154           ISII(III)=1
44155         ELSEIF(KCII(III).EQ.2.AND.NIIS(III).EQ.1) THEN
44156           IF(PYR(0).GT.0.5D0) ISII(III)=1
44157         ELSEIF(KCII(III).EQ.2.AND.NIIS(III).EQ.2) THEN
44158           ISII(III)=1
44159           IF(PYR(0).GT.0.5D0) ISII(III)=2
44160         ENDIF
44161       ENDIF
44162  
44163 C...Calculate allowed z range.
44164       IF(NEP.EQ.1) THEN
44165         PMED=PS(4)
44166       ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
44167         PMED=P(IM,5)
44168       ELSE
44169         IF(INUM.EQ.1) PMED=V(IM,1)*PEM
44170         IF(INUM.EQ.2) PMED=(1D0-V(IM,1))*PEM
44171       ENDIF
44172       IF(MOD(MSTJ(43),2).EQ.1) THEN
44173         ZC=PMTH(2,21)/PMED
44174         ZCE=PMTH(2,22)/PMED
44175         IF(KFL(1).GE.11.AND.KFL(1).LE.18) ZCE=0.5D0*PARJ(90)/PMED
44176       ELSE
44177         ZC=0.5D0*(1D0-SQRT(MAX(0D0,1D0-(2D0*PMTH(2,21)/PMED)**2)))
44178         IF(ZC.LT.1D-6) ZC=(PMTH(2,21)/PMED)**2
44179         PMTMPE=PMTH(2,22)
44180         IF(KFL(1).GE.11.AND.KFL(1).LE.18) PMTMPE=0.5D0*PARJ(90)
44181         ZCE=0.5D0*(1D0-SQRT(MAX(0D0,1D0-(2D0*PMTMPE/PMED)**2)))
44182         IF(ZCE.LT.1D-6) ZCE=(PMTMPE/PMED)**2
44183       ENDIF
44184       ZC=MIN(ZC,0.491D0)
44185       ZCE=MIN(ZCE,0.49991D0)
44186       IF(((MSTJ(41).EQ.1.AND.ZC.GT.0.49D0).OR.(MSTJ(41).GE.2.AND.
44187      &MIN(ZC,ZCE).GT.0.4999D0)).AND.IPSPD.EQ.0) THEN
44188         P(IEP(1),5)=PMTH(1,IFL)
44189         V(IEP(1),5)=P(IEP(1),5)**2
44190         GOTO 430
44191       ENDIF
44192  
44193 C...Integral of Altarelli-Parisi z kernel for QCD.
44194       IF(MSTJ(49).EQ.0.AND.KFL(1).EQ.21) THEN
44195         FBR=6D0*LOG((1D0-ZC)/ZC)+MSTJ(45)*0.5D0
44196       ELSEIF(MSTJ(49).EQ.0) THEN
44197         FBR=(8D0/3D0)*LOG((1D0-ZC)/ZC)
44198  
44199 C...Integral of Altarelli-Parisi z kernel for scalar gluon.
44200       ELSEIF(MSTJ(49).EQ.1.AND.KFL(1).EQ.21) THEN
44201         FBR=(PARJ(87)+MSTJ(45)*PARJ(88))*(1D0-2D0*ZC)
44202       ELSEIF(MSTJ(49).EQ.1) THEN
44203         FBR=(1D0-2D0*ZC)/3D0
44204         IF(IGM.EQ.0.AND.M3JC.EQ.1) FBR=4D0*FBR
44205  
44206 C...Integral of Altarelli-Parisi z kernel for Abelian vector gluon.
44207       ELSEIF(KFL(1).EQ.21) THEN
44208         FBR=6D0*MSTJ(45)*(0.5D0-ZC)
44209       ELSE
44210         FBR=2D0*LOG((1D0-ZC)/ZC)
44211       ENDIF
44212  
44213 C...Reset QCD probability for lepton.
44214       IF(KFL(1).GE.11.AND.KFL(1).LE.18) FBR=0D0
44215  
44216 C...Integral of Altarelli-Parisi kernel for photon emission.
44217       IF(MSTJ(41).GE.2.AND.KFL(1).GE.1.AND.KFL(1).LE.18) THEN
44218         FBRE=(KCHG(KFL(1),1)/3D0)**2*2D0*LOG((1D0-ZCE)/ZCE)
44219         IF(MSTJ(41).EQ.10) FBRE=PARJ(84)*FBRE
44220       ENDIF
44221  
44222 C...Inner veto algorithm starts. Find maximum mass for evolution.
44223   390 PMS=V(IEP(1),5)
44224       IF(IGM.GE.0) THEN
44225         PM2=0D0
44226         DO 400 I=2,NEP
44227           PM=P(IEP(I),5)
44228           IF(KFL(I).LE.40) THEN
44229             IFLI=KFL(I)
44230             IF(KFL(I).GE.6.AND.KFL(I).LE.8) IFLI=37+KFL(I)+
44231      &      ISIGN(2,K(IEP(I),2))
44232             IF(KSH(KFL(I)).EQ.1) PM=PMTH(2,IFLI)
44233           ENDIF
44234           PM2=PM2+PM
44235   400   CONTINUE
44236         PMS=MIN(PMS,(P(IM,5)-PM2)**2)
44237       ENDIF
44238  
44239 C...Select mass for daughter in QCD evolution.
44240       B0=27D0/6D0
44241       DO 410 IFF=4,MSTJ(45)
44242         IF(PMS.GT.4D0*PMTH(2,IFF)**2) B0=(33D0-2D0*IFF)/6D0
44243   410 CONTINUE
44244 C...Already predetermined choice.
44245       IF(IPSPD.NE.0) THEN
44246         PMSQCD=P(IPSPD,5)**2
44247       ELSEIF(FBR.LT.1D-3) THEN
44248         PMSQCD=0D0
44249       ELSEIF(MSTJ(44).LE.0) THEN
44250         PMSQCD=PMS*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/(PARU(111)*FBR)))
44251       ELSEIF(MSTJ(44).EQ.1) THEN
44252         PMSQCD=4D0*ALAMS*(0.25D0*PMS/ALAMS)**(PYR(0)**(B0/FBR))
44253       ELSE
44254         PMSQCD=PMS*EXP(MAX(-50D0,ALFM*B0*LOG(PYR(0))/FBR))
44255       ENDIF
44256       IF(ZC.GT.0.49D0.OR.PMSQCD.LE.PMTH(4,IFL)**2) PMSQCD=
44257      &  PMTH(2,IFL)**2
44258       V(IEP(1),5)=PMSQCD
44259       MCE=1
44260  
44261 C...Select mass for daughter in QED evolution.
44262       IF(MSTJ(41).GE.2.AND.KFL(1).GE.1.AND.KFL(1).LE.18.AND.
44263      &IPSPD.EQ.0) THEN
44264         PMSQED=PMS*EXP(MAX(-50D0,LOG(PYR(0))*PARU(2)/(PARU(101)*FBRE)))
44265         IF(ZCE.GT.0.4999D0.OR.PMSQED.LE.PMTH(5,IFL)**2) PMSQED=
44266      &  PMTH(2,IFL)**2
44267         IF(PMSQED.GT.PMSQCD) THEN
44268           V(IEP(1),5)=PMSQED
44269           MCE=2
44270         ENDIF
44271       ENDIF
44272  
44273 C...Check whether daughter mass below cutoff.
44274       P(IEP(1),5)=SQRT(V(IEP(1),5))
44275       IF(P(IEP(1),5).LE.PMTH(3,IFL)) THEN
44276         P(IEP(1),5)=PMTH(1,IFL)
44277         V(IEP(1),5)=P(IEP(1),5)**2
44278         GOTO 430
44279       ENDIF
44280 
44281 C...Already predetermined choice of z, and flavour in g -> qqbar.
44282       IF(IPSPD.NE.0) THEN
44283         IPSGD1=K(IPSPD,4)
44284         IPSGD2=K(IPSPD,5)
44285         PMSGD1=P(IPSGD1,5)**2
44286         PMSGD2=P(IPSGD2,5)**2
44287         ALAMPS=SQRT(MAX(1D-10,(PMSQCD-PMSGD1-PMSGD2)**2-
44288      &  4D0*PMSGD1*PMSGD2))
44289         Z=0.5D0*(PMSQCD*(2D0*P(IPSGD1,4)/P(IPSPD,4)-1D0)+ALAMPS-
44290      &  PMSGD1+PMSGD2)/ALAMPS
44291         Z=MAX(0.00001D0,MIN(0.99999D0,Z))
44292         IF(KFL(1).NE.21) THEN
44293           K(IEP(1),5)=21
44294         ELSE
44295           K(IEP(1),5)=IABS(K(IPSGD1,2))
44296         ENDIF
44297  
44298 C...Select z value of branching: q -> qgamma.
44299       ELSEIF(MCE.EQ.2) THEN
44300         Z=1D0-(1D0-ZCE)*(ZCE/(1D0-ZCE))**PYR(0)
44301         IF(1D0+Z**2.LT.2D0*PYR(0)) GOTO 390
44302         K(IEP(1),5)=22
44303  
44304 C...Select z value of branching: q -> qg, g -> gg, g -> qqbar.
44305       ELSEIF(MSTJ(49).NE.1.AND.KFL(1).NE.21) THEN
44306         Z=1D0-(1D0-ZC)*(ZC/(1D0-ZC))**PYR(0)
44307         IF(IGM.EQ.0.AND.M3JCM.EQ.1) Z=1D0-(1D0-Z)**RESCZ
44308         IF(1D0+Z**2.LT.2D0*PYR(0)) GOTO 390
44309         K(IEP(1),5)=21
44310       ELSEIF(MSTJ(49).EQ.0.AND.MSTJ(45)*0.5D0.LT.PYR(0)*FBR) THEN
44311         Z=(1D0-ZC)*(ZC/(1D0-ZC))**PYR(0)
44312         IF(PYR(0).GT.0.5D0) Z=1D0-Z
44313         IF((1D0-Z*(1D0-Z))**2.LT.PYR(0)) GOTO 390
44314         K(IEP(1),5)=21
44315       ELSEIF(MSTJ(49).NE.1) THEN
44316         Z=PYR(0)
44317         IF(Z**2+(1D0-Z)**2.LT.PYR(0)) GOTO 390
44318         KFLB=1+INT(MSTJ(45)*PYR(0))
44319         PMQ=4D0*PMTH(2,KFLB)**2/V(IEP(1),5)
44320         IF(PMQ.GE.1D0) GOTO 390
44321         IF(MSTJ(44).LE.2) THEN
44322           IF(Z.LT.ZC.OR.Z.GT.1D0-ZC) GOTO 390
44323           PMQ0=4D0*PMTH(2,21)**2/V(IEP(1),5)
44324           IF(MOD(MSTJ(43),2).EQ.0.AND.(1D0+0.5D0*PMQ)*SQRT(1D0-PMQ)
44325      &    .LT.PYR(0)*(1D0+0.5D0*PMQ0)*SQRT(1D0-PMQ0)) GOTO 390
44326         ELSE
44327           IF((1D0+0.5D0*PMQ)*SQRT(1D0-PMQ).LT.PYR(0)) GOTO 390
44328         ENDIF
44329         K(IEP(1),5)=KFLB
44330  
44331 C...Ditto for scalar gluon model.
44332       ELSEIF(KFL(1).NE.21) THEN
44333         Z=1D0-SQRT(ZC**2+PYR(0)*(1D0-2D0*ZC))
44334         K(IEP(1),5)=21
44335       ELSEIF(PYR(0)*(PARJ(87)+MSTJ(45)*PARJ(88)).LE.PARJ(87)) THEN
44336         Z=ZC+(1D0-2D0*ZC)*PYR(0)
44337         K(IEP(1),5)=21
44338       ELSE
44339         Z=ZC+(1D0-2D0*ZC)*PYR(0)
44340         KFLB=1+INT(MSTJ(45)*PYR(0))
44341         PMQ=4D0*PMTH(2,KFLB)**2/V(IEP(1),5)
44342         IF(PMQ.GE.1D0) GOTO 390
44343         K(IEP(1),5)=KFLB
44344       ENDIF
44345 
44346 C...Correct to alpha_s(pT^2) (optionally m^2/4 for g -> q qbar).
44347       IF(MCE.EQ.1.AND.MSTJ(44).GE.2.AND.IPSPD.EQ.0) THEN
44348         IF(KFL(1).EQ.21.AND.K(IEP(1),5).LT.10.AND.MSTJ(44).EQ.3) THEN
44349           IF(ALFM/LOG(V(IEP(1),5)*0.25D0/ALAMS).LT.PYR(0)) GOTO 390
44350         ELSE
44351           IF(Z*(1D0-Z)*V(IEP(1),5).LT.PT2MIN) GOTO 390
44352           IF(ALFM/LOG(V(IEP(1),5)*Z*(1D0-Z)/ALAMS).LT.PYR(0)) GOTO 390
44353         ENDIF
44354       ENDIF
44355  
44356 C...Check if z consistent with chosen m.
44357       IF(KFL(1).EQ.21) THEN
44358         KFLGD1=IABS(K(IEP(1),5))
44359         KFLGD2=KFLGD1
44360       ELSE
44361         KFLGD1=KFL(1)
44362         KFLGD2=IABS(K(IEP(1),5))
44363       ENDIF
44364       IF(NEP.EQ.1) THEN
44365         PED=PS(4)
44366       ELSEIF(NEP.GE.3) THEN
44367         PED=P(IEP(1),4)
44368       ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
44369         PED=0.5D0*(V(IM,5)+V(IEP(1),5)-PM2**2)/P(IM,5)
44370       ELSE
44371         IF(IEP(1).EQ.N+1) PED=V(IM,1)*PEM
44372         IF(IEP(1).EQ.N+2) PED=(1D0-V(IM,1))*PEM
44373       ENDIF
44374       IF(MOD(MSTJ(43),2).EQ.1) THEN
44375         IFLGD1=KFLGD1
44376         IF(KFLGD1.GE.6.AND.KFLGD1.LE.8) IFLGD1=IFL
44377         PMQTH3=0.5D0*PARJ(82)
44378         IF(KFLGD2.EQ.22) PMQTH3=0.5D0*PARJ(83)
44379         IF(KFL(1).GE.11.AND.KFL(1).LE.18) PMQTH3=0.5D0*PARJ(90)
44380         PMQ1=(PMTH(1,IFLGD1)**2+PMQTH3**2)/V(IEP(1),5)
44381         PMQ2=(PMTH(1,KFLGD2)**2+PMQTH3**2)/V(IEP(1),5)
44382         ZD=SQRT(MAX(0D0,(1D0-V(IEP(1),5)/PED**2)*((1D0-PMQ1-PMQ2)**2-
44383      &  4D0*PMQ1*PMQ2)))
44384         ZH=1D0+PMQ1-PMQ2
44385       ELSE
44386         ZD=SQRT(MAX(0D0,1D0-V(IEP(1),5)/PED**2))
44387         ZH=1D0
44388       ENDIF
44389       IF(KFL(1).EQ.21.AND.K(IEP(1),5).LT.10.AND.MSTJ(44).EQ.3) THEN
44390       ELSEIF(IPSPD.NE.0) THEN
44391       ELSE 
44392         ZL=0.5D0*(ZH-ZD)
44393         ZU=0.5D0*(ZH+ZD)
44394         IF(Z.LT.ZL.OR.Z.GT.ZU) GOTO 390
44395       ENDIF
44396       IF(KFL(1).EQ.21) V(IEP(1),3)=LOG(ZU*(1D0-ZL)/MAX(1D-20,ZL*
44397      &(1D0-ZU)))
44398       IF(KFL(1).NE.21) V(IEP(1),3)=LOG((1D0-ZL)/MAX(1D-10,1D0-ZU))
44399  
44400 C...Width suppression for q -> q + g.
44401       IF(MSTJ(40).NE.0.AND.KFL(1).NE.21.AND.IPSPD.EQ.0) THEN
44402         IF(IGM.EQ.0) THEN
44403           EGLU=0.5D0*PS(5)*(1D0-Z)*(1D0+V(IEP(1),5)/V(NS+1,5))
44404         ELSE
44405           EGLU=PMED*(1D0-Z)
44406         ENDIF
44407         CHI=PARJ(89)**2/(PARJ(89)**2+EGLU**2)
44408         IF(MSTJ(40).EQ.1) THEN
44409           IF(CHI.LT.PYR(0)) GOTO 390
44410         ELSEIF(MSTJ(40).EQ.2) THEN
44411           IF(1D0-CHI.LT.PYR(0)) GOTO 390
44412         ENDIF
44413       ENDIF
44414  
44415 C...Three-jet matrix element correction (on both sides).
44416       IF(IGM.EQ.0.AND.M3JC.EQ.1) THEN
44417         X1=Z*(1D0+V(IEP(1),5)/V(NS+1,5))
44418         X2=1D0-V(IEP(1),5)/V(NS+1,5)
44419         X3=(1D0-X1)+(1D0-X2)
44420         IF(MCE.EQ.2) THEN
44421           KI1=K(IPA(INUM),2)
44422           KI2=K(IPA(3-INUM),2)
44423           QF1=KCHG(IABS(KI1),1)*ISIGN(1,KI1)/3D0
44424           QF2=KCHG(IABS(KI2),1)*ISIGN(1,KI2)/3D0
44425           WSHOW=QF1**2*(1D0-X1)/X3*(1D0+(X1/(2D0-X2))**2)+
44426      &    QF2**2*(1D0-X2)/X3*(1D0+(X2/(2D0-X1))**2)
44427           WME=(QF1*(1D0-X1)/X3-QF2*(1D0-X2)/X3)**2*(X1**2+X2**2)
44428         ELSEIF(MSTJ(49).NE.1.AND.M3JCM.NE.1) THEN
44429           WSHOW=1D0+(1D0-X1)/X3*(X1/(2D0-X2))**2+
44430      &    (1D0-X2)/X3*(X2/(2D0-X1))**2
44431           WME=X1**2+X2**2
44432         ELSEIF(MSTJ(49).NE.1) THEN
44433           X1=(1D0+(V(IEP(1),5)-PQMES)/V(NS+1,5))*
44434      &    (Z+(1D0-Z)*PQMES/V(IEP(1),5))
44435           X2=1D0-(V(IEP(1),5)-PQMES)/V(NS+1,5)
44436           X3=(1D0-X1)+(1D0-X2)
44437           Z1SH=(X1-(PQMES/V(NS+1,5))*(X3/MAX(1D-10,1D0-X2)))/(2D0-X2)
44438           Z2SH=(X2-(PQMES/V(NS+1,5))*(X3/MAX(1D-10,1D0-X1)))/(2D0-X1)
44439           WSHOW=(((1D0-X1)/(2D0-X2))*(1D0+Z1SH**2)/MAX(1D-10,1D0-Z1SH)+
44440      &    ((1D0-X2)/(2D0-X1))*(1D0+Z2SH**2)/MAX(1D-10,1D0-Z2SH))/RESCZ
44441           WME=X1**2+X2**2-QME*X3-0.5D0*QME**2-
44442      &    (0.5D0*QME+0.25D0*QME**2)*((1D0-X2)/MAX(1D-10,1D0-X1)+
44443      &    (1D0-X1)/MAX(1D-10,1D0-X2))
44444         ELSE
44445           WSHOW=4D0*X3*((1D0-X1)/(2D0-X2)**2+(1D0-X2)/(2D0-X1)**2)
44446           WME=X3**2
44447           IF(MSTJ(102).GE.2) WME=X3**2-2D0*(1D0+X3)*(1D0-X1)*(1D0-X2)*
44448      &    PARJ(171)
44449         ENDIF
44450         IF(WME.LT.PYR(0)*WSHOW) GOTO 390
44451  
44452 C...Impose angular ordering by rejection of nonordered emission.
44453       ELSEIF(MCE.EQ.1.AND.IGM.GT.0.AND.MSTJ(42).GE.2.AND.IPSPD.EQ.0) 
44454      &THEN
44455         PEMAO=V(IM,1)*P(IM,4)
44456         IF(IEP(1).EQ.N+2) PEMAO=(1D0-V(IM,1))*P(IM,4)
44457         IF(KFL(1).EQ.21.AND.K(IEP(1),5).LE.10.AND.MSTJ(42).EQ.4) THEN
44458           MAOD=0
44459         ELSEIF(KFL(1).EQ.21.AND.K(IEP(1),5).LE.10.AND.MSTJ(42).EQ.3) 
44460      &  THEN
44461           MAOD=1
44462           PMDAO=PMTH(2,K(IEP(1),5))
44463           THE2ID=Z*(1D0-Z)*PEMAO**2/(V(IEP(1),5)-4D0*PMDAO**2)
44464         ELSE
44465           MAOD=1
44466           THE2ID=Z*(1D0-Z)*PEMAO**2/V(IEP(1),5)
44467         ENDIF
44468         MAOM=1
44469         IAOM=IM
44470   420   IF(K(IAOM,5).EQ.22) THEN
44471           IAOM=K(IAOM,3)
44472           IF(K(IAOM,3).LE.NS) MAOM=0
44473           IF(MAOM.EQ.1) GOTO 420
44474         ENDIF
44475         IF(MAOM.EQ.1.AND.MAOD.EQ.1) THEN
44476           THE2IM=V(IAOM,1)*(1D0-V(IAOM,1))*P(IAOM,4)**2/V(IAOM,5)
44477           IF(THE2ID.LT.THE2IM) GOTO 390
44478         ENDIF
44479       ENDIF
44480  
44481 C...Impose user-defined maximum angle at first branching.
44482       IF(MSTJ(48).EQ.1.AND.IPSPD.EQ.0) THEN
44483         IF(NEP.EQ.1.AND.IM.EQ.NS) THEN
44484           THE2ID=Z*(1D0-Z)*PS(4)**2/V(IEP(1),5)
44485           IF(PARJ(85)**2*THE2ID.LT.1D0) GOTO 390
44486         ELSEIF(NEP.EQ.2.AND.IEP(1).EQ.NS+2) THEN
44487           THE2ID=Z*(1D0-Z)*(0.5D0*P(IM,4))**2/V(IEP(1),5)
44488           IF(PARJ(85)**2*THE2ID.LT.1D0) GOTO 390
44489         ELSEIF(NEP.EQ.2.AND.IEP(1).EQ.NS+3) THEN
44490           THE2ID=Z*(1D0-Z)*(0.5D0*P(IM,4))**2/V(IEP(1),5)
44491           IF(PARJ(86)**2*THE2ID.LT.1D0) GOTO 390
44492         ENDIF
44493       ENDIF
44494  
44495 C...Impose angular constraint in first branching from interference
44496 C...with initial state partons.
44497       IF(MIIS.GE.2.AND.IEP(1).LE.NS+3) THEN
44498         THE2D=MAX((1D0-Z)/Z,Z/(1D0-Z))*V(IEP(1),5)/(0.5D0*P(IM,4))**2
44499         IF(IEP(1).EQ.NS+2.AND.ISII(1).GE.1) THEN
44500           IF(THE2D.GT.THEIIS(1,ISII(1))**2) GOTO 390
44501         ELSEIF(IEP(1).EQ.NS+3.AND.ISII(2).GE.1) THEN
44502           IF(THE2D.GT.THEIIS(2,ISII(2))**2) GOTO 390
44503         ENDIF
44504       ENDIF
44505  
44506 C...End of inner veto algorithm. Check if only one leg evolved so far.
44507   430 V(IEP(1),1)=Z
44508       ISL(1)=0
44509       ISL(2)=0
44510       IF(NEP.EQ.1) GOTO 460
44511       IF(NEP.EQ.2.AND.P(IEP(1),5)+P(IEP(2),5).GE.P(IM,5)) GOTO 330
44512       DO 440 I=1,NEP
44513         IF(ITRY(I).EQ.0.AND.KFLD(I).LE.40) THEN
44514           IF(KSH(KFLD(I)).EQ.1) THEN
44515             IFLD=KFLD(I)
44516             IF(KFLD(I).GE.6.AND.KFLD(I).LE.8) IFLD=37+KFLD(I)+
44517      &      ISIGN(2,K(N+I,2))
44518             IF(P(N+I,5).GE.PMTH(2,IFLD)) GOTO 330
44519           ENDIF
44520         ENDIF
44521   440 CONTINUE
44522  
44523 C...Check if chosen multiplet m1,m2,z1,z2 is physical.
44524       IF(NEP.EQ.3) THEN
44525         PA1S=(P(N+1,4)+P(N+1,5))*(P(N+1,4)-P(N+1,5))
44526         PA2S=(P(N+2,4)+P(N+2,5))*(P(N+2,4)-P(N+2,5))
44527         PA3S=(P(N+3,4)+P(N+3,5))*(P(N+3,4)-P(N+3,5))
44528         PTS=0.25D0*(2D0*PA1S*PA2S+2D0*PA1S*PA3S+2D0*PA2S*PA3S-
44529      &  PA1S**2-PA2S**2-PA3S**2)/PA1S
44530         IF(PTS.LE.0D0) GOTO 330
44531       ELSEIF(IGM.EQ.0.OR.MSTJ(43).LE.2.OR.MOD(MSTJ(43),2).EQ.0) THEN
44532         DO 450 I1=N+1,N+2
44533           KFLDA=IABS(K(I1,2))
44534           IF(KFLDA.GT.40) GOTO 450
44535           IF(KSH(KFLDA).EQ.0) GOTO 450
44536           IFLDA=KFLDA
44537           IF(KFLDA.GE.6.AND.KFLDA.LE.8) IFLDA=37+KFLDA+
44538      &    ISIGN(2,K(I1,2))
44539           IF(P(I1,5).LT.PMTH(2,IFLDA)) GOTO 450
44540           IF(KFLDA.EQ.21) THEN
44541             KFLGD1=IABS(K(I1,5))
44542             KFLGD2=KFLGD1
44543           ELSE
44544             KFLGD1=KFLDA
44545             KFLGD2=IABS(K(I1,5))
44546           ENDIF
44547           I2=2*N+3-I1
44548           IF(IGM.EQ.0.OR.MSTJ(43).LE.2) THEN
44549             PED=0.5D0*(V(IM,5)+V(I1,5)-V(I2,5))/P(IM,5)
44550           ELSE
44551             IF(I1.EQ.N+1) ZM=V(IM,1)
44552             IF(I1.EQ.N+2) ZM=1D0-V(IM,1)
44553             PML=SQRT((V(IM,5)-V(N+1,5)-V(N+2,5))**2-
44554      &      4D0*V(N+1,5)*V(N+2,5))
44555             PED=PEM*(0.5D0*(V(IM,5)-PML+V(I1,5)-V(I2,5))+PML*ZM)/
44556      &      V(IM,5)
44557           ENDIF
44558           IF(MOD(MSTJ(43),2).EQ.1) THEN
44559             PMQTH3=0.5D0*PARJ(82)
44560             IF(KFLGD2.EQ.22) PMQTH3=0.5D0*PARJ(83)
44561             IF(KFLDA.GE.11.AND.KFLDA.LE.18) PMQTH3=0.5D0*PARJ(90)
44562             IFLGD1=KFLGD1
44563             IF(KFLGD1.GE.6.AND.KFLGD1.LE.8) IFLGD1=IFLDA
44564             PMQ1=(PMTH(1,IFLGD1)**2+PMQTH3**2)/V(I1,5)
44565             PMQ2=(PMTH(1,KFLGD2)**2+PMQTH3**2)/V(I1,5)
44566             ZD=SQRT(MAX(0D0,(1D0-V(I1,5)/PED**2)*((1D0-PMQ1-PMQ2)**2-
44567      &      4D0*PMQ1*PMQ2)))
44568             ZH=1D0+PMQ1-PMQ2
44569           ELSE
44570             ZD=SQRT(MAX(0D0,1D0-V(I1,5)/PED**2))
44571             ZH=1D0
44572           ENDIF
44573           IF(KFLDA.EQ.21.AND.KFLGD1.LT.10.AND.MSTJ(44).EQ.3) THEN
44574           ELSE 
44575             ZL=0.5D0*(ZH-ZD)
44576             ZU=0.5D0*(ZH+ZD)
44577             IF(I1.EQ.N+1.AND.(V(I1,1).LT.ZL.OR.V(I1,1).GT.ZU).AND.
44578      &      ISSET(1).EQ.0) THEN
44579               ISL(1)=1
44580             ELSEIF(I1.EQ.N+2.AND.(V(I1,1).LT.ZL.OR.V(I1,1).GT.ZU).AND.
44581      &      ISSET(2).EQ.0) THEN 
44582               ISL(2)=1
44583             ENDIF
44584           ENDIF
44585           IF(KFLDA.EQ.21) V(I1,4)=LOG(ZU*(1D0-ZL)/MAX(1D-20,
44586      &    ZL*(1D0-ZU)))
44587           IF(KFLDA.NE.21) V(I1,4)=LOG((1D0-ZL)/MAX(1D-10,1D0-ZU))
44588   450   CONTINUE
44589         IF(ISL(1).EQ.1.AND.ISL(2).EQ.1.AND.ISLM.NE.0) THEN
44590           ISL(3-ISLM)=0
44591           ISLM=3-ISLM
44592         ELSEIF(ISL(1).EQ.1.AND.ISL(2).EQ.1) THEN
44593           ZDR1=MAX(0D0,V(N+1,3)/MAX(1D-6,V(N+1,4))-1D0)
44594           ZDR2=MAX(0D0,V(N+2,3)/MAX(1D-6,V(N+2,4))-1D0)
44595           IF(ZDR2.GT.PYR(0)*(ZDR1+ZDR2)) ISL(1)=0
44596           IF(ISL(1).EQ.1) ISL(2)=0
44597           IF(ISL(1).EQ.0) ISLM=1
44598           IF(ISL(2).EQ.0) ISLM=2
44599         ENDIF
44600         IF(ISL(1).EQ.1.OR.ISL(2).EQ.1) GOTO 330
44601       ENDIF
44602       IFLD1=KFLD(1)
44603       IF(KFLD(1).GE.6.AND.KFLD(1).LE.8) IFLD1=37+KFLD(1)+
44604      &ISIGN(2,K(N+1,2))
44605       IFLD2=KFLD(2)
44606       IF(KFLD(2).GE.6.AND.KFLD(2).LE.8) IFLD2=37+KFLD(2)+
44607      &ISIGN(2,K(N+2,2))
44608       IF(IGM.GT.0) THEN
44609         IF(MOD(MSTJ(43),2).EQ.1.AND.(P(N+1,5).GE.
44610      &  PMTH(2,IFLD1).OR.P(N+2,5).GE.PMTH(2,IFLD2))) THEN
44611           PMQ1=V(N+1,5)/V(IM,5)
44612           PMQ2=V(N+2,5)/V(IM,5)
44613           ZD=SQRT(MAX(0D0,(1D0-V(IM,5)/PEM**2)*((1D0-PMQ1-PMQ2)**2-
44614      &    4D0*PMQ1*PMQ2)))
44615           ZH=1D0+PMQ1-PMQ2
44616           ZL=0.5D0*(ZH-ZD)
44617           ZU=0.5D0*(ZH+ZD)
44618           IF(V(IM,1).LT.ZL.OR.V(IM,1).GT.ZU) GOTO 330
44619         ENDIF
44620       ENDIF
44621  
44622 C...Accepted branch. Construct four-momentum for initial partons.
44623   460 MAZIP=0
44624       MAZIC=0
44625       IF(NEP.EQ.1) THEN
44626         P(N+1,1)=0D0
44627         P(N+1,2)=0D0
44628         P(N+1,3)=SQRT(MAX(0D0,(P(IPA(1),4)+P(N+1,5))*(P(IPA(1),4)-
44629      &  P(N+1,5))))
44630         P(N+1,4)=P(IPA(1),4)
44631         V(N+1,2)=P(N+1,4)
44632       ELSEIF(IGM.EQ.0.AND.NEP.EQ.2) THEN
44633         PED1=0.5D0*(V(IM,5)+V(N+1,5)-V(N+2,5))/P(IM,5)
44634         P(N+1,1)=0D0
44635         P(N+1,2)=0D0
44636         P(N+1,3)=SQRT(MAX(0D0,(PED1+P(N+1,5))*(PED1-P(N+1,5))))
44637         P(N+1,4)=PED1
44638         P(N+2,1)=0D0
44639         P(N+2,2)=0D0
44640         P(N+2,3)=-P(N+1,3)
44641         P(N+2,4)=P(IM,5)-PED1
44642         V(N+1,2)=P(N+1,4)
44643         V(N+2,2)=P(N+2,4)
44644       ELSEIF(NEP.EQ.3) THEN
44645         P(N+1,1)=0D0
44646         P(N+1,2)=0D0
44647         P(N+1,3)=SQRT(MAX(0D0,PA1S))
44648         P(N+2,1)=SQRT(PTS)
44649         P(N+2,2)=0D0
44650         P(N+2,3)=0.5D0*(PA3S-PA2S-PA1S)/P(N+1,3)
44651         P(N+3,1)=-P(N+2,1)
44652         P(N+3,2)=0D0
44653         P(N+3,3)=-(P(N+1,3)+P(N+2,3))
44654         V(N+1,2)=P(N+1,4)
44655         V(N+2,2)=P(N+2,4)
44656         V(N+3,2)=P(N+3,4)
44657  
44658 C...Construct transverse momentum for ordinary branching in shower.
44659       ELSE
44660         ZM=V(IM,1)
44661         LOOPPT=0
44662   465   LOOPPT=LOOPPT+1
44663         PZM=SQRT(MAX(0D0,(PEM+P(IM,5))*(PEM-P(IM,5))))
44664         PMLS=(V(IM,5)-V(N+1,5)-V(N+2,5))**2-4D0*V(N+1,5)*V(N+2,5)
44665         IF(PZM.LE.0D0) THEN
44666           PTS=0D0
44667         ELSEIF(K(IM,2).EQ.21.AND.IABS(K(N+1,2)).LE.10.AND.
44668      &  MSTJ(44).EQ.3) THEN
44669           PTS=PMLS*ZM*(1D0-ZM)/V(IM,5) 
44670         ELSEIF(MOD(MSTJ(43),2).EQ.1) THEN
44671           PTS=(PEM**2*(ZM*(1D0-ZM)*V(IM,5)-(1D0-ZM)*V(N+1,5)-
44672      &    ZM*V(N+2,5))-0.25D0*PMLS)/PZM**2
44673         ELSE
44674           PTS=PMLS*(ZM*(1D0-ZM)*PEM**2/V(IM,5)-0.25D0)/PZM**2
44675         ENDIF
44676         IF(PTS.LT.0D0.AND.LOOPPT.LT.10) THEN
44677           ZM=0.05D0+0.9D0*ZM
44678           GOTO 465
44679         ELSEIF(PTS.LT.0D0) THEN 
44680           GOTO 265
44681         ENDIF 
44682         PT=SQRT(MAX(0D0,PTS))
44683  
44684 C...Find coefficient of azimuthal asymmetry due to gluon polarization.
44685         HAZIP=0D0
44686         IF(MSTJ(49).NE.1.AND.MOD(MSTJ(46),2).EQ.1.AND.K(IM,2).EQ.21
44687      &  .AND.IAU.NE.0) THEN
44688           IF(K(IGM,3).NE.0) MAZIP=1
44689           ZAU=V(IGM,1)
44690           IF(IAU.EQ.IM+1) ZAU=1D0-V(IGM,1)
44691           IF(MAZIP.EQ.0) ZAU=0D0
44692           IF(K(IGM,2).NE.21) THEN
44693             HAZIP=2D0*ZAU/(1D0+ZAU**2)
44694           ELSE
44695             HAZIP=(ZAU/(1D0-ZAU*(1D0-ZAU)))**2
44696           ENDIF
44697           IF(K(N+1,2).NE.21) THEN
44698             HAZIP=HAZIP*(-2D0*ZM*(1D0-ZM))/(1D0-2D0*ZM*(1D0-ZM))
44699           ELSE
44700             HAZIP=HAZIP*(ZM*(1D0-ZM)/(1D0-ZM*(1D0-ZM)))**2
44701           ENDIF
44702         ENDIF
44703  
44704 C...Find coefficient of azimuthal asymmetry due to soft gluon
44705 C...interference.
44706         HAZIC=0D0
44707         IF(MSTJ(49).NE.2.AND.MSTJ(46).GE.2.AND.(K(N+1,2).EQ.21.OR.
44708      &  K(N+2,2).EQ.21).AND.IAU.NE.0) THEN
44709           IF(K(IGM,3).NE.0) MAZIC=N+1
44710           IF(K(IGM,3).NE.0.AND.K(N+1,2).NE.21) MAZIC=N+2
44711           IF(K(IGM,3).NE.0.AND.K(N+1,2).EQ.21.AND.K(N+2,2).EQ.21.AND.
44712      &    ZM.GT.0.5D0) MAZIC=N+2
44713           IF(K(IAU,2).EQ.22) MAZIC=0
44714           ZS=ZM
44715           IF(MAZIC.EQ.N+2) ZS=1D0-ZM
44716           ZGM=V(IGM,1)
44717           IF(IAU.EQ.IM-1) ZGM=1D0-V(IGM,1)
44718           IF(MAZIC.EQ.0) ZGM=1D0
44719           IF(MAZIC.NE.0) HAZIC=(P(IM,5)/P(IGM,5))*
44720      &    SQRT((1D0-ZS)*(1D0-ZGM)/(ZS*ZGM))
44721           HAZIC=MIN(0.95D0,HAZIC)
44722         ENDIF
44723       ENDIF
44724  
44725 C...Construct energies for ordinary branching in shower.
44726   470 IF(NEP.EQ.2.AND.IGM.GT.0) THEN
44727         IF(K(IM,2).EQ.21.AND.IABS(K(N+1,2)).LE.10.AND.
44728      &  MSTJ(44).EQ.3) THEN
44729           P(N+1,4)=0.5D0*(PEM*(V(IM,5)+V(N+1,5)-V(N+2,5))+
44730      &    PZM*SQRT(MAX(0D0,PMLS))*(2D0*ZM-1D0))/V(IM,5)
44731         ELSEIF(MOD(MSTJ(43),2).EQ.1) THEN
44732           P(N+1,4)=PEM*V(IM,1)
44733         ELSE
44734           P(N+1,4)=PEM*(0.5D0*(V(IM,5)-SQRT(PMLS)+V(N+1,5)-V(N+2,5))+
44735      &    SQRT(PMLS)*ZM)/V(IM,5)
44736         ENDIF
44737 
44738 C...Already predetermined choice of phi angle or not
44739         PHI=PARU(2)*PYR(0)
44740         IF(MPSPD.EQ.1.AND.IGM.EQ.NS+1) THEN
44741           IPSPD=IP1+IM-NS-2
44742           IF(K(IPSPD,4).GT.0) THEN
44743             IPSGD1=K(IPSPD,4)
44744             IF(IM.EQ.NS+2) THEN
44745               PHI=PYANGL(P(IPSGD1,1),P(IPSGD1,2))
44746             ELSE
44747               PHI=PYANGL(-P(IPSGD1,1),P(IPSGD1,2))
44748             ENDIF
44749           ENDIF
44750         ELSEIF(MPSPD.EQ.1.AND.IGM.EQ.NS+2) THEN
44751           IPSPD=IP1+IM-NS-2
44752           IF(K(IPSPD,4).GT.0) THEN
44753             IPSGD1=K(IPSPD,4)
44754             PHIPSM=PYANGL(P(IPSPD,1),P(IPSPD,2))
44755             THEPSM=PYANGL(P(IPSPD,3),SQRT(P(IPSPD,1)**2+P(IPSPD,2)**2))
44756             CALL PYROBO(IPSGD1,IPSGD1,0D0,-PHIPSM,0D0,0D0,0D0)
44757             CALL PYROBO(IPSGD1,IPSGD1,-THEPSM,0D0,0D0,0D0,0D0)
44758             PHI=PYANGL(P(IPSGD1,1),P(IPSGD1,2))
44759             CALL PYROBO(IPSGD1,IPSGD1,THEPSM,PHIPSM,0D0,0D0,0D0)   
44760           ENDIF
44761         ENDIF
44762 
44763 C...Construct momenta for ordinary branching in shower.
44764         P(N+1,1)=PT*COS(PHI)
44765         P(N+1,2)=PT*SIN(PHI)
44766         IF(K(IM,2).EQ.21.AND.IABS(K(N+1,2)).LE.10.AND.
44767      &  MSTJ(44).EQ.3) THEN
44768           P(N+1,3)=0.5D0*(PZM*(V(IM,5)+V(N+1,5)-V(N+2,5))+
44769      &    PEM*SQRT(MAX(0D0,PMLS))*(2D0*ZM-1D0))/V(IM,5)
44770         ELSEIF(PZM.GT.0D0) THEN
44771           P(N+1,3)=0.5D0*(V(N+2,5)-V(N+1,5)-V(IM,5)+
44772      &    2D0*PEM*P(N+1,4))/PZM
44773         ELSE
44774           P(N+1,3)=0D0
44775         ENDIF
44776         P(N+2,1)=-P(N+1,1)
44777         P(N+2,2)=-P(N+1,2)
44778         P(N+2,3)=PZM-P(N+1,3)
44779         P(N+2,4)=PEM-P(N+1,4)
44780         IF(MSTJ(43).LE.2) THEN
44781           V(N+1,2)=(PEM*P(N+1,4)-PZM*P(N+1,3))/P(IM,5)
44782           V(N+2,2)=(PEM*P(N+2,4)-PZM*P(N+2,3))/P(IM,5)
44783         ENDIF
44784       ENDIF
44785  
44786 C...Rotate and boost daughters.
44787       IF(IGM.GT.0) THEN
44788         IF(MSTJ(43).LE.2) THEN
44789           BEX=P(IGM,1)/P(IGM,4)
44790           BEY=P(IGM,2)/P(IGM,4)
44791           BEZ=P(IGM,3)/P(IGM,4)
44792           GA=P(IGM,4)/P(IGM,5)
44793           GABEP=GA*(GA*(BEX*P(IM,1)+BEY*P(IM,2)+BEZ*P(IM,3))/(1D0+GA)-
44794      &    P(IM,4))
44795         ELSE
44796           BEX=0D0
44797           BEY=0D0
44798           BEZ=0D0
44799           GA=1D0
44800           GABEP=0D0
44801         ENDIF
44802         PTIMB=SQRT((P(IM,1)+GABEP*BEX)**2+(P(IM,2)+GABEP*BEY)**2)
44803         THE=PYANGL(P(IM,3)+GABEP*BEZ,PTIMB)
44804         IF(PTIMB.GT.1D-4) THEN
44805           PHI=PYANGL(P(IM,1)+GABEP*BEX,P(IM,2)+GABEP*BEY)
44806         ELSE
44807           PHI=0D0
44808         ENDIF 
44809         DO 480 I=N+1,N+2
44810           DP(1)=COS(THE)*COS(PHI)*P(I,1)-SIN(PHI)*P(I,2)+
44811      &    SIN(THE)*COS(PHI)*P(I,3)
44812           DP(2)=COS(THE)*SIN(PHI)*P(I,1)+COS(PHI)*P(I,2)+
44813      &    SIN(THE)*SIN(PHI)*P(I,3)
44814           DP(3)=-SIN(THE)*P(I,1)+COS(THE)*P(I,3)
44815           DP(4)=P(I,4)
44816           DBP=BEX*DP(1)+BEY*DP(2)+BEZ*DP(3)
44817           DGABP=GA*(GA*DBP/(1D0+GA)+DP(4))
44818           P(I,1)=DP(1)+DGABP*BEX
44819           P(I,2)=DP(2)+DGABP*BEY
44820           P(I,3)=DP(3)+DGABP*BEZ
44821           P(I,4)=GA*(DP(4)+DBP)
44822   480   CONTINUE
44823       ENDIF
44824  
44825 C...Weight with azimuthal distribution, if required.
44826       IF(MAZIP.NE.0.OR.MAZIC.NE.0) THEN
44827         DO 490 J=1,3
44828           DPT(1,J)=P(IM,J)
44829           DPT(2,J)=P(IAU,J)
44830           DPT(3,J)=P(N+1,J)
44831   490   CONTINUE
44832         DPMA=DPT(1,1)*DPT(2,1)+DPT(1,2)*DPT(2,2)+DPT(1,3)*DPT(2,3)
44833         DPMD=DPT(1,1)*DPT(3,1)+DPT(1,2)*DPT(3,2)+DPT(1,3)*DPT(3,3)
44834         DPMM=DPT(1,1)**2+DPT(1,2)**2+DPT(1,3)**2
44835         DO 500 J=1,3
44836           DPT(4,J)=DPT(2,J)-DPMA*DPT(1,J)/MAX(1D-10,DPMM)
44837           DPT(5,J)=DPT(3,J)-DPMD*DPT(1,J)/MAX(1D-10,DPMM)
44838   500   CONTINUE
44839         DPT(4,4)=SQRT(DPT(4,1)**2+DPT(4,2)**2+DPT(4,3)**2)
44840         DPT(5,4)=SQRT(DPT(5,1)**2+DPT(5,2)**2+DPT(5,3)**2)
44841         IF(MIN(DPT(4,4),DPT(5,4)).GT.0.1D0*PARJ(82)) THEN
44842           CAD=(DPT(4,1)*DPT(5,1)+DPT(4,2)*DPT(5,2)+
44843      &    DPT(4,3)*DPT(5,3))/(DPT(4,4)*DPT(5,4))
44844           IF(MAZIP.NE.0) THEN
44845             IF(1D0+HAZIP*(2D0*CAD**2-1D0).LT.PYR(0)*(1D0+ABS(HAZIP)))
44846      &      GOTO 470
44847           ENDIF
44848           IF(MAZIC.NE.0) THEN
44849             IF(MAZIC.EQ.N+2) CAD=-CAD
44850             IF((1D0-HAZIC)*(1D0-HAZIC*CAD)/(1D0+HAZIC**2-2D0*HAZIC*CAD)
44851      &      .LT.PYR(0)) GOTO 470
44852           ENDIF
44853         ENDIF
44854       ENDIF
44855  
44856 C...Azimuthal anisotropy due to interference with initial state partons.
44857       IF(MOD(MIIS,2).EQ.1.AND.IGM.EQ.NS+1.AND.(K(N+1,2).EQ.21.OR.
44858      &K(N+2,2).EQ.21)) THEN
44859         III=IM-NS-1
44860         IF(ISII(III).GE.1) THEN
44861           IAZIID=N+1
44862           IF(K(N+1,2).NE.21) IAZIID=N+2
44863           IF(K(N+1,2).EQ.21.AND.K(N+2,2).EQ.21.AND.
44864      &    P(N+1,4).GT.P(N+2,4)) IAZIID=N+2
44865           THEIID=PYANGL(P(IAZIID,3),SQRT(P(IAZIID,1)**2+P(IAZIID,2)**2))
44866           IF(III.EQ.2) THEIID=PARU(1)-THEIID
44867           PHIIID=PYANGL(P(IAZIID,1),P(IAZIID,2))
44868           HAZII=MIN(0.95D0,THEIID/THEIIS(III,ISII(III)))
44869           CAD=COS(PHIIID-PHIIIS(III,ISII(III)))
44870           PHIREL=ABS(PHIIID-PHIIIS(III,ISII(III)))
44871           IF(PHIREL.GT.PARU(1)) PHIREL=PARU(2)-PHIREL
44872           IF((1D0-HAZII)*(1D0-HAZII*CAD)/(1D0+HAZII**2-2D0*HAZII*CAD)
44873      &    .LT.PYR(0)) GOTO 470
44874         ENDIF
44875       ENDIF
44876  
44877 C...Continue loop over partons that may branch, until none left.
44878       IF(IGM.GE.0) K(IM,1)=14
44879       N=N+NEP
44880       NEP=2
44881       IF(N.GT.MSTU(4)-MSTU(32)-5) THEN
44882         CALL PYERRM(11,'(PYSHOW:) no more memory left in PYJETS')
44883         IF(MSTU(21).GE.1) N=NS
44884         IF(MSTU(21).GE.1) RETURN
44885       ENDIF
44886       GOTO 270
44887  
44888 C...Set information on imagined shower initiator.
44889   510 IF(NPA.GE.2) THEN
44890         K(NS+1,1)=11
44891         K(NS+1,2)=94
44892         K(NS+1,3)=IP1
44893         IF(IP2.GT.0.AND.IP2.LT.IP1) K(NS+1,3)=IP2
44894         K(NS+1,4)=NS+2
44895         K(NS+1,5)=NS+1+NPA
44896         IIM=1
44897       ELSE
44898         IIM=0
44899       ENDIF
44900  
44901 C...Reconstruct string drawing information.
44902       DO 520 I=NS+1+IIM,N
44903         IF(K(I,1).LE.10.AND.K(I,2).EQ.22) THEN
44904           K(I,1)=1
44905         ELSEIF(K(I,1).LE.10.AND.IABS(K(I,2)).GE.11.AND.
44906      &    IABS(K(I,2)).LE.18) THEN
44907           K(I,1)=1
44908         ELSEIF(K(I,1).LE.10) THEN
44909           K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))
44910           K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))
44911         ELSEIF(K(MOD(K(I,4),MSTU(5))+1,2).NE.22) THEN
44912           ID1=MOD(K(I,4),MSTU(5))
44913           IF(K(I,2).GE.1.AND.K(I,2).LE.8) ID1=MOD(K(I,4),MSTU(5))+1
44914           ID2=2*MOD(K(I,4),MSTU(5))+1-ID1
44915           K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))+ID1
44916           K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))+ID2
44917           K(ID1,4)=K(ID1,4)+MSTU(5)*I
44918           K(ID1,5)=K(ID1,5)+MSTU(5)*ID2
44919           K(ID2,4)=K(ID2,4)+MSTU(5)*ID1
44920           K(ID2,5)=K(ID2,5)+MSTU(5)*I
44921         ELSE
44922           ID1=MOD(K(I,4),MSTU(5))
44923           ID2=ID1+1
44924           K(I,4)=MSTU(5)*(K(I,4)/MSTU(5))+ID1
44925           K(I,5)=MSTU(5)*(K(I,5)/MSTU(5))+ID1
44926           IF(IABS(K(I,2)).LE.10.OR.K(ID1,1).GE.11) THEN
44927             K(ID1,4)=K(ID1,4)+MSTU(5)*I
44928             K(ID1,5)=K(ID1,5)+MSTU(5)*I
44929           ELSE
44930             K(ID1,4)=0
44931             K(ID1,5)=0
44932           ENDIF
44933           K(ID2,4)=0
44934           K(ID2,5)=0
44935         ENDIF
44936   520 CONTINUE
44937  
44938 C...Transformation from CM frame.
44939       IF(NPA.GE.2) THEN
44940         BEX=PS(1)/PS(4)
44941         BEY=PS(2)/PS(4)
44942         BEZ=PS(3)/PS(4)
44943         GA=PS(4)/PS(5)
44944         GABEP=GA*(GA*(BEX*P(IPA(1),1)+BEY*P(IPA(1),2)+BEZ*P(IPA(1),3))
44945      &  /(1D0+GA)-P(IPA(1),4))
44946       ELSE
44947         BEX=0D0
44948         BEY=0D0
44949         BEZ=0D0
44950         GABEP=0D0
44951       ENDIF
44952       THE=PYANGL(P(IPA(1),3)+GABEP*BEZ,SQRT((P(IPA(1),1)
44953      &+GABEP*BEX)**2+(P(IPA(1),2)+GABEP*BEY)**2))
44954       PHI=PYANGL(P(IPA(1),1)+GABEP*BEX,P(IPA(1),2)+GABEP*BEY)
44955       IF(NPA.EQ.3) THEN
44956         CHI=PYANGL(COS(THE)*COS(PHI)*(P(IPA(2),1)+GABEP*BEX)+COS(THE)*
44957      &  SIN(PHI)*(P(IPA(2),2)+GABEP*BEY)-SIN(THE)*(P(IPA(2),3)+GABEP*
44958      &  BEZ),-SIN(PHI)*(P(IPA(2),1)+GABEP*BEX)+COS(PHI)*(P(IPA(2),2)+
44959      &  GABEP*BEY))
44960         MSTU(33)=1
44961         CALL PYROBO(NS+1,N,0D0,CHI,0D0,0D0,0D0)
44962       ENDIF
44963       MSTU(33)=1
44964       CALL PYROBO(NS+1,N,THE,PHI,BEX,BEY,BEZ)
44965  
44966 C...Decay vertex of shower.
44967       DO 540 I=NS+1,N
44968         DO 530 J=1,5
44969           V(I,J)=V(IP1,J)
44970   530   CONTINUE
44971   540 CONTINUE
44972  
44973 C...Delete trivial shower, else connect initiators.
44974       IF(N.LE.NS+NPA+IIM) THEN
44975         N=NS
44976       ELSE
44977         DO 550 IP=1,NPA
44978           K(IPA(IP),1)=14
44979           K(IPA(IP),4)=K(IPA(IP),4)+NS+IIM+IP
44980           K(IPA(IP),5)=K(IPA(IP),5)+NS+IIM+IP
44981           K(NS+IIM+IP,3)=IPA(IP)
44982           IF(IIM.EQ.1.AND.MSTU(16).NE.2) K(NS+IIM+IP,3)=NS+1
44983           IF(K(NS+IIM+IP,1).NE.1) THEN
44984             K(NS+IIM+IP,4)=MSTU(5)*IPA(IP)+K(NS+IIM+IP,4)
44985             K(NS+IIM+IP,5)=MSTU(5)*IPA(IP)+K(NS+IIM+IP,5)
44986           ENDIF
44987   550   CONTINUE
44988       ENDIF
44989  
44990       RETURN
44991       END
44992  
44993 C*********************************************************************
44994  
44995 C...PYBOEI
44996 C...Modifies an event so as to approximately take into account
44997 C...Bose-Einstein effects according to a simple phenomenological
44998 C...parametrization.
44999  
45000       SUBROUTINE PYBOEI(NSAV)
45001  
45002 C...Double precision and integer declarations.
45003       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45004       IMPLICIT INTEGER(I-N)
45005       INTEGER PYK,PYCHGE,PYCOMP
45006       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
45007 C...Commonblocks.
45008       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
45009       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45010       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45011       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
45012 C...Local arrays and data.
45013       DIMENSION DPS(4),KFBE(9),NBE(0:10),BEI(100),BEI3(100),
45014      &BEIW(100),BEI3W(100)
45015       DATA KFBE/211,-211,111,321,-321,130,310,221,331/
45016 C...Statement function: squared invariant mass.
45017       SDIP(I,J)=((P(I,4)+P(J,4))**2-(P(I,3)+P(J,3))**2-
45018      &(P(I,2)+P(J,2))**2-(P(I,1)+P(J,1))**2)
45019  
45020 C...Boost event to overall CM frame. Calculate CM energy.
45021       IF((MSTJ(51).NE.1.AND.MSTJ(51).NE.2).OR.N-NSAV.LE.1) RETURN
45022       DO 100 J=1,4
45023         DPS(J)=0D0
45024   100 CONTINUE
45025       DO 120 I=1,N
45026         KFA=IABS(K(I,2))
45027         IF(K(I,1).LE.10.AND.((KFA.GT.10.AND.KFA.LE.20).OR.KFA.EQ.22)
45028      &  .AND.K(I,3).GT.0) THEN
45029           KFMA=IABS(K(K(I,3),2))
45030           IF(KFMA.GT.10.AND.KFMA.LE.80) K(I,1)=-K(I,1)
45031         ENDIF
45032         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 120
45033         DO 110 J=1,4
45034           DPS(J)=DPS(J)+P(I,J)
45035   110   CONTINUE
45036   120 CONTINUE
45037       CALL PYROBO(0,0,0D0,0D0,-DPS(1)/DPS(4),-DPS(2)/DPS(4),
45038      &-DPS(3)/DPS(4))
45039       PECM=0D0
45040       DO 130 I=1,N
45041         IF(K(I,1).GE.1.AND.K(I,1).LE.10) PECM=PECM+P(I,4)
45042   130 CONTINUE
45043  
45044 C...Reserve copy of particles by species at end of record.
45045       IWP=0
45046       IWN=0
45047       NBE(0)=N+MSTU(3)
45048       NMAX=NBE(0)
45049       SMMIN=PECM
45050       DO 180 IBE=1,MIN(10,MSTJ(52)+1)
45051         NBE(IBE)=NBE(IBE-1)
45052         DO 170 I=NSAV+1,N
45053           IF(IBE.EQ.MIN(10,MSTJ(52)+1)) THEN
45054             DO 140 IIBE=1,IBE-1
45055               IF(K(I,2).EQ.KFBE(IIBE)) GOTO 170
45056   140       CONTINUE
45057           ELSE
45058             IF(K(I,2).NE.KFBE(IBE)) GOTO 170
45059           ENDIF
45060           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 170
45061           IF(NBE(IBE).GE.MSTU(4)-MSTU(32)-5) THEN
45062             CALL PYERRM(11,'(PYBOEI:) no more memory left in PYJETS')
45063             RETURN
45064           ENDIF
45065           NBE(IBE)=NBE(IBE)+1
45066           NMAX=NBE(IBE)
45067           K(NBE(IBE),1)=I
45068           K(NBE(IBE),5)=0
45069           SMMIN=MIN(SMMIN,P(I,5))
45070           IF(MSTJ(53).NE.0.OR.MSTJ(56).GT.0) THEN
45071             IM=I
45072   150       IF(K(IM,3).GT.0) THEN
45073               IM=K(IM,3)
45074               IF(ABS(K(IM,2)).NE.24) GOTO 150
45075               K(NBE(IBE),5)=K(IM,2)
45076               IF(IWP.EQ.0.AND.K(IM,2).EQ.24) IWP=IM
45077               IF(IWN.EQ.0.AND.K(IM,2).EQ.-24) IWN=IM
45078             ENDIF
45079           ENDIF
45080           DO 160 J=1,3
45081             P(NBE(IBE),J)=0D0
45082             V(NBE(IBE),J)=0D0
45083   160     CONTINUE
45084           P(NBE(IBE),5)=-1.0D0
45085   170   CONTINUE
45086   180 CONTINUE
45087       IF(NBE(MIN(9,MSTJ(52)))-NBE(0).LE.1) GOTO 500
45088  
45089 C...Calculate separation between W+ and W-
45090       SIGW=PARJ(93)
45091       IF(IWP.GT.0.AND.IWN.GT.0.AND.MSTJ(56).GT.0) THEN
45092         DMW=PMAS(24,1)
45093         DGW=PMAS(24,2)
45094         DMP=P(IWP,5)
45095         DMN=P(IWN,5)
45096         TAUPD=DMP/SQRT((DMP**2-DMW**2)**2+(DGW*(DMP**2)/DMW)**2)
45097         TAUND=DMN/SQRT((DMN**2-DMW**2)**2+(DGW*(DMN**2)/DMW)**2)
45098         TAUP=-TAUPD*LOG(PYR(IDUM))
45099         TAUN=-TAUND*LOG(PYR(IDUM))
45100         DXP=TAUP*PYP(IWP,8)/DMP
45101         DXN=TAUN*PYP(IWN,8)/DMN
45102         DX=DXP+DXN
45103         SIGW=1.0D0/(1.0D0/PARJ(93)+REAL(MSTJ(56))*DX)
45104       ELSE
45105         SIGW=PARJ(93)
45106       ENDIF
45107  
45108       IF(MSTJ(57).EQ.1.AND.MSTJ(54).LT.0) THEN
45109         DO 210 IBE=1,MIN(9,MSTJ(52))
45110           DO 200 I1M=NBE(IBE-1)+1,NBE(IBE)-1
45111             Q2MIN=PECM**2
45112             I1=K(I1M,1)
45113             DO 190 I2M=NBE(IBE-1)+1,NBE(IBE)-1
45114               IF(I2M.EQ.I1M) GOTO 190
45115               I2=K(I2M,1)
45116               Q2=(P(I1,4)+P(I2,4))**2-(P(I1,1)+P(I2,1))**2-
45117      &        (P(I1,2)+P(I2,2))**2-(P(I1,3)+P(I2,3))**2-
45118      &        (P(I1,5)+P(I2,5))**2
45119               IF(Q2.GT.0.0D0.AND.Q2.LT.Q2MIN) THEN
45120                 Q2MIN=Q2
45121               ENDIF
45122   190       CONTINUE
45123             P(I1M,5)=Q2MIN
45124   200     CONTINUE
45125   210   CONTINUE
45126       ENDIF
45127  
45128 C...Tabulate integral for subsequent momentum shift.
45129       DO 390 IBE=1,MIN(9,MSTJ(52))
45130         IF(IBE.NE.1.AND.IBE.NE.4.AND.IBE.LE.7) GOTO 260
45131         IF(IBE.EQ.1.AND.MAX(NBE(1)-NBE(0),NBE(2)-NBE(1),NBE(3)-NBE(2))
45132      &  .LE.1) GOTO 260
45133         IF(IBE.EQ.4.AND.MAX(NBE(4)-NBE(3),NBE(5)-NBE(4),NBE(6)-NBE(5),
45134      &  NBE(7)-NBE(6)).LE.1) GOTO 260
45135         IF(IBE.GE.8.AND.NBE(IBE)-NBE(IBE-1).LE.1) GOTO 260
45136         IF(IBE.EQ.1) PMHQ=2D0*PYMASS(211)
45137         IF(IBE.EQ.4) PMHQ=2D0*PYMASS(321)
45138         IF(IBE.EQ.8) PMHQ=2D0*PYMASS(221)
45139         IF(IBE.EQ.9) PMHQ=2D0*PYMASS(331)
45140         QDEL=0.1D0*MIN(PMHQ,PARJ(93))
45141         QDEL3=0.1D0*MIN(PMHQ,PARJ(93)*3.0D0)
45142         QDELW=0.1D0*MIN(PMHQ,SIGW)
45143         QDEL3W=0.1D0*MIN(PMHQ,SIGW*3.0D0)
45144         IF(MSTJ(51).EQ.1) THEN
45145           NBIN=MIN(100,NINT(9D0*PARJ(93)/QDEL))
45146           NBIN3=MIN(100,NINT(27D0*PARJ(93)/QDEL3))
45147           NBINW=MIN(100,NINT(9D0*SIGW/QDELW))
45148           NBIN3W=MIN(100,NINT(27D0*SIGW/QDEL3W))
45149           BEEX=EXP(0.5D0*QDEL/PARJ(93))
45150           BEEX3=EXP(0.5D0*QDEL3/(3.0D0*PARJ(93)))
45151           BEEXW=EXP(0.5D0*QDELW/SIGW)
45152           BEEX3W=EXP(0.5D0*QDEL3W/(3.0D0*SIGW))
45153           BERT=EXP(-QDEL/PARJ(93))
45154           BERT3=EXP(-QDEL3/(3.0D0*PARJ(93)))
45155           BERTW=EXP(-QDELW/SIGW)
45156           BERT3W=EXP(-QDEL3W/(3.0D0*SIGW))
45157         ELSE
45158           NBIN=MIN(100,NINT(3D0*PARJ(93)/QDEL))
45159           NBIN3=MIN(100,NINT(9D0*PARJ(93)/QDEL3))
45160           NBINW=MIN(100,NINT(3D0*SIGW/QDELW))
45161           NBIN3W=MIN(100,NINT(9D0*SIGW/QDEL3W))
45162         ENDIF
45163         DO 220 IBIN=1,NBIN
45164           QBIN=QDEL*(IBIN-0.5D0)
45165           BEI(IBIN)=QDEL*(QBIN**2+QDEL**2/12D0)/SQRT(QBIN**2+PMHQ**2)
45166           IF(MSTJ(51).EQ.1) THEN
45167             BEEX=BEEX*BERT
45168             BEI(IBIN)=BEI(IBIN)*BEEX
45169           ELSE
45170             BEI(IBIN)=BEI(IBIN)*EXP(-(QBIN/PARJ(93))**2)
45171           ENDIF
45172           IF(IBIN.GE.2) BEI(IBIN)=BEI(IBIN)+BEI(IBIN-1)
45173   220   CONTINUE
45174         DO 230 IBIN=1,NBIN3
45175           QBIN=QDEL3*(IBIN-0.5D0)
45176           BEI3(IBIN)=QDEL3*(QBIN**2+QDEL3**2/12D0)/SQRT(QBIN**2+PMHQ**2)
45177           IF(MSTJ(51).EQ.1) THEN
45178             BEEX3=BEEX3*BERT3
45179             BEI3(IBIN)=BEI3(IBIN)*BEEX3
45180           ELSE
45181             BEI3(IBIN)=BEI3(IBIN)*EXP(-(QBIN/(3.0D0*PARJ(93)))**2)
45182           ENDIF
45183           IF(IBIN.GE.2) BEI3(IBIN)=BEI3(IBIN)+BEI3(IBIN-1)
45184   230   CONTINUE
45185         DO 240 IBIN=1,NBINW
45186           QBIN=QDELW*(IBIN-0.5D0)
45187           BEIW(IBIN)=QDELW*(QBIN**2+QDELW**2/12D0)/SQRT(QBIN**2+PMHQ**2)
45188           IF(MSTJ(51).EQ.1) THEN
45189             BEEXW=BEEXW*BERTW
45190             BEIW(IBIN)=BEIW(IBIN)*BEEXW
45191           ELSE
45192             BEIW(IBIN)=BEIW(IBIN)*EXP(-(QBIN/SIGW)**2)
45193           ENDIF
45194           IF(IBIN.GE.2) BEIW(IBIN)=BEIW(IBIN)+BEIW(IBIN-1)
45195   240   CONTINUE
45196         DO 250 IBIN=1,NBIN3W
45197           QBIN=QDEL3W*(IBIN-0.5D0)
45198           BEI3W(IBIN)=QDEL3W*(QBIN**2+QDEL3W**2/12D0)/
45199      &    SQRT(QBIN**2+PMHQ**2)
45200           IF(MSTJ(51).EQ.1) THEN
45201             BEEX3W=BEEX3W*BERT3W
45202             BEI3W(IBIN)=BEI3W(IBIN)*BEEX3W
45203           ELSE
45204             BEI3W(IBIN)=BEI3W(IBIN)*EXP(-(QBIN/(3.0D0*SIGW))**2)
45205           ENDIF
45206           IF(IBIN.GE.2) BEI3W(IBIN)=BEI3W(IBIN)+BEI3W(IBIN-1)
45207   250   CONTINUE
45208  
45209 C...Loop through particle pairs and find old relative momentum.
45210   260   DO 380 I1M=NBE(IBE-1)+1,NBE(IBE)-1
45211           I1=K(I1M,1)
45212           DO 370 I2M=I1M+1,NBE(IBE)
45213             IF(MSTJ(53).EQ.1.AND.K(I1M,5).NE.K(I2M,5)) GOTO 370
45214             IF(MSTJ(53).EQ.2.AND.K(I1M,5).EQ.K(I2M,5)) GOTO 370
45215             I2=K(I2M,1)
45216             Q2OLD=(P(I1,4)+P(I2,4))**2-(P(I1,1)+P(I2,1))**2-(P(I1,2)+
45217      &      P(I2,2))**2-(P(I1,3)+P(I2,3))**2-(P(I1,5)+P(I2,5))**2
45218             IF(Q2OLD.LE.0.0D0) GOTO 370
45219             QOLD=SQRT(Q2OLD)
45220  
45221 C...Calculate new relative momentum.
45222             QMOV=0.0D0
45223             QMOV3=0.0D0
45224             QMOVW=0.0D0
45225             QMOV3W=0.0D0
45226             IF(QOLD.LT.1D-3*QDEL) THEN
45227               GOTO 270
45228             ELSEIF(QOLD.LE.QDEL) THEN
45229               QMOV=QOLD/3D0
45230             ELSEIF(QOLD.LT.(NBIN-0.1D0)*QDEL) THEN
45231               RBIN=QOLD/QDEL
45232               IBIN=RBIN
45233               RINP=(RBIN**3-IBIN**3)/(3*IBIN*(IBIN+1)+1)
45234               QMOV=(BEI(IBIN)+RINP*(BEI(IBIN+1)-BEI(IBIN)))*
45235      &        SQRT(Q2OLD+PMHQ**2)/Q2OLD
45236             ELSE
45237               QMOV=BEI(NBIN)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45238             ENDIF
45239   270       Q2NEW=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOV))**(2D0/3D0)
45240             IF(QOLD.LT.1D-3*QDEL3) THEN
45241               GOTO 280
45242             ELSEIF(QOLD.LE.QDEL3) THEN
45243               QMOV3=QOLD/3D0
45244             ELSEIF(QOLD.LT.(NBIN3-0.1D0)*QDEL3) THEN
45245               RBIN3=QOLD/QDEL3
45246               IBIN3=RBIN3
45247               RINP3=(RBIN3**3-IBIN3**3)/(3*IBIN3*(IBIN3+1)+1)
45248               QMOV3=(BEI3(IBIN3)+RINP3*(BEI3(IBIN3+1)-BEI3(IBIN3)))*
45249      &        SQRT(Q2OLD+PMHQ**2)/Q2OLD
45250             ELSE
45251               QMOV3=BEI3(NBIN3)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45252             ENDIF
45253   280       Q2NEW3=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOV3))**(2D0/3D0)
45254             RSCALE=1.0D0
45255             IF(MSTJ(54).EQ.2)
45256      &      RSCALE=1.0D0-EXP(-(QOLD/(2D0*PARJ(93)))**2)
45257             IF(MSTJ(56).LE.0.OR.IWP.EQ.0.OR.IWN.EQ.0.OR.
45258      &      K(I1M,5).EQ.K(I2M,5)) GOTO 310
45259  
45260             IF(QOLD.LT.1D-3*QDELW) THEN
45261               GOTO 290
45262             ELSEIF(QOLD.LE.QDELW) THEN
45263               QMOVW=QOLD/3D0
45264             ELSEIF(QOLD.LT.(NBINW-0.1D0)*QDELW) THEN
45265               RBINW=QOLD/QDELW
45266               IBINW=RBINW
45267               RINPW=(RBINW**3-IBINW**3)/(3*IBINW*(IBINW+1)+1)
45268               QMOVW=(BEIW(IBINW)+RINPW*(BEIW(IBINW+1)-BEIW(IBINW)))*
45269      &        SQRT(Q2OLD+PMHQ**2)/Q2OLD
45270             ELSE
45271               QMOVW=BEIW(NBINW)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45272             ENDIF
45273   290       Q2NEW=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOVW))**(2D0/3D0)
45274             IF(QOLD.LT.1D-3*QDEL3W) THEN
45275               GOTO 300
45276             ELSEIF(QOLD.LE.QDEL3W) THEN
45277               QMOV3W=QOLD/3D0
45278             ELSEIF(QOLD.LT.(NBIN3W-0.1D0)*QDEL3W) THEN
45279               RBIN3W=QOLD/QDEL3W
45280               IBIN3W=RBIN3W
45281               RINP3W=(RBIN3W**3-IBIN3W**3)/(3*IBIN3W*(IBIN3W+1)+1)
45282               QMOV3W=(BEI3W(IBIN3W)+RINP3W*(BEI3W(IBIN3W+1)-
45283      &        BEI3W(IBIN3W)))*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45284             ELSE
45285               QMOV3W=BEI3W(NBIN3W)*SQRT(Q2OLD+PMHQ**2)/Q2OLD
45286             ENDIF
45287   300       Q2NEW3=Q2OLD*(QOLD/(QOLD+3D0*PARJ(92)*QMOV3W))**(2D0/3D0)
45288             IF(MSTJ(54).EQ.2)
45289      &      RSCALE=1.0D0-EXP(-(QOLD/(2D0*SIGW))**2)
45290  
45291   310       CALL PYBESQ(I1,I2,NMAX,Q2OLD,Q2NEW)
45292             DO 320 J=1,3
45293               P(I1M,J)=P(I1M,J)+P(NMAX+1,J)
45294               P(I2M,J)=P(I2M,J)+P(NMAX+2,J)
45295   320       CONTINUE
45296             IF(MSTJ(54).GE.1) THEN
45297               CALL PYBESQ(I1,I2,NMAX,Q2OLD,Q2NEW3)
45298               DO 330 J=1,3
45299                 V(I1M,J)=V(I1M,J)+P(NMAX+1,J)*RSCALE
45300                 V(I2M,J)=V(I2M,J)+P(NMAX+2,J)*RSCALE
45301   330         CONTINUE
45302             ELSEIF(MSTJ(54).LE.-1) THEN
45303               EDEL=P(I1,4)+P(I2,4)-
45304      &        SQRT(MAX(Q2NEW-Q2OLD+(P(I1,4)+P(I2,4))**2,0.0D0))
45305               A2=(P(I1,1)-P(I2,1))**2+(P(I1,2)-P(I2,2))**2+
45306      &        (P(I1,3)-P(I2,3))**2
45307               WMAX=-1.0D20
45308               MI3=0
45309               MI4=0
45310               S12=SDIP(I1,I2)
45311               SM1=(P(I1,5)+SMMIN)**2
45312               DO 350 I3M=NBE(0)+1,NBE(MIN(10,MSTJ(52)+1))
45313                 IF(I3M.EQ.I1M.OR.I3M.EQ.I2M) GOTO 350
45314                 IF(MSTJ(53).EQ.1.AND.K(I3M,5).NE.K(I1M,5)) GOTO 350
45315                 IF(MSTJ(53).EQ.-2.AND.K(I1M,5).EQ.K(I2M,5).AND.
45316      &          K(I3M,5).NE.K(I1M,5)) GOTO 350
45317                 I3=K(I3M,1)
45318                 IF(K(I3,2).EQ.K(I1,2)) GOTO 350
45319                 S13=SDIP(I1,I3)
45320                 S23=SDIP(I2,I3)
45321                 SM3=(P(I3,5)+SMMIN)**2
45322                 IF(MSTJ(54).EQ.-2) THEN
45323                   WI=(MIN(S12*SM3,S13*MIN(SM1,SM3),
45324      &            S23*MIN(SM1,SM3))*SM1)
45325                 ELSE
45326                   WI=((P(I1,4)+P(I2,4)+P(I3,4))**2-
45327      &            (P(I1,3)+P(I2,3)+P(I3,3))**2-
45328      &            (P(I1,2)+P(I2,2)+P(I3,2))**2-
45329      &            (P(I1,1)+P(I2,1)+P(I3,1))**2)
45330                 ENDIF
45331                 IF(MSTJ(57).EQ.1.AND.P(I3M,5).GT.0) THEN
45332                   IF (WMAX*WI.GE.(1.0D0-EXP(-P(I3M,5)/(PARJ(93)**2))))
45333      &                 GOTO 350
45334                 ELSE
45335                   IF(WMAX*WI.GE.1.0) GOTO 350
45336                 ENDIF
45337                 DO 340 I4M=I3M+1,NBE(MIN(10,MSTJ(52)+1))
45338                   IF(I4M.EQ.I1M.OR.I4M.EQ.I2M) GOTO 340
45339                   IF(MSTJ(53).EQ.1.AND.K(I4M,5).NE.K(I1M,5)) GOTO 340
45340                   IF(MSTJ(53).EQ.-2.AND.K(I1M,5).EQ.K(I2M,5).AND.
45341      &            K(I4M,5).NE.K(I1M,5)) GOTO 340
45342                   I4=K(I4M,1)
45343                   IF(K(I3,2).EQ.K(I4,2).OR.K(I4,2).EQ.K(I1,2))
45344      &            GOTO 340
45345                   IF((P(I3,4)+P(I4,4)+EDEL)**2.LT.
45346      &            (P(I3,1)+P(I4,1))**2+(P(I3,2)+P(I4,2))**2+
45347      &            (P(I3,3)+P(I4,3))**2+(P(I3,5)+P(I4,5))**2)
45348      &            GOTO 340
45349                   IF(MSTJ(54).EQ.-2) THEN
45350                     S14=SDIP(I1,I4)
45351                     S24=SDIP(I2,I4)
45352                     S34=SDIP(I3,I4)
45353                     W=S12*MIN(MIN(S23,S24),MIN(S13,S14))*S34
45354                     W=MIN(W,S13*MIN(MIN(S23,S34),S12)*S24)
45355                     W=MIN(W,S14*MIN(MIN(S24,S34),S12)*S23)
45356                     W=MIN(W,MIN(S23,S24)*S13*S14)
45357                     W=1.0D0/W
45358                   ELSE
45359 C...weight=1-cos(theta)/mtot2
45360                     S1234=(P(I1,4)+P(I2,4)+P(I3,4)+P(I4,4))**2-
45361      &              (P(I1,3)+P(I2,3)+P(I3,3)+P(I4,3))**2-
45362      &              (P(I1,2)+P(I2,2)+P(I3,2)+P(I4,2))**2-
45363      &              (P(I1,1)+P(I2,1)+P(I3,1)+P(I4,1))**2
45364                     W=1.0D0/S1234
45365                     IF(W.LE.WMAX) GOTO 340
45366                   ENDIF
45367                   IF(MSTJ(57).EQ.1.AND.P(I3M,5).GT.0)
45368      &            W=W*(1.0D0-EXP(-P(I3M,5)/(PARJ(93)**2)))
45369                   IF(MSTJ(57).EQ.1.AND.P(I4M,5).GT.0)
45370      &            W=W*(1.0D0-EXP(-P(I4M,5)/(PARJ(93)**2)))
45371                   IF(W.LE.WMAX) GOTO 340
45372                   MI3=I3M
45373                   MI4=I4M
45374                   WMAX=W
45375   340           CONTINUE
45376   350         CONTINUE
45377               IF(MI4.EQ.0) GOTO 370
45378               I3=K(MI3,1)
45379               I4=K(MI4,1)
45380               EOLD=P(I3,4)+P(I4,4)
45381               ENEW=EOLD+EDEL
45382               P2=(P(I3,1)+P(I4,1))**2+(P(I3,2)+P(I4,2))**2+
45383      &        (P(I3,3)+P(I4,3))**2
45384               Q2NEWP=MAX(0.0D0,ENEW**2-P2-(P(I3,5)+P(I4,5))**2)
45385               Q2OLDP=MAX(0.0D0,EOLD**2-P2-(P(I3,5)+P(I4,5))**2)
45386               CALL PYBESQ(I3,I4,NMAX,Q2OLDP,Q2NEWP)
45387               DO 360 J=1,3
45388                 V(MI3,J)=V(MI3,J)+P(NMAX+1,J)
45389                 V(MI4,J)=V(MI4,J)+P(NMAX+2,J)
45390   360         CONTINUE
45391             ENDIF
45392   370     CONTINUE
45393   380   CONTINUE
45394   390 CONTINUE
45395  
45396 C...Shift momenta and recalculate energies.
45397       ESUMP=0.0D0
45398       ESUM=0.0D0
45399       PROD=0.0D0
45400       DO 420 IM=NBE(0)+1,NBE(MIN(10,MSTJ(52)+1))
45401         I=K(IM,1)
45402         ESUMP=ESUMP+P(I,4)
45403         DO 400 J=1,3
45404           P(I,J)=P(I,J)+P(IM,J)
45405   400   CONTINUE
45406         P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
45407         ESUM=ESUM+P(I,4)
45408         DO 410 J=1,3
45409           PROD=PROD+V(IM,J)*P(I,J)/P(I,4)
45410   410   CONTINUE
45411   420 CONTINUE
45412  
45413       PARJ(96)=0.0D0
45414       IF(MSTJ(54).NE.0.AND.PROD.NE.0.0D0) THEN
45415   430   ALPHA=(ESUMP-ESUM)/PROD
45416         PARJ(96)=PARJ(96)+ALPHA
45417         PROD=0.0D0
45418         ESUM=0.0D0
45419         DO 460 IM=NBE(0)+1,NBE(MIN(10,MSTJ(52)+1))
45420           I=K(IM,1)
45421           DO 440 J=1,3
45422             P(I,J)=P(I,J)+ALPHA*V(IM,J)
45423   440     CONTINUE
45424           P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
45425           ESUM=ESUM+P(I,4)
45426           DO 450 J=1,3
45427             PROD=PROD+V(IM,J)*P(I,J)/P(I,4)
45428   450     CONTINUE
45429   460   CONTINUE
45430         IF(PROD.NE.0.0D0.AND.ABS(ESUMP-ESUM)/PECM.GT.0.00001D0)
45431      &  GOTO 430
45432       ENDIF
45433  
45434 C...Rescale all momenta for energy conservation.
45435       PES=0D0
45436       PQS=0D0
45437       DO 470 I=1,N
45438         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 470
45439         PES=PES+P(I,4)
45440         PQS=PQS+P(I,5)**2/P(I,4)
45441   470 CONTINUE
45442       PARJ(95)=PES-PECM
45443       FAC=(PECM-PQS)/(PES-PQS)
45444       DO 490 I=1,N
45445         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 490
45446         DO 480 J=1,3
45447           P(I,J)=FAC*P(I,J)
45448   480   CONTINUE
45449         P(I,4)=SQRT(P(I,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
45450   490 CONTINUE
45451  
45452 C...Boost back to correct reference frame.
45453   500 CALL PYROBO(0,0,0D0,0D0,DPS(1)/DPS(4),DPS(2)/DPS(4),DPS(3)/DPS(4))
45454       DO 510 I=1,N
45455         IF(K(I,1).LT.0) K(I,1)=-K(I,1)
45456   510 CONTINUE
45457  
45458       RETURN
45459       END
45460  
45461 C*********************************************************************
45462  
45463 C...PYBESQ
45464 C...Calculates the momentum shift in a system of two particles assuming
45465 C...the relative momentum squared should be shifted to Q2NEW. NI is the
45466 C...last position occupied in /PYJETS/.
45467  
45468       SUBROUTINE PYBESQ(I1,I2,NI,Q2OLD,Q2NEW)
45469  
45470 C...Double precision and integer declarations.
45471       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45472       IMPLICIT INTEGER(I-N)
45473       INTEGER PYK,PYCHGE,PYCOMP
45474       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
45475 C...Commonblocks.
45476       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
45477       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45478       SAVE /PYJETS/,/PYDAT1/
45479 C...Local arrays and data.
45480       DIMENSION DP(5)
45481       SAVE HC1
45482  
45483       IF(MSTJ(55).EQ.0) THEN
45484         DQ2=Q2NEW-Q2OLD
45485         DP2=(P(I1,1)-P(I2,1))**2+(P(I1,2)-P(I2,2))**2+
45486      &  (P(I1,3)-P(I2,3))**2
45487         DP12=P(I1,1)**2+P(I1,2)**2+P(I1,3)**2
45488      &  -P(I2,1)**2-P(I2,2)**2-P(I2,3)**2
45489         SE=P(I1,4)+P(I2,4)
45490         DE=P(I1,4)-P(I2,4)
45491         DQ2SE=DQ2+SE**2
45492         DA=SE*DE*DP12-DP2*DQ2SE
45493         DB=DP2*DQ2SE-DP12**2
45494         HA=(DA+SQRT(MAX(DA**2+DQ2*(DQ2+SE**2-DE**2)*DB,0D0)))/(2D0*DB)
45495         DO 100 J=1,3
45496           PD=HA*(P(I1,J)-P(I2,J))
45497           P(NI+1,J)=PD
45498           P(NI+2,J)=-PD
45499   100   CONTINUE
45500         RETURN
45501       ENDIF
45502  
45503       K(NI+1,1)=1
45504       K(NI+2,1)=1
45505       DO 110 J=1,5
45506         P(NI+1,J)=P(I1,J)
45507         P(NI+2,J)=P(I2,J)
45508         DP(J)=P(I1,J)+P(I2,J)
45509   110 CONTINUE
45510  
45511 C...Boost to cms and rotate first particle to z-axis
45512       CALL PYROBO(NI+1,NI+2,0.0D0,0.0D0,
45513      &-DP(1)/DP(4),-DP(2)/DP(4),-DP(3)/DP(4))
45514       PHI=PYANGL(P(NI+1,1),P(NI+1,2))
45515       THE=PYANGL(P(NI+1,3),SQRT(P(NI+1,1)**2+P(NI+1,2)**2))
45516       S=Q2NEW+(P(I1,5)+P(I2,5))**2
45517       PZ=0.5D0*SQRT(Q2NEW*(S-(P(I1,5)-P(I2,5))**2)/S)
45518       P(NI+1,1)=0.0D0
45519       P(NI+1,2)=0.0D0
45520       P(NI+1,3)=PZ
45521       P(NI+1,4)=SQRT(PZ**2+P(I1,5)**2)
45522       P(NI+2,1)=0.0D0
45523       P(NI+2,2)=0.0D0
45524       P(NI+2,3)=-PZ
45525       P(NI+2,4)=SQRT(PZ**2+P(I2,5)**2)
45526       DP(4)=SQRT(DP(1)**2+DP(2)**2+DP(3)**2+S)
45527       CALL PYROBO(NI+1,NI+2,THE,PHI,
45528      &DP(1)/DP(4),DP(2)/DP(4),DP(3)/DP(4))
45529  
45530       DO 120 J=1,3
45531         P(NI+1,J)=P(NI+1,J)-P(I1,J)
45532         P(NI+2,J)=P(NI+2,J)-P(I2,J)
45533   120 CONTINUE
45534  
45535       RETURN
45536       END
45537  
45538 C*********************************************************************
45539  
45540 C...PYMASS
45541 C...Gives the mass of a particle/parton.
45542  
45543       FUNCTION PYMASS(KF)
45544  
45545 C...Double precision and integer declarations.
45546       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45547       IMPLICIT INTEGER(I-N)
45548       INTEGER PYK,PYCHGE,PYCOMP
45549 C...Commonblocks.
45550       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45551       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45552       SAVE /PYDAT1/,/PYDAT2/
45553  
45554 C...Reset variables. Compressed code. Special case for popcorn diquarks.
45555       PYMASS=0D0
45556       KFA=IABS(KF)
45557       KC=PYCOMP(KF)
45558       IF(KC.EQ.0) THEN
45559         MSTJ(93)=0
45560         RETURN
45561       ENDIF
45562  
45563 C...Guarantee use of constituent masses for internal checks.
45564       IF((MSTJ(93).EQ.1.OR.MSTJ(93).EQ.2).AND.
45565      &(KFA.LE.10.OR.MOD(KFA/10,10).EQ.0)) THEN
45566         PARF(106)=PMAS(6,1)
45567         PARF(107)=PMAS(7,1)
45568         PARF(108)=PMAS(8,1)
45569         IF(KFA.LE.10) THEN
45570           PYMASS=PARF(100+KFA)
45571           IF(MSTJ(93).EQ.2) PYMASS=MAX(0D0,PYMASS-PARF(121))
45572         ELSEIF(MSTJ(93).EQ.1) THEN
45573           PYMASS=PARF(100+MOD(KFA/1000,10))+PARF(100+MOD(KFA/100,10))
45574         ELSE
45575           PYMASS=MAX(0D0,PMAS(KC,1)-PARF(122)-2D0*PARF(112)/3D0)
45576         ENDIF
45577  
45578 C...Other masses can be read directly off table.
45579       ELSE
45580         PYMASS=PMAS(KC,1)
45581       ENDIF
45582  
45583 C...Optional mass broadening according to truncated Breit-Wigner
45584 C...(either in m or in m^2).
45585       IF(MSTJ(24).GE.1.AND.PMAS(KC,2).GT.1D-4) THEN
45586         IF(MSTJ(24).EQ.1.OR.(MSTJ(24).EQ.2.AND.KFA.GT.100)) THEN
45587           PYMASS=PYMASS+0.5D0*PMAS(KC,2)*TAN((2D0*PYR(0)-1D0)*
45588      &    ATAN(2D0*PMAS(KC,3)/PMAS(KC,2)))
45589         ELSE
45590           PM0=PYMASS
45591           PMLOW=ATAN((MAX(0D0,PM0-PMAS(KC,3))**2-PM0**2)/
45592      &    (PM0*PMAS(KC,2)))
45593           PMUPP=ATAN(((PM0+PMAS(KC,3))**2-PM0**2)/(PM0*PMAS(KC,2)))
45594           PYMASS=SQRT(MAX(0D0,PM0**2+PM0*PMAS(KC,2)*TAN(PMLOW+
45595      &    (PMUPP-PMLOW)*PYR(0))))
45596         ENDIF
45597       ENDIF
45598       MSTJ(93)=0
45599  
45600       RETURN
45601       END
45602  
45603 C*********************************************************************
45604  
45605 C...PYMRUN
45606 C...Gives the running, current-algebra mass of a d, u, s, c or b quark,
45607 C...for Higgs couplings. Everything else sent on to PYMASS.
45608  
45609       FUNCTION PYMRUN(KF,Q2)
45610  
45611 C...Double precision and integer declarations.
45612       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45613       IMPLICIT INTEGER(I-N)
45614       INTEGER PYK,PYCHGE,PYCOMP
45615 C...Commonblocks.
45616       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45617       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45618       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
45619       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/
45620  
45621 C...Most masses not handled here.
45622       KFA=IABS(KF)
45623       IF(KFA.EQ.0.OR.KFA.GT.5) THEN
45624         PYMRUN=PYMASS(KF)
45625 
45626 C...Current-algebra masses, but no Q2 dependence.
45627       ELSEIF(MSTP(37).NE.1.OR.MSTP(2).LE.0) THEN
45628         PYMRUN=PARF(90+KFA)
45629 
45630 C...Running current-algebra masses.
45631       ELSE
45632         AS=PYALPS(Q2)
45633         PYMRUN=PARF(90+KFA)*
45634      &  (LOG(MAX(4D0,PARP(37)**2*PARF(90+KFA)**2/PARU(117)**2))/
45635      &  LOG(MAX(4D0,Q2/PARU(117)**2)))**(12D0/(33D0-2D0*MSTU(118)))
45636       ENDIF
45637 
45638       RETURN
45639       END
45640  
45641 C*********************************************************************
45642  
45643 C...PYNAME
45644 C...Gives the particle/parton name as a character string.
45645  
45646       SUBROUTINE PYNAME(KF,CHAU)
45647  
45648 C...Double precision and integer declarations.
45649       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45650       IMPLICIT INTEGER(I-N)
45651       INTEGER PYK,PYCHGE,PYCOMP
45652 C...Commonblocks.
45653       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45654       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45655       COMMON/PYDAT4/CHAF(500,2)
45656       CHARACTER CHAF*16
45657       SAVE /PYDAT1/,/PYDAT2/,/PYDAT4/
45658 C...Local character variable.
45659       CHARACTER CHAU*16
45660  
45661 C...Read out code with distinction particle/antiparticle.
45662       CHAU=' '
45663       KC=PYCOMP(KF)
45664       IF(KC.NE.0) CHAU=CHAF(KC,(3-ISIGN(1,KF))/2)
45665  
45666  
45667       RETURN
45668       END
45669  
45670 C*********************************************************************
45671  
45672 C...PYCHGE
45673 C...Gives three times the charge for a particle/parton.
45674  
45675       FUNCTION PYCHGE(KF)
45676  
45677 C...Double precision and integer declarations.
45678       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45679       IMPLICIT INTEGER(I-N)
45680       INTEGER PYK,PYCHGE,PYCOMP
45681 C...Commonblocks.
45682       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45683       SAVE /PYDAT2/
45684  
45685 C...Read out charge and change sign for antiparticle.
45686       PYCHGE=0
45687       KC=PYCOMP(KF)
45688       IF(KC.NE.0) PYCHGE=KCHG(KC,1)*ISIGN(1,KF)
45689  
45690       RETURN
45691       END
45692  
45693 C*********************************************************************
45694  
45695 C...PYCOMP
45696 C...Compress the standard KF codes for use in mass and decay arrays;
45697 C...also checks whether a given code actually is defined.
45698  
45699       FUNCTION PYCOMP(KF)
45700  
45701 C...Double precision and integer declarations.
45702       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45703       IMPLICIT INTEGER(I-N)
45704       INTEGER PYK,PYCHGE,PYCOMP
45705 C...Commonblocks.
45706       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45707       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45708       SAVE /PYDAT1/,/PYDAT2/
45709 C...Local arrays and saved data.
45710       DIMENSION KFORD(100:500),KCORD(101:500)
45711       SAVE KFORD,KCORD,NFORD,KFLAST,KCLAST
45712  
45713 C...Whenever necessary reorder codes for faster search.
45714       IF(MSTU(20).EQ.0) THEN
45715         NFORD=100
45716         KFORD(100)=0
45717         DO 120 I=101,500
45718           KFA=KCHG(I,4)
45719           IF(KFA.LE.100) GOTO 120
45720           NFORD=NFORD+1
45721           DO 100 I1=NFORD-1,0,-1
45722             IF(KFA.GE.KFORD(I1)) GOTO 110
45723             KFORD(I1+1)=KFORD(I1)
45724             KCORD(I1+1)=KCORD(I1)
45725   100     CONTINUE
45726   110     KFORD(I1+1)=KFA
45727           KCORD(I1+1)=I
45728   120   CONTINUE
45729         MSTU(20)=1
45730         KFLAST=0
45731         KCLAST=0
45732       ENDIF
45733  
45734 C...Fast action if same code as in latest call.
45735       IF(KF.EQ.KFLAST) THEN
45736         PYCOMP=KCLAST
45737         RETURN
45738       ENDIF
45739  
45740 C...Starting values. Remove internal diquark flags.
45741       PYCOMP=0
45742       KFA=IABS(KF)
45743       IF(MOD(KFA/10,10).EQ.0.AND.KFA.LT.100000
45744      &     .AND.MOD(KFA/1000,10).GT.0) KFA=MOD(KFA,10000)
45745  
45746 C...Simple cases: direct translation.
45747       IF(KFA.GT.KFORD(NFORD)) THEN
45748       ELSEIF(KFA.LE.100) THEN
45749         PYCOMP=KFA
45750  
45751 C...Else binary search.
45752       ELSE
45753         IMIN=100
45754         IMAX=NFORD+1
45755   130   IAVG=(IMIN+IMAX)/2
45756         IF(KFORD(IAVG).GT.KFA) THEN
45757           IMAX=IAVG
45758           IF(IMAX.GT.IMIN+1) GOTO 130
45759         ELSEIF(KFORD(IAVG).LT.KFA) THEN
45760           IMIN=IAVG
45761           IF(IMAX.GT.IMIN+1) GOTO 130
45762         ELSE
45763           PYCOMP=KCORD(IAVG)
45764         ENDIF
45765       ENDIF
45766  
45767 C...Check if antiparticle allowed.
45768       IF(PYCOMP.NE.0.AND.KF.LT.0) THEN
45769         IF(KCHG(PYCOMP,3).EQ.0) PYCOMP=0
45770       ENDIF
45771  
45772 C...Save codes for possible future fast action.
45773       KFLAST=KF
45774       KCLAST=PYCOMP
45775  
45776       RETURN
45777       END
45778  
45779 C*********************************************************************
45780  
45781 C...PYERRM
45782 C...Informs user of errors in program execution.
45783  
45784       SUBROUTINE PYERRM(MERR,CHMESS)
45785  
45786 C...Double precision and integer declarations.
45787       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45788       IMPLICIT INTEGER(I-N)
45789       INTEGER PYK,PYCHGE,PYCOMP
45790 C...Commonblocks.
45791       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
45792       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45793       SAVE /PYJETS/,/PYDAT1/
45794 C...Local character variable.
45795       CHARACTER CHMESS*(*)
45796  
45797 C...Write first few warnings, then be silent.
45798       IF(MERR.LE.10) THEN
45799         MSTU(27)=MSTU(27)+1
45800         MSTU(28)=MERR
45801         IF(MSTU(25).EQ.1.AND.MSTU(27).LE.MSTU(26)) WRITE(MSTU(11),5000)
45802      &  MERR,MSTU(31),CHMESS
45803  
45804 C...Write first few errors, then be silent or stop program.
45805       ELSEIF(MERR.LE.20) THEN
45806         MSTU(23)=MSTU(23)+1
45807         MSTU(24)=MERR-10
45808         IF(MSTU(21).GE.1.AND.MSTU(23).LE.MSTU(22)) WRITE(MSTU(11),5100)
45809      &  MERR-10,MSTU(31),CHMESS
45810         IF(MSTU(21).GE.2.AND.MSTU(23).GT.MSTU(22)) THEN
45811           WRITE(MSTU(11),5100) MERR-10,MSTU(31),CHMESS
45812           WRITE(MSTU(11),5200)
45813           IF(MERR.NE.17) CALL PYLIST(2)
45814           STOP
45815         ENDIF
45816  
45817 C...Stop program in case of irreparable error.
45818       ELSE
45819         WRITE(MSTU(11),5300) MERR-20,MSTU(31),CHMESS
45820         STOP
45821       ENDIF
45822  
45823 C...Formats for output.
45824  5000 FORMAT(/5X,'Advisory warning type',I2,' given after',I9,
45825      &' PYEXEC calls:'/5X,A)
45826  5100 FORMAT(/5X,'Error type',I2,' has occured after',I9,
45827      &' PYEXEC calls:'/5X,A)
45828  5200 FORMAT(5X,'Execution will be stopped after listing of last ',
45829      &'event!')
45830  5300 FORMAT(/5X,'Fatal error type',I2,' has occured after',I9,
45831      &' PYEXEC calls:'/5X,A/5X,'Execution will now be stopped!')
45832  
45833       RETURN
45834       END
45835  
45836 C*********************************************************************
45837  
45838 C...PYALEM
45839 C...Calculates the running alpha_electromagnetic.
45840  
45841       FUNCTION PYALEM(Q2)
45842  
45843 C...Double precision and integer declarations.
45844       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45845       IMPLICIT INTEGER(I-N)
45846       INTEGER PYK,PYCHGE,PYCOMP
45847 C...Commonblocks.
45848       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45849       SAVE /PYDAT1/
45850  
45851 C...Calculate real part of photon vacuum polarization.
45852 C...For leptons simplify by using asymptotic (Q^2 >> m^2) expressions.
45853 C...For hadrons use parametrization of H. Burkhardt et al.
45854 C...See R. Kleiss et al, CERN 89-08, vol. 3, pp. 129-131.
45855       AEMPI=PARU(101)/(3D0*PARU(1))
45856       IF(MSTU(101).LE.0.OR.Q2.LT.2D-6) THEN
45857         RPIGG=0D0
45858       ELSEIF(MSTU(101).EQ.2.AND.Q2.LT.PARU(104)) THEN
45859         RPIGG=0D0
45860       ELSEIF(MSTU(101).EQ.2) THEN
45861         RPIGG=1D0-PARU(101)/PARU(103)
45862       ELSEIF(Q2.LT.0.09D0) THEN
45863         RPIGG=AEMPI*(13.4916D0+LOG(Q2))+0.00835D0*LOG(1D0+Q2)
45864       ELSEIF(Q2.LT.9D0) THEN
45865         RPIGG=AEMPI*(16.3200D0+2D0*LOG(Q2))+
45866      &  0.00238D0*LOG(1D0+3.927D0*Q2)
45867       ELSEIF(Q2.LT.1D4) THEN
45868         RPIGG=AEMPI*(13.4955D0+3D0*LOG(Q2))+0.00165D0+
45869      &  0.00299D0*LOG(1D0+Q2)
45870       ELSE
45871         RPIGG=AEMPI*(13.4955D0+3D0*LOG(Q2))+0.00221D0+
45872      &  0.00293D0*LOG(1D0+Q2)
45873       ENDIF
45874  
45875 C...Calculate running alpha_em.
45876       PYALEM=PARU(101)/(1D0-RPIGG)
45877       PARU(108)=PYALEM
45878  
45879       RETURN
45880       END
45881  
45882 C*********************************************************************
45883  
45884 C...PYALPS
45885 C...Gives the value of alpha_strong.
45886  
45887       FUNCTION PYALPS(Q2)
45888  
45889 C...Double precision and integer declarations.
45890       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45891       IMPLICIT INTEGER(I-N)
45892       INTEGER PYK,PYCHGE,PYCOMP
45893 C...Commonblocks.
45894       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45895       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
45896       SAVE /PYDAT1/,/PYDAT2/
45897  
45898 C...Constant alpha_strong trivial. Pick artificial Lambda.
45899       IF(MSTU(111).LE.0) THEN
45900         PYALPS=PARU(111)
45901         MSTU(118)=MSTU(112)
45902         PARU(117)=0.2D0
45903         IF(Q2.GT.0.04D0) PARU(117)=SQRT(Q2)*EXP(-6D0*PARU(1)/
45904      &  ((33D0-2D0*MSTU(112))*PARU(111)))
45905         PARU(118)=PARU(111)
45906         RETURN
45907       ENDIF
45908  
45909 C...Find effective Q2, number of flavours and Lambda.
45910       Q2EFF=Q2
45911       IF(MSTU(115).GE.2) Q2EFF=MAX(Q2,PARU(114))
45912       NF=MSTU(112)
45913       ALAM2=PARU(112)**2
45914   100 IF(NF.GT.MAX(2,MSTU(113))) THEN
45915         Q2THR=PARU(113)*PMAS(NF,1)**2
45916         IF(Q2EFF.LT.Q2THR) THEN
45917           NF=NF-1
45918           ALAM2=ALAM2*(Q2THR/ALAM2)**(2D0/(33D0-2D0*NF))
45919           GOTO 100
45920         ENDIF
45921       ENDIF
45922   110 IF(NF.LT.MIN(8,MSTU(114))) THEN
45923         Q2THR=PARU(113)*PMAS(NF+1,1)**2
45924         IF(Q2EFF.GT.Q2THR) THEN
45925           NF=NF+1
45926           ALAM2=ALAM2*(ALAM2/Q2THR)**(2D0/(33D0-2D0*NF))
45927           GOTO 110
45928         ENDIF
45929       ENDIF
45930       IF(MSTU(115).EQ.1) Q2EFF=Q2EFF+ALAM2
45931       PARU(117)=SQRT(ALAM2)
45932  
45933 C...Evaluate first or second order alpha_strong.
45934       B0=(33D0-2D0*NF)/6D0
45935       ALGQ=LOG(MAX(1.0001D0,Q2EFF/ALAM2))
45936       IF(MSTU(111).EQ.1) THEN
45937         PYALPS=MIN(PARU(115),PARU(2)/(B0*ALGQ))
45938       ELSE
45939         B1=(153D0-19D0*NF)/6D0
45940         PYALPS=MIN(PARU(115),PARU(2)/(B0*ALGQ)*(1D0-B1*LOG(ALGQ)/
45941      &  (B0**2*ALGQ)))
45942       ENDIF
45943       MSTU(118)=NF
45944       PARU(118)=PYALPS
45945  
45946       RETURN
45947       END
45948  
45949 C*********************************************************************
45950  
45951 C...PYANGL
45952 C...Reconstructs an angle from given x and y coordinates.
45953  
45954       FUNCTION PYANGL(X,Y)
45955  
45956 C...Double precision and integer declarations.
45957       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45958       IMPLICIT INTEGER(I-N)
45959       INTEGER PYK,PYCHGE,PYCOMP
45960 C...Commonblocks.
45961       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
45962       SAVE /PYDAT1/
45963  
45964       PYANGL=0D0
45965       R=SQRT(X**2+Y**2)
45966       IF(R.LT.1D-20) RETURN
45967       IF(ABS(X)/R.LT.0.8D0) THEN
45968         PYANGL=SIGN(ACOS(X/R),Y)
45969       ELSE
45970         PYANGL=ASIN(Y/R)
45971         IF(X.LT.0D0.AND.PYANGL.GE.0D0) THEN
45972           PYANGL=PARU(1)-PYANGL
45973         ELSEIF(X.LT.0D0) THEN
45974           PYANGL=-PARU(1)-PYANGL
45975         ENDIF
45976       ENDIF
45977  
45978       RETURN
45979       END
45980  
45981 C*********************************************************************
45982  
45983 C...PYR
45984 C...Generates random numbers uniformly distributed between
45985 C...0 and 1, excluding the endpoints.
45986  
45987       FUNCTION PYR(IDUMMY)
45988  
45989 C...Double precision and integer declarations.
45990       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
45991       IMPLICIT INTEGER(I-N)
45992       INTEGER PYK,PYCHGE,PYCOMP
45993 C...Commonblocks.
45994       COMMON/PYDATR/MRPY(6),RRPY(100)
45995       SAVE /PYDATR/
45996 C...Equivalence between commonblock and local variables.
45997       EQUIVALENCE (MRPY1,MRPY(1)),(MRPY2,MRPY(2)),(MRPY3,MRPY(3)),
45998      &(MRPY4,MRPY(4)),(MRPY5,MRPY(5)),(MRPY6,MRPY(6)),
45999      &(RRPY98,RRPY(98)),(RRPY99,RRPY(99)),(RRPY00,RRPY(100))
46000  
46001 C...Initialize generation from given seed.
46002       IF(MRPY2.EQ.0) THEN
46003         IJ=MOD(MRPY1/30082,31329)
46004         KL=MOD(MRPY1,30082)
46005         I=MOD(IJ/177,177)+2
46006         J=MOD(IJ,177)+2
46007         K=MOD(KL/169,178)+1
46008         L=MOD(KL,169)
46009         DO 110 II=1,97
46010           S=0D0
46011           T=0.5D0
46012           DO 100 JJ=1,48
46013             M=MOD(MOD(I*J,179)*K,179)
46014             I=J
46015             J=K
46016             K=M
46017             L=MOD(53*L+1,169)
46018             IF(MOD(L*M,64).GE.32) S=S+T
46019             T=0.5D0*T
46020   100     CONTINUE
46021           RRPY(II)=S
46022   110   CONTINUE
46023         TWOM24=1D0
46024         DO 120 I24=1,24
46025           TWOM24=0.5D0*TWOM24
46026   120   CONTINUE
46027         RRPY98=362436D0*TWOM24
46028         RRPY99=7654321D0*TWOM24
46029         RRPY00=16777213D0*TWOM24
46030         MRPY2=1
46031         MRPY3=0
46032         MRPY4=97
46033         MRPY5=33
46034       ENDIF
46035  
46036 C...Generate next random number.
46037   130 RUNI=RRPY(MRPY4)-RRPY(MRPY5)
46038       IF(RUNI.LT.0D0) RUNI=RUNI+1D0
46039       RRPY(MRPY4)=RUNI
46040       MRPY4=MRPY4-1
46041       IF(MRPY4.EQ.0) MRPY4=97
46042       MRPY5=MRPY5-1
46043       IF(MRPY5.EQ.0) MRPY5=97
46044       RRPY98=RRPY98-RRPY99
46045       IF(RRPY98.LT.0D0) RRPY98=RRPY98+RRPY00
46046       RUNI=RUNI-RRPY98
46047       IF(RUNI.LT.0D0) RUNI=RUNI+1D0
46048       IF(RUNI.LE.0D0.OR.RUNI.GE.1D0) GOTO 130
46049  
46050 C...Update counters. Random number to output.
46051       MRPY3=MRPY3+1
46052       IF(MRPY3.EQ.1000000000) THEN
46053         MRPY2=MRPY2+1
46054         MRPY3=0
46055       ENDIF
46056       PYR=RUNI
46057  
46058       RETURN
46059       END
46060  
46061 C*********************************************************************
46062  
46063 C...PYRGET
46064 C...Dumps the state of the random number generator on a file
46065 C...for subsequent startup from this state onwards.
46066  
46067       SUBROUTINE PYRGET(LFN,MOVE)
46068  
46069 C...Double precision and integer declarations.
46070       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46071       IMPLICIT INTEGER(I-N)
46072       INTEGER PYK,PYCHGE,PYCOMP
46073 C...Commonblocks.
46074       COMMON/PYDATR/MRPY(6),RRPY(100)
46075       SAVE /PYDATR/
46076 C...Local character variable.
46077       CHARACTER CHERR*8
46078  
46079 C...Backspace required number of records (or as many as there are).
46080       IF(MOVE.LT.0) THEN
46081         NBCK=MIN(MRPY(6),-MOVE)
46082         DO 100 IBCK=1,NBCK
46083           BACKSPACE(LFN,ERR=110,IOSTAT=IERR)
46084   100   CONTINUE
46085         MRPY(6)=MRPY(6)-NBCK
46086       ENDIF
46087  
46088 C...Unformatted write on unit LFN.
46089       WRITE(LFN,ERR=110,IOSTAT=IERR) (MRPY(I1),I1=1,5),
46090      &(RRPY(I2),I2=1,100)
46091       MRPY(6)=MRPY(6)+1
46092       RETURN
46093  
46094 C...Write error.
46095   110 WRITE(CHERR,'(I8)') IERR
46096       CALL PYERRM(18,'(PYRGET:) error when accessing file, IOSTAT ='//
46097      &CHERR)
46098  
46099       RETURN
46100       END
46101  
46102 C*********************************************************************
46103  
46104 C...PYRSET
46105 C...Reads a state of the random number generator from a file
46106 C...for subsequent generation from this state onwards.
46107  
46108       SUBROUTINE PYRSET(LFN,MOVE)
46109  
46110 C...Double precision and integer declarations.
46111       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46112       IMPLICIT INTEGER(I-N)
46113       INTEGER PYK,PYCHGE,PYCOMP
46114 C...Commonblocks.
46115       COMMON/PYDATR/MRPY(6),RRPY(100)
46116       SAVE /PYDATR/
46117 C...Local character variable.
46118       CHARACTER CHERR*8
46119  
46120 C...Backspace required number of records (or as many as there are).
46121       IF(MOVE.LT.0) THEN
46122         NBCK=MIN(MRPY(6),-MOVE)
46123         DO 100 IBCK=1,NBCK
46124           BACKSPACE(LFN,ERR=120,IOSTAT=IERR)
46125   100   CONTINUE
46126         MRPY(6)=MRPY(6)-NBCK
46127       ENDIF
46128  
46129 C...Unformatted read from unit LFN.
46130       NFOR=1+MAX(0,MOVE)
46131       DO 110 IFOR=1,NFOR
46132         READ(LFN,ERR=120,IOSTAT=IERR) (MRPY(I1),I1=1,5),
46133      &  (RRPY(I2),I2=1,100)
46134   110 CONTINUE
46135       MRPY(6)=MRPY(6)+NFOR
46136       RETURN
46137  
46138 C...Write error.
46139   120 WRITE(CHERR,'(I8)') IERR
46140       CALL PYERRM(18,'(PYRSET:) error when accessing file, IOSTAT ='//
46141      &CHERR)
46142  
46143       RETURN
46144       END
46145  
46146 C*********************************************************************
46147  
46148 C...PYROBO
46149 C...Performs rotations and boosts.
46150  
46151       SUBROUTINE PYROBO(IMI,IMA,THE,PHI,BEX,BEY,BEZ)
46152  
46153 C...Double precision and integer declarations.
46154       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46155       IMPLICIT INTEGER(I-N)
46156       INTEGER PYK,PYCHGE,PYCOMP
46157 C...Commonblocks.
46158       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
46159       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
46160       SAVE /PYJETS/,/PYDAT1/
46161 C...Local arrays.
46162       DIMENSION ROT(3,3),PR(3),VR(3),DP(4),DV(4)
46163  
46164 C...Find and check range of rotation/boost.
46165       IMIN=IMI
46166       IF(IMIN.LE.0) IMIN=1
46167       IF(MSTU(1).GT.0) IMIN=MSTU(1)
46168       IMAX=IMA
46169       IF(IMAX.LE.0) IMAX=N
46170       IF(MSTU(2).GT.0) IMAX=MSTU(2)
46171       IF(IMIN.GT.MSTU(4).OR.IMAX.GT.MSTU(4)) THEN
46172         CALL PYERRM(11,'(PYROBO:) range outside PYJETS memory')
46173         RETURN
46174       ENDIF
46175  
46176 C...Optional resetting of V (when not set before.)
46177       IF(MSTU(33).NE.0) THEN
46178         DO 110 I=MIN(IMIN,MSTU(4)),MIN(IMAX,MSTU(4))
46179           DO 100 J=1,5
46180             V(I,J)=0D0
46181   100     CONTINUE
46182   110   CONTINUE
46183         MSTU(33)=0
46184       ENDIF
46185  
46186 C...Rotate, typically from z axis to direction (theta,phi).
46187       IF(THE**2+PHI**2.GT.1D-20) THEN
46188         ROT(1,1)=COS(THE)*COS(PHI)
46189         ROT(1,2)=-SIN(PHI)
46190         ROT(1,3)=SIN(THE)*COS(PHI)
46191         ROT(2,1)=COS(THE)*SIN(PHI)
46192         ROT(2,2)=COS(PHI)
46193         ROT(2,3)=SIN(THE)*SIN(PHI)
46194         ROT(3,1)=-SIN(THE)
46195         ROT(3,2)=0D0
46196         ROT(3,3)=COS(THE)
46197         DO 140 I=IMIN,IMAX
46198           IF(K(I,1).LE.0) GOTO 140
46199           DO 120 J=1,3
46200             PR(J)=P(I,J)
46201             VR(J)=V(I,J)
46202   120     CONTINUE
46203           DO 130 J=1,3
46204             P(I,J)=ROT(J,1)*PR(1)+ROT(J,2)*PR(2)+ROT(J,3)*PR(3)
46205             V(I,J)=ROT(J,1)*VR(1)+ROT(J,2)*VR(2)+ROT(J,3)*VR(3)
46206   130     CONTINUE
46207   140   CONTINUE
46208       ENDIF
46209  
46210 C...Boost, typically from rest to momentum/energy=beta.
46211       IF(BEX**2+BEY**2+BEZ**2.GT.1D-20) THEN
46212         DBX=BEX
46213         DBY=BEY
46214         DBZ=BEZ
46215         DB=SQRT(DBX**2+DBY**2+DBZ**2)
46216         EPS1=1D0-1D-12
46217         IF(DB.GT.EPS1) THEN
46218 C...Rescale boost vector if too close to unity.
46219           CALL PYERRM(3,'(PYROBO:) boost vector too large')
46220           DBX=DBX*(EPS1/DB)
46221           DBY=DBY*(EPS1/DB)
46222           DBZ=DBZ*(EPS1/DB)
46223           DB=EPS1
46224         ENDIF
46225         DGA=1D0/SQRT(1D0-DB**2)
46226         DO 160 I=IMIN,IMAX
46227           IF(K(I,1).LE.0) GOTO 160
46228           DO 150 J=1,4
46229             DP(J)=P(I,J)
46230             DV(J)=V(I,J)
46231   150     CONTINUE
46232           DBP=DBX*DP(1)+DBY*DP(2)+DBZ*DP(3)
46233           DGABP=DGA*(DGA*DBP/(1D0+DGA)+DP(4))
46234           P(I,1)=DP(1)+DGABP*DBX
46235           P(I,2)=DP(2)+DGABP*DBY
46236           P(I,3)=DP(3)+DGABP*DBZ
46237           P(I,4)=DGA*(DP(4)+DBP)
46238           DBV=DBX*DV(1)+DBY*DV(2)+DBZ*DV(3)
46239           DGABV=DGA*(DGA*DBV/(1D0+DGA)+DV(4))
46240           V(I,1)=DV(1)+DGABV*DBX
46241           V(I,2)=DV(2)+DGABV*DBY
46242           V(I,3)=DV(3)+DGABV*DBZ
46243           V(I,4)=DGA*(DV(4)+DBV)
46244   160   CONTINUE
46245       ENDIF
46246  
46247       RETURN
46248       END
46249  
46250 C*********************************************************************
46251  
46252 C...PYEDIT
46253 C...Performs global manipulations on the event record, in particular
46254 C...to exclude unstable or undetectable partons/particles.
46255  
46256       SUBROUTINE PYEDIT(MEDIT)
46257  
46258 C...Double precision and integer declarations.
46259       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46260       IMPLICIT INTEGER(I-N)
46261       INTEGER PYK,PYCHGE,PYCOMP
46262 C...Commonblocks.
46263       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
46264       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
46265       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
46266       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
46267 C...Local arrays.
46268       DIMENSION NS(2),PTS(2),PLS(2)
46269  
46270 C...Remove unwanted partons/particles.
46271       IF((MEDIT.GE.0.AND.MEDIT.LE.3).OR.MEDIT.EQ.5) THEN
46272         IMAX=N
46273         IF(MSTU(2).GT.0) IMAX=MSTU(2)
46274         I1=MAX(1,MSTU(1))-1
46275         DO 110 I=MAX(1,MSTU(1)),IMAX
46276           IF(K(I,1).EQ.0.OR.K(I,1).GT.20) GOTO 110
46277           IF(MEDIT.EQ.1) THEN
46278             IF(K(I,1).GT.10) GOTO 110
46279           ELSEIF(MEDIT.EQ.2) THEN
46280             IF(K(I,1).GT.10) GOTO 110
46281             KC=PYCOMP(K(I,2))
46282             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.KC.EQ.18)
46283      &      GOTO 110
46284           ELSEIF(MEDIT.EQ.3) THEN
46285             IF(K(I,1).GT.10) GOTO 110
46286             KC=PYCOMP(K(I,2))
46287             IF(KC.EQ.0) GOTO 110
46288             IF(KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0) GOTO 110
46289           ELSEIF(MEDIT.EQ.5) THEN
46290             IF(K(I,1).EQ.13.OR.K(I,1).EQ.14) GOTO 110
46291             KC=PYCOMP(K(I,2))
46292             IF(KC.EQ.0) GOTO 110
46293             IF(K(I,1).GE.11.AND.KCHG(KC,2).EQ.0) GOTO 110
46294           ENDIF
46295  
46296 C...Pack remaining partons/particles. Origin no longer known.
46297           I1=I1+1
46298           DO 100 J=1,5
46299             K(I1,J)=K(I,J)
46300             P(I1,J)=P(I,J)
46301             V(I1,J)=V(I,J)
46302   100     CONTINUE
46303           K(I1,3)=0
46304   110   CONTINUE
46305         IF(I1.LT.N) MSTU(3)=0
46306         IF(I1.LT.N) MSTU(70)=0
46307         N=I1
46308  
46309 C...Selective removal of class of entries. New position of retained.
46310       ELSEIF(MEDIT.GE.11.AND.MEDIT.LE.15) THEN
46311         I1=0
46312         DO 120 I=1,N
46313           K(I,3)=MOD(K(I,3),MSTU(5))
46314           IF(MEDIT.EQ.11.AND.K(I,1).LT.0) GOTO 120
46315           IF(MEDIT.EQ.12.AND.K(I,1).EQ.0) GOTO 120
46316           IF(MEDIT.EQ.13.AND.(K(I,1).EQ.11.OR.K(I,1).EQ.12.OR.
46317      &    K(I,1).EQ.15).AND.K(I,2).NE.94) GOTO 120
46318           IF(MEDIT.EQ.14.AND.(K(I,1).EQ.13.OR.K(I,1).EQ.14.OR.
46319      &    K(I,2).EQ.94)) GOTO 120
46320           IF(MEDIT.EQ.15.AND.K(I,1).GE.21) GOTO 120
46321           I1=I1+1
46322           K(I,3)=K(I,3)+MSTU(5)*I1
46323   120   CONTINUE
46324  
46325 C...Find new event history information and replace old.
46326         DO 140 I=1,N
46327           IF(K(I,1).LE.0.OR.K(I,1).GT.20.OR.K(I,3)/MSTU(5).EQ.0)
46328      &    GOTO 140
46329           ID=I
46330   130     IM=MOD(K(ID,3),MSTU(5))
46331           IF(MEDIT.EQ.13.AND.IM.GT.0.AND.IM.LE.N) THEN
46332             IF((K(IM,1).EQ.11.OR.K(IM,1).EQ.12.OR.K(IM,1).EQ.15).AND.
46333      &      K(IM,2).NE.94) THEN
46334               ID=IM
46335               GOTO 130
46336             ENDIF
46337           ELSEIF(MEDIT.EQ.14.AND.IM.GT.0.AND.IM.LE.N) THEN
46338             IF(K(IM,1).EQ.13.OR.K(IM,1).EQ.14.OR.K(IM,2).EQ.94) THEN
46339               ID=IM
46340               GOTO 130
46341             ENDIF
46342           ENDIF
46343           K(I,3)=MSTU(5)*(K(I,3)/MSTU(5))
46344           IF(IM.NE.0) K(I,3)=K(I,3)+K(IM,3)/MSTU(5)
46345           IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) THEN
46346             IF(K(I,4).GT.0.AND.K(I,4).LE.MSTU(4)) K(I,4)=
46347      &      K(K(I,4),3)/MSTU(5)
46348             IF(K(I,5).GT.0.AND.K(I,5).LE.MSTU(4)) K(I,5)=
46349      &      K(K(I,5),3)/MSTU(5)
46350           ELSE
46351             KCM=MOD(K(I,4)/MSTU(5),MSTU(5))
46352             IF(KCM.GT.0.AND.KCM.LE.MSTU(4)) KCM=K(KCM,3)/MSTU(5)
46353             KCD=MOD(K(I,4),MSTU(5))
46354             IF(KCD.GT.0.AND.KCD.LE.MSTU(4)) KCD=K(KCD,3)/MSTU(5)
46355             K(I,4)=MSTU(5)**2*(K(I,4)/MSTU(5)**2)+MSTU(5)*KCM+KCD
46356             KCM=MOD(K(I,5)/MSTU(5),MSTU(5))
46357             IF(KCM.GT.0.AND.KCM.LE.MSTU(4)) KCM=K(KCM,3)/MSTU(5)
46358             KCD=MOD(K(I,5),MSTU(5))
46359             IF(KCD.GT.0.AND.KCD.LE.MSTU(4)) KCD=K(KCD,3)/MSTU(5)
46360             K(I,5)=MSTU(5)**2*(K(I,5)/MSTU(5)**2)+MSTU(5)*KCM+KCD
46361           ENDIF
46362   140   CONTINUE
46363  
46364 C...Pack remaining entries.
46365         I1=0
46366         MSTU90=MSTU(90)
46367         MSTU(90)=0
46368         DO 170 I=1,N
46369           IF(K(I,3)/MSTU(5).EQ.0) GOTO 170
46370           I1=I1+1
46371           DO 150 J=1,5
46372             K(I1,J)=K(I,J)
46373             P(I1,J)=P(I,J)
46374             V(I1,J)=V(I,J)
46375   150     CONTINUE
46376           K(I1,3)=MOD(K(I1,3),MSTU(5))
46377           DO 160 IZ=1,MSTU90
46378             IF(I.EQ.MSTU(90+IZ)) THEN
46379               MSTU(90)=MSTU(90)+1
46380               MSTU(90+MSTU(90))=I1
46381               PARU(90+MSTU(90))=PARU(90+IZ)
46382             ENDIF
46383   160     CONTINUE
46384   170   CONTINUE
46385         IF(I1.LT.N) MSTU(3)=0
46386         IF(I1.LT.N) MSTU(70)=0
46387         N=I1
46388  
46389 C...Fill in some missing daughter pointers (lost in colour flow).
46390       ELSEIF(MEDIT.EQ.16) THEN
46391         DO 220 I=1,N
46392           IF(K(I,1).LE.10.OR.K(I,1).GT.20) GOTO 220
46393           IF(K(I,4).NE.0.OR.K(I,5).NE.0) GOTO 220
46394 C...Find daughters who point to mother.
46395           DO 180 I1=I+1,N
46396             IF(K(I1,3).NE.I) THEN
46397             ELSEIF(K(I,4).EQ.0) THEN
46398               K(I,4)=I1
46399             ELSE
46400               K(I,5)=I1
46401             ENDIF
46402   180     CONTINUE
46403           IF(K(I,5).EQ.0) K(I,5)=K(I,4)
46404           IF(K(I,4).NE.0) GOTO 220
46405 C...Find daughters who point to documentation version of mother.
46406           IM=K(I,3)
46407           IF(IM.LE.0.OR.IM.GE.I) GOTO 220
46408           IF(K(IM,1).LE.20.OR.K(IM,1).GT.30) GOTO 220
46409           IF(K(IM,2).NE.K(I,2).OR.ABS(P(IM,5)-P(I,5)).GT.1D-2) GOTO 220
46410           DO 190 I1=I+1,N
46411             IF(K(I1,3).NE.IM) THEN
46412             ELSEIF(K(I,4).EQ.0) THEN
46413               K(I,4)=I1
46414             ELSE
46415               K(I,5)=I1
46416             ENDIF
46417   190     CONTINUE
46418           IF(K(I,5).EQ.0) K(I,5)=K(I,4)
46419           IF(K(I,4).NE.0) GOTO 220
46420 C...Find daughters who point to documentation daughters who,
46421 C...in their turn, point to documentation mother.
46422           ID1=IM
46423           ID2=IM
46424           DO 200 I1=IM+1,I-1
46425             IF(K(I1,3).EQ.IM.AND.K(I1,1).GT.20.AND.K(I1,1).LE.30) THEN
46426               ID2=I1
46427               IF(ID1.EQ.IM) ID1=I1
46428             ENDIF
46429   200     CONTINUE
46430           DO 210 I1=I+1,N
46431             IF(K(I1,3).NE.ID1.AND.K(I1,3).NE.ID2) THEN
46432             ELSEIF(K(I,4).EQ.0) THEN
46433               K(I,4)=I1
46434             ELSE
46435               K(I,5)=I1
46436             ENDIF
46437   210     CONTINUE
46438           IF(K(I,5).EQ.0) K(I,5)=K(I,4)
46439   220   CONTINUE
46440  
46441 C...Save top entries at bottom of PYJETS commonblock.
46442       ELSEIF(MEDIT.EQ.21) THEN
46443         IF(2*N.GE.MSTU(4)) THEN
46444           CALL PYERRM(11,'(PYEDIT:) no more memory left in PYJETS')
46445           RETURN
46446         ENDIF
46447         DO 240 I=1,N
46448           DO 230 J=1,5
46449             K(MSTU(4)-I,J)=K(I,J)
46450             P(MSTU(4)-I,J)=P(I,J)
46451             V(MSTU(4)-I,J)=V(I,J)
46452   230     CONTINUE
46453   240   CONTINUE
46454         MSTU(32)=N
46455  
46456 C...Restore bottom entries of commonblock PYJETS to top.
46457       ELSEIF(MEDIT.EQ.22) THEN
46458         DO 260 I=1,MSTU(32)
46459           DO 250 J=1,5
46460             K(I,J)=K(MSTU(4)-I,J)
46461             P(I,J)=P(MSTU(4)-I,J)
46462             V(I,J)=V(MSTU(4)-I,J)
46463   250     CONTINUE
46464   260   CONTINUE
46465         N=MSTU(32)
46466  
46467 C...Mark primary entries at top of commonblock PYJETS as untreated.
46468       ELSEIF(MEDIT.EQ.23) THEN
46469         I1=0
46470         DO 270 I=1,N
46471           KH=K(I,3)
46472           IF(KH.GE.1) THEN
46473             IF(K(KH,1).GT.20) KH=0
46474           ENDIF
46475           IF(KH.NE.0) GOTO 280
46476           I1=I1+1
46477           IF(K(I,1).GT.10.AND.K(I,1).LE.20) K(I,1)=K(I,1)-10
46478   270   CONTINUE
46479   280   N=I1
46480  
46481 C...Place largest axis along z axis and second largest in xy plane.
46482       ELSEIF(MEDIT.EQ.31.OR.MEDIT.EQ.32) THEN
46483         CALL PYROBO(1,N+MSTU(3),0D0,-PYANGL(P(MSTU(61),1),
46484      &  P(MSTU(61),2)),0D0,0D0,0D0)
46485         CALL PYROBO(1,N+MSTU(3),-PYANGL(P(MSTU(61),3),
46486      &  P(MSTU(61),1)),0D0,0D0,0D0,0D0)
46487         CALL PYROBO(1,N+MSTU(3),0D0,-PYANGL(P(MSTU(61)+1,1),
46488      &  P(MSTU(61)+1,2)),0D0,0D0,0D0)
46489         IF(MEDIT.EQ.31) RETURN
46490  
46491 C...Rotate to put slim jet along +z axis.
46492         DO 290 IS=1,2
46493           NS(IS)=0
46494           PTS(IS)=0D0
46495           PLS(IS)=0D0
46496   290   CONTINUE
46497         DO 300 I=1,N
46498           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 300
46499           IF(MSTU(41).GE.2) THEN
46500             KC=PYCOMP(K(I,2))
46501             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
46502      &      KC.EQ.18) GOTO 300
46503             IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2))
46504      &      .EQ.0) GOTO 300
46505           ENDIF
46506           IS=2D0-SIGN(0.5D0,P(I,3))
46507           NS(IS)=NS(IS)+1
46508           PTS(IS)=PTS(IS)+SQRT(P(I,1)**2+P(I,2)**2)
46509   300   CONTINUE
46510         IF(NS(1)*PTS(2)**2.LT.NS(2)*PTS(1)**2)
46511      &  CALL PYROBO(1,N+MSTU(3),PARU(1),0D0,0D0,0D0,0D0)
46512  
46513 C...Rotate to put second largest jet into -z,+x quadrant.
46514         DO 310 I=1,N
46515           IF(P(I,3).GE.0D0) GOTO 310
46516           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 310
46517           IF(MSTU(41).GE.2) THEN
46518             KC=PYCOMP(K(I,2))
46519             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
46520      &      KC.EQ.18) GOTO 310
46521             IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2))
46522      &      .EQ.0) GOTO 310
46523           ENDIF
46524           IS=2D0-SIGN(0.5D0,P(I,1))
46525           PLS(IS)=PLS(IS)-P(I,3)
46526   310   CONTINUE
46527         IF(PLS(2).GT.PLS(1)) CALL PYROBO(1,N+MSTU(3),0D0,PARU(1),
46528      &  0D0,0D0,0D0)
46529       ENDIF
46530  
46531       RETURN
46532       END
46533  
46534 C*********************************************************************
46535  
46536 C...PYLIST
46537 C...Gives program heading, or lists an event, or particle
46538 C...data, or current parameter values.
46539  
46540       SUBROUTINE PYLIST(MLIST)
46541  
46542 C...Double precision and integer declarations.
46543       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46544       IMPLICIT INTEGER(I-N)
46545       INTEGER PYK,PYCHGE,PYCOMP
46546 C...Parameter statement to help give large particle numbers.
46547       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KEXCIT=4000000)
46548 C...Commonblocks.
46549       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
46550       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
46551       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
46552       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
46553       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
46554 C...Local arrays, character variables and data.
46555       CHARACTER CHAP*16,CHAC*16,CHAN*16,CHAD(5)*16,CHDL(7)*4
46556       DIMENSION PS(6)
46557       DATA CHDL/'(())',' ','()','!!','<>','==','(==)'/
46558  
46559 C...Initialization printout: version number and date of last change.
46560       IF(MLIST.EQ.0.OR.MSTU(12).EQ.1) THEN
46561         CALL PYLOGO
46562         MSTU(12)=0
46563         IF(MLIST.EQ.0) RETURN
46564       ENDIF
46565  
46566 C...List event data, including additional lines after N.
46567       IF(MLIST.GE.1.AND.MLIST.LE.3) THEN
46568         IF(MLIST.EQ.1) WRITE(MSTU(11),5100)
46569         IF(MLIST.EQ.2) WRITE(MSTU(11),5200)
46570         IF(MLIST.EQ.3) WRITE(MSTU(11),5300)
46571         LMX=12
46572         IF(MLIST.GE.2) LMX=16
46573         ISTR=0
46574         IMAX=N
46575         IF(MSTU(2).GT.0) IMAX=MSTU(2)
46576         DO 120 I=MAX(1,MSTU(1)),MAX(IMAX,N+MAX(0,MSTU(3)))
46577           IF((I.GT.IMAX.AND.I.LE.N).OR.K(I,1).LT.0) GOTO 120
46578  
46579 C...Get particle name, pad it and check it is not too long.
46580           CALL PYNAME(K(I,2),CHAP)
46581           LEN=0
46582           DO 100 LEM=1,16
46583             IF(CHAP(LEM:LEM).NE.' ') LEN=LEM
46584   100     CONTINUE
46585           MDL=(K(I,1)+19)/10
46586           LDL=0
46587           IF(MDL.EQ.2.OR.MDL.GE.8) THEN
46588             CHAC=CHAP
46589             IF(LEN.GT.LMX) CHAC(LMX:LMX)='?'
46590           ELSE
46591             LDL=1
46592             IF(MDL.EQ.1.OR.MDL.EQ.7) LDL=2
46593             IF(LEN.EQ.0) THEN
46594               CHAC=CHDL(MDL)(1:2*LDL)//' '
46595             ELSE
46596               CHAC=CHDL(MDL)(1:LDL)//CHAP(1:MIN(LEN,LMX-2*LDL))//
46597      &        CHDL(MDL)(LDL+1:2*LDL)//' '
46598               IF(LEN+2*LDL.GT.LMX) CHAC(LMX:LMX)='?'
46599             ENDIF
46600           ENDIF
46601  
46602 C...Add information on string connection.
46603           IF(K(I,1).EQ.1.OR.K(I,1).EQ.2.OR.K(I,1).EQ.11.OR.K(I,1).EQ.12)
46604      &    THEN
46605             KC=PYCOMP(K(I,2))
46606             KCC=0
46607             IF(KC.NE.0) KCC=KCHG(KC,2)
46608             IF(IABS(K(I,2)).EQ.39) THEN
46609               IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='X'
46610             ELSEIF(KCC.NE.0.AND.ISTR.EQ.0) THEN
46611               ISTR=1
46612               IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='A'
46613             ELSEIF(KCC.NE.0.AND.(K(I,1).EQ.2.OR.K(I,1).EQ.12)) THEN
46614               IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='I'
46615             ELSEIF(KCC.NE.0) THEN
46616               ISTR=0
46617               IF(LEN+2*LDL+3.LE.LMX) CHAC(LMX-1:LMX-1)='V'
46618             ENDIF
46619           ENDIF
46620  
46621 C...Write data for particle/jet.
46622           IF(MLIST.EQ.1.AND.ABS(P(I,4)).LT.9999D0) THEN
46623             WRITE(MSTU(11),5400) I,CHAC(1:12),(K(I,J1),J1=1,3),
46624      &      (P(I,J2),J2=1,5)
46625           ELSEIF(MLIST.EQ.1.AND.ABS(P(I,4)).LT.99999D0) THEN
46626             WRITE(MSTU(11),5500) I,CHAC(1:12),(K(I,J1),J1=1,3),
46627      &      (P(I,J2),J2=1,5)
46628           ELSEIF(MLIST.EQ.1) THEN
46629             WRITE(MSTU(11),5600) I,CHAC(1:12),(K(I,J1),J1=1,3),
46630      &      (P(I,J2),J2=1,5)
46631           ELSEIF(MSTU(5).EQ.10000.AND.(K(I,1).EQ.3.OR.K(I,1).EQ.13.OR.
46632      &      K(I,1).EQ.14)) THEN
46633             WRITE(MSTU(11),5700) I,CHAC,(K(I,J1),J1=1,3),
46634      &      K(I,4)/100000000,MOD(K(I,4)/10000,10000),MOD(K(I,4),10000),
46635      &      K(I,5)/100000000,MOD(K(I,5)/10000,10000),MOD(K(I,5),10000),
46636      &      (P(I,J2),J2=1,5)
46637           ELSE
46638             WRITE(MSTU(11),5800) I,CHAC,(K(I,J1),J1=1,5),
46639      &      (P(I,J2),J2=1,5)
46640           ENDIF
46641           IF(MLIST.EQ.3) WRITE(MSTU(11),5900) (V(I,J),J=1,5)
46642  
46643 C...Insert extra separator lines specified by user.
46644           IF(MSTU(70).GE.1) THEN
46645             ISEP=0
46646             DO 110 J=1,MIN(10,MSTU(70))
46647               IF(I.EQ.MSTU(70+J)) ISEP=1
46648   110       CONTINUE
46649             IF(ISEP.EQ.1.AND.MLIST.EQ.1) WRITE(MSTU(11),6000)
46650             IF(ISEP.EQ.1.AND.MLIST.GE.2) WRITE(MSTU(11),6100)
46651           ENDIF
46652   120   CONTINUE
46653  
46654 C...Sum of charges and momenta.
46655         DO 130 J=1,6
46656           PS(J)=PYP(0,J)
46657   130   CONTINUE
46658         IF(MLIST.EQ.1.AND.ABS(PS(4)).LT.9999D0) THEN
46659           WRITE(MSTU(11),6200) PS(6),(PS(J),J=1,5)
46660         ELSEIF(MLIST.EQ.1.AND.ABS(PS(4)).LT.99999D0) THEN
46661           WRITE(MSTU(11),6300) PS(6),(PS(J),J=1,5)
46662         ELSEIF(MLIST.EQ.1) THEN
46663           WRITE(MSTU(11),6400) PS(6),(PS(J),J=1,5)
46664         ELSE
46665           WRITE(MSTU(11),6500) PS(6),(PS(J),J=1,5)
46666         ENDIF
46667  
46668 C...Give simple list of KF codes defined in program.
46669       ELSEIF(MLIST.EQ.11) THEN
46670         WRITE(MSTU(11),6600)
46671         DO 140 KF=1,80
46672           CALL PYNAME(KF,CHAP)
46673           CALL PYNAME(-KF,CHAN)
46674           IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
46675           IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46676   140   CONTINUE
46677         DO 170 KFLS=1,3,2
46678           DO 160 KFLA=1,5
46679             DO 150 KFLB=1,KFLA-(3-KFLS)/2
46680               KF=1000*KFLA+100*KFLB+KFLS
46681               CALL PYNAME(KF,CHAP)
46682               CALL PYNAME(-KF,CHAN)
46683               WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46684   150       CONTINUE
46685   160     CONTINUE
46686   170   CONTINUE
46687         KF=130
46688         CALL PYNAME(KF,CHAP)
46689         WRITE(MSTU(11),6700) KF,CHAP
46690         KF=310
46691         CALL PYNAME(KF,CHAP)
46692         WRITE(MSTU(11),6700) KF,CHAP
46693         DO 200 KMUL=0,5
46694           KFLS=3
46695           IF(KMUL.EQ.0.OR.KMUL.EQ.3) KFLS=1
46696           IF(KMUL.EQ.5) KFLS=5
46697           KFLR=0
46698           IF(KMUL.EQ.2.OR.KMUL.EQ.3) KFLR=1
46699           IF(KMUL.EQ.4) KFLR=2
46700           DO 190 KFLB=1,5
46701             DO 180 KFLC=1,KFLB-1
46702               KF=10000*KFLR+100*KFLB+10*KFLC+KFLS
46703               CALL PYNAME(KF,CHAP)
46704               CALL PYNAME(-KF,CHAN)
46705               WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46706   180       CONTINUE
46707             KF=10000*KFLR+110*KFLB+KFLS
46708             CALL PYNAME(KF,CHAP)
46709             WRITE(MSTU(11),6700) KF,CHAP
46710   190     CONTINUE
46711   200   CONTINUE
46712         KF=100443
46713         CALL PYNAME(KF,CHAP)
46714         WRITE(MSTU(11),6700) KF,CHAP
46715         KF=100553
46716         CALL PYNAME(KF,CHAP)
46717         WRITE(MSTU(11),6700) KF,CHAP
46718         DO 240 KFLSP=1,3
46719           KFLS=2+2*(KFLSP/3)
46720           DO 230 KFLA=1,5
46721             DO 220 KFLB=1,KFLA
46722               DO 210 KFLC=1,KFLB
46723                 IF(KFLSP.EQ.1.AND.(KFLA.EQ.KFLB.OR.KFLB.EQ.KFLC))
46724      &          GOTO 210
46725                 IF(KFLSP.EQ.2.AND.KFLA.EQ.KFLC) GOTO 210
46726                 IF(KFLSP.EQ.1) KF=1000*KFLA+100*KFLC+10*KFLB+KFLS
46727                 IF(KFLSP.GE.2) KF=1000*KFLA+100*KFLB+10*KFLC+KFLS
46728                 CALL PYNAME(KF,CHAP)
46729                 CALL PYNAME(-KF,CHAN)
46730                 WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46731   210         CONTINUE
46732   220       CONTINUE
46733   230     CONTINUE
46734   240   CONTINUE
46735         DO 250 KF=KSUSY1+1,KSUSY1+40
46736           CALL PYNAME(KF,CHAP)
46737           CALL PYNAME(-KF,CHAN)
46738           IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
46739           IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46740   250   CONTINUE
46741         DO 260 KF=KSUSY2+1,KSUSY2+40
46742           CALL PYNAME(KF,CHAP)
46743           CALL PYNAME(-KF,CHAN)
46744           IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
46745           IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46746   260   CONTINUE
46747         DO 270 KF=KEXCIT+1,KEXCIT+40
46748           CALL PYNAME(KF,CHAP)
46749           CALL PYNAME(-KF,CHAN)
46750           IF(CHAP.NE.' '.AND.CHAN.EQ.' ') WRITE(MSTU(11),6700) KF,CHAP
46751           IF(CHAN.NE.' ') WRITE(MSTU(11),6700) KF,CHAP,-KF,CHAN
46752   270   CONTINUE
46753  
46754 C...List parton/particle data table. Check whether to be listed.
46755       ELSEIF(MLIST.EQ.12) THEN
46756         WRITE(MSTU(11),6800)
46757         DO 300 KC=1,MSTU(6)
46758           KF=KCHG(KC,4)
46759           IF(KF.EQ.0) GOTO 300
46760           IF(KF.LT.MSTU(1).OR.(MSTU(2).GT.0.AND.KF.GT.MSTU(2)))
46761      &    GOTO 300
46762  
46763 C...Find particle name and mass. Print information.
46764           CALL PYNAME(KF,CHAP)
46765           IF(KF.LE.100.AND.CHAP.EQ.' '.AND.MDCY(KC,2).EQ.0) GOTO 300
46766           CALL PYNAME(-KF,CHAN)
46767           WRITE(MSTU(11),6900) KF,KC,CHAP,CHAN,(KCHG(KC,J1),J1=1,3),
46768      &    (PMAS(KC,J2),J2=1,4),MDCY(KC,1)
46769  
46770 C...Particle decay: channel number, branching ratios, matrix element,
46771 C...decay products.
46772           DO 290 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
46773             DO 280 J=1,5
46774               CALL PYNAME(KFDP(IDC,J),CHAD(J))
46775   280       CONTINUE
46776             WRITE(MSTU(11),7000) IDC,MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
46777      &      (CHAD(J),J=1,5)
46778   290     CONTINUE
46779   300   CONTINUE
46780  
46781 C...List parameter value table.
46782       ELSEIF(MLIST.EQ.13) THEN
46783         WRITE(MSTU(11),7100)
46784         DO 310 I=1,200
46785           WRITE(MSTU(11),7200) I,MSTU(I),PARU(I),MSTJ(I),PARJ(I),PARF(I)
46786   310   CONTINUE
46787       ENDIF
46788  
46789 C...Format statements for output on unit MSTU(11) (by default 6).
46790  5100 FORMAT(///28X,'Event listing (summary)'//4X,'I particle/jet KS',
46791      &5X,'KF  orig    p_x      p_y      p_z       E        m'/)
46792  5200 FORMAT(///28X,'Event listing (standard)'//4X,'I  particle/jet',
46793      &'  K(I,1)   K(I,2) K(I,3)     K(I,4)      K(I,5)       P(I,1)',
46794      &'       P(I,2)       P(I,3)       P(I,4)       P(I,5)'/)
46795  5300 FORMAT(///28X,'Event listing (with vertices)'//4X,'I  particle/j',
46796      &'et  K(I,1)   K(I,2) K(I,3)     K(I,4)      K(I,5)       P(I,1)',
46797      &'       P(I,2)       P(I,3)       P(I,4)       P(I,5)'/73X,
46798      &'V(I,1)       V(I,2)       V(I,3)       V(I,4)       V(I,5)'/)
46799  5400 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.3)
46800  5500 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.2)
46801  5600 FORMAT(1X,I4,1X,A12,1X,I2,I8,1X,I4,5F9.1)
46802  5700 FORMAT(1X,I4,2X,A16,1X,I3,1X,I9,1X,I4,2(3X,I1,2I4),5F13.5)
46803  5800 FORMAT(1X,I4,2X,A16,1X,I3,1X,I9,1X,I4,2(3X,I9),5F13.5)
46804  5900 FORMAT(66X,5(1X,F12.3))
46805  6000 FORMAT(1X,78('='))
46806  6100 FORMAT(1X,130('='))
46807  6200 FORMAT(19X,'sum:',F6.2,5X,5F9.3)
46808  6300 FORMAT(19X,'sum:',F6.2,5X,5F9.2)
46809  6400 FORMAT(19X,'sum:',F6.2,5X,5F9.1)
46810  6500 FORMAT(19X,'sum charge:',F6.2,3X,'sum momentum and inv. mass:',
46811      &5F13.5)
46812  6600 FORMAT(///20X,'List of KF codes in program'/)
46813  6700 FORMAT(4X,I9,4X,A16,6X,I9,4X,A16)
46814  6800 FORMAT(///30X,'Particle/parton data table'//8X,'KF',5X,'KC',4X,
46815      &'particle',8X,'antiparticle',6X,'chg  col  anti',8X,'mass',7X,
46816      &'width',7X,'w-cut',5X,'lifetime',1X,'decay'/11X,'IDC',1X,'on/off',
46817      &1X,'ME',3X,'Br.rat.',4X,'decay products')
46818  6900 FORMAT(/1X,I9,3X,I4,4X,A16,A16,3I5,1X,F12.5,2(1X,F11.5),
46819      &1X,1P,E13.5,3X,I2)
46820  7000 FORMAT(10X,I4,2X,I3,2X,I3,2X,F10.6,4X,5A16)
46821  7100 FORMAT(///20X,'Parameter value table'//4X,'I',3X,'MSTU(I)',
46822      &8X,'PARU(I)',3X,'MSTJ(I)',8X,'PARJ(I)',8X,'PARF(I)')
46823  7200 FORMAT(1X,I4,1X,I9,1X,F14.5,1X,I9,1X,F14.5,1X,F14.5)
46824  
46825       RETURN
46826       END
46827  
46828 C*********************************************************************
46829  
46830 C...PYLOGO
46831 C...Writes a logo for the program.
46832  
46833       SUBROUTINE PYLOGO
46834  
46835 C...Double precision and integer declarations.
46836       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
46837       IMPLICIT INTEGER(I-N)
46838       INTEGER PYK,PYCHGE,PYCOMP
46839 C...Parameter for length of information block.
46840       PARAMETER (IREFER=17)
46841 C...Commonblocks.
46842       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
46843       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
46844       SAVE /PYDAT1/,/PYPARS/
46845 C...Local arrays and character variables.
46846       INTEGER IDATI(6)
46847       CHARACTER MONTH(12)*3, LOGO(48)*32, REFER(2*IREFER)*36, LINE*79,
46848      &VERS*1, SUBV*3, DATE*2, YEAR*4, HOUR*2, MINU*2, SECO*2
46849  
46850 C...Data on months, logo, titles, and references.
46851       DATA MONTH/'Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep',
46852      &'Oct','Nov','Dec'/
46853       DATA (LOGO(J),J=1,19)/
46854      &'            *......*            ',
46855      &'       *:::!!:::::::::::*       ',
46856      &'    *::::::!!::::::::::::::*    ',
46857      &'  *::::::::!!::::::::::::::::*  ',
46858      &' *:::::::::!!:::::::::::::::::* ',
46859      &' *:::::::::!!:::::::::::::::::* ',
46860      &'  *::::::::!!::::::::::::::::*! ',
46861      &'    *::::::!!::::::::::::::* !! ',
46862      &'    !! *:::!!:::::::::::*    !! ',
46863      &'    !!     !* -><- *         !! ',
46864      &'    !!     !!                !! ',
46865      &'    !!     !!                !! ',
46866      &'    !!                       !! ',
46867      &'    !!        ep             !! ',
46868      &'    !!                       !! ',
46869      &'    !!                 pp    !! ',
46870      &'    !!   e+e-                !! ',
46871      &'    !!                       !! ',
46872      &'    !!                          '/
46873       DATA (LOGO(J),J=20,38)/
46874      &'Welcome to the Lund Monte Carlo!',
46875      &'                                ',
46876      &'PPP  Y   Y TTTTT H   H III   A  ',
46877      &'P  P  Y Y    T   H   H  I   A A ',
46878      &'PPP    Y     T   HHHHH  I  AAAAA',
46879      &'P      Y     T   H   H  I  A   A',
46880      &'P      Y     T   H   H III A   A',
46881      &'                                ',
46882      &'This is PYTHIA version x.xxx    ',
46883      &'Last date of change: xx xxx 199x',
46884      &'                                ',
46885      &'Now is xx xxx 199x at xx:xx:xx  ',
46886      &'                                ',
46887      &'Disclaimer: this program comes  ',
46888      &'without any guarantees. Beware  ',
46889      &'of errors and use common sense  ',
46890      &'when interpreting results.      ',
46891      &'                                ',
46892      &'Copyright T. Sjostrand (2000)   '/
46893       DATA (REFER(J),J=1,18)/
46894      &'An archive of program versions and d',
46895      &'ocumentation is found on the web:   ',
46896      &'http://www.thep.lu.se/~torbjorn/Pyth',
46897      &'ia.html                             ',
46898      &'                                    ',
46899      &'                                    ',
46900      &'When you cite this program, currentl',
46901      &'y the official reference is         ',
46902      &'T. Sjostrand, Computer Physics Commu',
46903      &'n. 82 (1994) 74.                    ',
46904      &'The supersymmetry extensions are des',
46905      &'cribed in                           ',
46906      &'S. Mrenna, Computer Physics Commun. ',
46907      &'101 (1997) 232                      ',
46908      &'Also remember that the program, to a',
46909      &' large extent, represents original  ',
46910      &'physics research. Other publications',
46911      &' of special relevance to your       '/
46912       DATA (REFER(J),J=19,2*IREFER)/
46913      &'studies may therefore deserve separa',
46914      &'te mention.                         ',
46915      &'                                    ',
46916      &'                                    ',
46917      &'Main author: Torbjorn Sjostrand; Dep',
46918      &'artment of Theoretical Physics 2,   ',
46919      &'  Lund University, Solvegatan 14A, S',
46920      &'-223 62 Lund, Sweden;               ',
46921      &'  phone: + 46 - 46 - 222 48 16; e-ma',
46922      &'il: torbjorn@thep.lu.se             ',
46923      &'SUSY author: Stephen Mrenna, Physics',
46924      &' Department, UC Davis,              ',
46925      &'  One Shields Avenue, Davis, CA 9561',
46926      &'6, USA;                       ',
46927      &'  phone: + 1 - 530 - 752 - 2661; e-m',
46928      &'ail: mrenna@physics.ucdavis.edu     '/
46929  
46930 C...Check that PYDATA linked.
46931       IF(MSTP(183)/10.NE.199.AND.MSTP(183)/10.NE.200) THEN
46932         WRITE(*,'(1X,A)')
46933      &  'Error: PYDATA has not been linked.'
46934         WRITE(*,'(1X,A)') 'Execution stopped!'
46935         STOP
46936  
46937 C...Write current version number and current date+time.
46938       ELSE
46939         WRITE(VERS,'(I1)') MSTP(181)
46940         LOGO(28)(24:24)=VERS
46941         WRITE(SUBV,'(I3)') MSTP(182)
46942         LOGO(28)(26:28)=SUBV
46943         IF(MSTP(182).LT.100) LOGO(28)(26:26)='0'
46944         WRITE(DATE,'(I2)') MSTP(185)
46945         LOGO(29)(22:23)=DATE
46946         LOGO(29)(25:27)=MONTH(MSTP(184))
46947         WRITE(YEAR,'(I4)') MSTP(183)
46948         LOGO(29)(29:32)=YEAR
46949         CALL PYTIME(IDATI)
46950         IF(IDATI(1).LE.0) THEN
46951           LOGO(31)='                                '
46952         ELSE
46953           WRITE(DATE,'(I2)') IDATI(3)
46954           LOGO(31)(8:9)=DATE
46955           LOGO(31)(11:13)=MONTH(MAX(1,MIN(12,IDATI(2))))
46956           WRITE(YEAR,'(I4)') IDATI(1)
46957           LOGO(31)(15:18)=YEAR
46958           WRITE(HOUR,'(I2)') IDATI(4)
46959           LOGO(31)(23:24)=HOUR
46960           WRITE(MINU,'(I2)') IDATI(5)
46961           LOGO(31)(26:27)=MINU
46962           IF(IDATI(5).LT.10) LOGO(31)(26:26)='0'
46963           WRITE(SECO,'(I2)') IDATI(6)
46964           LOGO(31)(29:30)=SECO
46965           IF(IDATI(6).LT.10) LOGO(31)(29:29)='0'
46966         ENDIF
46967       ENDIF
46968  
46969 C...Loop over lines in header. Define page feed and side borders.
46970       DO 100 ILIN=1,29+IREFER
46971         LINE=' '
46972         IF(ILIN.EQ.1) THEN
46973           LINE(1:1)='1'
46974         ELSE
46975           LINE(2:3)='**'
46976           LINE(78:79)='**'
46977         ENDIF
46978  
46979 C...Separator lines and logos.
46980         IF(ILIN.EQ.2.OR.ILIN.EQ.3.OR.ILIN.GE.28+IREFER) THEN
46981           LINE(4:77)='***********************************************'//
46982      &    '***************************'
46983         ELSEIF(ILIN.GE.6.AND.ILIN.LE.24) THEN
46984           LINE(6:37)=LOGO(ILIN-5)
46985           LINE(44:75)=LOGO(ILIN+14)
46986         ELSEIF(ILIN.GE.26.AND.ILIN.LE.25+IREFER) THEN
46987           LINE(5:40)=REFER(2*ILIN-51)
46988           LINE(41:76)=REFER(2*ILIN-50)
46989         ENDIF
46990  
46991 C...Write lines to appropriate unit.
46992         WRITE(MSTU(11),'(A79)') LINE
46993   100 CONTINUE
46994  
46995       RETURN
46996       END
46997  
46998 C*********************************************************************
46999  
47000 C...PYUPDA
47001 C...Facilitates the updating of particle and decay data
47002 C...by allowing it to be done in an external file.
47003  
47004       SUBROUTINE PYUPDA(MUPDA,LFN)
47005  
47006 C...Double precision and integer declarations.
47007       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47008       IMPLICIT INTEGER(I-N)
47009       INTEGER PYK,PYCHGE,PYCOMP
47010 C...Commonblocks.
47011       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47012       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47013       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
47014       COMMON/PYDAT4/CHAF(500,2)
47015       CHARACTER CHAF*16
47016       COMMON/PYINT4/MWID(500),WIDS(500,5)
47017       SAVE /PYDAT1/,/PYDAT2/,/PYDAT3/,/PYDAT4/,/PYINT4/
47018 C...Local arrays, character variables and data.
47019       CHARACTER CHINL*120,CHKF*9,CHVAR(22)*9,CHLIN*72,
47020      &CHBLK(20)*72,CHOLD*16,CHTMP*16,CHNEW*16,CHCOM*24
47021       DATA CHVAR/ 'KCHG(I,1)','KCHG(I,2)','KCHG(I,3)','KCHG(I,4)',
47022      &'PMAS(I,1)','PMAS(I,2)','PMAS(I,3)','PMAS(I,4)','MDCY(I,1)',
47023      &'MDCY(I,2)','MDCY(I,3)','MDME(I,1)','MDME(I,2)','BRAT(I)  ',
47024      &'KFDP(I,1)','KFDP(I,2)','KFDP(I,3)','KFDP(I,4)','KFDP(I,5)',
47025      &'CHAF(I,1)','CHAF(I,2)','MWID(I)  '/
47026  
47027 C...Write header if not yet done.
47028       IF(MSTU(12).GE.1) CALL PYLIST(0)
47029  
47030 C...Write information on file for editing.
47031       IF(MUPDA.EQ.1) THEN
47032         DO 110 KC=1,500
47033           WRITE(LFN,5000) KCHG(KC,4),(CHAF(KC,J1),J1=1,2),
47034      &    (KCHG(KC,J2),J2=1,3),(PMAS(KC,J3),J3=1,4),
47035      &    MWID(KC),MDCY(KC,1)
47036           DO 100 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
47037             WRITE(LFN,5100) MDME(IDC,1),MDME(IDC,2),BRAT(IDC),
47038      &      (KFDP(IDC,J),J=1,5)
47039   100     CONTINUE
47040   110   CONTINUE
47041  
47042 C...Read complete set of information from edited file or
47043 C...read partial set of new or updated information from edited file.
47044       ELSEIF(MUPDA.EQ.2.OR.MUPDA.EQ.3) THEN
47045  
47046 C...Reset counters.
47047         KCC=100
47048         NDC=0
47049         CHKF='         '
47050         IF(MUPDA.EQ.2) THEN
47051           DO 120 I=1,MSTU(6)
47052             KCHG(I,4)=0
47053   120     CONTINUE
47054         ELSE
47055           DO 130 KC=1,MSTU(6)
47056             IF(KC.GT.100.AND.KCHG(KC,4).GT.100) KCC=KC
47057             NDC=MAX(NDC,MDCY(KC,2)+MDCY(KC,3)-1)
47058   130     CONTINUE
47059         ENDIF
47060  
47061 C...Begin of loop: read new line; unknown whether particle or
47062 C...decay data.
47063   140   READ(LFN,5200,END=190) CHINL
47064  
47065 C...Identify particle code and whether already defined  (for MUPDA=3).
47066         IF(CHINL(2:10).NE.'         ') THEN
47067           CHKF=CHINL(2:10)
47068           READ(CHKF,5300) KF
47069           IF(MUPDA.EQ.2) THEN
47070             IF(KF.LE.100) THEN
47071               KC=KF
47072             ELSE
47073               KCC=KCC+1
47074               KC=KCC
47075             ENDIF
47076           ELSE
47077             KCREP=0
47078             IF(KF.LE.100) THEN
47079               KCREP=KF
47080             ELSE
47081               DO 150 KCR=101,KCC
47082                 IF(KCHG(KCR,4).EQ.KF) KCREP=KCR
47083   150         CONTINUE
47084             ENDIF
47085 C...Remove duplicate old decay data.
47086             IF(KCREP.NE.0.AND.MDCY(KCREP,3).GT.0) THEN
47087               IDCREP=MDCY(KCREP,2)
47088               NDCREP=MDCY(KCREP,3)
47089               DO 160 I=1,KCC
47090                 IF(MDCY(I,2).GT.IDCREP) MDCY(I,2)=MDCY(I,2)-NDCREP
47091   160         CONTINUE
47092               DO 180 I=IDCREP,NDC-NDCREP
47093                 MDME(I,1)=MDME(I+NDCREP,1)
47094                 MDME(I,2)=MDME(I+NDCREP,2)
47095                 BRAT(I)=BRAT(I+NDCREP)
47096                 DO 170 J=1,5
47097                   KFDP(I,J)=KFDP(I+NDCREP,J)
47098   170           CONTINUE
47099   180         CONTINUE
47100               NDC=NDC-NDCREP
47101               KC=KCREP
47102             ELSEIF(KCREP.NE.0) THEN
47103               KC=KCREP
47104             ELSE
47105               KCC=KCC+1
47106               KC=KCC
47107             ENDIF
47108           ENDIF
47109  
47110 C...Study line with particle data.
47111           IF(KC.GT.MSTU(6)) CALL PYERRM(27,
47112      &    '(PYUPDA:) Particle arrays full by KF ='//CHKF)
47113           READ(CHINL,5000) KCHG(KC,4),(CHAF(KC,J1),J1=1,2),
47114      &    (KCHG(KC,J2),J2=1,3),(PMAS(KC,J3),J3=1,4),
47115      &    MWID(KC),MDCY(KC,1)
47116           MDCY(KC,2)=0
47117           MDCY(KC,3)=0
47118  
47119 C...Study line with decay data.
47120         ELSE
47121           NDC=NDC+1
47122           IF(NDC.GT.MSTU(7)) CALL PYERRM(27,
47123      &    '(PYUPDA:) Decay data arrays full by KF ='//CHKF)
47124           IF(MDCY(KC,2).EQ.0) MDCY(KC,2)=NDC
47125           MDCY(KC,3)=MDCY(KC,3)+1
47126           READ(CHINL,5100) MDME(NDC,1),MDME(NDC,2),BRAT(NDC),
47127      &    (KFDP(NDC,J),J=1,5)
47128         ENDIF
47129  
47130 C...End of loop; ensure that PYCOMP tables are updated.
47131         GOTO 140
47132   190   CONTINUE
47133         MSTU(20)=0
47134  
47135 C...Perform possible tests that new information is consistent.
47136         DO 220 KC=1,MSTU(6)
47137           KF=KCHG(KC,4)
47138           IF(KF.EQ.0) GOTO 220
47139           WRITE(CHKF,5300) KF
47140           IF(MIN(PMAS(KC,1),PMAS(KC,2),PMAS(KC,3),PMAS(KC,1)-PMAS(KC,3),
47141      &    PMAS(KC,4)).LT.0D0.OR.MDCY(KC,3).LT.0) CALL PYERRM(17,
47142      &    '(PYUPDA:) Mass/width/life/(# channels) wrong for KF ='//CHKF)
47143           BRSUM=0D0
47144           DO 210 IDC=MDCY(KC,2),MDCY(KC,2)+MDCY(KC,3)-1
47145             IF(MDME(IDC,2).GT.80) GOTO 210
47146             KQ=KCHG(KC,1)
47147             PMS=PMAS(KC,1)-PMAS(KC,3)-PARJ(64)
47148             MERR=0
47149             DO 200 J=1,5
47150               KP=KFDP(IDC,J)
47151               IF(KP.EQ.0.OR.KP.EQ.81.OR.IABS(KP).EQ.82) THEN
47152                 IF(KP.EQ.81) KQ=0
47153               ELSEIF(PYCOMP(KP).EQ.0) THEN
47154                 MERR=3
47155               ELSE
47156                 KQ=KQ-PYCHGE(KP)
47157                 KPC=PYCOMP(KP)
47158                 PMS=PMS-PMAS(KPC,1)
47159                 IF(MSTJ(24).GT.0) PMS=PMS+0.5D0*MIN(PMAS(KPC,2),
47160      &          PMAS(KPC,3))
47161               ENDIF
47162   200       CONTINUE
47163             IF(KQ.NE.0) MERR=MAX(2,MERR)
47164             IF(MWID(KC).EQ.0.AND.KF.NE.311.AND.PMS.LT.0D0)
47165      &      MERR=MAX(1,MERR)
47166             IF(MERR.EQ.3) CALL PYERRM(17,
47167      &      '(PYUPDA:) Unknown particle code in decay of KF ='//CHKF)
47168             IF(MERR.EQ.2) CALL PYERRM(17,
47169      &      '(PYUPDA:) Charge not conserved in decay of KF ='//CHKF)
47170             IF(MERR.EQ.1) CALL PYERRM(7,
47171      &      '(PYUPDA:) Kinematically unallowed decay of KF ='//CHKF)
47172             BRSUM=BRSUM+BRAT(IDC)
47173   210     CONTINUE
47174           WRITE(CHTMP,5500) BRSUM
47175           IF(ABS(BRSUM).GT.0.0005D0.AND.ABS(BRSUM-1D0).GT.0.0005D0)
47176      &    CALL PYERRM(7,'(PYUPDA:) Sum of branching ratios is '//
47177      &    CHTMP(9:16)//' for KF ='//CHKF)
47178   220   CONTINUE
47179  
47180 C...Write DATA statements for inclusion in program.
47181       ELSEIF(MUPDA.EQ.4) THEN
47182  
47183 C...Find out how many codes and decay channels are actually used.
47184         KCC=0
47185         NDC=0
47186         DO 230 I=1,MSTU(6)
47187           IF(KCHG(I,4).NE.0) THEN
47188             KCC=I
47189             NDC=MAX(NDC,MDCY(I,2)+MDCY(I,3)-1)
47190           ENDIF
47191   230   CONTINUE
47192  
47193 C...Initialize writing of DATA statements for inclusion in program.
47194         DO 300 IVAR=1,22
47195           NDIM=MSTU(6)
47196           IF(IVAR.GE.12.AND.IVAR.LE.19) NDIM=MSTU(7)
47197           NLIN=1
47198           CHLIN=' '
47199           CHLIN(7:35)='DATA ('//CHVAR(IVAR)//',I=   1,    )/'
47200           LLIN=35
47201           CHOLD='START'
47202  
47203 C...Loop through variables for conversion to characters.
47204           DO 280 IDIM=1,NDIM
47205             IF(IVAR.EQ.1) WRITE(CHTMP,5400) KCHG(IDIM,1)
47206             IF(IVAR.EQ.2) WRITE(CHTMP,5400) KCHG(IDIM,2)
47207             IF(IVAR.EQ.3) WRITE(CHTMP,5400) KCHG(IDIM,3)
47208             IF(IVAR.EQ.4) WRITE(CHTMP,5400) KCHG(IDIM,4)
47209             IF(IVAR.EQ.5) WRITE(CHTMP,5500) PMAS(IDIM,1)
47210             IF(IVAR.EQ.6) WRITE(CHTMP,5500) PMAS(IDIM,2)
47211             IF(IVAR.EQ.7) WRITE(CHTMP,5500) PMAS(IDIM,3)
47212             IF(IVAR.EQ.8) WRITE(CHTMP,5500) PMAS(IDIM,4)
47213             IF(IVAR.EQ.9) WRITE(CHTMP,5400) MDCY(IDIM,1)
47214             IF(IVAR.EQ.10) WRITE(CHTMP,5400) MDCY(IDIM,2)
47215             IF(IVAR.EQ.11) WRITE(CHTMP,5400) MDCY(IDIM,3)
47216             IF(IVAR.EQ.12) WRITE(CHTMP,5400) MDME(IDIM,1)
47217             IF(IVAR.EQ.13) WRITE(CHTMP,5400) MDME(IDIM,2)
47218             IF(IVAR.EQ.14) WRITE(CHTMP,5600) BRAT(IDIM)
47219             IF(IVAR.EQ.15) WRITE(CHTMP,5400) KFDP(IDIM,1)
47220             IF(IVAR.EQ.16) WRITE(CHTMP,5400) KFDP(IDIM,2)
47221             IF(IVAR.EQ.17) WRITE(CHTMP,5400) KFDP(IDIM,3)
47222             IF(IVAR.EQ.18) WRITE(CHTMP,5400) KFDP(IDIM,4)
47223             IF(IVAR.EQ.19) WRITE(CHTMP,5400) KFDP(IDIM,5)
47224             IF(IVAR.EQ.20) CHTMP=CHAF(IDIM,1)
47225             IF(IVAR.EQ.21) CHTMP=CHAF(IDIM,2)
47226             IF(IVAR.EQ.22) WRITE(CHTMP,5400) MWID(IDIM)
47227  
47228 C...Replace variables beyond what is properly defined.
47229             IF(IVAR.LE.4) THEN
47230               IF(IDIM.GT.KCC) CHTMP='               0'
47231             ELSEIF(IVAR.LE.8) THEN
47232               IF(IDIM.GT.KCC) CHTMP='             0.0'
47233             ELSEIF(IVAR.LE.11) THEN
47234               IF(IDIM.GT.KCC) CHTMP='               0'
47235             ELSEIF(IVAR.LE.13) THEN
47236               IF(IDIM.GT.NDC) CHTMP='               0'
47237             ELSEIF(IVAR.LE.14) THEN
47238               IF(IDIM.GT.NDC) CHTMP='             0.0'
47239             ELSEIF(IVAR.LE.19) THEN
47240               IF(IDIM.GT.NDC) CHTMP='               0'
47241             ELSEIF(IVAR.LE.21) THEN
47242               IF(IDIM.GT.KCC) CHTMP='                '
47243             ELSE
47244               IF(IDIM.GT.KCC) CHTMP='               0'
47245             ENDIF
47246  
47247 C...Length of variable, trailing decimal zeros, quotation marks.
47248             LLOW=1
47249             LHIG=1
47250             DO 240 LL=1,16
47251               IF(CHTMP(17-LL:17-LL).NE.' ') LLOW=17-LL
47252               IF(CHTMP(LL:LL).NE.' ') LHIG=LL
47253   240       CONTINUE
47254             CHNEW=CHTMP(LLOW:LHIG)//' '
47255             LNEW=1+LHIG-LLOW
47256             IF((IVAR.GE.5.AND.IVAR.LE.8).OR.IVAR.EQ.14) THEN
47257               LNEW=LNEW+1
47258   250         LNEW=LNEW-1
47259               IF(LNEW.GE.2.AND.CHNEW(LNEW:LNEW).EQ.'0') GOTO 250
47260               IF(CHNEW(LNEW:LNEW).EQ.'.') LNEW=LNEW-1
47261               IF(LNEW.EQ.0) THEN
47262                 CHNEW(1:3)='0D0'
47263                 LNEW=3
47264               ELSE
47265                 CHNEW(LNEW+1:LNEW+2)='D0'
47266                 LNEW=LNEW+2
47267               ENDIF
47268             ELSEIF(IVAR.EQ.20.OR.IVAR.EQ.21) THEN
47269               DO 260 LL=LNEW,1,-1
47270                 IF(CHNEW(LL:LL).EQ.'''') THEN
47271                   CHTMP=CHNEW
47272                   CHNEW=CHTMP(1:LL)//''''//CHTMP(LL+1:11)
47273                   LNEW=LNEW+1
47274                 ENDIF
47275   260         CONTINUE
47276               LNEW=MIN(14,LNEW)
47277               CHTMP=CHNEW
47278               CHNEW(1:LNEW+2)=''''//CHTMP(1:LNEW)//''''
47279               LNEW=LNEW+2
47280             ENDIF
47281  
47282 C...Form composite character string, often including repetition counter.
47283             IF(CHNEW.NE.CHOLD) THEN
47284               NRPT=1
47285               CHOLD=CHNEW
47286               CHCOM=CHNEW
47287               LCOM=LNEW
47288             ELSE
47289               LRPT=LNEW+1
47290               IF(NRPT.GE.2) LRPT=LNEW+3
47291               IF(NRPT.GE.10) LRPT=LNEW+4
47292               IF(NRPT.GE.100) LRPT=LNEW+5
47293               IF(NRPT.GE.1000) LRPT=LNEW+6
47294               LLIN=LLIN-LRPT
47295               NRPT=NRPT+1
47296               WRITE(CHTMP,5400) NRPT
47297               LRPT=1
47298               IF(NRPT.GE.10) LRPT=2
47299               IF(NRPT.GE.100) LRPT=3
47300               IF(NRPT.GE.1000) LRPT=4
47301               CHCOM(1:LRPT+1+LNEW)=CHTMP(17-LRPT:16)//'*'//CHNEW(1:LNEW)
47302               LCOM=LRPT+1+LNEW
47303             ENDIF
47304  
47305 C...Add characters to end of line, to new line (after storing old line),
47306 C...or to new block of lines (after writing old block).
47307             IF(LLIN+LCOM.LE.70) THEN
47308               CHLIN(LLIN+1:LLIN+LCOM+1)=CHCOM(1:LCOM)//','
47309               LLIN=LLIN+LCOM+1
47310             ELSEIF(NLIN.LE.19) THEN
47311               CHLIN(LLIN+1:72)=' '
47312               CHBLK(NLIN)=CHLIN
47313               NLIN=NLIN+1
47314               CHLIN(6:6+LCOM+1)='&'//CHCOM(1:LCOM)//','
47315               LLIN=6+LCOM+1
47316             ELSE
47317               CHLIN(LLIN:72)='/'//' '
47318               CHBLK(NLIN)=CHLIN
47319               WRITE(CHTMP,5400) IDIM-NRPT
47320               CHBLK(1)(30:33)=CHTMP(13:16)
47321               DO 270 ILIN=1,NLIN
47322                 WRITE(LFN,5700) CHBLK(ILIN)
47323   270         CONTINUE
47324               NLIN=1
47325               CHLIN=' '
47326               CHLIN(7:35+LCOM+1)='DATA ('//CHVAR(IVAR)//
47327      &        ',I=    ,    )/'//CHCOM(1:LCOM)//','
47328               WRITE(CHTMP,5400) IDIM-NRPT+1
47329               CHLIN(25:28)=CHTMP(13:16)
47330               LLIN=35+LCOM+1
47331             ENDIF
47332   280     CONTINUE
47333  
47334 C...Write final block of lines.
47335           CHLIN(LLIN:72)='/'//' '
47336           CHBLK(NLIN)=CHLIN
47337           WRITE(CHTMP,5400) NDIM
47338           CHBLK(1)(30:33)=CHTMP(13:16)
47339           DO 290 ILIN=1,NLIN
47340             WRITE(LFN,5700) CHBLK(ILIN)
47341   290     CONTINUE
47342   300   CONTINUE
47343       ENDIF
47344  
47345 C...Formats for reading and writing particle data.
47346  5000 FORMAT(1X,I9,2X,A16,2X,A16,3I3,3F12.5,1P,E13.5,2I3)
47347  5100 FORMAT(10X,2I5,F12.6,5I10)
47348  5200 FORMAT(A120)
47349  5300 FORMAT(I9)
47350  5400 FORMAT(I16)
47351  5500 FORMAT(F16.5)
47352  5600 FORMAT(F16.6)
47353  5700 FORMAT(A72)
47354  
47355       RETURN
47356       END
47357  
47358 C*********************************************************************
47359  
47360 C...PYK
47361 C...Provides various integer-valued event related data.
47362  
47363       FUNCTION PYK(I,J)
47364  
47365 C...Double precision and integer declarations.
47366       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47367       IMPLICIT INTEGER(I-N)
47368       INTEGER PYK,PYCHGE,PYCOMP
47369 C...Commonblocks.
47370       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47371       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47372       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47373       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47374  
47375 C...Default value. For I=0 number of entries, number of stable entries
47376 C...or 3 times total charge.
47377       PYK=0
47378       IF(I.LT.0.OR.I.GT.MSTU(4).OR.J.LE.0) THEN
47379       ELSEIF(I.EQ.0.AND.J.EQ.1) THEN
47380         PYK=N
47381       ELSEIF(I.EQ.0.AND.(J.EQ.2.OR.J.EQ.6)) THEN
47382         DO 100 I1=1,N
47383           IF(J.EQ.2.AND.K(I1,1).GE.1.AND.K(I1,1).LE.10) PYK=PYK+1
47384           IF(J.EQ.6.AND.K(I1,1).GE.1.AND.K(I1,1).LE.10) PYK=PYK+
47385      &    PYCHGE(K(I1,2))
47386   100   CONTINUE
47387       ELSEIF(I.EQ.0) THEN
47388  
47389 C...For I > 0 direct readout of K matrix or charge.
47390       ELSEIF(J.LE.5) THEN
47391         PYK=K(I,J)
47392       ELSEIF(J.EQ.6) THEN
47393         PYK=PYCHGE(K(I,2))
47394  
47395 C...Status (existing/fragmented/decayed), parton/hadron separation.
47396       ELSEIF(J.LE.8) THEN
47397         IF(K(I,1).GE.1.AND.K(I,1).LE.10) PYK=1
47398         IF(J.EQ.8) PYK=PYK*K(I,2)
47399       ELSEIF(J.LE.12) THEN
47400         KFA=IABS(K(I,2))
47401         KC=PYCOMP(KFA)
47402         KQ=0
47403         IF(KC.NE.0) KQ=KCHG(KC,2)
47404         IF(J.EQ.9.AND.KC.NE.0.AND.KQ.NE.0) PYK=K(I,2)
47405         IF(J.EQ.10.AND.KC.NE.0.AND.KQ.EQ.0) PYK=K(I,2)
47406         IF(J.EQ.11) PYK=KC
47407         IF(J.EQ.12) PYK=KQ*ISIGN(1,K(I,2))
47408  
47409 C...Heaviest flavour in hadron/diquark.
47410       ELSEIF(J.EQ.13) THEN
47411         KFA=IABS(K(I,2))
47412         PYK=MOD(KFA/100,10)*(-1)**MOD(KFA/100,10)
47413         IF(KFA.LT.10) PYK=KFA
47414         IF(MOD(KFA/1000,10).NE.0) PYK=MOD(KFA/1000,10)
47415         PYK=PYK*ISIGN(1,K(I,2))
47416  
47417 C...Particle history: generation, ancestor, rank.
47418       ELSEIF(J.LE.15) THEN
47419         I2=I
47420         I1=I
47421   110   PYK=PYK+1
47422         I2=I1
47423         I1=K(I1,3)
47424         IF(I1.GT.0) THEN
47425           IF(K(I1,1).GT.0.AND.K(I1,1).LE.20) GOTO 110
47426         ENDIF
47427         IF(J.EQ.15) PYK=I2
47428       ELSEIF(J.EQ.16) THEN
47429         KFA=IABS(K(I,2))
47430         IF(K(I,1).LE.20.AND.((KFA.GE.11.AND.KFA.LE.20).OR.KFA.EQ.22.OR.
47431      &  (KFA.GT.100.AND.MOD(KFA/10,10).NE.0))) THEN
47432           I1=I
47433   120     I2=I1
47434           I1=K(I1,3)
47435           IF(I1.GT.0) THEN
47436             KFAM=IABS(K(I1,2))
47437             ILP=1
47438             IF(KFAM.NE.0.AND.KFAM.LE.10) ILP=0
47439             IF(KFAM.EQ.21.OR.KFAM.EQ.91.OR.KFAM.EQ.92.OR.KFAM.EQ.93)
47440      &      ILP=0
47441             IF(KFAM.GT.100.AND.MOD(KFAM/10,10).EQ.0) ILP=0
47442             IF(ILP.EQ.1) GOTO 120
47443           ENDIF
47444           IF(K(I1,1).EQ.12) THEN
47445             DO 130 I3=I1+1,I2
47446               IF(K(I3,3).EQ.K(I2,3).AND.K(I3,2).NE.91.AND.K(I3,2).NE.92
47447      &        .AND.K(I3,2).NE.93) PYK=PYK+1
47448   130       CONTINUE
47449           ELSE
47450             I3=I2
47451   140       PYK=PYK+1
47452             I3=I3+1
47453             IF(I3.LT.N.AND.K(I3,3).EQ.K(I2,3)) GOTO 140
47454           ENDIF
47455         ENDIF
47456  
47457 C...Particle coming from collapsing jet system or not.
47458       ELSEIF(J.EQ.17) THEN
47459         I1=I
47460   150   PYK=PYK+1
47461         I3=I1
47462         I1=K(I1,3)
47463         I0=MAX(1,I1)
47464         KC=PYCOMP(K(I0,2))
47465         IF(I1.EQ.0.OR.K(I0,1).LE.0.OR.K(I0,1).GT.20.OR.KC.EQ.0) THEN
47466           IF(PYK.EQ.1) PYK=-1
47467           IF(PYK.GT.1) PYK=0
47468           RETURN
47469         ENDIF
47470         IF(KCHG(KC,2).EQ.0) GOTO 150
47471         IF(K(I1,1).NE.12) PYK=0
47472         IF(K(I1,1).NE.12) RETURN
47473         I2=I1
47474   160   I2=I2+1
47475         IF(I2.LT.N.AND.K(I2,1).NE.11) GOTO 160
47476         K3M=K(I3-1,3)
47477         IF(K3M.GE.I1.AND.K3M.LE.I2) PYK=0
47478         K3P=K(I3+1,3)
47479         IF(I3.LT.N.AND.K3P.GE.I1.AND.K3P.LE.I2) PYK=0
47480  
47481 C...Number of decay products. Colour flow.
47482       ELSEIF(J.EQ.18) THEN
47483         IF(K(I,1).EQ.11.OR.K(I,1).EQ.12) PYK=MAX(0,K(I,5)-K(I,4)+1)
47484         IF(K(I,4).EQ.0.OR.K(I,5).EQ.0) PYK=0
47485       ELSEIF(J.LE.22) THEN
47486         IF(K(I,1).NE.3.AND.K(I,1).NE.13.AND.K(I,1).NE.14) RETURN
47487         IF(J.EQ.19) PYK=MOD(K(I,4)/MSTU(5),MSTU(5))
47488         IF(J.EQ.20) PYK=MOD(K(I,5)/MSTU(5),MSTU(5))
47489         IF(J.EQ.21) PYK=MOD(K(I,4),MSTU(5))
47490         IF(J.EQ.22) PYK=MOD(K(I,5),MSTU(5))
47491       ELSE
47492       ENDIF
47493  
47494       RETURN
47495       END
47496  
47497 C*********************************************************************
47498  
47499 C...PYP
47500 C...Provides various real-valued event related data.
47501  
47502       FUNCTION PYP(I,J)
47503  
47504 C...Double precision and integer declarations.
47505       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47506       IMPLICIT INTEGER(I-N)
47507       INTEGER PYK,PYCHGE,PYCOMP
47508 C...Commonblocks.
47509       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47510       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47511       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47512       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47513 C...Local array.
47514       DIMENSION PSUM(4)
47515  
47516 C...Set default value. For I = 0 sum of momenta or charges,
47517 C...or invariant mass of system.
47518       PYP=0D0
47519       IF(I.LT.0.OR.I.GT.MSTU(4).OR.J.LE.0) THEN
47520       ELSEIF(I.EQ.0.AND.J.LE.4) THEN
47521         DO 100 I1=1,N
47522           IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PYP=PYP+P(I1,J)
47523   100   CONTINUE
47524       ELSEIF(I.EQ.0.AND.J.EQ.5) THEN
47525         DO 120 J1=1,4
47526           PSUM(J1)=0D0
47527           DO 110 I1=1,N
47528             IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PSUM(J1)=PSUM(J1)+
47529      &      P(I1,J1)
47530   110     CONTINUE
47531   120   CONTINUE
47532         PYP=SQRT(MAX(0D0,PSUM(4)**2-PSUM(1)**2-PSUM(2)**2-PSUM(3)**2))
47533       ELSEIF(I.EQ.0.AND.J.EQ.6) THEN
47534         DO 130 I1=1,N
47535           IF(K(I1,1).GT.0.AND.K(I1,1).LE.10) PYP=PYP+PYCHGE(K(I1,2))/3D0
47536   130   CONTINUE
47537       ELSEIF(I.EQ.0) THEN
47538  
47539 C...Direct readout of P matrix.
47540       ELSEIF(J.LE.5) THEN
47541         PYP=P(I,J)
47542  
47543 C...Charge, total momentum, transverse momentum, transverse mass.
47544       ELSEIF(J.LE.12) THEN
47545         IF(J.EQ.6) PYP=PYCHGE(K(I,2))/3D0
47546         IF(J.EQ.7.OR.J.EQ.8) PYP=P(I,1)**2+P(I,2)**2+P(I,3)**2
47547         IF(J.EQ.9.OR.J.EQ.10) PYP=P(I,1)**2+P(I,2)**2
47548         IF(J.EQ.11.OR.J.EQ.12) PYP=P(I,5)**2+P(I,1)**2+P(I,2)**2
47549         IF(J.EQ.8.OR.J.EQ.10.OR.J.EQ.12) PYP=SQRT(PYP)
47550  
47551 C...Theta and phi angle in radians or degrees.
47552       ELSEIF(J.LE.16) THEN
47553         IF(J.LE.14) PYP=PYANGL(P(I,3),SQRT(P(I,1)**2+P(I,2)**2))
47554         IF(J.GE.15) PYP=PYANGL(P(I,1),P(I,2))
47555         IF(J.EQ.14.OR.J.EQ.16) PYP=PYP*180D0/PARU(1)
47556  
47557 C...True rapidity, rapidity with pion mass, pseudorapidity.
47558       ELSEIF(J.LE.19) THEN
47559         PMR=0D0
47560         IF(J.EQ.17) PMR=P(I,5)
47561         IF(J.EQ.18) PMR=PYMASS(211)
47562         PR=MAX(1D-20,PMR**2+P(I,1)**2+P(I,2)**2)
47563         PYP=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/SQRT(PR),
47564      &  1D20)),P(I,3))
47565  
47566 C...Energy and momentum fractions (only to be used in CM frame).
47567       ELSEIF(J.LE.25) THEN
47568         IF(J.EQ.20) PYP=2D0*SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)/PARU(21)
47569         IF(J.EQ.21) PYP=2D0*P(I,3)/PARU(21)
47570         IF(J.EQ.22) PYP=2D0*SQRT(P(I,1)**2+P(I,2)**2)/PARU(21)
47571         IF(J.EQ.23) PYP=2D0*P(I,4)/PARU(21)
47572         IF(J.EQ.24) PYP=(P(I,4)+P(I,3))/PARU(21)
47573         IF(J.EQ.25) PYP=(P(I,4)-P(I,3))/PARU(21)
47574       ENDIF
47575  
47576       RETURN
47577       END
47578  
47579 C*********************************************************************
47580  
47581 C...PYSPHE
47582 C...Performs sphericity tensor analysis to give sphericity,
47583 C...aplanarity and the related event axes.
47584  
47585       SUBROUTINE PYSPHE(SPH,APL)
47586  
47587 C...Double precision and integer declarations.
47588       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47589       IMPLICIT INTEGER(I-N)
47590       INTEGER PYK,PYCHGE,PYCOMP
47591 C...Commonblocks.
47592       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47593       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47594       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47595       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47596 C...Local arrays.
47597       DIMENSION SM(3,3),SV(3,3)
47598  
47599 C...Calculate matrix to be diagonalized.
47600       NP=0
47601       DO 110 J1=1,3
47602         DO 100 J2=J1,3
47603           SM(J1,J2)=0D0
47604   100   CONTINUE
47605   110 CONTINUE
47606       PS=0D0
47607       DO 140 I=1,N
47608         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 140
47609         IF(MSTU(41).GE.2) THEN
47610           KC=PYCOMP(K(I,2))
47611           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
47612      &    KC.EQ.18) GOTO 140
47613           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
47614      &    GOTO 140
47615         ENDIF
47616         NP=NP+1
47617         PA=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
47618         PWT=1D0
47619         IF(ABS(PARU(41)-2D0).GT.0.001D0) PWT=
47620      &  MAX(1D-10,PA)**(PARU(41)-2D0)
47621         DO 130 J1=1,3
47622           DO 120 J2=J1,3
47623             SM(J1,J2)=SM(J1,J2)+PWT*P(I,J1)*P(I,J2)
47624   120     CONTINUE
47625   130   CONTINUE
47626         PS=PS+PWT*PA**2
47627   140 CONTINUE
47628  
47629 C...Very low multiplicities (0 or 1) not considered.
47630       IF(NP.LE.1) THEN
47631         CALL PYERRM(8,'(PYSPHE:) too few particles for analysis')
47632         SPH=-1D0
47633         APL=-1D0
47634         RETURN
47635       ENDIF
47636       DO 160 J1=1,3
47637         DO 150 J2=J1,3
47638           SM(J1,J2)=SM(J1,J2)/PS
47639   150   CONTINUE
47640   160 CONTINUE
47641  
47642 C...Find eigenvalues to matrix (third degree equation).
47643       SQ=(SM(1,1)*SM(2,2)+SM(1,1)*SM(3,3)+SM(2,2)*SM(3,3)-
47644      &SM(1,2)**2-SM(1,3)**2-SM(2,3)**2)/3D0-1D0/9D0
47645       SR=-0.5D0*(SQ+1D0/9D0+SM(1,1)*SM(2,3)**2+SM(2,2)*SM(1,3)**2+
47646      &SM(3,3)*SM(1,2)**2-SM(1,1)*SM(2,2)*SM(3,3))+
47647      &SM(1,2)*SM(1,3)*SM(2,3)+1D0/27D0
47648       SP=COS(ACOS(MAX(MIN(SR/SQRT(-SQ**3),1D0),-1D0))/3D0)
47649       P(N+1,4)=1D0/3D0+SQRT(-SQ)*MAX(2D0*SP,SQRT(3D0*(1D0-SP**2))-SP)
47650       P(N+3,4)=1D0/3D0+SQRT(-SQ)*MIN(2D0*SP,-SQRT(3D0*(1D0-SP**2))-SP)
47651       P(N+2,4)=1D0-P(N+1,4)-P(N+3,4)
47652       IF(P(N+2,4).LT.1D-5) THEN
47653         CALL PYERRM(8,'(PYSPHE:) all particles back-to-back')
47654         SPH=-1D0
47655         APL=-1D0
47656         RETURN
47657       ENDIF
47658  
47659 C...Find first and last eigenvector by solving equation system.
47660       DO 240 I=1,3,2
47661         DO 180 J1=1,3
47662           SV(J1,J1)=SM(J1,J1)-P(N+I,4)
47663           DO 170 J2=J1+1,3
47664             SV(J1,J2)=SM(J1,J2)
47665             SV(J2,J1)=SM(J1,J2)
47666   170     CONTINUE
47667   180   CONTINUE
47668         SMAX=0D0
47669         DO 200 J1=1,3
47670           DO 190 J2=1,3
47671             IF(ABS(SV(J1,J2)).LE.SMAX) GOTO 190
47672             JA=J1
47673             JB=J2
47674             SMAX=ABS(SV(J1,J2))
47675   190     CONTINUE
47676   200   CONTINUE
47677         SMAX=0D0
47678         DO 220 J3=JA+1,JA+2
47679           J1=J3-3*((J3-1)/3)
47680           RL=SV(J1,JB)/SV(JA,JB)
47681           DO 210 J2=1,3
47682             SV(J1,J2)=SV(J1,J2)-RL*SV(JA,J2)
47683             IF(ABS(SV(J1,J2)).LE.SMAX) GOTO 210
47684             JC=J1
47685             SMAX=ABS(SV(J1,J2))
47686   210     CONTINUE
47687   220   CONTINUE
47688         JB1=JB+1-3*(JB/3)
47689         JB2=JB+2-3*((JB+1)/3)
47690         P(N+I,JB1)=-SV(JC,JB2)
47691         P(N+I,JB2)=SV(JC,JB1)
47692         P(N+I,JB)=-(SV(JA,JB1)*P(N+I,JB1)+SV(JA,JB2)*P(N+I,JB2))/
47693      &  SV(JA,JB)
47694         PA=SQRT(P(N+I,1)**2+P(N+I,2)**2+P(N+I,3)**2)
47695         SGN=(-1D0)**INT(PYR(0)+0.5D0)
47696         DO 230 J=1,3
47697           P(N+I,J)=SGN*P(N+I,J)/PA
47698   230   CONTINUE
47699   240 CONTINUE
47700  
47701 C...Middle axis orthogonal to other two. Fill other codes.
47702       SGN=(-1D0)**INT(PYR(0)+0.5D0)
47703       P(N+2,1)=SGN*(P(N+1,2)*P(N+3,3)-P(N+1,3)*P(N+3,2))
47704       P(N+2,2)=SGN*(P(N+1,3)*P(N+3,1)-P(N+1,1)*P(N+3,3))
47705       P(N+2,3)=SGN*(P(N+1,1)*P(N+3,2)-P(N+1,2)*P(N+3,1))
47706       DO 260 I=1,3
47707         K(N+I,1)=31
47708         K(N+I,2)=95
47709         K(N+I,3)=I
47710         K(N+I,4)=0
47711         K(N+I,5)=0
47712         P(N+I,5)=0D0
47713         DO 250 J=1,5
47714           V(I,J)=0D0
47715   250   CONTINUE
47716   260 CONTINUE
47717  
47718 C...Calculate sphericity and aplanarity. Select storing option.
47719       SPH=1.5D0*(P(N+2,4)+P(N+3,4))
47720       APL=1.5D0*P(N+3,4)
47721       MSTU(61)=N+1
47722       MSTU(62)=NP
47723       IF(MSTU(43).LE.1) MSTU(3)=3
47724       IF(MSTU(43).GE.2) N=N+3
47725  
47726       RETURN
47727       END
47728  
47729 C*********************************************************************
47730  
47731 C...PYTHRU
47732 C...Performs thrust analysis to give thrust, oblateness
47733 C...and the related event axes.
47734  
47735       SUBROUTINE PYTHRU(THR,OBL)
47736  
47737 C...Double precision and integer declarations.
47738       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47739       IMPLICIT INTEGER(I-N)
47740       INTEGER PYK,PYCHGE,PYCOMP
47741 C...Commonblocks.
47742       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47743       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47744       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47745       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47746 C...Local arrays.
47747       DIMENSION TDI(3),TPR(3)
47748  
47749 C...Take copy of particles that are to be considered in thrust analysis.
47750       NP=0
47751       PS=0D0
47752       DO 100 I=1,N
47753         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 100
47754         IF(MSTU(41).GE.2) THEN
47755           KC=PYCOMP(K(I,2))
47756           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
47757      &    KC.EQ.18) GOTO 100
47758           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
47759      &    GOTO 100
47760         ENDIF
47761         IF(N+NP+MSTU(44)+15.GE.MSTU(4)-MSTU(32)-5) THEN
47762           CALL PYERRM(11,'(PYTHRU:) no more memory left in PYJETS')
47763           THR=-2D0
47764           OBL=-2D0
47765           RETURN
47766         ENDIF
47767         NP=NP+1
47768         K(N+NP,1)=23
47769         P(N+NP,1)=P(I,1)
47770         P(N+NP,2)=P(I,2)
47771         P(N+NP,3)=P(I,3)
47772         P(N+NP,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
47773         P(N+NP,5)=1D0
47774         IF(ABS(PARU(42)-1D0).GT.0.001D0) P(N+NP,5)=
47775      &  P(N+NP,4)**(PARU(42)-1D0)
47776         PS=PS+P(N+NP,4)*P(N+NP,5)
47777   100 CONTINUE
47778  
47779 C...Very low multiplicities (0 or 1) not considered.
47780       IF(NP.LE.1) THEN
47781         CALL PYERRM(8,'(PYTHRU:) too few particles for analysis')
47782         THR=-1D0
47783         OBL=-1D0
47784         RETURN
47785       ENDIF
47786  
47787 C...Loop over thrust and major. T axis along z direction in latter case.
47788       DO 320 ILD=1,2
47789         IF(ILD.EQ.2) THEN
47790           K(N+NP+1,1)=31
47791           PHI=PYANGL(P(N+NP+1,1),P(N+NP+1,2))
47792           MSTU(33)=1
47793           CALL PYROBO(N+1,N+NP+1,0D0,-PHI,0D0,0D0,0D0)
47794           THE=PYANGL(P(N+NP+1,3),P(N+NP+1,1))
47795           CALL PYROBO(N+1,N+NP+1,-THE,0D0,0D0,0D0,0D0)
47796         ENDIF
47797  
47798 C...Find and order particles with highest p (pT for major).
47799         DO 110 ILF=N+NP+4,N+NP+MSTU(44)+4
47800           P(ILF,4)=0D0
47801   110   CONTINUE
47802         DO 160 I=N+1,N+NP
47803           IF(ILD.EQ.2) P(I,4)=SQRT(P(I,1)**2+P(I,2)**2)
47804           DO 130 ILF=N+NP+MSTU(44)+3,N+NP+4,-1
47805             IF(P(I,4).LE.P(ILF,4)) GOTO 140
47806             DO 120 J=1,5
47807               P(ILF+1,J)=P(ILF,J)
47808   120       CONTINUE
47809   130     CONTINUE
47810           ILF=N+NP+3
47811   140     DO 150 J=1,5
47812             P(ILF+1,J)=P(I,J)
47813   150     CONTINUE
47814   160   CONTINUE
47815  
47816 C...Find and order initial axes with highest thrust (major).
47817         DO 170 ILG=N+NP+MSTU(44)+5,N+NP+MSTU(44)+15
47818           P(ILG,4)=0D0
47819   170   CONTINUE
47820         NC=2**(MIN(MSTU(44),NP)-1)
47821         DO 250 ILC=1,NC
47822           DO 180 J=1,3
47823             TDI(J)=0D0
47824   180     CONTINUE
47825           DO 200 ILF=1,MIN(MSTU(44),NP)
47826             SGN=P(N+NP+ILF+3,5)
47827             IF(2**ILF*((ILC+2**(ILF-1)-1)/2**ILF).GE.ILC) SGN=-SGN
47828             DO 190 J=1,4-ILD
47829               TDI(J)=TDI(J)+SGN*P(N+NP+ILF+3,J)
47830   190       CONTINUE
47831   200     CONTINUE
47832           TDS=TDI(1)**2+TDI(2)**2+TDI(3)**2
47833           DO 220 ILG=N+NP+MSTU(44)+MIN(ILC,10)+4,N+NP+MSTU(44)+5,-1
47834             IF(TDS.LE.P(ILG,4)) GOTO 230
47835             DO 210 J=1,4
47836               P(ILG+1,J)=P(ILG,J)
47837   210       CONTINUE
47838   220     CONTINUE
47839           ILG=N+NP+MSTU(44)+4
47840   230     DO 240 J=1,3
47841             P(ILG+1,J)=TDI(J)
47842   240     CONTINUE
47843           P(ILG+1,4)=TDS
47844   250   CONTINUE
47845  
47846 C...Iterate direction of axis until stable maximum.
47847         P(N+NP+ILD,4)=0D0
47848         ILG=0
47849   260   ILG=ILG+1
47850         THP=0D0
47851   270   THPS=THP
47852         DO 280 J=1,3
47853           IF(THP.LE.1D-10) TDI(J)=P(N+NP+MSTU(44)+4+ILG,J)
47854           IF(THP.GT.1D-10) TDI(J)=TPR(J)
47855           TPR(J)=0D0
47856   280   CONTINUE
47857         DO 300 I=N+1,N+NP
47858           SGN=SIGN(P(I,5),TDI(1)*P(I,1)+TDI(2)*P(I,2)+TDI(3)*P(I,3))
47859           DO 290 J=1,4-ILD
47860             TPR(J)=TPR(J)+SGN*P(I,J)
47861   290     CONTINUE
47862   300   CONTINUE
47863         THP=SQRT(TPR(1)**2+TPR(2)**2+TPR(3)**2)/PS
47864         IF(THP.GE.THPS+PARU(48)) GOTO 270
47865  
47866 C...Save good axis. Try new initial axis until a number of tries agree.
47867         IF(THP.LT.P(N+NP+ILD,4)-PARU(48).AND.ILG.LT.MIN(10,NC)) GOTO 260
47868         IF(THP.GT.P(N+NP+ILD,4)+PARU(48)) THEN
47869           IAGR=0
47870           SGN=(-1D0)**INT(PYR(0)+0.5D0)
47871           DO 310 J=1,3
47872             P(N+NP+ILD,J)=SGN*TPR(J)/(PS*THP)
47873   310     CONTINUE
47874           P(N+NP+ILD,4)=THP
47875           P(N+NP+ILD,5)=0D0
47876         ENDIF
47877         IAGR=IAGR+1
47878         IF(IAGR.LT.MSTU(45).AND.ILG.LT.MIN(10,NC)) GOTO 260
47879   320 CONTINUE
47880  
47881 C...Find minor axis and value by orthogonality.
47882       SGN=(-1D0)**INT(PYR(0)+0.5D0)
47883       P(N+NP+3,1)=-SGN*P(N+NP+2,2)
47884       P(N+NP+3,2)=SGN*P(N+NP+2,1)
47885       P(N+NP+3,3)=0D0
47886       THP=0D0
47887       DO 330 I=N+1,N+NP
47888         THP=THP+P(I,5)*ABS(P(N+NP+3,1)*P(I,1)+P(N+NP+3,2)*P(I,2))
47889   330 CONTINUE
47890       P(N+NP+3,4)=THP/PS
47891       P(N+NP+3,5)=0D0
47892  
47893 C...Fill axis information. Rotate back to original coordinate system.
47894       DO 350 ILD=1,3
47895         K(N+ILD,1)=31
47896         K(N+ILD,2)=96
47897         K(N+ILD,3)=ILD
47898         K(N+ILD,4)=0
47899         K(N+ILD,5)=0
47900         DO 340 J=1,5
47901           P(N+ILD,J)=P(N+NP+ILD,J)
47902           V(N+ILD,J)=0D0
47903   340   CONTINUE
47904   350 CONTINUE
47905       CALL PYROBO(N+1,N+3,THE,PHI,0D0,0D0,0D0)
47906  
47907 C...Calculate thrust and oblateness. Select storing option.
47908       THR=P(N+1,4)
47909       OBL=P(N+2,4)-P(N+3,4)
47910       MSTU(61)=N+1
47911       MSTU(62)=NP
47912       IF(MSTU(43).LE.1) MSTU(3)=3
47913       IF(MSTU(43).GE.2) N=N+3
47914  
47915       RETURN
47916       END
47917  
47918 C*********************************************************************
47919  
47920 C...PYCLUS
47921 C...Subdivides the particle content of an event into jets/clusters.
47922  
47923       SUBROUTINE PYCLUS(NJET)
47924  
47925 C...Double precision and integer declarations.
47926       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
47927       IMPLICIT INTEGER(I-N)
47928       INTEGER PYK,PYCHGE,PYCOMP
47929 C...Commonblocks.
47930       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
47931       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
47932       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
47933       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
47934 C...Local arrays and saved variables.
47935       DIMENSION PS(5)
47936       SAVE NSAV,NP,PS,PSS,RINIT,NPRE,NREM
47937  
47938 C...Functions: distance measure in pT, (pseudo)mass or Durham pT.
47939       R2T(I1,I2)=(P(I1,5)*P(I2,5)-P(I1,1)*P(I2,1)-P(I1,2)*P(I2,2)-
47940      &P(I1,3)*P(I2,3))*2D0*P(I1,5)*P(I2,5)/(0.0001D0+P(I1,5)+P(I2,5))**2
47941       R2M(I1,I2)=2D0*P(I1,4)*P(I2,4)*(1D0-(P(I1,1)*P(I2,1)+P(I1,2)*
47942      &P(I2,2)+P(I1,3)*P(I2,3))/(P(I1,5)*P(I2,5)))
47943       R2D(I1,I2)=2D0*MIN(P(I1,4),P(I2,4))**2*(1D0-(P(I1,1)*P(I2,1)+
47944      &P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/(P(I1,5)*P(I2,5)))
47945  
47946 C...If first time, reset. If reentering, skip preliminaries.
47947       IF(MSTU(48).LE.0) THEN
47948         NP=0
47949         DO 100 J=1,5
47950           PS(J)=0D0
47951   100   CONTINUE
47952         PSS=0D0
47953         PIMASS=PMAS(PYCOMP(211),1)
47954       ELSE
47955         NJET=NSAV
47956         IF(MSTU(43).GE.2) N=N-NJET
47957         DO 110 I=N+1,N+NJET
47958           P(I,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
47959   110   CONTINUE
47960         IF(MSTU(46).LE.3.OR.MSTU(46).EQ.5) THEN
47961           R2ACC=PARU(44)**2
47962         ELSE
47963           R2ACC=PARU(45)*PS(5)**2
47964         ENDIF
47965         NLOOP=0
47966         GOTO 300
47967       ENDIF
47968  
47969 C...Find which particles are to be considered in cluster search.
47970       DO 140 I=1,N
47971         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 140
47972         IF(MSTU(41).GE.2) THEN
47973           KC=PYCOMP(K(I,2))
47974           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
47975      &    KC.EQ.18) GOTO 140
47976           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
47977      &    GOTO 140
47978         ENDIF
47979         IF(N+2*NP.GE.MSTU(4)-MSTU(32)-5) THEN
47980           CALL PYERRM(11,'(PYCLUS:) no more memory left in PYJETS')
47981           NJET=-1
47982           RETURN
47983         ENDIF
47984  
47985 C...Take copy of these particles, with space left for jets later on.
47986         NP=NP+1
47987         K(N+NP,3)=I
47988         DO 120 J=1,5
47989           P(N+NP,J)=P(I,J)
47990   120   CONTINUE
47991         IF(MSTU(42).EQ.0) P(N+NP,5)=0D0
47992         IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) P(N+NP,5)=PIMASS
47993         P(N+NP,4)=SQRT(P(N+NP,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
47994         P(N+NP,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
47995         DO 130 J=1,4
47996           PS(J)=PS(J)+P(N+NP,J)
47997   130   CONTINUE
47998         PSS=PSS+P(N+NP,5)
47999   140 CONTINUE
48000       DO 160 I=N+1,N+NP
48001         K(I+NP,3)=K(I,3)
48002         DO 150 J=1,5
48003           P(I+NP,J)=P(I,J)
48004   150   CONTINUE
48005   160 CONTINUE
48006       PS(5)=SQRT(MAX(0D0,PS(4)**2-PS(1)**2-PS(2)**2-PS(3)**2))
48007  
48008 C...Very low multiplicities not considered.
48009       IF(NP.LT.MSTU(47)) THEN
48010         CALL PYERRM(8,'(PYCLUS:) too few particles for analysis')
48011         NJET=-1
48012         RETURN
48013       ENDIF
48014  
48015 C...Find precluster configuration. If too few jets, make harder cuts.
48016       NLOOP=0
48017       IF(MSTU(46).LE.3.OR.MSTU(46).EQ.5) THEN
48018         R2ACC=PARU(44)**2
48019       ELSE
48020         R2ACC=PARU(45)*PS(5)**2
48021       ENDIF
48022       RINIT=1.25D0*PARU(43)
48023       IF(NP.LE.MSTU(47)+2) RINIT=0D0
48024   170 RINIT=0.8D0*RINIT
48025       NPRE=0
48026       NREM=NP
48027       DO 180 I=N+NP+1,N+2*NP
48028         K(I,4)=0
48029   180 CONTINUE
48030  
48031 C...Sum up small momentum region. Jet if enough absolute momentum.
48032       IF(MSTU(46).LE.2) THEN
48033         DO 190 J=1,4
48034           P(N+1,J)=0D0
48035   190   CONTINUE
48036         DO 210 I=N+NP+1,N+2*NP
48037           IF(P(I,5).GT.2D0*RINIT) GOTO 210
48038           NREM=NREM-1
48039           K(I,4)=1
48040           DO 200 J=1,4
48041             P(N+1,J)=P(N+1,J)+P(I,J)
48042   200     CONTINUE
48043   210   CONTINUE
48044         P(N+1,5)=SQRT(P(N+1,1)**2+P(N+1,2)**2+P(N+1,3)**2)
48045         IF(P(N+1,5).GT.2D0*RINIT) NPRE=1
48046         IF(RINIT.GE.0.2D0*PARU(43).AND.NPRE+NREM.LT.MSTU(47)) GOTO 170
48047         IF(NREM.EQ.0) GOTO 170
48048       ENDIF
48049  
48050 C...Find fastest remaining particle.
48051   220 NPRE=NPRE+1
48052       PMAX=0D0
48053       DO 230 I=N+NP+1,N+2*NP
48054         IF(K(I,4).NE.0.OR.P(I,5).LE.PMAX) GOTO 230
48055         IMAX=I
48056         PMAX=P(I,5)
48057   230 CONTINUE
48058       DO 240 J=1,5
48059         P(N+NPRE,J)=P(IMAX,J)
48060   240 CONTINUE
48061       NREM=NREM-1
48062       K(IMAX,4)=NPRE
48063  
48064 C...Sum up precluster around it according to pT separation.
48065       IF(MSTU(46).LE.2) THEN
48066         DO 260 I=N+NP+1,N+2*NP
48067           IF(K(I,4).NE.0) GOTO 260
48068           R2=R2T(I,IMAX)
48069           IF(R2.GT.RINIT**2) GOTO 260
48070           NREM=NREM-1
48071           K(I,4)=NPRE
48072           DO 250 J=1,4
48073             P(N+NPRE,J)=P(N+NPRE,J)+P(I,J)
48074   250     CONTINUE
48075   260   CONTINUE
48076         P(N+NPRE,5)=SQRT(P(N+NPRE,1)**2+P(N+NPRE,2)**2+P(N+NPRE,3)**2)
48077  
48078 C...Sum up precluster around it according to mass or
48079 C...Durham pT separation.
48080       ELSE
48081   270   IMIN=0
48082         R2MIN=RINIT**2
48083         DO 280 I=N+NP+1,N+2*NP
48084           IF(K(I,4).NE.0) GOTO 280
48085           IF(MSTU(46).LE.4) THEN
48086             R2=R2M(I,N+NPRE)
48087           ELSE
48088             R2=R2D(I,N+NPRE)
48089           ENDIF
48090           IF(R2.GE.R2MIN) GOTO 280
48091           IMIN=I
48092           R2MIN=R2
48093   280   CONTINUE
48094         IF(IMIN.NE.0) THEN
48095           DO 290 J=1,4
48096             P(N+NPRE,J)=P(N+NPRE,J)+P(IMIN,J)
48097   290     CONTINUE
48098           P(N+NPRE,5)=SQRT(P(N+NPRE,1)**2+P(N+NPRE,2)**2+P(N+NPRE,3)**2)
48099           NREM=NREM-1
48100           K(IMIN,4)=NPRE
48101           GOTO 270
48102         ENDIF
48103       ENDIF
48104  
48105 C...Check if more preclusters to be found. Start over if too few.
48106       IF(RINIT.GE.0.2D0*PARU(43).AND.NPRE+NREM.LT.MSTU(47)) GOTO 170
48107       IF(NREM.GT.0) GOTO 220
48108       NJET=NPRE
48109  
48110 C...Reassign all particles to nearest jet. Sum up new jet momenta.
48111   300 TSAV=0D0
48112       PSJT=0D0
48113   310 IF(MSTU(46).LE.1) THEN
48114         DO 330 I=N+1,N+NJET
48115           DO 320 J=1,4
48116             V(I,J)=0D0
48117   320     CONTINUE
48118   330   CONTINUE
48119         DO 360 I=N+NP+1,N+2*NP
48120           R2MIN=PSS**2
48121           DO 340 IJET=N+1,N+NJET
48122             IF(P(IJET,5).LT.RINIT) GOTO 340
48123             R2=R2T(I,IJET)
48124             IF(R2.GE.R2MIN) GOTO 340
48125             IMIN=IJET
48126             R2MIN=R2
48127   340     CONTINUE
48128           K(I,4)=IMIN-N
48129           DO 350 J=1,4
48130             V(IMIN,J)=V(IMIN,J)+P(I,J)
48131   350     CONTINUE
48132   360   CONTINUE
48133         PSJT=0D0
48134         DO 380 I=N+1,N+NJET
48135           DO 370 J=1,4
48136             P(I,J)=V(I,J)
48137   370     CONTINUE
48138           P(I,5)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
48139           PSJT=PSJT+P(I,5)
48140   380   CONTINUE
48141       ENDIF
48142  
48143 C...Find two closest jets.
48144       R2MIN=2D0*MAX(R2ACC,PS(5)**2)
48145       DO 400 ITRY1=N+1,N+NJET-1
48146         DO 390 ITRY2=ITRY1+1,N+NJET
48147           IF(MSTU(46).LE.2) THEN
48148             R2=R2T(ITRY1,ITRY2)
48149           ELSEIF(MSTU(46).LE.4) THEN
48150             R2=R2M(ITRY1,ITRY2)
48151           ELSE
48152             R2=R2D(ITRY1,ITRY2)
48153           ENDIF
48154           IF(R2.GE.R2MIN) GOTO 390
48155           IMIN1=ITRY1
48156           IMIN2=ITRY2
48157           R2MIN=R2
48158   390   CONTINUE
48159   400 CONTINUE
48160  
48161 C...If allowed, join two closest jets and start over.
48162       IF(NJET.GT.MSTU(47).AND.R2MIN.LT.R2ACC) THEN
48163         IREC=MIN(IMIN1,IMIN2)
48164         IDEL=MAX(IMIN1,IMIN2)
48165         DO 410 J=1,4
48166           P(IREC,J)=P(IMIN1,J)+P(IMIN2,J)
48167   410   CONTINUE
48168         P(IREC,5)=SQRT(P(IREC,1)**2+P(IREC,2)**2+P(IREC,3)**2)
48169         DO 430 I=IDEL+1,N+NJET
48170           DO 420 J=1,5
48171             P(I-1,J)=P(I,J)
48172   420     CONTINUE
48173   430   CONTINUE
48174         IF(MSTU(46).GE.2) THEN
48175           DO 440 I=N+NP+1,N+2*NP
48176             IORI=N+K(I,4)
48177             IF(IORI.EQ.IDEL) K(I,4)=IREC-N
48178             IF(IORI.GT.IDEL) K(I,4)=K(I,4)-1
48179   440     CONTINUE
48180         ENDIF
48181         NJET=NJET-1
48182         GOTO 300
48183  
48184 C...Divide up broad jet if empty cluster in list of final ones.
48185       ELSEIF(NJET.EQ.MSTU(47).AND.MSTU(46).LE.1.AND.NLOOP.LE.2) THEN
48186         DO 450 I=N+1,N+NJET
48187           K(I,5)=0
48188   450   CONTINUE
48189         DO 460 I=N+NP+1,N+2*NP
48190           K(N+K(I,4),5)=K(N+K(I,4),5)+1
48191   460   CONTINUE
48192         IEMP=0
48193         DO 470 I=N+1,N+NJET
48194           IF(K(I,5).EQ.0) IEMP=I
48195   470   CONTINUE
48196         IF(IEMP.NE.0) THEN
48197           NLOOP=NLOOP+1
48198           ISPL=0
48199           R2MAX=0D0
48200           DO 480 I=N+NP+1,N+2*NP
48201             IF(K(N+K(I,4),5).LE.1.OR.P(I,5).LT.RINIT) GOTO 480
48202             IJET=N+K(I,4)
48203             R2=R2T(I,IJET)
48204             IF(R2.LE.R2MAX) GOTO 480
48205             ISPL=I
48206             R2MAX=R2
48207   480     CONTINUE
48208           IF(ISPL.NE.0) THEN
48209             IJET=N+K(ISPL,4)
48210             DO 490 J=1,4
48211               P(IEMP,J)=P(ISPL,J)
48212               P(IJET,J)=P(IJET,J)-P(ISPL,J)
48213   490       CONTINUE
48214             P(IEMP,5)=P(ISPL,5)
48215             P(IJET,5)=SQRT(P(IJET,1)**2+P(IJET,2)**2+P(IJET,3)**2)
48216             IF(NLOOP.LE.2) GOTO 300
48217           ENDIF
48218         ENDIF
48219       ENDIF
48220  
48221 C...If generalized thrust has not yet converged, continue iteration.
48222       IF(MSTU(46).LE.1.AND.NLOOP.LE.2.AND.PSJT/PSS.GT.TSAV+PARU(48))
48223      &THEN
48224         TSAV=PSJT/PSS
48225         GOTO 310
48226       ENDIF
48227  
48228 C...Reorder jets according to energy.
48229       DO 510 I=N+1,N+NJET
48230         DO 500 J=1,5
48231           V(I,J)=P(I,J)
48232   500   CONTINUE
48233   510 CONTINUE
48234       DO 540 INEW=N+1,N+NJET
48235         PEMAX=0D0
48236         DO 520 ITRY=N+1,N+NJET
48237           IF(V(ITRY,4).LE.PEMAX) GOTO 520
48238           IMAX=ITRY
48239           PEMAX=V(ITRY,4)
48240   520   CONTINUE
48241         K(INEW,1)=31
48242         K(INEW,2)=97
48243         K(INEW,3)=INEW-N
48244         K(INEW,4)=0
48245         DO 530 J=1,5
48246           P(INEW,J)=V(IMAX,J)
48247   530   CONTINUE
48248         V(IMAX,4)=-1D0
48249         K(IMAX,5)=INEW
48250   540 CONTINUE
48251  
48252 C...Clean up particle-jet assignments and jet information.
48253       DO 550 I=N+NP+1,N+2*NP
48254         IORI=K(N+K(I,4),5)
48255         K(I,4)=IORI-N
48256         IF(K(K(I,3),1).NE.3) K(K(I,3),4)=IORI-N
48257         K(IORI,4)=K(IORI,4)+1
48258   550 CONTINUE
48259       IEMP=0
48260       PSJT=0D0
48261       DO 570 I=N+1,N+NJET
48262         K(I,5)=0
48263         PSJT=PSJT+P(I,5)
48264         P(I,5)=SQRT(MAX(P(I,4)**2-P(I,5)**2,0D0))
48265         DO 560 J=1,5
48266           V(I,J)=0D0
48267   560   CONTINUE
48268         IF(K(I,4).EQ.0) IEMP=I
48269   570 CONTINUE
48270  
48271 C...Select storing option. Output variables. Check for failure.
48272       MSTU(61)=N+1
48273       MSTU(62)=NP
48274       MSTU(63)=NPRE
48275       PARU(61)=PS(5)
48276       PARU(62)=PSJT/PSS
48277       PARU(63)=SQRT(R2MIN)
48278       IF(NJET.LE.1) PARU(63)=0D0
48279       IF(IEMP.NE.0) THEN
48280         CALL PYERRM(8,'(PYCLUS:) failed to reconstruct as requested')
48281         NJET=-1
48282         RETURN
48283       ENDIF
48284       IF(MSTU(43).LE.1) MSTU(3)=MAX(0,NJET)
48285       IF(MSTU(43).GE.2) N=N+MAX(0,NJET)
48286       NSAV=NJET
48287  
48288       RETURN
48289       END
48290  
48291 C*********************************************************************
48292  
48293 C...PYCELL
48294 C...Provides a simple way of jet finding in eta-phi-ET coordinates,
48295 C...as used for calorimeters at hadron colliders.
48296  
48297       SUBROUTINE PYCELL(NJET)
48298  
48299 C...Double precision and integer declarations.
48300       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
48301       IMPLICIT INTEGER(I-N)
48302       INTEGER PYK,PYCHGE,PYCOMP
48303 C...Commonblocks.
48304       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
48305       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
48306       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
48307       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
48308  
48309 C...Loop over all particles. Find cell that was hit by given particle.
48310       PTLRAT=1D0/SINH(PARU(51))**2
48311       NP=0
48312       NC=N
48313       DO 110 I=1,N
48314         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 110
48315         IF(P(I,1)**2+P(I,2)**2.LE.PTLRAT*P(I,3)**2) GOTO 110
48316         IF(MSTU(41).GE.2) THEN
48317           KC=PYCOMP(K(I,2))
48318           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
48319      &    KC.EQ.18) GOTO 110
48320           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
48321      &    GOTO 110
48322         ENDIF
48323         NP=NP+1
48324         PT=SQRT(P(I,1)**2+P(I,2)**2)
48325         ETA=SIGN(LOG((SQRT(PT**2+P(I,3)**2)+ABS(P(I,3)))/PT),P(I,3))
48326         IETA=MAX(1,MIN(MSTU(51),1+INT(MSTU(51)*0.5D0*
48327      &  (ETA/PARU(51)+1D0))))
48328         PHI=PYANGL(P(I,1),P(I,2))
48329         IPHI=MAX(1,MIN(MSTU(52),1+INT(MSTU(52)*0.5D0*
48330      &  (PHI/PARU(1)+1D0))))
48331         IETPH=MSTU(52)*IETA+IPHI
48332  
48333 C...Add to cell already hit, or book new cell.
48334         DO 100 IC=N+1,NC
48335           IF(IETPH.EQ.K(IC,3)) THEN
48336             K(IC,4)=K(IC,4)+1
48337             P(IC,5)=P(IC,5)+PT
48338             GOTO 110
48339           ENDIF
48340   100   CONTINUE
48341         IF(NC.GE.MSTU(4)-MSTU(32)-5) THEN
48342           CALL PYERRM(11,'(PYCELL:) no more memory left in PYJETS')
48343           NJET=-2
48344           RETURN
48345         ENDIF
48346         NC=NC+1
48347         K(NC,3)=IETPH
48348         K(NC,4)=1
48349         K(NC,5)=2
48350         P(NC,1)=(PARU(51)/MSTU(51))*(2*IETA-1-MSTU(51))
48351         P(NC,2)=(PARU(1)/MSTU(52))*(2*IPHI-1-MSTU(52))
48352         P(NC,5)=PT
48353   110 CONTINUE
48354  
48355 C...Smear true bin content by calorimeter resolution.
48356       IF(MSTU(53).GE.1) THEN
48357         DO 130 IC=N+1,NC
48358           PEI=P(IC,5)
48359           IF(MSTU(53).EQ.2) PEI=P(IC,5)*COSH(P(IC,1))
48360   120     PEF=PEI+PARU(55)*SQRT(-2D0*LOG(MAX(1D-10,PYR(0)))*PEI)*
48361      &    COS(PARU(2)*PYR(0))
48362           IF(PEF.LT.0D0.OR.PEF.GT.PARU(56)*PEI) GOTO 120
48363           P(IC,5)=PEF
48364           IF(MSTU(53).EQ.2) P(IC,5)=PEF/COSH(P(IC,1))
48365   130   CONTINUE
48366       ENDIF
48367  
48368 C...Remove cells below threshold.
48369       IF(PARU(58).GT.0D0) THEN
48370         NCC=NC
48371         NC=N
48372         DO 140 IC=N+1,NCC
48373           IF(P(IC,5).GT.PARU(58)) THEN
48374             NC=NC+1
48375             K(NC,3)=K(IC,3)
48376             K(NC,4)=K(IC,4)
48377             K(NC,5)=K(IC,5)
48378             P(NC,1)=P(IC,1)
48379             P(NC,2)=P(IC,2)
48380             P(NC,5)=P(IC,5)
48381           ENDIF
48382   140   CONTINUE
48383       ENDIF
48384  
48385 C...Find initiator cell: the one with highest pT of not yet used ones.
48386       NJ=NC
48387   150 ETMAX=0D0
48388       DO 160 IC=N+1,NC
48389         IF(K(IC,5).NE.2) GOTO 160
48390         IF(P(IC,5).LE.ETMAX) GOTO 160
48391         ICMAX=IC
48392         ETA=P(IC,1)
48393         PHI=P(IC,2)
48394         ETMAX=P(IC,5)
48395   160 CONTINUE
48396       IF(ETMAX.LT.PARU(52)) GOTO 220
48397       IF(NJ.GE.MSTU(4)-MSTU(32)-5) THEN
48398         CALL PYERRM(11,'(PYCELL:) no more memory left in PYJETS')
48399         NJET=-2
48400         RETURN
48401       ENDIF
48402       K(ICMAX,5)=1
48403       NJ=NJ+1
48404       K(NJ,4)=0
48405       K(NJ,5)=1
48406       P(NJ,1)=ETA
48407       P(NJ,2)=PHI
48408       P(NJ,3)=0D0
48409       P(NJ,4)=0D0
48410       P(NJ,5)=0D0
48411  
48412 C...Sum up unused cells within required distance of initiator.
48413       DO 170 IC=N+1,NC
48414         IF(K(IC,5).EQ.0) GOTO 170
48415         IF(ABS(P(IC,1)-ETA).GT.PARU(54)) GOTO 170
48416         DPHIA=ABS(P(IC,2)-PHI)
48417         IF(DPHIA.GT.PARU(54).AND.DPHIA.LT.PARU(2)-PARU(54)) GOTO 170
48418         PHIC=P(IC,2)
48419         IF(DPHIA.GT.PARU(1)) PHIC=PHIC+SIGN(PARU(2),PHI)
48420         IF((P(IC,1)-ETA)**2+(PHIC-PHI)**2.GT.PARU(54)**2) GOTO 170
48421         K(IC,5)=-K(IC,5)
48422         K(NJ,4)=K(NJ,4)+K(IC,4)
48423         P(NJ,3)=P(NJ,3)+P(IC,5)*P(IC,1)
48424         P(NJ,4)=P(NJ,4)+P(IC,5)*PHIC
48425         P(NJ,5)=P(NJ,5)+P(IC,5)
48426   170 CONTINUE
48427  
48428 C...Reject cluster below minimum ET, else accept.
48429       IF(P(NJ,5).LT.PARU(53)) THEN
48430         NJ=NJ-1
48431         DO 180 IC=N+1,NC
48432           IF(K(IC,5).LT.0) K(IC,5)=-K(IC,5)
48433   180   CONTINUE
48434       ELSEIF(MSTU(54).LE.2) THEN
48435         P(NJ,3)=P(NJ,3)/P(NJ,5)
48436         P(NJ,4)=P(NJ,4)/P(NJ,5)
48437         IF(ABS(P(NJ,4)).GT.PARU(1)) P(NJ,4)=P(NJ,4)-SIGN(PARU(2),
48438      &  P(NJ,4))
48439         DO 190 IC=N+1,NC
48440           IF(K(IC,5).LT.0) K(IC,5)=0
48441   190   CONTINUE
48442       ELSE
48443         DO 200 J=1,4
48444           P(NJ,J)=0D0
48445   200   CONTINUE
48446         DO 210 IC=N+1,NC
48447           IF(K(IC,5).GE.0) GOTO 210
48448           P(NJ,1)=P(NJ,1)+P(IC,5)*COS(P(IC,2))
48449           P(NJ,2)=P(NJ,2)+P(IC,5)*SIN(P(IC,2))
48450           P(NJ,3)=P(NJ,3)+P(IC,5)*SINH(P(IC,1))
48451           P(NJ,4)=P(NJ,4)+P(IC,5)*COSH(P(IC,1))
48452           K(IC,5)=0
48453   210   CONTINUE
48454       ENDIF
48455       GOTO 150
48456  
48457 C...Arrange clusters in falling ET sequence.
48458   220 DO 250 I=1,NJ-NC
48459         ETMAX=0D0
48460         DO 230 IJ=NC+1,NJ
48461           IF(K(IJ,5).EQ.0) GOTO 230
48462           IF(P(IJ,5).LT.ETMAX) GOTO 230
48463           IJMAX=IJ
48464           ETMAX=P(IJ,5)
48465   230   CONTINUE
48466         K(IJMAX,5)=0
48467         K(N+I,1)=31
48468         K(N+I,2)=98
48469         K(N+I,3)=I
48470         K(N+I,4)=K(IJMAX,4)
48471         K(N+I,5)=0
48472         DO 240 J=1,5
48473           P(N+I,J)=P(IJMAX,J)
48474           V(N+I,J)=0D0
48475   240   CONTINUE
48476   250 CONTINUE
48477       NJET=NJ-NC
48478  
48479 C...Convert to massless or massive four-vectors.
48480       IF(MSTU(54).EQ.2) THEN
48481         DO 260 I=N+1,N+NJET
48482           ETA=P(I,3)
48483           P(I,1)=P(I,5)*COS(P(I,4))
48484           P(I,2)=P(I,5)*SIN(P(I,4))
48485           P(I,3)=P(I,5)*SINH(ETA)
48486           P(I,4)=P(I,5)*COSH(ETA)
48487           P(I,5)=0D0
48488   260   CONTINUE
48489       ELSEIF(MSTU(54).GE.3) THEN
48490         DO 270 I=N+1,N+NJET
48491           P(I,5)=SQRT(MAX(0D0,P(I,4)**2-P(I,1)**2-P(I,2)**2-P(I,3)**2))
48492   270   CONTINUE
48493       ENDIF
48494  
48495 C...Information about storage.
48496       MSTU(61)=N+1
48497       MSTU(62)=NP
48498       MSTU(63)=NC-N
48499       IF(MSTU(43).LE.1) MSTU(3)=MAX(0,NJET)
48500       IF(MSTU(43).GE.2) N=N+MAX(0,NJET)
48501  
48502       RETURN
48503       END
48504  
48505 C*********************************************************************
48506  
48507 C...PYJMAS
48508 C...Determines, approximately, the two jet masses that minimize
48509 C...the sum m_H^2 + m_L^2, a la Clavelli and Wyler.
48510  
48511       SUBROUTINE PYJMAS(PMH,PML)
48512  
48513 C...Double precision and integer declarations.
48514       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
48515       IMPLICIT INTEGER(I-N)
48516       INTEGER PYK,PYCHGE,PYCOMP
48517 C...Commonblocks.
48518       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
48519       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
48520       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
48521       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
48522 C...Local arrays.
48523       DIMENSION SM(3,3),SAX(3),PS(3,5)
48524  
48525 C...Reset.
48526       NP=0
48527       DO 120 J1=1,3
48528         DO 100 J2=J1,3
48529           SM(J1,J2)=0D0
48530   100   CONTINUE
48531         DO 110 J2=1,4
48532           PS(J1,J2)=0D0
48533   110   CONTINUE
48534   120 CONTINUE
48535       PSS=0D0
48536       PIMASS=PMAS(PYCOMP(211),1)
48537  
48538 C...Take copy of particles that are to be considered in mass analysis.
48539       DO 170 I=1,N
48540         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 170
48541         IF(MSTU(41).GE.2) THEN
48542           KC=PYCOMP(K(I,2))
48543           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
48544      &    KC.EQ.18) GOTO 170
48545           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
48546      &    GOTO 170
48547         ENDIF
48548         IF(N+NP+1.GE.MSTU(4)-MSTU(32)-5) THEN
48549           CALL PYERRM(11,'(PYJMAS:) no more memory left in PYJETS')
48550           PMH=-2D0
48551           PML=-2D0
48552           RETURN
48553         ENDIF
48554         NP=NP+1
48555         DO 130 J=1,5
48556           P(N+NP,J)=P(I,J)
48557   130   CONTINUE
48558         IF(MSTU(42).EQ.0) P(N+NP,5)=0D0
48559         IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) P(N+NP,5)=PIMASS
48560         P(N+NP,4)=SQRT(P(N+NP,5)**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
48561  
48562 C...Fill information in sphericity tensor and total momentum vector.
48563         DO 150 J1=1,3
48564           DO 140 J2=J1,3
48565             SM(J1,J2)=SM(J1,J2)+P(I,J1)*P(I,J2)
48566   140     CONTINUE
48567   150   CONTINUE
48568         PSS=PSS+(P(I,1)**2+P(I,2)**2+P(I,3)**2)
48569         DO 160 J=1,4
48570           PS(3,J)=PS(3,J)+P(N+NP,J)
48571   160   CONTINUE
48572   170 CONTINUE
48573  
48574 C...Very low multiplicities (0 or 1) not considered.
48575       IF(NP.LE.1) THEN
48576         CALL PYERRM(8,'(PYJMAS:) too few particles for analysis')
48577         PMH=-1D0
48578         PML=-1D0
48579         RETURN
48580       ENDIF
48581       PARU(61)=SQRT(MAX(0D0,PS(3,4)**2-PS(3,1)**2-PS(3,2)**2-
48582      &PS(3,3)**2))
48583  
48584 C...Find largest eigenvalue to matrix (third degree equation).
48585       DO 190 J1=1,3
48586         DO 180 J2=J1,3
48587           SM(J1,J2)=SM(J1,J2)/PSS
48588   180   CONTINUE
48589   190 CONTINUE
48590       SQ=(SM(1,1)*SM(2,2)+SM(1,1)*SM(3,3)+SM(2,2)*SM(3,3)-
48591      &SM(1,2)**2-SM(1,3)**2-SM(2,3)**2)/3D0-1D0/9D0
48592       SR=-0.5D0*(SQ+1D0/9D0+SM(1,1)*SM(2,3)**2+SM(2,2)*SM(1,3)**2+
48593      &SM(3,3)*SM(1,2)**2-SM(1,1)*SM(2,2)*SM(3,3))+
48594      &SM(1,2)*SM(1,3)*SM(2,3)+1D0/27D0
48595       SP=COS(ACOS(MAX(MIN(SR/SQRT(-SQ**3),1D0),-1D0))/3D0)
48596       SMA=1D0/3D0+SQRT(-SQ)*MAX(2D0*SP,SQRT(3D0*(1D0-SP**2))-SP)
48597  
48598 C...Find largest eigenvector by solving equation system.
48599       DO 210 J1=1,3
48600         SM(J1,J1)=SM(J1,J1)-SMA
48601         DO 200 J2=J1+1,3
48602           SM(J2,J1)=SM(J1,J2)
48603   200   CONTINUE
48604   210 CONTINUE
48605       SMAX=0D0
48606       DO 230 J1=1,3
48607         DO 220 J2=1,3
48608           IF(ABS(SM(J1,J2)).LE.SMAX) GOTO 220
48609           JA=J1
48610           JB=J2
48611           SMAX=ABS(SM(J1,J2))
48612   220   CONTINUE
48613   230 CONTINUE
48614       SMAX=0D0
48615       DO 250 J3=JA+1,JA+2
48616         J1=J3-3*((J3-1)/3)
48617         RL=SM(J1,JB)/SM(JA,JB)
48618         DO 240 J2=1,3
48619           SM(J1,J2)=SM(J1,J2)-RL*SM(JA,J2)
48620           IF(ABS(SM(J1,J2)).LE.SMAX) GOTO 240
48621           JC=J1
48622           SMAX=ABS(SM(J1,J2))
48623   240   CONTINUE
48624   250 CONTINUE
48625       JB1=JB+1-3*(JB/3)
48626       JB2=JB+2-3*((JB+1)/3)
48627       SAX(JB1)=-SM(JC,JB2)
48628       SAX(JB2)=SM(JC,JB1)
48629       SAX(JB)=-(SM(JA,JB1)*SAX(JB1)+SM(JA,JB2)*SAX(JB2))/SM(JA,JB)
48630  
48631 C...Divide particles into two initial clusters by hemisphere.
48632       DO 270 I=N+1,N+NP
48633         PSAX=P(I,1)*SAX(1)+P(I,2)*SAX(2)+P(I,3)*SAX(3)
48634         IS=1
48635         IF(PSAX.LT.0D0) IS=2
48636         K(I,3)=IS
48637         DO 260 J=1,4
48638           PS(IS,J)=PS(IS,J)+P(I,J)
48639   260   CONTINUE
48640   270 CONTINUE
48641       PMS=MAX(1D-10,PS(1,4)**2-PS(1,1)**2-PS(1,2)**2-PS(1,3)**2)+
48642      &MAX(1D-10,PS(2,4)**2-PS(2,1)**2-PS(2,2)**2-PS(2,3)**2)
48643  
48644 C...Reassign one particle at a time; find maximum decrease of m^2 sum.
48645   280 PMD=0D0
48646       IM=0
48647       DO 290 J=1,4
48648         PS(3,J)=PS(1,J)-PS(2,J)
48649   290 CONTINUE
48650       DO 300 I=N+1,N+NP
48651         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)
48652         IF(K(I,3).EQ.1) PMDI=2D0*(P(I,5)**2-PPS)
48653         IF(K(I,3).EQ.2) PMDI=2D0*(P(I,5)**2+PPS)
48654         IF(PMDI.LT.PMD) THEN
48655           PMD=PMDI
48656           IM=I
48657         ENDIF
48658   300 CONTINUE
48659  
48660 C...Loop back if significant reduction in sum of m^2.
48661       IF(PMD.LT.-PARU(48)*PMS) THEN
48662         PMS=PMS+PMD
48663         IS=K(IM,3)
48664         DO 310 J=1,4
48665           PS(IS,J)=PS(IS,J)-P(IM,J)
48666           PS(3-IS,J)=PS(3-IS,J)+P(IM,J)
48667   310   CONTINUE
48668         K(IM,3)=3-IS
48669         GOTO 280
48670       ENDIF
48671  
48672 C...Final masses and output.
48673       MSTU(61)=N+1
48674       MSTU(62)=NP
48675       PS(1,5)=SQRT(MAX(0D0,PS(1,4)**2-PS(1,1)**2-PS(1,2)**2-PS(1,3)**2))
48676       PS(2,5)=SQRT(MAX(0D0,PS(2,4)**2-PS(2,1)**2-PS(2,2)**2-PS(2,3)**2))
48677       PMH=MAX(PS(1,5),PS(2,5))
48678       PML=MIN(PS(1,5),PS(2,5))
48679  
48680       RETURN
48681       END
48682  
48683 C*********************************************************************
48684  
48685 C...PYFOWO
48686 C...Calculates the first few Fox-Wolfram moments.
48687  
48688       SUBROUTINE PYFOWO(H10,H20,H30,H40)
48689  
48690 C...Double precision and integer declarations.
48691       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
48692       IMPLICIT INTEGER(I-N)
48693       INTEGER PYK,PYCHGE,PYCOMP
48694 C...Commonblocks.
48695       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
48696       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
48697       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
48698       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
48699  
48700 C...Copy momenta for particles and calculate H0.
48701       NP=0
48702       H0=0D0
48703       HD=0D0
48704       DO 110 I=1,N
48705         IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 110
48706         IF(MSTU(41).GE.2) THEN
48707           KC=PYCOMP(K(I,2))
48708           IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
48709      &    KC.EQ.18) GOTO 110
48710           IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.PYCHGE(K(I,2)).EQ.0)
48711      &    GOTO 110
48712         ENDIF
48713         IF(N+NP.GE.MSTU(4)-MSTU(32)-5) THEN
48714           CALL PYERRM(11,'(PYFOWO:) no more memory left in PYJETS')
48715           H10=-1D0
48716           H20=-1D0
48717           H30=-1D0
48718           H40=-1D0
48719           RETURN
48720         ENDIF
48721         NP=NP+1
48722         DO 100 J=1,3
48723           P(N+NP,J)=P(I,J)
48724   100   CONTINUE
48725         P(N+NP,4)=SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2)
48726         H0=H0+P(N+NP,4)
48727         HD=HD+P(N+NP,4)**2
48728   110 CONTINUE
48729       H0=H0**2
48730  
48731 C...Very low multiplicities (0 or 1) not considered.
48732       IF(NP.LE.1) THEN
48733         CALL PYERRM(8,'(PYFOWO:) too few particles for analysis')
48734         H10=-1D0
48735         H20=-1D0
48736         H30=-1D0
48737         H40=-1D0
48738         RETURN
48739       ENDIF
48740  
48741 C...Calculate H1 - H4.
48742       H10=0D0
48743       H20=0D0
48744       H30=0D0
48745       H40=0D0
48746       DO 130 I1=N+1,N+NP
48747         DO 120 I2=I1+1,N+NP
48748           CTHE=(P(I1,1)*P(I2,1)+P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/
48749      &    (P(I1,4)*P(I2,4))
48750           H10=H10+P(I1,4)*P(I2,4)*CTHE
48751           H20=H20+P(I1,4)*P(I2,4)*(1.5D0*CTHE**2-0.5D0)
48752           H30=H30+P(I1,4)*P(I2,4)*(2.5D0*CTHE**3-1.5D0*CTHE)
48753           H40=H40+P(I1,4)*P(I2,4)*(4.375D0*CTHE**4-3.75D0*CTHE**2+
48754      &    0.375D0)
48755   120   CONTINUE
48756   130 CONTINUE
48757  
48758 C...Calculate H1/H0 - H4/H0. Output.
48759       MSTU(61)=N+1
48760       MSTU(62)=NP
48761       H10=(HD+2D0*H10)/H0
48762       H20=(HD+2D0*H20)/H0
48763       H30=(HD+2D0*H30)/H0
48764       H40=(HD+2D0*H40)/H0
48765  
48766       RETURN
48767       END
48768  
48769 C*********************************************************************
48770  
48771 C...PYTABU
48772 C...Evaluates various properties of an event, with statistics
48773 C...accumulated during the course of the run and
48774 C...printed at the end.
48775  
48776       SUBROUTINE PYTABU(MTABU)
48777  
48778 C...Double precision and integer declarations.
48779       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
48780       IMPLICIT INTEGER(I-N)
48781       INTEGER PYK,PYCHGE,PYCOMP
48782 C...Commonblocks.
48783       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
48784       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
48785       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
48786       COMMON/PYDAT3/MDCY(500,3),MDME(4000,2),BRAT(4000),KFDP(4000,5)
48787       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYDAT3/
48788 C...Local arrays, character variables, saved variables and data.
48789       DIMENSION KFIS(100,2),NPIS(100,0:10),KFFS(400),NPFS(400,4),
48790      &FEVFM(10,4),FM1FM(3,10,4),FM2FM(3,10,4),FMOMA(4),FMOMS(4),
48791      &FEVEE(50),FE1EC(50),FE2EC(50),FE1EA(25),FE2EA(25),
48792      &KFDM(8),KFDC(200,0:8),NPDC(200)
48793       SAVE NEVIS,NKFIS,KFIS,NPIS,NEVFS,NPRFS,NFIFS,NCHFS,NKFFS,
48794      &KFFS,NPFS,NEVFM,NMUFM,FM1FM,FM2FM,NEVEE,FE1EC,FE2EC,FE1EA,
48795      &FE2EA,NEVDC,NKFDC,NREDC,KFDC,NPDC
48796       CHARACTER CHAU*16,CHIS(2)*12,CHDC(8)*12
48797       DATA NEVIS/0/,NKFIS/0/,NEVFS/0/,NPRFS/0/,NFIFS/0/,NCHFS/0/,
48798      &NKFFS/0/,NEVFM/0/,NMUFM/0/,FM1FM/120*0D0/,FM2FM/120*0D0/,
48799      &NEVEE/0/,FE1EC/50*0D0/,FE2EC/50*0D0/,FE1EA/25*0D0/,FE2EA/25*0D0/,
48800      &NEVDC/0/,NKFDC/0/,NREDC/0/
48801  
48802 C...Reset statistics on initial parton state.
48803       IF(MTABU.EQ.10) THEN
48804         NEVIS=0
48805         NKFIS=0
48806  
48807 C...Identify and order flavour content of initial state.
48808       ELSEIF(MTABU.EQ.11) THEN
48809         NEVIS=NEVIS+1
48810         KFM1=2*IABS(MSTU(161))
48811         IF(MSTU(161).GT.0) KFM1=KFM1-1
48812         KFM2=2*IABS(MSTU(162))
48813         IF(MSTU(162).GT.0) KFM2=KFM2-1
48814         KFMN=MIN(KFM1,KFM2)
48815         KFMX=MAX(KFM1,KFM2)
48816         DO 100 I=1,NKFIS
48817           IF(KFMN.EQ.KFIS(I,1).AND.KFMX.EQ.KFIS(I,2)) THEN
48818             IKFIS=-I
48819             GOTO 110
48820           ELSEIF(KFMN.LT.KFIS(I,1).OR.(KFMN.EQ.KFIS(I,1).AND.
48821      &      KFMX.LT.KFIS(I,2))) THEN
48822             IKFIS=I
48823             GOTO 110
48824           ENDIF
48825   100   CONTINUE
48826         IKFIS=NKFIS+1
48827   110   IF(IKFIS.LT.0) THEN
48828           IKFIS=-IKFIS
48829         ELSE
48830           IF(NKFIS.GE.100) RETURN
48831           DO 130 I=NKFIS,IKFIS,-1
48832             KFIS(I+1,1)=KFIS(I,1)
48833             KFIS(I+1,2)=KFIS(I,2)
48834             DO 120 J=0,10
48835               NPIS(I+1,J)=NPIS(I,J)
48836   120       CONTINUE
48837   130     CONTINUE
48838           NKFIS=NKFIS+1
48839           KFIS(IKFIS,1)=KFMN
48840           KFIS(IKFIS,2)=KFMX
48841           DO 140 J=0,10
48842             NPIS(IKFIS,J)=0
48843   140     CONTINUE
48844         ENDIF
48845         NPIS(IKFIS,0)=NPIS(IKFIS,0)+1
48846  
48847 C...Count number of partons in initial state.
48848         NP=0
48849         DO 160 I=1,N
48850           IF(K(I,1).LE.0.OR.K(I,1).GT.12) THEN
48851           ELSEIF(IABS(K(I,2)).GT.80.AND.IABS(K(I,2)).LE.100) THEN
48852           ELSEIF(IABS(K(I,2)).GT.100.AND.MOD(IABS(K(I,2))/10,10).NE.0)
48853      &      THEN
48854           ELSE
48855             IM=I
48856   150       IM=K(IM,3)
48857             IF(IM.LE.0.OR.IM.GT.N) THEN
48858               NP=NP+1
48859             ELSEIF(K(IM,1).LE.0.OR.K(IM,1).GT.20) THEN
48860               NP=NP+1
48861             ELSEIF(IABS(K(IM,2)).GT.80.AND.IABS(K(IM,2)).LE.100) THEN
48862             ELSEIF(IABS(K(IM,2)).GT.100.AND.MOD(IABS(K(IM,2))/10,10)
48863      &        .NE.0) THEN
48864             ELSE
48865               GOTO 150
48866             ENDIF
48867           ENDIF
48868   160   CONTINUE
48869         NPCO=MAX(NP,1)
48870         IF(NP.GE.6) NPCO=6
48871         IF(NP.GE.8) NPCO=7
48872         IF(NP.GE.11) NPCO=8
48873         IF(NP.GE.16) NPCO=9
48874         IF(NP.GE.26) NPCO=10
48875         NPIS(IKFIS,NPCO)=NPIS(IKFIS,NPCO)+1
48876         MSTU(62)=NP
48877  
48878 C...Write statistics on initial parton state.
48879       ELSEIF(MTABU.EQ.12) THEN
48880         FAC=1D0/MAX(1,NEVIS)
48881         WRITE(MSTU(11),5000) NEVIS
48882         DO 170 I=1,NKFIS
48883           KFMN=KFIS(I,1)
48884           IF(KFMN.EQ.0) KFMN=KFIS(I,2)
48885           KFM1=(KFMN+1)/2
48886           IF(2*KFM1.EQ.KFMN) KFM1=-KFM1
48887           CALL PYNAME(KFM1,CHAU)
48888           CHIS(1)=CHAU(1:12)
48889           IF(CHAU(13:13).NE.' ') CHIS(1)(12:12)='?'
48890           KFMX=KFIS(I,2)
48891           IF(KFIS(I,1).EQ.0) KFMX=0
48892           KFM2=(KFMX+1)/2
48893           IF(2*KFM2.EQ.KFMX) KFM2=-KFM2
48894           CALL PYNAME(KFM2,CHAU)
48895           CHIS(2)=CHAU(1:12)
48896           IF(CHAU(13:13).NE.' ') CHIS(2)(12:12)='?'
48897           WRITE(MSTU(11),5100) CHIS(1),CHIS(2),FAC*NPIS(I,0),
48898      &    (NPIS(I,J)/DBLE(NPIS(I,0)),J=1,10)
48899   170   CONTINUE
48900  
48901 C...Copy statistics on initial parton state into /PYJETS/.
48902       ELSEIF(MTABU.EQ.13) THEN
48903         FAC=1D0/MAX(1,NEVIS)
48904         DO 190 I=1,NKFIS
48905           KFMN=KFIS(I,1)
48906           IF(KFMN.EQ.0) KFMN=KFIS(I,2)
48907           KFM1=(KFMN+1)/2
48908           IF(2*KFM1.EQ.KFMN) KFM1=-KFM1
48909           KFMX=KFIS(I,2)
48910           IF(KFIS(I,1).EQ.0) KFMX=0
48911           KFM2=(KFMX+1)/2
48912           IF(2*KFM2.EQ.KFMX) KFM2=-KFM2
48913           K(I,1)=32
48914           K(I,2)=99
48915           K(I,3)=KFM1
48916           K(I,4)=KFM2
48917           K(I,5)=NPIS(I,0)
48918           DO 180 J=1,5
48919             P(I,J)=FAC*NPIS(I,J)
48920             V(I,J)=FAC*NPIS(I,J+5)
48921   180     CONTINUE
48922   190   CONTINUE
48923         N=NKFIS
48924         DO 200 J=1,5
48925           K(N+1,J)=0
48926           P(N+1,J)=0D0
48927           V(N+1,J)=0D0
48928   200   CONTINUE
48929         K(N+1,1)=32
48930         K(N+1,2)=99
48931         K(N+1,5)=NEVIS
48932         MSTU(3)=1
48933  
48934 C...Reset statistics on number of particles/partons.
48935       ELSEIF(MTABU.EQ.20) THEN
48936         NEVFS=0
48937         NPRFS=0
48938         NFIFS=0
48939         NCHFS=0
48940         NKFFS=0
48941  
48942 C...Identify whether particle/parton is primary or not.
48943       ELSEIF(MTABU.EQ.21) THEN
48944         NEVFS=NEVFS+1
48945         MSTU(62)=0
48946         DO 260 I=1,N
48947           IF(K(I,1).LE.0.OR.K(I,1).GT.20.OR.K(I,1).EQ.13) GOTO 260
48948           MSTU(62)=MSTU(62)+1
48949           KC=PYCOMP(K(I,2))
48950           MPRI=0
48951           IF(K(I,3).LE.0.OR.K(I,3).GT.N) THEN
48952             MPRI=1
48953           ELSEIF(K(K(I,3),1).LE.0.OR.K(K(I,3),1).GT.20) THEN
48954             MPRI=1
48955           ELSEIF(K(K(I,3),2).GE.91.AND.K(K(I,3),2).LE.93) THEN
48956             MPRI=1
48957           ELSEIF(KC.EQ.0) THEN
48958           ELSEIF(K(K(I,3),1).EQ.13) THEN
48959             IM=K(K(I,3),3)
48960             IF(IM.LE.0.OR.IM.GT.N) THEN
48961               MPRI=1
48962             ELSEIF(K(IM,1).LE.0.OR.K(IM,1).GT.20) THEN
48963               MPRI=1
48964             ENDIF
48965           ELSEIF(KCHG(KC,2).EQ.0) THEN
48966             KCM=PYCOMP(K(K(I,3),2))
48967             IF(KCM.NE.0) THEN
48968               IF(KCHG(KCM,2).NE.0) MPRI=1
48969             ENDIF
48970           ENDIF
48971           IF(KC.NE.0.AND.MPRI.EQ.1) THEN
48972             IF(KCHG(KC,2).EQ.0) NPRFS=NPRFS+1
48973           ENDIF
48974           IF(K(I,1).LE.10) THEN
48975             NFIFS=NFIFS+1
48976             IF(PYCHGE(K(I,2)).NE.0) NCHFS=NCHFS+1
48977           ENDIF
48978  
48979 C...Fill statistics on number of particles/partons in event.
48980           KFA=IABS(K(I,2))
48981           KFS=3-ISIGN(1,K(I,2))-MPRI
48982           DO 210 IP=1,NKFFS
48983             IF(KFA.EQ.KFFS(IP)) THEN
48984               IKFFS=-IP
48985               GOTO 220
48986             ELSEIF(KFA.LT.KFFS(IP)) THEN
48987               IKFFS=IP
48988               GOTO 220
48989             ENDIF
48990   210     CONTINUE
48991           IKFFS=NKFFS+1
48992   220     IF(IKFFS.LT.0) THEN
48993             IKFFS=-IKFFS
48994           ELSE
48995             IF(NKFFS.GE.400) RETURN
48996             DO 240 IP=NKFFS,IKFFS,-1
48997               KFFS(IP+1)=KFFS(IP)
48998               DO 230 J=1,4
48999                 NPFS(IP+1,J)=NPFS(IP,J)
49000   230         CONTINUE
49001   240       CONTINUE
49002             NKFFS=NKFFS+1
49003             KFFS(IKFFS)=KFA
49004             DO 250 J=1,4
49005               NPFS(IKFFS,J)=0
49006   250       CONTINUE
49007           ENDIF
49008           NPFS(IKFFS,KFS)=NPFS(IKFFS,KFS)+1
49009   260   CONTINUE
49010  
49011 C...Write statistics on particle/parton composition of events.
49012       ELSEIF(MTABU.EQ.22) THEN
49013         FAC=1D0/MAX(1,NEVFS)
49014         WRITE(MSTU(11),5200) NEVFS,FAC*NPRFS,FAC*NFIFS,FAC*NCHFS
49015         DO 270 I=1,NKFFS
49016           CALL PYNAME(KFFS(I),CHAU)
49017           KC=PYCOMP(KFFS(I))
49018           MDCYF=0
49019           IF(KC.NE.0) MDCYF=MDCY(KC,1)
49020           WRITE(MSTU(11),5300) KFFS(I),CHAU,MDCYF,(FAC*NPFS(I,J),J=1,4),
49021      &    FAC*(NPFS(I,1)+NPFS(I,2)+NPFS(I,3)+NPFS(I,4))
49022   270   CONTINUE
49023  
49024 C...Copy particle/parton composition information into /PYJETS/.
49025       ELSEIF(MTABU.EQ.23) THEN
49026         FAC=1D0/MAX(1,NEVFS)
49027         DO 290 I=1,NKFFS
49028           K(I,1)=32
49029           K(I,2)=99
49030           K(I,3)=KFFS(I)
49031           K(I,4)=0
49032           K(I,5)=NPFS(I,1)+NPFS(I,2)+NPFS(I,3)+NPFS(I,4)
49033           DO 280 J=1,4
49034             P(I,J)=FAC*NPFS(I,J)
49035             V(I,J)=0D0
49036   280     CONTINUE
49037           P(I,5)=FAC*K(I,5)
49038           V(I,5)=0D0
49039   290   CONTINUE
49040         N=NKFFS
49041         DO 300 J=1,5
49042           K(N+1,J)=0
49043           P(N+1,J)=0D0
49044           V(N+1,J)=0D0
49045   300   CONTINUE
49046         K(N+1,1)=32
49047         K(N+1,2)=99
49048         K(N+1,5)=NEVFS
49049         P(N+1,1)=FAC*NPRFS
49050         P(N+1,2)=FAC*NFIFS
49051         P(N+1,3)=FAC*NCHFS
49052         MSTU(3)=1
49053  
49054 C...Reset factorial moments statistics.
49055       ELSEIF(MTABU.EQ.30) THEN
49056         NEVFM=0
49057         NMUFM=0
49058         DO 330 IM=1,3
49059           DO 320 IB=1,10
49060             DO 310 IP=1,4
49061               FM1FM(IM,IB,IP)=0D0
49062               FM2FM(IM,IB,IP)=0D0
49063   310       CONTINUE
49064   320     CONTINUE
49065   330   CONTINUE
49066  
49067 C...Find particles to include, with (pion,pseudo)rapidity and azimuth.
49068       ELSEIF(MTABU.EQ.31) THEN
49069         NEVFM=NEVFM+1
49070         NLOW=N+MSTU(3)
49071         NUPP=NLOW
49072         DO 410 I=1,N
49073           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 410
49074           IF(MSTU(41).GE.2) THEN
49075             KC=PYCOMP(K(I,2))
49076             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
49077      &      KC.EQ.18) GOTO 410
49078             IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.
49079      &      PYCHGE(K(I,2)).EQ.0) GOTO 410
49080           ENDIF
49081           PMR=0D0
49082           IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) PMR=PYMASS(211)
49083           IF(MSTU(42).GE.2) PMR=P(I,5)
49084           PR=MAX(1D-20,PMR**2+P(I,1)**2+P(I,2)**2)
49085           YETA=SIGN(LOG(MIN((SQRT(PR+P(I,3)**2)+ABS(P(I,3)))/SQRT(PR),
49086      &    1D20)),P(I,3))
49087           IF(ABS(YETA).GT.PARU(57)) GOTO 410
49088           PHI=PYANGL(P(I,1),P(I,2))
49089           IYETA=512D0*(YETA+PARU(57))/(2D0*PARU(57))
49090           IYETA=MAX(0,MIN(511,IYETA))
49091           IPHI=512D0*(PHI+PARU(1))/PARU(2)
49092           IPHI=MAX(0,MIN(511,IPHI))
49093           IYEP=0
49094           DO 340 IB=0,9
49095             IYEP=IYEP+4**IB*(2*MOD(IYETA/2**IB,2)+MOD(IPHI/2**IB,2))
49096   340     CONTINUE
49097  
49098 C...Order particles in (pseudo)rapidity and/or azimuth.
49099           IF(NUPP.GT.MSTU(4)-5-MSTU(32)) THEN
49100             CALL PYERRM(11,'(PYTABU:) no more memory left in PYJETS')
49101             RETURN
49102           ENDIF
49103           NUPP=NUPP+1
49104           IF(NUPP.EQ.NLOW+1) THEN
49105             K(NUPP,1)=IYETA
49106             K(NUPP,2)=IPHI
49107             K(NUPP,3)=IYEP
49108           ELSE
49109             DO 350 I1=NUPP-1,NLOW+1,-1
49110               IF(IYETA.GE.K(I1,1)) GOTO 360
49111               K(I1+1,1)=K(I1,1)
49112   350       CONTINUE
49113   360       K(I1+1,1)=IYETA
49114             DO 370 I1=NUPP-1,NLOW+1,-1
49115               IF(IPHI.GE.K(I1,2)) GOTO 380
49116               K(I1+1,2)=K(I1,2)
49117   370       CONTINUE
49118   380       K(I1+1,2)=IPHI
49119             DO 390 I1=NUPP-1,NLOW+1,-1
49120               IF(IYEP.GE.K(I1,3)) GOTO 400
49121               K(I1+1,3)=K(I1,3)
49122   390       CONTINUE
49123   400       K(I1+1,3)=IYEP
49124           ENDIF
49125   410   CONTINUE
49126         K(NUPP+1,1)=2**10
49127         K(NUPP+1,2)=2**10
49128         K(NUPP+1,3)=4**10
49129  
49130 C...Calculate sum of factorial moments in event.
49131         DO 480 IM=1,3
49132           DO 430 IB=1,10
49133             DO 420 IP=1,4
49134               FEVFM(IB,IP)=0D0
49135   420       CONTINUE
49136   430     CONTINUE
49137           DO 450 IB=1,10
49138             IF(IM.LE.2) IBIN=2**(10-IB)
49139             IF(IM.EQ.3) IBIN=4**(10-IB)
49140             IAGR=K(NLOW+1,IM)/IBIN
49141             NAGR=1
49142             DO 440 I=NLOW+2,NUPP+1
49143               ICUT=K(I,IM)/IBIN
49144               IF(ICUT.EQ.IAGR) THEN
49145                 NAGR=NAGR+1
49146               ELSE
49147                 IF(NAGR.EQ.1) THEN
49148                 ELSEIF(NAGR.EQ.2) THEN
49149                   FEVFM(IB,1)=FEVFM(IB,1)+2D0
49150                 ELSEIF(NAGR.EQ.3) THEN
49151                   FEVFM(IB,1)=FEVFM(IB,1)+6D0
49152                   FEVFM(IB,2)=FEVFM(IB,2)+6D0
49153                 ELSEIF(NAGR.EQ.4) THEN
49154                   FEVFM(IB,1)=FEVFM(IB,1)+12D0
49155                   FEVFM(IB,2)=FEVFM(IB,2)+24D0
49156                   FEVFM(IB,3)=FEVFM(IB,3)+24D0
49157                 ELSE
49158                   FEVFM(IB,1)=FEVFM(IB,1)+NAGR*(NAGR-1D0)
49159                   FEVFM(IB,2)=FEVFM(IB,2)+NAGR*(NAGR-1D0)*(NAGR-2D0)
49160                   FEVFM(IB,3)=FEVFM(IB,3)+NAGR*(NAGR-1D0)*(NAGR-2D0)*
49161      &            (NAGR-3D0)
49162                   FEVFM(IB,4)=FEVFM(IB,4)+NAGR*(NAGR-1D0)*(NAGR-2D0)*
49163      &            (NAGR-3D0)*(NAGR-4D0)
49164                 ENDIF
49165                 IAGR=ICUT
49166                 NAGR=1
49167               ENDIF
49168   440       CONTINUE
49169   450     CONTINUE
49170  
49171 C...Add results to total statistics.
49172           DO 470 IB=10,1,-1
49173             DO 460 IP=1,4
49174               IF(FEVFM(1,IP).LT.0.5D0) THEN
49175                 FEVFM(IB,IP)=0D0
49176               ELSEIF(IM.LE.2) THEN
49177                 FEVFM(IB,IP)=2D0**((IB-1)*IP)*FEVFM(IB,IP)/FEVFM(1,IP)
49178               ELSE
49179                 FEVFM(IB,IP)=4D0**((IB-1)*IP)*FEVFM(IB,IP)/FEVFM(1,IP)
49180               ENDIF
49181               FM1FM(IM,IB,IP)=FM1FM(IM,IB,IP)+FEVFM(IB,IP)
49182               FM2FM(IM,IB,IP)=FM2FM(IM,IB,IP)+FEVFM(IB,IP)**2
49183   460       CONTINUE
49184   470     CONTINUE
49185   480   CONTINUE
49186         NMUFM=NMUFM+(NUPP-NLOW)
49187         MSTU(62)=NUPP-NLOW
49188  
49189 C...Write accumulated statistics on factorial moments.
49190       ELSEIF(MTABU.EQ.32) THEN
49191         FAC=1D0/MAX(1,NEVFM)
49192         IF(MSTU(42).LE.0) WRITE(MSTU(11),5400) NEVFM,'eta'
49193         IF(MSTU(42).EQ.1) WRITE(MSTU(11),5400) NEVFM,'ypi'
49194         IF(MSTU(42).GE.2) WRITE(MSTU(11),5400) NEVFM,'y  '
49195         DO 510 IM=1,3
49196           WRITE(MSTU(11),5500)
49197           DO 500 IB=1,10
49198             BYETA=2D0*PARU(57)
49199             IF(IM.NE.2) BYETA=BYETA/2**(IB-1)
49200             BPHI=PARU(2)
49201             IF(IM.NE.1) BPHI=BPHI/2**(IB-1)
49202             IF(IM.LE.2) BNAVE=FAC*NMUFM/DBLE(2**(IB-1))
49203             IF(IM.EQ.3) BNAVE=FAC*NMUFM/DBLE(4**(IB-1))
49204             DO 490 IP=1,4
49205               FMOMA(IP)=FAC*FM1FM(IM,IB,IP)
49206               FMOMS(IP)=SQRT(MAX(0D0,FAC*(FAC*FM2FM(IM,IB,IP)-
49207      &        FMOMA(IP)**2)))
49208   490       CONTINUE
49209             WRITE(MSTU(11),5600) BYETA,BPHI,BNAVE,(FMOMA(IP),FMOMS(IP),
49210      &      IP=1,4)
49211   500     CONTINUE
49212   510   CONTINUE
49213  
49214 C...Copy statistics on factorial moments into /PYJETS/.
49215       ELSEIF(MTABU.EQ.33) THEN
49216         FAC=1D0/MAX(1,NEVFM)
49217         DO 540 IM=1,3
49218           DO 530 IB=1,10
49219             I=10*(IM-1)+IB
49220             K(I,1)=32
49221             K(I,2)=99
49222             K(I,3)=1
49223             IF(IM.NE.2) K(I,3)=2**(IB-1)
49224             K(I,4)=1
49225             IF(IM.NE.1) K(I,4)=2**(IB-1)
49226             K(I,5)=0
49227             P(I,1)=2D0*PARU(57)/K(I,3)
49228             V(I,1)=PARU(2)/K(I,4)
49229             DO 520 IP=1,4
49230               P(I,IP+1)=FAC*FM1FM(IM,IB,IP)
49231               V(I,IP+1)=SQRT(MAX(0D0,FAC*(FAC*FM2FM(IM,IB,IP)-
49232      &        P(I,IP+1)**2)))
49233   520       CONTINUE
49234   530     CONTINUE
49235   540   CONTINUE
49236         N=30
49237         DO 550 J=1,5
49238           K(N+1,J)=0
49239           P(N+1,J)=0D0
49240           V(N+1,J)=0D0
49241   550   CONTINUE
49242         K(N+1,1)=32
49243         K(N+1,2)=99
49244         K(N+1,5)=NEVFM
49245         MSTU(3)=1
49246  
49247 C...Reset statistics on Energy-Energy Correlation.
49248       ELSEIF(MTABU.EQ.40) THEN
49249         NEVEE=0
49250         DO 560 J=1,25
49251           FE1EC(J)=0D0
49252           FE2EC(J)=0D0
49253           FE1EC(51-J)=0D0
49254           FE2EC(51-J)=0D0
49255           FE1EA(J)=0D0
49256           FE2EA(J)=0D0
49257   560   CONTINUE
49258  
49259 C...Find particles to include, with proper assumed mass.
49260       ELSEIF(MTABU.EQ.41) THEN
49261         NEVEE=NEVEE+1
49262         NLOW=N+MSTU(3)
49263         NUPP=NLOW
49264         ECM=0D0
49265         DO 570 I=1,N
49266           IF(K(I,1).LE.0.OR.K(I,1).GT.10) GOTO 570
49267           IF(MSTU(41).GE.2) THEN
49268             KC=PYCOMP(K(I,2))
49269             IF(KC.EQ.0.OR.KC.EQ.12.OR.KC.EQ.14.OR.KC.EQ.16.OR.
49270      &      KC.EQ.18) GOTO 570
49271             IF(MSTU(41).GE.3.AND.KCHG(KC,2).EQ.0.AND.
49272      &      PYCHGE(K(I,2)).EQ.0) GOTO 570
49273           ENDIF
49274           PMR=0D0
49275           IF(MSTU(42).EQ.1.AND.K(I,2).NE.22) PMR=PYMASS(211)
49276           IF(MSTU(42).GE.2) PMR=P(I,5)
49277           IF(NUPP.GT.MSTU(4)-5-MSTU(32)) THEN
49278             CALL PYERRM(11,'(PYTABU:) no more memory left in PYJETS')
49279             RETURN
49280           ENDIF
49281           NUPP=NUPP+1
49282           P(NUPP,1)=P(I,1)
49283           P(NUPP,2)=P(I,2)
49284           P(NUPP,3)=P(I,3)
49285           P(NUPP,4)=SQRT(PMR**2+P(I,1)**2+P(I,2)**2+P(I,3)**2)
49286           P(NUPP,5)=MAX(1D-10,SQRT(P(I,1)**2+P(I,2)**2+P(I,3)**2))
49287           ECM=ECM+P(NUPP,4)
49288   570   CONTINUE
49289         IF(NUPP.EQ.NLOW) RETURN
49290  
49291 C...Analyze Energy-Energy Correlation in event.
49292         FAC=(2D0/ECM**2)*50D0/PARU(1)
49293         DO 580 J=1,50
49294           FEVEE(J)=0D0
49295   580   CONTINUE
49296         DO 600 I1=NLOW+2,NUPP
49297           DO 590 I2=NLOW+1,I1-1
49298             CTHE=(P(I1,1)*P(I2,1)+P(I1,2)*P(I2,2)+P(I1,3)*P(I2,3))/
49299      &      (P(I1,5)*P(I2,5))
49300             THE=ACOS(MAX(-1D0,MIN(1D0,CTHE)))
49301             ITHE=MAX(1,MIN(50,1+INT(50D0*THE/PARU(1))))
49302             FEVEE(ITHE)=FEVEE(ITHE)+FAC*P(I1,4)*P(I2,4)
49303   590     CONTINUE
49304   600   CONTINUE
49305         DO 610 J=1,25
49306           FE1EC(J)=FE1EC(J)+FEVEE(J)
49307           FE2EC(J)=FE2EC(J)+FEVEE(J)**2
49308           FE1EC(51-J)=FE1EC(51-J)+FEVEE(51-J)
49309           FE2EC(51-J)=FE2EC(51-J)+FEVEE(51-J)**2
49310           FE1EA(J)=FE1EA(J)+(FEVEE(51-J)-FEVEE(J))
49311           FE2EA(J)=FE2EA(J)+(FEVEE(51-J)-FEVEE(J))**2
49312   610   CONTINUE
49313         MSTU(62)=NUPP-NLOW
49314  
49315 C...Write statistics on Energy-Energy Correlation.
49316       ELSEIF(MTABU.EQ.42) THEN
49317         FAC=1D0/MAX(1,NEVEE)
49318         WRITE(MSTU(11),5700) NEVEE
49319         DO 620 J=1,25
49320           FEEC1=FAC*FE1EC(J)
49321           FEES1=SQRT(MAX(0D0,FAC*(FAC*FE2EC(J)-FEEC1**2)))
49322           FEEC2=FAC*FE1EC(51-J)
49323           FEES2=SQRT(MAX(0D0,FAC*(FAC*FE2EC(51-J)-FEEC2**2)))
49324           FEECA=FAC*FE1EA(J)
49325           FEESA=SQRT(MAX(0D0,FAC*(FAC*FE2EA(J)-FEECA**2)))
49326           WRITE(MSTU(11),5800) 3.6D0*(J-1),3.6D0*J,FEEC1,FEES1,
49327      &    FEEC2,FEES2,FEECA,FEESA
49328   620   CONTINUE
49329  
49330 C...Copy statistics on Energy-Energy Correlation into /PYJETS/.
49331       ELSEIF(MTABU.EQ.43) THEN
49332         FAC=1D0/MAX(1,NEVEE)
49333         DO 630 I=1,25
49334           K(I,1)=32
49335           K(I,2)=99
49336           K(I,3)=0
49337           K(I,4)=0
49338           K(I,5)=0
49339           P(I,1)=FAC*FE1EC(I)
49340           V(I,1)=SQRT(MAX(0D0,FAC*(FAC*FE2EC(I)-P(I,1)**2)))
49341           P(I,2)=FAC*FE1EC(51-I)
49342           V(I,2)=SQRT(MAX(0D0,FAC*(FAC*FE2EC(51-I)-P(I,2)**2)))
49343           P(I,3)=FAC*FE1EA(I)
49344           V(I,3)=SQRT(MAX(0D0,FAC*(FAC*FE2EA(I)-P(I,3)**2)))
49345           P(I,4)=PARU(1)*(I-1)/50D0
49346           P(I,5)=PARU(1)*I/50D0
49347           V(I,4)=3.6D0*(I-1)
49348           V(I,5)=3.6D0*I
49349   630   CONTINUE
49350         N=25
49351         DO 640 J=1,5
49352           K(N+1,J)=0
49353           P(N+1,J)=0D0
49354           V(N+1,J)=0D0
49355   640   CONTINUE
49356         K(N+1,1)=32
49357         K(N+1,2)=99
49358         K(N+1,5)=NEVEE
49359         MSTU(3)=1
49360  
49361 C...Reset statistics on decay channels.
49362       ELSEIF(MTABU.EQ.50) THEN
49363         NEVDC=0
49364         NKFDC=0
49365         NREDC=0
49366  
49367 C...Identify and order flavour content of final state.
49368       ELSEIF(MTABU.EQ.51) THEN
49369         NEVDC=NEVDC+1
49370         NDS=0
49371         DO 670 I=1,N
49372           IF(K(I,1).LE.0.OR.K(I,1).GE.6) GOTO 670
49373           NDS=NDS+1
49374           IF(NDS.GT.8) THEN
49375             NREDC=NREDC+1
49376             RETURN
49377           ENDIF
49378           KFM=2*IABS(K(I,2))
49379           IF(K(I,2).LT.0) KFM=KFM-1
49380           DO 650 IDS=NDS-1,1,-1
49381             IIN=IDS+1
49382             IF(KFM.LT.KFDM(IDS)) GOTO 660
49383             KFDM(IDS+1)=KFDM(IDS)
49384   650     CONTINUE
49385           IIN=1
49386   660     KFDM(IIN)=KFM
49387   670   CONTINUE
49388  
49389 C...Find whether old or new final state.
49390         DO 690 IDC=1,NKFDC
49391           IF(NDS.LT.KFDC(IDC,0)) THEN
49392             IKFDC=IDC
49393             GOTO 700
49394           ELSEIF(NDS.EQ.KFDC(IDC,0)) THEN
49395             DO 680 I=1,NDS
49396               IF(KFDM(I).LT.KFDC(IDC,I)) THEN
49397                 IKFDC=IDC
49398                 GOTO 700
49399               ELSEIF(KFDM(I).GT.KFDC(IDC,I)) THEN
49400                 GOTO 690
49401               ENDIF
49402   680       CONTINUE
49403             IKFDC=-IDC
49404             GOTO 700
49405           ENDIF
49406   690   CONTINUE
49407         IKFDC=NKFDC+1
49408   700   IF(IKFDC.LT.0) THEN
49409           IKFDC=-IKFDC
49410         ELSEIF(NKFDC.GE.200) THEN
49411           NREDC=NREDC+1
49412           RETURN
49413         ELSE
49414           DO 720 IDC=NKFDC,IKFDC,-1
49415             NPDC(IDC+1)=NPDC(IDC)
49416             DO 710 I=0,8
49417               KFDC(IDC+1,I)=KFDC(IDC,I)
49418   710       CONTINUE
49419   720     CONTINUE
49420           NKFDC=NKFDC+1
49421           KFDC(IKFDC,0)=NDS
49422           DO 730 I=1,NDS
49423             KFDC(IKFDC,I)=KFDM(I)
49424   730     CONTINUE
49425           NPDC(IKFDC)=0
49426         ENDIF
49427         NPDC(IKFDC)=NPDC(IKFDC)+1
49428  
49429 C...Write statistics on decay channels.
49430       ELSEIF(MTABU.EQ.52) THEN
49431         FAC=1D0/MAX(1,NEVDC)
49432         WRITE(MSTU(11),5900) NEVDC
49433         DO 750 IDC=1,NKFDC
49434           DO 740 I=1,KFDC(IDC,0)
49435             KFM=KFDC(IDC,I)
49436             KF=(KFM+1)/2
49437             IF(2*KF.NE.KFM) KF=-KF
49438             CALL PYNAME(KF,CHAU)
49439             CHDC(I)=CHAU(1:12)
49440             IF(CHAU(13:13).NE.' ') CHDC(I)(12:12)='?'
49441   740     CONTINUE
49442           WRITE(MSTU(11),6000) FAC*NPDC(IDC),(CHDC(I),I=1,KFDC(IDC,0))
49443   750   CONTINUE
49444         IF(NREDC.NE.0) WRITE(MSTU(11),6100) FAC*NREDC
49445  
49446 C...Copy statistics on decay channels into /PYJETS/.
49447       ELSEIF(MTABU.EQ.53) THEN
49448         FAC=1D0/MAX(1,NEVDC)
49449         DO 780 IDC=1,NKFDC
49450           K(IDC,1)=32
49451           K(IDC,2)=99
49452           K(IDC,3)=0
49453           K(IDC,4)=0
49454           K(IDC,5)=KFDC(IDC,0)
49455           DO 760 J=1,5
49456             P(IDC,J)=0D0
49457             V(IDC,J)=0D0
49458   760     CONTINUE
49459           DO 770 I=1,KFDC(IDC,0)
49460             KFM=KFDC(IDC,I)
49461             KF=(KFM+1)/2
49462             IF(2*KF.NE.KFM) KF=-KF
49463             IF(I.LE.5) P(IDC,I)=KF
49464             IF(I.GE.6) V(IDC,I-5)=KF
49465   770     CONTINUE
49466           V(IDC,5)=FAC*NPDC(IDC)
49467   780   CONTINUE
49468         N=NKFDC
49469         DO 790 J=1,5
49470           K(N+1,J)=0
49471           P(N+1,J)=0D0
49472           V(N+1,J)=0D0
49473   790   CONTINUE
49474         K(N+1,1)=32
49475         K(N+1,2)=99
49476         K(N+1,5)=NEVDC
49477         V(N+1,5)=FAC*NREDC
49478         MSTU(3)=1
49479       ENDIF
49480  
49481 C...Format statements for output on unit MSTU(11) (default 6).
49482  5000 FORMAT(///20X,'Event statistics - initial state'/
49483      &20X,'based on an analysis of ',I6,' events'//
49484      &3X,'Main flavours after',8X,'Fraction',4X,'Subfractions ',
49485      &'according to fragmenting system multiplicity'/
49486      &4X,'hard interaction',24X,'1',7X,'2',7X,'3',7X,'4',7X,'5',
49487      &6X,'6-7',5X,'8-10',3X,'11-15',3X,'16-25',4X,'>25'/)
49488  5100 FORMAT(3X,A12,1X,A12,F10.5,1X,10F8.4)
49489  5200 FORMAT(///20X,'Event statistics - final state'/
49490      &20X,'based on an analysis of ',I7,' events'//
49491      &5X,'Mean primary multiplicity =',F10.4/
49492      &5X,'Mean final   multiplicity =',F10.4/
49493      &5X,'Mean charged multiplicity =',F10.4//
49494      &5X,'Number of particles produced per event (directly and via ',
49495      &'decays/branchings)'/
49496      &8X,'KF    Particle/jet  MDCY',10X,'Particles',13X,'Antiparticles',
49497      &8X,'Total'/35X,'prim        seco        prim        seco'/)
49498  5300 FORMAT(1X,I9,4X,A16,I2,5(1X,F11.6))
49499  5400 FORMAT(///20X,'Factorial moments analysis of multiplicity'/
49500      &20X,'based on an analysis of ',I6,' events'//
49501      &3X,'delta-',A3,' delta-phi     <n>/bin',10X,'<F2>',18X,'<F3>',
49502      &18X,'<F4>',18X,'<F5>'/35X,4('     value     error  '))
49503  5500 FORMAT(10X)
49504  5600 FORMAT(2X,2F10.4,F12.4,4(F12.4,F10.4))
49505  5700 FORMAT(///20X,'Energy-Energy Correlation and Asymmetry'/
49506      &20X,'based on an analysis of ',I6,' events'//
49507      &2X,'theta range',8X,'EEC(theta)',8X,'EEC(180-theta)',7X,
49508      &'EECA(theta)'/2X,'in degrees ',3('      value    error')/)
49509  5800 FORMAT(2X,F4.1,' - ',F4.1,3(F11.4,F9.4))
49510  5900 FORMAT(///20X,'Decay channel analysis - final state'/
49511      &20X,'based on an analysis of ',I6,' events'//
49512      &2X,'Probability',10X,'Complete final state'/)
49513  6000 FORMAT(2X,F9.5,5X,8(A12,1X))
49514  6100 FORMAT(2X,F9.5,5X,'into other channels (more than 8 particles ',
49515      &'or table overflow)')
49516  
49517       RETURN
49518       END
49519  
49520 C*********************************************************************
49521  
49522 C...PYEEVT
49523 C...Handles the generation of an e+e- annihilation jet event.
49524  
49525       SUBROUTINE PYEEVT(KFL,ECM)
49526 
49527 C...Double precision and integer declarations.
49528       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
49529       IMPLICIT INTEGER(I-N)
49530       INTEGER PYK,PYCHGE,PYCOMP
49531 C...Commonblocks.
49532       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
49533       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
49534       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
49535       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
49536  
49537 C...Check input parameters.
49538       IF(MSTU(12).GE.1) CALL PYLIST(0)
49539       IF(KFL.LT.0.OR.KFL.GT.8) THEN
49540         CALL PYERRM(16,'(PYEEVT:) called with unknown flavour code')
49541         IF(MSTU(21).GE.1) RETURN
49542       ENDIF
49543       IF(KFL.LE.5) ECMMIN=PARJ(127)+2.02D0*PARF(100+MAX(1,KFL))
49544       IF(KFL.GE.6) ECMMIN=PARJ(127)+2.02D0*PMAS(KFL,1)
49545       IF(ECM.LT.ECMMIN) THEN
49546         CALL PYERRM(16,'(PYEEVT:) called with too small CM energy')
49547         IF(MSTU(21).GE.1) RETURN
49548       ENDIF
49549  
49550 C...Check consistency of MSTJ options set.
49551       IF(MSTJ(109).EQ.2.AND.MSTJ(110).NE.1) THEN
49552         CALL PYERRM(6,
49553      &  '(PYEEVT:) MSTJ(109) value requires MSTJ(110) = 1')
49554         MSTJ(110)=1
49555       ENDIF
49556       IF(MSTJ(109).EQ.2.AND.MSTJ(111).NE.0) THEN
49557         CALL PYERRM(6,
49558      &  '(PYEEVT:) MSTJ(109) value requires MSTJ(111) = 0')
49559         MSTJ(111)=0
49560       ENDIF
49561  
49562 C...Initialize alpha_strong and total cross-section.
49563       MSTU(111)=MSTJ(108)
49564       IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
49565      &MSTU(111)=1
49566       PARU(112)=PARJ(121)
49567       IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
49568       IF(MSTJ(116).GT.0.AND.(MSTJ(116).GE.2.OR.ABS(ECM-PARJ(151)).GE.
49569      &PARJ(139).OR.10*MSTJ(102)+KFL.NE.MSTJ(119))) CALL PYXTEE(KFL,ECM,
49570      &XTOT)
49571       IF(MSTJ(116).GE.3) MSTJ(116)=1
49572       PARJ(171)=0D0
49573  
49574 C...Add initial e+e- to event record (documentation only).
49575       NTRY=0
49576   100 NTRY=NTRY+1
49577       IF(NTRY.GT.100) THEN
49578         CALL PYERRM(14,'(PYEEVT:) caught in an infinite loop')
49579         RETURN
49580       ENDIF
49581       MSTU(24)=0
49582       NC=0
49583       IF(MSTJ(115).GE.2) THEN
49584         NC=NC+2
49585         CALL PY1ENT(NC-1,11,0.5D0*ECM,0D0,0D0)
49586         K(NC-1,1)=21
49587         CALL PY1ENT(NC,-11,0.5D0*ECM,PARU(1),0D0)
49588         K(NC,1)=21
49589       ENDIF
49590  
49591 C...Radiative photon (in initial state).
49592       MK=0
49593       ECMC=ECM
49594       IF(MSTJ(107).GE.1.AND.MSTJ(116).GE.1) CALL PYRADK(ECM,MK,PAK,
49595      &THEK,PHIK,ALPK)
49596       IF(MK.EQ.1) ECMC=SQRT(ECM*(ECM-2D0*PAK))
49597       IF(MSTJ(115).GE.1.AND.MK.EQ.1) THEN
49598         NC=NC+1
49599         CALL PY1ENT(NC,22,PAK,THEK,PHIK)
49600         K(NC,3)=MIN(MSTJ(115)/2,1)
49601       ENDIF
49602  
49603 C...Virtual exchange boson (gamma or Z0).
49604       IF(MSTJ(115).GE.3) THEN
49605         NC=NC+1
49606         KF=22
49607         IF(MSTJ(102).EQ.2) KF=23
49608         MSTU10=MSTU(10)
49609         MSTU(10)=1
49610         P(NC,5)=ECMC
49611         CALL PY1ENT(NC,KF,ECMC,0D0,0D0)
49612         K(NC,1)=21
49613         K(NC,3)=1
49614         MSTU(10)=MSTU10
49615       ENDIF
49616  
49617 C...Choice of flavour and jet configuration.
49618       CALL PYXKFL(KFL,ECM,ECMC,KFLC)
49619       IF(KFLC.EQ.0) GOTO 100
49620       CALL PYXJET(ECMC,NJET,CUT)
49621       KFLN=21
49622       IF(NJET.EQ.4) CALL PYX4JT(NJET,CUT,KFLC,ECMC,KFLN,X1,X2,X4,
49623      &X12,X14)
49624       IF(NJET.EQ.3) CALL PYX3JT(NJET,CUT,KFLC,ECMC,X1,X3)
49625       IF(NJET.EQ.2) MSTJ(120)=1
49626  
49627 C...Fill jet configuration and origin.
49628       IF(NJET.EQ.2.AND.MSTJ(101).NE.5) CALL PY2ENT(NC+1,KFLC,-KFLC,ECMC)
49629       IF(NJET.EQ.2.AND.MSTJ(101).EQ.5) CALL PY2ENT(-(NC+1),KFLC,-KFLC,
49630      &ECMC)
49631       IF(NJET.EQ.3) CALL PY3ENT(NC+1,KFLC,21,-KFLC,ECMC,X1,X3)
49632       IF(NJET.EQ.4.AND.KFLN.EQ.21) CALL PY4ENT(NC+1,KFLC,KFLN,KFLN,
49633      &-KFLC,ECMC,X1,X2,X4,X12,X14)
49634       IF(NJET.EQ.4.AND.KFLN.NE.21) CALL PY4ENT(NC+1,KFLC,-KFLN,KFLN,
49635      &-KFLC,ECMC,X1,X2,X4,X12,X14)
49636       IF(MSTU(24).NE.0) GOTO 100
49637       DO 110 IP=NC+1,N
49638         K(IP,3)=K(IP,3)+MIN(MSTJ(115)/2,1)+(MSTJ(115)/3)*(NC-1)
49639   110 CONTINUE
49640  
49641 C...Angular orientation according to matrix element.
49642       IF(MSTJ(106).EQ.1) THEN
49643         CALL PYXDIF(NC,NJET,KFLC,ECMC,CHI,THE,PHI)
49644         CALL PYROBO(NC+1,N,0D0,CHI,0D0,0D0,0D0)
49645         CALL PYROBO(NC+1,N,THE,PHI,0D0,0D0,0D0)
49646       ENDIF
49647  
49648 C...Rotation and boost from radiative photon.
49649       IF(MK.EQ.1) THEN
49650         DBEK=-PAK/(ECM-PAK)
49651         NMIN=NC+1-MSTJ(115)/3
49652         CALL PYROBO(NMIN,N,0D0,-PHIK,0D0,0D0,0D0)
49653         CALL PYROBO(NMIN,N,ALPK,0D0,DBEK*SIN(THEK),0D0,DBEK*COS(THEK))
49654         CALL PYROBO(NMIN,N,0D0,PHIK,0D0,0D0,0D0)
49655       ENDIF
49656  
49657 C...Generate parton shower. Rearrange along strings and check.
49658       IF(MSTJ(101).EQ.5) THEN
49659         CALL PYSHOW(N-1,N,ECMC)
49660         MSTJ14=MSTJ(14)
49661         IF(MSTJ(105).EQ.-1) MSTJ(14)=-1
49662         IF(MSTJ(105).GE.0) MSTU(28)=0
49663         CALL PYPREP(0)
49664         MSTJ(14)=MSTJ14
49665         IF(MSTJ(105).GE.0.AND.MSTU(28).NE.0) GOTO 100
49666       ENDIF
49667  
49668 C...Fragmentation/decay generation. Information for PYTABU.
49669       IF(MSTJ(105).EQ.1) CALL PYEXEC
49670       MSTU(161)=KFLC
49671       MSTU(162)=-KFLC
49672  
49673       RETURN
49674       END
49675  
49676 C*********************************************************************
49677  
49678 C...PYXTEE
49679 C...Calculates total cross-section, including initial state
49680 C...radiation effects.
49681  
49682       SUBROUTINE PYXTEE(KFL,ECM,XTOT)
49683  
49684 C...Double precision and integer declarations.
49685       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
49686       IMPLICIT INTEGER(I-N)
49687       INTEGER PYK,PYCHGE,PYCOMP
49688 C...Commonblocks.
49689       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
49690       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
49691       SAVE /PYDAT1/,/PYDAT2/
49692  
49693 C...Status, (optimized) Q^2 scale, alpha_strong.
49694       PARJ(151)=ECM
49695       MSTJ(119)=10*MSTJ(102)+KFL
49696       IF(MSTJ(111).EQ.0) THEN
49697         Q2R=ECM**2
49698       ELSEIF(MSTU(111).EQ.0) THEN
49699         PARJ(168)=MIN(1D0,MAX(PARJ(128),EXP(-12D0*PARU(1)/
49700      &  ((33D0-2D0*MSTU(112))*PARU(111)))))
49701         Q2R=PARJ(168)*ECM**2
49702       ELSE
49703         PARJ(168)=MIN(1D0,MAX(PARJ(128),PARU(112)/ECM,
49704      &  (2D0*PARU(112)/ECM)**2))
49705         Q2R=PARJ(168)*ECM**2
49706       ENDIF
49707       ALSPI=PYALPS(Q2R)/PARU(1)
49708  
49709 C...QCD corrections factor in R.
49710       IF(MSTJ(101).EQ.0.OR.MSTJ(109).EQ.1) THEN
49711         RQCD=1D0
49712       ELSEIF(IABS(MSTJ(101)).EQ.1.AND.MSTJ(109).EQ.0) THEN
49713         RQCD=1D0+ALSPI
49714       ELSEIF(MSTJ(109).EQ.0) THEN
49715         RQCD=1D0+ALSPI+(1.986D0-0.115D0*MSTU(118))*ALSPI**2
49716         IF(MSTJ(111).EQ.1) RQCD=MAX(1D0,RQCD+(33D0-2D0*MSTU(112))/12D0*
49717      &  LOG(PARJ(168))*ALSPI**2)
49718       ELSEIF(IABS(MSTJ(101)).EQ.1) THEN
49719         RQCD=1D0+(3D0/4D0)*ALSPI
49720       ELSE
49721         RQCD=1D0+(3D0/4D0)*ALSPI-(3D0/32D0+0.519D0*MSTU(118))*ALSPI**2
49722       ENDIF
49723  
49724 C...Calculate Z0 width if default value not acceptable.
49725       IF(MSTJ(102).GE.3) THEN
49726         RVA=3D0*(3D0+(4D0*PARU(102)-1D0)**2)+6D0*RQCD*(2D0+
49727      &  (1D0-8D0*PARU(102)/3D0)**2+(4D0*PARU(102)/3D0-1D0)**2)
49728         DO 100 KFLC=5,6
49729           VQ=1D0
49730           IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,1D0-
49731      &    (2D0*PYMASS(KFLC)/ ECM)**2))
49732           IF(KFLC.EQ.5) VF=4D0*PARU(102)/3D0-1D0
49733           IF(KFLC.EQ.6) VF=1D0-8D0*PARU(102)/3D0
49734           RVA=RVA+3D0*RQCD*(0.5D0*VQ*(3D0-VQ**2)*VF**2+VQ**3)
49735   100   CONTINUE
49736         PARJ(124)=PARU(101)*PARJ(123)*RVA/(48D0*PARU(102)*
49737      &  (1D0-PARU(102)))
49738       ENDIF
49739  
49740 C...Calculate propagator and related constants for QFD case.
49741       POLL=1D0-PARJ(131)*PARJ(132)
49742       IF(MSTJ(102).GE.2) THEN
49743         SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
49744         SFW=ECM**4/((ECM**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
49745         SFI=SFW*(1D0-(PARJ(123)/ECM)**2)
49746         VE=4D0*PARU(102)-1D0
49747         SF1I=SFF*(VE*POLL+PARJ(132)-PARJ(131))
49748         SF1W=SFF**2*((VE**2+1D0)*POLL+2D0*VE*(PARJ(132)-PARJ(131)))
49749         HF1I=SFI*SF1I
49750         HF1W=SFW*SF1W
49751       ENDIF
49752  
49753 C...Loop over different flavours: charge, velocity.
49754       RTOT=0D0
49755       RQQ=0D0
49756       RQV=0D0
49757       RVA=0D0
49758       DO 110 KFLC=1,MAX(MSTJ(104),KFL)
49759         IF(KFL.GT.0.AND.KFLC.NE.KFL) GOTO 110
49760         MSTJ(93)=1
49761         PMQ=PYMASS(KFLC)
49762         IF(ECM.LT.2D0*PMQ+PARJ(127)) GOTO 110
49763         QF=KCHG(KFLC,1)/3D0
49764         VQ=1D0
49765         IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(1D0-(2D0*PMQ/ECM)**2)
49766  
49767 C...Calculate R and sum of charges for QED or QFD case.
49768         RQQ=RQQ+3D0*QF**2*POLL
49769         IF(MSTJ(102).LE.1) THEN
49770           RTOT=RTOT+3D0*0.5D0*VQ*(3D0-VQ**2)*QF**2*POLL
49771         ELSE
49772           VF=SIGN(1D0,QF)-4D0*QF*PARU(102)
49773           RQV=RQV-6D0*QF*VF*SF1I
49774           RVA=RVA+3D0*(VF**2+1D0)*SF1W
49775           RTOT=RTOT+3D0*(0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-
49776      &    2D0*QF*VF*HF1I+VF**2*HF1W)+VQ**3*HF1W)
49777         ENDIF
49778   110 CONTINUE
49779       RSUM=RQQ
49780       IF(MSTJ(102).GE.2) RSUM=RQQ+SFI*RQV+SFW*RVA
49781  
49782 C...Calculate cross-section, including QCD corrections.
49783       PARJ(141)=RQQ
49784       PARJ(142)=RTOT
49785       PARJ(143)=RTOT*RQCD
49786       PARJ(144)=PARJ(143)
49787       PARJ(145)=PARJ(141)*86.8D0/ECM**2
49788       PARJ(146)=PARJ(142)*86.8D0/ECM**2
49789       PARJ(147)=PARJ(143)*86.8D0/ECM**2
49790       PARJ(148)=PARJ(147)
49791       PARJ(157)=RSUM*RQCD
49792       PARJ(158)=0D0
49793       PARJ(159)=0D0
49794       XTOT=PARJ(147)
49795       IF(MSTJ(107).LE.0) RETURN
49796  
49797 C...Virtual cross-section.
49798       XKL=PARJ(135)
49799       XKU=MIN(PARJ(136),1D0-(2D0*PARJ(127)/ECM)**2)
49800       ALE=2D0*LOG(ECM/PYMASS(11))-1D0
49801       SIGV=ALE/3D0+2D0*LOG(ECM**2/(PYMASS(13)*PYMASS(15)))/3D0-4D0/3D0+
49802      &1.526D0*LOG(ECM**2/0.932D0)
49803  
49804 C...Soft and hard radiative cross-section in QED case.
49805       IF(MSTJ(102).LE.1) THEN
49806         SIGV=1.5D0*ALE-0.5D0+PARU(1)**2/3D0+2D0*SIGV
49807         SIGS=ALE*(2D0*LOG(XKL)-LOG(1D0-XKL)-XKL)
49808         SIGH=ALE*(2D0*LOG(XKU/XKL)-LOG((1D0-XKU)/(1D0-XKL))-(XKU-XKL))
49809  
49810 C...Soft and hard radiative cross-section in QFD case.
49811       ELSE
49812         SZM=1D0-(PARJ(123)/ECM)**2
49813         SZW=PARJ(123)*PARJ(124)/ECM**2
49814         PARJ(161)=-RQQ/RSUM
49815         PARJ(162)=-(RQQ+RQV+RVA)/RSUM
49816         PARJ(163)=(RQV*(1D0-0.5D0*SZM-SFI)+RVA*(1.5D0-SZM-SFW))/RSUM
49817         PARJ(164)=(RQV*SZW**2*(1D0-2D0*SFW)+RVA*(2D0*SFI+SZW**2-
49818      &  4D0+3D0*SZM-SZM**2))/(SZW*RSUM)
49819         SIGV=1.5D0*ALE-0.5D0+PARU(1)**2/3D0+((2D0*RQQ+SFI*RQV)/
49820      &  RSUM)*SIGV+(SZW*SFW*RQV/RSUM)*PARU(1)*20D0/9D0
49821         SIGS=ALE*(2D0*LOG(XKL)+PARJ(161)*LOG(1D0-XKL)+PARJ(162)*XKL+
49822      &  PARJ(163)*LOG(((XKL-SZM)**2+SZW**2)/(SZM**2+SZW**2))+
49823      &  PARJ(164)*(ATAN((XKL-SZM)/SZW)-ATAN(-SZM/SZW)))
49824         SIGH=ALE*(2D0*LOG(XKU/XKL)+PARJ(161)*LOG((1D0-XKU)/
49825      &  (1D0-XKL))+PARJ(162)*(XKU-XKL)+PARJ(163)*
49826      &  LOG(((XKU-SZM)**2+SZW**2)/((XKL-SZM)**2+SZW**2))+
49827      &  PARJ(164)*(ATAN((XKU-SZM)/SZW)-ATAN((XKL-SZM)/SZW)))
49828       ENDIF
49829  
49830 C...Total cross-section and fraction of hard photon events.
49831       PARJ(160)=SIGH/(PARU(1)/PARU(101)+SIGV+SIGS+SIGH)
49832       PARJ(157)=RSUM*(1D0+(PARU(101)/PARU(1))*(SIGV+SIGS+SIGH))*RQCD
49833       PARJ(144)=PARJ(157)
49834       PARJ(148)=PARJ(144)*86.8D0/ECM**2
49835       XTOT=PARJ(148)
49836  
49837       RETURN
49838       END
49839  
49840 C*********************************************************************
49841  
49842 C...PYRADK
49843 C...Generates initial state photon radiation.
49844  
49845       SUBROUTINE PYRADK(ECM,MK,PAK,THEK,PHIK,ALPK)
49846  
49847 C...Double precision and integer declarations.
49848       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
49849       IMPLICIT INTEGER(I-N)
49850       INTEGER PYK,PYCHGE,PYCOMP
49851 C...Commonblocks.
49852       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
49853       SAVE /PYDAT1/
49854  
49855 C...Function: cumulative hard photon spectrum in QFD case.
49856       FXK(XX)=2D0*LOG(XX)+PARJ(161)*LOG(1D0-XX)+PARJ(162)*XX+
49857      &PARJ(163)*LOG((XX-SZM)**2+SZW**2)+PARJ(164)*ATAN((XX-SZM)/SZW)
49858  
49859 C...Determine whether radiative photon or not.
49860       MK=0
49861       PAK=0D0
49862       IF(PARJ(160).LT.PYR(0)) RETURN
49863       MK=1
49864  
49865 C...Photon energy range. Find photon momentum in QED case.
49866       XKL=PARJ(135)
49867       XKU=MIN(PARJ(136),1D0-(2D0*PARJ(127)/ECM)**2)
49868       IF(MSTJ(102).LE.1) THEN
49869   100   XK=1D0/(1D0+(1D0/XKL-1D0)*((1D0/XKU-1D0)/(1D0/XKL-1D0))**PYR(0))
49870         IF(1D0+(1D0-XK)**2.LT.2D0*PYR(0)) GOTO 100
49871  
49872 C...Ditto in QFD case, by numerical inversion of integrated spectrum.
49873       ELSE
49874         SZM=1D0-(PARJ(123)/ECM)**2
49875         SZW=PARJ(123)*PARJ(124)/ECM**2
49876         FXKL=FXK(XKL)
49877         FXKU=FXK(XKU)
49878         FXKD=1D-4*(FXKU-FXKL)
49879         FXKR=FXKL+PYR(0)*(FXKU-FXKL)
49880         NXK=0
49881   110   NXK=NXK+1
49882         XK=0.5D0*(XKL+XKU)
49883         FXKV=FXK(XK)
49884         IF(FXKV.GT.FXKR) THEN
49885           XKU=XK
49886           FXKU=FXKV
49887         ELSE
49888           XKL=XK
49889           FXKL=FXKV
49890         ENDIF
49891         IF(NXK.LT.15.AND.FXKU-FXKL.GT.FXKD) GOTO 110
49892         XK=XKL+(XKU-XKL)*(FXKR-FXKL)/(FXKU-FXKL)
49893       ENDIF
49894       PAK=0.5D0*ECM*XK
49895  
49896 C...Photon polar and azimuthal angle.
49897       PME=2D0*(PYMASS(11)/ECM)**2
49898   120 CTHM=PME*(2D0/PME)**PYR(0)
49899       IF(1D0-(XK**2*CTHM*(1D0-0.5D0*CTHM)+2D0*(1D0-XK)*PME/MAX(PME,
49900      &CTHM*(1D0-0.5D0*CTHM)))/(1D0+(1D0-XK)**2).LT.PYR(0)) GOTO 120
49901       CTHE=1D0-CTHM
49902       IF(PYR(0).GT.0.5D0) CTHE=-CTHE
49903       STHE=SQRT(MAX(0D0,(CTHM-PME)*(2D0-CTHM)))
49904       THEK=PYANGL(CTHE,STHE)
49905       PHIK=PARU(2)*PYR(0)
49906  
49907 C...Rotation angle for hadronic system.
49908       SGN=1D0
49909       IF(0.5D0*(2D0-XK*(1D0-CTHE))**2/((2D0-XK)**2+(XK*CTHE)**2).GT.
49910      &PYR(0)) SGN=-1D0
49911       ALPK=ASIN(SGN*STHE*(XK-SGN*(2D0*SQRT(1D0-XK)-2D0+XK)*CTHE)/
49912      &(2D0-XK*(1D0-SGN*CTHE)))
49913  
49914       RETURN
49915       END
49916  
49917 C*********************************************************************
49918  
49919 C...PYXKFL
49920 C...Selects flavour for produced qqbar pair.
49921  
49922       SUBROUTINE PYXKFL(KFL,ECM,ECMC,KFLC)
49923  
49924 C...Double precision and integer declarations.
49925       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
49926       IMPLICIT INTEGER(I-N)
49927       INTEGER PYK,PYCHGE,PYCOMP
49928 C...Commonblocks.
49929       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
49930       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
49931       SAVE /PYDAT1/,/PYDAT2/
49932  
49933 C...Calculate maximum weight in QED or QFD case.
49934       IF(MSTJ(102).LE.1) THEN
49935         RFMAX=4D0/9D0
49936       ELSE
49937         POLL=1D0-PARJ(131)*PARJ(132)
49938         SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
49939         SFW=ECMC**4/((ECMC**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
49940         SFI=SFW*(1D0-(PARJ(123)/ECMC)**2)
49941         VE=4D0*PARU(102)-1D0
49942         HF1I=SFI*SFF*(VE*POLL+PARJ(132)-PARJ(131))
49943         HF1W=SFW*SFF**2*((VE**2+1D0)*POLL+2D0*VE*(PARJ(132)-PARJ(131)))
49944         RFMAX=MAX(4D0/9D0*POLL-4D0/3D0*(1D0-8D0*PARU(102)/3D0)*HF1I+
49945      &  ((1D0-8D0*PARU(102)/3D0)**2+1D0)*HF1W,1D0/9D0*POLL+2D0/3D0*
49946      &  (-1D0+4D0*PARU(102)/3D0)*HF1I+((-1D0+4D0*PARU(102)/3D0)**2+
49947      &  1D0)*HF1W)
49948       ENDIF
49949  
49950 C...Choose flavour. Gives charge and velocity.
49951       NTRY=0
49952   100 NTRY=NTRY+1
49953       IF(NTRY.GT.100) THEN
49954         CALL PYERRM(14,'(PYXKFL:) caught in an infinite loop')
49955         KFLC=0
49956         RETURN
49957       ENDIF
49958       KFLC=KFL
49959       IF(KFL.LE.0) KFLC=1+INT(MSTJ(104)*PYR(0))
49960       MSTJ(93)=1
49961       PMQ=PYMASS(KFLC)
49962       IF(ECM.LT.2D0*PMQ+PARJ(127)) GOTO 100
49963       QF=KCHG(KFLC,1)/3D0
49964       VQ=1D0
49965       IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0D0,1D0-(2D0*PMQ/ECMC)**2))
49966  
49967 C...Calculate weight in QED or QFD case.
49968       IF(MSTJ(102).LE.1) THEN
49969         RF=QF**2
49970         RFV=0.5D0*VQ*(3D0-VQ**2)*QF**2
49971       ELSE
49972         VF=SIGN(1D0,QF)-4D0*QF*PARU(102)
49973         RF=QF**2*POLL-2D0*QF*VF*HF1I+(VF**2+1D0)*HF1W
49974         RFV=0.5D0*VQ*(3D0-VQ**2)*(QF**2*POLL-2D0*QF*VF*HF1I+VF**2*HF1W)+
49975      &  VQ**3*HF1W
49976         IF(RFV.GT.0D0) PARJ(171)=MIN(1D0,VQ**3*HF1W/RFV)
49977       ENDIF
49978  
49979 C...Weighting or new event (radiative photon). Cross-section update.
49980       IF(KFL.LE.0.AND.RF.LT.PYR(0)*RFMAX) GOTO 100
49981       PARJ(158)=PARJ(158)+1D0
49982       IF(ECMC.LT.2D0*PMQ+PARJ(127).OR.RFV.LT.PYR(0)*RF) KFLC=0
49983       IF(MSTJ(107).LE.0.AND.KFLC.EQ.0) GOTO 100
49984       IF(KFLC.NE.0) PARJ(159)=PARJ(159)+1D0
49985       PARJ(144)=PARJ(157)*PARJ(159)/PARJ(158)
49986       PARJ(148)=PARJ(144)*86.8D0/ECM**2
49987  
49988       RETURN
49989       END
49990  
49991 C*********************************************************************
49992  
49993 C...PYXJET
49994 C...Selects number of jets in matrix element approach.
49995  
49996       SUBROUTINE PYXJET(ECM,NJET,CUT)
49997  
49998 C...Double precision and integer declarations.
49999       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50000       IMPLICIT INTEGER(I-N)
50001       INTEGER PYK,PYCHGE,PYCOMP
50002 C...Commonblocks.
50003       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50004       SAVE /PYDAT1/
50005 C...Local array and data.
50006       DIMENSION ZHUT(5)
50007       DATA ZHUT/3.0922D0, 6.2291D0, 7.4782D0, 7.8440D0, 8.2560D0/
50008  
50009 C...Trivial result for two-jets only, including parton shower.
50010       IF(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.5) THEN
50011         CUT=0D0
50012  
50013 C...QCD and Abelian vector gluon theory: Q^2 for jet rate and R.
50014       ELSEIF(MSTJ(109).EQ.0.OR.MSTJ(109).EQ.2) THEN
50015         CF=4D0/3D0
50016         IF(MSTJ(109).EQ.2) CF=1D0
50017         IF(MSTJ(111).EQ.0) THEN
50018           Q2=ECM**2
50019           Q2R=ECM**2
50020         ELSEIF(MSTU(111).EQ.0) THEN
50021           PARJ(169)=MIN(1D0,PARJ(129))
50022           Q2=PARJ(169)*ECM**2
50023           PARJ(168)=MIN(1D0,MAX(PARJ(128),EXP(-12D0*PARU(1)/
50024      &    ((33D0-2D0*MSTU(112))*PARU(111)))))
50025           Q2R=PARJ(168)*ECM**2
50026         ELSE
50027           PARJ(169)=MIN(1D0,MAX(PARJ(129),(2D0*PARU(112)/ECM)**2))
50028           Q2=PARJ(169)*ECM**2
50029           PARJ(168)=MIN(1D0,MAX(PARJ(128),PARU(112)/ECM,
50030      &    (2D0*PARU(112)/ECM)**2))
50031           Q2R=PARJ(168)*ECM**2
50032         ENDIF
50033  
50034 C...alpha_strong for R and R itself.
50035         ALSPI=(3D0/4D0)*CF*PYALPS(Q2R)/PARU(1)
50036         IF(IABS(MSTJ(101)).EQ.1) THEN
50037           RQCD=1D0+ALSPI
50038         ELSEIF(MSTJ(109).EQ.0) THEN
50039           RQCD=1D0+ALSPI+(1.986D0-0.115D0*MSTU(118))*ALSPI**2
50040           IF(MSTJ(111).EQ.1) RQCD=MAX(1D0,RQCD+
50041      &    (33D0-2D0*MSTU(112))/12D0*LOG(PARJ(168))*ALSPI**2)
50042         ELSE
50043           RQCD=1D0+ALSPI-(3D0/32D0+0.519D0*MSTU(118))*(4D0*ALSPI/3D0)**2
50044         ENDIF
50045  
50046 C...alpha_strong for jet rate. Initial value for y cut.
50047         ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
50048         CUT=MAX(0.001D0,PARJ(125),(PARJ(126)/ECM)**2)
50049         IF(IABS(MSTJ(101)).LE.1.OR.(MSTJ(109).EQ.0.AND.MSTJ(111).EQ.0))
50050      &  CUT=MAX(CUT,EXP(-SQRT(0.75D0/ALSPI))/2D0)
50051         IF(MSTJ(110).EQ.2) CUT=MAX(0.01D0,MIN(0.05D0,CUT))
50052  
50053 C...Parametrization of first order three-jet cross-section.
50054   100   IF(MSTJ(101).EQ.0.OR.CUT.GE.0.25D0) THEN
50055           PARJ(152)=0D0
50056         ELSE
50057           PARJ(152)=(2D0*ALSPI/3D0)*((3D0-6D0*CUT+2D0*LOG(CUT))*
50058      &    LOG(CUT/(1D0-2D0*CUT))+(2.5D0+1.5D0*CUT-6.571D0)*
50059      &    (1D0-3D0*CUT)+5.833D0*(1D0-3D0*CUT)**2-3.894D0*
50060      &    (1D0-3D0*CUT)**3+1.342D0*(1D0-3D0*CUT)**4)/RQCD
50061           IF(MSTJ(109).EQ.2.AND.(MSTJ(101).EQ.2.OR.MSTJ(101).LE.-2))
50062      &    PARJ(152)=0D0
50063         ENDIF
50064  
50065 C...Parametrization of second order three-jet cross-section.
50066         IF(IABS(MSTJ(101)).LE.1.OR.MSTJ(101).EQ.3.OR.MSTJ(109).EQ.2.OR.
50067      &  CUT.GE.0.25D0) THEN
50068           PARJ(153)=0D0
50069         ELSEIF(MSTJ(110).LE.1) THEN
50070           CT=LOG(1D0/CUT-2D0)
50071           PARJ(153)=ALSPI**2*CT**2*(2.419D0+0.5989D0*CT+0.6782D0*CT**2-
50072      &    0.2661D0*CT**3+0.01159D0*CT**4)/RQCD
50073  
50074 C...Interpolation in second/first order ratio for Zhu parametrization.
50075         ELSEIF(MSTJ(110).EQ.2) THEN
50076           IZA=0
50077           DO 110 IY=1,5
50078             IF(ABS(CUT-0.01D0*IY).LT.0.0001D0) IZA=IY
50079   110     CONTINUE
50080           IF(IZA.NE.0) THEN
50081             ZHURAT=ZHUT(IZA)
50082           ELSE
50083             IZ=100D0*CUT
50084             ZHURAT=ZHUT(IZ)+(100D0*CUT-IZ)*(ZHUT(IZ+1)-ZHUT(IZ))
50085           ENDIF
50086           PARJ(153)=ALSPI*PARJ(152)*ZHURAT
50087         ENDIF
50088  
50089 C...Shift in second order three-jet cross-section with optimized Q^2.
50090         IF(MSTJ(111).EQ.1.AND.IABS(MSTJ(101)).GE.2.AND.MSTJ(101).NE.3
50091      &  .AND.CUT.LT.0.25D0) PARJ(153)=PARJ(153)+
50092      &  (33D0-2D0*MSTU(112))/12D0*LOG(PARJ(169))*ALSPI*PARJ(152)
50093  
50094 C...Parametrization of second order four-jet cross-section.
50095         IF(IABS(MSTJ(101)).LE.1.OR.CUT.GE.0.125D0) THEN
50096           PARJ(154)=0D0
50097         ELSE
50098           CT=LOG(1D0/CUT-5D0)
50099           IF(CUT.LE.0.018D0) THEN
50100             XQQGG=6.349D0-4.330D0*CT+0.8304D0*CT**2
50101             IF(MSTJ(109).EQ.2) XQQGG=(4D0/3D0)**2*(3.035D0-2.091D0*CT+
50102      &      0.4059D0*CT**2)
50103             XQQQQ=1.25D0*(-0.1080D0+0.01486D0*CT+0.009364D0*CT**2)
50104             IF(MSTJ(109).EQ.2) XQQQQ=8D0*XQQQQ
50105           ELSE
50106             XQQGG=-0.09773D0+0.2959D0*CT-0.2764D0*CT**2+0.08832D0*CT**3
50107             IF(MSTJ(109).EQ.2) XQQGG=(4D0/3D0)**2*(-0.04079D0+
50108      &      0.1340D0*CT-0.1326D0*CT**2+0.04365D0*CT**3)
50109             XQQQQ=1.25D0*(0.003661D0-0.004888D0*CT-0.001081D0*CT**2+
50110      &      0.002093D0*CT**3)
50111             IF(MSTJ(109).EQ.2) XQQQQ=8D0*XQQQQ
50112           ENDIF
50113           PARJ(154)=ALSPI**2*CT**2*(XQQGG+XQQQQ)/RQCD
50114           PARJ(155)=XQQQQ/(XQQGG+XQQQQ)
50115         ENDIF
50116  
50117 C...If negative three-jet rate, change y' optimization parameter.
50118         IF(MSTJ(111).EQ.1.AND.PARJ(152)+PARJ(153).LT.0D0.AND.
50119      &  PARJ(169).LT.0.99D0) THEN
50120           PARJ(169)=MIN(1D0,1.2D0*PARJ(169))
50121           Q2=PARJ(169)*ECM**2
50122           ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
50123           GOTO 100
50124         ENDIF
50125  
50126 C...If too high cross-section, use harder cuts, or fail.
50127         IF(PARJ(152)+PARJ(153)+PARJ(154).GE.1) THEN
50128           IF(MSTJ(110).EQ.2.AND.CUT.GT.0.0499D0.AND.MSTJ(111).EQ.1.AND.
50129      &    PARJ(169).LT.0.99D0) THEN
50130             PARJ(169)=MIN(1D0,1.2D0*PARJ(169))
50131             Q2=PARJ(169)*ECM**2
50132             ALSPI=(3D0/4D0)*CF*PYALPS(Q2)/PARU(1)
50133             GOTO 100
50134           ELSEIF(MSTJ(110).EQ.2.AND.CUT.GT.0.0499D0) THEN
50135             CALL PYERRM(26,
50136      &      '(PYXJET:) no allowed y cut value for Zhu parametrization')
50137           ENDIF
50138           CUT=0.26D0*(4D0*CUT)**(PARJ(152)+PARJ(153)+
50139      &    PARJ(154))**(-1D0/3D0)
50140           IF(MSTJ(110).EQ.2) CUT=MAX(0.01D0,MIN(0.05D0,CUT))
50141           GOTO 100
50142         ENDIF
50143  
50144 C...Scalar gluon (first order only).
50145       ELSE
50146         ALSPI=PYALPS(ECM**2)/PARU(1)
50147         CUT=MAX(0.001D0,PARJ(125),(PARJ(126)/ECM)**2,EXP(-3D0/ALSPI))
50148         PARJ(152)=0D0
50149         IF(CUT.LT.0.25D0) PARJ(152)=(ALSPI/3D0)*((1D0-2D0*CUT)*
50150      &  LOG((1D0-2D0*CUT)/CUT)+0.5D0*(9D0*CUT**2-1D0))
50151         PARJ(153)=0D0
50152         PARJ(154)=0D0
50153       ENDIF
50154  
50155 C...Select number of jets.
50156       PARJ(150)=CUT
50157       IF(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.5) THEN
50158         NJET=2
50159       ELSEIF(MSTJ(101).LE.0) THEN
50160         NJET=MIN(4,2-MSTJ(101))
50161       ELSE
50162         RNJ=PYR(0)
50163         NJET=2
50164         IF(PARJ(152)+PARJ(153)+PARJ(154).GT.RNJ) NJET=3
50165         IF(PARJ(154).GT.RNJ) NJET=4
50166       ENDIF
50167  
50168       RETURN
50169       END
50170  
50171 C*********************************************************************
50172  
50173 C...PYX3JT
50174 C...Selects the kinematical variables of three-jet events.
50175  
50176       SUBROUTINE PYX3JT(NJET,CUT,KFL,ECM,X1,X2)
50177  
50178 C...Double precision and integer declarations.
50179       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50180       IMPLICIT INTEGER(I-N)
50181       INTEGER PYK,PYCHGE,PYCOMP
50182 C...Commonblocks.
50183       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50184       SAVE /PYDAT1/
50185 C...Local array.
50186       DIMENSION ZHUP(5,12)
50187  
50188 C...Coefficients of Zhu second order parametrization.
50189       DATA ((ZHUP(IC1,IC2),IC2=1,12),IC1=1,5)/
50190      &18.29D0,  89.56D0,  4.541D0,  -52.09D0, -109.8D0,  24.90D0,
50191      &11.63D0,  3.683D0,  17.50D0,0.002440D0, -1.362D0,-0.3537D0,
50192      &11.42D0,  6.299D0, -22.55D0,  -8.915D0,  59.25D0, -5.855D0,
50193      &-32.85D0, -1.054D0, -16.90D0,0.006489D0,-0.8156D0,0.01095D0,
50194      &7.847D0, -3.964D0, -35.83D0,   1.178D0,  29.39D0, 0.2806D0,
50195      &47.82D0, -12.36D0, -56.72D0, 0.04054D0,-0.4365D0, 0.6062D0,
50196      &5.441D0, -56.89D0, -50.27D0,   15.13D0,  114.3D0, -18.19D0,
50197      &97.05D0, -1.890D0, -139.9D0, 0.08153D0,-0.4984D0, 0.9439D0,
50198      &-17.65D0,  51.44D0, -58.32D0,   70.95D0, -255.7D0, -78.99D0,
50199      &476.9D0,  29.65D0, -239.3D0,  0.4745D0, -1.174D0,  6.081D0/
50200  
50201 C...Dilogarithm of x for x<0.5 (x>0.5 obtained by analytic trick).
50202       DILOG(X)=X+X**2/4D0+X**3/9D0+X**4/16D0+X**5/25D0+X**6/36D0+
50203      &X**7/49D0
50204  
50205 C...Event type. Mass effect factors and other common constants.
50206       MSTJ(120)=2
50207       MSTJ(121)=0
50208       PMQ=PYMASS(KFL)
50209       QME=(2D0*PMQ/ECM)**2
50210       IF(MSTJ(109).NE.1) THEN
50211         CUTL=LOG(CUT)
50212         CUTD=LOG(1D0/CUT-2D0)
50213         IF(MSTJ(109).EQ.0) THEN
50214           CF=4D0/3D0
50215           CN=3D0
50216           TR=2D0
50217           WTMX=MIN(20D0,37D0-6D0*CUTD)
50218           IF(MSTJ(110).EQ.2) WTMX=2D0*(7.5D0+80D0*CUT)
50219         ELSE
50220           CF=1D0
50221           CN=0D0
50222           TR=12D0
50223           WTMX=0D0
50224         ENDIF
50225  
50226 C...Alpha_strong and effects of optimized Q^2 scale. Maximum weight.
50227         ALS2PI=PARU(118)/PARU(2)
50228         WTOPT=0D0
50229         IF(MSTJ(111).EQ.1) WTOPT=(33D0-2D0*MSTU(112))/6D0*
50230      &  LOG(PARJ(169))*ALS2PI
50231         WTMAX=MAX(0D0,1D0+WTOPT+ALS2PI*WTMX)
50232  
50233 C...Choose three-jet events in allowed region.
50234   100   NJET=3
50235   110   Y13L=CUTL+CUTD*PYR(0)
50236         Y23L=CUTL+CUTD*PYR(0)
50237         Y13=EXP(Y13L)
50238         Y23=EXP(Y23L)
50239         Y12=1D0-Y13-Y23
50240         IF(Y12.LE.CUT) GOTO 110
50241         IF(Y13**2+Y23**2+2D0*Y12.LE.2D0*PYR(0)) GOTO 110
50242  
50243 C...Second order corrections.
50244         IF(MSTJ(101).EQ.2.AND.MSTJ(110).LE.1) THEN
50245           Y12L=LOG(Y12)
50246           Y13M=LOG(1D0-Y13)
50247           Y23M=LOG(1D0-Y23)
50248           Y12M=LOG(1D0-Y12)
50249           IF(Y13.LE.0.5D0) Y13I=DILOG(Y13)
50250           IF(Y13.GE.0.5D0) Y13I=1.644934D0-Y13L*Y13M-DILOG(1D0-Y13)
50251           IF(Y23.LE.0.5D0) Y23I=DILOG(Y23)
50252           IF(Y23.GE.0.5D0) Y23I=1.644934D0-Y23L*Y23M-DILOG(1D0-Y23)
50253           IF(Y12.LE.0.5D0) Y12I=DILOG(Y12)
50254           IF(Y12.GE.0.5D0) Y12I=1.644934D0-Y12L*Y12M-DILOG(1D0-Y12)
50255           WT1=(Y13**2+Y23**2+2D0*Y12)/(Y13*Y23)
50256           WT2=CF*(-2D0*(CUTL-Y12L)**2-3D0*CUTL-1D0+3.289868D0+
50257      &    2D0*(2D0*CUTL-Y12L)*CUT/Y12)+
50258      &    CN*((CUTL-Y12L)**2-(CUTL-Y13L)**2-(CUTL-Y23L)**2-
50259      &    11D0*CUTL/6D0+67D0/18D0+1.644934D0-(2D0*CUTL-Y12L)*CUT/Y12+
50260      &    (2D0*CUTL-Y13L)*CUT/Y13+(2D0*CUTL-Y23L)*CUT/Y23)+
50261      &    TR*(2D0*CUTL/3D0-10D0/9D0)+
50262      &    CF*(Y12/(Y12+Y13)+Y12/(Y12+Y23)+(Y12+Y23)/Y13+(Y12+Y13)/Y23+
50263      &    Y13L*(4D0*Y12**2+2D0*Y12*Y13+4D0*Y12*Y23+Y13*Y23)/
50264      &    (Y12+Y23)**2+Y23L*(4D0*Y12**2+2D0*Y12*Y23+4D0*Y12*Y13+
50265      &    Y13*Y23)/(Y12+Y13)**2)/WT1+
50266      &    CN*(Y13L*Y13/(Y12+Y23)+Y23L*Y23/(Y12+Y13))/WT1+(CN-2D0*CF)*
50267      &    ((Y12**2+(Y12+Y13)**2)*(Y12L*Y23L-Y12L*Y12M-Y23L*
50268      &    Y23M+1.644934D0-Y12I-Y23I)/(Y13*Y23)+(Y12**2+(Y12+Y23)**2)*
50269      &    (Y12L*Y13L-Y12L*Y12M-Y13L*Y13M+1.644934D0-Y12I-Y13I)/
50270      &    (Y13*Y23)+(Y13**2+Y23**2)/(Y13*Y23*(Y13+Y23))-
50271      &    2D0*Y12L*Y12**2/(Y13+Y23)**2-4D0*Y12L*Y12/(Y13+Y23))/WT1-
50272      &    CN*(Y13L*Y23L-Y13L*Y13M-Y23L*Y23M+1.644934D0-Y13I-Y23I)
50273           IF(1D0+WTOPT+ALS2PI*WT2.LE.0D0) MSTJ(121)=1
50274           IF(1D0+WTOPT+ALS2PI*WT2.LE.WTMAX*PYR(0)) GOTO 110
50275           PARJ(156)=(WTOPT+ALS2PI*WT2)/(1D0+WTOPT+ALS2PI*WT2)
50276  
50277         ELSEIF(MSTJ(101).EQ.2.AND.MSTJ(110).EQ.2) THEN
50278 C...Second order corrections; Zhu parametrization of ERT.
50279           ZX=(Y23-Y13)**2
50280           ZY=1D0-Y12
50281           IZA=0
50282           DO 120 IY=1,5
50283             IF(ABS(CUT-0.01D0*IY).LT.0.0001D0) IZA=IY
50284   120     CONTINUE
50285           IF(IZA.NE.0) THEN
50286             IZ=IZA
50287             WT2=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
50288      &      ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
50289      &      (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
50290      &      ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
50291           ELSE
50292             IZ=100D0*CUT
50293             WTL=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
50294      &      ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
50295      &      (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
50296      &      ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
50297             IZ=IZ+1
50298             WTU=ZHUP(IZ,1)+ZHUP(IZ,2)*ZX+ZHUP(IZ,3)*ZX**2+(ZHUP(IZ,4)+
50299      &      ZHUP(IZ,5)*ZX)*ZY+(ZHUP(IZ,6)+ZHUP(IZ,7)*ZX)*ZY**2+
50300      &      (ZHUP(IZ,8)+ZHUP(IZ,9)*ZX)*ZY**3+ZHUP(IZ,10)/(ZX-ZY**2)+
50301      &      ZHUP(IZ,11)/(1D0-ZY)+ZHUP(IZ,12)/ZY
50302             WT2=WTL+(WTU-WTL)*(100D0*CUT+1D0-IZ)
50303           ENDIF
50304           IF(1D0+WTOPT+2D0*ALS2PI*WT2.LE.0D0) MSTJ(121)=1
50305           IF(1D0+WTOPT+2D0*ALS2PI*WT2.LE.WTMAX*PYR(0)) GOTO 110
50306           PARJ(156)=(WTOPT+2D0*ALS2PI*WT2)/(1D0+WTOPT+2D0*ALS2PI*WT2)
50307         ENDIF
50308  
50309 C...Impose mass cuts (gives two jets). For fixed jet number new try.
50310         X1=1D0-Y23
50311         X2=1D0-Y13
50312         X3=1D0-Y12
50313         IF(4D0*Y23*Y13*Y12/X3**2.LE.QME) NJET=2
50314         IF(MOD(MSTJ(103),4).GE.2.AND.IABS(MSTJ(101)).LE.1.AND.QME*X3+
50315      &  0.5D0*QME**2+(0.5D0*QME+0.25D0*QME**2)*((1D0-X2)/(1D0-X1)+
50316      &  (1D0-X1)/(1D0-X2)).GT.(X1**2+X2**2)*PYR(0)) NJET=2
50317         IF(MSTJ(101).EQ.-1.AND.NJET.EQ.2) GOTO 100
50318  
50319 C...Scalar gluon model (first order only, no mass effects).
50320       ELSE
50321   130   NJET=3
50322   140   X3=SQRT(4D0*CUT**2+PYR(0)*((1D0-CUT)**2-4D0*CUT**2))
50323         IF(LOG((X3-CUT)/CUT).LE.PYR(0)*LOG((1D0-2D0*CUT)/CUT)) GOTO 140
50324         YD=SIGN(2D0*CUT*((X3-CUT)/CUT)**PYR(0)-X3,PYR(0)-0.5D0)
50325         X1=1D0-0.5D0*(X3+YD)
50326         X2=1D0-0.5D0*(X3-YD)
50327         IF(4D0*(1D0-X1)*(1D0-X2)*(1D0-X3)/X3**2.LE.QME) NJET=2
50328         IF(MSTJ(102).GE.2) THEN
50329           IF(X3**2-2D0*(1D0+X3)*(1D0-X1)*(1D0-X2)*PARJ(171).LT.
50330      &    X3**2*PYR(0)) NJET=2
50331         ENDIF
50332         IF(MSTJ(101).EQ.-1.AND.NJET.EQ.2) GOTO 130
50333       ENDIF
50334  
50335       RETURN
50336       END
50337  
50338 C*********************************************************************
50339  
50340 C...PYX4JT
50341 C...Selects the kinematical variables of four-jet events.
50342  
50343       SUBROUTINE PYX4JT(NJET,CUT,KFL,ECM,KFLN,X1,X2,X4,X12,X14)
50344  
50345 C...Double precision and integer declarations.
50346       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50347       IMPLICIT INTEGER(I-N)
50348       INTEGER PYK,PYCHGE,PYCOMP
50349 C...Commonblocks.
50350       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50351       SAVE /PYDAT1/
50352 C...Local arrays.
50353       DIMENSION WTA(4),WTB(4),WTC(4),WTD(4),WTE(4)
50354  
50355 C...Common constants. Colour factors for QCD and Abelian gluon theory.
50356       PMQ=PYMASS(KFL)
50357       QME=(2D0*PMQ/ECM)**2
50358       CT=LOG(1D0/CUT-5D0)
50359       IF(MSTJ(109).EQ.0) THEN
50360         CF=4D0/3D0
50361         CN=3D0
50362         TR=2.5D0
50363       ELSE
50364         CF=1D0
50365         CN=0D0
50366         TR=15D0
50367       ENDIF
50368  
50369 C...Choice of process (qqbargg or qqbarqqbar).
50370   100 NJET=4
50371       IT=1
50372       IF(PARJ(155).GT.PYR(0)) IT=2
50373       IF(MSTJ(101).LE.-3) IT=-MSTJ(101)-2
50374       IF(IT.EQ.1) WTMX=0.7D0/CUT**2
50375       IF(IT.EQ.1.AND.MSTJ(109).EQ.2) WTMX=0.6D0/CUT**2
50376       IF(IT.EQ.2) WTMX=0.1125D0*CF*TR/CUT**2
50377       ID=1
50378  
50379 C...Sample the five kinematical variables (for qqgg preweighted in y34).
50380   110 Y134=3D0*CUT+(1D0-6D0*CUT)*PYR(0)
50381       Y234=3D0*CUT+(1D0-6D0*CUT)*PYR(0)
50382       IF(IT.EQ.1) Y34=(1D0-5D0*CUT)*EXP(-CT*PYR(0))
50383       IF(IT.EQ.2) Y34=CUT+(1D0-6D0*CUT)*PYR(0)
50384       IF(Y34.LE.Y134+Y234-1D0.OR.Y34.GE.Y134*Y234) GOTO 110
50385       VT=PYR(0)
50386       CP=COS(PARU(1)*PYR(0))
50387       Y14=(Y134-Y34)*VT
50388       Y13=Y134-Y14-Y34
50389       VB=Y34*(1D0-Y134-Y234+Y34)/((Y134-Y34)*(Y234-Y34))
50390       Y24=0.5D0*(Y234-Y34)*(1D0-4D0*SQRT(MAX(0D0,VT*(1D0-VT)*
50391      &VB*(1D0-VB)))*CP-(1D0-2D0*VT)*(1D0-2D0*VB))
50392       Y23=Y234-Y34-Y24
50393       Y12=1D0-Y134-Y23-Y24
50394       IF(MIN(Y12,Y13,Y14,Y23,Y24).LE.CUT) GOTO 110
50395       Y123=Y12+Y13+Y23
50396       Y124=Y12+Y14+Y24
50397  
50398 C...Calculate matrix elements for qqgg or qqqq process.
50399       IC=0
50400       WTTOT=0D0
50401   120 IC=IC+1
50402       IF(IT.EQ.1) THEN
50403         WTA(IC)=(Y12*Y34**2-Y13*Y24*Y34+Y14*Y23*Y34+3D0*Y12*Y23*Y34+
50404      &  3D0*Y12*Y14*Y34+4D0*Y12**2*Y34-Y13*Y23*Y24+2D0*Y12*Y23*Y24-
50405      &  Y13*Y14*Y24-2D0*Y12*Y13*Y24+2D0*Y12**2*Y24+Y14*Y23**2+2D0*Y12*
50406      &  Y23**2+Y14**2*Y23+4D0*Y12*Y14*Y23+4D0*Y12**2*Y23+2D0*Y12*Y14**2+
50407      &  2D0*Y12*Y13*Y14+4D0*Y12**2*Y14+2D0*Y12**2*Y13+2D0*Y12**3)/
50408      &  (2D0*Y13*Y134*Y234*Y24)+(Y24*Y34+Y12*Y34+Y13*Y24-
50409      &  Y14*Y23+Y12*Y13)/(Y13*Y134**2)+2D0*Y23*(1D0-Y13)/
50410      &  (Y13*Y134*Y24)+Y34/(2D0*Y13*Y24)
50411         WTB(IC)=(Y12*Y24*Y34+Y12*Y14*Y34-Y13*Y24**2+Y13*Y14*Y24+2D0*Y12*
50412      &  Y14*Y24)/(Y13*Y134*Y23*Y14)+Y12*(1D0+Y34)*Y124/(Y134*Y234*Y14*
50413      &  Y24)-(2D0*Y13*Y24+Y14**2+Y13*Y23+2D0*Y12*Y13)/(Y13*Y134*Y14)+
50414      &  Y12*Y123*Y124/(2D0*Y13*Y14*Y23*Y24)
50415         WTC(IC)=-(5D0*Y12*Y34**2+2D0*Y12*Y24*Y34+2D0*Y12*Y23*Y34+
50416      &  2D0*Y12*Y14*Y34+2D0*Y12*Y13*Y34+4D0*Y12**2*Y34-Y13*Y24**2+
50417      &  Y14*Y23*Y24+Y13*Y23*Y24+Y13*Y14*Y24-Y12*Y14*Y24-Y13**2*Y24-
50418      &  3D0*Y12*Y13*Y24-Y14*Y23**2-Y14**2*Y23+Y13*Y14*Y23-
50419      &  3D0*Y12*Y14*Y23-Y12*Y13*Y23)/(4D0*Y134*Y234*Y34**2)+
50420      &  (3D0*Y12*Y34**2-3D0*Y13*Y24*Y34+3D0*Y12*Y24*Y34+
50421      &  3D0*Y14*Y23*Y34-Y13*Y24**2-Y12*Y23*Y34+6D0*Y12*Y14*Y34+
50422      &  2D0*Y12*Y13*Y34-2D0*Y12**2*Y34+Y14*Y23*Y24-3D0*Y13*Y23*Y24-
50423      &  2D0*Y13*Y14*Y24+4D0*Y12*Y14*Y24+2D0*Y12*Y13*Y24+
50424      &  3D0*Y14*Y23**2+2D0*Y14**2*Y23+2D0*Y14**2*Y12+
50425      &  2D0*Y12**2*Y14+6D0*Y12*Y14*Y23-2D0*Y12*Y13**2-
50426      &  2D0*Y12**2*Y13)/(4D0*Y13*Y134*Y234*Y34)
50427         WTC(IC)=WTC(IC)+(2D0*Y12*Y34**2-2D0*Y13*Y24*Y34+Y12*Y24*Y34+
50428      &  4D0*Y13*Y23*Y34+4D0*Y12*Y14*Y34+2D0*Y12*Y13*Y34+2D0*Y12**2*Y34-
50429      &  Y13*Y24**2+3D0*Y14*Y23*Y24+4D0*Y13*Y23*Y24-2D0*Y13*Y14*Y24+
50430      &  4D0*Y12*Y14*Y24+2D0*Y12*Y13*Y24+2D0*Y14*Y23**2+4D0*Y13*Y23**2+
50431      &  2D0*Y13*Y14*Y23+2D0*Y12*Y14*Y23+4D0*Y12*Y13*Y23+2D0*Y12*Y14**2+
50432      &  4D0*Y12**2*Y13+4D0*Y12*Y13*Y14+2D0*Y12**2*Y14)/
50433      &  (4D0*Y13*Y134*Y24*Y34)-(Y12*Y34**2-2D0*Y14*Y24*Y34-
50434      &  2D0*Y13*Y24*Y34-Y14*Y23*Y34+Y13*Y23*Y34+Y12*Y14*Y34+
50435      &  2D0*Y12*Y13*Y34-2D0*Y14**2*Y24-4D0*Y13*Y14*Y24-
50436      &  4D0*Y13**2*Y24-Y14**2*Y23-Y13**2*Y23+Y12*Y13*Y14-
50437      &  Y12*Y13**2)/(2D0*Y13*Y34*Y134**2)+(Y12*Y34**2-
50438      &  4D0*Y14*Y24*Y34-2D0*Y13*Y24*Y34-2D0*Y14*Y23*Y34-
50439      &  4D0*Y13*Y23*Y34-4D0*Y12*Y14*Y34-4D0*Y12*Y13*Y34-
50440      &  2D0*Y13*Y14*Y24+2D0*Y13**2*Y24+2D0*Y14**2*Y23-
50441      &  2D0*Y13*Y14*Y23-Y12*Y14**2-6D0*Y12*Y13*Y14-
50442      &  Y12*Y13**2)/(4D0*Y34**2*Y134**2)
50443         WTTOT=WTTOT+Y34*CF*(CF*WTA(IC)+(CF-0.5D0*CN)*WTB(IC)+
50444      &  CN*WTC(IC))/8D0
50445       ELSE
50446         WTD(IC)=(Y13*Y23*Y34+Y12*Y23*Y34-Y12**2*Y34+Y13*Y23*Y24+2D0*Y12*
50447      &  Y23*Y24-Y14*Y23**2+Y12*Y13*Y24+Y12*Y14*Y23+Y12*Y13*Y14)/(Y13**2*
50448      &  Y123**2)-(Y12*Y34**2-Y13*Y24*Y34+Y12*Y24*Y34-Y14*Y23*Y34-Y12*
50449      &  Y23*Y34-Y13*Y24**2+Y14*Y23*Y24-Y13*Y23*Y24-Y13**2*Y24+Y14*
50450      &  Y23**2)/(Y13**2*Y123*Y134)+(Y13*Y14*Y12+Y34*Y14*Y12-Y34**2*Y12+
50451      &  Y13*Y14*Y24+2D0*Y34*Y14*Y24-Y23*Y14**2+Y34*Y13*Y24+Y34*Y23*Y14+
50452      &  Y34*Y13*Y23)/(Y13**2*Y134**2)-(Y34*Y12**2-Y13*Y24*Y12+Y34*Y24*
50453      &  Y12-Y23*Y14*Y12-Y34*Y14*Y12-Y13*Y24**2+Y23*Y14*Y24-Y13*Y14*Y24-
50454      &  Y13**2*Y24+Y23*Y14**2)/(Y13**2*Y134*Y123)
50455         WTE(IC)=(Y12*Y34*(Y23-Y24+Y14+Y13)+Y13*Y24**2-Y14*Y23*Y24+Y13*
50456      &  Y23*Y24+Y13*Y14*Y24+Y13**2*Y24-Y14*Y23*(Y14+Y23+Y13))/(Y13*Y23*
50457      &  Y123*Y134)-Y12*(Y12*Y34-Y23*Y24-Y13*Y24-Y14*Y23-Y14*Y13)/(Y13*
50458      &  Y23*Y123**2)-(Y14+Y13)*(Y24+Y23)*Y34/(Y13*Y23*Y134*Y234)+
50459      &  (Y12*Y34*(Y14-Y24+Y23+Y13)+Y13*Y24**2-Y23*Y14*Y24+Y13*Y14*Y24+
50460      &  Y13*Y23*Y24+Y13**2*Y24-Y23*Y14*(Y14+Y23+Y13))/(Y13*Y14*Y134*
50461      &  Y123)-Y34*(Y34*Y12-Y14*Y24-Y13*Y24-Y23*Y14-Y23*Y13)/(Y13*Y14*
50462      &  Y134**2)-(Y23+Y13)*(Y24+Y14)*Y12/(Y13*Y14*Y123*Y124)
50463         WTTOT=WTTOT+CF*(TR*WTD(IC)+(CF-0.5D0*CN)*WTE(IC))/16D0
50464       ENDIF
50465  
50466 C...Permutations of momenta in matrix element. Weighting.
50467   130 IF(IC.EQ.1.OR.IC.EQ.3.OR.ID.EQ.2.OR.ID.EQ.3) THEN
50468         YSAV=Y13
50469         Y13=Y14
50470         Y14=YSAV
50471         YSAV=Y23
50472         Y23=Y24
50473         Y24=YSAV
50474         YSAV=Y123
50475         Y123=Y124
50476         Y124=YSAV
50477       ENDIF
50478       IF(IC.EQ.2.OR.IC.EQ.4.OR.ID.EQ.3.OR.ID.EQ.4) THEN
50479         YSAV=Y13
50480         Y13=Y23
50481         Y23=YSAV
50482         YSAV=Y14
50483         Y14=Y24
50484         Y24=YSAV
50485         YSAV=Y134
50486         Y134=Y234
50487         Y234=YSAV
50488       ENDIF
50489       IF(IC.LE.3) GOTO 120
50490       IF(ID.EQ.1.AND.WTTOT.LT.PYR(0)*WTMX) GOTO 110
50491       IC=5
50492  
50493 C...qqgg events: string configuration and event type.
50494       IF(IT.EQ.1) THEN
50495         IF(MSTJ(109).EQ.0.AND.ID.EQ.1) THEN
50496           PARJ(156)=Y34*(2D0*(WTA(1)+WTA(2)+WTA(3)+WTA(4))+4D0*(WTC(1)+
50497      &    WTC(2)+WTC(3)+WTC(4)))/(9D0*WTTOT)
50498           IF(WTA(2)+WTA(4)+2D0*(WTC(2)+WTC(4)).GT.PYR(0)*(WTA(1)+WTA(2)+
50499      &    WTA(3)+WTA(4)+2D0*(WTC(1)+WTC(2)+WTC(3)+WTC(4)))) ID=2
50500           IF(ID.EQ.2) GOTO 130
50501         ELSEIF(MSTJ(109).EQ.2.AND.ID.EQ.1) THEN
50502           PARJ(156)=Y34*(WTA(1)+WTA(2)+WTA(3)+WTA(4))/(8D0*WTTOT)
50503           IF(WTA(2)+WTA(4).GT.PYR(0)*(WTA(1)+WTA(2)+WTA(3)+WTA(4))) ID=2
50504           IF(ID.EQ.2) GOTO 130
50505         ENDIF
50506         MSTJ(120)=3
50507         IF(MSTJ(109).EQ.0.AND.0.5D0*Y34*(WTC(1)+WTC(2)+WTC(3)+
50508      &  WTC(4)).GT.PYR(0)*WTTOT) MSTJ(120)=4
50509         KFLN=21
50510  
50511 C...Mass cuts. Kinematical variables out.
50512         IF(Y12.LE.CUT+QME) NJET=2
50513         IF(NJET.EQ.2) GOTO 150
50514         Q12=0.5D0*(1D0-SQRT(1D0-QME/Y12))
50515         X1=1D0-(1D0-Q12)*Y234-Q12*Y134
50516         X4=1D0-(1D0-Q12)*Y134-Q12*Y234
50517         X2=1D0-Y124
50518         X12=(1D0-Q12)*Y13+Q12*Y23
50519         X14=Y12-0.5D0*QME
50520         IF(Y134*Y234/((1D0-X1)*(1D0-X4)).LE.PYR(0)) NJET=2
50521  
50522 C...qqbarqqbar events: string configuration, choose new flavour.
50523       ELSE
50524         IF(ID.EQ.1) THEN
50525           WTR=PYR(0)*(WTD(1)+WTD(2)+WTD(3)+WTD(4))
50526           IF(WTR.LT.WTD(2)+WTD(3)+WTD(4)) ID=2
50527           IF(WTR.LT.WTD(3)+WTD(4)) ID=3
50528           IF(WTR.LT.WTD(4)) ID=4
50529           IF(ID.GE.2) GOTO 130
50530         ENDIF
50531         MSTJ(120)=5
50532         PARJ(156)=CF*TR*(WTD(1)+WTD(2)+WTD(3)+WTD(4))/(16D0*WTTOT)
50533   140   KFLN=1+INT(5D0*PYR(0))
50534         IF(KFLN.NE.KFL.AND.0.2D0*PARJ(156).LE.PYR(0)) GOTO 140
50535         IF(KFLN.EQ.KFL.AND.1D0-0.8D0*PARJ(156).LE.PYR(0)) GOTO 140
50536         IF(KFLN.GT.MSTJ(104)) NJET=2
50537         PMQN=PYMASS(KFLN)
50538         QMEN=(2D0*PMQN/ECM)**2
50539  
50540 C...Mass cuts. Kinematical variables out.
50541         IF(Y24.LE.CUT+QME.OR.Y13.LE.1.1D0*QMEN) NJET=2
50542         IF(NJET.EQ.2) GOTO 150
50543         Q24=0.5D0*(1D0-SQRT(1D0-QME/Y24))
50544         Q13=0.5D0*(1D0-SQRT(1D0-QMEN/Y13))
50545         X1=1D0-(1D0-Q24)*Y123-Q24*Y134
50546         X4=1D0-(1D0-Q24)*Y134-Q24*Y123
50547         X2=1D0-(1D0-Q13)*Y234-Q13*Y124
50548         X12=(1D0-Q24)*((1D0-Q13)*Y14+Q13*Y34)+Q24*((1D0-Q13)*Y12+
50549      &  Q13*Y23)
50550         X14=Y24-0.5D0*QME
50551         X34=(1D0-Q24)*((1D0-Q13)*Y23+Q13*Y12)+Q24*((1D0-Q13)*Y34+
50552      &  Q13*Y14)
50553         IF(PMQ**2+PMQN**2+MIN(X12,X34)*ECM**2.LE.
50554      &  (PARJ(127)+PMQ+PMQN)**2) NJET=2
50555         IF(Y123*Y134/((1D0-X1)*(1D0-X4)).LE.PYR(0)) NJET=2
50556       ENDIF
50557   150 IF(MSTJ(101).LE.-2.AND.NJET.EQ.2) GOTO 100
50558  
50559       RETURN
50560       END
50561  
50562 C*********************************************************************
50563  
50564 C...PYXDIF
50565 C...Gives the angular orientation of events.
50566  
50567       SUBROUTINE PYXDIF(NC,NJET,KFL,ECM,CHI,THE,PHI)
50568  
50569 C...Double precision and integer declarations.
50570       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50571       IMPLICIT INTEGER(I-N)
50572       INTEGER PYK,PYCHGE,PYCOMP
50573 C...Commonblocks.
50574       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
50575       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50576       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
50577       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
50578  
50579 C...Charge. Factors depending on polarization for QED case.
50580       QF=KCHG(KFL,1)/3D0
50581       POLL=1D0-PARJ(131)*PARJ(132)
50582       POLD=PARJ(132)-PARJ(131)
50583       IF(MSTJ(102).LE.1.OR.MSTJ(109).EQ.1) THEN
50584         HF1=POLL
50585         HF2=0D0
50586         HF3=PARJ(133)**2
50587         HF4=0D0
50588  
50589 C...Factors depending on flavour, energy and polarization for QFD case.
50590       ELSE
50591         SFF=1D0/(16D0*PARU(102)*(1D0-PARU(102)))
50592         SFW=ECM**4/((ECM**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)
50593         SFI=SFW*(1D0-(PARJ(123)/ECM)**2)
50594         AE=-1D0
50595         VE=4D0*PARU(102)-1D0
50596         AF=SIGN(1D0,QF)
50597         VF=AF-4D0*QF*PARU(102)
50598         HF1=QF**2*POLL-2D0*QF*VF*SFI*SFF*(VE*POLL-AE*POLD)+
50599      &  (VF**2+AF**2)*SFW*SFF**2*((VE**2+AE**2)*POLL-2D0*VE*AE*POLD)
50600         HF2=-2D0*QF*AF*SFI*SFF*(AE*POLL-VE*POLD)+2D0*VF*AF*SFW*SFF**2*
50601      &  (2D0*VE*AE*POLL-(VE**2+AE**2)*POLD)
50602         HF3=PARJ(133)**2*(QF**2-2D0*QF*VF*SFI*SFF*VE+(VF**2+AF**2)*
50603      &  SFW*SFF**2*(VE**2-AE**2))
50604         HF4=-PARJ(133)**2*2D0*QF*VF*SFW*(PARJ(123)*PARJ(124)/ECM**2)*
50605      &  SFF*AE
50606       ENDIF
50607  
50608 C...Mass factor. Differential cross-sections for two-jet events.
50609       SQ2=SQRT(2D0)
50610       QME=0D0
50611       IF(MSTJ(103).GE.4.AND.IABS(MSTJ(101)).LE.1.AND.MSTJ(102).LE.1.AND.
50612      &MSTJ(109).NE.1) QME=(2D0*PYMASS(KFL)/ECM)**2
50613       IF(NJET.EQ.2) THEN
50614         SIGU=4D0*SQRT(1D0-QME)
50615         SIGL=2D0*QME*SQRT(1D0-QME)
50616         SIGT=0D0
50617         SIGI=0D0
50618         SIGA=0D0
50619         SIGP=4D0
50620  
50621 C...Kinematical variables. Reduce four-jet event to three-jet one.
50622       ELSE
50623         IF(NJET.EQ.3) THEN
50624           X1=2D0*P(NC+1,4)/ECM
50625           X2=2D0*P(NC+3,4)/ECM
50626         ELSE
50627           ECMR=P(NC+1,4)+P(NC+4,4)+SQRT((P(NC+2,1)+P(NC+3,1))**2+
50628      &    (P(NC+2,2)+P(NC+3,2))**2+(P(NC+2,3)+P(NC+3,3))**2)
50629           X1=2D0*P(NC+1,4)/ECMR
50630           X2=2D0*P(NC+4,4)/ECMR
50631         ENDIF
50632  
50633 C...Differential cross-sections for three-jet (or reduced four-jet).
50634         XQ=(1D0-X1)/(1D0-X2)
50635         CT12=(X1*X2-2D0*X1-2D0*X2+2D0+QME)/SQRT((X1**2-QME)*(X2**2-QME))
50636         ST12=SQRT(1D0-CT12**2)
50637         IF(MSTJ(109).NE.1) THEN
50638           SIGU=2D0*X1**2+X2**2*(1D0+CT12**2)-QME*(3D0+CT12**2-X1-X2)-
50639      &    QME*X1/XQ+0.5D0*QME*((X2**2-QME)*ST12**2-2D0*X2)*XQ
50640           SIGL=(X2*ST12)**2-QME*(3D0-CT12**2-2.5D0*(X1+X2)+X1*X2+QME)+
50641      &    0.5D0*QME*(X1**2-X1-QME)/XQ+0.5D0*QME*((X2**2-QME)*CT12**2-
50642      &    X2)*XQ
50643           SIGT=0.5D0*(X2**2-QME-0.5D0*QME*(X2**2-QME)/XQ)*ST12**2
50644           SIGI=((1D0-0.5D0*QME*XQ)*(X2**2-QME)*ST12*CT12+
50645      &    QME*(1D0-X1-X2+0.5D0*X1*X2+0.5D0*QME)*ST12/CT12)/SQ2
50646           SIGA=X2**2*ST12/SQ2
50647           SIGP=2D0*(X1**2-X2**2*CT12)
50648  
50649 C...Differential cross-sect for scalar gluons (no mass effects).
50650         ELSE
50651           X3=2D0-X1-X2
50652           XT=X2*ST12
50653           CT13=SQRT(MAX(0D0,1D0-(XT/X3)**2))
50654           SIGU=(1D0-PARJ(171))*(X3**2-0.5D0*XT**2)+
50655      &    PARJ(171)*(X3**2-0.5D0*XT**2-4D0*(1D0-X1)*(1D0-X2)**2/X1)
50656           SIGL=(1D0-PARJ(171))*0.5D0*XT**2+
50657      &    PARJ(171)*0.5D0*(1D0-X1)**2*XT**2
50658           SIGT=(1D0-PARJ(171))*0.25D0*XT**2+
50659      &    PARJ(171)*0.25D0*XT**2*(1D0-2D0*X1)
50660           SIGI=-(0.5D0/SQ2)*((1D0-PARJ(171))*XT*X3*CT13+
50661      &    PARJ(171)*XT*((1D0-2D0*X1)*X3*CT13-X1*(X1-X2)))
50662           SIGA=(0.25D0/SQ2)*XT*(2D0*(1D0-X1)-X1*X3)
50663           SIGP=X3**2-2D0*(1D0-X1)*(1D0-X2)/X1
50664         ENDIF
50665       ENDIF
50666  
50667 C...Upper bounds for differential cross-section.
50668       HF1A=ABS(HF1)
50669       HF2A=ABS(HF2)
50670       HF3A=ABS(HF3)
50671       HF4A=ABS(HF4)
50672       SIGMAX=(2D0*HF1A+HF3A+HF4A)*ABS(SIGU)+2D0*(HF1A+HF3A+HF4A)*
50673      &ABS(SIGL)+2D0*(HF1A+2D0*HF3A+2D0*HF4A)*ABS(SIGT)+2D0*SQ2*
50674      &(HF1A+2D0*HF3A+2D0*HF4A)*ABS(SIGI)+4D0*SQ2*HF2A*ABS(SIGA)+
50675      &2D0*HF2A*ABS(SIGP)
50676  
50677 C...Generate angular orientation according to differential cross-sect.
50678   100 CHI=PARU(2)*PYR(0)
50679       CTHE=2D0*PYR(0)-1D0
50680       PHI=PARU(2)*PYR(0)
50681       CCHI=COS(CHI)
50682       SCHI=SIN(CHI)
50683       C2CHI=COS(2D0*CHI)
50684       S2CHI=SIN(2D0*CHI)
50685       THE=ACOS(CTHE)
50686       STHE=SIN(THE)
50687       C2PHI=COS(2D0*(PHI-PARJ(134)))
50688       S2PHI=SIN(2D0*(PHI-PARJ(134)))
50689       SIG=((1D0+CTHE**2)*HF1+STHE**2*(C2PHI*HF3-S2PHI*HF4))*SIGU+
50690      &2D0*(STHE**2*HF1-STHE**2*(C2PHI*HF3-S2PHI*HF4))*SIGL+
50691      &2D0*(STHE**2*C2CHI*HF1+((1D0+CTHE**2)*C2CHI*C2PHI-2D0*CTHE*S2CHI*
50692      &S2PHI)*HF3-((1D0+CTHE**2)*C2CHI*S2PHI+2D0*CTHE*S2CHI*C2PHI)*HF4)*
50693      &SIGT-2D0*SQ2*(2D0*STHE*CTHE*CCHI*HF1-2D0*STHE*(CTHE*CCHI*C2PHI-
50694      &SCHI*S2PHI)*HF3+2D0*STHE*(CTHE*CCHI*S2PHI+SCHI*C2PHI)*HF4)*SIGI+
50695      &4D0*SQ2*STHE*CCHI*HF2*SIGA+2D0*CTHE*HF2*SIGP
50696       IF(SIG.LT.SIGMAX*PYR(0)) GOTO 100
50697  
50698       RETURN
50699       END
50700  
50701 C*********************************************************************
50702  
50703 C...PYONIA
50704 C...Generates Upsilon and toponium decays into three gluons
50705 C...or two gluons and a photon.
50706  
50707       SUBROUTINE PYONIA(KFL,ECM)
50708  
50709 C...Double precision and integer declarations.
50710       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50711       IMPLICIT INTEGER(I-N)
50712       INTEGER PYK,PYCHGE,PYCOMP
50713 C...Commonblocks.
50714       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
50715       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
50716       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
50717       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/
50718  
50719 C...Printout. Check input parameters.
50720       IF(MSTU(12).GE.1) CALL PYLIST(0)
50721       IF(KFL.LT.0.OR.KFL.GT.8) THEN
50722         CALL PYERRM(16,'(PYONIA:) called with unknown flavour code')
50723         IF(MSTU(21).GE.1) RETURN
50724       ENDIF
50725       IF(ECM.LT.PARJ(127)+2.02D0*PARF(101)) THEN
50726         CALL PYERRM(16,'(PYONIA:) called with too small CM energy')
50727         IF(MSTU(21).GE.1) RETURN
50728       ENDIF
50729  
50730 C...Initial e+e- and onium state (optional).
50731       NC=0
50732       IF(MSTJ(115).GE.2) THEN
50733         NC=NC+2
50734         CALL PY1ENT(NC-1,11,0.5D0*ECM,0D0,0D0)
50735         K(NC-1,1)=21
50736         CALL PY1ENT(NC,-11,0.5D0*ECM,PARU(1),0D0)
50737         K(NC,1)=21
50738       ENDIF
50739       KFLC=IABS(KFL)
50740       IF(MSTJ(115).GE.3.AND.KFLC.GE.5) THEN
50741         NC=NC+1
50742         KF=110*KFLC+3
50743         MSTU10=MSTU(10)
50744         MSTU(10)=1
50745         P(NC,5)=ECM
50746         CALL PY1ENT(NC,KF,ECM,0D0,0D0)
50747         K(NC,1)=21
50748         K(NC,3)=1
50749         MSTU(10)=MSTU10
50750       ENDIF
50751  
50752 C...Choose x1 and x2 according to matrix element.
50753       NTRY=0
50754   100 X1=PYR(0)
50755       X2=PYR(0)
50756       X3=2D0-X1-X2
50757       IF(X3.GE.1D0.OR.((1D0-X1)/(X2*X3))**2+((1D0-X2)/(X1*X3))**2+
50758      &((1D0-X3)/(X1*X2))**2.LE.2D0*PYR(0)) GOTO 100
50759       NTRY=NTRY+1
50760       NJET=3
50761       IF(MSTJ(101).LE.4) CALL PY3ENT(NC+1,21,21,21,ECM,X1,X3)
50762       IF(MSTJ(101).GE.5) CALL PY3ENT(-(NC+1),21,21,21,ECM,X1,X3)
50763  
50764 C...Photon-gluon-gluon events. Small system modifications. Jet origin.
50765       MSTU(111)=MSTJ(108)
50766       IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1))
50767      &MSTU(111)=1
50768       PARU(112)=PARJ(121)
50769       IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)
50770       QF=0D0
50771       IF(KFLC.NE.0) QF=KCHG(KFLC,1)/3D0
50772       RGAM=7.2D0*QF**2*PARU(101)/PYALPS(ECM**2)
50773       MK=0
50774       ECMC=ECM
50775       IF(PYR(0).GT.RGAM/(1D0+RGAM)) THEN
50776         IF(1D0-MAX(X1,X2,X3).LE.MAX((PARJ(126)/ECM)**2,PARJ(125)))
50777      &  NJET=2
50778         IF(NJET.EQ.2.AND.MSTJ(101).LE.4) CALL PY2ENT(NC+1,21,21,ECM)
50779         IF(NJET.EQ.2.AND.MSTJ(101).GE.5) CALL PY2ENT(-(NC+1),21,21,ECM)
50780       ELSE
50781         MK=1
50782         ECMC=SQRT(1D0-X1)*ECM
50783         IF(ECMC.LT.2D0*PARJ(127)) GOTO 100
50784         K(NC+1,1)=1
50785         K(NC+1,2)=22
50786         K(NC+1,4)=0
50787         K(NC+1,5)=0
50788         IF(MSTJ(101).GE.5) K(NC+2,4)=MSTU(5)*(NC+3)
50789         IF(MSTJ(101).GE.5) K(NC+2,5)=MSTU(5)*(NC+3)
50790         IF(MSTJ(101).GE.5) K(NC+3,4)=MSTU(5)*(NC+2)
50791         IF(MSTJ(101).GE.5) K(NC+3,5)=MSTU(5)*(NC+2)
50792         NJET=2
50793         IF(ECMC.LT.4D0*PARJ(127)) THEN
50794           MSTU10=MSTU(10)
50795           MSTU(10)=1
50796           P(NC+2,5)=ECMC
50797           CALL PY1ENT(NC+2,83,0.5D0*(X2+X3)*ECM,PARU(1),0D0)
50798           MSTU(10)=MSTU10
50799           NJET=0
50800         ENDIF
50801       ENDIF
50802       DO 110 IP=NC+1,N
50803         K(IP,3)=K(IP,3)+(MSTJ(115)/2)+(KFLC/5)*(MSTJ(115)/3)*(NC-1)
50804   110 CONTINUE
50805  
50806 C...Differential cross-sections. Upper limit for cross-section.
50807       IF(MSTJ(106).EQ.1) THEN
50808         SQ2=SQRT(2D0)
50809         HF1=1D0-PARJ(131)*PARJ(132)
50810         HF3=PARJ(133)**2
50811         CT13=(X1*X3-2D0*X1-2D0*X3+2D0)/(X1*X3)
50812         ST13=SQRT(1D0-CT13**2)
50813         SIGL=0.5D0*X3**2*((1D0-X2)**2+(1D0-X3)**2)*ST13**2
50814         SIGU=(X1*(1D0-X1))**2+(X2*(1D0-X2))**2+(X3*(1D0-X3))**2-SIGL
50815         SIGT=0.5D0*SIGL
50816         SIGI=(SIGL*CT13/ST13+0.5D0*X1*X3*(1D0-X2)**2*ST13)/SQ2
50817         SIGMAX=(2D0*HF1+HF3)*ABS(SIGU)+2D0*(HF1+HF3)*ABS(SIGL)+2D0*(HF1+
50818      &  2D0*HF3)*ABS(SIGT)+2D0*SQ2*(HF1+2D0*HF3)*ABS(SIGI)
50819  
50820 C...Angular orientation of event.
50821   120   CHI=PARU(2)*PYR(0)
50822         CTHE=2D0*PYR(0)-1D0
50823         PHI=PARU(2)*PYR(0)
50824         CCHI=COS(CHI)
50825         SCHI=SIN(CHI)
50826         C2CHI=COS(2D0*CHI)
50827         S2CHI=SIN(2D0*CHI)
50828         THE=ACOS(CTHE)
50829         STHE=SIN(THE)
50830         C2PHI=COS(2D0*(PHI-PARJ(134)))
50831         S2PHI=SIN(2D0*(PHI-PARJ(134)))
50832         SIG=((1D0+CTHE**2)*HF1+STHE**2*C2PHI*HF3)*SIGU+2D0*(STHE**2*HF1-
50833      &  STHE**2*C2PHI*HF3)*SIGL+2D0*(STHE**2*C2CHI*HF1+((1D0+CTHE**2)*
50834      &  C2CHI*C2PHI-2D0*CTHE*S2CHI*S2PHI)*HF3)*SIGT-
50835      &  2D0*SQ2*(2D0*STHE*CTHE*CCHI*HF1-2D0*STHE*
50836      &  (CTHE*CCHI*C2PHI-SCHI*S2PHI)*HF3)*SIGI
50837         IF(SIG.LT.SIGMAX*PYR(0)) GOTO 120
50838         CALL PYROBO(NC+1,N,0D0,CHI,0D0,0D0,0D0)
50839         CALL PYROBO(NC+1,N,THE,PHI,0D0,0D0,0D0)
50840       ENDIF
50841  
50842 C...Generate parton shower. Rearrange along strings and check.
50843       IF(MSTJ(101).GE.5.AND.NJET.GE.2) THEN
50844         CALL PYSHOW(NC+MK+1,-NJET,ECMC)
50845         MSTJ14=MSTJ(14)
50846         IF(MSTJ(105).EQ.-1) MSTJ(14)=-1
50847         IF(MSTJ(105).GE.0) MSTU(28)=0
50848         CALL PYPREP(0)
50849         MSTJ(14)=MSTJ14
50850         IF(MSTJ(105).GE.0.AND.MSTU(28).NE.0) GOTO 100
50851       ENDIF
50852  
50853 C...Generate fragmentation. Information for PYTABU:
50854       IF(MSTJ(105).EQ.1) CALL PYEXEC
50855       MSTU(161)=110*KFLC+3
50856       MSTU(162)=0
50857  
50858       RETURN
50859       END
50860  
50861 C*********************************************************************
50862  
50863 C...PYBOOK
50864 C...Books a histogram.
50865  
50866       SUBROUTINE PYBOOK(ID,TITLE,NX,XL,XU)
50867  
50868 C...Double precision declaration.
50869       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50870       IMPLICIT INTEGER(I-N)
50871 C...Commonblock.
50872       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
50873       SAVE /PYBINS/
50874 C...Local character variables.
50875       CHARACTER TITLE*(*), TITFX*60
50876  
50877 C...Check that input is sensible. Find initial address in memory.
50878       IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
50879      &'(PYBOOK:) not allowed histogram number')
50880       IF(NX.LE.0.OR.NX.GT.100) CALL PYERRM(28,
50881      &'(PYBOOK:) not allowed number of bins')
50882       IF(XL.GE.XU) CALL PYERRM(28,
50883      &'(PYBOOK:) x limits in wrong order')
50884       INDX(ID)=IHIST(4)
50885       IHIST(4)=IHIST(4)+28+NX
50886       IF(IHIST(4).GT.IHIST(2)) CALL PYERRM(28,
50887      &'(PYBOOK:) out of histogram space')
50888       IS=INDX(ID)
50889  
50890 C...Store histogram size and reset contents.
50891       BIN(IS+1)=NX
50892       BIN(IS+2)=XL
50893       BIN(IS+3)=XU
50894       BIN(IS+4)=(XU-XL)/NX
50895       CALL PYNULL(ID)
50896  
50897 C...Store title by conversion to integer to double precision.
50898       TITFX=TITLE//' '
50899       DO 100 IT=1,20
50900         BIN(IS+8+NX+IT)=256**2*ICHAR(TITFX(3*IT-2:3*IT-2))+
50901      &  256*ICHAR(TITFX(3*IT-1:3*IT-1))+ICHAR(TITFX(3*IT:3*IT))
50902   100 CONTINUE
50903  
50904       RETURN
50905       END
50906  
50907 C*********************************************************************
50908  
50909 C...PYFILL
50910 C...Fills entry in histogram.
50911  
50912       SUBROUTINE PYFILL(ID,X,W)
50913  
50914 C...Double precision declaration.
50915       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50916       IMPLICIT INTEGER(I-N)
50917 C...Commonblock.
50918       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
50919       SAVE /PYBINS/
50920  
50921 C...Find initial address in memory. Increase number of entries.
50922       IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
50923      &'(PYFILL:) not allowed histogram number')
50924       IS=INDX(ID)
50925       IF(IS.EQ.0) CALL PYERRM(28,
50926      &'(PYFILL:) filling unbooked histogram')
50927       BIN(IS+5)=BIN(IS+5)+1D0
50928  
50929 C...Find bin in x, including under/overflow, and fill.
50930       IF(X.LT.BIN(IS+2)) THEN
50931         BIN(IS+6)=BIN(IS+6)+W
50932       ELSEIF(X.GE.BIN(IS+3)) THEN
50933         BIN(IS+8)=BIN(IS+8)+W
50934       ELSE
50935         BIN(IS+7)=BIN(IS+7)+W
50936         IX=(X-BIN(IS+2))/BIN(IS+4)
50937         IX=MAX(0,MIN(NINT(BIN(IS+1))-1,IX))
50938         BIN(IS+9+IX)=BIN(IS+9+IX)+W
50939       ENDIF
50940  
50941       RETURN
50942       END
50943  
50944 C*********************************************************************
50945  
50946 C...PYFACT
50947 C...Multiplies histogram contents by factor.
50948  
50949       SUBROUTINE PYFACT(ID,F)
50950  
50951 C...Double precision declaration.
50952       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50953       IMPLICIT INTEGER(I-N)
50954 C...Commonblock.
50955       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
50956       SAVE /PYBINS/
50957  
50958 C...Find initial address in memory. Multiply all contents bins.
50959       IF(ID.LE.0.OR.ID.GT.IHIST(1)) CALL PYERRM(28,
50960      &'(PYFACT:) not allowed histogram number')
50961       IS=INDX(ID)
50962       IF(IS.EQ.0) CALL PYERRM(28,
50963      &'(PYFACT:) scaling unbooked histogram')
50964       DO 100 IX=IS+6,IS+8+NINT(BIN(IS+1))
50965         BIN(IX)=F*BIN(IX)
50966   100 CONTINUE
50967  
50968       RETURN
50969       END
50970  
50971 C*********************************************************************
50972  
50973 C...PYOPER
50974 C...Performs operations between histograms.
50975  
50976       SUBROUTINE PYOPER(ID1,OPER,ID2,ID3,F1,F2)
50977  
50978 C...Double precision declaration.
50979       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
50980       IMPLICIT INTEGER(I-N)
50981 C...Commonblock.
50982       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
50983       SAVE /PYBINS/
50984 C...Character variable.
50985       CHARACTER OPER*(*)
50986  
50987 C...Find initial addresses in memory, and histogram size.
50988       IF(ID1.LE.0.OR.ID1.GT.IHIST(1)) CALL PYERRM(28,
50989      &'(PYFACT:) not allowed histogram number')
50990       IS1=INDX(ID1)
50991       IS2=INDX(MIN(IHIST(1),MAX(1,ID2)))
50992       IS3=INDX(MIN(IHIST(1),MAX(1,ID3)))
50993       NX=NINT(BIN(IS3+1))
50994       IF(OPER.EQ.'M'.AND.ID3.EQ.0) NX=NINT(BIN(IS2+1))
50995  
50996 C...Update info on number of histogram entries.
50997       IF(OPER.EQ.'+'.OR.OPER.EQ.'-'.OR.OPER.EQ.'*'.OR.OPER.EQ.'/') THEN
50998         BIN(IS3+5)=BIN(IS1+5)+BIN(IS2+5)
50999       ELSEIF(OPER.EQ.'A'.OR.OPER.EQ.'S'.OR.OPER.EQ.'L') THEN
51000         BIN(IS3+5)=BIN(IS1+5)
51001       ENDIF
51002  
51003 C...Operations on pair of histograms: addition, subtraction,
51004 C...multiplication, division.
51005       IF(OPER.EQ.'+') THEN
51006         DO 100 IX=6,8+NX
51007           BIN(IS3+IX)=F1*BIN(IS1+IX)+F2*BIN(IS2+IX)
51008   100   CONTINUE
51009       ELSEIF(OPER.EQ.'-') THEN
51010         DO 110 IX=6,8+NX
51011           BIN(IS3+IX)=F1*BIN(IS1+IX)-F2*BIN(IS2+IX)
51012   110   CONTINUE
51013       ELSEIF(OPER.EQ.'*') THEN
51014         DO 120 IX=6,8+NX
51015           BIN(IS3+IX)=F1*BIN(IS1+IX)*F2*BIN(IS2+IX)
51016   120   CONTINUE
51017       ELSEIF(OPER.EQ.'/') THEN
51018         DO 130 IX=6,8+NX
51019           FA2=F2*BIN(IS2+IX)
51020           IF(ABS(FA2).LE.1D-20) THEN
51021             BIN(IS3+IX)=0D0
51022           ELSE
51023             BIN(IS3+IX)=F1*BIN(IS1+IX)/FA2
51024           ENDIF
51025   130   CONTINUE
51026  
51027 C...Operations on single histogram: multiplication+addition,
51028 C...square root+addition, logarithm+addition.
51029       ELSEIF(OPER.EQ.'A') THEN
51030         DO 140 IX=6,8+NX
51031           BIN(IS3+IX)=F1*BIN(IS1+IX)+F2
51032   140   CONTINUE
51033       ELSEIF(OPER.EQ.'S') THEN
51034         DO 150 IX=6,8+NX
51035           BIN(IS3+IX)=F1*SQRT(MAX(0D0,BIN(IS1+IX)))+F2
51036   150   CONTINUE
51037       ELSEIF(OPER.EQ.'L') THEN
51038         ZMIN=1D20
51039         DO 160 IX=9,8+NX
51040           IF(BIN(IS1+IX).LT.ZMIN.AND.BIN(IS1+IX).GT.1D-20)
51041      &    ZMIN=0.8D0*BIN(IS1+IX)
51042   160   CONTINUE
51043         DO 170 IX=6,8+NX
51044           BIN(IS3+IX)=F1*LOG10(MAX(ZMIN,BIN(IS1+IX)))+F2
51045   170   CONTINUE
51046  
51047 C...Operation on two or three histograms: average and
51048 C...standard deviation.
51049       ELSEIF(OPER.EQ.'M') THEN
51050         DO 180 IX=6,8+NX
51051           IF(ABS(BIN(IS1+IX)).LE.1D-20) THEN
51052             BIN(IS2+IX)=0D0
51053           ELSE
51054             BIN(IS2+IX)=BIN(IS2+IX)/BIN(IS1+IX)
51055           ENDIF
51056           IF(ID3.NE.0) THEN
51057             IF(ABS(BIN(IS1+IX)).LE.1D-20) THEN
51058               BIN(IS3+IX)=0D0
51059             ELSE
51060               BIN(IS3+IX)=SQRT(MAX(0D0,BIN(IS3+IX)/BIN(IS1+IX)-
51061      &        BIN(IS2+IX)**2))
51062             ENDIF
51063           ENDIF
51064           BIN(IS1+IX)=F1*BIN(IS1+IX)
51065   180   CONTINUE
51066       ENDIF
51067  
51068       RETURN
51069       END
51070  
51071 C*********************************************************************
51072  
51073 C...PYHIST
51074 C...Prints and resets all histograms.
51075  
51076       SUBROUTINE PYHIST
51077  
51078 C...Double precision declaration.
51079       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51080       IMPLICIT INTEGER(I-N)
51081 C...Commonblock.
51082       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51083       SAVE /PYBINS/
51084  
51085 C...Loop over histograms, print and reset used ones.
51086       DO 100 ID=1,IHIST(1)
51087         IS=INDX(ID)
51088         IF(IS.NE.0.AND.NINT(BIN(IS+5)).GT.0) THEN
51089           CALL PYPLOT(ID)
51090           CALL PYNULL(ID)
51091         ENDIF
51092   100 CONTINUE
51093  
51094       RETURN
51095       END
51096  
51097 C*********************************************************************
51098  
51099 C...PYPLOT
51100 C...Prints a histogram (but does not reset it).
51101  
51102       SUBROUTINE PYPLOT(ID)
51103  
51104 C...Double precision declaration.
51105       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51106       IMPLICIT INTEGER(I-N)
51107 C...Commonblocks.
51108       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51109       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51110       SAVE /PYDAT1/,/PYBINS/
51111 C...Local arrays and character variables.
51112       DIMENSION IDATI(6), IROW(100), IFRA(100), DYAC(10)
51113       CHARACTER TITLE*60, OUT*100, CHA(0:11)*1
51114  
51115 C...Steps in histogram scale. Character sequence.
51116       DATA DYAC/.04,.05,.06,.08,.10,.12,.15,.20,.25,.30/
51117       DATA CHA/'0','1','2','3','4','5','6','7','8','9','X','-'/
51118  
51119 C...Find initial address in memory; skip if empty histogram.
51120       IF(ID.LE.0.OR.ID.GT.IHIST(1)) RETURN
51121       IS=INDX(ID)
51122       IF(IS.EQ.0) RETURN
51123       IF(NINT(BIN(IS+5)).LE.0) THEN
51124         WRITE(MSTU(11),5000) ID
51125         RETURN
51126       ENDIF
51127  
51128 C...Number of histogram lines and x bins.
51129       LIN=IHIST(3)-18
51130       NX=NINT(BIN(IS+1))
51131  
51132 C...Extract title by conversion from double precision via integer.
51133       DO 100 IT=1,20
51134         IEQ=NINT(BIN(IS+8+NX+IT))
51135         TITLE(3*IT-2:3*IT)=CHAR(IEQ/256**2)//CHAR(MOD(IEQ,256**2)/256)
51136      &  //CHAR(MOD(IEQ,256))
51137   100 CONTINUE
51138  
51139 C...Find time; print title.
51140       CALL PYTIME(IDATI)
51141       IF(IDATI(1).GT.0) THEN
51142         WRITE(MSTU(11),5100) ID, TITLE, (IDATI(J),J=1,5)
51143       ELSE
51144         WRITE(MSTU(11),5200) ID, TITLE
51145       ENDIF
51146  
51147 C...Find minimum and maximum bin content.
51148       YMIN=BIN(IS+9)
51149       YMAX=BIN(IS+9)
51150       DO 110 IX=IS+10,IS+8+NX
51151         IF(BIN(IX).LT.YMIN) YMIN=BIN(IX)
51152         IF(BIN(IX).GT.YMAX) YMAX=BIN(IX)
51153   110 CONTINUE
51154  
51155 C...Determine scale and step size for y axis.
51156       IF(YMAX-YMIN.GT.LIN*DYAC(1)*1D-9) THEN
51157         IF(YMIN.GT.0D0.AND.YMIN.LT.0.1D0*YMAX) YMIN=0D0
51158         IF(YMAX.LT.0D0.AND.YMAX.GT.0.1D0*YMIN) YMAX=0D0
51159         IPOT=INT(LOG10(YMAX-YMIN)+10D0)-10
51160         IF(YMAX-YMIN.LT.LIN*DYAC(1)*10D0**IPOT) IPOT=IPOT-1
51161         IF(YMAX-YMIN.GT.LIN*DYAC(10)*10D0**IPOT) IPOT=IPOT+1
51162         DELY=DYAC(1)
51163         DO 120 IDEL=1,9
51164           IF(YMAX-YMIN.GE.LIN*DYAC(IDEL)*10D0**IPOT) DELY=DYAC(IDEL+1)
51165   120   CONTINUE
51166         DY=DELY*10D0**IPOT
51167  
51168 C...Convert bin contents to integer form; fractional fill in top row.
51169         DO 130 IX=1,NX
51170           CTA=ABS(BIN(IS+8+IX))/DY
51171           IROW(IX)=SIGN(CTA+0.95D0,BIN(IS+8+IX))
51172           IFRA(IX)=10D0*(CTA+1.05D0-DBLE(INT(CTA+0.95D0)))
51173   130   CONTINUE
51174         IRMI=SIGN(ABS(YMIN)/DY+0.95D0,YMIN)
51175         IRMA=SIGN(ABS(YMAX)/DY+0.95D0,YMAX)
51176  
51177 C...Print histogram row by row.
51178         DO 150 IR=IRMA,IRMI,-1
51179           IF(IR.EQ.0) GOTO 150
51180           OUT=' '
51181           DO 140 IX=1,NX
51182             IF(IR.EQ.IROW(IX)) OUT(IX:IX)=CHA(IFRA(IX))
51183             IF(IR*(IROW(IX)-IR).GT.0) OUT(IX:IX)=CHA(10)
51184   140     CONTINUE
51185           WRITE(MSTU(11),5300) IR*DELY, IPOT, OUT
51186   150   CONTINUE
51187  
51188 C...Print sign and value of bin contents.
51189         IPOT=INT(LOG10(MAX(YMAX,-YMIN))+10.0001D0)-10
51190         OUT=' '
51191         DO 160 IX=1,NX
51192           IF(BIN(IS+8+IX).LT.-10D0**(IPOT-4)) OUT(IX:IX)=CHA(11)
51193           IROW(IX)=NINT(10D0**(3-IPOT)*ABS(BIN(IS+8+IX)))
51194   160   CONTINUE
51195         WRITE(MSTU(11),5400) OUT
51196         DO 180 IR=4,1,-1
51197           DO 170 IX=1,NX
51198             OUT(IX:IX)=CHA(MOD(IROW(IX),10**IR)/10**(IR-1))
51199   170     CONTINUE
51200           WRITE(MSTU(11),5500) IPOT+IR-4, OUT
51201   180   CONTINUE
51202  
51203 C...Print sign and value of lower bin edge.
51204         IPOT=INT(LOG10(MAX(-BIN(IS+2),BIN(IS+3)-BIN(IS+4)))+
51205      &  10.0001D0)-10
51206         OUT=' '
51207         DO 190 IX=1,NX
51208           IF(BIN(IS+2)+(IX-1)*BIN(IS+4).LT.-10D0**(IPOT-3))
51209      &    OUT(IX:IX)=CHA(11)
51210           IROW(IX)=NINT(10D0**(2-IPOT)*ABS(BIN(IS+2)+(IX-1)*BIN(IS+4)))
51211   190   CONTINUE
51212         WRITE(MSTU(11),5600) OUT
51213         DO 210 IR=3,1,-1
51214           DO 200 IX=1,NX
51215             OUT(IX:IX)=CHA(MOD(IROW(IX),10**IR)/10**(IR-1))
51216   200     CONTINUE
51217           WRITE(MSTU(11),5500) IPOT+IR-3, OUT
51218   210   CONTINUE
51219       ENDIF
51220  
51221 C...Calculate and print statistics.
51222       CSUM=0D0
51223       CXSUM=0D0
51224       CXXSUM=0D0
51225       DO 220 IX=1,NX
51226         CTA=ABS(BIN(IS+8+IX))
51227         X=BIN(IS+2)+(IX-0.5D0)*BIN(IS+4)
51228         CSUM=CSUM+CTA
51229         CXSUM=CXSUM+CTA*X
51230         CXXSUM=CXXSUM+CTA*X**2
51231   220 CONTINUE
51232       XMEAN=CXSUM/MAX(CSUM,1D-20)
51233       XRMS=SQRT(MAX(0D0,CXXSUM/MAX(CSUM,1D-20)-XMEAN**2))
51234       WRITE(MSTU(11),5700) NINT(BIN(IS+5)),XMEAN,BIN(IS+6),
51235      &BIN(IS+2),BIN(IS+7),XRMS,BIN(IS+8),BIN(IS+3)
51236  
51237 C...Formats for output.
51238  5000 FORMAT(/5X,'Histogram no',I5,' : no entries')
51239  5100 FORMAT('1'/5X,'Histogram no',I5,6X,A60,5X,I4,'-',I2,'-',I2,1X,
51240      &I2,':',I2/)
51241  5200 FORMAT('1'/5X,'Histogram no',I5,6X,A60/)
51242  5300 FORMAT(2X,F7.2,'*10**',I2,3X,A100)
51243  5400 FORMAT(/8X,'Contents',3X,A100)
51244  5500 FORMAT(9X,'*10**',I2,3X,A100)
51245  5600 FORMAT(/8X,'Low edge',3X,A100)
51246  5700 FORMAT(/5X,'Entries  =',I12,1P,6X,'Mean =',D12.4,6X,'Underflow ='
51247      &,D12.4,6X,'Low edge  =',D12.4/5X,'All chan =',D12.4,6X,
51248      &'Rms  =',D12.4,6X,'Overflow  =',D12.4,6X,'High edge =',D12.4)
51249  
51250       RETURN
51251       END
51252  
51253 C*********************************************************************
51254  
51255 C...PYNULL
51256 C...Resets bin contents of a histogram.
51257  
51258       SUBROUTINE PYNULL(ID)
51259  
51260 C...Double precision declaration.
51261       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51262       IMPLICIT INTEGER(I-N)
51263 C...Commonblock.
51264       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51265       SAVE /PYBINS/
51266  
51267       IF(ID.LE.0.OR.ID.GT.IHIST(1)) RETURN
51268       IS=INDX(ID)
51269       IF(IS.EQ.0) RETURN
51270       DO 100 IX=IS+5,IS+8+NINT(BIN(IS+1))
51271         BIN(IX)=0D0
51272   100 CONTINUE
51273  
51274       RETURN
51275       END
51276  
51277 C*********************************************************************
51278  
51279 C...PYDUMP
51280 C...Dumps histogram contents on file for reading by other program.
51281 C...Can also read back own dump.
51282  
51283       SUBROUTINE PYDUMP(MDUMP,LFN,NHI,IHI)
51284  
51285 C...Double precision declaration.
51286       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51287       IMPLICIT INTEGER(I-N)
51288 C...Commonblock.
51289       COMMON/PYBINS/IHIST(4),INDX(1000),BIN(20000)
51290       SAVE /PYBINS/
51291 C...Local arrays and character variables.
51292       DIMENSION IHI(*),ISS(100),VAL(5)
51293       CHARACTER TITLE*60,FORMAT*13
51294  
51295 C...Dump all histograms that have been booked,
51296 C...including titles and ranges, one after the other.
51297       IF(MDUMP.EQ.1) THEN
51298  
51299 C...Loop over histograms and find which are wanted and booked.
51300         IF(NHI.LE.0) THEN
51301           NW=IHIST(1)
51302         ELSE
51303           NW=NHI
51304         ENDIF
51305         DO 130 IW=1,NW
51306           IF(NHI.EQ.0) THEN
51307             ID=IW
51308           ELSE
51309             ID=IHI(IW)
51310           ENDIF
51311           IS=INDX(ID)
51312           IF(IS.NE.0) THEN
51313  
51314 C...Write title, histogram size, filling statistics.
51315             NX=NINT(BIN(IS+1))
51316             DO 100 IT=1,20
51317               IEQ=NINT(BIN(IS+8+NX+IT))
51318               TITLE(3*IT-2:3*IT)=CHAR(IEQ/256**2)//
51319      &        CHAR(MOD(IEQ,256**2)/256)//CHAR(MOD(IEQ,256))
51320   100       CONTINUE
51321             WRITE(LFN,5100) ID,TITLE
51322             WRITE(LFN,5200) NX,BIN(IS+2),BIN(IS+3)
51323             WRITE(LFN,5300) NINT(BIN(IS+5)),BIN(IS+6),BIN(IS+7),
51324      &      BIN(IS+8)
51325  
51326  
51327 C...Write histogram contents, in groups of five.
51328             DO 120 IXG=1,(NX+4)/5
51329               DO 110 IXV=1,5
51330                 IX=5*IXG+IXV-5
51331                 IF(IX.LE.NX) THEN
51332                   VAL(IXV)=BIN(IS+8+IX)
51333                 ELSE
51334                   VAL(IXV)=0D0
51335                 ENDIF
51336   110         CONTINUE
51337               WRITE(LFN,5400) (VAL(IXV),IXV=1,5)
51338   120       CONTINUE
51339  
51340 C...Go to next histogram; finish.
51341           ELSEIF(NHI.GT.0) THEN
51342             CALL PYERRM(8,'(PYDUMP:) unknown histogram number')
51343           ENDIF
51344   130   CONTINUE
51345  
51346 C...Read back in histograms dumped MDUMP=1.
51347       ELSEIF(MDUMP.EQ.2) THEN
51348  
51349 C...Read histogram number, title and range, and book.
51350   140   READ(LFN,5100,END=170) ID,TITLE
51351         READ(LFN,5200) NX,XL,XU
51352         CALL PYBOOK(ID,TITLE,NX,XL,XU)
51353         IS=INDX(ID)
51354  
51355 C...Read filling statistics.
51356         READ(LFN,5300) NENTRY,BIN(IS+6),BIN(IS+7),BIN(IS+8)
51357         BIN(IS+5)=DBLE(NENTRY)
51358  
51359 C...Read histogram contents, in groups of five.
51360         DO 160 IXG=1,(NX+4)/5
51361           READ(LFN,5400) (VAL(IXV),IXV=1,5)
51362           DO 150 IXV=1,5
51363             IX=5*IXG+IXV-5
51364             IF(IX.LE.NX) BIN(IS+8+IX)=VAL(IXV)
51365   150     CONTINUE
51366   160   CONTINUE
51367  
51368 C...Go to next histogram; finish.
51369         GOTO 140
51370   170   CONTINUE
51371  
51372 C...Write histogram contents in column format,
51373 C...convenient e.g. for GNUPLOT input.
51374       ELSEIF(MDUMP.EQ.3) THEN
51375  
51376 C...Find addresses to wanted histograms.
51377         NSS=0
51378         IF(NHI.LE.0) THEN
51379           NW=IHIST(1)
51380         ELSE
51381           NW=NHI
51382         ENDIF
51383         DO 180 IW=1,NW
51384           IF(NHI.EQ.0) THEN
51385             ID=IW
51386           ELSE
51387             ID=IHI(IW)
51388           ENDIF
51389           IS=INDX(ID)
51390           IF(IS.NE.0.AND.NSS.LT.100) THEN
51391             NSS=NSS+1
51392             ISS(NSS)=IS
51393           ELSEIF(NSS.GE.100) THEN
51394             CALL PYERRM(8,'(PYDUMP:) too many histograms requested')
51395           ELSEIF(NHI.GT.0) THEN
51396             CALL PYERRM(8,'(PYDUMP:) unknown histogram number')
51397           ENDIF
51398   180   CONTINUE
51399  
51400 C...Check that they have common number of x bins. Fix format.
51401         NX=NINT(BIN(ISS(1)+1))
51402         DO 190 IW=2,NSS
51403           IF(NINT(BIN(ISS(IW)+1)).NE.NX) THEN
51404             CALL PYERRM(8,'(PYDUMP:) different number of bins')
51405             RETURN
51406           ENDIF
51407   190   CONTINUE
51408         FORMAT='(1P,000E12.4)'
51409         WRITE(FORMAT(5:7),'(I3)') NSS+1
51410  
51411 C...Write histogram contents; first column x values.
51412         DO 200 IX=1,NX
51413           X=BIN(ISS(1)+2)+(IX-0.5D0)*BIN(ISS(1)+4)
51414           WRITE(LFN,FORMAT) X, (BIN(ISS(IW)+8+IX),IW=1,NSS)
51415   200   CONTINUE
51416  
51417       ENDIF
51418  
51419 C...Formats for output.
51420  5100 FORMAT(I5,5X,A60)
51421  5200 FORMAT(I5,1P,2D12.4)
51422  5300 FORMAT(I12,1P,3D12.4)
51423  5400 FORMAT(1P,5D12.4)
51424  
51425       RETURN
51426       END
51427  
51428 C*********************************************************************
51429  
51430 C...PYKCUT
51431 C...Dummy routine, which the user can replace in order to make cuts on
51432 C...the kinematics on the parton level before the matrix elements are
51433 C...evaluated and the event is generated. The cross-section estimates
51434 C...will automatically take these cuts into account, so the given
51435 C...values are for the allowed phase space region only. MCUT=0 means
51436 C...that the event has passed the cuts, MCUT=1 that it has failed.
51437  
51438       SUBROUTINE PYKCUT(MCUT)
51439  
51440 C...Double precision and integer declarations.
51441       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51442       IMPLICIT INTEGER(I-N)
51443       INTEGER PYK,PYCHGE,PYCOMP
51444 C...Commonblocks.
51445       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51446       COMMON/PYINT1/MINT(400),VINT(400)
51447       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
51448       SAVE /PYDAT1/,/PYINT1/,/PYINT2/
51449  
51450 C...Set default value (accepting event) for MCUT.
51451       MCUT=0
51452  
51453 C...Read out subprocess number.
51454       ISUB=MINT(1)
51455       ISTSB=ISET(ISUB)
51456  
51457 C...Read out tau, y*, cos(theta), tau' (where defined, else =0).
51458       TAU=VINT(21)
51459       YST=VINT(22)
51460       CTH=0D0
51461       IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) CTH=VINT(23)
51462       TAUP=0D0
51463       IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUP=VINT(26)
51464  
51465 C...Calculate x_1, x_2, x_F.
51466       IF(ISTSB.LE.2.OR.ISTSB.GE.5) THEN
51467         X1=SQRT(TAU)*EXP(YST)
51468         X2=SQRT(TAU)*EXP(-YST)
51469       ELSE
51470         X1=SQRT(TAUP)*EXP(YST)
51471         X2=SQRT(TAUP)*EXP(-YST)
51472       ENDIF
51473       XF=X1-X2
51474  
51475 C...Calculate shat, that, uhat, p_T^2.
51476       SHAT=TAU*VINT(2)
51477       SQM3=VINT(63)
51478       SQM4=VINT(64)
51479       RM3=SQM3/SHAT
51480       RM4=SQM4/SHAT
51481       BE34=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4))
51482       RPTS=4D0*VINT(71)**2/SHAT
51483       BE34L=SQRT(MAX(0D0,(1D0-RM3-RM4)**2-4D0*RM3*RM4-RPTS))
51484       RM34=2D0*RM3*RM4
51485       RSQM=1D0+RM34
51486       RTHM=(4D0*RM3*RM4+RPTS)/(1D0-RM3-RM4+BE34L)
51487       THAT=-0.5D0*SHAT*MAX(RTHM,1D0-RM3-RM4-BE34*CTH)
51488       UHAT=-0.5D0*SHAT*MAX(RTHM,1D0-RM3-RM4+BE34*CTH)
51489       PT2=MAX(VINT(71)**2,0.25D0*SHAT*BE34**2*(1D0-CTH**2))
51490  
51491 C...Decisions by user to be put here.
51492  
51493 C...Stop program if this routine is ever called.
51494 C...You should not copy these lines to your own routine.
51495       WRITE(MSTU(11),5000)
51496       IF(PYR(0).LT.10D0) STOP
51497  
51498 C...Format for error printout.
51499  5000 FORMAT(1X,'Error: you did not link your PYKCUT routine ',
51500      &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
51501      &1X,'Execution stopped!')
51502  
51503       RETURN
51504       END
51505  
51506 C*********************************************************************
51507  
51508 C...PYEVWT
51509 C...Dummy routine, which the user can replace in order to multiply the
51510 C...standard PYTHIA differential cross-section by a process- and
51511 C...kinematics-dependent factor WTXS. For MSTP(142)=1 this corresponds
51512 C...to generation of weighted events, with weight 1/WTXS, while for
51513 C...MSTP(142)=2 it corresponds to a modification of the underlying
51514 C...physics.
51515  
51516       SUBROUTINE PYEVWT(WTXS)
51517  
51518 C...Double precision and integer declarations.
51519       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51520       IMPLICIT INTEGER(I-N)
51521       INTEGER PYK,PYCHGE,PYCOMP
51522 C...Commonblocks.
51523       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51524       COMMON/PYINT1/MINT(400),VINT(400)
51525       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
51526       SAVE /PYDAT1/,/PYINT1/,/PYINT2/
51527  
51528 C...Set default weight for WTXS.
51529       WTXS=1D0
51530  
51531 C...Read out subprocess number.
51532       ISUB=MINT(1)
51533       ISTSB=ISET(ISUB)
51534  
51535 C...Read out tau, y*, cos(theta), tau' (where defined, else =0).
51536       TAU=VINT(21)
51537       YST=VINT(22)
51538       CTH=0D0
51539       IF(ISTSB.EQ.2.OR.ISTSB.EQ.4) CTH=VINT(23)
51540       TAUP=0D0
51541       IF(ISTSB.GE.3.AND.ISTSB.LE.5) TAUP=VINT(26)
51542  
51543 C...Read out x_1, x_2, x_F, shat, that, uhat, p_T^2.
51544       X1=VINT(41)
51545       X2=VINT(42)
51546       XF=X1-X2
51547       SHAT=VINT(44)
51548       THAT=VINT(45)
51549       UHAT=VINT(46)
51550       PT2=VINT(48)
51551  
51552 C...Modifications by user to be put here.
51553  
51554 C...Stop program if this routine is ever called.
51555 C...You should not copy these lines to your own routine.
51556       WRITE(MSTU(11),5000)
51557       IF(PYR(0).LT.10D0) STOP
51558  
51559 C...Format for error printout.
51560  5000 FORMAT(1X,'Error: you did not link your PYEVWT routine ',
51561      &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
51562      &1X,'Execution stopped!')
51563  
51564       RETURN
51565       END
51566  
51567 C*********************************************************************
51568  
51569 C...PYUPIN
51570 C...Dummy copy of routine to be called by user to set up a user-defined
51571 C...process.
51572  
51573       SUBROUTINE PYUPIN(ISUB,TITLE,SIGMAX)
51574  
51575 C...Double precision and integer declarations.
51576       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51577       IMPLICIT INTEGER(I-N)
51578       INTEGER PYK,PYCHGE,PYCOMP
51579 C...Commonblocks.
51580       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51581       COMMON/PYINT2/ISET(500),KFPR(500,2),COEF(500,20),ICOL(40,4,2)
51582       COMMON/PYINT6/PROC(0:500)
51583       CHARACTER PROC*28
51584       SAVE /PYDAT1/,/PYINT2/,/PYINT6/
51585 C...Local character variable.
51586       CHARACTER*(*) TITLE
51587  
51588 C...Check that subprocess number free.
51589       IF(ISUB.LT.1.OR.ISUB.GT.500.OR.ISET(ISUB).GE.0) THEN
51590         WRITE(MSTU(11),5000) ISUB
51591         STOP
51592       ENDIF
51593  
51594 C...Fill information on new process.
51595       ISET(ISUB)=11
51596       COEF(ISUB,1)=SIGMAX
51597       PROC(ISUB)=TITLE//' '
51598  
51599 C...Format for error output.
51600  5000 FORMAT(1X,'Error: user-defined subprocess code ',I4,
51601      &' not allowed.'//1X,'Execution stopped!')
51602  
51603       RETURN
51604       END
51605  
51606 C*********************************************************************
51607  
51608 C...PYUPEV
51609 C...Dummy routine, to be replaced by user. When called from PYTHIA
51610 C...the subprocess number ISUB will be given, and PYUPEV is supposed
51611 C...to generate an event of this type, to be stored in the PYUPPR
51612 C...commonblock. SIGEV gives the differential cross-section associated
51613 C...with the event, i.e. the acceptance probability of the event is
51614 C...taken to be SIGEV/SIGMAX, where SIGMAX was given in the PYUPIN
51615 C...call.
51616  
51617       SUBROUTINE PYUPEV(ISUB,SIGEV)
51618  
51619 C...Double precision and integer declarations.
51620       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51621       IMPLICIT INTEGER(I-N)
51622       INTEGER PYK,PYCHGE,PYCOMP
51623 C...Commonblocks.
51624       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51625       COMMON/PYUPPR/NUP,KUP(20,7),NFUP,IFUP(10,2),PUP(20,5),Q2UP(0:10)
51626       SAVE /PYDAT1/,/PYUPPR/
51627  
51628 C...Stop program if this routine is ever called.
51629 C...You should not copy these lines to your own routine.
51630       WRITE(MSTU(11),5000)
51631       IF(PYR(0).LT.10D0) STOP
51632       SIGEV=ISUB
51633  
51634 C...Format for error printout.
51635  5000 FORMAT(1X,'Error: you did not link your PYUPEV routine ',
51636      &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
51637      &1X,'Execution stopped!')
51638  
51639       RETURN
51640       END
51641  
51642 C*********************************************************************
51643  
51644 C...PDFSET
51645 C...Dummy routine, to be removed when PDFLIB is to be linked.
51646  
51647       SUBROUTINE PDFSET(PARM,VALUE)
51648  
51649 C...Double precision and integer declarations.
51650       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51651       IMPLICIT INTEGER(I-N)
51652       INTEGER PYK,PYCHGE,PYCOMP
51653 C...Commonblocks.
51654       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51655       SAVE /PYDAT1/
51656 C...Local arrays and character variables.
51657       CHARACTER*20 PARM(20)
51658       DOUBLE PRECISION VALUE(20)
51659  
51660 C...Stop program if this routine is ever called.
51661       WRITE(MSTU(11),5000)
51662       IF(PYR(0).LT.10D0) STOP
51663       PARM(20)=PARM(1)
51664       VALUE(20)=VALUE(1)
51665  
51666 C...Format for error printout.
51667  5000 FORMAT(1X,'Error: you did not link PDFLIB correctly.'/
51668      &1X,'Dummy routine PDFSET in PYTHIA file called instead.'/
51669      &1X,'Execution stopped!')
51670  
51671       RETURN
51672       END
51673  
51674 C*********************************************************************
51675  
51676 C...STRUCTM
51677 C...Dummy routine, to be removed when PDFLIB is to be linked.
51678  
51679       SUBROUTINE STRUCTM(XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU)
51680  
51681 C...Double precision and integer declarations.
51682       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51683       IMPLICIT INTEGER(I-N)
51684       INTEGER PYK,PYCHGE,PYCOMP
51685 C...Commonblocks.
51686       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51687       SAVE /PYDAT1/
51688 C...Local variables
51689       DOUBLE PRECISION XX,QQ,UPV,DNV,USEA,DSEA,STR,CHM,BOT,TOP,GLU
51690  
51691 C...Stop program if this routine is ever called.
51692       WRITE(MSTU(11),5000)
51693       IF(PYR(0).LT.10D0) STOP
51694       UPV=XX+QQ
51695       DNV=XX+2D0*QQ
51696       USEA=XX+3D0*QQ
51697       DSEA=XX+4D0*QQ
51698       STR=XX+5D0*QQ
51699       CHM=XX+6D0*QQ
51700       BOT=XX+7D0*QQ
51701       TOP=XX+8D0*QQ
51702       GLU=XX+9D0*QQ
51703  
51704 C...Format for error printout.
51705  5000 FORMAT(1X,'Error: you did not link PDFLIB correctly.'/
51706      &1X,'Dummy routine STRUCTM in PYTHIA file called instead.'/
51707      &1X,'Execution stopped!')
51708  
51709       RETURN
51710       END
51711  
51712 C*********************************************************************
51713  
51714 C...STRUCTP
51715 C...Dummy routine, to be removed when PDFLIB is to be linked.
51716  
51717       SUBROUTINE STRUCTP(XX,QQ2,P2,IP2,UPV,DNV,USEA,DSEA,STR,CHM,
51718      &BOT,TOP,GLU)
51719  
51720 C...Double precision and integer declarations.
51721       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51722       IMPLICIT INTEGER(I-N)
51723       INTEGER PYK,PYCHGE,PYCOMP
51724 C...Commonblocks.
51725       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51726       SAVE /PYDAT1/
51727 C...Local variables
51728       DOUBLE PRECISION XX,QQ2,P2,UPV,DNV,USEA,DSEA,STR,CHM,BOT,
51729      &TOP,GLU
51730  
51731 C...Stop program if this routine is ever called.
51732       WRITE(MSTU(11),5000)
51733       IF(PYR(0).LT.10D0) STOP
51734       UPV=XX+QQ2
51735       DNV=XX+2D0*QQ2
51736       USEA=XX+3D0*QQ2
51737       DSEA=XX+4D0*QQ2
51738       STR=XX+5D0*QQ2
51739       CHM=XX+6D0*QQ2
51740       BOT=XX+7D0*QQ2
51741       TOP=XX+8D0*QQ2
51742       GLU=XX+9D0*QQ2
51743  
51744 C...Format for error printout.
51745  5000 FORMAT(1X,'Error: you did not link PDFLIB correctly.'/
51746      &1X,'Dummy routine STRUCTP in PYTHIA file called instead.'/
51747      &1X,'Execution stopped!')
51748  
51749       RETURN
51750       END
51751  
51752 C*********************************************************************
51753  
51754 C...PYTAUD
51755 C...Dummy routine, to be replaced by user, to handle the decay of a
51756 C...polarized tau lepton.
51757 C...Input:
51758 C...ITAU is the position where the decaying tau is stored in /PYJETS/.
51759 C...IORIG is the position where the mother of the tau is stored;
51760 C...     is 0 when the mother is not stored.
51761 C...KFORIG is the flavour of the mother of the tau;
51762 C...     is 0 when the mother is not known.
51763 C...Note that IORIG=0 does not necessarily imply KFORIG=0;
51764 C...     e.g. in B hadron semileptonic decays the W  propagator
51765 C...     is not explicitly stored but the W code is still unambiguous.
51766 C...Output:
51767 C...NDECAY is the number of decay products in the current tau decay.
51768 C...These decay products should be added to the /PYJETS/ common block,
51769 C...in positions N+1 through N+NDECAY. For each product I you must
51770 C...give the flavour codes K(I,2) and the five-momenta P(I,1), P(I,2),
51771 C...P(I,3), P(I,4) and P(I,5). The rest will be stored automatically.
51772  
51773       SUBROUTINE PYTAUD(ITAU,IORIG,KFORIG,NDECAY)
51774  
51775 C...Double precision and integer declarations.
51776       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51777       IMPLICIT INTEGER(I-N)
51778       INTEGER PYK,PYCHGE,PYCOMP
51779 C...Commonblocks.
51780       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
51781       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
51782       SAVE /PYJETS/,/PYDAT1/
51783  
51784 C...Stop program if this routine is ever called.
51785 C...You should not copy these lines to your own routine.
51786       NDECAY=ITAU+IORIG+KFORIG
51787       WRITE(MSTU(11),5000)
51788       IF(PYR(0).LT.10D0) STOP
51789  
51790 C...Format for error printout.
51791  5000 FORMAT(1X,'Error: you did not link your PYTAUD routine ',
51792      &'correctly.'/1X,'Dummy routine in PYTHIA file called instead.'/
51793      &1X,'Execution stopped!')
51794  
51795       RETURN
51796       END
51797  
51798 C*********************************************************************
51799  
51800 C...PYTIME
51801 C...Finds current date and time.
51802 C...Since this task is not standardized in Fortran 77, the routine
51803 C...is dummy, to be replaced by the user. Examples are given for
51804 C...the Fortran 90 routine and DEC Fortran 77, and what to do if
51805 C...you do not have access to suitable routines.
51806  
51807       SUBROUTINE PYTIME(IDATI)
51808  
51809 C...Double precision and integer declarations.
51810       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
51811       IMPLICIT INTEGER(I-N)
51812       INTEGER PYK,PYCHGE,PYCOMP
51813       CHARACTER*8 ATIME
51814 C...Local array.
51815       INTEGER IDATI(6),IDTEMP(3)
51816  
51817 C...Example 0: if you do not have suitable routines.
51818 C      DO 100 J=1,6
51819 C      IDATI(J)=0
51820 C  100 CONTINUE
51821  
51822 C...Example 1: Fortran 90 routine.
51823 C      INTEGER IVAL(8)
51824 C      CALL DATE_AND_TIME(VALUES=IVAL)
51825 C      IDATI(1)=IVAL(1)
51826 C      IDATI(2)=IVAL(2)
51827 C      IDATI(3)=IVAL(3)
51828 C      IDATI(4)=IVAL(5)
51829 C      IDATI(5)=IVAL(6)
51830 C      IDATI(6)=IVAL(7)
51831  
51832 C...Example 2: DEC Fortran 77. AIX.
51833 C      CALL IDATE(IMON,IDAY,IYEAR)
51834 C      IF(IYEAR.LT.70) THEN
51835 C        IDATI(1)=2000+IYEAR
51836 C      ELSEIF(IYEAR.LT.100) THEN
51837 C        IDATI(1)=1900+IYEAR
51838 C      ELSE
51839 C        IDATI(1)=IYEAR 
51840 C      ENDIF 
51841 C      IDATI(2)=IMON
51842 C      IDATI(3)=IDAY
51843 C      CALL ITIME(IHOUR,IMIN,ISEC)
51844 C      IDATI(4)=IHOUR
51845 C      IDATI(5)=IMIN
51846 C      IDATI(6)=ISEC
51847  
51848 C...Example 3: DEC Fortran, IRIX, IRIX64.
51849 C      CALL IDATE(IMON,IDAY,IYEAR)
51850 C      IF(IYEAR.LT.70) THEN
51851 C        IDATI(1)=2000+IYEAR
51852 C      ELSEIF(IYEAR.LT.100) THEN
51853 C        IDATI(1)=1900+IYEAR
51854 C      ELSE
51855 C        IDATI(1)=IYEAR 
51856 C      ENDIF 
51857 C      IDATI(2)=IMON
51858 C      IDATI(3)=IDAY
51859 C      CALL TIME(ATIME)
51860 C      IHOUR=0
51861 C      IMIN=0
51862 C      ISEC=0
51863 C      READ(ATIME(1:2),'(I2)') IHOUR
51864 C      READ(ATIME(4:5),'(I2)') IMIN
51865 C      READ(ATIME(7:8),'(I2)') ISEC
51866 C      IDATI(4)=IHOUR
51867 C      IDATI(5)=IMIN
51868 C      IDATI(6)=ISEC
51869  
51870 C...Example 4: GNU LINUX libU77, SunOS.
51871       CALL IDATE(IDTEMP)
51872       IDATI(1)=IDTEMP(3)
51873       IDATI(2)=IDTEMP(2)
51874       IDATI(3)=IDTEMP(1)
51875       CALL ITIME(IDTEMP)
51876       IDATI(4)=IDTEMP(1)
51877       IDATI(5)=IDTEMP(2)
51878       IDATI(6)=IDTEMP(3)
51879  
51880       RETURN
51881       END
Generated on Sun Oct 20 20:24:10 2013 for C++InterfacetoTauola by  doxygen 1.6.3