]> git.uio.no Git - u/mrichter/AliRoot.git/blob - TAmpt/AMPT/hijing1.383_ampt.f
randomize reaction plane
[u/mrichter/AliRoot.git] / TAmpt / AMPT / hijing1.383_ampt.f
1 c.................... hijing1.383_ampt.f
2 c     Version 1.383
3 c     The variables isng in HIJSFT and JL in ATTRAD were not initialized.
4 c     The version initialize them. (as found by Fernando Marroquim)
5 c
6 c
7 c
8 c     Version 1.382
9 c     Nuclear distribution for deuteron is taken as the Hulthen wave
10 c     function as provided by Brian Cole (Columbia)
11 clin     used my own implementation of impact parameter 
12 clin     & proton-neutron distance within a deuteron.
13 c
14 c
15 c     Version 1.381
16 c
17 c     The parameters for Wood-Saxon distribution for deuteron are
18 c     constrained to give the right rms ratius 2.116 fm
19 c     (R=0.0, D=0.5882)
20 c
21 c
22 c     Version 1.38
23 c
24 c     The following common block is added to record the number of elastic
25 c     (NELT, NELP) and inelastic (NINT, NINP) participants
26 c
27 c        COMMON/HJGLBR/NELT,NINT,NELP,NINP
28 c        SAVE /HJGLBR/
29 c
30 c     Version 1.37
31 c
32 c     A bug in the quenching subroutine is corrected. When calculating the
33 c     distance between two wounded nucleons, the displacement of the
34 c     impact parameter was not inculded. This bug was discovered by
35 c     Dr. V.Uzhinskii JINR, Dubna, Russia
36 c
37 c
38 C     Version 1.36
39 c
40 c     Modification Oct. 8, 1998. In hijing, log(ran(nseed)) occasionally
41 c     causes overfloat. It is modified to log(max(ran(nseed),1.0e-20)).
42 c
43 c
44 C     Nothing important has been changed here. A few 'garbage' has been
45 C     cleaned up here, like common block HJJET3 for the sea quark strings
46 C     which were originally created to implement the DPM scheme which
47 C     later was abadoned in the final version. The lines which operate
48 C     on these data are also deleted in the program.
49 C
50 C
51 C     Version 1.35
52 C     There are some changes in the program: subroutine HARDJET is now
53 C     consolidated with HIJHRD. HARDJET is used to re-initiate PYTHIA
54 C     for the triggered hard processes. Now that is done  altogether
55 C     with other normal hard processes in modified JETINI. In the new
56 C     version one calls JETINI every time one calls HIJHRD. In the new
57 C     version the effect of the isospin of the nucleon on hard processes,
58 C     especially direct photons is correctly considered.
59 C     For A+A collisions, one has to initilize pythia
60 C     separately for each type of collisions, pp, pn,np and nn,
61 C     or hp and hn for hA collisions. In JETINI we use the following
62 C     catalogue for different types of collisions:
63 C     h+h: h+h (itype=1)
64 C     h+A: h+p (itype=1), h+n (itype=2)
65 C     A+h: p+h (itype=1), n+h (itype=2)
66 C     A+A: p+p (itype=1), p+n (itype=2), n+p (itype=3), n+n (itype=4)
67 C*****************************************************************
68 c
69 C
70 C     Version 1.34
71 C     Last modification on January 5, 1998. Two mistakes are corrected in
72 C     function G. A Mistake in the subroutine Parton is also corrected.
73 C     (These are pointed out by Ysushi Nara).
74 C
75 C
76 C       Last modifcation on April 10, 1996. To conduct final
77 C       state radiation, PYTHIA reorganize the two scattered
78 C       partons and their final momenta will be a little
79 C       different. The summed total momenta of the partons
80 C       from the final state radiation are stored in HINT1(26-29)
81 C       and HINT1(36-39) which are little different from 
82 C       HINT1(21-24) and HINT1(41-44).
83 C
84 C       Version 1.33
85 C
86 C       Last modfication  on September 11, 1995. When HIJING and
87 C       PYTHIA are initialized, the shadowing is evaluated at
88 C       b=0 which is the maximum. This will cause overestimate
89 C       of shadowing for peripheral interactions. To correct this
90 C       problem, shadowing is set to zero when initializing. Then
91 C       use these maximum  cross section without shadowing as a
92 C       normalization of the Monte Carlo. This however increase
93 C       the computing time. IHNT2(16) is used to indicate whether
94 C       the sturcture function is called for (IHNT2(16)=1) initialization
95 C       or for (IHNT2(16)=0)normal collisions simulation
96 C
97 C       Last modification on Aagust 28, 1994. Two bugs associate
98 C       with the impact parameter dependence of the shadowing is
99 C       corrected.
100 C
101 C
102 c       Last modification on October 14, 1994. One bug is corrected
103 c       in the direct photon production option in subroutine
104 C       HIJHRD.( this problem was reported by Jim Carroll and Mike Beddo).
105 C       Another bug associated with keeping the decay history
106 C       in the particle information is also corrected.(this problem
107 C       was reported by Matt Bloomer)
108 C
109 C
110 C       Last modification on July 15, 1994. The option to trig on
111 C       heavy quark production (charm IHPR2(18)=0 or beauty IHPR2(18)=1) 
112 C       is added. To do this, set IHPR2(3)=3. For inclusive production,
113 C       one should reset HIPR1(10)=0.0. One can also trig larger pt
114 C       QQbar production by giving HIPR1(10) a nonvanishing value.
115 C       The mass of the heavy quark in the calculation of the cross
116 C       section (HINT1(59)--HINT1(65)) is given by HIPR1(7) (the
117 C       default is the charm mass D=1.5). We also include a separate
118 C       K-factor for heavy quark and direct photon production by
119 C       HIPR1(23)(D=2.0).
120 C
121 C       Last modification on May 24, 1994.  The option to
122 C       retain the information of all particles including those
123 C       who have decayed is IHPR(21)=1 (default=0). KATT(I,3) is 
124 C       added to contain the line number of the parent particle 
125 C       of the current line which is produced via a decay. 
126 C       KATT(I,4) is the status number of the particle: 11=particle
127 C       which has decayed; 1=finally produced particle.
128 C
129 C
130 C       Last modification on May 24, 1994( in HIJSFT when valence quark
131 C       is quenched, the following error is corrected. 1.2*IHNT2(1) --> 
132 C       1.2*IHNT2(1)**0.333333, 1.2*IHNT2(3) -->1.2*IHNT(3)**0.333333)
133 C
134 C
135 C       Last modification on March 16, 1994 (heavy flavor production
136 C       processes MSUB(81)=1 MSUB(82)=1 have been switched on,
137 C       charm production is the default, B-quark option is
138 C       IHPR2(18), when it is switched on, charm quark is 
139 C       automatically off)
140 C
141 C
142 C       Last modification on March 23, 1994 (an error is corrected
143 C       in the impact parameter dependence of the jet cross section)
144 C
145 C       Last modification Oct. 1993 to comply with non-vax
146 C       machines' compiler 
147 C
148 C*********************************************
149 C       LAST MODIFICATION April 5, 1991
150 CQUARK DISTRIBUTIOIN (1-X)**A/(X**2+C**2/S)**B 
151 C(A=HIPR1(44),B=HIPR1(46),C=HIPR1(45))
152 C STRING FLIP, VENUS OPTION IHPR2(15)=1,IN WHICH ONE CAN HAVE ONE AND
153 C TWO COLOR CHANGES, (1-W)**2,W*(1-W),W*(1-W),AND W*2, W=HIPR1(18), 
154 C AMONG PT DISTRIBUTION OF SEA QUARKS IS CONTROLLED BY HIPR1(42)
155 C
156 C       gluon jets can form a single string system
157 C
158 C       initial state radiation is included
159 C       
160 C       all QCD subprocesses are included
161 c
162 c       direct particles production is included(currently only direct
163 C               photon)
164 c
165 C       Effect of high P_T trigger bias on multiple jets distribution
166 c
167 C******************************************************************
168 C                               HIJING.10                         *
169 C                 Heavy Ion Jet INteraction Generator             *
170 C                                  by                             *
171 C                  X. N. Wang      and   M. Gyulassy              *
172 C                     Lawrence Berkeley Laboratory                *
173 C                                                                 *
174 C******************************************************************
175 C
176 C******************************************************************
177 C NFP(K,1),NFP(K,2)=flavor of q and di-q, NFP(K,3)=present ID of  *
178 C proj, NFP(K,4) original ID of proj.  NFP(K,5)=colli status(0=no,*
179 C 1=elastic,2=the diffrac one in single-diffrac,3= excited string.*
180 C |NFP(K,6)| is the total # of jet production, if NFP(K,6)<0 it   *
181 C can not produce jet anymore. NFP(K,10)=valence quarks scattering*
182 C (0=has not been,1=is going to be, -1=has already been scattered *
183 C NFP(k,11) total number of interactions this proj has suffered   *
184 C PP(K,1)=PX,PP(K,2)=PY,PP(K,3)=PZ,PP(K,4)=E,PP(K,5)=M(invariant  *
185 C mass), PP(K,6,7),PP(K,8,9)=transverse momentum of quark and     *
186 C diquark,PP(K,10)=PT of the hard scattering between the valence  *
187 C quarks; PP(K,14,15)=the mass of quark,diquark.                  * 
188 C******************************************************************
189 C
190 C****************************************************************
191 C
192 C       SUBROUTINE HIJING
193 C
194 C****************************************************************
195         SUBROUTINE HIJING(FRAME,BMIN0,BMAX0)
196
197 cgsfs   Added following for consistency with AMPT call
198         double precision BMIN0, BMAX0
199
200 cbz1/25/99
201         PARAMETER (MAXPTN=400001)
202 clin-4/20/01        PARAMETER (MAXSTR = 1600)
203         PARAMETER (MAXSTR=150001)
204 cbz1/25/99end
205 clin-4/26/01:
206         PARAMETER (MAXIDL=4001)
207
208 cbz1/31/99
209         DOUBLE PRECISION  GX0, GY0, GZ0, FT0, PX0, PY0, PZ0, E0, XMASS0
210         DOUBLE PRECISION  GX5, GY5, GZ5, FT5, PX5, PY5, PZ5, E5, XMASS5
211         DOUBLE PRECISION  ATAUI, ZT1, ZT2, ZT3
212         DOUBLE PRECISION  xnprod,etprod,xnfrz,etfrz,
213      & dnprod,detpro,dnfrz,detfrz
214
215 cbz1/31/99end
216
217         CHARACTER FRAME*8
218         DIMENSION SCIP(300,300),RNIP(300,300),SJIP(300,300),JTP(3),
219      &                        IPCOL(90000),ITCOL(90000)
220         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
221 cc      SAVE /HPARNT/
222 C
223         COMMON/hjcrdn/YP(3,300),YT(3,300)
224 cc      SAVE /hjcrdn/
225 clin-7/16/03 NINT is a intrinsic fortran function, rename it to NINTHJ
226 c        COMMON/HJGLBR/NELT,NINT,NELP,NINP
227         COMMON/HJGLBR/NELT,NINTHJ,NELP,NINP
228 cc      SAVE /HJGLBR/
229         COMMON/HMAIN1/EATT,JATT,NATT,NT,NP,N0,N01,N10,N11
230 cc      SAVE /HMAIN1/
231 clin-4/26/01
232 c        COMMON/HMAIN2/KATT(130000,4),PATT(130000,4)
233         COMMON/HMAIN2/KATT(MAXSTR,4),PATT(MAXSTR,4)
234 cc      SAVE /HMAIN2/
235         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
236 cc      SAVE /HSTRNG/
237         COMMON/HJJET1/NPJ(300),KFPJ(300,500),PJPX(300,500),
238      &                PJPY(300,500),PJPZ(300,500),PJPE(300,500),
239      &                PJPM(300,500),NTJ(300),KFTJ(300,500),
240      &                PJTX(300,500),PJTY(300,500),PJTZ(300,500),
241      &                PJTE(300,500),PJTM(300,500)
242 cc      SAVE /HJJET1/
243 clin-4/2008
244 c        COMMON/HJJET2/NSG,NJSG(900),IASG(900,3),K1SG(900,100),
245 c     &       K2SG(900,100),PXSG(900,100),PYSG(900,100),
246 c     &       PZSG(900,100),PESG(900,100),PMSG(900,100)
247         COMMON/HJJET2/NSG,NJSG(MAXSTR),IASG(MAXSTR,3),K1SG(MAXSTR,100),
248      &       K2SG(MAXSTR,100),PXSG(MAXSTR,100),PYSG(MAXSTR,100),
249      &       PZSG(MAXSTR,100),PESG(MAXSTR,100),PMSG(MAXSTR,100)
250 cc      SAVE /HJJET2/
251         COMMON/HJJET4/NDR,IADR(MAXSTR,2),KFDR(MAXSTR),PDR(MAXSTR,5)
252 clin-4/2008:
253 c        common/xydr/rtdr(900,2)
254         common/xydr/rtdr(MAXSTR,2)
255 cc      SAVE /HJJET4/
256       COMMON/RNDF77/NSEED
257 cc      SAVE /RNDF77/
258 C
259         COMMON/LUJETSA/N,K(9000,5),P(9000,5),V(9000,5)   
260 cc      SAVE /LUJETSA/
261         COMMON/LUDAT1A/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
262 cc      SAVE /LUDAT1A/
263
264 clin-9/29/03 changed name in order to distinguish from /prec2/
265         COMMON /ARPRC/ ITYPAR(MAXSTR),
266      &       GXAR(MAXSTR), GYAR(MAXSTR), GZAR(MAXSTR), FTAR(MAXSTR),
267      &       PXAR(MAXSTR), PYAR(MAXSTR), PZAR(MAXSTR), PEAR(MAXSTR),
268      &       XMAR(MAXSTR)
269 ccbz11/11/98
270 c        COMMON /ARPRC/ ITYP(MAXSTR),
271 c     &     GX(MAXSTR), GY(MAXSTR), GZ(MAXSTR), FT(MAXSTR),
272 c     &     PX(MAXSTR), PY(MAXSTR), PZ(MAXSTR), EE(MAXSTR),
273 c     &     XM(MAXSTR)
274 cc      SAVE /ARPRC/
275 ccbz11/11/98end
276
277 cbz1/25/99
278         COMMON /PARA1/ MUL
279 cc      SAVE /PARA1/
280         COMMON /prec1/GX0(MAXPTN),GY0(MAXPTN),GZ0(MAXPTN),FT0(MAXPTN),
281      &     PX0(MAXPTN), PY0(MAXPTN), PZ0(MAXPTN), E0(MAXPTN),
282      &     XMASS0(MAXPTN), ITYP0(MAXPTN)
283 cc      SAVE /prec1/
284         COMMON /prec2/GX5(MAXPTN),GY5(MAXPTN),GZ5(MAXPTN),FT5(MAXPTN),
285      &       PX5(MAXPTN), PY5(MAXPTN), PZ5(MAXPTN), E5(MAXPTN),
286      &       XMASS5(MAXPTN), ITYP5(MAXPTN)
287 cc      SAVE /prec2/
288         COMMON /ilist7/ LSTRG0(MAXPTN), LPART0(MAXPTN)
289 cc      SAVE /ilist7/
290         COMMON /ilist8/ LSTRG1(MAXPTN), LPART1(MAXPTN)
291 cc      SAVE /ilist8/
292         COMMON /SREC1/ NSP, NST, NSI
293 cc      SAVE /SREC1/
294         COMMON /SREC2/ATAUI(MAXSTR),ZT1(MAXSTR),ZT2(MAXSTR),ZT3(MAXSTR)
295 cc      SAVE /SREC2/
296 cbz1/25/99end
297
298 clin-2/25/00
299         COMMON /frzout/ xnprod(30),etprod(30),xnfrz(30),etfrz(30),
300      & dnprod(30),detpro(30),dnfrz(30),detfrz(30)
301 cc      SAVE /frzout/ 
302 clin-4/11/01 soft:
303       common/anim/nevent,isoft,isflag,izpc
304 cc      SAVE /anim/
305 clin-4/25/01 soft3:
306       DOUBLE PRECISION PXSGS,PYSGS,PZSGS,PESGS,PMSGS,
307      1     GXSGS,GYSGS,GZSGS,FTSGS
308       COMMON/SOFT/PXSGS(MAXSTR,3),PYSGS(MAXSTR,3),PZSGS(MAXSTR,3),
309      &     PESGS(MAXSTR,3),PMSGS(MAXSTR,3),GXSGS(MAXSTR,3),
310      &     GYSGS(MAXSTR,3),GZSGS(MAXSTR,3),FTSGS(MAXSTR,3),
311      &     K1SGS(MAXSTR,3),K2SGS(MAXSTR,3),NJSGS(MAXSTR)
312 cc      SAVE /SOFT/
313 clin-4/26/01 lepton and photon info:
314         COMMON /NOPREC/ NNOZPC, ITYPN(MAXIDL),
315      &       GXN(MAXIDL), GYN(MAXIDL), GZN(MAXIDL), FTN(MAXIDL),
316      &       PXN(MAXIDL), PYN(MAXIDL), PZN(MAXIDL), EEN(MAXIDL),
317      &       XMN(MAXIDL)
318 cc      SAVE /NOPREC/
319 clin-6/22/01:
320         common /lastt/itimeh,bimp
321 cc      SAVE /lastt/
322         COMMON /AREVT/ IAEVT, IARUN, MISS
323         common/phidcy/iphidcy,pttrig,ntrig,maxmiss
324 cwei        DOUBLE PRECISION PATT
325         SAVE   
326
327 cgsfs      WRITE(*,*) "IN Hijing, FRAME=",FRAME
328 cgsfs      WRITE(*,*) "IN Hijing, BMIN=",BMIN0
329 cgsfs      WRITE(*,*) "IN Hijing, BMAX=",BMAX0
330
331         BMAX=MIN(BMAX0,HIPR1(34)+HIPR1(35))
332         BMIN=MIN(BMIN0,BMAX)
333         IF(IHNT2(1).LE.1 .AND. IHNT2(3).LE.1) THEN
334                 BMIN=0.0
335                 BMAX=2.5*SQRT(HIPR1(31)*0.1/HIPR1(40))
336         ENDIF
337 C                        ********HIPR1(31) is in mb =0.1fm**2
338 C*******THE FOLLOWING IS TO SELECT THE COORDINATIONS OF NUCLEONS 
339 C       BOTH IN PROJECTILE AND TARGET NUCLEAR( in fm)
340 C
341 cgsfs      WRITE(*,*) "IN Hijing, Modified BMIN=",BMIN
342 cgsfs      WRITE(*,*) "IN Hijing, Modified BMAX=",BMAX
343         YP(1,1)=0.0
344         YP(2,1)=0.0
345         YP(3,1)=0.0
346         IF(IHNT2(1).LE.1) GO TO 14
347         DO 10 KP=1,IHNT2(1)
348 5        R=HIRND(1)
349         X=RANART(NSEED)
350         CX=2.0*X-1.0
351         SX=SQRT(1.0-CX*CX)
352 C                ********choose theta from uniform cos(theta) distr
353         PHI=RANART(NSEED)*2.0*HIPR1(40)
354 C                ********choose phi form uniform phi distr 0 to 2*pi
355         YP(1,KP)=R*SX*COS(PHI)
356         YP(2,KP)=R*SX*SIN(PHI)
357         YP(3,KP)=R*CX
358         IF(HIPR1(29).EQ.0.0) GO TO 10
359         DO 8  KP2=1,KP-1
360                 DNBP1=(YP(1,KP)-YP(1,KP2))**2
361                 DNBP2=(YP(2,KP)-YP(2,KP2))**2
362                 DNBP3=(YP(3,KP)-YP(3,KP2))**2
363                 DNBP=DNBP1+DNBP2+DNBP3
364                 IF(DNBP.LT.HIPR1(29)*HIPR1(29)) GO TO 5
365 C                        ********two neighbors cannot be closer than 
366 C                                HIPR1(29)
367 8        CONTINUE
368 10        CONTINUE
369
370 clin-1/27/03 Hulthen wavefn for deuteron borrowed from hijing1.382.f, 
371 c     but modified [divide by 2, & x(p)=-x(n)]: 
372 c     (Note: hijing1.383.f has corrected this bug in hijing1.382.f)
373         if(IHNT2(1).EQ.2) then
374            rnd1=max(RANART(NSEED),1.0e-20)
375            rnd2=max(RANART(NSEED),1.0e-20)
376            rnd3=max(RANART(NSEED),1.0e-20)
377            R=-(log(rnd1)*4.38/2.0+log(rnd2)*0.85/2.0
378      &          +4.38*0.85*log(rnd3)/(4.38+0.85))
379            X=RANART(NSEED)
380            CX=2.0*X-1.0
381            SX=SQRT(1.0-CX*CX)
382            PHI=RANART(NSEED)*2.0*HIPR1(40)
383 c     R above is the relative distance between p & n in a deuteron:
384            R=R/2.
385            YP(1,1)=R*SX*COS(PHI)
386            YP(2,1)=R*SX*SIN(PHI)
387            YP(3,1)=R*CX
388 c     p & n has opposite coordinates in the deuteron frame:
389            YP(1,2)=-YP(1,1)
390            YP(2,2)=-YP(2,1)
391            YP(3,2)=-YP(3,1)
392         endif
393
394         DO 12 I=1,IHNT2(1)-1
395         DO 12 J=I+1,IHNT2(1)
396         IF(YP(3,I).GT.YP(3,J)) GO TO 12
397         Y1=YP(1,I)
398         Y2=YP(2,I)
399         Y3=YP(3,I)
400         YP(1,I)=YP(1,J)
401         YP(2,I)=YP(2,J)
402         YP(3,I)=YP(3,J)
403         YP(1,J)=Y1
404         YP(2,J)=Y2
405         YP(3,J)=Y3
406 12        CONTINUE
407 C
408 C******************************
409 14        YT(1,1)=0.0
410         YT(2,1)=0.0
411         YT(3,1)=0.0
412         IF(IHNT2(3).LE.1) GO TO 24
413         DO 20 KT=1,IHNT2(3)
414 15        R=HIRND(2)
415         X=RANART(NSEED)
416         CX=2.0*X-1.0
417         SX=SQRT(1.0-CX*CX)
418 C                ********choose theta from uniform cos(theta) distr
419         PHI=RANART(NSEED)*2.0*HIPR1(40)
420 C                ********chose phi form uniform phi distr 0 to 2*pi
421         YT(1,KT)=R*SX*COS(PHI)
422         YT(2,KT)=R*SX*SIN(PHI)
423         YT(3,KT)=R*CX
424         IF(HIPR1(29).EQ.0.0) GO TO 20
425         DO 18  KT2=1,KT-1
426                 DNBT1=(YT(1,KT)-YT(1,KT2))**2
427                 DNBT2=(YT(2,KT)-YT(2,KT2))**2
428                 DNBT3=(YT(3,KT)-YT(3,KT2))**2
429                 DNBT=DNBT1+DNBT2+DNBT3
430                 IF(DNBT.LT.HIPR1(29)*HIPR1(29)) GO TO 15
431 C                        ********two neighbors cannot be closer than 
432 C                                HIPR1(29)
433 18        CONTINUE
434 20        CONTINUE
435 c
436 clin-1/27/03 Hulthen wavefn for deuteron borrowed from hijing1.382.f, 
437 c     but modified [divide by 2, & x(p)=-x(n)]:
438         if(IHNT2(3).EQ.2) then
439            rnd1=max(RANART(NSEED),1.0e-20)
440            rnd2=max(RANART(NSEED),1.0e-20)
441            rnd3=max(RANART(NSEED),1.0e-20)
442            R=-(log(rnd1)*4.38/2.0+log(rnd2)*0.85/2.0
443      &          +4.38*0.85*log(rnd3)/(4.38+0.85))
444            X=RANART(NSEED)
445            CX=2.0*X-1.0
446            SX=SQRT(1.0-CX*CX)
447            PHI=RANART(NSEED)*2.0*HIPR1(40)
448            R=R/2.
449            YT(1,1)=R*SX*COS(PHI)
450            YT(2,1)=R*SX*SIN(PHI)
451            YT(3,1)=R*CX
452            YT(1,2)=-YT(1,1)
453            YT(2,2)=-YT(2,1)
454            YT(3,2)=-YT(3,1)
455         endif
456 c
457         DO 22 I=1,IHNT2(3)-1
458         DO 22 J=I+1,IHNT2(3)
459         IF(YT(3,I).LT.YT(3,J)) GO TO 22
460         Y1=YT(1,I)
461         Y2=YT(2,I)
462         Y3=YT(3,I)
463         YT(1,I)=YT(1,J)
464         YT(2,I)=YT(2,J)
465         YT(3,I)=YT(3,J)
466         YT(1,J)=Y1
467         YT(2,J)=Y2
468         YT(3,J)=Y3
469 22        CONTINUE
470
471 C********************
472 24        MISS=-1
473 50        MISS=MISS+1
474
475 clin-6/2009 ctest on
476 c        IF(MISS.GT.50) THEN
477         IF(MISS.GT.maxmiss) THEN
478            WRITE(6,*) 'infinite loop happened in  HIJING'
479            STOP
480         ENDIF
481
482 clin-4/30/01:
483         itest=0
484
485         NATT=0
486         JATT=0
487         EATT=0.0
488         CALL HIJINI
489         NLOP=0
490 C                        ********Initialize for a new event
491 60        NT=0
492         NP=0
493         N0=0
494         N01=0
495         N10=0
496         N11=0
497         NELT=0
498         NINTHJ=0
499         NELP=0
500         NINP=0
501         NSG=0
502         NCOLT=0
503
504 C****        BB IS THE ABSOLUTE VALUE OF IMPACT PARAMETER,BB**2 IS 
505 C       RANDOMLY GENERATED AND ITS ORIENTATION IS RANDOMLY SET 
506 C       BY THE ANGLE PHI  FOR EACH COLLISION.******************
507 C
508         BB=SQRT(BMIN**2+RANART(NSEED)*(BMAX**2-BMIN**2))
509 cbz6/28/99 flow1
510         PHI=2.0*HIPR1(40)*RANART(NSEED)
511 c        PHI=0.
512 cbz6/28/99 flow1 end
513         BBX=BB*COS(PHI)
514         BBY=BB*SIN(PHI)
515         HINT1(19)=BB
516         HINT1(20)=PHI
517 C
518         DO 70 JP=1,IHNT2(1)
519         DO 70 JT=1,IHNT2(3)
520            SCIP(JP,JT)=-1.0
521            B2=(YP(1,JP)+BBX-YT(1,JT))**2+(YP(2,JP)+BBY-YT(2,JT))**2
522            R2=B2*HIPR1(40)/HIPR1(31)/0.1
523 C                ********mb=0.1*fm, YP is in fm,HIPR1(31) is in mb
524            RRB1=MIN((YP(1,JP)**2+YP(2,JP)**2)
525      &          /1.2**2/REAL(IHNT2(1))**0.6666667,1.0)
526            RRB2=MIN((YT(1,JT)**2+YT(2,JT)**2)
527      &          /1.2**2/REAL(IHNT2(3))**0.6666667,1.0)
528            APHX1=HIPR1(6)*4.0/3.0*(IHNT2(1)**0.3333333-1.0)
529      &           *SQRT(1.0-RRB1)
530            APHX2=HIPR1(6)*4.0/3.0*(IHNT2(3)**0.3333333-1.0)
531      &           *SQRT(1.0-RRB2)
532            HINT1(18)=HINT1(14)-APHX1*HINT1(15)
533      &                        -APHX2*HINT1(16)+APHX1*APHX2*HINT1(17)
534            IF(IHPR2(14).EQ.0.OR.
535      &          (IHNT2(1).EQ.1.AND.IHNT2(3).EQ.1)) THEN
536               GS=1.0-EXP(-(HIPR1(30)+HINT1(18))*ROMG(R2)/HIPR1(31))
537               RANTOT=RANART(NSEED)
538               IF(RANTOT.GT.GS) GO TO 70
539               GO TO 65
540            ENDIF
541            GSTOT0=2.0*(1.0-EXP(-(HIPR1(30)+HINT1(18))
542      &             /HIPR1(31)/2.0*ROMG(0.0)))
543            R2=R2/GSTOT0
544            GS=1.0-EXP(-(HIPR1(30)+HINT1(18))/HIPR1(31)*ROMG(R2))
545            GSTOT=2.0*(1.0-SQRT(1.0-GS))
546            RANTOT=RANART(NSEED)*GSTOT0
547            IF(RANTOT.GT.GSTOT) GO TO 70
548            IF(RANTOT.GT.GS) THEN
549               CALL HIJCSC(JP,JT)
550               GO TO 70
551 C                        ********perform elastic collisions
552            ENDIF
553  65           SCIP(JP,JT)=R2
554            RNIP(JP,JT)=RANTOT
555            SJIP(JP,JT)=HINT1(18)
556            NCOLT=NCOLT+1
557            IPCOL(NCOLT)=JP
558            ITCOL(NCOLT)=JT
559 70        CONTINUE
560 C                ********total number interactions proj and targ has
561 C                                suffered
562
563 clin-5/22/01 write impact parameter:
564         bimp=bb
565 c        write(6,*) '#impact parameter,nlop,ncolt=',bimp,nlop,ncolt
566
567         IF(NCOLT.EQ.0) THEN
568            NLOP=NLOP+1
569            IF(NLOP.LE.20.OR.
570      &           (IHNT2(1).EQ.1.AND.IHNT2(3).EQ.1)) GO TO 60
571            RETURN
572         ENDIF
573 C               ********At large impact parameter, there maybe no
574 C                       interaction at all. For NN collision
575 C                       repeat the event until interaction happens
576 C
577         IF(IHPR2(3).NE.0) THEN
578            NHARD=1+INT(RANART(NSEED)*(NCOLT-1)+0.5)
579            NHARD=MIN(NHARD,NCOLT)
580            JPHARD=IPCOL(NHARD)
581            JTHARD=ITCOL(NHARD)
582 clin-6/2009 ctest off:
583 c           write(99,*) IAEVT,NHARD,NCOLT,JPHARD,JTHARD
584         ENDIF
585 C
586         IF(IHPR2(9).EQ.1) THEN
587                 NMINI=1+INT(RANART(NSEED)*(NCOLT-1)+0.5)
588                 NMINI=MIN(NMINI,NCOLT)
589                 JPMINI=IPCOL(NMINI)
590                 JTMINI=ITCOL(NMINI)
591         ENDIF
592 C                ********Specifying the location of the hard and
593 C                        minijet if they are enforced by user
594 C
595         DO 200 JP=1,IHNT2(1)
596         DO 200 JT=1,IHNT2(3)
597         IF(SCIP(JP,JT).EQ.-1.0) GO TO 200
598                 NFP(JP,11)=NFP(JP,11)+1
599                 NFT(JT,11)=NFT(JT,11)+1
600         IF(NFP(JP,5).LE.1 .AND. NFT(JT,5).GT.1) THEN
601                 NP=NP+1
602                 N01=N01+1
603         ELSE IF(NFP(JP,5).GT.1 .AND. NFT(JT,5).LE.1) THEN
604                 NT=NT+1
605                 N10=N10+1
606         ELSE IF(NFP(JP,5).LE.1 .AND. NFT(JT,5).LE.1) THEN
607                 NP=NP+1
608                 NT=NT+1
609                 N0=N0+1
610         ELSE IF(NFP(JP,5).GT.1 .AND. NFT(JT,5).GT.1) THEN
611                 N11=N11+1
612         ENDIF
613         JOUT=0
614         NFP(JP,10)=0
615         NFT(JT,10)=0
616 C*****************************************************************
617         IF(IHPR2(8).EQ.0 .AND. IHPR2(3).EQ.0) GO TO 160
618 C                ********When IHPR2(8)=0 no jets are produced
619         IF(NFP(JP,6).LT.0 .OR. NFT(JT,6).LT.0) GO TO 160
620 C                ********jets can not be produced for (JP,JT)
621 C                        because not enough energy avaible for 
622 C                                JP or JT 
623         R2=SCIP(JP,JT)
624         HINT1(18)=SJIP(JP,JT)
625         TT=ROMG(R2)*HINT1(18)/HIPR1(31)
626         TTS=HIPR1(30)*ROMG(R2)/HIPR1(31)
627         NJET=0
628
629         IF(IHPR2(3).NE.0 .AND. JP.EQ.JPHARD .AND. JT.EQ.JTHARD) THEN
630            CALL JETINI(JP,JT,1)
631            CALL HIJHRD(JP,JT,0,JFLG,0)
632            HINT1(26)=HINT1(47)
633            HINT1(27)=HINT1(48)
634            HINT1(28)=HINT1(49)
635            HINT1(29)=HINT1(50)
636            HINT1(36)=HINT1(67)
637            HINT1(37)=HINT1(68)
638            HINT1(38)=HINT1(69)
639            HINT1(39)=HINT1(70)
640 C
641            IF(ABS(HINT1(46)).GT.HIPR1(11).AND.JFLG.EQ.2) NFP(JP,7)=1
642            IF(ABS(HINT1(56)).GT.HIPR1(11).AND.JFLG.EQ.2) NFT(JT,7)=1
643            IF(MAX(ABS(HINT1(46)),ABS(HINT1(56))).GT.HIPR1(11).AND.
644      &                                JFLG.GE.3) IASG(NSG,3)=1
645            IHNT2(9)=IHNT2(14)
646            IHNT2(10)=IHNT2(15)
647            DO 105 I05=1,5
648               HINT1(20+I05)=HINT1(40+I05)
649               HINT1(30+I05)=HINT1(50+I05)
650  105           CONTINUE
651 clin-6/2009 ctest off:
652 c           write(99,*) jp,jt,IHPR2(3),HIPR1(10),njet,
653 c     1          ihnt2(9),hint1(21),hint1(22),hint1(23),
654 c     2          ihnt2(10),hint1(31),hint1(32),hint1(33)
655 c           write(99,*) ' '
656            JOUT=1
657            IF(IHPR2(8).EQ.0) GO TO 160
658            RRB1=MIN((YP(1,JP)**2+YP(2,JP)**2)/1.2**2
659      &                /REAL(IHNT2(1))**0.6666667,1.0)
660            RRB2=MIN((YT(1,JT)**2+YT(2,JT)**2)/1.2**2
661      &                /REAL(IHNT2(3))**0.6666667,1.0)
662            APHX1=HIPR1(6)*4.0/3.0*(IHNT2(1)**0.3333333-1.0)
663      &           *SQRT(1.0-RRB1)
664            APHX2=HIPR1(6)*4.0/3.0*(IHNT2(3)**0.3333333-1.0)
665      &           *SQRT(1.0-RRB2)
666            HINT1(65)=HINT1(61)-APHX1*HINT1(62)
667      &                        -APHX2*HINT1(63)+APHX1*APHX2*HINT1(64)
668            TTRIG=ROMG(R2)*HINT1(65)/HIPR1(31)
669            NJET=-1
670 C                ********subtract the trigger jet from total number
671 C                        of jet production  to be done since it has
672 C                                already been produced here
673            XR1=-ALOG(EXP(-TTRIG)+RANART(NSEED)*(1.0-EXP(-TTRIG)))
674  106           NJET=NJET+1
675            XR1=XR1-ALOG(max(RANART(NSEED),1.0e-20))
676            IF(XR1.LT.TTRIG) GO TO 106
677            XR=0.0
678  107           NJET=NJET+1
679            XR=XR-ALOG(max(RANART(NSEED),1.0e-20))
680            IF(XR.LT.TT-TTRIG) GO TO 107
681            NJET=NJET-1
682            GO TO 112
683         ENDIF
684 C                ********create a hard interaction with specified P_T
685 c                                 when IHPR2(3)>0
686         IF(IHPR2(9).EQ.1.AND.JP.EQ.JPMINI.AND.JT.EQ.JTMINI) GO TO 110
687 C                ********create at least one pair of mini jets 
688 C                        when IHPR2(9)=1
689 C
690         IF(IHPR2(8).GT.0 .AND.RNIP(JP,JT).LT.EXP(-TT)*
691      &                (1.0-EXP(-TTS))) GO TO 160
692 C                ********this is the probability for no jet production
693 110        XR=-ALOG(EXP(-TT)+RANART(NSEED)*(1.0-EXP(-TT)))
694 111        NJET=NJET+1
695         XR=XR-ALOG(max(RANART(NSEED),1.0e-20))
696         IF(XR.LT.TT) GO TO 111
697 112        NJET=MIN(NJET,IHPR2(8))
698         IF(IHPR2(8).LT.0)  NJET=ABS(IHPR2(8))
699 C                ******** Determine number of mini jet production
700 C
701         DO 150 ijet=1,NJET
702            CALL JETINI(JP,JT,0)
703            CALL HIJHRD(JP,JT,JOUT,JFLG,1)
704 C                ********JFLG=1 jets valence quarks, JFLG=2 with 
705 C                        gluon jet, JFLG=3 with q-qbar prod for
706 C                        (JP,JT). If JFLG=0 jets can not be produced 
707 C                        this time. If JFLG=-1, error occured abandon
708 C                        this event. JOUT is the total hard scat for
709 C                        (JP,JT) up to now.
710            IF(JFLG.EQ.0) GO TO 160
711            IF(JFLG.LT.0) THEN
712               IF(IHPR2(10).NE.0) WRITE(6,*) 'error occured in HIJHRD'
713               GO TO 50
714            ENDIF
715            JOUT=JOUT+1
716            IF(ABS(HINT1(46)).GT.HIPR1(11).AND.JFLG.EQ.2) NFP(JP,7)=1
717            IF(ABS(HINT1(56)).GT.HIPR1(11).AND.JFLG.EQ.2) NFT(JT,7)=1
718            IF(MAX(ABS(HINT1(46)),ABS(HINT1(56))).GT.HIPR1(11).AND.
719      &                        JFLG.GE.3) IASG(NSG,3)=1
720 C                ******** jet with PT>HIPR1(11) will be quenched
721  150        CONTINUE
722  160        CONTINUE
723
724         CALL HIJSFT(JP,JT,JOUT,IERROR)
725         IF(IERROR.NE.0) THEN
726            IF(IHPR2(10).NE.0) WRITE(6,*) 'error occured in HIJSFT'
727            GO TO 50
728         ENDIF
729 C
730 C                ********conduct soft scattering between JP and JT
731         JATT=JATT+JOUT
732 200        CONTINUE
733 c
734 c**************************
735 c
736 clin-6/2009 write out initial minijet information:
737            call minijet_out(BB)
738            if(pttrig.gt.0.and.ntrig.eq.0) goto 50
739 clin-6/2009 write out initial transverse positions of initial nucleons:
740 c           write(94,*) IAEVT,MISS,IHNT2(1),IHNT2(3)
741         DO 201 JP=1,IHNT2(1)
742 clin-6/2009:
743 c           write(94,203) YP(1,JP)+0.5*BB, YP(2,JP), JP, NFP(JP,5)
744            IF(NFP(JP,5).GT.2) THEN
745               NINP=NINP+1
746            ELSE IF(NFP(JP,5).EQ.2.OR.NFP(JP,5).EQ.1) THEN
747               NELP=NELP+1
748            ENDIF
749  201    continue
750         DO 202 JT=1,IHNT2(3)
751 clin-6/2009 target nucleon # has a minus sign for distinction from projectile:
752 c           write(94,203) YT(1,JT)-0.5*BB, YT(2,JT), -JT, NFT(JT,5)
753            IF(NFT(JT,5).GT.2) THEN
754               NINTHJ=NINTHJ+1
755            ELSE IF(NFT(JT,5).EQ.2.OR.NFT(JT,5).EQ.1) THEN
756               NELT=NELT+1
757            ENDIF
758  202    continue
759  203    format(f10.3,1x,f10.3,2(1x,I5))
760 c     
761 c*******************************
762
763
764 C********perform jet quenching for jets with PT>HIPR1(11)**********
765
766         IF((IHPR2(8).NE.0.OR.IHPR2(3).NE.0).AND.IHPR2(4).GT.0.AND.
767      &                        IHNT2(1).GT.1.AND.IHNT2(3).GT.1) THEN
768                 DO 271 I=1,IHNT2(1)
769                         IF(NFP(I,7).EQ.1) CALL QUENCH(I,1)
770 271                CONTINUE
771                 DO 272 I=1,IHNT2(3)
772                         IF(NFT(I,7).EQ.1) CALL QUENCH(I,2)
773 272                CONTINUE
774                 DO 273 ISG=1,NSG
775                         IF(IASG(ISG,3).EQ.1) CALL QUENCH(ISG,3)
776 273                CONTINUE
777         ENDIF
778
779 clin*****4/09/01-soft1, default way of treating strings:
780         if(isoft.eq.1) then
781 clin-4/16/01 allow fragmentation:
782            isflag=1
783
784 cbz1/25/99
785 c.....transfer data from HIJING to ZPC
786         NSP = IHNT2(1)
787         NST = IHNT2(3)
788         NSI = NSG
789         ISTR = 0
790         NPAR = 0
791         DO 1008 I = 1, IHNT2(1)
792            ISTR = ISTR + 1
793            DO 1007 J = 1, NPJ(I)
794 cbz1/27/99
795 c.....for now only consider gluon cascade
796               IF (KFPJ(I, J) .EQ. 21) THEN
797 cbz1/27/99end
798
799               NPAR = NPAR + 1
800               LSTRG0(NPAR) = ISTR
801               LPART0(NPAR) = J
802               ITYP0(NPAR) = KFPJ(I, J)
803 cbz6/28/99 flow1
804 clin-7/20/01 add dble or sngl to make precisions consistent
805 c              GX0(NPAR) = YP(1, I)
806               GX0(NPAR) = dble(YP(1, I) + 0.5 * BB)
807 cbz6/28/99 flow1 end
808               GY0(NPAR) = dble(YP(2, I))
809               GZ0(NPAR) = 0d0
810               FT0(NPAR) = 0d0
811               PX0(NPAR) = dble(PJPX(I, J))
812               PY0(NPAR) = dble(PJPY(I, J))
813               PZ0(NPAR) = dble(PJPZ(I, J))
814               XMASS0(NPAR) = dble(PJPM(I, J))
815 c              E0(NPAR) = dble(PJPE(I, J))
816               E0(NPAR) = dsqrt(PX0(NPAR)**2+PY0(NPAR)**2
817      1             +PZ0(NPAR)**2+XMASS0(NPAR)**2)
818 clin-7/20/01-end
819
820 cbz1/27/99
821 c.....end gluon selection
822               END IF
823 cbz1/27/99end
824  1007      CONTINUE
825  1008   CONTINUE
826         DO 1010 I = 1, IHNT2(3)
827            ISTR = ISTR + 1
828            DO 1009 J = 1, NTJ(I)
829 cbz1/27/99
830 c.....for now only consider gluon cascade
831               IF (KFTJ(I, J) .EQ. 21) THEN
832 cbz1/27/99end
833               NPAR = NPAR + 1
834               LSTRG0(NPAR) = ISTR
835               LPART0(NPAR) = J
836               ITYP0(NPAR) = KFTJ(I, J)
837 cbz6/28/99 flow1
838 clin-7/20/01 add dble or sngl to make precisions consistent
839 c              GX0(NPAR) = YT(1, I)
840               GX0(NPAR) = dble(YT(1, I) - 0.5 * BB)
841 cbz6/28/99 flow1 end
842               GY0(NPAR) = dble(YT(2, I))
843               GZ0(NPAR) = 0d0
844               FT0(NPAR) = 0d0
845               PX0(NPAR) = dble(PJTX(I, J))
846               PY0(NPAR) = dble(PJTY(I, J))
847               PZ0(NPAR) = dble(PJTZ(I, J))
848               XMASS0(NPAR) = dble(PJTM(I, J))
849 c              E0(NPAR) = dble(PJTE(I, J))
850               E0(NPAR) = dsqrt(PX0(NPAR)**2+PY0(NPAR)**2
851      1             +PZ0(NPAR)**2+XMASS0(NPAR)**2)
852
853 cbz1/27/99
854 c.....end gluon selection
855               END IF
856 cbz1/27/99end
857  1009      CONTINUE
858  1010   CONTINUE
859         DO 1012 I = 1, NSG
860            ISTR = ISTR + 1
861            DO 1011 J = 1, NJSG(I)
862 cbz1/27/99
863 c.....for now only consider gluon cascade
864               IF (K2SG(I, J) .EQ. 21) THEN
865 cbz1/27/99end
866               NPAR = NPAR + 1
867               LSTRG0(NPAR) = ISTR
868               LPART0(NPAR) = J
869               ITYP0(NPAR) = K2SG(I, J)
870 clin-7/20/01 add dble or sngl to make precisions consistent:
871               GX0(NPAR) = 0.5d0 * 
872      1             dble(YP(1, IASG(I, 1)) + YT(1, IASG(I, 2)))
873               GY0(NPAR) = 0.5d0 * 
874      2             dble(YP(2, IASG(I, 1)) + YT(2, IASG(I, 2)))
875               GZ0(NPAR) = 0d0
876               FT0(NPAR) = 0d0
877               PX0(NPAR) = dble(PXSG(I, J))
878               PY0(NPAR) = dble(PYSG(I, J))
879               PZ0(NPAR) = dble(PZSG(I, J))
880               XMASS0(NPAR) = dble(PMSG(I, J))
881 c              E0(NPAR) = dble(PESG(I, J))
882               E0(NPAR) = dsqrt(PX0(NPAR)**2+PY0(NPAR)**2
883      1             +PZ0(NPAR)**2+XMASS0(NPAR)**2)
884 cbz1/27/99
885 c.....end gluon selection
886               END IF
887 cbz1/27/99end
888  1011      CONTINUE
889  1012   CONTINUE
890         MUL = NPAR
891
892 cbz2/4/99
893         CALL HJANA1
894 cbz2/4/99end
895
896 clin-6/2009:
897         if(ioscar.eq.3) WRITE (95, *) IAEVT, mul
898 c.....call ZPC for parton cascade
899         CALL ZPCMN
900
901 c     write out parton and wounded nucleon information to ana/zpc1.mom:
902 clin-6/2009:
903 c        WRITE (14, 395) ITEST, MUL, bimp, NELP,NINP,NELT,NINTHJ
904 c        WRITE (14, 395) IAEVT, MISS, MUL, bimp, NELP,NINP,NELT,NINTHJ
905         DO 1013 I = 1, MUL
906 cc           WRITE (14, 411) PX5(I), PY5(I), PZ5(I), ITYP5(I),
907 c     &        XMASS5(I), E5(I)
908            if(dmax1(abs(GX5(I)),abs(GY5(I)),abs(GZ5(I)),abs(FT5(I)))
909      1          .lt.9999) then
910 c              write(14,210) ITYP5(I), PX5(I), PY5(I), PZ5(I), XMASS5(I),
911 c     1             GX5(I), GY5(I), GZ5(I), FT5(I)
912            else
913 c     change format for large numbers:
914 c              write(14,211) ITYP5(I), PX5(I), PY5(I), PZ5(I), XMASS5(I),
915 c     1             GX5(I), GY5(I), GZ5(I), FT5(I)
916            endif
917
918  1013   CONTINUE
919  210    format(I6,2(1x,f8.3),1x,f10.3,1x,f6.3,4(1x,f8.2))
920  211    format(I6,2(1x,f8.3),1x,f10.3,1x,f6.3,4(1x,e8.2))
921  395    format(3I8,f10.4,4I5)
922
923 clin-4/09/01:
924         itest=itest+1
925 c 411    FORMAT(1X, 3F10.3, I6, 2F10.3)
926 cbz3/19/99 end
927
928 clin-5/2009 ctest off:
929 c        call frztm(1,1)
930
931 c.....transfer data back from ZPC to HIJING
932         DO 1014 I = 1, MUL
933            IF (LSTRG1(I) .LE. NSP) THEN
934               NSTRG = LSTRG1(I)
935               NPART = LPART1(I)
936               KFPJ(NSTRG, NPART) = ITYP5(I)
937 clin-7/20/01 add dble or sngl to make precisions consistent
938               PJPX(NSTRG, NPART) = sngl(PX5(I))
939               PJPY(NSTRG, NPART) = sngl(PY5(I))
940               PJPZ(NSTRG, NPART) = sngl(PZ5(I))
941               PJPE(NSTRG, NPART) = sngl(E5(I))
942               PJPM(NSTRG, NPART) = sngl(XMASS5(I))
943            ELSE IF (LSTRG1(I) .LE. NSP + NST) THEN
944               NSTRG = LSTRG1(I) - NSP
945               NPART = LPART1(I)
946               KFTJ(NSTRG, NPART) = ITYP5(I)
947               PJTX(NSTRG, NPART) = sngl(PX5(I))
948               PJTY(NSTRG, NPART) = sngl(PY5(I))
949               PJTZ(NSTRG, NPART) = sngl(PZ5(I))
950               PJTE(NSTRG, NPART) = sngl(E5(I))
951               PJTM(NSTRG, NPART) = sngl(XMASS5(I))
952            ELSE
953               NSTRG = LSTRG1(I) - NSP - NST
954               NPART = LPART1(I)
955               K2SG(NSTRG, NPART) = ITYP5(I)
956               PXSG(NSTRG, NPART) = sngl(PX5(I))
957               PYSG(NSTRG, NPART) = sngl(PY5(I))
958               PZSG(NSTRG, NPART) = sngl(PZ5(I))
959               PESG(NSTRG, NPART) = sngl(E5(I))
960               PMSG(NSTRG, NPART) = sngl(XMASS5(I))
961            END IF
962  1014   CONTINUE
963 cbz1/25/99end
964
965 cbz2/4/99
966         CALL HJANA2
967 cbz2/4/99end
968
969 clin*****4/09/01-soft2, put q+dq+X in strings into ZPC:
970         elseif(isoft.eq.2) then
971         NSP = IHNT2(1)
972         NST = IHNT2(3)
973 clin-4/27/01:
974         NSI = NSG
975         NPAR=0
976         ISTR=0
977 C
978 clin  No fragmentation to hadrons, only on parton level, 
979 c     and transfer minijet and string data from HIJING to ZPC:
980         MSTJ(1)=0
981 clin-4/12/01 forbid soft radiation before ZPC to avoid small-mass strings,
982 c     and forbid jet order reversal before ZPC to avoid unphysical flavors:
983         IHPR2(1)=0
984         isflag=0
985
986         IF(IHPR2(20).NE.0) THEN
987            DO 320 NTP=1,2
988               DO 310 jjtp=1,IHNT2(2*NTP-1)
989                  ISTR = ISTR + 1
990 c change: do gluon kink only once: either here or in fragmentation.
991                  CALL HIJFRG(jjtp,NTP,IERROR)
992 c                 call lulist(1)
993                  if(NTP.eq.1) then
994 c 354                continue
995                     NPJ(jjtp)=MAX0(N-2,0)
996
997 clin-4/12/01:                    NPJ(jjtp)=MAX0(ipartn-2,0)
998                  else
999 c 355                continue
1000                     NTJ(jjtp)=MAX0(N-2,0)
1001 clin-4/12/01:                    NTJ(jjtp)=MAX0(ipartn-2,0)
1002                  endif
1003
1004                  do 300 ii=1,N
1005                  NPAR = NPAR + 1
1006                  LSTRG0(NPAR) = ISTR
1007                  LPART0(NPAR) = II
1008                  ITYP0(NPAR) = K(II,2)
1009                  GZ0(NPAR) = 0d0
1010                  FT0(NPAR) = 0d0
1011 clin-7/20/01 add dble or sngl to make precisions consistent
1012                  PX0(NPAR) = dble(P(II,1))
1013                  PY0(NPAR) = dble(P(II,2))
1014                  PZ0(NPAR) = dble(P(II,3))
1015                  XMASS0(NPAR) = dble(P(II,5))
1016 c                 E0(NPAR) = dble(P(II,4))
1017                  E0(NPAR) = dsqrt(PX0(NPAR)**2+PY0(NPAR)**2
1018      1                +PZ0(NPAR)**2+XMASS0(NPAR)**2)
1019                  IF (NTP .EQ. 1) THEN
1020 clin-7/20/01 add dble or sngl to make precisions consistent
1021                     GX0(NPAR) = dble(YP(1, jjtp)+0.5 * BB)
1022                     GY0(NPAR) = dble(YP(2, jjtp))
1023                     IITYP=ITYP0(NPAR)
1024                     nstrg=LSTRG0(NPAR)
1025                     if(IITYP.eq.2112.or.IITYP.eq.2212) then
1026                     elseif((IITYP.eq.1.or.IITYP.eq.2).and.
1027      1 (II.eq.1.or.II.eq.N)) then
1028                        PP(nstrg,6)=sngl(PX0(NPAR))
1029                        PP(nstrg,7)=sngl(PY0(NPAR))
1030                        PP(nstrg,14)=sngl(XMASS0(NPAR))
1031                     elseif((IITYP.eq.1103.or.IITYP.eq.2101
1032      1 .or.IITYP.eq.2103.or.IITYP.eq.2203.
1033      2 .or.IITYP.eq.3101.or.IITYP.eq.3103.
1034      3 .or.IITYP.eq.3201.or.IITYP.eq.3203.or.IITYP.eq.3303)
1035      4 .and.(II.eq.1.or.II.eq.N)) then
1036                        PP(nstrg,8)=sngl(PX0(NPAR))
1037                        PP(nstrg,9)=sngl(PY0(NPAR))
1038                        PP(nstrg,15)=sngl(XMASS0(NPAR))
1039                     else
1040                        NPART = LPART0(NPAR)-1
1041                        KFPJ(NSTRG, NPART) = ITYP0(NPAR)
1042                        PJPX(NSTRG, NPART) = sngl(PX0(NPAR))
1043                        PJPY(NSTRG, NPART) = sngl(PY0(NPAR))
1044                        PJPZ(NSTRG, NPART) = sngl(PZ0(NPAR))
1045                        PJPE(NSTRG, NPART) = sngl(E0(NPAR))
1046                        PJPM(NSTRG, NPART) = sngl(XMASS0(NPAR))
1047                     endif
1048                  ELSE
1049                     GX0(NPAR) = dble(YT(1, jjtp)-0.5 * BB)
1050                     GY0(NPAR) = dble(YT(2, jjtp))
1051                     IITYP=ITYP0(NPAR)
1052                     nstrg=LSTRG0(NPAR)-NSP
1053                     if(IITYP.eq.2112.or.IITYP.eq.2212) then
1054                     elseif((IITYP.eq.1.or.IITYP.eq.2).and.
1055      1 (II.eq.1.or.II.eq.N)) then
1056                        PT(nstrg,6)=sngl(PX0(NPAR))
1057                        PT(nstrg,7)=sngl(PY0(NPAR))
1058                        PT(nstrg,14)=sngl(XMASS0(NPAR))
1059                     elseif((IITYP.eq.1103.or.IITYP.eq.2101
1060      1 .or.IITYP.eq.2103.or.IITYP.eq.2203.
1061      2 .or.IITYP.eq.3101.or.IITYP.eq.3103.
1062      3 .or.IITYP.eq.3201.or.IITYP.eq.3203.or.IITYP.eq.3303)
1063      4 .and.(II.eq.1.or.II.eq.N)) then
1064                        PT(nstrg,8)=sngl(PX0(NPAR))
1065                        PT(nstrg,9)=sngl(PY0(NPAR))
1066                        PT(nstrg,15)=sngl(XMASS0(NPAR))
1067                     else
1068                        NPART = LPART0(NPAR)-1
1069                        KFTJ(NSTRG, NPART) = ITYP0(NPAR)
1070                        PJTX(NSTRG, NPART) = sngl(PX0(NPAR))
1071                        PJTY(NSTRG, NPART) = sngl(PY0(NPAR))
1072                        PJTZ(NSTRG, NPART) = sngl(PZ0(NPAR))
1073                        PJTE(NSTRG, NPART) = sngl(E0(NPAR))
1074                        PJTM(NSTRG, NPART) = sngl(XMASS0(NPAR))
1075                     endif
1076                  END IF
1077  300          continue
1078  310          continue
1079  320       continue
1080            DO 330 ISG=1,NSG
1081               ISTR = ISTR + 1
1082               CALL HIJFRG(ISG,3,IERROR)
1083 c              call lulist(2)
1084 c
1085               NJSG(ISG)=N
1086 c
1087               do 1001 ii=1,N
1088                  NPAR = NPAR + 1
1089                  LSTRG0(NPAR) = ISTR
1090                  LPART0(NPAR) = II
1091                  ITYP0(NPAR) = K(II,2)
1092                  GX0(NPAR)=0.5d0*
1093      1                dble(YP(1,IASG(ISG,1))+YT(1,IASG(ISG,2)))
1094                  GY0(NPAR)=0.5d0*
1095      2                dble(YP(2,IASG(ISG,1))+YT(2,IASG(ISG,2)))
1096                  GZ0(NPAR) = 0d0
1097                  FT0(NPAR) = 0d0
1098                  PX0(NPAR) = dble(P(II,1))
1099                  PY0(NPAR) = dble(P(II,2))
1100                  PZ0(NPAR) = dble(P(II,3))
1101                  XMASS0(NPAR) = dble(P(II,5))
1102 c                 E0(NPAR) = dble(P(II,4))
1103                  E0(NPAR) = dsqrt(PX0(NPAR)**2+PY0(NPAR)**2
1104      1                +PZ0(NPAR)**2+XMASS0(NPAR)**2)
1105  1001         continue
1106  330       continue
1107         endif
1108
1109         MUL = NPAR
1110 cbz2/4/99
1111         CALL HJANA1
1112 cbz2/4/99end
1113 clin-6/2009:
1114         if(ioscar.eq.3) WRITE (95, *) IAEVT, mul
1115 c.....call ZPC for parton cascade
1116         CALL ZPCMN
1117 cbz3/19/99
1118 clin-6/2009:
1119 c        WRITE (14, 395) ITEST, MUL, bimp, NELP,NINP,NELT,NINTHJ
1120         WRITE (14, 395) IAEVT, MISS, MUL, bimp, NELP,NINP,NELT,NINTHJ
1121         itest=itest+1
1122
1123         DO 1015 I = 1, MUL
1124 c           WRITE (14, 311) PX5(I), PY5(I), PZ5(I), ITYP5(I),
1125 c     &        XMASS5(I), E5(I)
1126            WRITE (14, 312) PX5(I), PY5(I), PZ5(I), ITYP5(I),
1127      &        XMASS5(I), E5(I),LSTRG1(I), LPART1(I)
1128  1015   CONTINUE
1129 c 311    FORMAT(1X, 3F10.4, I6, 2F10.4)
1130  312    FORMAT(1X, 3F10.3, I6, 2F10.3,1X,I6,1X,I3)
1131 cbz3/19/99 end
1132
1133 clin-5/2009 ctest off:
1134 c        call frztm(1,1)
1135
1136 clin-4/13/01 initialize four momenta and invariant mass of strings after ZPC:
1137         do 1004 nmom=1,5
1138            do 1002 nstrg=1,nsp
1139               PP(nstrg,nmom)=0.
1140  1002      continue
1141            do 1003 nstrg=1,nst
1142               PT(nstrg,nmom)=0.
1143  1003      continue
1144  1004   continue
1145 clin-4/13/01-end
1146
1147         DO 1005 I = 1, MUL
1148            IITYP=ITYP5(I)
1149            IF (LSTRG1(I) .LE. NSP) THEN
1150               NSTRG = LSTRG1(I)
1151 c     nucleons without interactions:
1152               if(IITYP.eq.2112.or.IITYP.eq.2212) then
1153 clin-7/20/01 add dble or sngl to make precisions consistent
1154                  PP(nstrg,1)=sngl(PX5(I))
1155                  PP(nstrg,2)=sngl(PY5(I))
1156                  PP(nstrg,3)=sngl(PZ5(I))
1157                  PP(nstrg,4)=sngl(E5(I))
1158                  PP(nstrg,5)=sngl(XMASS5(I))
1159 c     valence quark:
1160               elseif((IITYP.eq.1.or.IITYP.eq.2).and.
1161      1 (LPART1(I).eq.1.or.LPART1(I).eq.(NPJ(NSTRG)+2))) then
1162                  PP(nstrg,6)=sngl(PX5(I))
1163                  PP(nstrg,7)=sngl(PY5(I))
1164                  PP(nstrg,14)=sngl(XMASS5(I))
1165                  PP(nstrg,1)=PP(nstrg,1)+sngl(PX5(I))
1166                  PP(nstrg,2)=PP(nstrg,2)+sngl(PY5(I))
1167                  PP(nstrg,3)=PP(nstrg,3)+sngl(PZ5(I))
1168                  PP(nstrg,4)=PP(nstrg,4)+sngl(E5(I))
1169                  PP(nstrg,5)=sqrt(PP(nstrg,4)**2-PP(nstrg,1)**2
1170      1                -PP(nstrg,2)**2-PP(nstrg,3)**2)
1171 c     diquark:
1172               elseif((IITYP.eq.1103.or.IITYP.eq.2101
1173      1 .or.IITYP.eq.2103.or.IITYP.eq.2203.
1174      2 .or.IITYP.eq.3101.or.IITYP.eq.3103.
1175      3 .or.IITYP.eq.3201.or.IITYP.eq.3203.or.IITYP.eq.3303)
1176      4 .and.(LPART1(I).eq.1.or.LPART1(I).eq.(NPJ(NSTRG)+2))) then
1177                  PP(nstrg,8)=sngl(PX5(I))
1178                  PP(nstrg,9)=sngl(PY5(I))
1179                  PP(nstrg,15)=sngl(XMASS5(I))
1180                  PP(nstrg,1)=PP(nstrg,1)+sngl(PX5(I))
1181                  PP(nstrg,2)=PP(nstrg,2)+sngl(PY5(I))
1182                  PP(nstrg,3)=PP(nstrg,3)+sngl(PZ5(I))
1183                  PP(nstrg,4)=PP(nstrg,4)+sngl(E5(I))
1184                  PP(nstrg,5)=sqrt(PP(nstrg,4)**2-PP(nstrg,1)**2
1185      1                -PP(nstrg,2)**2-PP(nstrg,3)**2)
1186 c     partons in projectile or target strings:
1187               else
1188                  NPART = LPART1(I)-1
1189                  KFPJ(NSTRG, NPART) = ITYP5(I)
1190                  PJPX(NSTRG, NPART) = sngl(PX5(I))
1191                  PJPY(NSTRG, NPART) = sngl(PY5(I))
1192                  PJPZ(NSTRG, NPART) = sngl(PZ5(I))
1193                  PJPE(NSTRG, NPART) = sngl(E5(I))
1194                  PJPM(NSTRG, NPART) = sngl(XMASS5(I))
1195               endif
1196            ELSE IF (LSTRG1(I) .LE. NSP + NST) THEN
1197               NSTRG = LSTRG1(I) - NSP
1198               if(IITYP.eq.2112.or.IITYP.eq.2212) then
1199                  PT(nstrg,1)=sngl(PX5(I))
1200                  PT(nstrg,2)=sngl(PY5(I))
1201                  PT(nstrg,3)=sngl(PZ5(I))
1202                  PT(nstrg,4)=sngl(E5(I))
1203                  PT(nstrg,5)=sngl(XMASS5(I))
1204               elseif((IITYP.eq.1.or.IITYP.eq.2).and.
1205      1 (LPART1(I).eq.1.or.LPART1(I).eq.(NTJ(NSTRG)+2))) then
1206                  PT(nstrg,6)=sngl(PX5(I))
1207                  PT(nstrg,7)=sngl(PY5(I))
1208                  PT(nstrg,14)=sngl(XMASS5(I))
1209                  PT(nstrg,1)=PT(nstrg,1)+sngl(PX5(I))
1210                  PT(nstrg,2)=PT(nstrg,2)+sngl(PY5(I))
1211                  PT(nstrg,3)=PT(nstrg,3)+sngl(PZ5(I))
1212                  PT(nstrg,4)=PT(nstrg,4)+sngl(E5(I))
1213                  PT(nstrg,5)=sqrt(PT(nstrg,4)**2-PT(nstrg,1)**2
1214      1                -PT(nstrg,2)**2-PT(nstrg,3)**2)
1215               elseif((IITYP.eq.1103.or.IITYP.eq.2101
1216      1 .or.IITYP.eq.2103.or.IITYP.eq.2203.
1217      2 .or.IITYP.eq.3101.or.IITYP.eq.3103.
1218      3 .or.IITYP.eq.3201.or.IITYP.eq.3203.or.IITYP.eq.3303)
1219      4 .and.(LPART1(I).eq.1.or.LPART1(I).eq.(NTJ(NSTRG)+2))) then
1220                  PT(nstrg,8)=sngl(PX5(I))
1221                  PT(nstrg,9)=sngl(PY5(I))
1222                  PT(nstrg,15)=sngl(XMASS5(I))
1223                  PT(nstrg,1)=PT(nstrg,1)+sngl(PX5(I))
1224                  PT(nstrg,2)=PT(nstrg,2)+sngl(PY5(I))
1225                  PT(nstrg,3)=PT(nstrg,3)+sngl(PZ5(I))
1226                  PT(nstrg,4)=PT(nstrg,4)+sngl(E5(I))
1227                  PT(nstrg,5)=sqrt(PT(nstrg,4)**2-PT(nstrg,1)**2
1228      1                -PT(nstrg,2)**2-PT(nstrg,3)**2)
1229               else
1230                  NPART = LPART1(I)-1
1231                  KFTJ(NSTRG, NPART) = ITYP5(I)
1232                  PJTX(NSTRG, NPART) = sngl(PX5(I))
1233                  PJTY(NSTRG, NPART) = sngl(PY5(I))
1234                  PJTZ(NSTRG, NPART) = sngl(PZ5(I))
1235                  PJTE(NSTRG, NPART) = sngl(E5(I))
1236                  PJTM(NSTRG, NPART) = sngl(XMASS5(I))
1237               endif
1238            ELSE
1239               NSTRG = LSTRG1(I) - NSP - NST
1240               NPART = LPART1(I)
1241               K2SG(NSTRG, NPART) = ITYP5(I)
1242               PXSG(NSTRG, NPART) = sngl(PX5(I))
1243               PYSG(NSTRG, NPART) = sngl(PY5(I))
1244               PZSG(NSTRG, NPART) = sngl(PZ5(I))
1245               PESG(NSTRG, NPART) = sngl(E5(I))
1246               PMSG(NSTRG, NPART) = sngl(XMASS5(I))
1247            END IF
1248  1005   CONTINUE
1249 cbz1/25/99end
1250
1251 clin-4/09/01  turn on fragmentation with soft radiation 
1252 c     and jet order reversal to form hadrons after ZPC:
1253         MSTJ(1)=1
1254         IHPR2(1)=1
1255         isflag=1
1256 clin-4/13/01 allow small mass strings (D=1.5GeV):
1257         HIPR1(1)=0.94
1258
1259 cbz2/4/99
1260         CALL HJANA2
1261 cbz2/4/99end
1262
1263 clin-4/19/01-soft3, fragment strings, then convert hadrons to partons 
1264 c     and input to ZPC:
1265         elseif(isoft.eq.3.or.isoft.eq.4.or.isoft.eq.5) then
1266 clin-4/24/01 normal fragmentation first:
1267         isflag=0
1268
1269         IF(IHPR2(20).NE.0) THEN
1270            DO 560 ISG=1,NSG
1271                 CALL HIJFRG(ISG,3,IERROR)
1272 C
1273                 nsbst=1
1274                 IDSTR=92
1275                 IF(IHPR2(21).EQ.0) THEN
1276                    CALL LUEDIT(2)
1277                 ELSE
1278  551                   nsbst=nsbst+1
1279                    IF(K(nsbst,2).LT.91.OR.K(nsbst,2).GT.93) GO TO  551
1280                    IDSTR=K(nsbst,2)
1281                    nsbst=nsbst+1
1282                 ENDIF
1283
1284                 IF(FRAME.EQ.'LAB') THEN
1285                         CALL HBOOST
1286                 ENDIF
1287 C                ******** boost back to lab frame(if it was in)
1288 C
1289                 nsbstR=0
1290                 DO 560 I=nsbst,N
1291                    IF(K(I,2).EQ.IDSTR) THEN
1292                       nsbstR=nsbstR+1
1293                       GO TO 560
1294                    ENDIF
1295                    K(I,4)=nsbstR
1296                    NATT=NATT+1
1297                    KATT(NATT,1)=K(I,2)
1298                    KATT(NATT,2)=20
1299                    KATT(NATT,4)=K(I,1)
1300 c     from Yasushi, to avoid violation of array limits:
1301 c                   IF(K(I,3).EQ.0 .OR. K(K(I,3),2).EQ.IDSTR) THEN
1302 clin-4/2008 to avoid out-of-bound error in K():
1303 c                   IF(K(I,3).EQ.0 .OR. 
1304 c     1 (K(I,3).ne.0.and.K(K(I,3),2).EQ.IDSTR)) THEN
1305 c                      KATT(NATT,3)=0
1306                    IF(K(I,3).EQ.0) THEN
1307                       KATT(NATT,3)=0
1308                    ELSEIF(K(I,3).ne.0.and.K(K(I,3),2).EQ.IDSTR) THEN
1309                       KATT(NATT,3)=0
1310 clin-4/2008-end
1311                    ELSE
1312                       KATT(NATT,3)=NATT-I+K(I,3)+nsbstR-K(K(I,3),4)
1313                    ENDIF
1314
1315 C       ****** identify the mother particle
1316                    PATT(NATT,1)=P(I,1)
1317                    PATT(NATT,2)=P(I,2)
1318                    PATT(NATT,3)=P(I,3)
1319                    PATT(NATT,4)=P(I,4)
1320                    EATT=EATT+P(I,4)
1321                    GXAR(NATT) = 0.5 * (YP(1, IASG(ISG, 1)) +
1322      &                YT(1, IASG(ISG, 2)))
1323                    GYAR(NATT) = 0.5 * (YP(2, IASG(ISG, 1)) +
1324      &                YT(2, IASG(ISG, 2)))
1325                    GZAR(NATT) = 0.
1326                    FTAR(NATT) = 0.
1327                    ITYPAR(NATT) = K(I, 2)
1328                    PXAR(NATT) = P(I, 1)
1329                    PYAR(NATT) = P(I, 2)
1330                    PZAR(NATT) = P(I, 3)
1331                    PEAR(NATT) = P(I, 4)
1332                    XMAR(NATT) = P(I, 5)
1333 cbz11/11/98end
1334
1335  560            CONTINUE
1336 C                ********Fragment the q-qbar jets systems *****
1337 C
1338            JTP(1)=IHNT2(1)
1339            JTP(2)=IHNT2(3)
1340            DO 600 NTP=1,2
1341            DO 600 jjtp=1,JTP(NTP)
1342                 CALL HIJFRG(jjtp,NTP,IERROR)
1343 C
1344                 nsbst=1
1345                 IDSTR=92
1346                 IF(IHPR2(21).EQ.0) THEN
1347                    CALL LUEDIT(2)
1348                 ELSE
1349  581                   nsbst=nsbst+1
1350                    IF(K(nsbst,2).LT.91.OR.K(nsbst,2).GT.93) GO TO  581
1351                    IDSTR=K(nsbst,2)
1352                    nsbst=nsbst+1
1353                 ENDIF
1354                 IF(FRAME.EQ.'LAB') THEN
1355                         CALL HBOOST
1356                 ENDIF
1357 C                ******** boost back to lab frame(if it was in)
1358 C
1359                 NFTP=NFP(jjtp,5)
1360                 IF(NTP.EQ.2) NFTP=10+NFT(jjtp,5)
1361                 nsbstR=0
1362                 DO 590 I=nsbst,N
1363                    IF(K(I,2).EQ.IDSTR) THEN
1364                       nsbstR=nsbstR+1
1365                       GO TO 590
1366                    ENDIF
1367                    K(I,4)=nsbstR
1368                    NATT=NATT+1
1369                    KATT(NATT,1)=K(I,2)
1370                    KATT(NATT,2)=NFTP
1371                    KATT(NATT,4)=K(I,1)
1372 c                   IF(K(I,3).EQ.0 .OR. K(K(I,3),2).EQ.IDSTR) THEN
1373 clin-4/2008
1374 c                   IF(K(I,3).EQ.0 .OR.
1375 c     1 (K(I,3).ne.0.and.K(K(I,3),2).EQ.IDSTR)) THEN
1376 c                      KATT(NATT,3)=0
1377                    IF(K(I,3).EQ.0) THEN
1378                       KATT(NATT,3)=0
1379                    ELSEIF(K(I,3).ne.0.and.K(K(I,3),2).EQ.IDSTR) THEN
1380                       KATT(NATT,3)=0
1381 clin-4/2008-end
1382                    ELSE
1383                       KATT(NATT,3)=NATT-I+K(I,3)+nsbstR-K(K(I,3),4)
1384                    ENDIF
1385
1386 C       ****** identify the mother particle
1387                    PATT(NATT,1)=P(I,1)
1388                    PATT(NATT,2)=P(I,2)
1389                    PATT(NATT,3)=P(I,3)
1390                    PATT(NATT,4)=P(I,4)
1391                    EATT=EATT+P(I,4)
1392                    IF (NTP .EQ. 1) THEN
1393                       GXAR(NATT) = YP(1, jjtp)+0.5 * BB
1394                       GYAR(NATT) = YP(2, jjtp)
1395                    ELSE
1396                       GXAR(NATT) = YT(1, jjtp)-0.5 * BB
1397                       GYAR(NATT) = YT(2, jjtp)
1398                    END IF
1399                    GZAR(NATT) = 0.
1400                    FTAR(NATT) = 0.
1401                    ITYPAR(NATT) = K(I, 2)
1402                    PXAR(NATT) = P(I, 1)
1403                    PYAR(NATT) = P(I, 2)
1404                    PZAR(NATT) = P(I, 3)
1405                    PEAR(NATT) = P(I, 4)
1406                    XMAR(NATT) = P(I, 5)
1407 cbz11/11/98end
1408
1409  590                CONTINUE 
1410  600           CONTINUE
1411 C     ********Fragment the q-qq related string systems
1412         ENDIF
1413 clin-4/2008 check for zero NDR value:
1414         if(NDR.ge.1) then
1415 c
1416         DO 650 I=1,NDR
1417                 NATT=NATT+1
1418                 KATT(NATT,1)=KFDR(I)
1419                 KATT(NATT,2)=40
1420                 KATT(NATT,3)=0
1421                 PATT(NATT,1)=PDR(I,1)
1422                 PATT(NATT,2)=PDR(I,2)
1423                 PATT(NATT,3)=PDR(I,3)
1424                 PATT(NATT,4)=PDR(I,4)
1425                 EATT=EATT+PDR(I,4)
1426 clin-11/11/03     set direct photons positions and time at formation:
1427                 GXAR(NATT) = rtdr(I,1)
1428                 GYAR(NATT) = rtdr(I,2)
1429                 GZAR(NATT) = 0.
1430                 FTAR(NATT) = 0.
1431                 ITYPAR(NATT) =KATT(NATT,1) 
1432                 PXAR(NATT) = PATT(NATT,1)
1433                 PYAR(NATT) = PATT(NATT,2)
1434                 PZAR(NATT) = PATT(NATT,3)
1435                 PEAR(NATT) = PATT(NATT,4)
1436                 XMAR(NATT) = PDR(I,5)
1437  650        CONTINUE
1438 clin-4/2008:
1439          endif
1440 clin-6/2009 ctest on:
1441          call embedHighPt
1442 c
1443         CALL HJANA1
1444
1445 clin-4/19/01 convert hadrons to partons for ZPC (with GX0 given):
1446         call htop
1447
1448 clin-7/03/01 move up, used in zpstrg (otherwise not set and incorrect):
1449         nsp=0
1450         nst=0
1451         nsg=natt
1452         NSI=NSG
1453 clin-7/03/01-end
1454
1455 clin-6/2009:
1456         if(ioscar.eq.3) WRITE (95, *) IAEVT, mul
1457 c.....call ZPC for parton cascade
1458         CALL ZPCMN
1459 clin-6/2009:
1460 c        WRITE (14, 395) ITEST, MUL, bimp, NELP,NINP,NELT,NINTHJ
1461         WRITE (14, 395) IAEVT, MISS, MUL, bimp, NELP,NINP,NELT,NINTHJ
1462         itest=itest+1
1463
1464         DO 1016 I = 1, MUL
1465 c           WRITE (14, 511) PX5(I), PY5(I), PZ5(I), ITYP5(I),
1466 c     &        XMASS5(I), E5(I)
1467            WRITE (14, 512) ITYP5(I), PX5(I), PY5(I), PZ5(I), 
1468      &        XMASS5(I), LSTRG1(I), LPART1(I), FT5(I)
1469
1470  1016   CONTINUE
1471 c 511    FORMAT(1X, 3F10.4, I6, 2F10.4)
1472  512    FORMAT(I6,4(1X,F10.3),1X,I6,1X,I3,1X,F10.3)
1473 c 513    FORMAT(1X, 4F10.4)
1474
1475 clin-5/2009 ctest off:
1476 c        call frztm(1,1)
1477
1478 clin  save data after ZPC for fragmentation purpose:
1479 c.....transfer data back from ZPC to HIJING
1480         DO 1018 I = 1, MAXSTR
1481            DO 1017 J = 1, 3
1482               K1SGS(I, J) = 0
1483               K2SGS(I, J) = 0
1484               PXSGS(I, J) = 0d0
1485               PYSGS(I, J) = 0d0
1486               PZSGS(I, J) = 0d0
1487               PESGS(I, J) = 0d0
1488               PMSGS(I, J) = 0d0
1489               GXSGS(I, J) = 0d0
1490               GYSGS(I, J) = 0d0
1491               GZSGS(I, J) = 0d0
1492               FTSGS(I, J) = 0d0
1493  1017      CONTINUE
1494  1018   CONTINUE
1495         DO 1019 I = 1, MUL
1496            IITYP=ITYP5(I)
1497            NSTRG = LSTRG1(I)
1498            NPART = LPART1(I)
1499            K2SGS(NSTRG, NPART) = ITYP5(I)
1500            PXSGS(NSTRG, NPART) = PX5(I)
1501            PYSGS(NSTRG, NPART) = PY5(I)
1502            PZSGS(NSTRG, NPART) = PZ5(I)
1503            PMSGS(NSTRG, NPART) = XMASS5(I)
1504 clin-7/20/01 E5(I) does no include the finite parton mass XMASS5(I), 
1505 c     so define it anew:
1506 c           PESGS(NSTRG, NPART) = E5(I)
1507 c           if(abs(PZ5(i)/E5(i)).gt.0.9999999d0) 
1508 c     1          write(91,*) 'a',PX5(i),PY5(i),XMASS5(i),PZ5(i),E5(i)
1509            E5(I)=dsqrt(PX5(I)**2+PY5(I)**2+PZ5(I)**2+XMASS5(I)**2)
1510            PESGS(NSTRG, NPART) = E5(I)
1511 c           if(abs(PZ5(i)/E5(i)).gt.0.9999999d0) 
1512 c     1          write(91,*) 'b: new E5(I)=',E5(i)
1513 clin-7/20/01-end
1514            GXSGS(NSTRG, NPART) = GX5(I)
1515            GYSGS(NSTRG, NPART) = GY5(I)
1516            GZSGS(NSTRG, NPART) = GZ5(I)
1517            FTSGS(NSTRG, NPART) = FT5(I)
1518  1019   CONTINUE
1519         CALL HJANA2
1520
1521 clin-4/19/01-end
1522
1523         endif
1524 clin-4/09/01-end
1525
1526 C
1527 C**************fragment all the string systems in the following*****
1528 C
1529 C********nsbst is where particle information starts
1530 C********nsbstR+1 is the number of strings in fragmentation
1531 C********the number of strings before a line is stored in K(I,4)
1532 C********IDSTR is id number of the string system (91,92 or 93)
1533 C
1534 clin-4/30/01 convert partons to hadrons after ZPC:
1535         if(isoft.eq.3.or.isoft.eq.4.or.isoft.eq.5) then
1536            NATT=0
1537            EATT=0.
1538            call ptoh
1539            do 1006 I=1,nnozpc
1540               NATT=NATT+1
1541               KATT(NATT,1)=ITYPN(I)
1542               PATT(NATT,1)=PXN(I)
1543               PATT(NATT,2)=PYN(I)
1544               PATT(NATT,3)=PZN(I)
1545               PATT(NATT,4)=EEN(I)
1546               EATT=EATT+EEN(I)
1547               GXAR(NATT)=GXN(I)
1548               GYAR(NATT)=GYN(I)
1549               GZAR(NATT)=GZN(I)
1550               FTAR(NATT)=FTN(I)
1551               ITYPAR(NATT)=ITYPN(I)
1552               PXAR(NATT)=PXN(I)
1553               PYAR(NATT)=PYN(I)
1554               PZAR(NATT)=PZN(I)
1555               PEAR(NATT)=EEN(I)
1556               XMAR(NATT)=XMN(I)
1557  1006      continue
1558            goto 565
1559         endif
1560 clin-4/30/01-end        
1561         IF(IHPR2(20).NE.0) THEN
1562            DO 360 ISG=1,NSG
1563                 CALL HIJFRG(ISG,3,IERROR)
1564                 IF(MSTU(24).NE.0 .OR.IERROR.GT.0) THEN
1565                    MSTU(24)=0
1566                    MSTU(28)=0
1567                    IF(IHPR2(10).NE.0) THEN
1568 c                      call lulist(2)
1569                       WRITE(6,*) 'error occured ISG, repeat the event'
1570                   write(6,*) ISG
1571
1572                    ENDIF
1573                    GO TO 50
1574                 ENDIF
1575 C                        ********Check errors
1576 C
1577                 nsbst=1
1578                 IDSTR=92
1579                 IF(IHPR2(21).EQ.0) THEN
1580                    CALL LUEDIT(2)
1581                 ELSE
1582 351                   nsbst=nsbst+1
1583                    IF(K(nsbst,2).LT.91.OR.K(nsbst,2).GT.93) GO TO  351
1584                    IDSTR=K(nsbst,2)
1585                    nsbst=nsbst+1
1586                 ENDIF
1587 C
1588                 IF(FRAME.EQ.'LAB') THEN
1589                         CALL HBOOST
1590                 ENDIF
1591 C                ******** boost back to lab frame(if it was in)
1592 C
1593                 nsbstR=0
1594                 DO 360 I=nsbst,N
1595                    IF(K(I,2).EQ.IDSTR) THEN
1596                       nsbstR=nsbstR+1
1597                       GO TO 360
1598                    ENDIF
1599                    K(I,4)=nsbstR
1600                    NATT=NATT+1
1601                    KATT(NATT,1)=K(I,2)
1602                    KATT(NATT,2)=20
1603                    KATT(NATT,4)=K(I,1)
1604 c                   IF(K(I,3).EQ.0 .OR. K(K(I,3),2).EQ.IDSTR) THEN
1605 clin-4/2008:
1606 c                   IF(K(I,3).EQ.0 .OR. 
1607 c     1 (K(I,3).ne.0.and.K(K(I,3),2).EQ.IDSTR)) THEN
1608 c                      KATT(NATT,3)=0
1609                    IF(K(I,3).EQ.0) THEN
1610                       KATT(NATT,3)=0
1611                    ELSEIF(K(I,3).ne.0.and.K(K(I,3),2).EQ.IDSTR) THEN
1612                       KATT(NATT,3)=0
1613 clin-4/2008-end
1614                    ELSE
1615                       KATT(NATT,3)=NATT-I+K(I,3)+nsbstR-K(K(I,3),4)
1616                    ENDIF
1617
1618 C       ****** identify the mother particle
1619                    PATT(NATT,1)=P(I,1)
1620                    PATT(NATT,2)=P(I,2)
1621                    PATT(NATT,3)=P(I,3)
1622                    PATT(NATT,4)=P(I,4)
1623                    EATT=EATT+P(I,4)
1624
1625 cbz11/11/98
1626 cbz1/25/99
1627 c                   GXAR(NATT) = 0.5 * (YP(1, IASG(ISG, 1)) +
1628 c     &                YT(1, IASG(ISG, 2)))
1629 c                   GYAR(NATT) = 0.5 * (YP(2, IASG(ISG, 1)) +
1630 c     &                YT(2, IASG(ISG, 2)))
1631                    LSG = NSP + NST + ISG
1632                    GXAR(NATT) = sngl(ZT1(LSG))
1633                    GYAR(NATT) = sngl(ZT2(LSG))
1634                    GZAR(NATT) = sngl(ZT3(LSG))
1635                    FTAR(NATT) = sngl(ATAUI(LSG))
1636 cbz1/25/99end
1637                    ITYPAR(NATT) = K(I, 2)
1638                    PXAR(NATT) = P(I, 1)
1639                    PYAR(NATT) = P(I, 2)
1640                    PZAR(NATT) = P(I, 3)
1641                    PEAR(NATT) = P(I, 4)
1642                    XMAR(NATT) = P(I, 5)
1643 cbz11/11/98end
1644
1645 360           CONTINUE
1646 C                ********Fragment the q-qbar jets systems *****
1647 C
1648            JTP(1)=IHNT2(1)
1649            JTP(2)=IHNT2(3)
1650            DO 400 NTP=1,2
1651            DO 400 jjtp=1,JTP(NTP)
1652                 CALL HIJFRG(jjtp,NTP,IERROR)
1653                 IF(MSTU(24).NE.0 .OR. IERROR.GT.0) THEN
1654                    MSTU(24)=0
1655                    MSTU(28)=0
1656                    IF(IHPR2(10).NE.0) THEN
1657 c                  call lulist(2)
1658                   WRITE(6,*) 'error occured P&T, repeat the event'
1659                   WRITE(6,*) NTP,jjtp
1660 clin-6/2009 when this happens, the event will be repeated, 
1661 c     and another record for the same event number will be written into
1662 c     zpc.dat, zpc.res, minijet-initial-beforePropagation.dat,
1663 c     parton-initial-afterPropagation.dat, parton-after-coalescence.dat, 
1664 c     and parton-collisionsHistory.dat. 
1665                    ENDIF
1666                    GO TO 50
1667                 ENDIF
1668 C                        ********check errors
1669 C
1670                 nsbst=1
1671                 IDSTR=92
1672                 IF(IHPR2(21).EQ.0) THEN
1673                    CALL LUEDIT(2)
1674                 ELSE
1675 381                   nsbst=nsbst+1
1676                    IF(K(nsbst,2).LT.91.OR.K(nsbst,2).GT.93) GO TO  381
1677                    IDSTR=K(nsbst,2)
1678                    nsbst=nsbst+1
1679                 ENDIF
1680                 IF(FRAME.EQ.'LAB') THEN
1681                         CALL HBOOST
1682                 ENDIF
1683 C                ******** boost back to lab frame(if it was in)
1684 C
1685                 NFTP=NFP(jjtp,5)
1686                 IF(NTP.EQ.2) NFTP=10+NFT(jjtp,5)
1687                 nsbstR=0
1688                 DO 390 I=nsbst,N
1689                    IF(K(I,2).EQ.IDSTR) THEN
1690                       nsbstR=nsbstR+1
1691                       GO TO 390
1692                    ENDIF
1693                    K(I,4)=nsbstR
1694                    NATT=NATT+1
1695                    KATT(NATT,1)=K(I,2)
1696                    KATT(NATT,2)=NFTP
1697                    KATT(NATT,4)=K(I,1)
1698 c                   IF(K(I,3).EQ.0 .OR. K(K(I,3),2).EQ.IDSTR) THEN
1699 clin-4/2008:
1700 c                   IF(K(I,3).EQ.0 .OR. 
1701 c     1 (K(I,3).ne.0.and.K(K(I,3),2).EQ.IDSTR)) THEN
1702 c                      KATT(NATT,3)=0
1703                    IF(K(I,3).EQ.0) THEN
1704                       KATT(NATT,3)=0
1705                    ELSEIF(K(I,3).ne.0.and.K(K(I,3),2).EQ.IDSTR) THEN
1706                       KATT(NATT,3)=0
1707 clin-4/2008-end
1708                    ELSE
1709                       KATT(NATT,3)=NATT-I+K(I,3)+nsbstR-K(K(I,3),4)
1710                    ENDIF
1711 C       ****** identify the mother particle
1712                    PATT(NATT,1)=P(I,1)
1713                    PATT(NATT,2)=P(I,2)
1714                    PATT(NATT,3)=P(I,3)
1715                    PATT(NATT,4)=P(I,4)
1716                    EATT=EATT+P(I,4)
1717 cbz11/11/98
1718 cbz1/25/99
1719 c                   IF (NTP .EQ. 1) THEN
1720 c                      GXAR(NATT) = YP(1, jjtp)
1721 c                   ELSE
1722 c                      GXAR(NATT) = YT(1, jjtp)
1723 c                   END IF
1724 c                   IF (NTP .EQ. 1) THEN
1725 c                      GYAR(NATT) = YP(2, jjtp)
1726 c                   ELSE
1727 c                      GYAR(NATT) = YT(2, jjtp)
1728 c                   END IF
1729                    IF (NTP .EQ. 1) THEN
1730                       LSG = jjtp
1731                    ELSE
1732                       LSG = jjtp + NSP
1733                    END IF
1734                    GXAR(NATT) = sngl(ZT1(LSG))
1735                    GYAR(NATT) = sngl(ZT2(LSG))
1736                    GZAR(NATT) = sngl(ZT3(LSG))
1737                    FTAR(NATT) = sngl(ATAUI(LSG))
1738 cbz1/25/99end
1739                    ITYPAR(NATT) = K(I, 2)
1740                    PXAR(NATT) = P(I, 1)
1741                    PYAR(NATT) = P(I, 2)
1742                    PZAR(NATT) = P(I, 3)
1743                    PEAR(NATT) = P(I, 4)
1744                    XMAR(NATT) = P(I, 5)
1745 cbz11/11/98end
1746
1747 390                CONTINUE 
1748 400           CONTINUE
1749 C     ********Fragment the q-qq related string systems
1750         ENDIF
1751
1752         DO 450 I=1,NDR
1753            NATT=NATT+1
1754            KATT(NATT,1)=KFDR(I)
1755            KATT(NATT,2)=40
1756            KATT(NATT,3)=0
1757            PATT(NATT,1)=PDR(I,1)
1758            PATT(NATT,2)=PDR(I,2)
1759            PATT(NATT,3)=PDR(I,3)
1760            PATT(NATT,4)=PDR(I,4)
1761            EATT=EATT+PDR(I,4)
1762 clin-11/11/03     set direct photons positions and time at formation:
1763            GXAR(NATT) = rtdr(I,1)
1764            GYAR(NATT) = rtdr(I,2)
1765            GZAR(NATT) = 0.
1766            FTAR(NATT) = 0.
1767            ITYPAR(NATT) =KATT(NATT,1) 
1768            PXAR(NATT) = PATT(NATT,1)
1769            PYAR(NATT) = PATT(NATT,2)
1770            PZAR(NATT) = PATT(NATT,3)
1771            PEAR(NATT) = PATT(NATT,4)
1772            XMAR(NATT) = PDR(I,5)
1773  450    CONTINUE
1774
1775 C                        ********store the direct-produced particles
1776 C
1777
1778 clin-4/19/01 soft3:
1779  565    continue
1780
1781         DENGY=EATT/(IHNT2(1)*HINT1(6)+IHNT2(3)*HINT1(7))-1.0
1782         IF(ABS(DENGY).GT.HIPR1(43).AND.IHPR2(20).NE.0
1783      &     .AND.IHPR2(21).EQ.0) THEN
1784          IF(IHPR2(10).NE.0) 
1785      &        WRITE(6,*) 'Energy not conserved, repeat the event'
1786 c                call lulist(1)
1787          write(6,*) 'violated:EATT,NATT,B=',EATT,NATT,bimp
1788          GO TO 50
1789         ENDIF
1790 c        write(6,*) 'satisfied:EATT,NATT,B=',EATT,NATT,bimp
1791 c        write(6,*) ' '
1792
1793         RETURN
1794         END
1795 C
1796 C
1797 C
1798         SUBROUTINE HIJSET(EFRM,FRAME,PROJ,TARG,IAP,IZP,IAT,IZT)
1799         CHARACTER FRAME*4,PROJ*4,TARG*4,EFRAME*4
1800         DOUBLE PRECISION  DD1,DD2,DD3,DD4
1801         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
1802 cc      SAVE /HSTRNG/
1803         COMMON/hjcrdn/YP(3,300),YT(3,300)
1804 cc      SAVE /hjcrdn/
1805         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
1806 cc      SAVE /HPARNT/
1807         COMMON/HIJDAT/HIDAT0(10,10),HIDAT(10)
1808 cc      SAVE /HIJDAT/
1809         COMMON/LUDAT1A/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
1810 cc      SAVE /LUDAT1A/
1811         EXTERNAL FNKICK,FNKC2,FNSTRU,FNSTRM,FNSTRS
1812         SAVE   
1813
1814         CALL TITLE
1815         IHNT2(1)=IAP
1816         IHNT2(2)=IZP
1817         IHNT2(3)=IAT
1818         IHNT2(4)=IZT
1819         IHNT2(5)=0
1820         IHNT2(6)=0
1821 C
1822         HINT1(8)=MAX(ULMASS(2112),ULMASS(2212))
1823         HINT1(9)=HINT1(8)
1824 C
1825         IF(PROJ.NE.'A') THEN
1826                 IF(PROJ.EQ.'P') THEN
1827                     IHNT2(5)=2212
1828                 ELSE IF(PROJ.EQ.'PBAR') THEN 
1829                     IHNT2(5)=-2212
1830                 ELSE IF(PROJ.EQ.'PI+') THEN
1831                     IHNT2(5)=211
1832                 ELSE IF(PROJ.EQ.'PI-') THEN
1833                     IHNT2(5)=-211
1834                 ELSE IF(PROJ.EQ.'K+') THEN
1835                     IHNT2(5)=321
1836                 ELSE IF(PROJ.EQ.'K-') THEN
1837                     IHNT2(5)=-321
1838                 ELSE IF(PROJ.EQ.'N') THEN
1839                     IHNT2(5)=2112
1840                 ELSE IF(PROJ.EQ.'NBAR') THEN
1841                     IHNT2(5)=-2112
1842                 ELSE
1843                     WRITE(6,*) PROJ, 'wrong or unavailable proj name'
1844                     STOP
1845                 ENDIF
1846                 HINT1(8)=ULMASS(IHNT2(5))
1847         ENDIF
1848         IF(TARG.NE.'A') THEN
1849                 IF(TARG.EQ.'P') THEN
1850                     IHNT2(6)=2212
1851                 ELSE IF(TARG.EQ.'PBAR') THEN 
1852                     IHNT2(6)=-2212
1853                 ELSE IF(TARG.EQ.'PI+') THEN
1854                     IHNT2(6)=211
1855                 ELSE IF(TARG.EQ.'PI-') THEN
1856                     IHNT2(6)=-211
1857                 ELSE IF(TARG.EQ.'K+') THEN
1858                     IHNT2(6)=321
1859                 ELSE IF(TARG.EQ.'K-') THEN
1860                     IHNT2(6)=-321
1861                 ELSE IF(TARG.EQ.'N') THEN
1862                     IHNT2(6)=2112
1863                 ELSE IF(TARG.EQ.'NBAR') THEN
1864                     IHNT2(6)=-2112
1865                 ELSE
1866                     WRITE(6,*) TARG,'wrong or unavailable targ name'
1867                     STOP
1868                 ENDIF
1869                 HINT1(9)=ULMASS(IHNT2(6))
1870         ENDIF
1871
1872 C...Switch off decay of pi0, K0S, Lambda, Sigma+-, Xi0-, Omega-.
1873         IF(IHPR2(12).GT.0) THEN
1874         CALL LUGIVE('MDCY(C221,1)=0')
1875 clin-11/07/00 no K* decays:
1876         CALL LUGIVE('MDCY(C313,1)=0')
1877         CALL LUGIVE('MDCY(C-313,1)=0')
1878         CALL LUGIVE('MDCY(C323,1)=0')
1879         CALL LUGIVE('MDCY(C-323,1)=0')
1880 clin-1/04/01 no K0 and K0bar decays so K0L and K0S do not appear,
1881 c     this way the K/Kbar difference is accounted for exactly:
1882         CALL LUGIVE('MDCY(C311,1)=0')
1883         CALL LUGIVE('MDCY(C-311,1)=0')
1884 clin-11/08/00 no Delta decays:
1885         CALL LUGIVE('MDCY(C1114,1)=0')
1886         CALL LUGIVE('MDCY(C2114,1)=0')
1887         CALL LUGIVE('MDCY(C2214,1)=0')
1888         CALL LUGIVE('MDCY(C2224,1)=0')
1889         CALL LUGIVE('MDCY(C-1114,1)=0')
1890         CALL LUGIVE('MDCY(C-2114,1)=0')
1891         CALL LUGIVE('MDCY(C-2214,1)=0')
1892         CALL LUGIVE('MDCY(C-2224,1)=0')
1893 clin-11/07/00-end
1894 cbz12/4/98
1895         CALL LUGIVE('MDCY(C213,1)=0')
1896         CALL LUGIVE('MDCY(C-213,1)=0')
1897         CALL LUGIVE('MDCY(C113,1)=0')
1898         CALL LUGIVE('MDCY(C223,1)=0')
1899         CALL LUGIVE('MDCY(C333,1)=0')
1900 cbz12/4/98end
1901         CALL LUGIVE('MDCY(C111,1)=0')
1902         CALL LUGIVE('MDCY(C310,1)=0')
1903         CALL LUGIVE('MDCY(C411,1)=0;MDCY(C-411,1)=0')
1904         CALL LUGIVE('MDCY(C421,1)=0;MDCY(C-421,1)=0')
1905         CALL LUGIVE('MDCY(C431,1)=0;MDCY(C-431,1)=0')
1906         CALL LUGIVE('MDCY(C511,1)=0;MDCY(C-511,1)=0')
1907         CALL LUGIVE('MDCY(C521,1)=0;MDCY(C-521,1)=0')
1908         CALL LUGIVE('MDCY(C531,1)=0;MDCY(C-531,1)=0')
1909         CALL LUGIVE('MDCY(C3122,1)=0;MDCY(C-3122,1)=0')
1910         CALL LUGIVE('MDCY(C3112,1)=0;MDCY(C-3112,1)=0')
1911         CALL LUGIVE('MDCY(C3212,1)=0;MDCY(C-3212,1)=0')
1912         CALL LUGIVE('MDCY(C3222,1)=0;MDCY(C-3222,1)=0')
1913         CALL LUGIVE('MDCY(C3312,1)=0;MDCY(C-3312,1)=0')
1914         CALL LUGIVE('MDCY(C3322,1)=0;MDCY(C-3322,1)=0')
1915         CALL LUGIVE('MDCY(C3334,1)=0;MDCY(C-3334,1)=0')
1916         ENDIF
1917         MSTU(12)=0
1918         MSTU(21)=1
1919         IF(IHPR2(10).EQ.0) THEN
1920                 MSTU(22)=0
1921                 MSTU(25)=0
1922                 MSTU(26)=0
1923         ENDIF
1924
1925 clin    parj(41) and (42) are a, b parameters in Lund, read from input.ampt:
1926 c        PARJ(41)=HIPR1(3)
1927 c        PARJ(42)=HIPR1(4)
1928 c        PARJ(41)=2.2
1929 c        PARJ(42)=0.5
1930
1931 clin  2 popcorn parameters read from input.ampt:
1932 c        IHPR2(11) = 3
1933 c        PARJ(5) = 0.5
1934         MSTJ(12)=IHPR2(11)
1935
1936 clin  parj(21) gives the mean gaussian width for hadron Pt:
1937         PARJ(21)=HIPR1(2)
1938 clin  parj(2) is gamma_s=P(s)/P(u), kappa propto 1/b/(2+a) assumed.
1939         rkp=HIPR1(4)*(2+HIPR1(3))/PARJ(42)/(2+PARJ(41))
1940         PARJ(2)=PARJ(2)**(1./rkp)
1941         PARJ(21)=PARJ(21)*sqrt(rkp)
1942 clin-10/31/00 update when string tension is changed:
1943         HIPR1(2)=PARJ(21)
1944
1945 C                        ******** set up for jetset
1946         IF(FRAME.EQ.'LAB') THEN
1947            DD1=dble(EFRM)
1948            DD2=dble(HINT1(8))
1949            DD3=dble(HINT1(9))
1950            HINT1(1)=SQRT(HINT1(8)**2+2.0*HINT1(9)*EFRM+HINT1(9)**2)
1951            DD4=DSQRT(DD1**2-DD2**2)/(DD1+DD3)
1952            HINT1(2)=sngl(DD4)
1953            HINT1(3)=0.5*sngl(DLOG((1.D0+DD4)/(1.D0-DD4)))
1954            DD4=DSQRT(DD1**2-DD2**2)/DD1
1955            HINT1(4)=0.5*sngl(DLOG((1.D0+DD4)/(1.D0-DD4)))
1956            HINT1(5)=0.0
1957            HINT1(6)=EFRM
1958            HINT1(7)=HINT1(9)
1959         ELSE IF(FRAME.EQ.'CMS') THEN
1960            HINT1(1)=EFRM
1961            HINT1(2)=0.0
1962            HINT1(3)=0.0
1963            DD1=dble(HINT1(1))
1964            DD2=dble(HINT1(8))
1965            DD3=dble(HINT1(9))
1966            DD4=DSQRT(1.D0-4.D0*DD2**2/DD1**2)
1967            HINT1(4)=0.5*sngl(DLOG((1.D0+DD4)/(1.D0-DD4)))
1968            DD4=DSQRT(1.D0-4.D0*DD3**2/DD1**2)
1969            HINT1(5)=-0.5*sngl(DLOG((1.D0+DD4)/(1.D0-DD4)))
1970            HINT1(6)=HINT1(1)/2.0
1971            HINT1(7)=HINT1(1)/2.0
1972         ENDIF
1973 C                ********define Lorentz transform to lab frame
1974 c
1975 C                ********calculate the cross sections involved with
1976 C                        nucleon collisions.
1977         IF(IHNT2(1).GT.1) THEN
1978                 CALL HIJWDS(IHNT2(1),1,RMAX)
1979                 HIPR1(34)=RMAX
1980 C                        ********set up Wood-Sax distr for proj.
1981         ENDIF
1982         IF(IHNT2(3).GT.1) THEN
1983                 CALL HIJWDS(IHNT2(3),2,RMAX)
1984                 HIPR1(35)=RMAX
1985 C                        ********set up Wood-Sax distr for  targ.
1986         ENDIF
1987 C
1988 C
1989         I=0
1990 20        I=I+1
1991         IF(I.EQ.10) GO TO 30
1992         IF(HIDAT0(10,I).LE.HINT1(1)) GO TO 20
1993 30        IF(I.EQ.1) I=2
1994         DO 40 J=1,9
1995            HIDAT(J)=HIDAT0(J,I-1)+(HIDAT0(J,I)-HIDAT0(J,I-1))
1996      &          *(HINT1(1)-HIDAT0(10,I-1))/(HIDAT0(10,I)-HIDAT0(10,I-1))
1997 40        CONTINUE
1998         HIPR1(31)=HIDAT(5)
1999         HIPR1(30)=2.0*HIDAT(5)
2000 C
2001 C
2002         CALL HIJCRS
2003 C
2004         IF(IHPR2(5).NE.0) THEN
2005                 CALL HIFUN(3,0.0,36.0,FNKICK)
2006 C                ********booking for generating pt**2 for pt kick
2007         ENDIF
2008         CALL HIFUN(7,0.0,6.0,FNKC2)
2009         CALL HIFUN(4,0.0,1.0,FNSTRU)
2010         CALL HIFUN(5,0.0,1.0,FNSTRM)
2011         CALL HIFUN(6,0.0,1.0,FNSTRS)
2012 C                ********booking for x distribution of valence quarks
2013         EFRAME='Ecm'
2014         IF(FRAME.EQ.'LAB') EFRAME='Elab'
2015         WRITE(6,100) EFRAME,EFRM,PROJ,IHNT2(1),IHNT2(2),
2016      &               TARG,IHNT2(3),IHNT2(4) 
2017 100        FORMAT(
2018      &        10X,'**************************************************'/
2019      &        10X,'*',48X,'*'/
2020      &        10X,'*         HIJING has been initialized at         *'/
2021      &        10X,'*',13X,A4,'= ',F10.2,' GeV/n',13X,'*'/
2022      &        10X,'*',48X,'*'/
2023      &        10X,'*',8X,'for ',
2024      &        A4,'(',I3,',',I3,')',' + ',A4,'(',I3,',',I3,')',7X,'*'/
2025      &        10X,'**************************************************')
2026         RETURN
2027         END
2028 C
2029 C
2030 C
2031         FUNCTION FNKICK(X)
2032         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
2033 cc      SAVE /HPARNT/
2034         SAVE   
2035         FNKICK=1.0/(X+HIPR1(19)**2)/(X+HIPR1(20)**2)
2036      &                /(1+EXP((SQRT(X)-HIPR1(20))/0.4))
2037         RETURN
2038         END
2039 C
2040 C
2041         FUNCTION FNKC2(X)
2042         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
2043 cc      SAVE /HPARNT/
2044         SAVE   
2045         FNKC2=X*EXP(-2.0*X/HIPR1(42))
2046         RETURN
2047         END
2048 C
2049 C
2050 C
2051         FUNCTION FNSTRU(X)
2052         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
2053 cc      SAVE /HPARNT/
2054         SAVE   
2055         FNSTRU=(1.0-X)**HIPR1(44)/
2056      &                (X**2+HIPR1(45)**2/HINT1(1)**2)**HIPR1(46)
2057         RETURN
2058         END
2059 C
2060 C
2061 C
2062         FUNCTION FNSTRM(X)
2063         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
2064 cc      SAVE /HPARNT/
2065         SAVE   
2066         FNSTRM=1.0/((1.0-X)**2+HIPR1(45)**2/HINT1(1)**2)**HIPR1(46)
2067      &          /(X**2+HIPR1(45)**2/HINT1(1)**2)**HIPR1(46)
2068         RETURN
2069         END
2070 C
2071 C
2072         FUNCTION FNSTRS(X)
2073         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
2074 cc      SAVE /HPARNT/
2075         SAVE   
2076         FNSTRS=(1.0-X)**HIPR1(47)/
2077      &                (X**2+HIPR1(45)**2/HINT1(1)**2)**HIPR1(48)
2078         RETURN
2079         END
2080 C
2081 C
2082 C
2083 C
2084         SUBROUTINE HBOOST
2085               IMPLICIT DOUBLE PRECISION(D)  
2086               COMMON/LUJETSA/N,K(9000,5),P(9000,5),V(9000,5) 
2087 cc      SAVE /LUJETSA/ 
2088               COMMON/LUDAT1A/MSTU(200),PARU(200),MSTJ(200),PARJ(200) 
2089 cc      SAVE /LUDAT1A/ 
2090         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
2091 cc      SAVE /HPARNT/
2092         SAVE   
2093         DO 100 I=1,N
2094            DBETA=dble(P(I,3)/P(I,4))
2095            IF(ABS(DBETA).GE.1.D0) THEN
2096               DB=dble(HINT1(2))
2097               IF(DB.GT.0.99999999D0) THEN 
2098 C                ********Rescale boost vector if too close to unity. 
2099                  WRITE(6,*) '(HIBOOT:) boost vector too large' 
2100                  DB=0.99999999D0
2101               ENDIF 
2102               DGA=1D0/SQRT(1D0-DB**2)
2103               DP3=dble(P(I,3))
2104               DP4=dble(P(I,4))
2105               P(I,3)=sngl((DP3+DB*DP4)*DGA)
2106               P(I,4)=sngl((DP4+DB*DP3)*DGA)
2107               GO TO 100
2108            ENDIF
2109            Y=0.5*sngl(DLOG((1.D0+DBETA)/(1.D0-DBETA)))
2110            AMT=SQRT(P(I,1)**2+P(I,2)**2+P(I,5)**2)
2111            P(I,3)=AMT*SINH(Y+HINT1(3))
2112            P(I,4)=AMT*COSH(Y+HINT1(3))
2113 100        CONTINUE
2114         RETURN
2115         END
2116 C
2117 C
2118 C
2119 C
2120         SUBROUTINE QUENCH(JPJT,NTP)
2121         PARAMETER (MAXSTR=150001)
2122         DIMENSION RDP(300),LQP(300),RDT(300),LQT(300)
2123         COMMON/hjcrdn/YP(3,300),YT(3,300)
2124 cc      SAVE /hjcrdn/
2125         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
2126 cc      SAVE /HPARNT/
2127 C
2128         COMMON/HJJET1/NPJ(300),KFPJ(300,500),PJPX(300,500),
2129      &                PJPY(300,500),PJPZ(300,500),PJPE(300,500),
2130      &                PJPM(300,500),NTJ(300),KFTJ(300,500),
2131      &                PJTX(300,500),PJTY(300,500),PJTZ(300,500),
2132      &                PJTE(300,500),PJTM(300,500)
2133 cc      SAVE /HJJET1/
2134         COMMON/HJJET2/NSG,NJSG(MAXSTR),IASG(MAXSTR,3),K1SG(MAXSTR,100),
2135      &       K2SG(MAXSTR,100),PXSG(MAXSTR,100),PYSG(MAXSTR,100),
2136      &       PZSG(MAXSTR,100),PESG(MAXSTR,100),PMSG(MAXSTR,100)
2137 cc      SAVE /HJJET2/
2138         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
2139 cc      SAVE /HSTRNG/
2140       COMMON/RNDF77/NSEED
2141 cc      SAVE /RNDF77/
2142         SAVE   
2143 C
2144 c     Uzhi:
2145         BB=HINT1(19)
2146         PHI=HINT1(20)
2147         BBX=BB*COS(PHI)
2148         BBY=BB*SIN(PHI)
2149 c
2150         IF(NTP.EQ.2) GO TO 400
2151         IF(NTP.EQ.3) GO TO 2000 
2152 C*******************************************************
2153 C Jet interaction for proj jet in the direction PHIP
2154 C******************************************************
2155 C
2156         IF(NFP(JPJT,7).NE.1) RETURN
2157
2158         JP=JPJT
2159         DO 290 I=1,NPJ(JP)
2160            PTJET0=SQRT(PJPX(JP,I)**2+PJPY(JP,I)**2)
2161            IF(PTJET0.LE.HIPR1(11)) GO TO 290
2162            PTOT=SQRT(PTJET0*PTJET0+PJPZ(JP,I)**2)
2163            IF(PTOT.LT.HIPR1(8)) GO TO 290
2164            PHIP=ULANGL(PJPX(JP,I),PJPY(JP,I))
2165 C******* find the wounded proj which can interact with jet***
2166            KP=0
2167            DO 100 I2=1,IHNT2(1)
2168               IF(NFP(I2,5).NE.3 .OR. I2.EQ.JP) GO TO 100
2169               DX=YP(1,I2)-YP(1,JP)
2170               DY=YP(2,I2)-YP(2,JP)
2171               PHI=ULANGL(DX,DY)
2172               DPHI=ABS(PHI-PHIP)
2173 c     Uzhi:
2174               IF(DPHI.GE.HIPR1(40)) DPHI=2.*HIPR1(40)-DPHI
2175               IF(DPHI.GE.HIPR1(40)/2.0) GO TO 100
2176               RD0=SQRT(DX*DX+DY*DY)
2177               IF(RD0*SIN(DPHI).GT.HIPR1(12)) GO TO 100
2178               KP=KP+1
2179               LQP(KP)=I2
2180               RDP(KP)=COS(DPHI)*RD0
2181  100           CONTINUE
2182 C*******        rearrange according decending rd************
2183            DO 110 I2=1,KP-1
2184               DO 110 J2=I2+1,KP
2185                  IF(RDP(I2).LT.RDP(J2)) GO TO 110
2186                  RD=RDP(I2)
2187                  LQ=LQP(I2)
2188                  RDP(I2)=RDP(J2)
2189                  LQP(I2)=LQP(J2)
2190                  RDP(J2)=RD
2191                  LQP(J2)=LQ
2192  110              CONTINUE
2193 C****** find wounded targ which can interact with jet********
2194               KT=0
2195               DO 120 I2=1,IHNT2(3)
2196                  IF(NFT(I2,5).NE.3) GO TO 120
2197                  DX=YT(1,I2)-YP(1,JP)-BBX
2198                  DY=YT(2,I2)-YP(2,JP)-BBY
2199                  PHI=ULANGL(DX,DY)
2200                  DPHI=ABS(PHI-PHIP)
2201 c     Uzhi:
2202                  IF(DPHI.GE.HIPR1(40)) DPHI=2.*HIPR1(40)-DPHI
2203                  IF(DPHI.GT.HIPR1(40)/2.0) GO TO 120
2204                  RD0=SQRT(DX*DX+DY*DY)
2205                  IF(RD0*SIN(DPHI).GT.HIPR1(12)) GO TO 120
2206                  KT=KT+1
2207                  LQT(KT)=I2
2208                  RDT(KT)=COS(DPHI)*RD0
2209  120              CONTINUE
2210 C*******        rearrange according decending rd************
2211               DO 130 I2=1,KT-1
2212                  DO 130 J2=I2+1,KT
2213                     IF(RDT(I2).LT.RDT(J2)) GO TO 130
2214                     RD=RDT(I2)
2215                     LQ=LQT(I2)
2216                     RDT(I2)=RDT(J2)
2217                     LQT(I2)=LQT(J2)
2218                     RDT(J2)=RD
2219                     LQT(J2)=LQ
2220  130                 CONTINUE
2221                 
2222                  MP=0
2223                  MT=0
2224                  R0=0.0
2225                  NQ=0
2226                  DP=0.0
2227                  PTOT=SQRT(PJPX(JP,I)**2+PJPY(JP,I)**2+PJPZ(JP,I)**2)
2228                  V1=PJPX(JP,I)/PTOT
2229                  V2=PJPY(JP,I)/PTOT
2230                  V3=PJPZ(JP,I)/PTOT
2231
2232  200                 RN=RANART(NSEED)
2233  210                 IF(MT.GE.KT .AND. MP.GE.KP) GO TO 290
2234                  IF(MT.GE.KT) GO TO 220
2235                  IF(MP.GE.KP) GO TO 240
2236                  IF(RDP(MP+1).GT.RDT(MT+1)) GO TO 240
2237  220                 MP=MP+1
2238                  DRR=RDP(MP)-R0
2239                  IF(RN.GE.1.0-EXP(-DRR/HIPR1(13))) GO TO 210
2240                  DP=DRR*HIPR1(14)
2241                  IF(KFPJ(JP,I).NE.21) DP=0.5*DP
2242 C        ********string tension of quark jet is 0.5 of gluon's 
2243                  IF(DP.LE.0.2) GO TO 210
2244                  IF(PTOT.LE.0.4) GO TO 290
2245                  IF(PTOT.LE.DP) DP=PTOT-0.2
2246                  DE=DP
2247
2248                  IF(KFPJ(JP,I).NE.21) THEN
2249                     PRSHU=PP(LQP(MP),1)**2+PP(LQP(MP),2)**2
2250      &                   +PP(LQP(MP),3)**2
2251                     DE=SQRT(PJPM(JP,I)**2+PTOT**2)
2252      &                        -SQRT(PJPM(JP,I)**2+(PTOT-DP)**2)
2253                     ERSHU=(PP(LQP(MP),4)+DE-DP)**2
2254                     AMSHU=ERSHU-PRSHU
2255                     IF(AMSHU.LT.HIPR1(1)*HIPR1(1)) GO TO 210
2256                     PP(LQP(MP),4)=SQRT(ERSHU)
2257                     PP(LQP(MP),5)=SQRT(AMSHU)
2258                  ENDIF
2259 C                ********reshuffle the energy when jet has mass
2260                  R0=RDP(MP)
2261                  DP1=DP*V1
2262                  DP2=DP*V2
2263                  DP3=DP*V3
2264 C                ********momentum and energy transfer from jet
2265                  
2266                  NPJ(LQP(MP))=NPJ(LQP(MP))+1
2267                  KFPJ(LQP(MP),NPJ(LQP(MP)))=21
2268                  PJPX(LQP(MP),NPJ(LQP(MP)))=DP1
2269                  PJPY(LQP(MP),NPJ(LQP(MP)))=DP2
2270                  PJPZ(LQP(MP),NPJ(LQP(MP)))=DP3
2271                  PJPE(LQP(MP),NPJ(LQP(MP)))=DP
2272                  PJPM(LQP(MP),NPJ(LQP(MP)))=0.0
2273                  GO TO 260
2274
2275  240                 MT=MT+1
2276                  DRR=RDT(MT)-R0
2277                  IF(RN.GE.1.0-EXP(-DRR/HIPR1(13))) GO TO 210
2278                  DP=DRR*HIPR1(14)
2279                  IF(DP.LE.0.2) GO TO 210
2280                  IF(PTOT.LE.0.4) GO TO 290
2281                  IF(PTOT.LE.DP) DP=PTOT-0.2
2282                  DE=DP
2283
2284                  IF(KFPJ(JP,I).NE.21) THEN
2285                     PRSHU=PT(LQT(MT),1)**2+PT(LQT(MT),2)**2
2286      &                   +PT(LQT(MT),3)**2
2287                     DE=SQRT(PJPM(JP,I)**2+PTOT**2)
2288      &                        -SQRT(PJPM(JP,I)**2+(PTOT-DP)**2)
2289                     ERSHU=(PT(LQT(MT),4)+DE-DP)**2
2290                     AMSHU=ERSHU-PRSHU
2291                     IF(AMSHU.LT.HIPR1(1)*HIPR1(1)) GO TO 210
2292                     PT(LQT(MT),4)=SQRT(ERSHU)
2293                     PT(LQT(MT),5)=SQRT(AMSHU)
2294                  ENDIF
2295 C                ********reshuffle the energy when jet has mass
2296
2297                  R0=RDT(MT)
2298                  DP1=DP*V1
2299                  DP2=DP*V2
2300                  DP3=DP*V3
2301 C                ********momentum and energy transfer from jet
2302                  NTJ(LQT(MT))=NTJ(LQT(MT))+1
2303                  KFTJ(LQT(MT),NTJ(LQT(MT)))=21
2304                  PJTX(LQT(MT),NTJ(LQT(MT)))=DP1
2305                  PJTY(LQT(MT),NTJ(LQT(MT)))=DP2
2306                  PJTZ(LQT(MT),NTJ(LQT(MT)))=DP3
2307                  PJTE(LQT(MT),NTJ(LQT(MT)))=DP
2308                  PJTM(LQT(MT),NTJ(LQT(MT)))=0.0
2309
2310  260                 PJPX(JP,I)=(PTOT-DP)*V1
2311                  PJPY(JP,I)=(PTOT-DP)*V2
2312                  PJPZ(JP,I)=(PTOT-DP)*V3
2313                  PJPE(JP,I)=PJPE(JP,I)-DE
2314
2315                  PTOT=PTOT-DP
2316                  NQ=NQ+1
2317                  GO TO 200
2318  290              CONTINUE
2319
2320               RETURN
2321
2322 C*******************************************************
2323 C Jet interaction for target jet in the direction PHIT
2324 C******************************************************
2325 C
2326 C******* find the wounded proj which can interact with jet***
2327
2328  400              IF(NFT(JPJT,7).NE.1) RETURN
2329               JT=JPJT
2330               DO 690 I=1,NTJ(JT)
2331                  PTJET0=SQRT(PJTX(JT,I)**2+PJTY(JT,I)**2)
2332                  IF(PTJET0.LE.HIPR1(11)) GO TO 690
2333                  PTOT=SQRT(PTJET0*PTJET0+PJTZ(JT,I)**2)
2334                  IF(PTOT.LT.HIPR1(8)) GO TO 690
2335                  PHIT=ULANGL(PJTX(JT,I),PJTY(JT,I))
2336                  KP=0
2337                  DO 500 I2=1,IHNT2(1)
2338                     IF(NFP(I2,5).NE.3) GO TO 500
2339                     DX=YP(1,I2)+BBX-YT(1,JT)
2340                     DY=YP(2,I2)+BBY-YT(2,JT)
2341                     PHI=ULANGL(DX,DY)
2342                     DPHI=ABS(PHI-PHIT)
2343 c     Uzhi:
2344                     IF(DPHI.GE.HIPR1(40)) DPHI=2.*HIPR1(40)-DPHI
2345                     IF(DPHI.GT.HIPR1(40)/2.0) GO TO 500
2346                     RD0=SQRT(DX*DX+DY*DY)
2347                     IF(RD0*SIN(DPHI).GT.HIPR1(12)) GO TO 500
2348                     KP=KP+1
2349                     LQP(KP)=I2
2350                     RDP(KP)=COS(DPHI)*RD0
2351  500                 CONTINUE
2352 C*******        rearrange according to decending rd************
2353                  DO 510 I2=1,KP-1
2354                     DO 510 J2=I2+1,KP
2355                        IF(RDP(I2).LT.RDP(J2)) GO TO 510
2356                        RD=RDP(I2)
2357                        LQ=LQP(I2)
2358                        RDP(I2)=RDP(J2)
2359                        LQP(I2)=LQP(J2)
2360                        RDP(J2)=RD
2361                        LQP(J2)=LQ
2362  510                    CONTINUE
2363 C****** find wounded targ which can interact with jet********
2364                     KT=0
2365                     DO 520 I2=1,IHNT2(3)
2366                        IF(NFT(I2,5).NE.3 .OR. I2.EQ.JT) GO TO 520
2367                        DX=YT(1,I2)-YT(1,JT)
2368                        DY=YT(2,I2)-YT(2,JT)
2369                        PHI=ULANGL(DX,DY)
2370                        DPHI=ABS(PHI-PHIT)
2371 c     Uzhi:
2372                        IF(DPHI.GE.HIPR1(40)) DPHI=2.*HIPR1(40)-DPHI
2373                        IF(DPHI.GT.HIPR1(40)/2.0) GO TO 520
2374                        RD0=SQRT(DX*DX+DY*DY)
2375                        IF(RD0*SIN(DPHI).GT.HIPR1(12)) GO TO 520
2376                        KT=KT+1
2377                        LQT(KT)=I2
2378                        RDT(KT)=COS(DPHI)*RD0
2379  520                    CONTINUE
2380 C*******        rearrange according to decending rd************
2381                     DO 530 I2=1,KT-1
2382                        DO 530 J2=I2+1,KT
2383                           IF(RDT(I2).LT.RDT(J2)) GO TO 530
2384                           RD=RDT(I2)
2385                           LQ=LQT(I2)
2386                           RDT(I2)=RDT(J2)
2387                           LQT(I2)=LQT(J2)
2388                           RDT(J2)=RD
2389                           LQT(J2)=LQ
2390  530                       CONTINUE
2391                        
2392                        MP=0
2393                        MT=0
2394                        NQ=0
2395                        DP=0.0
2396                        R0=0.0
2397                 PTOT=SQRT(PJTX(JT,I)**2+PJTY(JT,I)**2+PJTZ(JT,I)**2)
2398                 V1=PJTX(JT,I)/PTOT
2399                 V2=PJTY(JT,I)/PTOT
2400                 V3=PJTZ(JT,I)/PTOT
2401
2402  600                RN=RANART(NSEED)
2403  610                IF(MT.GE.KT .AND. MP.GE.KP) GO TO 690
2404                 IF(MT.GE.KT) GO TO 620
2405                 IF(MP.GE.KP) GO TO 640
2406                 IF(RDP(MP+1).GT.RDT(MT+1)) GO TO 640
2407 620                MP=MP+1
2408                 DRR=RDP(MP)-R0
2409                 IF(RN.GE.1.0-EXP(-DRR/HIPR1(13))) GO TO 610
2410                 DP=DRR*HIPR1(14)
2411                 IF(KFTJ(JT,I).NE.21) DP=0.5*DP
2412 C        ********string tension of quark jet is 0.5 of gluon's 
2413                 IF(DP.LE.0.2) GO TO 610
2414                 IF(PTOT.LE.0.4) GO TO 690
2415                 IF(PTOT.LE.DP) DP=PTOT-0.2
2416                 DE=DP
2417 C
2418                 IF(KFTJ(JT,I).NE.21) THEN
2419                    PRSHU=PP(LQP(MP),1)**2+PP(LQP(MP),2)**2
2420      &                   +PP(LQP(MP),3)**2
2421                    DE=SQRT(PJTM(JT,I)**2+PTOT**2)
2422      &                     -SQRT(PJTM(JT,I)**2+(PTOT-DP)**2)
2423                    ERSHU=(PP(LQP(MP),4)+DE-DP)**2
2424                    AMSHU=ERSHU-PRSHU
2425                    IF(AMSHU.LT.HIPR1(1)*HIPR1(1)) GO TO 610
2426                    PP(LQP(MP),4)=SQRT(ERSHU)
2427                    PP(LQP(MP),5)=SQRT(AMSHU)
2428                 ENDIF
2429 C                ********reshuffle the energy when jet has mass
2430 C
2431                 R0=RDP(MP)
2432                 DP1=DP*V1
2433                 DP2=DP*V2
2434                 DP3=DP*V3
2435 C                ********momentum and energy transfer from jet
2436                 NPJ(LQP(MP))=NPJ(LQP(MP))+1
2437                 KFPJ(LQP(MP),NPJ(LQP(MP)))=21
2438                 PJPX(LQP(MP),NPJ(LQP(MP)))=DP1
2439                 PJPY(LQP(MP),NPJ(LQP(MP)))=DP2
2440                 PJPZ(LQP(MP),NPJ(LQP(MP)))=DP3
2441                 PJPE(LQP(MP),NPJ(LQP(MP)))=DP
2442                 PJPM(LQP(MP),NPJ(LQP(MP)))=0.0
2443
2444                 GO TO 660
2445
2446 640                MT=MT+1
2447                 DRR=RDT(MT)-R0
2448                 IF(RN.GE.1.0-EXP(-DRR/HIPR1(13))) GO TO 610
2449                 DP=DRR*HIPR1(14)
2450                 IF(DP.LE.0.2) GO TO 610
2451                 IF(PTOT.LE.0.4) GO TO 690
2452                 IF(PTOT.LE.DP) DP=PTOT-0.2
2453                 DE=DP
2454
2455                 IF(KFTJ(JT,I).NE.21) THEN
2456                    PRSHU=PT(LQT(MT),1)**2+PT(LQT(MT),2)**2
2457      &                   +PT(LQT(MT),3)**2
2458                    DE=SQRT(PJTM(JT,I)**2+PTOT**2)
2459      &                     -SQRT(PJTM(JT,I)**2+(PTOT-DP)**2)
2460                    ERSHU=(PT(LQT(MT),4)+DE-DP)**2
2461                    AMSHU=ERSHU-PRSHU
2462                    IF(AMSHU.LT.HIPR1(1)*HIPR1(1)) GO TO 610
2463                    PT(LQT(MT),4)=SQRT(ERSHU)
2464                    PT(LQT(MT),5)=SQRT(AMSHU)
2465                 ENDIF
2466 C                ********reshuffle the energy when jet has mass
2467
2468                 R0=RDT(MT)
2469                 DP1=DP*V1
2470                 DP2=DP*V2
2471                 DP3=DP*V3
2472 C                ********momentum and energy transfer from jet
2473                 NTJ(LQT(MT))=NTJ(LQT(MT))+1
2474                 KFTJ(LQT(MT),NTJ(LQT(MT)))=21
2475                 PJTX(LQT(MT),NTJ(LQT(MT)))=DP1
2476                 PJTY(LQT(MT),NTJ(LQT(MT)))=DP2
2477                 PJTZ(LQT(MT),NTJ(LQT(MT)))=DP3
2478                 PJTE(LQT(MT),NTJ(LQT(MT)))=DP
2479                 PJTM(LQT(MT),NTJ(LQT(MT)))=0.0
2480
2481 660                PJTX(JT,I)=(PTOT-DP)*V1
2482                 PJTY(JT,I)=(PTOT-DP)*V2
2483                 PJTZ(JT,I)=(PTOT-DP)*V3
2484                 PJTE(JT,I)=PJTE(JT,I)-DE
2485
2486                 PTOT=PTOT-DP
2487                 NQ=NQ+1
2488                 GO TO 600
2489 690        CONTINUE
2490         RETURN
2491 C********************************************************
2492 C        Q-QBAR jet interaction
2493 C********************************************************
2494 2000        ISG=JPJT
2495         IF(IASG(ISG,3).NE.1) RETURN
2496 C
2497         JP=IASG(ISG,1)
2498         JT=IASG(ISG,2)
2499         XJ=(YP(1,JP)+BBX+YT(1,JT))/2.0
2500         YJ=(YP(2,JP)+BBY+YT(2,JT))/2.0
2501         DO 2690 I=1,NJSG(ISG)
2502            PTJET0=SQRT(PXSG(ISG,I)**2+PYSG(ISG,I)**2)
2503            IF(PTJET0.LE.HIPR1(11).OR.PESG(ISG,I).LT.HIPR1(1))
2504      &            GO TO 2690
2505            PTOT=SQRT(PTJET0*PTJET0+PZSG(ISG,I)**2)
2506            IF(PTOT.LT.MAX(HIPR1(1),HIPR1(8))) GO TO 2690
2507            PHIQ=ULANGL(PXSG(ISG,I),PYSG(ISG,I))
2508            KP=0
2509            DO 2500 I2=1,IHNT2(1)
2510               IF(NFP(I2,5).NE.3.OR.I2.EQ.JP) GO TO 2500
2511               DX=YP(1,I2)+BBX-XJ
2512               DY=YP(2,I2)+BBY-YJ
2513               PHI=ULANGL(DX,DY)
2514               DPHI=ABS(PHI-PHIQ)
2515 c     Uzhi:
2516               IF(DPHI.GE.HIPR1(40)) DPHI=2.*HIPR1(40)-DPHI
2517               IF(DPHI.GT.HIPR1(40)/2.0) GO TO 2500
2518               RD0=SQRT(DX*DX+DY*DY)
2519               IF(RD0*SIN(DPHI).GT.HIPR1(12)) GO TO 2500
2520               KP=KP+1
2521               LQP(KP)=I2
2522               RDP(KP)=COS(DPHI)*RD0
2523  2500           CONTINUE
2524 C*******        rearrange according to decending rd************
2525            DO 2510 I2=1,KP-1
2526               DO 2510 J2=I2+1,KP
2527                  IF(RDP(I2).LT.RDP(J2)) GO TO 2510
2528                  RD=RDP(I2)
2529                  LQ=LQP(I2)
2530                  RDP(I2)=RDP(J2)
2531                  LQP(I2)=LQP(J2)
2532                  RDP(J2)=RD
2533                  LQP(J2)=LQ
2534  2510              CONTINUE
2535 C****** find wounded targ which can interact with jet********
2536               KT=0
2537               DO 2520 I2=1,IHNT2(3)
2538                  IF(NFT(I2,5).NE.3 .OR. I2.EQ.JT) GO TO 2520
2539                  DX=YT(1,I2)-XJ
2540                  DY=YT(2,I2)-YJ
2541                  PHI=ULANGL(DX,DY)
2542                  DPHI=ABS(PHI-PHIQ)
2543 c     Uzhi:
2544                  IF(DPHI.GE.HIPR1(40)) DPHI=2.*HIPR1(40)-DPHI
2545                  IF(DPHI.GT.HIPR1(40)/2.0) GO TO 2520
2546                  RD0=SQRT(DX*DX+DY*DY)
2547                  IF(RD0*SIN(DPHI).GT.HIPR1(12)) GO TO 2520
2548                  KT=KT+1
2549                  LQT(KT)=I2
2550                  RDT(KT)=COS(DPHI)*RD0
2551  2520              CONTINUE
2552 C*******        rearrange according to decending rd************
2553               DO 2530 I2=1,KT-1
2554                  DO 2530 J2=I2+1,KT
2555                     IF(RDT(I2).LT.RDT(J2)) GO TO 2530
2556                     RD=RDT(I2)
2557                     LQ=LQT(I2)
2558                     RDT(I2)=RDT(J2)
2559                     LQT(I2)=LQT(J2)
2560                     RDT(J2)=RD
2561                     LQT(J2)=LQ
2562  2530                 CONTINUE
2563                 
2564                  MP=0
2565                  MT=0
2566                  NQ=0
2567                  DP=0.0
2568                  R0=0.0
2569                  PTOT=SQRT(PXSG(ISG,I)**2+PYSG(ISG,I)**2
2570      &                +PZSG(ISG,I)**2)
2571                  V1=PXSG(ISG,I)/PTOT
2572                  V2=PYSG(ISG,I)/PTOT
2573                  V3=PZSG(ISG,I)/PTOT
2574
2575  2600                 RN=RANART(NSEED)
2576  2610                 IF(MT.GE.KT .AND. MP.GE.KP) GO TO 2690
2577                  IF(MT.GE.KT) GO TO 2620
2578                  IF(MP.GE.KP) GO TO 2640
2579                  IF(RDP(MP+1).GT.RDT(MT+1)) GO TO 2640
2580  2620                 MP=MP+1
2581                  DRR=RDP(MP)-R0
2582                  IF(RN.GE.1.0-EXP(-DRR/HIPR1(13))) GO TO 2610
2583                  DP=DRR*HIPR1(14)/2.0
2584                  IF(DP.LE.0.2) GO TO 2610
2585                  IF(PTOT.LE.0.4) GO TO 2690
2586                  IF(PTOT.LE.DP) DP=PTOT-0.2
2587                  DE=DP
2588 C
2589                  IF(K2SG(ISG,I).NE.21) THEN
2590                     IF(PTOT.LT.DP+HIPR1(1)) GO TO 2690
2591                     PRSHU=PP(LQP(MP),1)**2+PP(LQP(MP),2)**2
2592      &                    +PP(LQP(MP),3)**2
2593                     DE=SQRT(PMSG(ISG,I)**2+PTOT**2)
2594      &                       -SQRT(PMSG(ISG,I)**2+(PTOT-DP)**2)
2595                     ERSHU=(PP(LQP(MP),4)+DE-DP)**2
2596                     AMSHU=ERSHU-PRSHU
2597                     IF(AMSHU.LT.HIPR1(1)*HIPR1(1)) GO TO 2610
2598                     PP(LQP(MP),4)=SQRT(ERSHU)
2599                     PP(LQP(MP),5)=SQRT(AMSHU)
2600                  ENDIF
2601 C                ********reshuffle the energy when jet has mass
2602 C
2603                  R0=RDP(MP)
2604                  DP1=DP*V1
2605                  DP2=DP*V2
2606                  DP3=DP*V3
2607 C                ********momentum and energy transfer from jet
2608                  NPJ(LQP(MP))=NPJ(LQP(MP))+1
2609                  KFPJ(LQP(MP),NPJ(LQP(MP)))=21
2610                  PJPX(LQP(MP),NPJ(LQP(MP)))=DP1
2611                  PJPY(LQP(MP),NPJ(LQP(MP)))=DP2
2612                  PJPZ(LQP(MP),NPJ(LQP(MP)))=DP3
2613                  PJPE(LQP(MP),NPJ(LQP(MP)))=DP
2614                  PJPM(LQP(MP),NPJ(LQP(MP)))=0.0
2615
2616                  GO TO 2660
2617
2618  2640                 MT=MT+1
2619                  DRR=RDT(MT)-R0
2620                  IF(RN.GE.1.0-EXP(-DRR/HIPR1(13))) GO TO 2610
2621                  DP=DRR*HIPR1(14)
2622                  IF(DP.LE.0.2) GO TO 2610
2623                  IF(PTOT.LE.0.4) GO TO 2690
2624                  IF(PTOT.LE.DP) DP=PTOT-0.2
2625                  DE=DP
2626
2627                  IF(K2SG(ISG,I).NE.21) THEN
2628                     IF(PTOT.LT.DP+HIPR1(1)) GO TO 2690
2629                     PRSHU=PT(LQT(MT),1)**2+PT(LQT(MT),2)**2
2630      &                    +PT(LQT(MT),3)**2
2631                     DE=SQRT(PMSG(ISG,I)**2+PTOT**2)
2632      &                       -SQRT(PMSG(ISG,I)**2+(PTOT-DP)**2)
2633                     ERSHU=(PT(LQT(MT),4)+DE-DP)**2
2634                     AMSHU=ERSHU-PRSHU
2635                     IF(AMSHU.LT.HIPR1(1)*HIPR1(1)) GO TO 2610
2636                     PT(LQT(MT),4)=SQRT(ERSHU)
2637                     PT(LQT(MT),5)=SQRT(AMSHU)
2638                  ENDIF
2639 C               ********reshuffle the energy when jet has mass
2640
2641                  R0=RDT(MT)
2642                  DP1=DP*V1
2643                  DP2=DP*V2
2644                  DP3=DP*V3
2645 C                ********momentum and energy transfer from jet
2646                  NTJ(LQT(MT))=NTJ(LQT(MT))+1
2647                  KFTJ(LQT(MT),NTJ(LQT(MT)))=21
2648                  PJTX(LQT(MT),NTJ(LQT(MT)))=DP1
2649                  PJTY(LQT(MT),NTJ(LQT(MT)))=DP2
2650                  PJTZ(LQT(MT),NTJ(LQT(MT)))=DP3
2651                  PJTE(LQT(MT),NTJ(LQT(MT)))=DP
2652                  PJTM(LQT(MT),NTJ(LQT(MT)))=0.0
2653
2654  2660                 PXSG(ISG,I)=(PTOT-DP)*V1
2655                  PYSG(ISG,I)=(PTOT-DP)*V2
2656                  PZSG(ISG,I)=(PTOT-DP)*V3
2657                  PESG(ISG,I)=PESG(ISG,I)-DE
2658
2659                  PTOT=PTOT-DP
2660                  NQ=NQ+1
2661                  GO TO 2600
2662  2690        CONTINUE
2663         RETURN
2664         END
2665
2666 C
2667 C
2668 C
2669 C
2670         SUBROUTINE HIJFRG(JTP,NTP,IERROR)
2671 C        NTP=1, fragment proj string, NTP=2, targ string, 
2672 C       NTP=3, independent 
2673 C        strings from jets.  JTP is the line number of the string
2674 C*******Fragment all leadng strings of proj and targ**************
2675 C        IHNT2(1)=atomic #, IHNT2(2)=proton #(=-1 if anti-proton)  *
2676 C******************************************************************
2677         PARAMETER (MAXSTR=150001)
2678         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
2679 cc      SAVE /HPARNT/
2680         COMMON/HIJDAT/HIDAT0(10,10),HIDAT(10)
2681 cc      SAVE /HIJDAT/
2682         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
2683 cc      SAVE /HSTRNG/
2684         COMMON/HJJET1/NPJ(300),KFPJ(300,500),PJPX(300,500),
2685      &                PJPY(300,500),PJPZ(300,500),PJPE(300,500),
2686      &                PJPM(300,500),NTJ(300),KFTJ(300,500),
2687      &                PJTX(300,500),PJTY(300,500),PJTZ(300,500),
2688      &                PJTE(300,500),PJTM(300,500)
2689 cc      SAVE /HJJET1/
2690         COMMON/HJJET2/NSG,NJSG(MAXSTR),IASG(MAXSTR,3),K1SG(MAXSTR,100),
2691      &       K2SG(MAXSTR,100),PXSG(MAXSTR,100),PYSG(MAXSTR,100),
2692      &       PZSG(MAXSTR,100),PESG(MAXSTR,100),PMSG(MAXSTR,100)
2693 cc      SAVE /HJJET2/
2694 C
2695         COMMON/LUJETSA/N,K(9000,5),P(9000,5),V(9000,5)
2696 cc      SAVE /LUJETSA/
2697         COMMON/LUDAT1A/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
2698 cc      SAVE /LUDAT1A/
2699       COMMON/RNDF77/NSEED
2700 cc      SAVE /RNDF77/
2701 clin-4/11/01 soft:
2702       common/anim/nevent,isoft,isflag,izpc
2703 cc      SAVE /anim/
2704         SAVE   
2705         
2706 cbz3/12/99
2707 c.....set up fragmentation function according to the number of collisions
2708 c.....a wounded nucleon has suffered
2709 c        IF (NTP .EQ. 1) THEN
2710 c           NCOLL = NFP(JTP, 11)
2711 c        ELSE IF (NTP .EQ. 2) THEN
2712 c           NCOLL = NFT(JTP, 11)
2713 c        ELSE IF (NTP .EQ. 3) THEN
2714 c           NCOLL = (NFP(IASG(JTP,1), 11) + NFT(IASG(JTP,2), 11)) / 2
2715 c        END IF
2716 c        IF (NCOLL .LE. 1) THEN
2717 c           PARJ(5) = 0.5
2718 c        ELSE IF (NCOLL .EQ. 2) THEN
2719 c           PARJ(5) = 0.75
2720 c        ELSE IF (NCOLL .EQ. 3) THEN
2721 c           PARJ(5) = 1.17
2722 c        ELSE IF (NCOLL .EQ. 4) THEN
2723 c           PARJ(5) = 2.0
2724 c        ELSE IF (NCOLL .EQ. 5) THEN
2725 c           PARJ(5) = 4.5
2726 c        ELSE IF (NCOLL .GE. 6) THEN
2727 c           PARJ(5) = 49.5
2728 c        END IF
2729 c        PARJ(5) = 0.5
2730 cbz3/12/99 end
2731
2732         IERROR=0
2733         CALL LUEDIT(0)
2734         N=0
2735 C                        ********initialize the document lines
2736         IF(NTP.EQ.3) THEN
2737                 ISG=JTP
2738                 N=NJSG(ISG)
2739                 DO 100 I=1,NJSG(ISG)
2740                    K(I,1)=K1SG(ISG,I)
2741                    K(I,2)=K2SG(ISG,I)
2742                    P(I,1)=PXSG(ISG,I)
2743                    P(I,2)=PYSG(ISG,I)
2744                    P(I,3)=PZSG(ISG,I)
2745                    P(I,4)=PESG(ISG,I)
2746                    P(I,5)=PMSG(ISG,I)
2747  100            CONTINUE
2748
2749 C                IF(IHPR2(1).GT.0) CALL ATTRAD(IERROR)
2750 c                IF(IERROR.NE.0) RETURN
2751 C                CALL LULIST(1)
2752                 if(isoft.ne.2.or.isflag.ne.0) CALL LUEXEC
2753              RETURN
2754         ENDIF
2755 C
2756         IF(NTP.EQ.2) GO TO 200
2757         IF(JTP.GT.IHNT2(1))   RETURN
2758         IF(NFP(JTP,5).NE.3.AND.NFP(JTP,3).NE.0
2759      &            .AND.NPJ(JTP).EQ.0.AND.NFP(JTP,10).EQ.0) GO TO 1000
2760         IF(NFP(JTP,15).EQ.-1) THEN
2761                 KF1=NFP(JTP,2)
2762                 KF2=NFP(JTP,1)
2763                 PQ21=PP(JTP,6)
2764                 PQ22=PP(JTP,7)
2765                 PQ11=PP(JTP,8)
2766                 PQ12=PP(JTP,9)
2767                 AM1=PP(JTP,15)
2768                 AM2=PP(JTP,14)
2769         ELSE
2770                 KF1=NFP(JTP,1)
2771                 KF2=NFP(JTP,2)
2772                 PQ21=PP(JTP,8)
2773                 PQ22=PP(JTP,9)
2774                 PQ11=PP(JTP,6)
2775                 PQ12=PP(JTP,7)
2776                 AM1=PP(JTP,14)
2777                 AM2=PP(JTP,15)        
2778         ENDIF
2779
2780 C        ********for NFP(JTP,15)=-1 NFP(JTP,1) IS IN -Z DIRECTION
2781         PB1=PQ11+PQ21
2782         PB2=PQ12+PQ22
2783         PB3=PP(JTP,3)
2784         PECM=PP(JTP,5)
2785         BTZ=PB3/PP(JTP,4)
2786         IF((ABS(PB1-PP(JTP,1)).GT.0.01.OR.
2787      &     ABS(PB2-PP(JTP,2)).GT.0.01).AND.IHPR2(10).NE.0)
2788      &     WRITE(6,*) '  Pt of Q and QQ do not sum to the total',jtp
2789      &     ,ntp,pq11,pq21,pb1,'*',pq12,pq22,pb2,'*',pp(JTP,1),pp(JTP,2)
2790         GO TO 300
2791
2792 200        IF(JTP.GT.IHNT2(3))  RETURN
2793         IF(NFT(JTP,5).NE.3.AND.NFT(JTP,3).NE.0
2794      &           .AND.NTJ(JTP).EQ.0.AND.NFT(JTP,10).EQ.0) GO TO 1200
2795         IF(NFT(JTP,15).EQ.1) THEN
2796                 KF1=NFT(JTP,1)
2797                 KF2=NFT(JTP,2)
2798                 PQ11=PT(JTP,6)
2799                 PQ12=PT(JTP,7)
2800                 PQ21=PT(JTP,8)
2801                 PQ22=PT(JTP,9)
2802                 AM1=PT(JTP,14)
2803                 AM2=PT(JTP,15)
2804         ELSE
2805                 KF1=NFT(JTP,2)
2806                 KF2=NFT(JTP,1)
2807                 PQ11=PT(JTP,8)
2808                 PQ12=PT(JTP,9)
2809                 PQ21=PT(JTP,6)
2810                 PQ22=PT(JTP,7)
2811                 AM1=PT(JTP,15)
2812                 AM2=PT(JTP,14)
2813         ENDIF        
2814 C        ********for NFT(JTP,15)=1 NFT(JTP,1) IS IN +Z DIRECTION
2815         PB1=PQ11+PQ21
2816         PB2=PQ12+PQ22
2817         PB3=PT(JTP,3)
2818         PECM=PT(JTP,5)
2819         BTZ=PB3/PT(JTP,4)
2820
2821         IF((ABS(PB1-PT(JTP,1)).GT.0.01.OR.
2822      &     ABS(PB2-PT(JTP,2)).GT.0.01).AND.IHPR2(10).NE.0)
2823      &     WRITE(6,*) '  Pt of Q and QQ do not sum to the total',jtp
2824      &     ,ntp,pq11,pq21,pb1,'*',pq12,pq22,pb2,'*',pt(JTP,1),pt(JTP,2)
2825 300        IF(PECM.LT.HIPR1(1)) THEN
2826            IERROR=1
2827            IF(IHPR2(10).EQ.0) RETURN
2828            WRITE(6,*) ' ECM=',PECM,' energy of the string is too small'
2829 clin:
2830            write (6,*) 'JTP,NTP,pq=',JTP,NTP,pq11,pq12,pq21,pq22
2831            RETURN
2832         ENDIF
2833         AMT=PECM**2+PB1**2+PB2**2
2834         AMT1=AM1**2+PQ11**2+PQ12**2
2835         AMT2=AM2**2+PQ21**2+PQ22**2
2836         PZCM=SQRT(ABS(AMT**2+AMT1**2+AMT2**2-2.0*AMT*AMT1
2837      &       -2.0*AMT*AMT2-2.0*AMT1*AMT2))/2.0/SQRT(AMT)
2838 C                *******PZ of end-partons in c.m. frame of the string
2839         K(1,1)=2
2840         K(1,2)=KF1
2841         P(1,1)=PQ11
2842         P(1,2)=PQ12
2843         P(1,3)=PZCM
2844         P(1,4)=SQRT(AMT1+PZCM**2)
2845         P(1,5)=AM1
2846         K(2,1)=1
2847         K(2,2)=KF2
2848         P(2,1)=PQ21
2849         P(2,2)=PQ22
2850         P(2,3)=-PZCM
2851         P(2,4)=SQRT(AMT2+PZCM**2)
2852         P(2,5)=AM2
2853         N=2
2854 C*****
2855         CALL HIROBO(0.0,0.0,0.0,0.0,BTZ)
2856         JETOT=0
2857         IF((PQ21**2+PQ22**2).GT.(PQ11**2+PQ12**2)) THEN
2858                 PMAX1=P(2,1)
2859                 PMAX2=P(2,2)
2860                 PMAX3=P(2,3)
2861         ELSE
2862                 PMAX1=P(1,1)
2863                 PMAX2=P(1,2)
2864                 PMAX3=P(1,3)
2865         ENDIF
2866         IF(NTP.EQ.1) THEN
2867                 PP(JTP,10)=PMAX1
2868                 PP(JTP,11)=PMAX2
2869                 PP(JTP,12)=PMAX3
2870         ELSE IF(NTP.EQ.2) THEN
2871                 PT(JTP,10)=PMAX1
2872                 PT(JTP,11)=PMAX2
2873                 PT(JTP,12)=PMAX3
2874         ENDIF
2875 C*******************attach produced jets to the leadng partons****
2876         IF(NTP.EQ.1.AND.NPJ(JTP).NE.0) THEN
2877                 JETOT=NPJ(JTP)
2878 C                IF(NPJ(JTP).GE.2) CALL HIJSRT(JTP,1)
2879 C                        ********sort jets in order of y
2880                 IEX=0
2881                 IF((ABS(KF1).GT.1000.AND.KF1.LT.0)
2882      &                        .OR.(ABS(KF1).LT.1000.AND.KF1.GT.0)) IEX=1
2883                 DO 520 I=N,2,-1
2884                 DO 520 J=1,5
2885                         II=NPJ(JTP)+I
2886                         K(II,J)=K(I,J)
2887                         P(II,J)=P(I,J)
2888                         V(II,J)=V(I,J)
2889 520                CONTINUE
2890
2891                 DO 540 I=1,NPJ(JTP)
2892                         DO 542 J=1,5
2893                                 K(I+1,J)=0
2894                                 V(I+1,J)=0
2895 542                        CONTINUE                                
2896                         I0=I
2897 clin-4/12/01:                        IF(IEX.EQ.1) I0=NPJ(JTP)-I+1
2898                         IF(IEX.EQ.1.and.(isoft.ne.2.or.isflag.ne.0))
2899      1 I0=NPJ(JTP)-I+1
2900 C                                ********reverse the order of jets
2901                         KK1=KFPJ(JTP,I0)
2902                         K(I+1,1)=2
2903                         K(I+1,2)=KK1
2904                         IF(KK1.NE.21 .AND. KK1.NE.0)  K(I+1,1)=
2905      &                          1+(ABS(KK1)+(2*IEX-1)*KK1)/2/ABS(KK1)
2906                         P(I+1,1)=PJPX(JTP,I0)
2907                         P(I+1,2)=PJPY(JTP,I0)
2908                         P(I+1,3)=PJPZ(JTP,I0)
2909                         P(I+1,4)=PJPE(JTP,I0)
2910                         P(I+1,5)=PJPM(JTP,I0)
2911 540                CONTINUE
2912                 N=N+NPJ(JTP)
2913         ELSE IF(NTP.EQ.2.AND.NTJ(JTP).NE.0) THEN
2914                 JETOT=NTJ(JTP)
2915 c                IF(NTJ(JTP).GE.2)  CALL HIJSRT(JTP,2)
2916 C                        ********sort jets in order of y
2917                 IEX=1
2918                 IF((ABS(KF2).GT.1000.AND.KF2.LT.0)
2919      &                        .OR.(ABS(KF2).LT.1000.AND.KF2.GT.0)) IEX=0
2920                 DO 560 I=N,2,-1
2921                 DO 560 J=1,5
2922                         II=NTJ(JTP)+I
2923                         K(II,J)=K(I,J)
2924                         P(II,J)=P(I,J)
2925                         V(II,J)=V(I,J)
2926 560                CONTINUE
2927                 DO 580 I=1,NTJ(JTP)
2928                         DO 582 J=1,5
2929                                 K(I+1,J)=0
2930                                 V(I+1,J)=0
2931 582                        CONTINUE                                
2932                         I0=I
2933 clin-4/12/01:                        IF(IEX.EQ.1) I0=NTJ(JTP)-I+1
2934                         IF(IEX.EQ.1.and.(isoft.ne.2.or.isflag.ne.0))
2935      1 I0=NTJ(JTP)-I+1
2936 C                                ********reverse the order of jets
2937                         KK1=KFTJ(JTP,I0)
2938                         K(I+1,1)=2
2939                         K(I+1,2)=KK1
2940                         IF(KK1.NE.21 .AND. KK1.NE.0) K(I+1,1)=
2941      &                           1+(ABS(KK1)+(2*IEX-1)*KK1)/2/ABS(KK1)
2942                         P(I+1,1)=PJTX(JTP,I0)
2943                         P(I+1,2)=PJTY(JTP,I0)
2944                         P(I+1,3)=PJTZ(JTP,I0)
2945                         P(I+1,4)=PJTE(JTP,I0)
2946                         P(I+1,5)=PJTM(JTP,I0)
2947 580                CONTINUE
2948                 N=N+NTJ(JTP)
2949         ENDIF
2950         IF(IHPR2(1).GT.0.AND.RANART(NSEED).LE.HIDAT(3)) THEN
2951              HDAT20=HIDAT(2)
2952              HPR150=HIPR1(5)
2953              IF(IHPR2(8).EQ.0.AND.IHPR2(3).EQ.0.AND.IHPR2(9).EQ.0)
2954      &                        HIDAT(2)=2.0
2955              IF(HINT1(1).GE.1000.0.AND.JETOT.EQ.0)THEN
2956                 HIDAT(2)=3.0
2957                 HIPR1(5)=5.0
2958              ENDIF
2959              CALL ATTRAD(IERROR)
2960              HIDAT(2)=HDAT20
2961              HIPR1(5)=HPR150
2962         ELSE IF(JETOT.EQ.0.AND.IHPR2(1).GT.0.AND.
2963      &                       HINT1(1).GE.1000.0.AND.
2964      &                RANART(NSEED).LE.0.8) THEN
2965                 HDAT20=HIDAT(2)
2966                 HPR150=HIPR1(5)
2967                 HIDAT(2)=3.0
2968                 HIPR1(5)=5.0
2969              IF(IHPR2(8).EQ.0.AND.IHPR2(3).EQ.0.AND.IHPR2(9).EQ.0)
2970      &                        HIDAT(2)=2.0
2971                 CALL ATTRAD(IERROR)
2972                 HIDAT(2)=HDAT20
2973                 HIPR1(5)=HPR150
2974         ENDIF
2975         IF(IERROR.NE.0) RETURN
2976 C                ******** conduct soft radiations
2977 C****************************
2978 C
2979 C
2980 clin-4/11/01 soft:
2981 c        CALL LUEXEC
2982         if(isoft.ne.2.or.isflag.ne.0) CALL LUEXEC
2983
2984         RETURN
2985
2986 1000        N=1
2987         K(1,1)=1
2988                K(1,2)=NFP(JTP,3)
2989         DO 1100 JJ=1,5
2990                        P(1,JJ)=PP(JTP,JJ)
2991 1100                CONTINUE
2992 C                        ********proj remain as a nucleon or delta
2993 clin-4/11/01 soft:
2994 c        CALL LUEXEC
2995         if(isoft.ne.2.or.isflag.ne.0) CALL LUEXEC
2996
2997 C        call lulist(1)
2998         RETURN
2999 C
3000 1200        N=1
3001         K(1,1)=1
3002         K(1,2)=NFT(JTP,3)
3003         DO 1300 JJ=1,5
3004                 P(1,JJ)=PT(JTP,JJ)
3005 1300        CONTINUE
3006 C                        ********targ remain as a nucleon or delta
3007 clin-4/11/01 soft:
3008 c        CALL LUEXEC
3009         if(isoft.ne.2.or.isflag.ne.0) CALL LUEXEC
3010
3011 C        call lulist(1)
3012         RETURN
3013         END
3014 C
3015 C
3016 C
3017 C
3018 C****************************************************************
3019 C        conduct soft radiation according to dipole approxiamtion
3020 C****************************************************************
3021         SUBROUTINE ATTRAD(IERROR)
3022 C
3023         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
3024 cc      SAVE /HPARNT/
3025         COMMON/HIJDAT/HIDAT0(10,10),HIDAT(10)
3026 cc      SAVE /HIJDAT/
3027         COMMON/LUJETSA/N,K(9000,5),P(9000,5),V(9000,5)
3028 cc      SAVE /LUJETSA/
3029       COMMON/RNDF77/NSEED
3030 cc      SAVE /RNDF77/
3031         SAVE   
3032         IERROR=0
3033
3034 C.....S INVARIANT MASS-SQUARED BETWEEN PARTONS I AND I+1......
3035 C.....SM IS THE LARGEST MASS-SQUARED....
3036
3037 40        SM=0.
3038         JL=1
3039         DO 30 I=1,N-1
3040            S=2.*(P(I,4)*P(I+1,4)-P(I,1)*P(I+1,1)-P(I,2)*P(I+1,2)
3041      &                -P(I,3)*P(I+1,3))+P(I,5)**2+P(I+1,5)**2
3042            IF(S.LT.0.) S=0.
3043            WP=SQRT(S)-1.5*(P(I,5)+P(I+1,5))
3044            IF(WP.GT.SM) THEN
3045               PBT1=P(I,1)+P(I+1,1)
3046               PBT2=P(I,2)+P(I+1,2)
3047               PBT3=P(I,3)+P(I+1,3)
3048               PBT4=P(I,4)+P(I+1,4)
3049               BTT=(PBT1**2+PBT2**2+PBT3**2)/PBT4**2
3050               IF(BTT.GE.1.0-1.0E-10) GO TO 30
3051               IF((I.NE.1.OR.I.NE.N-1).AND.
3052      &             (K(I,2).NE.21.AND.K(I+1,2).NE.21)) GO TO 30
3053               JL=I
3054               SM=WP
3055            ENDIF
3056 30        CONTINUE
3057         S=(SM+1.5*(P(JL,5)+P(JL+1,5)))**2
3058               IF(SM.LT.HIPR1(5)) GOTO 2
3059      
3060 C.....MAKE PLACE FOR ONE GLUON.....
3061               IF(JL+1.EQ.N) GOTO 190
3062               DO 160 J=N,JL+2,-1
3063                       K(J+1,1)=K(J,1)
3064                 K(J+1,2)=K(J,2)
3065                       DO 150 M=1,5
3066 150                           P(J+1,M)=P(J,M)
3067 160                   CONTINUE
3068 190           N=N+1
3069      
3070 C.....BOOST TO REST SYSTEM FOR PARTICLES JL AND JL+1.....
3071               P1=P(JL,1)+P(JL+1,1)
3072               P2=P(JL,2)+P(JL+1,2)
3073               P3=P(JL,3)+P(JL+1,3)
3074               P4=P(JL,4)+P(JL+1,4)
3075               BEX=-P1/P4
3076               BEY=-P2/P4
3077               BEZ=-P3/P4
3078         IMIN=JL
3079         IMAX=JL+1
3080               CALL ATROBO(0.,0.,BEX,BEY,BEZ,IMIN,IMAX,IERROR)
3081         IF(IERROR.NE.0) RETURN
3082 C.....ROTATE TO Z-AXIS....
3083               CTH=P(JL,3)/SQRT(P(JL,4)**2-P(JL,5)**2)
3084               IF(ABS(CTH).GT.1.0)  CTH=MAX(-1.,MIN(1.,CTH))
3085               THETA=ACOS(CTH)
3086               PHI=ULANGL(P(JL,1),P(JL,2))
3087               CALL ATROBO(0.,-PHI,0.,0.,0.,IMIN,IMAX,IERROR)
3088               CALL ATROBO(-THETA,0.,0.,0.,0.,IMIN,IMAX,IERROR)
3089      
3090 C.....CREATE ONE GLUON AND ORIENTATE.....
3091      
3092 1        CALL AR3JET(S,X1,X3,JL)
3093               CALL ARORIE(S,X1,X3,JL)                
3094         IF(HIDAT(2).GT.0.0) THEN
3095                  PTG1=SQRT(P(JL,1)**2+P(JL,2)**2)
3096                  PTG2=SQRT(P(JL+1,1)**2+P(JL+1,2)**2)
3097                  PTG3=SQRT(P(JL+2,1)**2+P(JL+2,2)**2)
3098            PTG=MAX(PTG1,PTG2,PTG3)
3099            IF(PTG.GT.HIDAT(2)) THEN
3100               FMFACT=EXP(-(PTG**2-HIDAT(2)**2)/HIPR1(2)**2)
3101               IF(RANART(NSEED).GT.FMFACT) GO TO 1
3102            ENDIF
3103         ENDIF
3104 C.....ROTATE AND BOOST BACK.....
3105         IMIN=JL
3106         IMAX=JL+2
3107               CALL ATROBO(THETA,PHI,-BEX,-BEY,-BEZ,IMIN,IMAX,IERROR)
3108         IF(IERROR.NE.0) RETURN
3109 C.....ENUMERATE THE GLUONS.....
3110               K(JL+2,1)=K(JL+1,1)
3111         K(JL+2,2)=K(JL+1,2)
3112         K(JL+2,3)=K(JL+1,3)
3113         K(JL+2,4)=K(JL+1,4)
3114         K(JL+2,5)=K(JL+1,5)
3115               P(JL+2,5)=P(JL+1,5)
3116               K(JL+1,1)=2
3117         K(JL+1,2)=21
3118         K(JL+1,3)=0
3119         K(JL+1,4)=0
3120         K(JL+1,5)=0
3121               P(JL+1,5)=0.
3122 C----THETA FUNCTION DAMPING OF THE EMITTED GLUONS. FOR HADRON-HADRON.
3123 C----R0=VFR(2)
3124 C              IF(VFR(2).GT.0.) THEN
3125 C              PTG=SQRT(P(JL+1,1)**2+P(JL+1,2)**2)
3126 C              PTGMAX=WSTRI/2.
3127 C              DOPT=SQRT((4.*PAR(71)*VFR(2))/WSTRI)
3128 C              PTOPT=(DOPT*WSTRI)/(2.*VFR(2))
3129 C              IF(PTG.GT.PTOPT) IORDER=IORDER-1
3130 C              IF(PTG.GT.PTOPT) GOTO 1
3131 C              ENDIF
3132 C-----
3133              IF(SM.GE.HIPR1(5)) GOTO 40
3134
3135 2              K(1,1)=2
3136         K(1,3)=0
3137         K(1,4)=0
3138         K(1,5)=0
3139               K(N,1)=1
3140         K(N,3)=0
3141         K(N,4)=0
3142         K(N,5)=0
3143
3144               RETURN
3145               END
3146
3147
3148         SUBROUTINE AR3JET(S,X1,X3,JL)
3149 C     
3150         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
3151 cc      SAVE /HPARNT/
3152         COMMON/LUJETSA/N,K(9000,5),P(9000,5),V(9000,5)
3153 cc      SAVE /LUJETSA/
3154       COMMON/RNDF77/NSEED
3155 cc      SAVE /RNDF77/
3156         SAVE   
3157 C     
3158         C=1./3.
3159               IF(K(JL,2).NE.21 .AND. K(JL+1,2).NE.21) C=8./27.
3160               EXP1=3
3161               EXP3=3
3162               IF(K(JL,2).NE.21) EXP1=2
3163               IF(K(JL+1,2).NE.21) EXP3=2
3164               A=0.24**2/S
3165               YMA=ALOG(.5/SQRT(A)+SQRT(.25/A-1))
3166               D=4.*C*YMA
3167               SM1=P(JL,5)**2/S
3168               SM3=P(JL+1,5)**2/S
3169               XT2M=(1.-2.*SQRT(SM1)+SM1-SM3)*(1.-2.*SQRT(SM3)-SM1+SM3)
3170               XT2M=MIN(.25,XT2M)
3171               NTRY=0
3172 1             IF(NTRY.EQ.5000) THEN
3173                 X1=.5*(2.*SQRT(SM1)+1.+SM1-SM3)
3174                 X3=.5*(2.*SQRT(SM3)+1.-SM1+SM3)
3175                 RETURN
3176               ENDIF
3177               NTRY=NTRY+1
3178      
3179               XT2=A*(XT2M/A)**(RANART(NSEED)**(1./D))
3180      
3181               YMAX=ALOG(.5/SQRT(XT2)+SQRT(.25/XT2-1.))
3182               Y=(2.*RANART(NSEED)-1.)*YMAX
3183               X1=1.-SQRT(XT2)*EXP(Y)
3184               X3=1.-SQRT(XT2)*EXP(-Y)
3185               X2=2.-X1-X3
3186               NEG=0
3187               IF(K(JL,2).NE.21 .OR. K(JL+1,2).NE.21) THEN
3188         IF((1.-X1)*(1.-X2)*(1.-X3)-X2*SM1*(1.-X1)-X2*SM3*(1.-X3).
3189      &  LE.0..OR.X1.LE.2.*SQRT(SM1)-SM1+SM3.OR.X3.LE.2.*SQRT(SM3)
3190      &  -SM3+SM1) NEG=1
3191         X1=X1+SM1-SM3
3192         X3=X3-SM1+SM3
3193              ENDIF
3194               IF(NEG.EQ.1) GOTO 1
3195      
3196               FG=2.*YMAX*C*(X1**EXP1+X3**EXP3)/D
3197               XT2M=XT2
3198               IF(FG.LT.RANART(NSEED)) GOTO 1
3199      
3200               RETURN
3201               END
3202 C*************************************************************
3203
3204
3205         SUBROUTINE ARORIE(S,X1,X3,JL)
3206 C     
3207         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
3208 cc      SAVE /HPARNT/
3209         COMMON/LUJETSA/N,K(9000,5),P(9000,5),V(9000,5)
3210 cc      SAVE /LUJETSA/
3211       COMMON/RNDF77/NSEED
3212 cc      SAVE /RNDF77/
3213         SAVE   
3214 C     
3215              W=SQRT(S)
3216              X2=2.-X1-X3
3217              E1=.5*X1*W
3218              E3=.5*X3*W
3219              P1=SQRT(E1**2-P(JL,5)**2)
3220         P3=SQRT(E3**2-P(JL+1,5)**2)
3221         CBET=1.
3222         IF(P1.GT.0..AND.P3.GT.0.) CBET=(P(JL,5)**2
3223      &           +P(JL+1,5)**2+2.*E1*E3-S*(1.-X2))/(2.*P1*P3)
3224               IF(ABS(CBET).GT.1.0) CBET=MAX(-1.,MIN(1.,CBET))
3225               BET=ACOS(CBET)
3226      
3227 C.....MINIMIZE PT1-SQUARED PLUS PT3-SQUARED.....
3228               IF(P1.GE.P3) THEN
3229            PSI=.5*ULANGL(P1**2+P3**2*COS(2.*BET),-P3**2*SIN(2.*BET))
3230            PT1=P1*SIN(PSI)
3231            PZ1=P1*COS(PSI)
3232            PT3=P3*SIN(PSI+BET)
3233            PZ3=P3*COS(PSI+BET)
3234               ELSE IF(P3.GT.P1) THEN
3235            PSI=.5*ULANGL(P3**2+P1**2*COS(2.*BET),-P1**2*SIN(2.*BET))
3236            PT1=P1*SIN(BET+PSI)
3237            PZ1=-P1*COS(BET+PSI)
3238            PT3=P3*SIN(PSI)
3239            PZ3=-P3*COS(PSI)
3240               ENDIF
3241      
3242               DEL=2.0*HIPR1(40)*RANART(NSEED)
3243               P(JL,4)=E1
3244               P(JL,1)=PT1*SIN(DEL)
3245               P(JL,2)=-PT1*COS(DEL)
3246               P(JL,3)=PZ1
3247               P(JL+2,4)=E3
3248               P(JL+2,1)=PT3*SIN(DEL)
3249               P(JL+2,2)=-PT3*COS(DEL)
3250               P(JL+2,3)=PZ3
3251               P(JL+1,4)=W-E1-E3
3252               P(JL+1,1)=-P(JL,1)-P(JL+2,1)
3253               P(JL+1,2)=-P(JL,2)-P(JL+2,2)
3254               P(JL+1,3)=-P(JL,3)-P(JL+2,3)
3255               RETURN
3256               END
3257
3258
3259 C
3260 C*******************************************************************
3261 C        make  boost and rotation to entries from IMIN to IMAX
3262 C*******************************************************************
3263         SUBROUTINE ATROBO(THE,PHI,BEX,BEY,BEZ,IMIN,IMAX,IERROR)
3264         COMMON/LUJETSA/N,K(9000,5),P(9000,5),V(9000,5)
3265 cc      SAVE /LUJETSA/
3266         DIMENSION ROT(3,3),PV(3)
3267         DOUBLE PRECISION DP(4),DBEX,DBEY,DBEZ,DGA,DGA2,DBEP,DGABEP
3268         SAVE   
3269         IERROR=0
3270      
3271               IF(IMIN.LE.0 .OR. IMAX.GT.N .OR. IMIN.GT.IMAX) RETURN
3272
3273               IF(THE**2+PHI**2.GT.1E-20) THEN
3274 C...ROTATE (TYPICALLY FROM Z AXIS TO DIRECTION THETA,PHI)
3275            ROT(1,1)=COS(THE)*COS(PHI)
3276            ROT(1,2)=-SIN(PHI)
3277            ROT(1,3)=SIN(THE)*COS(PHI)
3278            ROT(2,1)=COS(THE)*SIN(PHI)
3279            ROT(2,2)=COS(PHI)
3280            ROT(2,3)=SIN(THE)*SIN(PHI)
3281            ROT(3,1)=-SIN(THE)
3282            ROT(3,2)=0.
3283            ROT(3,3)=COS(THE)
3284            DO 120 I=IMIN,IMAX
3285 C**************           IF(MOD(K(I,1)/10000,10).GE.6) GOTO 120
3286               DO 100 J=1,3
3287  100                 PV(J)=P(I,J)
3288                  DO 110 J=1,3
3289  110                    P(I,J)=ROT(J,1)*PV(1)+ROT(J,2)*PV(2)
3290      &                     +ROT(J,3)*PV(3)
3291  120                 CONTINUE
3292         ENDIF
3293      
3294               IF(BEX**2+BEY**2+BEZ**2.GT.1E-20) THEN
3295 C...LORENTZ BOOST (TYPICALLY FROM REST TO MOMENTUM/ENERGY=BETA)
3296                 DBEX=dble(BEX)
3297                 DBEY=dble(BEY)
3298                 DBEZ=dble(BEZ)
3299                 DGA2=1D0-DBEX**2-DBEY**2-DBEZ**2
3300                 IF(DGA2.LE.0D0) THEN
3301                         IERROR=1
3302                         RETURN
3303                 ENDIF
3304                 DGA=1D0/DSQRT(DGA2)
3305                 DO 140 I=IMIN,IMAX
3306 C*************           IF(MOD(K(I,1)/10000,10).GE.6) GOTO 140
3307                    DO 130 J=1,4
3308  130                  DP(J)=dble(P(I,J))
3309                    DBEP=DBEX*DP(1)+DBEY*DP(2)+DBEZ*DP(3)
3310                    DGABEP=DGA*(DGA*DBEP/(1D0+DGA)+DP(4))
3311                    P(I,1)=sngl(DP(1)+DGABEP*DBEX)
3312                    P(I,2)=sngl(DP(2)+DGABEP*DBEY)
3313                    P(I,3)=sngl(DP(3)+DGABEP*DBEZ)
3314                    P(I,4)=sngl(DGA*(DP(4)+DBEP))
3315 140                   CONTINUE
3316               ENDIF
3317      
3318               RETURN
3319               END
3320 C
3321 C
3322 C
3323         SUBROUTINE HIJHRD(JP,JT,JOUT,JFLG,IOPJT0)
3324 C
3325 C        IOPTJET=1, ALL JET WILL FORM SINGLE STRING SYSTEM
3326 C                0, ONLY Q-QBAR JET FORM SINGLE STRING SYSTEM
3327 C*******Perform jets production and fragmentation when JP JT *******
3328 C     scatter. JOUT-> number of hard scatterings precede this one  *
3329 C     for the the same pair(JP,JT). JFLG->a flag to show whether   *
3330 C     jets can be produced (with valence quark=1,gluon=2, q-qbar=3)*
3331 C     or not(0). Information of jets are in  COMMON/ATTJET and     *
3332 C     /MINJET. ABS(NFP(JP,6)) is the total number jets produced by *
3333 C    JP. If NFP(JP,6)<0 JP can not produce jet anymore.                   *
3334 C*******************************************************************
3335         PARAMETER (MAXSTR=150001)
3336         DIMENSION IP(100,2),IPQ(50),IPB(50),IT(100,2),ITQ(50),ITB(50)
3337         COMMON/hjcrdn/YP(3,300),YT(3,300)
3338 cc      SAVE /hjcrdn/
3339         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
3340 cc      SAVE /HPARNT/
3341         COMMON/HIJDAT/HIDAT0(10,10),HIDAT(10)
3342 cc      SAVE /HIJDAT/
3343         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
3344 cc      SAVE /HSTRNG/
3345         COMMON/HJJET1/NPJ(300),KFPJ(300,500),PJPX(300,500),
3346      &                PJPY(300,500),PJPZ(300,500),PJPE(300,500),
3347      &                PJPM(300,500),NTJ(300),KFTJ(300,500),
3348      &                PJTX(300,500),PJTY(300,500),PJTZ(300,500),
3349      &                PJTE(300,500),PJTM(300,500)
3350 cc      SAVE /HJJET1/
3351         COMMON/HJJET2/NSG,NJSG(MAXSTR),IASG(MAXSTR,3),K1SG(MAXSTR,100),
3352      &       K2SG(MAXSTR,100),PXSG(MAXSTR,100),PYSG(MAXSTR,100),
3353      &       PZSG(MAXSTR,100),PESG(MAXSTR,100),PMSG(MAXSTR,100)
3354 cc      SAVE /HJJET2/
3355 c        COMMON/HJJET4/NDR,IADR(900,2),KFDR(900),PDR(900,5)
3356         COMMON/HJJET4/NDR,IADR(MAXSTR,2),KFDR(MAXSTR),PDR(MAXSTR,5)
3357         common/xydr/rtdr(MAXSTR,2)
3358 cc      SAVE /HJJET4/
3359       COMMON/RNDF77/NSEED
3360 cc      SAVE /RNDF77/
3361 C************************************ HIJING common block
3362         COMMON/LUJETSA/N,K(9000,5),P(9000,5),V(9000,5)
3363 cc      SAVE /LUJETSA/
3364         COMMON/LUDAT1A/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
3365 cc      SAVE /LUDAT1A/
3366         COMMON/PYSUBSA/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
3367 cc      SAVE /PYSUBSA/
3368         COMMON/PYPARSA/MSTP(200),PARP(200),MSTI(200),PARI(200)
3369 cc      SAVE /PYPARSA/
3370         COMMON/PYINT1A/MINT(400),VINT(400)
3371 cc      SAVE /PYINT1A/
3372         COMMON/PYINT2A/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
3373 cc      SAVE /PYINT2A/
3374         COMMON/PYINT5A/NGEN(0:200,3),XSEC(0:200,3)
3375 cc      SAVE /PYINT5A/
3376         COMMON/HPINT/MINT4,MINT5,ATCO(200,20),ATXS(0:200)
3377 cc      SAVE /HPINT/
3378         SAVE   
3379 C*********************************** LU common block
3380         MXJT=500
3381 C                SIZE OF COMMON BLOCK FOR # OF PARTON PER STRING
3382         MXSG=900
3383 C                SIZE OF COMMON BLOCK FOR # OF SINGLE STRINGS
3384         MXSJ=100
3385 C                SIZE OF COMMON BLOCK FOR # OF PARTON PER SINGLE
3386 C                STRING
3387         JFLG=0
3388         IHNT2(11)=JP
3389         IHNT2(12)=JT
3390 C
3391         IOPJET=IOPJT0
3392         IF(IOPJET.EQ.1.AND.(NFP(JP,6).NE.0.OR.NFT(JT,6).NE.0))
3393      &                   IOPJET=0
3394         IF(JP.GT.IHNT2(1) .OR. JT.GT.IHNT2(3)) RETURN
3395         IF(NFP(JP,6).LT.0 .OR. NFT(JT,6).LT.0) RETURN
3396 C                ******** JP or JT can not produce jet anymore
3397 C
3398         IF(JOUT.EQ.0) THEN
3399                 EPP=PP(JP,4)+PP(JP,3)
3400                 EPM=PP(JP,4)-PP(JP,3)
3401                 ETP=PT(JT,4)+PT(JT,3)
3402                 ETM=PT(JT,4)-PT(JT,3)
3403                 IF(EPP.LT.0.0) GO TO 1000
3404                 IF(EPM.LT.0.0) GO TO 1000
3405                 IF(ETP.LT.0.0) GO TO 1000
3406                 IF(ETM.LT.0.0) GO TO 1000
3407                 IF(EPP/(EPM+0.01).LE.ETP/(ETM+0.01)) RETURN
3408         ENDIF
3409 C                ********for the first hard scattering of (JP,JT)
3410 C                        have collision only when Ycm(JP)>Ycm(JT)
3411
3412         ECUT1=HIPR1(1)+HIPR1(8)+PP(JP,14)+PP(JP,15)
3413         ECUT2=HIPR1(1)+HIPR1(8)+PT(JT,14)+PT(JT,15)
3414         IF(PP(JP,4).LE.ECUT1) THEN
3415                 NFP(JP,6)=-ABS(NFP(JP,6))
3416                 RETURN
3417         ENDIF
3418         IF(PT(JT,4).LE.ECUT2) THEN
3419                 NFT(JT,6)=-ABS(NFT(JT,6))
3420                 RETURN
3421         ENDIF
3422 C                *********must have enough energy to produce jets
3423
3424         MISS=0
3425         MISP=0
3426         MIST=0
3427 C
3428         IF(NFP(JP,10).EQ.0 .AND. NFT(JT,10).EQ.0) THEN
3429                 MINT(44)=MINT4
3430                 MINT(45)=MINT5
3431                 XSEC(0,1)=ATXS(0)
3432                 XSEC(11,1)=ATXS(11)
3433                 XSEC(12,1)=ATXS(12)
3434                 XSEC(28,1)=ATXS(28)
3435                 DO 120 I=1,20
3436                 COEF(11,I)=ATCO(11,I)
3437                 COEF(12,I)=ATCO(12,I)
3438                 COEF(28,I)=ATCO(28,I)
3439 120                CONTINUE
3440         ELSE
3441                 ISUB11=0
3442                 ISUB12=0
3443                 ISUB28=0
3444                 IF(XSEC(11,1).NE.0) ISUB11=1
3445                 IF(XSEC(12,1).NE.0) ISUB12=1
3446                 IF(XSEC(28,1).NE.0) ISUB28=1                
3447                 MINT(44)=MINT4-ISUB11-ISUB12-ISUB28
3448                 MINT(45)=MINT5-ISUB11-ISUB12-ISUB28
3449                 XSEC(0,1)=ATXS(0)-ATXS(11)-ATXS(12)-ATXS(28)
3450                 XSEC(11,1)=0.0
3451                 XSEC(12,1)=0.0
3452                 XSEC(28,1)=0.0        
3453                 DO 110 I=1,20
3454                 COEF(11,I)=0.0
3455                 COEF(12,I)=0.0
3456                 COEF(28,I)=0.0
3457 110                CONTINUE
3458         ENDIF                
3459 C        ********Scatter the valence quarks only once per NN 
3460 C       collision,
3461 C                afterwards only gluon can have hard scattering.
3462  155        CALL PYTHIAA
3463         JJ=MINT(31)
3464         IF(JJ.NE.1) GO TO 155
3465 C                *********one hard collision at a time
3466         IF(K(7,2).EQ.-K(8,2)) THEN
3467                 QMASS2=(P(7,4)+P(8,4))**2-(P(7,1)+P(8,1))**2
3468      &                        -(P(7,2)+P(8,2))**2-(P(7,3)+P(8,3))**2
3469                 QM=ULMASS(K(7,2))
3470                 IF(QMASS2.LT.(2.0*QM+HIPR1(1))**2) GO TO 155
3471         ENDIF
3472 C                ********q-qbar jets must has minimum mass HIPR1(1)
3473         PXP=PP(JP,1)-P(3,1)
3474         PYP=PP(JP,2)-P(3,2)
3475         PZP=PP(JP,3)-P(3,3)
3476         PEP=PP(JP,4)-P(3,4)
3477         PXT=PT(JT,1)-P(4,1)
3478         PYT=PT(JT,2)-P(4,2)
3479         PZT=PT(JT,3)-P(4,3)
3480         PET=PT(JT,4)-P(4,4)
3481
3482         IF(PEP.LE.ECUT1) THEN
3483                 MISP=MISP+1
3484                 IF(MISP.LT.50) GO TO 155
3485                 NFP(JP,6)=-ABS(NFP(JP,6))
3486                 RETURN
3487         ENDIF
3488         IF(PET.LE.ECUT2) THEN
3489                 MIST=MIST+1
3490                 IF(MIST.LT.50) GO TO 155
3491                 NFT(JT,6)=-ABS(NFT(JT,6))
3492                 RETURN
3493         ENDIF
3494 C                ******** if the remain energy<ECUT the proj or targ
3495 C                         can not produce jet anymore
3496
3497         WP=PEP+PZP+PET+PZT
3498         WM=PEP-PZP+PET-PZT
3499         IF(WP.LT.0.0 .OR. WM.LT.0.0) THEN
3500                 MISS=MISS+1
3501 clin-6/2009 Let user set the limit when selecting high-Pt events 
3502 c     because more attempts may be needed:
3503 c                IF(MISS.LT.50) GO TO 155
3504                 if(pttrig.gt.0) then
3505                    if(MISS.LT.maxmiss) then
3506                 write(6,*) 'Failed to generate minijet Pt>',pttrig,'GeV'
3507                       GO TO 155
3508                    endif
3509                 else
3510                    IF(MISS.LT.50) GO TO 155
3511                 endif
3512
3513                 RETURN
3514         ENDIF
3515 C                ********the total W+, W- must be positive
3516         SW=WP*WM
3517         AMPX=SQRT((ECUT1-HIPR1(8))**2+PXP**2+PYP**2+0.01)
3518         AMTX=SQRT((ECUT2-HIPR1(8))**2+PXT**2+PYT**2+0.01)
3519         SXX=(AMPX+AMTX)**2
3520         IF(SW.LT.SXX.OR.VINT(43).LT.HIPR1(1)) THEN
3521                 MISS=MISS+1
3522 clin-6/2009 ctest on
3523 c                IF(MISS.LT.50) GO TO 155
3524                 IF(MISS.GT.maxmiss) GO TO 155
3525                 RETURN
3526         ENDIF  
3527 C                ********the proj and targ remnants must have at least
3528 C                        a CM energy that can produce two strings
3529 C                        with minimum mass HIPR1(1)(see HIJSFT HIJFRG)
3530 C
3531         HINT1(41)=P(7,1)
3532         HINT1(42)=P(7,2)
3533         HINT1(43)=P(7,3)
3534         HINT1(44)=P(7,4)
3535         HINT1(45)=P(7,5)
3536         HINT1(46)=SQRT(P(7,1)**2+P(7,2)**2)
3537         HINT1(51)=P(8,1)
3538         HINT1(52)=P(8,2)
3539         HINT1(53)=P(8,3)
3540         HINT1(54)=P(8,4)
3541         HINT1(55)=P(8,5)
3542         HINT1(56)=SQRT(P(8,1)**2+P(8,2)**2) 
3543         IHNT2(14)=K(7,2)
3544         IHNT2(15)=K(8,2)
3545 C
3546         PINIRD=(1.0-EXP(-2.0*(VINT(47)-HIDAT(1))))
3547      &                /(1.0+EXP(-2.0*(VINT(47)-HIDAT(1))))
3548         IINIRD=0
3549         IF(RANART(NSEED).LE.PINIRD) IINIRD=1
3550         IF(K(7,2).EQ.-K(8,2)) GO TO 190
3551         IF(K(7,2).EQ.21.AND.K(8,2).EQ.21.AND.IOPJET.EQ.1) GO TO 190
3552 C*******************************************************************
3553 C        gluon  jets are going to be connectd with
3554 C        the final leadng string of quark-aintquark
3555 C*******************************************************************
3556         JFLG=2
3557         JPP=0
3558         LPQ=0
3559         LPB=0
3560         JTT=0
3561         LTQ=0
3562         LTB=0
3563         IS7=0
3564         IS8=0
3565         HINT1(47)=0.0
3566         HINT1(48)=0.0
3567         HINT1(49)=0.0
3568         HINT1(50)=0.0
3569         HINT1(67)=0.0
3570         HINT1(68)=0.0
3571         HINT1(69)=0.0
3572         HINT1(70)=0.0
3573         DO 180 I=9,N
3574            IF(K(I,3).EQ.1 .OR. K(I,3).EQ.2.OR.
3575      &                   ABS(K(I,2)).GT.30) GO TO 180
3576 C************************************************************
3577            IF(K(I,3).EQ.7) THEN
3578               HINT1(47)=HINT1(47)+P(I,1)
3579               HINT1(48)=HINT1(48)+P(I,2)
3580               HINT1(49)=HINT1(49)+P(I,3)
3581               HINT1(50)=HINT1(50)+P(I,4)
3582            ENDIF
3583            IF(K(I,3).EQ.8) THEN
3584               HINT1(67)=HINT1(67)+P(I,1)
3585               HINT1(68)=HINT1(68)+P(I,2)
3586               HINT1(69)=HINT1(69)+P(I,3)
3587               HINT1(70)=HINT1(70)+P(I,4)
3588            ENDIF
3589 C************************modifcation made on Apr 10. 1996*****
3590            IF(K(I,2).GT.21.AND.K(I,2).LE.30) THEN
3591               NDR=NDR+1
3592               IADR(NDR,1)=JP
3593               IADR(NDR,2)=JT
3594               KFDR(NDR)=K(I,2)
3595               PDR(NDR,1)=P(I,1)
3596               PDR(NDR,2)=P(I,2)
3597               PDR(NDR,3)=P(I,3)
3598               PDR(NDR,4)=P(I,4)
3599               PDR(NDR,5)=P(I,5)
3600               rtdr(NDR,1)=0.5*(YP(1,JP)+YT(1,JT))
3601               rtdr(NDR,2)=0.5*(YP(2,JP)+YT(2,JT))
3602 C************************************************************
3603               GO TO 180
3604 C************************correction made on Oct. 14,1994*****
3605            ENDIF
3606            IF(K(I,3).EQ.7.OR.K(I,3).EQ.3) THEN
3607               IF(K(I,3).EQ.7.AND.K(I,2).NE.21.AND.K(I,2).EQ.K(7,2)
3608      &                     .AND.IS7.EQ.0) THEN
3609                  PP(JP,10)=P(I,1)
3610                  PP(JP,11)=P(I,2)
3611                  PP(JP,12)=P(I,3)
3612                  PZP=PZP+P(I,3)
3613                  PEP=PEP+P(I,4)
3614                  NFP(JP,10)=1
3615                  IS7=1
3616                  GO TO 180
3617               ENDIF
3618               IF(K(I,3).EQ.3.AND.(K(I,2).NE.21.OR.
3619      &                               IINIRD.EQ.0)) THEN
3620                  PXP=PXP+P(I,1)
3621                  PYP=PYP+P(I,2)
3622                  PZP=PZP+P(I,3)
3623                  PEP=PEP+P(I,4)
3624                  GO TO 180 
3625               ENDIF
3626               JPP=JPP+1
3627               IP(JPP,1)=I
3628               IP(JPP,2)=0
3629               IF(K(I,2).NE.21) THEN
3630                  IF(K(I,2).GT.0) THEN
3631                     LPQ=LPQ+1
3632                     IPQ(LPQ)=JPP
3633                     IP(JPP,2)=LPQ
3634                  ELSE IF(K(I,2).LT.0) THEN
3635                     LPB=LPB+1
3636                     IPB(LPB)=JPP
3637                     IP(JPP,2)=-LPB
3638                  ENDIF
3639               ENDIF
3640            ELSE IF(K(I,3).EQ.8.OR.K(I,3).EQ.4) THEN
3641               IF(K(I,3).EQ.8.AND.K(I,2).NE.21.AND.K(I,2).EQ.K(8,2)
3642      &                                .AND.IS8.EQ.0) THEN
3643                  PT(JT,10)=P(I,1)
3644                  PT(JT,11)=P(I,2)
3645                  PT(JT,12)=P(I,3)
3646                  PZT=PZT+P(I,3)
3647                  PET=PET+P(I,4)
3648                  NFT(JT,10)=1
3649                  IS8=1
3650                  GO TO 180
3651               ENDIF                        
3652               IF(K(I,3).EQ.4.AND.(K(I,2).NE.21.OR.
3653      &                             IINIRD.EQ.0)) THEN
3654                  PXT=PXT+P(I,1)
3655                  PYT=PYT+P(I,2)
3656                  PZT=PZT+P(I,3)
3657                  PET=PET+P(I,4)
3658                  GO TO 180
3659               ENDIF
3660               JTT=JTT+1
3661               IT(JTT,1)=I
3662               IT(JTT,2)=0
3663               IF(K(I,2).NE.21) THEN
3664                  IF(K(I,2).GT.0) THEN
3665                     LTQ=LTQ+1
3666                     ITQ(LTQ)=JTT
3667                     IT(JTT,2)=LTQ
3668                  ELSE IF(K(I,2).LT.0) THEN
3669                     LTB=LTB+1
3670                     ITB(LTB)=JTT
3671                     IT(JTT,2)=-LTB
3672                  ENDIF
3673               ENDIF
3674            ENDIF
3675  180        CONTINUE
3676 c
3677 c
3678         IF(LPQ.NE.LPB .OR. LTQ.NE.LTB) THEN
3679                 MISS=MISS+1
3680 clin-6/2009 ctest on
3681 c                IF(MISS.LE.50) GO TO 155
3682                 IF(MISS.LE.maxmiss) GO TO 155
3683                 WRITE(6,*) ' Q -QBAR NOT MATCHED IN HIJHRD'
3684                 JFLG=0
3685                 RETURN
3686         ENDIF
3687 C****The following will rearrange the partons so that a quark is***
3688 C****allways followed by an anti-quark ****************************
3689
3690         J=0
3691 181        J=J+1
3692         IF(J.GT.JPP) GO TO 182
3693         IF(IP(J,2).EQ.0) THEN
3694                 GO TO 181
3695         ELSE IF(IP(J,2).NE.0) THEN
3696                 LP=ABS(IP(J,2))
3697                 IP1=IP(J,1)
3698                 IP2=IP(J,2)
3699                 IP(J,1)=IP(IPQ(LP),1)
3700                 IP(J,2)=IP(IPQ(LP),2)
3701                 IP(IPQ(LP),1)=IP1
3702                 IP(IPQ(LP),2)=IP2
3703                 IF(IP2.GT.0) THEN
3704                         IPQ(IP2)=IPQ(LP)
3705                 ELSE IF(IP2.LT.0) THEN
3706                         IPB(-IP2)=IPQ(LP)
3707                 ENDIF
3708 C                ********replace J with a quark
3709                 IP1=IP(J+1,1)
3710                 IP2=IP(J+1,2)
3711                 IP(J+1,1)=IP(IPB(LP),1)
3712                 IP(J+1,2)=IP(IPB(LP),2)
3713                 IP(IPB(LP),1)=IP1
3714                 IP(IPB(LP),2)=IP2
3715                 IF(IP2.GT.0) THEN
3716                         IPQ(IP2)=IPB(LP)
3717                 ELSE IF(IP2.LT.0) THEN
3718                         IPB(-IP2)=IPB(LP)
3719                 ENDIF
3720 C                ******** replace J+1 with anti-quark
3721                 J=J+1
3722                 GO TO 181
3723         ENDIF
3724
3725 182        J=0
3726 183        J=J+1
3727         IF(J.GT.JTT) GO TO 184
3728         IF(IT(J,2).EQ.0) THEN
3729                 GO TO 183
3730         ELSE IF(IT(J,2).NE.0) THEN
3731                 LT=ABS(IT(J,2))
3732                 IT1=IT(J,1)
3733                 IT2=IT(J,2)
3734                 IT(J,1)=IT(ITQ(LT),1)
3735                 IT(J,2)=IT(ITQ(LT),2)
3736                 IT(ITQ(LT),1)=IT1
3737                 IT(ITQ(LT),2)=IT2
3738                 IF(IT2.GT.0) THEN
3739                         ITQ(IT2)=ITQ(LT)
3740                 ELSE IF(IT2.LT.0) THEN
3741                         ITB(-IT2)=ITQ(LT)
3742                 ENDIF
3743 C                ********replace J with a quark
3744                 IT1=IT(J+1,1)
3745                 IT2=IT(J+1,2)
3746                 IT(J+1,1)=IT(ITB(LT),1)
3747                 IT(J+1,2)=IT(ITB(LT),2)
3748                 IT(ITB(LT),1)=IT1
3749                 IT(ITB(LT),2)=IT2
3750                 IF(IT2.GT.0) THEN
3751                         ITQ(IT2)=ITB(LT)
3752                 ELSE IF(IT2.LT.0) THEN
3753                         ITB(-IT2)=ITB(LT)
3754                 ENDIF
3755 C                ******** replace J+1 with anti-quark
3756                 J=J+1
3757                 GO TO 183
3758
3759         ENDIF
3760
3761 184        CONTINUE
3762         IF(NPJ(JP)+JPP.GT.MXJT.OR.NTJ(JT)+JTT.GT.MXJT) THEN
3763                 JFLG=0
3764                 WRITE(6,*) 'number of partons per string exceeds'
3765                 WRITE(6,*) 'the common block size'
3766                 RETURN
3767         ENDIF
3768 C                        ********check the bounds of common blocks
3769         DO 186 J=1,JPP
3770                 KFPJ(JP,NPJ(JP)+J)=K(IP(J,1),2)
3771                 PJPX(JP,NPJ(JP)+J)=P(IP(J,1),1)
3772                 PJPY(JP,NPJ(JP)+J)=P(IP(J,1),2)
3773                 PJPZ(JP,NPJ(JP)+J)=P(IP(J,1),3)
3774                 PJPE(JP,NPJ(JP)+J)=P(IP(J,1),4)
3775                 PJPM(JP,NPJ(JP)+J)=P(IP(J,1),5)
3776 186        CONTINUE
3777         NPJ(JP)=NPJ(JP)+JPP
3778         DO 188 J=1,JTT
3779                 KFTJ(JT,NTJ(JT)+J)=K(IT(J,1),2)
3780                 PJTX(JT,NTJ(JT)+J)=P(IT(J,1),1)
3781                 PJTY(JT,NTJ(JT)+J)=P(IT(J,1),2)
3782                 PJTZ(JT,NTJ(JT)+J)=P(IT(J,1),3)
3783                 PJTE(JT,NTJ(JT)+J)=P(IT(J,1),4)
3784                 PJTM(JT,NTJ(JT)+J)=P(IT(J,1),5)
3785 188        CONTINUE
3786         NTJ(JT)=NTJ(JT)+JTT
3787         GO TO 900
3788 C*****************************************************************
3789 CThis is the case of a quark-antiquark jet it will fragment alone
3790 C****************************************************************
3791 190        JFLG=3
3792         IF(K(7,2).NE.21.AND.K(8,2).NE.21.AND.
3793      &                   K(7,2)*K(8,2).GT.0) GO TO 155
3794         JPP=0
3795         LPQ=0
3796         LPB=0
3797         DO 200 I=9,N
3798            IF(K(I,3).EQ.1.OR.K(I,3).EQ.2.OR.
3799      &                  ABS(K(I,2)).GT.30) GO TO 200
3800                 IF(K(I,2).GT.21.AND.K(I,2).LE.30) THEN
3801                         NDR=NDR+1
3802                         IADR(NDR,1)=JP
3803                         IADR(NDR,2)=JT
3804                         KFDR(NDR)=K(I,2)
3805                         PDR(NDR,1)=P(I,1)
3806                         PDR(NDR,2)=P(I,2)
3807                         PDR(NDR,3)=P(I,3)
3808                         PDR(NDR,4)=P(I,4)
3809                         PDR(NDR,5)=P(I,5)
3810                         rtdr(NDR,1)=0.5*(YP(1,JP)+YT(1,JT))
3811                         rtdr(NDR,2)=0.5*(YP(2,JP)+YT(2,JT))
3812 C************************************************************
3813                         GO TO 200
3814 C************************correction made on Oct. 14,1994*****
3815                 ENDIF
3816                 IF(K(I,3).EQ.3.AND.(K(I,2).NE.21.OR.
3817      &                              IINIRD.EQ.0)) THEN
3818                         PXP=PXP+P(I,1)
3819                         PYP=PYP+P(I,2)
3820                         PZP=PZP+P(I,3)
3821                         PEP=PEP+P(I,4)
3822                         GO TO 200
3823                 ENDIF
3824                 IF(K(I,3).EQ.4.AND.(K(I,2).NE.21.OR.
3825      &                                IINIRD.EQ.0)) THEN
3826                         PXT=PXT+P(I,1)
3827                         PYT=PYT+P(I,2)
3828                         PZT=PZT+P(I,3)
3829                         PET=PET+P(I,4)
3830                         GO TO 200
3831                 ENDIF
3832                 JPP=JPP+1
3833                 IP(JPP,1)=I
3834                 IP(JPP,2)=0
3835                 IF(K(I,2).NE.21) THEN
3836                         IF(K(I,2).GT.0) THEN
3837                                 LPQ=LPQ+1
3838                                 IPQ(LPQ)=JPP
3839                                 IP(JPP,2)=LPQ
3840                         ELSE IF(K(I,2).LT.0) THEN
3841                                 LPB=LPB+1
3842                                 IPB(LPB)=JPP
3843                                 IP(JPP,2)=-LPB
3844                         ENDIF
3845                 ENDIF
3846 200        CONTINUE
3847         IF(LPQ.NE.LPB) THEN
3848            MISS=MISS+1
3849 clin-6/2009 ctest on
3850 c           IF(MISS.LE.50) GO TO 155
3851            IF(MISS.LE.maxmiss) GO TO 155
3852            WRITE(6,*) LPQ,LPB, 'Q-QBAR NOT CONSERVED OR NOT MATCHED'
3853            JFLG=0
3854            RETURN
3855         ENDIF
3856
3857 C**** The following will rearrange the partons so that a quark is***
3858 C**** allways followed by an anti-quark ****************************
3859         J=0
3860 220        J=J+1
3861         IF(J.GT.JPP) GO TO 222
3862         IF(IP(J,2).EQ.0) GO TO 220
3863                 LP=ABS(IP(J,2))
3864                 IP1=IP(J,1)
3865                 IP2=IP(J,2)
3866                 IP(J,1)=IP(IPQ(LP),1)
3867                 IP(J,2)=IP(IPQ(LP),2)
3868                 IP(IPQ(LP),1)=IP1
3869                 IP(IPQ(LP),2)=IP2
3870                 IF(IP2.GT.0) THEN
3871                         IPQ(IP2)=IPQ(LP)
3872                 ELSE IF(IP2.LT.0) THEN
3873                         IPB(-IP2)=IPQ(LP)
3874                 ENDIF
3875                 IPQ(LP)=J
3876 C                ********replace J with a quark
3877                 IP1=IP(J+1,1)
3878                 IP2=IP(J+1,2)
3879                 IP(J+1,1)=IP(IPB(LP),1)
3880                 IP(J+1,2)=IP(IPB(LP),2)
3881                 IP(IPB(LP),1)=IP1
3882                 IP(IPB(LP),2)=IP2
3883                 IF(IP2.GT.0) THEN
3884                         IPQ(IP2)=IPB(LP)
3885                 ELSE IF(IP2.LT.0) THEN
3886                         IPB(-IP2)=IPB(LP)
3887                 ENDIF
3888 C                ******** replace J+1 with an anti-quark
3889                 IPB(LP)=J+1
3890                 J=J+1
3891                 GO TO 220
3892
3893 222        CONTINUE
3894         IF(LPQ.GE.1) THEN
3895                 DO 240 L0=2,LPQ
3896                         IP1=IP(2*L0-3,1)
3897                         IP2=IP(2*L0-3,2)
3898                         IP(2*L0-3,1)=IP(IPQ(L0),1)
3899                         IP(2*L0-3,2)=IP(IPQ(L0),2)
3900                         IP(IPQ(L0),1)=IP1
3901                         IP(IPQ(L0),2)=IP2
3902                         IF(IP2.GT.0) THEN
3903                                 IPQ(IP2)=IPQ(L0)
3904                         ELSE IF(IP2.LT.0) THEN
3905                                 IPB(-IP2)=IPQ(L0)
3906                         ENDIF
3907                         IPQ(L0)=2*L0-3
3908 C
3909                         IP1=IP(2*L0-2,1)
3910                         IP2=IP(2*L0-2,2)
3911                         IP(2*L0-2,1)=IP(IPB(L0),1)
3912                         IP(2*L0-2,2)=IP(IPB(L0),2)
3913                         IP(IPB(L0),1)=IP1
3914                         IP(IPB(L0),2)=IP2
3915                         IF(IP2.GT.0) THEN
3916                                 IPQ(IP2)=IPB(L0)
3917                         ELSE IF(IP2.LT.0) THEN
3918                                 IPB(-IP2)=IPB(L0)
3919                         ENDIF
3920                         IPB(L0)=2*L0-2
3921 240                CONTINUE
3922 C                ********move all the qqbar pair to the front of 
3923 C                                the list, except the first pair
3924                 IP1=IP(2*LPQ-1,1)
3925                 IP2=IP(2*LPQ-1,2)
3926                 IP(2*LPQ-1,1)=IP(IPQ(1),1)
3927                 IP(2*LPQ-1,2)=IP(IPQ(1),2)
3928                 IP(IPQ(1),1)=IP1
3929                 IP(IPQ(1),2)=IP2
3930                 IF(IP2.GT.0) THEN
3931                         IPQ(IP2)=IPQ(1)
3932                 ELSE IF(IP2.LT.0) THEN
3933                         IPB(-IP2)=IPQ(1)
3934                 ENDIF
3935                 IPQ(1)=2*LPQ-1
3936 C                ********move the first quark to the beginning of
3937 C                                the last string system
3938                 IP1=IP(JPP,1)
3939                 IP2=IP(JPP,2)
3940                 IP(JPP,1)=IP(IPB(1),1)
3941                 IP(JPP,2)=IP(IPB(1),2)
3942                 IP(IPB(1),1)=IP1
3943                 IP(IPB(1),2)=IP2
3944                 IF(IP2.GT.0) THEN
3945                         IPQ(IP2)=IPB(1)
3946                 ELSE IF(IP2.LT.0) THEN
3947                         IPB(-IP2)=IPB(1)
3948                 ENDIF
3949                 IPB(1)=JPP
3950 C                ********move the first anti-quark to the end of the 
3951 C                        last string system
3952         ENDIF
3953         IF(NSG.GE.MXSG) THEN
3954            JFLG=0
3955            WRITE(6,*) 'number of jets forming single strings exceeds'
3956            WRITE(6,*) 'the common block size'
3957            RETURN
3958         ENDIF
3959         IF(JPP.GT.MXSJ) THEN
3960            JFLG=0
3961            WRITE(6,*) 'number of partons per single jet system'
3962            WRITE(6,*) 'exceeds the common block size'
3963            RETURN
3964         ENDIF
3965 C                ********check the bounds of common block size
3966         NSG=NSG+1
3967         NJSG(NSG)=JPP
3968         IASG(NSG,1)=JP
3969         IASG(NSG,2)=JT
3970         IASG(NSG,3)=0
3971         DO 300 I=1,JPP
3972                 K1SG(NSG,I)=2
3973                 K2SG(NSG,I)=K(IP(I,1),2)
3974                 IF(K2SG(NSG,I).LT.0) K1SG(NSG,I)=1
3975                 PXSG(NSG,I)=P(IP(I,1),1)
3976                 PYSG(NSG,I)=P(IP(I,1),2)
3977                 PZSG(NSG,I)=P(IP(I,1),3)
3978                 PESG(NSG,I)=P(IP(I,1),4)
3979                 PMSG(NSG,I)=P(IP(I,1),5)
3980 300        CONTINUE
3981         K1SG(NSG,1)=2
3982         K1SG(NSG,JPP)=1
3983 C******* reset the energy-momentum of incoming particles ********
3984 900        PP(JP,1)=PXP
3985         PP(JP,2)=PYP
3986         PP(JP,3)=PZP
3987         PP(JP,4)=PEP
3988         PP(JP,5)=0.0
3989         PT(JT,1)=PXT
3990         PT(JT,2)=PYT
3991         PT(JT,3)=PZT
3992         PT(JT,4)=PET
3993         PT(JT,5)=0.0
3994
3995         NFP(JP,6)=NFP(JP,6)+1
3996         NFT(JT,6)=NFT(JT,6)+1
3997         RETURN
3998 C
3999 1000        JFLG=-1
4000         IF(IHPR2(10).EQ.0) RETURN
4001         WRITE(6,*) 'Fatal HIJHRD error'
4002         WRITE(6,*) JP, ' proj E+,E-',EPP,EPM,' status',NFP(JP,5)
4003         WRITE(6,*) JT, ' targ E+,E_',ETP,ETM,' status',NFT(JT,5)
4004         RETURN
4005         END
4006 C
4007 C
4008 C
4009 C
4010 C
4011         SUBROUTINE JETINI(JP,JT,itrig)
4012 C*******Initialize PYTHIA for jet production**********************
4013 C        itrig=0: for normal processes
4014 C        itrig=1: for triggered processes
4015 C       JP: sequence number of the projectile
4016 C       JT: sequence number of the target
4017 C     For A+A collisions, one has to initilize pythia
4018 C     separately for each type of collisions, pp, pn,np and nn,
4019 C     or hp and hn for hA collisions. In this subroutine we use the following
4020 C     catalogue for different type of collisions:
4021 C     h+h: h+h (itype=1)
4022 C     h+A: h+p (itype=1), h+n (itype=2)
4023 C     A+h: p+h (itype=1), n+h (itype=2)
4024 C     A+A: p+p (itype=1), p+n (itype=2), n+p (itype=3), n+n (itype=4)
4025 C*****************************************************************
4026         CHARACTER BEAM*16,TARG*16
4027         DIMENSION XSEC0(8,0:200),COEF0(8,200,20),INI(8),
4028      &                MINT44(8),MINT45(8)
4029         COMMON/hjcrdn/YP(3,300),YT(3,300)
4030 cc      SAVE /hjcrdn/
4031         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
4032 cc      SAVE /HPARNT/
4033         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
4034 cc      SAVE /HSTRNG/
4035         COMMON/HPINT/MINT4,MINT5,ATCO(200,20),ATXS(0:200)
4036 cc      SAVE /HPINT/
4037 C
4038         COMMON/LUDAT1A/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
4039 cc      SAVE /LUDAT1A/
4040         COMMON/LUDAT3A/MDCY(500,3),MDME(2000,2),BRAT(2000),KFDP(2000,5)    
4041 cc      SAVE /LUDAT3A/
4042         COMMON/PYSUBSA/MSEL,MSUB(200),KFIN(2,-40:40),CKIN(200)
4043 cc      SAVE /PYSUBSA/
4044         COMMON/PYPARSA/MSTP(200),PARP(200),MSTI(200),PARI(200)
4045 cc      SAVE /PYPARSA/
4046         COMMON/PYINT1A/MINT(400),VINT(400)
4047 cc      SAVE /PYINT1A/
4048         COMMON/PYINT2A/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2)
4049 cc      SAVE /PYINT2A/
4050         COMMON/PYINT5A/NGEN(0:200,3),XSEC(0:200,3)
4051 cc      SAVE /PYINT5A/
4052         SAVE
4053 clin        DATA INI/8*0/ilast/-1/
4054         DATA INI/8*0/,ilast/-1/
4055 C
4056         IHNT2(11)=JP
4057         IHNT2(12)=JT
4058         IF(IHNT2(5).NE.0 .AND. IHNT2(6).NE.0) THEN
4059            itype=1
4060         ELSE IF(IHNT2(5).NE.0 .AND. IHNT2(6).EQ.0) THEN
4061            itype=1
4062            IF(NFT(JT,4).EQ.2112) itype=2
4063         ELSE IF(IHNT2(5).EQ.0 .AND. IHNT2(6).NE.0) THEN
4064            itype=1
4065            IF(NFP(JP,4).EQ.2112) itype=2
4066         ELSE
4067            IF(NFP(JP,4).EQ.2212 .AND. NFT(JT,4).EQ.2212) THEN
4068               itype=1
4069            ELSE IF(NFP(JP,4).EQ.2212 .AND. NFT(JT,4).EQ.2112) THEN
4070               itype=2
4071            ELSE IF(NFP(JP,4).EQ.2112 .AND. NFT(JT,4).EQ.2212) THEN
4072               itype=3
4073            ELSE
4074               itype=4
4075            ENDIF
4076         ENDIF
4077 c
4078         IF(itrig.NE.0) GO TO 160
4079         IF(itrig.EQ.ilast) GO TO 150
4080         MSTP(2)=2
4081 c                        ********second order running alpha_strong
4082         MSTP(33)=1
4083         PARP(31)=HIPR1(17)
4084 C                        ********inclusion of K factor
4085         MSTP(51)=3
4086 C                        ********Duke-Owens set 1 structure functions
4087         MSTP(61)=1
4088 C                        ********INITIAL STATE RADIATION
4089         MSTP(71)=1
4090 C                        ********FINAL STATE RADIATION
4091         IF(IHPR2(2).EQ.0.OR.IHPR2(2).EQ.2) MSTP(61)=0
4092         IF(IHPR2(2).EQ.0.OR.IHPR2(2).EQ.1) MSTP(71)=0
4093 c
4094         MSTP(81)=0
4095 C                        ******** NO MULTIPLE INTERACTION
4096         MSTP(82)=1
4097 C                        *******STRUCTURE OF MUTLIPLE INTERACTION
4098         MSTP(111)=0
4099 C                ********frag off(have to be done by local call)
4100         IF(IHPR2(10).EQ.0) MSTP(122)=0
4101 C                ********No printout of initialization information
4102         PARP(81)=HIPR1(8)
4103         CKIN(5)=HIPR1(8)
4104         CKIN(3)=HIPR1(8)
4105         CKIN(4)=HIPR1(9)
4106         IF(HIPR1(9).LE.HIPR1(8)) CKIN(4)=-1.0
4107         CKIN(9)=-10.0
4108         CKIN(10)=10.0
4109         MSEL=0
4110         DO 100 ISUB=1,200
4111            MSUB(ISUB)=0
4112  100    CONTINUE
4113         MSUB(11)=1
4114         MSUB(12)=1
4115         MSUB(13)=1
4116         MSUB(28)=1
4117         MSUB(53)=1
4118         MSUB(68)=1
4119         MSUB(81)=1
4120         MSUB(82)=1
4121         DO 110 J=1,MIN(8,MDCY(21,3))
4122  110    MDME(MDCY(21,2)+J-1,1)=0
4123         ISEL=4
4124         IF(HINT1(1).GE.20.0 .and. IHPR2(18).EQ.1) ISEL=5
4125         MDME(MDCY(21,2)+ISEL-1,1)=1
4126 C                        ********QCD subprocesses
4127         MSUB(14)=1
4128         MSUB(18)=1
4129         MSUB(29)=1
4130 C                       ******* direct photon production
4131  150    IF(INI(itype).NE.0) GO TO 800
4132         GO TO 400
4133 C
4134 C        *****triggered subprocesses, jet, photon, heavy quark and DY
4135 C
4136  160    itype=4+itype
4137         IF(itrig.EQ.ilast) GO TO 260
4138         PARP(81)=ABS(HIPR1(10))-0.25
4139         CKIN(5)=ABS(HIPR1(10))-0.25
4140         CKIN(3)=ABS(HIPR1(10))-0.25
4141         CKIN(4)=ABS(HIPR1(10))+0.25
4142         IF(HIPR1(10).LT.HIPR1(8)) CKIN(4)=-1.0
4143 c
4144         MSEL=0
4145         DO 101 ISUB=1,200
4146            MSUB(ISUB)=0
4147  101    CONTINUE
4148         IF(IHPR2(3).EQ.1) THEN
4149            MSUB(11)=1
4150            MSUB(12)=1
4151            MSUB(13)=1
4152            MSUB(28)=1
4153            MSUB(53)=1
4154            MSUB(68)=1
4155            MSUB(81)=1
4156            MSUB(82)=1
4157            MSUB(14)=1
4158            MSUB(18)=1
4159            MSUB(29)=1
4160            DO 102 J=1,MIN(8,MDCY(21,3))
4161  102           MDME(MDCY(21,2)+J-1,1)=0
4162            ISEL=4
4163            IF(HINT1(1).GE.20.0 .and. IHPR2(18).EQ.1) ISEL=5
4164            MDME(MDCY(21,2)+ISEL-1,1)=1
4165 C                        ********QCD subprocesses
4166         ELSE IF(IHPR2(3).EQ.2) THEN
4167            MSUB(14)=1
4168            MSUB(18)=1
4169            MSUB(29)=1
4170 C                ********Direct photon production
4171 c                q+qbar->g+gamma,q+qbar->gamma+gamma, q+g->q+gamma
4172         ELSE IF(IHPR2(3).EQ.3) THEN
4173            CKIN(3)=MAX(0.0,HIPR1(10))
4174            CKIN(5)=HIPR1(8)
4175            PARP(81)=HIPR1(8)
4176            MSUB(81)=1
4177            MSUB(82)=1
4178            DO 105 J=1,MIN(8,MDCY(21,3))
4179  105           MDME(MDCY(21,2)+J-1,1)=0
4180            ISEL=4
4181            IF(HINT1(1).GE.20.0 .and. IHPR2(18).EQ.1) ISEL=5
4182            MDME(MDCY(21,2)+ISEL-1,1)=1
4183 C             **********Heavy quark production
4184         ENDIF
4185 260        IF(INI(itype).NE.0) GO TO 800
4186 C
4187 C
4188 400        INI(itype)=1
4189         IF(IHPR2(10).EQ.0) MSTP(122)=0
4190         IF(NFP(JP,4).EQ.2212) THEN
4191                 BEAM='P'
4192         ELSE IF(NFP(JP,4).EQ.-2212) THEN
4193                 BEAM='P~'
4194         ELSE IF(NFP(JP,4).EQ.2112) THEN
4195                 BEAM='N'
4196         ELSE IF(NFP(JP,4).EQ.-2112) THEN
4197                 BEAM='N~'
4198         ELSE IF(NFP(JP,4).EQ.211) THEN
4199                 BEAM='PI+'
4200         ELSE IF(NFP(JP,4).EQ.-211) THEN
4201                 BEAM='PI-'
4202         ELSE IF(NFP(JP,4).EQ.321) THEN
4203                 BEAM='PI+'
4204         ELSE IF(NFP(JP,4).EQ.-321) THEN
4205                 BEAM='PI-'
4206         ELSE
4207                 WRITE(6,*) 'unavailable beam type', NFP(JP,4)
4208         ENDIF
4209         IF(NFT(JT,4).EQ.2212) THEN
4210                 TARG='P'
4211         ELSE IF(NFT(JT,4).EQ.-2212) THEN
4212                 TARG='P~'
4213         ELSE IF(NFT(JT,4).EQ.2112) THEN
4214                 TARG='N'
4215         ELSE IF(NFT(JT,4).EQ.-2112) THEN
4216                 TARG='N~'
4217         ELSE IF(NFT(JT,4).EQ.211) THEN
4218                 TARG='PI+'
4219         ELSE IF(NFT(JT,4).EQ.-211) THEN
4220                 TARG='PI-'
4221         ELSE IF(NFT(JT,4).EQ.321) THEN
4222                 TARG='PI+'
4223         ELSE IF(NFT(JT,4).EQ.-321) THEN
4224                 TARG='PI-'
4225         ELSE
4226                 WRITE(6,*) 'unavailable target type', NFT(JT,4)
4227         ENDIF
4228 C
4229         IHNT2(16)=1
4230 C       ******************indicate for initialization use when
4231 C                         structure functions are called in PYTHIA
4232 C
4233         CALL PYINITA('CMS',BEAM,TARG,HINT1(1))
4234         MINT4=MINT(44)
4235         MINT5=MINT(45)
4236         MINT44(itype)=MINT(44)
4237         MINT45(itype)=MINT(45)
4238         ATXS(0)=XSEC(0,1)
4239         XSEC0(itype,0)=XSEC(0,1)
4240         DO 500 I=1,200
4241                 ATXS(I)=XSEC(I,1)
4242                 XSEC0(itype,I)=XSEC(I,1)
4243                 DO 500 J=1,20
4244                         ATCO(I,J)=COEF(I,J)
4245                         COEF0(itype,I,J)=COEF(I,J)
4246 500        CONTINUE
4247 C
4248         IHNT2(16)=0
4249 C
4250         RETURN
4251 C                ********Store the initialization information for
4252 C                                late use
4253 C
4254 C
4255 800        MINT(44)=MINT44(itype)
4256         MINT(45)=MINT45(itype)
4257         MINT4=MINT(44)
4258         MINT5=MINT(45)
4259         XSEC(0,1)=XSEC0(itype,0)
4260         ATXS(0)=XSEC(0,1)
4261         DO 900 I=1,200
4262                 XSEC(I,1)=XSEC0(itype,I)
4263                 ATXS(I)=XSEC(I,1)
4264         DO 900 J=1,20
4265                 COEF(I,J)=COEF0(itype,I,J)
4266                 ATCO(I,J)=COEF(I,J)
4267 900        CONTINUE
4268         ilast=itrig
4269         MINT(11)=NFP(JP,4)
4270         MINT(12)=NFT(JT,4)
4271         RETURN
4272         END
4273 C            
4274 C
4275 C
4276         SUBROUTINE HIJINI
4277         PARAMETER (MAXSTR=150001)
4278         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
4279 cc      SAVE /HPARNT/
4280         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
4281 cc      SAVE /HSTRNG/
4282         COMMON/HJJET1/NPJ(300),KFPJ(300,500),PJPX(300,500),
4283      &                PJPY(300,500),PJPZ(300,500),PJPE(300,500),
4284      &                PJPM(300,500),NTJ(300),KFTJ(300,500),
4285      &                PJTX(300,500),PJTY(300,500),PJTZ(300,500),
4286      &                PJTE(300,500),PJTM(300,500)
4287 cc      SAVE /HJJET1/
4288         COMMON/HJJET2/NSG,NJSG(MAXSTR),IASG(MAXSTR,3),K1SG(MAXSTR,100),
4289      &       K2SG(MAXSTR,100),PXSG(MAXSTR,100),PYSG(MAXSTR,100),
4290      &       PZSG(MAXSTR,100),PESG(MAXSTR,100),PMSG(MAXSTR,100)
4291 cc      SAVE /HJJET2/
4292 c        COMMON/HJJET4/NDR,IADR(900,2),KFDR(900),PDR(900,5)
4293         COMMON/HJJET4/NDR,IADR(MAXSTR,2),KFDR(MAXSTR),PDR(MAXSTR,5)
4294 cc      SAVE /HJJET4/
4295       COMMON/RNDF77/NSEED
4296 cc      SAVE /RNDF77/
4297         SAVE   
4298 C****************Reset the momentum of initial particles************
4299 C             and assign flavors to the proj and targ string       *
4300 C*******************************************************************
4301         NSG=0
4302         NDR=0
4303         IPP=2212
4304         IPT=2212
4305         IF(IHNT2(5).NE.0) IPP=IHNT2(5)
4306         IF(IHNT2(6).NE.0) IPT=IHNT2(6)
4307 C                ********in case the proj or targ is a hadron.
4308 C
4309         DO 100 I=1,IHNT2(1)
4310         PP(I,1)=0.0
4311         PP(I,2)=0.0
4312         PP(I,3)=SQRT(HINT1(1)**2/4.0-HINT1(8)**2)
4313         PP(I,4)=HINT1(1)/2
4314         PP(I,5)=HINT1(8)
4315         PP(I,6)=0.0
4316         PP(I,7)=0.0
4317         PP(I,8)=0.0
4318         PP(I,9)=0.0
4319         PP(I,10)=0.0
4320 cbzdbg2/22/99
4321 ctest OFF
4322         PP(I, 11) = 0.0
4323         PP(I, 12) = 0.0
4324 cbzdbg2/22/99end
4325         NFP(I,3)=IPP
4326         NFP(I,4)=IPP
4327         NFP(I,5)=0
4328         NFP(I,6)=0
4329         NFP(I,7)=0
4330         NFP(I,8)=0
4331         NFP(I,9)=0
4332         NFP(I,10)=0
4333         NFP(I,11)=0
4334         NPJ(I)=0
4335         IF(I.GT.ABS(IHNT2(2))) NFP(I,3)=2112
4336         CALL ATTFLV(NFP(I,3),IDQ,IDQQ)
4337         NFP(I,1)=IDQ
4338         NFP(I,2)=IDQQ
4339         NFP(I,15)=-1
4340         IF(ABS(IDQ).GT.1000.OR.(ABS(IDQ*IDQQ).LT.100.AND.
4341      &                RANART(NSEED).LT.0.5)) NFP(I,15)=1
4342         PP(I,14)=ULMASS(IDQ)
4343         PP(I,15)=ULMASS(IDQQ)
4344 100        CONTINUE
4345 C
4346         DO 200 I=1,IHNT2(3)
4347         PT(I,1)=0.0
4348         PT(I,2)=0.0
4349         PT(I,3)=-SQRT(HINT1(1)**2/4.0-HINT1(9)**2)
4350         PT(I,4)=HINT1(1)/2.0
4351         PT(I,5)=HINT1(9)
4352         PT(I,6)=0.0
4353         PT(I,7)=0.0
4354         PT(I,8)=0.0
4355         PT(I,9)=0.0
4356         PT(I,10)=0.0
4357 ctest OFF
4358 cbzdbg2/22/99
4359         PT(I, 11) = 0.0
4360         PT(I, 12) = 0.0
4361 cbzdbg2/22/99end
4362         NFT(I,3)=IPT
4363         NFT(I,4)=IPT
4364         NFT(I,5)=0
4365         NFT(I,6)=0
4366         NFT(I,7)=0
4367         NFT(I,8)=0
4368         NFT(I,9)=0
4369         NFT(I,10)=0
4370         NFT(I,11)=0
4371         NTJ(I)=0
4372         IF(I.GT.ABS(IHNT2(4))) NFT(I,3)=2112
4373         CALL ATTFLV(NFT(I,3),IDQ,IDQQ)
4374         NFT(I,1)=IDQ
4375         NFT(I,2)=IDQQ
4376         NFT(I,15)=1
4377         IF(ABS(IDQ).GT.1000.OR.(ABS(IDQ*IDQQ).LT.100.AND.
4378      &       RANART(NSEED).LT.0.5)) NFT(I,15)=-1
4379         PT(I,14)=ULMASS(IDQ)
4380         PT(I,15)=ULMASS(IDQQ)
4381 200        CONTINUE
4382         RETURN
4383         END
4384 C
4385 C
4386 C
4387         SUBROUTINE ATTFLV(ID,IDQ,IDQQ)
4388       COMMON/RNDF77/NSEED
4389 cc      SAVE /RNDF77/
4390         SAVE   
4391 C
4392         IF(ABS(ID).LT.100) THEN
4393                 NSIGN=1
4394                 IDQ=ID/100
4395                 IDQQ=-ID/10+IDQ*10
4396                 IF(ABS(IDQ).EQ.3) NSIGN=-1
4397                 IDQ=NSIGN*IDQ
4398                 IDQQ=NSIGN*IDQQ
4399                 IF(IDQ.LT.0) THEN
4400                         ID0=IDQ
4401                         IDQ=IDQQ
4402                         IDQQ=ID0
4403                 ENDIF
4404                 RETURN
4405         ENDIF
4406 C                ********return ID of quark(IDQ) and anti-quark(IDQQ)
4407 C                        for pions and kaons
4408 c
4409 C        Return LU ID for quarks and diquarks for proton(ID=2212) 
4410 C        anti-proton(ID=-2212) and nuetron(ID=2112)
4411 C        LU ID for d=1,u=2, (ud)0=2101, (ud)1=2103, 
4412 C       (dd)1=1103,(uu)1=2203.
4413 C        Use SU(6)  weight  proton=1/3d(uu)1 + 1/6u(ud)1 + 1/2u(ud)0
4414 C                          nurtron=1/3u(dd)1 + 1/6d(ud)1 + 1/2d(ud)0
4415
4416         IDQ=2
4417         IF(ABS(ID).EQ.2112) IDQ=1
4418         IDQQ=2101
4419         X=RANART(NSEED)
4420         IF(X.LE.0.5) GO TO 30
4421         IF(X.GT.0.666667) GO TO 10
4422         IDQQ=2103
4423         GO TO 30
4424 10        IDQ=1
4425         IDQQ=2203
4426         IF(ABS(ID).EQ.2112) THEN
4427                 IDQ=2
4428                 IDQQ=1103
4429         ENDIF
4430 30        IF(ID.LT.0) THEN
4431                 ID00=IDQQ
4432                 IDQQ=-IDQ
4433                 IDQ=-ID00
4434         ENDIF
4435         RETURN
4436         END        
4437 C
4438 C*******************************************************************
4439 C        This subroutine performs elastic scatterings and possible 
4440 C        elastic cascading within their own nuclei
4441 c*******************************************************************
4442         SUBROUTINE HIJCSC(JP,JT)
4443         DIMENSION PSC1(5),PSC2(5)
4444         COMMON/hjcrdn/YP(3,300),YT(3,300)
4445 cc      SAVE /hjcrdn/
4446         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
4447 cc      SAVE /HPARNT/
4448       COMMON/RNDF77/NSEED
4449 cc      SAVE /RNDF77/
4450         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
4451 cc      SAVE /HSTRNG/
4452         SAVE   
4453         IF(JP.EQ.0 .OR. JT.EQ.0) GO TO 25
4454         DO 10 I=1,5
4455         PSC1(I)=PP(JP,I)
4456         PSC2(I)=PT(JT,I)
4457 10        CONTINUE
4458         CALL HIJELS(PSC1,PSC2)
4459         DPP1=PSC1(1)-PP(JP,1)
4460         DPP2=PSC1(2)-PP(JP,2)
4461         DPT1=PSC2(1)-PT(JT,1)
4462         DPT2=PSC2(2)-PT(JT,2)
4463         PP(JP,6)=PP(JP,6)+DPP1/2.0
4464         PP(JP,7)=PP(JP,7)+DPP2/2.0
4465         PP(JP,8)=PP(JP,8)+DPP1/2.0
4466         PP(JP,9)=PP(JP,9)+DPP2/2.0
4467         PT(JT,6)=PT(JT,6)+DPT1/2.0
4468         PT(JT,7)=PT(JT,7)+DPT2/2.0
4469         PT(JT,8)=PT(JT,8)+DPT1/2.0
4470         PT(JT,9)=PT(JT,9)+DPT2/2.0
4471         DO 20 I=1,4
4472         PP(JP,I)=PSC1(I)
4473         PT(JT,I)=PSC2(I)
4474 20        CONTINUE
4475         NFP(JP,5)=MAX(1,NFP(JP,5))
4476         NFT(JT,5)=MAX(1,NFT(JT,5))
4477 C                ********Perform elastic scattering between JP and JT
4478         RETURN
4479 C                ********The following is for possible elastic cascade
4480 c
4481 25        IF(JP.EQ.0) GO TO 45
4482         PABS=SQRT(PP(JP,1)**2+PP(JP,2)**2+PP(JP,3)**2)
4483         BX=PP(JP,1)/PABS
4484         BY=PP(JP,2)/PABS
4485         BZ=PP(JP,3)/PABS
4486         DO 40 I=1,IHNT2(1)
4487                 IF(I.EQ.JP) GO TO 40
4488                 DX=YP(1,I)-YP(1,JP)
4489                 DY=YP(2,I)-YP(2,JP)
4490                 DZ=YP(3,I)-YP(3,JP)
4491                 DIS=DX*BX+DY*BY+DZ*BZ
4492                 IF(DIS.LE.0) GO TO 40
4493                 BB=DX**2+DY**2+DZ**2-DIS**2
4494                 R2=BB*HIPR1(40)/HIPR1(31)/0.1
4495 C                ********mb=0.1*fm, YP is in fm,HIPR1(31) is in mb
4496                 GS=1.0-EXP(-(HIPR1(30)+HINT1(11))/HIPR1(31)/2.0
4497      &                        *ROMG(R2))**2
4498                 GS0=1.0-EXP(-(HIPR1(30)+HINT1(11))/HIPR1(31)/2.0
4499      &                        *ROMG(0.0))**2
4500                 IF(RANART(NSEED).GT.GS/GS0) GO TO 40
4501                 DO 30 K=1,5
4502                         PSC1(K)=PP(JP,K)
4503                         PSC2(K)=PP(I,K)
4504 30                CONTINUE
4505                 CALL HIJELS(PSC1,PSC2)
4506                 DPP1=PSC1(1)-PP(JP,1)
4507                 DPP2=PSC1(2)-PP(JP,2)
4508                 DPT1=PSC2(1)-PP(I,1)
4509                 DPT2=PSC2(2)-PP(I,2)
4510                 PP(JP,6)=PP(JP,6)+DPP1/2.0
4511                 PP(JP,7)=PP(JP,7)+DPP2/2.0
4512                 PP(JP,8)=PP(JP,8)+DPP1/2.0
4513                 PP(JP,9)=PP(JP,9)+DPP2/2.0
4514                 PP(I,6)=PP(I,6)+DPT1/2.0
4515                 PP(I,7)=PP(I,7)+DPT2/2.0
4516                 PP(I,8)=PP(I,8)+DPT1/2.0
4517                 PP(I,9)=PP(I,9)+DPT2/2.0
4518                 DO 35 K=1,5
4519                         PP(JP,K)=PSC1(K)
4520                         PP(I,K)=PSC2(K)
4521 35                CONTINUE
4522                 NFP(I,5)=MAX(1,NFP(I,5))
4523                 GO TO 45
4524 40        CONTINUE
4525 45        IF(JT.EQ.0) GO TO 80
4526 clin 50        PABS=SQRT(PT(JT,1)**2+PT(JT,2)**2+PT(JT,3)**2)
4527         PABS=SQRT(PT(JT,1)**2+PT(JT,2)**2+PT(JT,3)**2)
4528         BX=PT(JT,1)/PABS
4529         BY=PT(JT,2)/PABS
4530         BZ=PT(JT,3)/PABS
4531         DO 70 I=1,IHNT2(3)
4532                 IF(I.EQ.JT) GO TO 70
4533                 DX=YT(1,I)-YT(1,JT)
4534                 DY=YT(2,I)-YT(2,JT)
4535                 DZ=YT(3,I)-YT(3,JT)
4536                 DIS=DX*BX+DY*BY+DZ*BZ
4537                 IF(DIS.LE.0) GO TO 70
4538                 BB=DX**2+DY**2+DZ**2-DIS**2
4539                 R2=BB*HIPR1(40)/HIPR1(31)/0.1
4540 C                ********mb=0.1*fm, YP is in fm,HIPR1(31) is in mb
4541                 GS=(1.0-EXP(-(HIPR1(30)+HINT1(11))/HIPR1(31)/2.0
4542      &                        *ROMG(R2)))**2
4543                 GS0=(1.0-EXP(-(HIPR1(30)+HINT1(11))/HIPR1(31)/2.0
4544      &                        *ROMG(0.0)))**2
4545                 IF(RANART(NSEED).GT.GS/GS0) GO TO 70
4546                 DO 60 K=1,5
4547                         PSC1(K)=PT(JT,K)
4548                         PSC2(K)=PT(I,K)
4549 60                CONTINUE
4550                 CALL HIJELS(PSC1,PSC2)
4551                 DPP1=PSC1(1)-PT(JT,1)
4552                 DPP2=PSC1(2)-PT(JT,2)
4553                 DPT1=PSC2(1)-PT(I,1)
4554                 DPT2=PSC2(2)-PT(I,2)
4555                 PT(JT,6)=PT(JT,6)+DPP1/2.0
4556                 PT(JT,7)=PT(JT,7)+DPP2/2.0
4557                 PT(JT,8)=PT(JT,8)+DPP1/2.0
4558                 PT(JT,9)=PT(JT,9)+DPP2/2.0
4559                 PT(I,6)=PT(I,6)+DPT1/2.0
4560                 PT(I,7)=PT(I,7)+DPT2/2.0
4561                 PT(I,8)=PT(I,8)+DPT1/2.0
4562                 PT(I,9)=PT(I,9)+DPT2/2.0
4563                 DO 65 K=1,5
4564                         PT(JT,K)=PSC1(K)
4565                         PT(I,K)=PSC2(K)
4566 65                CONTINUE
4567                 NFT(I,5)=MAX(1,NFT(I,5))
4568                 GO TO 80
4569 70        CONTINUE
4570 80        RETURN
4571         END
4572 C
4573 C
4574 C*******************************************************************
4575 CThis subroutine performs elastic scattering between two nucleons
4576 C
4577 C*******************************************************************
4578         SUBROUTINE HIJELS(PSC1,PSC2)
4579         IMPLICIT DOUBLE PRECISION(D)
4580         DIMENSION PSC1(5),PSC2(5)
4581         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
4582 cc      SAVE /HPARNT/
4583       COMMON/RNDF77/NSEED
4584 cc      SAVE /RNDF77/
4585         SAVE   
4586 C
4587         CC=1.0-HINT1(12)/HINT1(13)
4588         RR=(1.0-CC)*HINT1(13)/HINT1(12)/(1.0-HIPR1(33))-1.0
4589         BB=0.5*(3.0+RR+SQRT(9.0+10.0*RR+RR**2))
4590         EP=SQRT((PSC1(1)-PSC2(1))**2+(PSC1(2)-PSC2(2))**2
4591      &                +(PSC1(3)-PSC2(3))**2)
4592         IF(EP.LE.0.1) RETURN
4593         ELS0=98.0/EP+52.0*(1.0+RR)**2
4594         PCM1=PSC1(1)+PSC2(1)
4595         PCM2=PSC1(2)+PSC2(2)
4596         PCM3=PSC1(3)+PSC2(3)
4597         ECM=PSC1(4)+PSC2(4)
4598         AM1=PSC1(5)**2
4599         AM2=PSC2(5)**2
4600         AMM=ECM**2-PCM1**2-PCM2**2-PCM3**2
4601         IF(AMM.LE.PSC1(5)+PSC2(5)) RETURN
4602 C                ********elastic scattering only when approaching
4603 C                                to each other
4604         PMAX=(AMM**2+AM1**2+AM2**2-2.0*AMM*AM1-2.0*AMM*AM2
4605      &                        -2.0*AM1*AM2)/4.0/AMM
4606         PMAX=ABS(PMAX)
4607 20        TT=RANART(NSEED)*MIN(PMAX,1.5)
4608         ELS=98.0*EXP(-2.8*TT)/EP
4609      &         +52.0*EXP(-9.2*TT)*(1.0+RR*EXP(-4.6*(BB-1.0)*TT))**2
4610         IF(RANART(NSEED).GT.ELS/ELS0) GO TO 20
4611         PHI=2.0*HIPR1(40)*RANART(NSEED)
4612 C
4613         DBX=dble(PCM1/ECM)
4614         DBY=dble(PCM2/ECM)
4615         DBZ=dble(PCM3/ECM)
4616         DB=dSQRT(DBX**2+DBY**2+DBZ**2)
4617         IF(DB.GT.0.99999999D0) THEN 
4618           DBX=DBX*(0.99999999D0/DB) 
4619           DBY=DBY*(0.99999999D0/DB) 
4620           DBZ=DBZ*(0.99999999D0/DB) 
4621           DB=0.99999999D0   
4622           WRITE(6,*) ' (HIJELS) boost vector too large' 
4623 C                ********Rescale boost vector if too close to unity. 
4624         ENDIF   
4625         DGA=1D0/SQRT(1D0-DB**2)      
4626 C
4627         DP1=dble(SQRT(TT)*SIN(PHI))
4628         DP2=dble(SQRT(TT)*COS(PHI))
4629         DP3=dble(SQRT(PMAX-TT))
4630         DP4=dble(SQRT(PMAX+AM1))
4631         DBP=DBX*DP1+DBY*DP2+DBZ*DP3   
4632         DGABP=DGA*(DGA*DBP/(1D0+DGA)+DP4) 
4633         PSC1(1)=sngl(DP1+DGABP*DBX)
4634         PSC1(2)=sngl(DP2+DGABP*DBY) 
4635         PSC1(3)=sngl(DP3+DGABP*DBZ) 
4636         PSC1(4)=sngl(DGA*(DP4+DBP))
4637 C        
4638         DP1=-dble(SQRT(TT)*SIN(PHI))
4639         DP2=-dble(SQRT(TT)*COS(PHI))
4640         DP3=-dble(SQRT(PMAX-TT))
4641         DP4=dble(SQRT(PMAX+AM2))
4642         DBP=DBX*DP1+DBY*DP2+DBZ*DP3   
4643         DGABP=DGA*(DGA*DBP/(1D0+DGA)+DP4) 
4644         PSC2(1)=sngl(DP1+DGABP*DBX)
4645         PSC2(2)=sngl(DP2+DGABP*DBY)
4646         PSC2(3)=sngl(DP3+DGABP*DBZ)
4647         PSC2(4)=sngl(DGA*(DP4+DBP))
4648         RETURN
4649         END
4650 C
4651 C        
4652 C*******************************************************************
4653 C                                                                      *
4654 C                Subroutine HIJSFT                                   *
4655 C                                                                   *
4656 C  Scatter two excited strings, JP from proj and JT from target    *
4657 C*******************************************************************
4658         SUBROUTINE HIJSFT(JP,JT,JOUT,IERROR)
4659         PARAMETER (MAXSTR=150001)
4660         COMMON/hjcrdn/YP(3,300),YT(3,300)
4661 cc      SAVE /hjcrdn/
4662         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
4663 cc      SAVE /HPARNT/
4664         COMMON/HIJDAT/HIDAT0(10,10),HIDAT(10)
4665 cc      SAVE /HIJDAT/
4666       COMMON/RNDF77/NSEED
4667 cc      SAVE /RNDF77/
4668         COMMON/HJJET1/NPJ(300),KFPJ(300,500),PJPX(300,500),
4669      &               PJPY(300,500),PJPZ(300,500),PJPE(300,500),
4670      &               PJPM(300,500),NTJ(300),KFTJ(300,500),
4671      &               PJTX(300,500),PJTY(300,500),PJTZ(300,500),
4672      &               PJTE(300,500),PJTM(300,500)
4673 cc      SAVE /HJJET1/
4674 clin-4/25/01
4675 c        COMMON/HJJET2/NSG,NJSG(900),IASG(900,3),K1SG(900,100),
4676 c     &                K2SG(900,100),PXSG(900,100),PYSG(900,100),
4677 c     &                PZSG(900,100),PESG(900,100),PMSG(900,100)
4678 cc      SAVE /HJJET2/
4679         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
4680 cc      SAVE /HSTRNG/
4681         COMMON/DPMCM1/JJP,JJT,AMP,AMT,APX0,ATX0,AMPN,AMTN,AMP0,AMT0,
4682      &       NFDP,NFDT,WP,WM,SW,XREMP,XREMT,DPKC1,DPKC2,PP11,PP12,
4683      &       PT11,PT12,PTP2,PTT2
4684 cc      SAVE /DPMCM1/
4685         COMMON/DPMCM2/NDPM,KDPM(20,2),PDPM1(20,5),PDPM2(20,5)
4686 cc      SAVE /DPMCM2/
4687         SAVE   
4688 C*******************************************************************
4689 C        JOUT-> the number
4690 C        of hard scatterings preceding this soft collision. 
4691 C       IHNT2(13)-> 1=
4692 C        double diffrac 2=single diffrac, 3=non-single diffrac.
4693 C*******************************************************************
4694         IERROR=0
4695         JJP=JP
4696         JJT=JT
4697         NDPM=0
4698 c        IOPMAIN=0
4699         IF(JP.GT.IHNT2(1) .OR. JT.GT.IHNT2(3)) RETURN
4700
4701         EPP=PP(JP,4)+PP(JP,3)
4702         EPM=PP(JP,4)-PP(JP,3)
4703         ETP=PT(JT,4)+PT(JT,3)
4704         ETM=PT(JT,4)-PT(JT,3)
4705
4706         WP=EPP+ETP
4707         WM=EPM+ETM
4708         SW=WP*WM
4709 C                ********total W+,W- and center-of-mass energy
4710
4711         IF(WP.LT.0.0 .OR. WM.LT.0.0) GO TO 1000
4712
4713         IF(JOUT.EQ.0) THEN
4714                 IF(EPP.LT.0.0) GO TO 1000
4715                 IF(EPM.LT.0.0) GO TO 1000
4716                 IF(ETP.LT.0.0) GO TO 1000
4717                 IF(ETM.LT.0.0) GO TO 1000    
4718                 IF(EPP/(EPM+0.01).LE.ETP/(ETM+0.01)) RETURN
4719         ENDIF
4720 C                ********For strings which does not follow a jet-prod,
4721 C                        scatter only if Ycm(JP)>Ycm(JT). When jets
4722 C                        are produced just before this collision
4723 C                        this requirement has already be enforced
4724 C                        (see SUBROUTINE HIJHRD)
4725         IHNT2(11)=JP
4726         IHNT2(12)=JT
4727 C
4728 C
4729 C
4730         MISS=0
4731         PKC1=0.0
4732         PKC2=0.0
4733         PKC11=0.0
4734         PKC12=0.0
4735         PKC21=0.0
4736         PKC22=0.0
4737         DPKC11=0.0
4738         DPKC12=0.0
4739         DPKC21=0.0
4740         DPKC22=0.0
4741         IF(NFP(JP,10).EQ.1.OR.NFT(JT,10).EQ.1) THEN
4742            IF(NFP(JP,10).EQ.1) THEN
4743               PHI1=ULANGL(PP(JP,10),PP(JP,11))
4744               PPJET=SQRT(PP(JP,10)**2+PP(JP,11)**2)
4745               PKC1=PPJET
4746               PKC11=PP(JP,10)
4747               PKC12=PP(JP,11)
4748            ENDIF
4749            IF(NFT(JT,10).EQ.1) THEN
4750               PHI2=ULANGL(PT(JT,10),PT(JT,11))
4751               PTJET=SQRT(PT(JT,10)**2+PT(JT,11)**2)
4752               PKC2=PTJET
4753               PKC21=PT(JT,10)
4754               PKC22=PT(JT,11)
4755            ENDIF
4756            IF(IHPR2(4).GT.0.AND.IHNT2(1).GT.1.AND.IHNT2(3).GT.1) THEN
4757               IF(NFP(JP,10).EQ.0) THEN
4758                  PHI=-PHI2
4759               ELSE IF(NFT(JT,10).EQ.0) THEN
4760                  PHI=PHI1
4761               ELSE
4762                  PHI=(PHI1+PHI2-HIPR1(40))/2.0
4763               ENDIF
4764               BX=HINT1(19)*COS(HINT1(20))
4765               BY=HINT1(19)*SIN(HINT1(20))
4766               XP0=YP(1,JP)
4767               YP0=YP(2,JP)
4768               XT0=YT(1,JT)+BX
4769               YT0=YT(2,JT)+BY
4770               R1=MAX(1.2*IHNT2(1)**0.3333333,
4771      &               SQRT(XP0**2+YP0**2))
4772               R2=MAX(1.2*IHNT2(3)**0.3333333,
4773      &               SQRT((XT0-BX)**2+(YT0-BY)**2))
4774               IF(ABS(COS(PHI)).LT.1.0E-5) THEN
4775                  DD1=R1
4776                  DD2=R1
4777                  DD3=ABS(BY+SQRT(R2**2-(XP0-BX)**2)-YP0)
4778                  DD4=ABS(BY-SQRT(R2**2-(XP0-BX)**2)-YP0)
4779                  GO TO 5
4780               ENDIF
4781               BB=2.0*SIN(PHI)*(COS(PHI)*YP0-SIN(PHI)*XP0)
4782               CC=(YP0**2-R1**2)*COS(PHI)**2+XP0*SIN(PHI)*(
4783      &                                XP0*SIN(PHI)-2.0*YP0*COS(PHI))
4784               DD=BB**2-4.0*CC
4785               IF(DD.LT.0.0) GO TO 10
4786               XX1=(-BB+SQRT(DD))/2.0
4787               XX2=(-BB-SQRT(DD))/2.0
4788               DD1=ABS((XX1-XP0)/COS(PHI))
4789               DD2=ABS((XX2-XP0)/COS(PHI))
4790 C                        
4791               BB=2.0*SIN(PHI)*(COS(PHI)*(YT0-BY)-SIN(PHI)*XT0)-2.0*BX
4792               CC=(BX**2+(YT0-BY)**2-R2**2)*COS(PHI)**2+XT0*SIN(PHI)
4793      &           *(XT0*SIN(PHI)-2.0*COS(PHI)*(YT0-BY))
4794      &                 -2.0*BX*SIN(PHI)*(COS(PHI)*(YT0-BY)-SIN(PHI)*XT0)
4795               DD=BB**2-4.0*CC
4796               IF(DD.LT.0.0) GO TO 10
4797               XX1=(-BB+SQRT(DD))/2.0
4798               XX2=(-BB-SQRT(DD))/2.0
4799               DD3=ABS((XX1-XT0)/COS(PHI))
4800               DD4=ABS((XX2-XT0)/COS(PHI))
4801 C
4802  5              DD1=MIN(DD1,DD3)
4803               DD2=MIN(DD2,DD4)
4804               IF(DD1.LT.HIPR1(13)) DD1=0.0
4805               IF(DD2.LT.HIPR1(13)) DD2=0.0
4806               IF(NFP(JP,10).EQ.1.AND.PPJET.GT.HIPR1(11)) THEN
4807                  DP1=DD1*HIPR1(14)/2.0
4808                  DP1=MIN(DP1,PPJET-HIPR1(11))
4809                  PKC1=PPJET-DP1
4810                  DPX1=COS(PHI1)*DP1
4811                  DPY1=SIN(PHI1)*DP1
4812                  PKC11=PP(JP,10)-DPX1
4813                  PKC12=PP(JP,11)-DPY1
4814                  IF(DP1.GT.0.0) THEN
4815                     CTHEP=PP(JP,12)/SQRT(PP(JP,12)**2+PPJET**2)
4816                     DPZ1=DP1*CTHEP/SQRT(1.0-CTHEP**2)
4817                     DPE1=SQRT(DPX1**2+DPY1**2+DPZ1**2)
4818                     EPPPRM=PP(JP,4)+PP(JP,3)-DPE1-DPZ1
4819                     EPMPRM=PP(JP,4)-PP(JP,3)-DPE1+DPZ1
4820                     IF(EPPPRM.LE.0.0.OR.EPMPRM.LE.0.0) GO TO 15
4821                     EPP=EPPPRM
4822                     EPM=EPMPRM
4823                     PP(JP,10)=PKC11
4824                     PP(JP,11)=PKC12
4825                     NPJ(JP)=NPJ(JP)+1
4826                     KFPJ(JP,NPJ(JP))=21
4827                     PJPX(JP,NPJ(JP))=DPX1
4828                     PJPY(JP,NPJ(JP))=DPY1
4829                     PJPZ(JP,NPJ(JP))=DPZ1
4830                     PJPE(JP,NPJ(JP))=DPE1
4831                     PJPM(JP,NPJ(JP))=0.0
4832                     PP(JP,3)=PP(JP,3)-DPZ1
4833                     PP(JP,4)=PP(JP,4)-DPE1
4834                  ENDIF
4835               ENDIF
4836  15              IF(NFT(JT,10).EQ.1.AND.PTJET.GT.HIPR1(11)) THEN
4837                  DP2=DD2*HIPR1(14)/2.0
4838                  DP2=MIN(DP2,PTJET-HIPR1(11))
4839                  PKC2=PTJET-DP2
4840                  DPX2=COS(PHI2)*DP2
4841                  DPY2=SIN(PHI2)*DP2
4842                  PKC21=PT(JT,10)-DPX2
4843                  PKC22=PT(JT,11)-DPY2
4844                  IF(DP2.GT.0.0) THEN
4845                     CTHET=PT(JT,12)/SQRT(PT(JT,12)**2+PTJET**2)
4846                     DPZ2=DP2*CTHET/SQRT(1.0-CTHET**2)
4847                     DPE2=SQRT(DPX2**2+DPY2**2+DPZ2**2)
4848                     ETPPRM=PT(JT,4)+PT(JT,3)-DPE2-DPZ2
4849                     ETMPRM=PT(JT,4)-PT(JT,3)-DPE2+DPZ2
4850                     IF(ETPPRM.LE.0.0.OR.ETMPRM.LE.0.0) GO TO 16
4851                     ETP=ETPPRM
4852                     ETM=ETMPRM
4853                     PT(JT,10)=PKC21
4854                     PT(JT,11)=PKC22
4855                     NTJ(JT)=NTJ(JT)+1
4856                     KFTJ(JT,NTJ(JT))=21
4857                     PJTX(JT,NTJ(JT))=DPX2
4858                     PJTY(JT,NTJ(JT))=DPY2
4859                     PJTZ(JT,NTJ(JT))=DPZ2
4860                     PJTE(JT,NTJ(JT))=DPE2
4861                     PJTM(JT,NTJ(JT))=0.0
4862                     PT(JT,3)=PT(JT,3)-DPZ2
4863                     PT(JT,4)=PT(JT,4)-DPE2
4864                  ENDIF
4865               ENDIF
4866  16              DPKC11=-(PP(JP,10)-PKC11)/2.0
4867               DPKC12=-(PP(JP,11)-PKC12)/2.0
4868               DPKC21=-(PT(JT,10)-PKC21)/2.0
4869               DPKC22=-(PT(JT,11)-PKC22)/2.0
4870               WP=EPP+ETP
4871               WM=EPM+ETM
4872               SW=WP*WM
4873            ENDIF
4874         ENDIF
4875 C                ********If jet is quenched the pt from valence quark
4876 C                        hard scattering has to reduced by d*kapa
4877 C
4878 C   
4879 10        PTP02=PP(JP,1)**2+PP(JP,2)**2
4880         PTT02=PT(JT,1)**2+PT(JT,2)**2
4881 C        
4882         AMQ=MAX(PP(JP,14)+PP(JP,15),PT(JT,14)+PT(JT,15))
4883         AMX=HIPR1(1)+AMQ
4884 C                ********consider mass cut-off for strings which
4885 C                        must also include quark's mass
4886         AMP0=AMX
4887         DPM0=AMX
4888         NFDP=0
4889         IF(NFP(JP,5).LE.2.AND.NFP(JP,3).NE.0) THEN
4890                 AMP0=ULMASS(NFP(JP,3))
4891                 NFDP=NFP(JP,3)+2*NFP(JP,3)/ABS(NFP(JP,3))
4892                 DPM0=ULMASS(NFDP)
4893                 IF(DPM0.LE.0.0) THEN
4894                         NFDP=NFDP-2*NFDP/ABS(NFDP)
4895                         DPM0=ULMASS(NFDP)
4896                 ENDIF
4897         ENDIF
4898         AMT0=AMX
4899         DTM0=AMX
4900         NFDT=0
4901         IF(NFT(JT,5).LE.2.AND.NFT(JT,3).NE.0) THEN
4902                 AMT0=ULMASS(NFT(JT,3))
4903                 NFDT=NFT(JT,3)+2*NFT(JT,3)/ABS(NFT(JT,3))
4904                 DTM0=ULMASS(NFDT)
4905                 IF(DTM0.LE.0.0) THEN
4906                         NFDT=NFDT-2*NFDT/ABS(NFDT)
4907                         DTM0=ULMASS(NFDT)
4908                 ENDIF
4909         ENDIF
4910 C        
4911         AMPN=SQRT(AMP0**2+PTP02)
4912         AMTN=SQRT(AMT0**2+PTT02)
4913         SNN=(AMPN+AMTN)**2+0.001
4914 C
4915         IF(SW.LT.SNN+0.001) GO TO 4000
4916 C                ********Scatter only if SW>SNN
4917 C*****give some PT kick to the two exited strings******************
4918 clin 20        SWPTN=4.0*(MAX(AMP0,AMT0)**2+MAX(PTP02,PTT02))
4919         SWPTN=4.0*(MAX(AMP0,AMT0)**2+MAX(PTP02,PTT02))
4920         SWPTD=4.0*(MAX(DPM0,DTM0)**2+MAX(PTP02,PTT02))
4921         SWPTX=4.0*(AMX**2+MAX(PTP02,PTT02))
4922         IF(SW.LE.SWPTN) THEN
4923                 PKCMX=0.0
4924         ELSE IF(SW.GT.SWPTN .AND. SW.LE.SWPTD
4925      &                .AND.NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0) THEN
4926            PKCMX=SQRT(SW/4.0-MAX(AMP0,AMT0)**2)
4927      &           -SQRT(MAX(PTP02,PTT02))
4928         ELSE IF(SW.GT.SWPTD .AND. SW.LE.SWPTX
4929      &                .AND.NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0) THEN
4930            PKCMX=SQRT(SW/4.0-MAX(DPM0,DTM0)**2)
4931      &           -SQRT(MAX(PTP02,PTT02))
4932         ELSE IF(SW.GT.SWPTX) THEN
4933            PKCMX=SQRT(SW/4.0-AMX**2)-SQRT(MAX(PTP02,PTT02))
4934         ENDIF
4935 C                ********maximun PT kick
4936 C*********************************************************
4937 C
4938         IF(NFP(JP,10).EQ.1.OR.NFT(JT,10).EQ.1) THEN
4939                 IF(PKC1.GT.PKCMX) THEN
4940                         PKC1=PKCMX
4941                         PKC11=PKC1*COS(PHI1)
4942                         PKC12=PKC1*SIN(PHI1)
4943                         DPKC11=-(PP(JP,10)-PKC11)/2.0
4944                         DPKC12=-(PP(JP,11)-PKC12)/2.0
4945                 ENDIF
4946                 IF(PKC2.GT.PKCMX) THEN
4947                         PKC2=PKCMX
4948                         PKC21=PKC2*COS(PHI2)
4949                         PKC22=PKC2*SIN(PHI2)
4950                         DPKC21=-(PT(JT,10)-PKC21)/2.0
4951                         DPKC22=-(PT(JT,11)-PKC22)/2.0
4952                 ENDIF
4953                 DPKC1=DPKC11+DPKC21
4954                 DPKC2=DPKC12+DPKC22
4955                 NFP(JP,10)=-NFP(JP,10)
4956                 NFT(JT,10)=-NFT(JT,10)
4957                 GO TO 40
4958         ENDIF
4959 C                ********If the valence quarks had a hard-collision
4960 C                        the pt kick is the pt from hard-collision.
4961         isng=0
4962         IF(IHPR2(13).NE.0 .AND. RANART(NSEED).LE.HIDAT(4)) isng=1
4963         IF((NFP(JP,5).EQ.3 .OR.NFT(JT,5).EQ.3).OR.
4964      &                (NPJ(JP).NE.0.OR.NFP(JP,10).NE.0).OR.
4965      &                (NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) isng=0
4966 C
4967 C               ********decite whether to have single-diffractive
4968         IF(IHPR2(5).EQ.0) THEN
4969                 PKC=HIPR1(2)*SQRT(-ALOG(1.0-RANART(NSEED)
4970      &                        *(1.0-EXP(-PKCMX**2/HIPR1(2)**2))))
4971                 GO TO 30
4972         ENDIF
4973
4974 clin-10/28/02 get rid of argument usage mismatch in HIRND2():
4975 c        PKC=HIRND2(3,0.0,PKCMX**2)
4976         xminhi=0.0
4977         xmaxhi=PKCMX**2
4978         PKC=HIRND2(3,xminhi,xmaxhi)
4979
4980         PKC=SQRT(PKC)
4981         IF(PKC.GT.HIPR1(20)) 
4982      &           PKC=HIPR1(2)*SQRT(-ALOG(EXP(-HIPR1(20)**2/HIPR1(2)**2)
4983      &               -RANART(NSEED)*(EXP(-HIPR1(20)**2/HIPR1(2)**2)-
4984      &               EXP(-PKCMX**2/HIPR1(2)**2))))
4985 C
4986         IF(isng.EQ.1) PKC=0.65*SQRT(
4987      &       -ALOG(1.0-RANART(NSEED)*(1.0-EXP(-PKCMX**2/0.65**2))))
4988 C                        ********select PT kick
4989 30        PHI0=2.0*HIPR1(40)*RANART(NSEED)
4990         PKC11=PKC*SIN(PHI0)
4991         PKC12=PKC*COS(PHI0)
4992         PKC21=-PKC11
4993         PKC22=-PKC12
4994         DPKC1=0.0
4995         DPKC2=0.0
4996 40        PP11=PP(JP,1)+PKC11-DPKC1
4997         PP12=PP(JP,2)+PKC12-DPKC2
4998         PT11=PT(JT,1)+PKC21-DPKC1
4999         PT12=PT(JT,2)+PKC22-DPKC2
5000         PTP2=PP11**2+PP12**2
5001         PTT2=PT11**2+PT12**2
5002 C
5003         AMPN=SQRT(AMP0**2+PTP2)
5004         AMTN=SQRT(AMT0**2+PTT2)
5005         SNN=(AMPN+AMTN)**2+0.001
5006 C***************************************
5007         WP=EPP+ETP
5008         WM=EPM+ETM
5009         SW=WP*WM
5010 C****************************************
5011         IF(SW.LT.SNN) THEN
5012            MISS=MISS+1
5013            IF(MISS.LE.100) then
5014               PKC=0.0
5015               GO TO 30
5016            ENDIF
5017            IF(IHPR2(10).NE.0) 
5018      &          WRITE(6,*) 'Error occured in Pt kick section of HIJSFT'
5019            GO TO 4000
5020         ENDIF
5021 C******************************************************************
5022         AMPD=SQRT(DPM0**2+PTP2)
5023         AMTD=SQRT(DTM0**2+PTT2)
5024
5025         AMPX=SQRT(AMX**2+PTP2)
5026         AMTX=SQRT(AMX**2+PTT2)
5027
5028         DPN=AMPN**2/SW
5029         DTN=AMTN**2/SW
5030         DPD=AMPD**2/SW
5031         DTD=AMTD**2/SW
5032         DPX=AMPX**2/SW
5033         DTX=AMTX**2/SW
5034 C
5035         SPNTD=(AMPN+AMTD)**2
5036         SPNTX=(AMPN+AMTX)**2
5037 C                        ********CM energy if proj=N,targ=N*
5038         SPDTN=(AMPD+AMTN)**2
5039         SPXTN=(AMPX+AMTN)**2
5040 C                        ********CM energy if proj=N*,targ=N
5041         SPDTX=(AMPD+AMTX)**2
5042         SPXTD=(AMPX+AMTD)**2
5043         SDD=(AMPD+AMTD)**2
5044         SXX=(AMPX+AMTX)**2
5045
5046 C
5047 C        
5048 C                ********CM energy if proj=delta, targ=delta
5049 C****************There are many different cases**********
5050 c        IF(IHPR2(15).EQ.1) GO TO 500
5051 C
5052 C                ********to have DPM type soft interactions
5053 C
5054 clin 45        CONTINUE
5055         IF(SW.GT.SXX+0.001) THEN
5056            IF(isng.EQ.0) THEN
5057                D1=DPX
5058               D2=DTX
5059               NFP3=0
5060               NFT3=0
5061               GO TO 400
5062            ELSE
5063 c**** 5/30/1998 this is identical to the above statement. Added to
5064 c**** avoid questional branching to block.
5065               IF((NFP(JP,5).EQ.3 .AND.NFT(JT,5).EQ.3).OR.
5066      &                 (NPJ(JP).NE.0.OR.NFP(JP,10).NE.0).OR.
5067      &                 (NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) THEN
5068                  D1=DPX
5069                  D2=DTX
5070                  NFP3=0
5071                  NFT3=0
5072                  GO TO 400
5073               ENDIF
5074 C                ********do not allow excited strings to have 
5075 C                        single-diffr 
5076               IF(RANART(NSEED).GT.0.5.OR.(NFT(JT,5).GT.2.OR.
5077      &                      NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) THEN
5078                  D1=DPN
5079                  D2=DTX
5080                  NFP3=NFP(JP,3)
5081                  NFT3=0
5082                  GO TO 220
5083               ELSE
5084                  D1=DPX
5085                  D2=DTN
5086                  NFP3=0
5087                  NFT3=NFT(JT,3)
5088                  GO TO 240
5089               ENDIF
5090 C                ********have single diffractive collision
5091            ENDIF
5092         ELSE IF(SW.GT.MAX(SPDTX,SPXTD)+0.001 .AND.
5093      &                                SW.LE.SXX+0.001) THEN
5094            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0.AND.
5095      &         RANART(NSEED).GT.0.5).OR.(NPJ(JP).EQ.0
5096      &         .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
5097               D1=DPD
5098               D2=DTX
5099               NFP3=NFDP
5100               NFT3=0
5101               GO TO 220
5102            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
5103               D1=DPX
5104               D2=DTD
5105               NFP3=0
5106               NFT3=NFDT
5107               GO TO 240
5108            ENDIF
5109            GO TO 4000
5110         ELSE IF(SW.GT.MIN(SPDTX,SPXTD)+0.001.AND.
5111      &                        SW.LE.MAX(SPDTX,SPXTD)+0.001) THEN
5112            IF(SPDTX.LE.SPXTD.AND.NPJ(JP).EQ.0
5113      &                       .AND.NFP(JP,5).LE.2) THEN
5114               D1=DPD
5115               D2=DTX
5116               NFP3=NFDP
5117               NFT3=0
5118               GO TO 220
5119            ELSE IF(SPDTX.GT.SPXTD.AND.NTJ(JT).EQ.0
5120      &                       .AND.NFT(JT,5).LE.2) THEN
5121               D1=DPX
5122               D2=DTD
5123               NFP3=0
5124               NFT3=NFDT
5125               GO TO 240
5126            ENDIF
5127 c*** 5/30/1998 added to avoid questional branching to another block
5128 c*** this is identical to the statement following the next ELSE IF
5129            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0
5130      &       .AND.RANART(NSEED).GT.0.5).OR.(NPJ(JP).EQ.0
5131      &        .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
5132               D1=DPN
5133               D2=DTX
5134               NFP3=NFP(JP,3)
5135               NFT3=0
5136               GO TO 220
5137            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
5138               D1=DPX
5139               D2=DTN
5140               NFP3=0
5141               NFT3=NFT(JT,3)
5142               GO TO 240
5143            ENDIF
5144            GO TO 4000
5145         ELSE IF(SW.GT.MAX(SPNTX,SPXTN)+0.001 .AND.
5146      &                        SW.LE.MIN(SPDTX,SPXTD)+0.001) THEN
5147            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0
5148      &       .AND.RANART(NSEED).GT.0.5).OR.(NPJ(JP).EQ.0
5149      &        .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
5150               D1=DPN
5151               D2=DTX
5152               NFP3=NFP(JP,3)
5153               NFT3=0
5154               GO TO 220
5155            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
5156               D1=DPX
5157               D2=DTN
5158               NFP3=0
5159               NFT3=NFT(JT,3)
5160               GO TO 240
5161            ENDIF
5162            GO TO 4000
5163         ELSE IF(SW.GT.MIN(SPNTX,SPXTN)+0.001 .AND.
5164      &                        SW.LE.MAX(SPNTX,SPXTN)+0.001) THEN
5165            IF(SPNTX.LE.SPXTN.AND.NPJ(JP).EQ.0
5166      &                           .AND.NFP(JP,5).LE.2) THEN
5167               D1=DPN
5168               D2=DTX
5169               NFP3=NFP(JP,3)
5170               NFT3=0
5171               GO TO 220
5172            ELSEIF(SPNTX.GT.SPXTN.AND.NTJ(JT).EQ.0
5173      &                           .AND.NFT(JT,5).LE.2) THEN
5174               D1=DPX
5175               D2=DTN
5176               NFP3=0
5177               NFT3=NFT(JT,3)
5178               GO TO 240
5179            ENDIF
5180            GO TO 4000
5181         ELSE IF(SW.LE.MIN(SPNTX,SPXTN)+0.001 .AND.
5182      &                        (NPJ(JP).NE.0 .OR.NTJ(JT).NE.0)) THEN
5183            GO TO 4000
5184         ELSE IF(SW.LE.MIN(SPNTX,SPXTN)+0.001 .AND.
5185      &                NFP(JP,5).GT.2.AND.NFT(JT,5).GT.2) THEN
5186            GO TO 4000
5187         ELSE IF(SW.GT.SDD+0.001.AND.SW.LE.
5188      &                     MIN(SPNTX,SPXTN)+0.001) THEN
5189            D1=DPD
5190            D2=DTD
5191            NFP3=NFDP
5192            NFT3=NFDT
5193            GO TO 100
5194         ELSE IF(SW.GT.MAX(SPNTD,SPDTN)+0.001 
5195      &                      .AND. SW.LE.SDD+0.001) THEN
5196            IF(RANART(NSEED).GT.0.5) THEN
5197               D1=DPD
5198               D2=DTN
5199               NFP3=NFDP
5200               NFT3=NFT(JT,3)
5201               GO TO 100
5202            ELSE
5203               D1=DPN
5204               D2=DTD
5205               NFP3=NFP(JP,3)
5206               NFT3=NFDT
5207               GO TO 100
5208            ENDIF
5209         ELSE IF(SW.GT.MIN(SPNTD,SPDTN)+0.001
5210      &                .AND. SW.LE.MAX(SPNTD,SPDTN)+0.001) THEN
5211            IF(SPNTD.GT.SPDTN) THEN
5212               D1=DPD
5213               D2=DTN
5214               NFP3=NFDP
5215               NFT3=NFT(JT,3)
5216               GO TO 100
5217            ELSE
5218               D1=DPN
5219               D2=DTD
5220               NFP3=NFP(JP,3)
5221               NFT3=NFDT
5222               GO TO 100
5223            ENDIF
5224         ELSE IF(SW.LE.MIN(SPNTD,SPDTN)+0.001) THEN
5225            D1=DPN
5226            D2=DTN
5227            NFP3=NFP(JP,3)
5228            NFT3=NFT(JT,3)
5229            GO TO 100
5230         ENDIF
5231         WRITE(6,*) ' Error in HIJSFT: There is no path to here'
5232         RETURN
5233 C
5234 C***************  elastic scattering ***************
5235 C        this is like elastic, both proj and targ mass
5236 C        must be fixed
5237 C***************************************************
5238 100        NFP5=MAX(2,NFP(JP,5))
5239         NFT5=MAX(2,NFT(JT,5))
5240         BB1=1.0+D1-D2
5241         BB2=1.0+D2-D1
5242         IF(BB1**2.LT.4.0*D1 .OR. BB2**2.LT.4.0*D2) THEN
5243                 MISS=MISS+1
5244                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
5245                 PKC=PKC*0.5
5246                 GO TO 30
5247         ENDIF
5248         IF(RANART(NSEED).LT.0.5) THEN
5249                 X1=(BB1-SQRT(BB1**2-4.0*D1))/2.0
5250                 X2=(BB2-SQRT(BB2**2-4.0*D2))/2.0
5251         ELSE
5252                 X1=(BB1+SQRT(BB1**2-4.0*D1))/2.0
5253                 X2=(BB2+SQRT(BB2**2-4.0*D2))/2.0
5254         ENDIF
5255         IHNT2(13)=2
5256         GO TO 600
5257 C
5258 C********** Single diffractive ***********************
5259 C either proj or targ's mass is fixed
5260 C*****************************************************
5261 220        NFP5=MAX(2,NFP(JP,5))
5262         NFT5=3
5263         IF(NFP3.EQ.0) NFP5=3
5264         BB2=1.0+D2-D1
5265         IF(BB2**2.LT.4.0*D2) THEN
5266                 MISS=MISS+1
5267                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
5268                 PKC=PKC*0.5
5269                 GO TO 30
5270         ENDIF
5271         XMIN=(BB2-SQRT(BB2**2-4.0*D2))/2.0
5272         XMAX=(BB2+SQRT(BB2**2-4.0*D2))/2.0
5273         MISS4=0
5274 222        X2=HIRND2(6,XMIN,XMAX)
5275         X1=D1/(1.0-X2)
5276         IF(X2*(1.0-X1).LT.(D2+1.E-4/SW)) THEN
5277                 MISS4=MISS4+1
5278                 IF(MISS4.LE.1000) GO TO 222
5279                 GO TO 5000
5280         ENDIF
5281         IHNT2(13)=2
5282         GO TO 600
5283 C                        ********Fix proj mass*********
5284 240        NFP5=3
5285         NFT5=MAX(2,NFT(JT,5))
5286         IF(NFT3.EQ.0) NFT5=3
5287         BB1=1.0+D1-D2
5288         IF(BB1**2.LT.4.0*D1) THEN
5289                 MISS=MISS+1
5290                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
5291                 PKC=PKC*0.5
5292                 GO TO 30
5293         ENDIF
5294         XMIN=(BB1-SQRT(BB1**2-4.0*D1))/2.0
5295         XMAX=(BB1+SQRT(BB1**2-4.0*D1))/2.0
5296         MISS4=0
5297 242        X1=HIRND2(6,XMIN,XMAX)
5298         X2=D2/(1.0-X1)
5299         IF(X1*(1.0-X2).LT.(D1+1.E-4/SW)) THEN
5300                 MISS4=MISS4+1
5301                 IF(MISS4.LE.1000) GO TO 242
5302                 GO TO 5000
5303         ENDIF
5304         IHNT2(13)=2
5305         GO TO 600
5306 C                        ********Fix targ mass*********
5307 C
5308 C*************non-single diffractive**********************
5309 C        both proj and targ may not be fixed in mass 
5310 C*********************************************************
5311 C
5312 400        NFP5=3
5313         NFT5=3
5314         BB1=1.0+D1-D2
5315         BB2=1.0+D2-D1
5316         IF(BB1**2.LT.4.0*D1 .OR. BB2**2.LT.4.0*D2) THEN
5317                 MISS=MISS+1
5318                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
5319                 PKC=PKC*0.5
5320                 GO TO 30
5321         ENDIF
5322         XMIN1=(BB1-SQRT(BB1**2-4.0*D1))/2.0
5323         XMAX1=(BB1+SQRT(BB1**2-4.0*D1))/2.0
5324         XMIN2=(BB2-SQRT(BB2**2-4.0*D2))/2.0
5325         XMAX2=(BB2+SQRT(BB2**2-4.0*D2))/2.0
5326         MISS4=0        
5327 410        X1=HIRND2(4,XMIN1,XMAX1)
5328         X2=HIRND2(4,XMIN2,XMAX2)
5329         IF(NFP(JP,5).EQ.3.OR.NFT(JT,5).EQ.3) THEN
5330                 X1=HIRND2(6,XMIN1,XMAX1)
5331                 X2=HIRND2(6,XMIN2,XMAX2)
5332         ENDIF
5333 C                        ********
5334         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000.OR.
5335      &                        ABS(NFP(JP,1)*NFP(JP,2)).LT.100) THEN
5336                 X1=HIRND2(5,XMIN1,XMAX1)
5337         ENDIF
5338         IF(ABS(NFT(JT,1)*NFT(JT,2)).GT.1000000.OR.
5339      &                        ABS(NFT(JT,1)*NFT(JT,2)).LT.100) THEN
5340                 X2=HIRND2(5,XMIN2,XMAX2)
5341         ENDIF
5342 c        IF(IOPMAIN.EQ.3) X1=HIRND2(6,XMIN1,XMAX1)
5343 c        IF(IOPMAIN.EQ.2) X2=HIRND2(6,XMIN2,XMAX2) 
5344 C        ********For q-qbar or (qq)-(qq)bar system use symetric
5345 C                distribution, for q-(qq) or qbar-(qq)bar use
5346 C                unsymetrical distribution
5347 C
5348         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000) X1=1.0-X1
5349         XXP=X1*(1.0-X2)
5350         XXT=X2*(1.0-X1)
5351         IF(XXP.LT.(D1+1.E-4/SW) .OR. XXT.LT.(D2+1.E-4/SW)) THEN
5352                 MISS4=MISS4+1
5353                 IF(MISS4.LE.1000) GO TO 410
5354                 GO TO 5000
5355         ENDIF
5356         IHNT2(13)=3
5357 C***************************************************
5358 C***************************************************
5359 600        CONTINUE
5360         IF(X1*(1.0-X2).LT.(AMPN**2-1.E-4)/SW.OR.
5361      &                        X2*(1.0-X1).LT.(AMTN**2-1.E-4)/SW) THEN
5362                 MISS=MISS+1
5363                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 2000
5364                 PKC=0.0
5365                 GO TO 30
5366         ENDIF
5367 C
5368         EPP=(1.0-X2)*WP
5369         EPM=X1*WM
5370         ETP=X2*WP
5371         ETM=(1.0-X1)*WM
5372         PP(JP,3)=(EPP-EPM)/2.0
5373         PP(JP,4)=(EPP+EPM)/2.0
5374         IF(EPP*EPM-PTP2.LT.0.0) GO TO 6000
5375         PP(JP,5)=SQRT(EPP*EPM-PTP2)
5376         NFP(JP,3)=NFP3
5377         NFP(JP,5)=NFP5
5378
5379         PT(JT,3)=(ETP-ETM)/2.0
5380         PT(JT,4)=(ETP+ETM)/2.0
5381         IF(ETP*ETM-PTT2.LT.0.0) GO TO 6000
5382         PT(JT,5)=SQRT(ETP*ETM-PTT2)
5383         NFT(JT,3)=NFT3
5384         NFT(JT,5)=NFT5
5385 C*****recoil PT from hard-inter is shared by two end-partons 
5386 C       so that pt=p1+p2
5387         PP(JP,1)=PP11-PKC11
5388         PP(JP,2)=PP12-PKC12
5389
5390         KCDIP=1
5391         KCDIT=1
5392         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000.OR.
5393      &                        ABS(NFP(JP,1)*NFP(JP,2)).LT.100) THEN
5394                 KCDIP=0
5395         ENDIF
5396         IF(ABS(NFT(JT,1)*NFT(JT,2)).GT.1000000.OR.
5397      &                        ABS(NFT(JT,1)*NFT(JT,2)).LT.100) THEN
5398                 KCDIT=0
5399         ENDIF
5400         IF((KCDIP.EQ.0.AND.RANART(NSEED).LT.0.5)
5401      &     .OR.(KCDIP.NE.0.AND.RANART(NSEED)
5402      &     .LT.0.5/(1.0+(PKC11**2+PKC12**2)/HIPR1(22)**2))) THEN
5403            PP(JP,6)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0+PP(JP,6)
5404            PP(JP,7)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0+PP(JP,7)
5405            PP(JP,8)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0
5406      &              +PP(JP,8)+PKC11
5407            PP(JP,9)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0
5408      &              +PP(JP,9)+PKC12
5409         ELSE
5410            PP(JP,8)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0+PP(JP,8)
5411            PP(JP,9)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0+PP(JP,9)
5412            PP(JP,6)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0
5413      &              +PP(JP,6)+PKC11
5414            PP(JP,7)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0
5415      &              +PP(JP,7)+PKC12
5416         ENDIF
5417         PP(JP,1)=PP(JP,6)+PP(JP,8)
5418         PP(JP,2)=PP(JP,7)+PP(JP,9)
5419 C                                ********pt kick for proj
5420         PT(JT,1)=PT11-PKC21
5421         PT(JT,2)=PT12-PKC22
5422         IF((KCDIT.EQ.0.AND.RANART(NSEED).LT.0.5)
5423      &     .OR.(KCDIT.NE.0.AND.RANART(NSEED)
5424      &     .LT.0.5/(1.0+(PKC21**2+PKC22**2)/HIPR1(22)**2))) THEN
5425            PT(JT,6)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0+PT(JT,6)
5426            PT(JT,7)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0+PT(JT,7)
5427            PT(JT,8)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0
5428      &              +PT(JT,8)+PKC21
5429            PT(JT,9)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0
5430      &              +PT(JT,9)+PKC22
5431         ELSE
5432            PT(JT,8)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0+PT(JT,8)
5433            PT(JT,9)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0+PT(JT,9)
5434            PT(JT,6)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0
5435      &              +PT(JT,6)+PKC21
5436            PT(JT,7)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0
5437      &              +PT(JT,7)+PKC22
5438         ENDIF
5439         PT(JT,1)=PT(JT,6)+PT(JT,8)
5440         PT(JT,2)=PT(JT,7)+PT(JT,9)
5441 C                        ********pt kick for targ
5442
5443         IF(NPJ(JP).NE.0) NFP(JP,5)=3
5444         IF(NTJ(JT).NE.0) NFT(JT,5)=3
5445 C                        ********jets must be connected to string
5446         IF(EPP/(EPM+0.0001).LT.ETP/(ETM+0.0001).AND.
5447      &                        ABS(NFP(JP,1)*NFP(JP,2)).LT.1000000)THEN
5448                 DO 620 JSB=1,15
5449                 PSB=PP(JP,JSB)
5450                 PP(JP,JSB)=PT(JT,JSB)
5451                 PT(JT,JSB)=PSB
5452                 NSB=NFP(JP,JSB)
5453                 NFP(JP,JSB)=NFT(JT,JSB)
5454                 NFT(JT,JSB)=NSB
5455 620                CONTINUE
5456 C                ********when Ycm(JP)<Ycm(JT) after the collision
5457 C                        exchange the positions of the two   
5458         ENDIF
5459 C
5460         RETURN
5461 C**************************************************
5462 C**************************************************
5463 1000        IERROR=1
5464         IF(IHPR2(10).EQ.0) RETURN
5465         WRITE(6,*) '     Fatal HIJSFT start error,abandon this event'
5466         WRITE(6,*) '     PROJ E+,E-,W+',EPP,EPM,WP
5467         WRITE(6,*) '     TARG E+,E-,W-',ETP,ETM,WM
5468         WRITE(6,*) '     W+*W-, (APN+ATN)^2',SW,SNN
5469         RETURN
5470 2000        IERROR=0
5471         IF(IHPR2(10).EQ.0) RETURN
5472         WRITE(6,*) '     (2)energy partition fail,'
5473         WRITE(6,*) '     HIJSFT not performed, but continue'
5474         WRITE(6,*) '     MP1,MPN',X1*(1.0-X2)*SW,AMPN**2
5475         WRITE(6,*) '     MT2,MTN',X2*(1.0-X1)*SW,AMTN**2
5476         RETURN
5477 3000        IERROR=0
5478         IF(IHPR2(10).EQ.0) RETURN
5479         WRITE(6,*) '     (3)something is wrong with the pt kick, '
5480         WRITE(6,*) '     HIJSFT not performed, but continue'
5481         WRITE(6,*) '     D1=',D1,' D2=',D2,' SW=',SW
5482         WRITE(6,*) '     HISTORY NFP5=',NFP(JP,5),' NFT5=',NFT(JT,5)
5483         WRITE(6,*) '     THIS COLLISON NFP5=',NFP5, ' NFT5=',NFT5
5484         WRITE(6,*) '     # OF JET IN PROJ',NPJ(JP),' IN TARG',NTJ(JT)
5485         RETURN
5486 4000        IERROR=0
5487         IF(IHPR2(10).EQ.0) RETURN
5488         WRITE(6,*) '     (4)unable to choose process, but not harmful'
5489         WRITE(6,*) '     HIJSFT not performed, but continue'
5490         WRITE(6,*) '     PTP=',SQRT(PTP2),' PTT=',SQRT(PTT2),' SW=',SW
5491         WRITE(6,*) '     AMCUT=',AMX,' JP=',JP,' JT=',JT
5492         WRITE(6,*) '     HISTORY NFP5=',NFP(JP,5),' NFT5=',NFT(JT,5)
5493         RETURN
5494 5000        IERROR=0
5495         IF(IHPR2(10).EQ.0) RETURN
5496         WRITE(6,*) '     energy partition failed(5),for limited try'
5497         WRITE(6,*) '     HIJSFT not performed, but continue'
5498         WRITE(6,*) '     NFP5=',NFP5,' NFT5=',NFT5
5499         WRITE(6,*) '     D1',D1,' X1(1-X2)',X1*(1.0-X2)
5500         WRITE(6,*) '     D2',D2,' X2(1-X1)',X2*(1.0-X1)
5501         RETURN
5502 6000        PKC=0.0
5503         MISS=MISS+1
5504         IF(MISS.LT.100) GO TO 30
5505         IERROR=1
5506         IF(IHPR2(10).EQ.0) RETURN
5507         WRITE(6,*) ' ERROR OCCURED, HIJSFT NOT PERFORMED'
5508         WRITE(6,*) ' Abort this event'
5509         WRITE(6,*) 'MTP,PTP2',EPP*EPM,PTP2,'  MTT,PTT2',ETP*ETM,PTT2 
5510         RETURN
5511         END
5512 C
5513 C
5514 C
5515 C ********************************************************
5516 C ************************              WOOD-SAX
5517         SUBROUTINE HIJWDS(IA,IDH,XHIGH)
5518 C     SETS UP HISTOGRAM IDH WITH RADII FOR
5519 C     NUCLEUS IA DISTRIBUTED ACCORDING TO THREE PARAM WOOD SAXON
5520         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
5521 cc      SAVE /HPARNT/
5522         COMMON/WOOD/R,D,FNORM,W
5523 cc      SAVE /WOOD/
5524 c        DIMENSION IAA(20),RR(20),DD(20),WW(20),RMS(20)
5525         DIMENSION IAA(20),RR(20),DD(20),WW(20)
5526         EXTERNAL RWDSAX,WDSAX
5527         SAVE   
5528 C
5529 C   PARAMETERS OF SPECIAL NUCLEI FROM ATOMIC DATA AND NUC DATA TABLES
5530 C     VOL 14, 5-6 1974
5531         DATA IAA/2,4,12,16,27,32,40,56,63,93,184,197,208,7*0./
5532         DATA RR/0.01,.964,2.355,2.608,2.84,3.458,3.766,3.971,4.214,
5533      1        4.87,6.51,6.38,6.624,7*0./
5534         DATA DD/0.5882,.322,.522,.513,.569,.61,.586,.5935,.586,.573,
5535      1        .535,.535,.549,7*0./
5536         DATA WW/0.0,.517,-0.149,-0.051,0.,-0.208,-0.161,13*0./
5537 c        DATA RMS/2.11,1.71,2.46,2.73,3.05,3.247,3.482,3.737,3.925,4.31,
5538 c     1        5.42,5.33,5.521,7*0./
5539 C
5540               A=IA
5541 C
5542 C                 ********SET WOOD-SAX PARAMS FIRST  AS IN DATE ET AL
5543               D=0.54
5544 C                        ********D IS WOOD SAX DIFFUSE PARAM IN FM
5545         R=1.19*A**(1./3.) - 1.61*A**(-1./3.)
5546 C                         ********R IS RADIUS PARAM
5547         W=0.
5548 C                 ********W IS The third of three WOOD-SAX PARAM
5549 C
5550 C                      ********CHECK TABLE FOR SPECIAL CASES
5551         DO 10 I=1,13
5552                 IF (IA.EQ.IAA(I)) THEN
5553                         R=RR(I)
5554                              D=DD(I)
5555                               W=WW(I)
5556 clin RS not used                              RS=RMS(I)
5557                       END IF
5558 10            CONTINUE
5559 C                             ********FNORM is the normalize factor
5560               FNORM=1.0
5561               XLOW=0.
5562               XHIGH=R+ 12.*D
5563               IF (W.LT.-0.01)  THEN
5564                       IF (XHIGH.GT.R/SQRT(ABS(W))) XHIGH=R/SQRT(ABS(W))
5565               END IF
5566               FGAUS=GAUSS1(RWDSAX,XLOW,XHIGH,0.001)
5567               FNORM=1./FGAUS
5568 C
5569         IF (IDH.EQ.1) THEN
5570            HINT1(72)=R
5571            HINT1(73)=D
5572            HINT1(74)=W
5573            HINT1(75)=FNORM/4.0/HIPR1(40)
5574         ELSE IF (IDH.EQ.2) THEN
5575            HINT1(76)=R
5576            HINT1(77)=D
5577            HINT1(78)=W
5578            HINT1(79)=FNORM/4.0/HIPR1(40)
5579         ENDIF
5580 C
5581 C             NOW SET UP HBOOK FUNCTIONS IDH FOR  R**2*RHO(R)
5582 C             THESE HISTOGRAMS ARE USED TO GENERATE RANDOM RADII
5583               CALL HIFUN(IDH,XLOW,XHIGH,RWDSAX)
5584               RETURN
5585               END
5586 C
5587 C
5588         FUNCTION WDSAX(X)
5589 C                             ********THREE PARAMETER WOOD SAXON
5590               COMMON/WOOD/R,D,FNORM,W
5591 cc      SAVE /WOOD/
5592         SAVE   
5593               WDSAX=FNORM*(1.+W*(X/R)**2)/(1+EXP((X-R)/D))
5594                IF (W.LT.0.) THEN
5595                        IF (X.GE.R/SQRT(ABS(W))) WDSAX=0.
5596                ENDIF
5597               RETURN
5598               END
5599 C
5600 C
5601         FUNCTION RWDSAX(X)
5602         SAVE   
5603               RWDSAX=X*X*WDSAX(X)
5604               RETURN
5605               END
5606 C
5607 C
5608 C
5609 C
5610 C The next three subroutines are for Monte Carlo generation 
5611 C according to a given function FHB. One calls first HIFUN 
5612 C with assigned channel number I, low and up limits. Then to 
5613 C generate the distribution one can call HIRND(I) which gives 
5614 C you a random number generated according to the given function.
5615
5616         SUBROUTINE HIFUN(I,XMIN,XMAX,FHB)
5617         COMMON/HIJHB/RR(10,201),XX(10,201)
5618 cc      SAVE /HIJHB/
5619         EXTERNAL FHB
5620         SAVE   
5621         FNORM=GAUSS1(FHB,XMIN,XMAX,0.001)
5622         DO 100 J=1,201
5623                 XX(I,J)=XMIN+(XMAX-XMIN)*(J-1)/200.0
5624                 XDD=XX(I,J)
5625                 RR(I,J)=GAUSS1(FHB,XMIN,XDD,0.001)/FNORM
5626 100        CONTINUE
5627         RETURN
5628         END
5629 C
5630 C
5631 C
5632         FUNCTION HIRND(I)
5633         COMMON/HIJHB/RR(10,201),XX(10,201)
5634 cc      SAVE /HIJHB/
5635       COMMON/RNDF77/NSEED
5636 cc      SAVE /RNDF77/
5637         SAVE   
5638         RX=RANART(NSEED)
5639         JL=0
5640         JU=202
5641 10        IF(JU-JL.GT.1) THEN
5642            JM=(JU+JL)/2
5643            IF((RR(I,201).GT.RR(I,1)).EQV.(RX.GT.RR(I,JM))) THEN
5644               JL=JM
5645            ELSE
5646               JU=JM
5647            ENDIF
5648         GO TO 10
5649         ENDIF
5650         J=JL
5651         IF(J.LT.1) J=1
5652         IF(J.GE.201) J=200
5653         HIRND=(XX(I,J)+XX(I,J+1))/2.0
5654         RETURN
5655         END        
5656 C
5657 C
5658 C
5659 C
5660 C        This generate random number between XMIN and XMAX
5661         FUNCTION HIRND2(I,XMIN,XMAX)
5662         COMMON/HIJHB/RR(10,201),XX(10,201)
5663 cc      SAVE /HIJHB/
5664       COMMON/RNDF77/NSEED
5665 cc      SAVE /RNDF77/
5666         SAVE   
5667         IF(XMIN.LT.XX(I,1)) XMIN=XX(I,1)
5668         IF(XMAX.GT.XX(I,201)) XMAX=XX(I,201)
5669         JMIN=1+int(200*(XMIN-XX(I,1))/(XX(I,201)-XX(I,1)))
5670         JMAX=1+int(200*(XMAX-XX(I,1))/(XX(I,201)-XX(I,1)))
5671         RX=RR(I,JMIN)+(RR(I,JMAX)-RR(I,JMIN))*RANART(NSEED)
5672         JL=0
5673         JU=202
5674 10        IF(JU-JL.GT.1) THEN
5675            JM=(JU+JL)/2
5676            IF((RR(I,201).GT.RR(I,1)).EQV.(RX.GT.RR(I,JM))) THEN
5677               JL=JM
5678            ELSE
5679               JU=JM
5680            ENDIF
5681         GO TO 10
5682         ENDIF
5683         J=JL
5684         IF(J.LT.1) J=1
5685         IF(J.GE.201) J=200
5686         HIRND2=(XX(I,J)+XX(I,J+1))/2.0
5687         RETURN
5688         END        
5689 C
5690 C
5691 C
5692 C
5693         SUBROUTINE HIJCRS
5694 C        THIS IS TO CALCULATE THE CROSS SECTIONS OF JET PRODUCTION AND
5695 C        THE TOTAL INELASTIC CROSS SECTIONS.
5696         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
5697 cc      SAVE /HPARNT/
5698         COMMON/NJET/N,ipcrs
5699 cc      SAVE /NJET/
5700         EXTERNAL FHIN,FTOT,FNJET,FTOTJT,FTOTRG
5701         SAVE   
5702         IF(HINT1(1).GE.10.0) CALL CRSJET
5703 C                        ********calculate jet cross section(in mb)
5704 C
5705         APHX1=HIPR1(6)*(IHNT2(1)**0.3333333-1.0)
5706         APHX2=HIPR1(6)*(IHNT2(3)**0.3333333-1.0)
5707         HINT1(11)=HINT1(14)-APHX1*HINT1(15)
5708      &                        -APHX2*HINT1(16)+APHX1*APHX2*HINT1(17)
5709         HINT1(10)=GAUSS1(FTOTJT,0.0,20.0,0.01)
5710         HINT1(12)=GAUSS1(FHIN,0.0,20.0,0.01)
5711         HINT1(13)=GAUSS1(FTOT,0.0,20.0,0.01)
5712         HINT1(60)=HINT1(61)-APHX1*HINT1(62)
5713      &                        -APHX2*HINT1(63)+APHX1*APHX2*HINT1(64)
5714         HINT1(59)=GAUSS1(FTOTRG,0.0,20.0,0.01)
5715         IF(HINT1(59).EQ.0.0) HINT1(59)=HINT1(60)
5716         IF(HINT1(1).GE.10.0) Then
5717            DO 20 I=0,20
5718               N=I
5719               HINT1(80+I)=GAUSS1(FNJET,0.0,20.0,0.01)/HINT1(12)
5720  20           CONTINUE
5721         ENDIF
5722         HINT1(10)=HINT1(10)*HIPR1(31)
5723         HINT1(12)=HINT1(12)*HIPR1(31)
5724         HINT1(13)=HINT1(13)*HIPR1(31)
5725         HINT1(59)=HINT1(59)*HIPR1(31)
5726 C                ********Total and Inel cross section are calculated
5727 C                        by Gaussian integration.
5728         IF(IHPR2(13).NE.0) THEN
5729         HIPR1(33)=1.36*(1.0+36.0/HINT1(1)**2)
5730      &             *ALOG(0.6+0.1*HINT1(1)**2)
5731         HIPR1(33)=HIPR1(33)/HINT1(12)
5732         ENDIF
5733 C                ********Parametrized cross section for single
5734 C                        diffractive reaction(Goulianos)
5735         RETURN
5736         END
5737 C
5738 C
5739 C
5740 C
5741         FUNCTION FTOT(X)
5742         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
5743 cc      SAVE /HPARNT/
5744         SAVE   
5745         OMG=OMG0(X)*(HIPR1(30)+HINT1(11))/HIPR1(31)/2.0
5746         FTOT=2.0*(1.0-EXP(-OMG))
5747         RETURN
5748         END
5749 C
5750 C
5751 C
5752         FUNCTION FHIN(X)
5753         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
5754 cc      SAVE /HPARNT/
5755         SAVE   
5756         OMG=OMG0(X)*(HIPR1(30)+HINT1(11))/HIPR1(31)/2.0
5757         FHIN=1.0-EXP(-2.0*OMG)
5758         RETURN
5759         END
5760 C
5761 C
5762 C
5763         FUNCTION FTOTJT(X)
5764         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
5765 cc      SAVE /HPARNT/
5766         SAVE   
5767         OMG=OMG0(X)*HINT1(11)/HIPR1(31)/2.0
5768         FTOTJT=1.0-EXP(-2.0*OMG)
5769         RETURN
5770         END
5771 C
5772 C
5773 C
5774         FUNCTION FTOTRG(X)
5775         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
5776 cc      SAVE /HPARNT/
5777         SAVE   
5778         OMG=OMG0(X)*HINT1(60)/HIPR1(31)/2.0
5779         FTOTRG=1.0-EXP(-2.0*OMG)
5780         RETURN
5781         END
5782 C
5783 C
5784 C
5785 C
5786         FUNCTION FNJET(X)
5787         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
5788 cc      SAVE /HPARNT/
5789         COMMON/NJET/N,ipcrs
5790 cc      SAVE /NJET/
5791         SAVE   
5792         OMG1=OMG0(X)*HINT1(11)/HIPR1(31)
5793         C0=EXP(N*ALOG(OMG1)-SGMIN(N+1))
5794         IF(N.EQ.0) C0=1.0-EXP(-2.0*OMG0(X)*HIPR1(30)/HIPR1(31)/2.0)
5795         FNJET=C0*EXP(-OMG1)
5796         RETURN
5797         END
5798 C
5799 C
5800 C
5801 C
5802 C
5803         FUNCTION SGMIN(N)
5804         SAVE   
5805         GA=0.
5806         IF(N.LE.2) GO TO 20
5807         DO 10 I=1,N-1
5808         Z=I
5809         GA=GA+ALOG(Z)
5810 10      CONTINUE
5811 20      SGMIN=GA
5812         RETURN
5813         END
5814 C
5815 C
5816 C
5817         FUNCTION OMG0(X)
5818         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
5819 cc      SAVE /HPARNT/
5820         COMMON /BESEL/X4
5821 cc      SAVE /BESEL/
5822         EXTERNAL BK
5823         SAVE   
5824         X4=HIPR1(32)*SQRT(X)
5825         OMG0=HIPR1(32)**2*GAUSS2(BK,X4,X4+20.0,0.01)/96.0
5826         RETURN
5827         END
5828 C
5829 C
5830 C
5831         FUNCTION ROMG(X)
5832 C                ********This gives the eikonal function from a table
5833 C                        calculated in the first call
5834         DIMENSION FR(0:1000)
5835 clin-10/29/02 unsaved FR causes wrong values for ROMG with f77 compiler:
5836 cc        SAVE FR
5837         SAVE   
5838         DATA I0/0/
5839
5840         IF(I0.NE.0) GO TO 100
5841         DO 50 I=1,1001
5842         XR=(I-1)*0.01
5843         FR(I-1)=OMG0(XR)
5844 50        CONTINUE
5845 100        I0=1
5846         IF(X.GE.10.0) THEN
5847                 ROMG=0.0
5848                 RETURN
5849         ENDIF
5850         IX=INT(X*100)
5851         ROMG=(FR(IX)*((IX+1)*0.01-X)+FR(IX+1)*(X-IX*0.01))/0.01
5852         RETURN
5853         END
5854 C
5855 C
5856 C
5857         FUNCTION BK(X)
5858         COMMON /BESEL/X4
5859 cc      SAVE /BESEL/
5860         SAVE   
5861         BK=EXP(-X)*(X**2-X4**2)**2.50/15.0
5862         RETURN
5863         END
5864 C
5865 C
5866 C        THIS PROGRAM IS TO CALCULATE THE JET CROSS SECTION
5867 C        THE INTEGRATION IS DONE BY USING VEGAS
5868 C
5869         SUBROUTINE CRSJET
5870         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
5871         REAL HIPR1(100),HINT1(100)
5872         COMMON/HPARNT/HIPR1,IHPR2(50),HINT1,IHNT2(50)
5873 cc      SAVE /HPARNT/
5874         COMMON/NJET/N,ipcrs
5875 cc      SAVE /NJET/
5876         COMMON/BVEG1/XL(10),XU(10),ACC,NDIM,NCALL,ITMX,NPRN
5877 cc      SAVE /BVEG1/
5878         COMMON/BVEG2/XI(50,10),SI,SI2,SWGT,SCHI,NDO,IT
5879 cc      SAVE /BVEG2/
5880         COMMON/BVEG3/F,TI,TSI
5881 cc      SAVE /BVEG3/
5882         COMMON/SEDVAX/NUM1
5883 cc      SAVE /SEDVAX/
5884         EXTERNAL FJET,FJETRG
5885         SAVE   
5886 C
5887 c************************
5888 c        NCALL give the number of inner-iteration, ITMX 
5889 C       gives the limit of out-iteration. Nprn is an option
5890 C       ( 1: print the integration process. 0: do not print)
5891 C
5892         NDIM=3
5893         ipcrs=0
5894         CALL VEGAS(FJET,AVGI,SD,CHI2A)
5895         HINT1(14)=sngl(AVGI)/2.5682
5896         IF(IHPR2(6).EQ.1 .AND. IHNT2(1).GT.1) THEN
5897                 ipcrs=1
5898                 CALL VEGAS(FJET,AVGI,SD,CHI2A)
5899                 HINT1(15)=sngl(AVGI)/2.5682
5900         ENDIF
5901         IF(IHPR2(6).EQ.1 .AND. IHNT2(3).GT.1) THEN
5902                 ipcrs=2
5903                 CALL VEGAS(FJET,AVGI,SD,CHI2A)
5904                 HINT1(16)=sngl(AVGI)/2.5682
5905         ENDIF
5906         IF(IHPR2(6).EQ.1.AND.IHNT2(1).GT.1.AND.IHNT2(3).GT.1) THEN
5907                 ipcrs=3
5908                 CALL VEGAS(FJET,AVGI,SD,CHI2A)
5909                 HINT1(17)=sngl(AVGI)/2.5682
5910         ENDIF
5911 C                ********Total inclusive jet cross section(Pt>P0) 
5912 C
5913         IF(IHPR2(3).NE.0) THEN
5914            ipcrs=0
5915            CALL VEGAS(FJETRG,AVGI,SD,CHI2A)
5916            HINT1(61)=sngl(AVGI)/2.5682
5917            IF(IHPR2(6).EQ.1 .AND. IHNT2(1).GT.1) THEN
5918               ipcrs=1
5919               CALL VEGAS(FJETRG,AVGI,SD,CHI2A)
5920               HINT1(62)=sngl(AVGI)/2.5682
5921            ENDIF
5922            IF(IHPR2(6).EQ.1 .AND. IHNT2(3).GT.1) THEN
5923               ipcrs=2
5924               CALL VEGAS(FJETRG,AVGI,SD,CHI2A)
5925               HINT1(63)=sngl(AVGI)/2.5682
5926            ENDIF
5927            IF(IHPR2(6).EQ.1.AND.IHNT2(1).GT.1.AND.IHNT2(3).GT.1) THEN
5928               ipcrs=3
5929               CALL VEGAS(FJETRG,AVGI,SD,CHI2A)
5930               HINT1(64)=sngl(AVGI)/2.5682
5931            ENDIF
5932         ENDIF
5933 C                        ********cross section of trigger jet
5934 C
5935         RETURN
5936         END
5937 C
5938 C
5939 C
5940         FUNCTION FJET(X,WGT)
5941         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
5942         REAL HIPR1(100),HINT1(100)
5943         COMMON/HPARNT/HIPR1,IHPR2(50),HINT1,IHNT2(50)
5944 cc      SAVE /HPARNT/
5945         DIMENSION X(10)
5946         SAVE   
5947         WGT=WGT
5948         PT2=dble(HINT1(1)**2/4.0-HIPR1(8)**2)*X(1)+dble(HIPR1(8))**2
5949         XT=2.0d0*DSQRT(PT2)/dble(HINT1(1))
5950         YMX1=DLOG(1.0d0/XT+DSQRT(1.0d0/XT**2-1.0d0))
5951         Y1=2.0d0*YMX1*X(2)-YMX1
5952         YMX2=DLOG(2.0d0/XT-DEXP(Y1))
5953         YMN2=DLOG(2.0d0/XT-DEXP(-Y1))
5954         Y2=(YMX2+YMN2)*X(3)-YMN2
5955         FJET=2.0d0*YMX1*(YMX2+YMN2)*dble(HINT1(1)**2/4.0-HIPR1(8)**2)
5956      &                *G(Y1,Y2,PT2)/2.0d0
5957         RETURN
5958         END
5959 C
5960 C
5961 C
5962         FUNCTION FJETRG(X,WGT)
5963         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
5964         REAL HIPR1(100),HINT1(100),PTMAX,PTMIN
5965         COMMON/HPARNT/HIPR1,IHPR2(50),HINT1,IHNT2(50)
5966 cc      SAVE /HPARNT/
5967         DIMENSION X(10)
5968         SAVE   
5969         WGT=WGT
5970         PTMIN=ABS(HIPR1(10))-0.25
5971         PTMIN=MAX(PTMIN,HIPR1(8))
5972         AM2=0.D0
5973         IF(IHPR2(3).EQ.3) THEN
5974            AM2=dble(HIPR1(7)**2)
5975            PTMIN=MAX(0.0,HIPR1(10))
5976         ENDIF
5977         PTMAX=ABS(HIPR1(10))+0.25
5978         IF(HIPR1(10).LE.0.0) PTMAX=HINT1(1)/2.0-sngl(AM2)
5979         IF(PTMAX.LE.PTMIN) PTMAX=PTMIN+0.25
5980         PT2=dble(PTMAX**2-PTMIN**2)*X(1)+dble(PTMIN)**2
5981         AMT2=PT2+AM2
5982         XT=2.0d0*DSQRT(AMT2)/dble(HINT1(1))
5983         YMX1=DLOG(1.0d0/XT+DSQRT(1.0d0/XT**2-1.0d0))
5984         Y1=2.0d0*YMX1*X(2)-YMX1
5985         YMX2=DLOG(2.0d0/XT-DEXP(Y1))
5986         YMN2=DLOG(2.0d0/XT-DEXP(-Y1))
5987         Y2=(YMX2+YMN2)*X(3)-YMN2
5988         IF(IHPR2(3).EQ.3) THEN
5989            GTRIG=2.0d0*GHVQ(Y1,Y2,AMT2)
5990         ELSE IF(IHPR2(3).EQ.2) THEN
5991            GTRIG=2.0d0*GPHOTN(Y1,Y2,PT2)
5992         ELSE
5993            GTRIG=G(Y1,Y2,PT2)
5994         ENDIF
5995         FJETRG=2.0d0*YMX1*(YMX2+YMN2)*dble(PTMAX**2-PTMIN**2)
5996      &                *GTRIG/2.0d0
5997         RETURN
5998         END
5999 C
6000 C
6001 C
6002         FUNCTION GHVQ(Y1,Y2,AMT2)
6003         IMPLICIT DOUBLE PRECISION  (A-H,O-Z)
6004         REAL HIPR1(100),HINT1(100)
6005         COMMON/HPARNT/HIPR1,IHPR2(50),HINT1,IHNT2(50)
6006 cc      SAVE /HPARNT/
6007         DIMENSION F(2,7)
6008         SAVE   
6009         XT=2.0d0*DSQRT(AMT2)/dble(HINT1(1))
6010         X1=0.5d0*XT*(DEXP(Y1)+DEXP(Y2))
6011         X2=0.5d0*XT*(DEXP(-Y1)+DEXP(-Y2))
6012         SS=X1*X2*dble(HINT1(1))**2
6013         AF=4.0d0
6014         IF(IHPR2(18).NE.0) AF=5.0d0
6015         DLAM=dble(HIPR1(15))
6016         APH=12.0d0*3.1415926d0/(33.d0-2.d0*AF)/DLOG(AMT2/DLAM**2)
6017 C
6018         CALL PARTON(F,X1,X2,AMT2)
6019 C
6020         Gqq=4.d0*(DCOSH(Y1-Y2)+dble(HIPR1(7))**2/AMT2)
6021      &       /(1.D0+DCOSH(Y1-Y2))
6022      &       /9.d0*(F(1,1)*F(2,2)+F(1,2)*F(2,1)+F(1,3)*F(2,4)
6023      &       +F(1,4)*F(2,3)+F(1,5)*F(2,6)+F(1,6)*F(2,5))
6024         Ggg=(8.D0*DCOSH(Y1-Y2)-1.D0)
6025      &       *(DCOSH(Y1-Y2)+2.d0*dble(HIPR1(7))**2
6026      &       /AMT2-2.d0*dble(HIPR1(7))**4/AMT2**2)/(1.d0+DCOSH(Y1-Y2))
6027      &       /24.d0*F(1,7)*F(2,7)
6028 C
6029         GHVQ=(Gqq+Ggg)*dble(HIPR1(23))*3.14159d0*APH**2/SS**2
6030         RETURN
6031         END
6032 C
6033 C
6034 C
6035         FUNCTION GPHOTN(Y1,Y2,PT2)
6036         IMPLICIT DOUBLE PRECISION  (A-H,O-Z)
6037         REAL HIPR1(100),HINT1(100)
6038         COMMON/HPARNT/HIPR1,IHPR2(50),HINT1,IHNT2(50)
6039 cc      SAVE /HPARNT/
6040         DIMENSION F(2,7)
6041         SAVE   
6042         XT=2.d0*DSQRT(PT2)/dble(HINT1(1))
6043         X1=0.5d0*XT*(DEXP(Y1)+DEXP(Y2))
6044         X2=0.5d0*XT*(DEXP(-Y1)+DEXP(-Y2))
6045         Z=DSQRT(1.D0-XT**2/X1/X2)
6046         SS=X1*X2*dble(HINT1(1))**2
6047         T=-(1.d0-Z)/2.d0
6048         U=-(1.d0+Z)/2.d0
6049         AF=3.d0
6050         DLAM=dble(HIPR1(15))
6051         APH=12.d0*3.1415926d0/(33.d0-2.d0*AF)/DLOG(PT2/DLAM**2)
6052         APHEM=1.d0/137.d0
6053 C
6054         CALL PARTON(F,X1,X2,PT2)
6055 C
6056         G11=-(U**2+1.d0)/U/3.d0*F(1,7)*(4.d0*F(2,1)+4.d0*F(2,2)
6057      &      +F(2,3)+F(2,4)+F(2,5)+F(2,6))/9.d0
6058         G12=-(T**2+1.d0)/T/3.d0*F(2,7)*(4.d0*F(1,1)+4.d0*F(1,2)
6059      &      +F(1,3)+F(1,4)+F(1,5)+F(1,6))/9.d0
6060         G2=8.d0*(U**2+T**2)/U/T/9.d0*(4.d0*F(1,1)*F(2,2)
6061      &     +4.d0*F(1,2)*F(2,1)+F(1,3)*F(2,4)+F(1,4)*F(2,3)
6062      &     +F(1,5)*F(2,6)+F(1,6)*F(2,5))/9.d0
6063 C
6064         GPHOTN=(G11+G12+G2)*dble(HIPR1(23))*3.14159d0*APH*APHEM/SS**2
6065         RETURN
6066         END
6067 C
6068 C
6069 C
6070 C
6071         FUNCTION G(Y1,Y2,PT2)
6072         IMPLICIT DOUBLE PRECISION  (A-H,O-Z)
6073         REAL HIPR1(100),HINT1(100)
6074         COMMON/HPARNT/HIPR1,IHPR2(50),HINT1,IHNT2(50)
6075 cc      SAVE /HPARNT/
6076         DIMENSION F(2,7)
6077         SAVE   
6078         XT=2.d0*DSQRT(PT2)/dble(HINT1(1))
6079         X1=0.5d0*XT*(DEXP(Y1)+DEXP(Y2))
6080         X2=0.5d0*XT*(DEXP(-Y1)+DEXP(-Y2))
6081         Z=DSQRT(1.D0-XT**2/X1/X2)
6082         SS=X1*X2*dble(HINT1(1))**2
6083         T=-(1.d0-Z)/2.d0
6084         U=-(1.d0+Z)/2.d0
6085         AF=3.d0
6086         DLAM=dble(HIPR1(15))
6087         APH=12.d0*3.1415926d0/(33.d0-2.d0*AF)/DLOG(PT2/DLAM**2)
6088 C
6089         CALL PARTON(F,X1,X2,PT2)
6090 C
6091         G11=( (F(1,1)+F(1,2))*(F(2,3)+F(2,4)+F(2,5)+F(2,6))
6092      &      +(F(1,3)+F(1,4))*(F(2,5)+F(2,6)) )*SUBCR1(T,U)
6093 C
6094         G12=( (F(2,1)+F(2,2))*(F(1,3)+F(1,4)+F(1,5)+F(1,6))
6095      &      +(F(2,3)+F(2,4))*(F(1,5)+F(1,6)) )*SUBCR1(U,T)
6096 C
6097         G13=(F(1,1)*F(2,1)+F(1,2)*F(2,2)+F(1,3)*F(2,3)+F(1,4)*F(2,4)
6098      &      +F(1,5)*F(2,5)+F(1,6)*F(2,6))*(SUBCR1(U,T)
6099      &      +SUBCR1(T,U)-8.D0/T/U/27.D0)
6100 C
6101         G2=(AF-1)*(F(1,1)*F(2,2)+F(2,1)*F(1,2)+F(1,3)*F(2,4)
6102      &     +F(2,3)*F(1,4)+F(1,5)*F(2,6)+F(2,5)*F(1,6))*SUBCR2(T,U)
6103 C
6104         G31=(F(1,1)*F(2,2)+F(1,3)*F(2,4)+F(1,5)*F(2,6))*SUBCR3(T,U)
6105         G32=(F(2,1)*F(1,2)+F(2,3)*F(1,4)+F(2,5)*F(1,6))*SUBCR3(U,T)
6106 C
6107         G4=(F(1,1)*F(2,2)+F(2,1)*F(1,2)+F(1,3)*F(2,4)+F(2,3)*F(1,4)+
6108      1        F(1,5)*F(2,6)+F(2,5)*F(1,6))*SUBCR4(T,U)
6109 C
6110         G5=AF*F(1,7)*F(2,7)*SUBCR5(T,U)
6111 C
6112         G61=F(1,7)*(F(2,1)+F(2,2)+F(2,3)+F(2,4)+F(2,5)
6113      &      +F(2,6))*SUBCR6(T,U)
6114         G62=F(2,7)*(F(1,1)+F(1,2)+F(1,3)+F(1,4)+F(1,5)
6115      &      +F(1,6))*SUBCR6(U,T)
6116 C
6117         G7=F(1,7)*F(2,7)*SUBCR7(T,U)
6118 C
6119         G=(G11+G12+G13+G2+G31+G32+G4+G5+G61+G62+G7)*dble(HIPR1(17))*
6120      1        3.14159D0*APH**2/SS**2
6121         RETURN
6122         END
6123 C
6124 C
6125 C
6126         FUNCTION SUBCR1(T,U)
6127         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6128         SUBCR1=4.D0/9.D0*(1.D0+U**2)/T**2
6129         RETURN
6130         END
6131 C
6132 C
6133         FUNCTION SUBCR2(T,U)
6134         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6135         SUBCR2=4.D0/9.D0*(T**2+U**2)
6136         RETURN
6137         END
6138 C
6139 C
6140         FUNCTION SUBCR3(T,U)
6141         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6142         SUBCR3=4.D0/9.D0*(T**2+U**2+(1.D0+U**2)/T**2
6143      1        -2.D0*U**2/3.D0/T)
6144         RETURN
6145         END
6146 C
6147 C
6148         FUNCTION SUBCR4(T,U)
6149         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6150         SUBCR4=8.D0/3.D0*(T**2+U**2)*(4.D0/9.D0/T/U-1.D0)
6151         RETURN
6152         END
6153 C
6154 C
6155 C
6156         FUNCTION SUBCR5(T,U)
6157         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6158         SUBCR5=3.D0/8.D0*(T**2+U**2)*(4.D0/9.D0/T/U-1.D0)
6159         RETURN
6160         END
6161 C
6162 C
6163         FUNCTION SUBCR6(T,U)
6164         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6165         SUBCR6=(1.D0+U**2)*(1.D0/T**2-4.D0/U/9.D0)
6166         RETURN
6167         END
6168 C
6169 C
6170         FUNCTION SUBCR7(T,U)
6171         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6172         SUBCR7=9.D0/2.D0*(3.D0-T*U-U/T**2-T/U**2)
6173         RETURN
6174         END
6175 C
6176 C
6177 C
6178         SUBROUTINE PARTON(F,X1,X2,QQ)
6179         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6180         REAL HIPR1(100),HINT1(100)
6181         COMMON/HPARNT/HIPR1,IHPR2(50),HINT1,IHNT2(50)
6182 cc      SAVE /HPARNT/
6183         COMMON/NJET/N,ipcrs
6184 cc      SAVE /NJET/
6185         DIMENSION F(2,7) 
6186         SAVE   
6187         DLAM=dble(HIPR1(15))
6188         Q0=dble(HIPR1(16))
6189         S=DLOG(DLOG(QQ/DLAM**2)/DLOG(Q0**2/DLAM**2))
6190         IF(IHPR2(7).EQ.2) GO TO 200
6191 C*******************************************************
6192         AT1=0.419d0+0.004d0*S-0.007d0*S**2
6193         AT2=3.460d0+0.724d0*S-0.066d0*S**2
6194         GMUD=4.40d0-4.86d0*S+1.33d0*S**2
6195         AT3=0.763d0-0.237d0*S+0.026d0*S**2
6196         AT4=4.00d0+0.627d0*S-0.019d0*S**2
6197         GMD=-0.421d0*S+0.033d0*S**2
6198 C*******************************************************
6199         CAS=1.265d0-1.132d0*S+0.293d0*S**2
6200         AS=-0.372d0*S-0.029d0*S**2
6201         BS=8.05d0+1.59d0*S-0.153d0*S**2
6202         APHS=6.31d0*S-0.273d0*S**2
6203         BTAS=-10.5d0*S-3.17d0*S**2
6204         GMS=14.7d0*S+9.80d0*S**2
6205 C********************************************************
6206 C        CAC=0.135*S-0.075*S**2
6207 C        AC=-0.036-0.222*S-0.058*S**2
6208 C        BC=6.35+3.26*S-0.909*S**2
6209 C        APHC=-3.03*S+1.50*S**2
6210 C        BTAC=17.4*S-11.3*S**2
6211 C        GMC=-17.9*S+15.6*S**2
6212 C***********************************************************
6213         CAG=1.56d0-1.71d0*S+0.638d0*S**2
6214         AG=-0.949d0*S+0.325d0*S**2
6215         BG=6.0d0+1.44d0*S-1.05d0*S**2
6216         APHG=9.0d0-7.19d0*S+0.255d0*S**2
6217         BTAG=-16.5d0*S+10.9d0*S**2
6218         GMG=15.3d0*S-10.1d0*S**2
6219         GO TO 300
6220 C********************************************************
6221 200        AT1=0.374d0+0.014d0*S
6222         AT2=3.33d0+0.753d0*S-0.076d0*S**2
6223         GMUD=6.03d0-6.22d0*S+1.56d0*S**2
6224         AT3=0.761d0-0.232d0*S+0.023d0*S**2
6225         AT4=3.83d0+0.627d0*S-0.019d0*S**2
6226         GMD=-0.418d0*S+0.036d0*S**2
6227 C************************************
6228         CAS=1.67d0-1.92d0*S+0.582d0*S**2
6229         AS=-0.273d0*S-0.164d0*S**2
6230         BS=9.15d0+0.530d0*S-0.763d0*S**2
6231         APHS=15.7d0*S-2.83d0*S**2
6232         BTAS=-101.0d0*S+44.7d0*S**2
6233         GMS=223.0d0*S-117.0d0*S**2
6234 C*********************************
6235 C        CAC=0.067*S-0.031*S**2
6236 C        AC=-0.120-0.233*S-0.023*S**2
6237 C        BC=3.51+3.66*S-0.453*S**2
6238 C        APHC=-0.474*S+0.358*S**2
6239 C        BTAC=9.50*S-5.43*S**2
6240 C        GMC=-16.6*S+15.5*S**2
6241 C**********************************
6242         CAG=0.879d0-0.971d0*S+0.434d0*S**2
6243         AG=-1.16d0*S+0.476d0*S**2
6244         BG=4.0d0+1.23d0*S-0.254d0*S**2
6245         APHG=9.0d0-5.64d0*S-0.817d0*S**2
6246         BTAG=-7.54d0*S+5.50d0*S**2
6247         GMG=-0.596d0*S+1.26d0*S**2
6248 C*********************************
6249 300        B12=DEXP(GMRE(AT1)+GMRE(AT2+1.D0)-GMRE(AT1+AT2+1.D0))
6250         B34=DEXP(GMRE(AT3)+GMRE(AT4+1.D0)-GMRE(AT3+AT4+1.D0))
6251         CNUD=3.D0/B12/(1.D0+GMUD*AT1/(AT1+AT2+1.D0))
6252         CND=1.D0/B34/(1.D0+GMD*AT3/(AT3+AT4+1.D0))
6253 C********************************************************
6254 C        FUD=X*(U+D)
6255 C        FS=X*2(UBAR+DBAR+SBAR)  AND UBAR=DBAR=SBAR
6256 C*******************************************************
6257         FUD1=CNUD*X1**AT1*(1.D0-X1)**AT2*(1.D0+GMUD*X1)
6258         FS1=CAS*X1**AS*(1.D0-X1)**BS*(1.D0+APHS*X1
6259      &      +BTAS*X1**2+GMS*X1**3)
6260         F(1,3)=CND*X1**AT3*(1.D0-X1)**AT4*(1.D0+GMD*X1)+FS1/6.D0
6261         F(1,1)=FUD1-F(1,3)+FS1/3.D0
6262         F(1,2)=FS1/6.D0
6263         F(1,4)=FS1/6.D0
6264         F(1,5)=FS1/6.D0
6265         F(1,6)=FS1/6.D0
6266         F(1,7)=CAG*X1**AG*(1.D0-X1)**BG*(1.D0+APHG*X1
6267      &         +BTAG*X1**2+GMG*X1**3)
6268 C
6269         FUD2=CNUD*X2**AT1*(1.D0-X2)**AT2*(1.D0+GMUD*X2)
6270         FS2=CAS*X2**AS*(1.D0-X2)**BS*(1.D0+APHS*X2
6271      &      +BTAS*X2**2+GMS*X2**3)
6272         F(2,3)=CND*X2**AT3*(1.D0-X2)**AT4*(1.D0+GMD*X2)+FS2/6.D0
6273         F(2,1)=FUD2-F(2,3)+FS2/3.D0
6274         F(2,2)=FS2/6.D0
6275         F(2,4)=FS2/6.D0
6276         F(2,5)=FS2/6.D0
6277         F(2,6)=FS2/6.D0
6278         F(2,7)=CAG*X2**AG*(1.D0-X2)**BG*(1.D0+APHG*X2
6279      &         +BTAG*X2**2+GMG*X2**3)
6280 C***********Nuclear effect on the structure function****************
6281 C
6282         IF(IHPR2(6).EQ.1 .AND. IHNT2(1).GT.1) THEN
6283            AAX=1.193d0*dble(ALOG(FLOAT(IHNT2(1)))**0.16666666)
6284            RRX=AAX*(X1**3-1.2d0*X1**2+0.21d0*X1)+1.d0
6285      &               +dble(1.079*(FLOAT(IHNT2(1))**0.33333333-1.0))
6286      &          /dble(ALOG(float(IHNT2(1))+1.0))*DSQRT(X1)
6287      &          *DEXP(-X1**2/0.01d0)
6288 c     &          /DLOG(IHNT2(1)+1.0D0)*(DSQRT(X1)*DEXP(-X1**2/0.01)
6289            IF(ipcrs.EQ.1 .OR.ipcrs.EQ.3) RRX=DEXP(-X1**2/0.01d0)
6290            DO 400 I=1,7
6291               F(1,I)=RRX*F(1,I)
6292  400           CONTINUE
6293         ENDIF
6294         IF(IHPR2(6).EQ.1 .AND. IHNT2(3).GT.1) THEN
6295            AAX=1.193d0*dble(ALOG(FLOAT(IHNT2(3)))**0.16666666)
6296            RRX=AAX*(X2**3-1.2d0*X2**2+0.21d0*X2)+1.d0
6297      &               +dble(1.079*(FLOAT(IHNT2(3))**0.33333-1.0))
6298      &          /dble(ALOG(float(IHNT2(3))+1.0))*DSQRT(X2)
6299      &          *DEXP(-X2**2/0.01d0)
6300 c     &         /DLOG(IHNT2(3)+1.0D0)*DSQRT(X2)*DEXP(-X2**2/0.01)
6301            IF(ipcrs.EQ.2 .OR. ipcrs.EQ.3) RRX=DEXP(-X2**2/0.01d0)
6302            DO 500 I=1,7
6303               F(2,I)=RRX*F(2,I)
6304  500           CONTINUE
6305         ENDIF
6306 c
6307         RETURN
6308         END
6309 C
6310 C
6311 C
6312         FUNCTION GMRE(X)
6313         IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6314         SAVE   
6315         Z=X
6316         IF(X.GT.3.0D0) GO TO 10
6317         Z=X+3.D0
6318 10      GMRE=0.5D0*DLOG(2.D0*3.14159265D0/Z)+Z*DLOG(Z)-Z+DLOG(1.D0
6319      1        +1.D0/12.D0/Z+1.D0/288.D0/Z**2-139.D0/51840.D0/Z**3
6320      1        -571.D0/2488320.D0/Z**4)
6321         IF(Z.EQ.X) GO TO 20
6322         GMRE=GMRE-DLOG(Z-1.D0)-DLOG(Z-2.D0)-DLOG(Z-3.D0)
6323 20      CONTINUE
6324         RETURN
6325         END
6326 c
6327 C
6328 C
6329 C***************************************************************
6330
6331         BLOCK DATA HIDATA
6332         PARAMETER (MAXSTR=150001)
6333         DOUBLE PRECISION  XL(10),XU(10),ACC
6334         COMMON/BVEG1/XL,XU,ACC,NDIM,NCALL,ITMX,NPRN
6335 cc      SAVE /BVEG1/
6336         COMMON/SEDVAX/NUM1
6337 cc      SAVE /SEDVAX/
6338         COMMON/HPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
6339 cc      SAVE /HPARNT/
6340         COMMON/HMAIN1/EATT,JATT,NATT,NT,NP,N0,N01,N10,N11
6341 cc      SAVE /HMAIN1/
6342         COMMON/HMAIN2/KATT(MAXSTR,4),PATT(MAXSTR,4)
6343 cc      SAVE /HMAIN2/
6344         COMMON/HSTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
6345 cc      SAVE /HSTRNG/
6346         COMMON/hjcrdn/YP(3,300),YT(3,300)
6347 cc      SAVE /hjcrdn/
6348         COMMON/HJJET1/NPJ(300),KFPJ(300,500),PJPX(300,500),
6349      &               PJPY(300,500),PJPZ(300,500),PJPE(300,500),
6350      &               PJPM(300,500),NTJ(300),KFTJ(300,500),
6351      &               PJTX(300,500),PJTY(300,500),PJTZ(300,500),
6352      &               PJTE(300,500),PJTM(300,500)
6353 cc      SAVE /HJJET1/
6354         COMMON/HJJET2/NSG,NJSG(MAXSTR),IASG(MAXSTR,3),K1SG(MAXSTR,100),
6355      &       K2SG(MAXSTR,100),PXSG(MAXSTR,100),PYSG(MAXSTR,100),
6356      &       PZSG(MAXSTR,100),PESG(MAXSTR,100),PMSG(MAXSTR,100)
6357 cc      SAVE /HJJET2/
6358         COMMON/HIJDAT/HIDAT0(10,10),HIDAT(10)
6359 cc      SAVE /HIJDAT/
6360         COMMON/HPINT/MINT4,MINT5,ATCO(200,20),ATXS(0:200)
6361 cc      SAVE /HPINT/
6362 cwei        DOUBLE PRECISION PATT
6363         SAVE   
6364         DATA NUM1/30123984/,XL/10*0.D0/,XU/10*1.D0/
6365         DATA NCALL/1000/,ITMX/100/,ACC/0.01/,NPRN/0/
6366 C...give all the switchs and parameters the default values
6367 clin-4/2008 input.ampt provides NSEED for AMPT:
6368 c        DATA NSEED/74769375/
6369         DATA HIPR1/
6370      &       1.5,  0.35, 0.5,  0.9,  2.0,  0.1,  1.5,  2.0, -1.0, -2.25,
6371      &       2.0,  0.5,  1.0,  2.0,  0.2,  2.0,  2.5,  0.3,  0.1,  1.4,
6372      &       1.6,  1.0,  2.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.4,  57.0,
6373      &       28.5, 3.9,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  0.0,  
6374      &       3.14159,
6375      &       0.0,  0.4,  0.1,  1.5,  0.1, 0.25, 0.0,  0.5,  0.0,  0.0,
6376      &       50*0.0/
6377
6378         DATA IHPR2/
6379      &       1,    3,    0,    1,    1,    1,    1,    10,    0,    0,
6380      &       1,    1,    1,    1,    0,    0,    1,     0,    0,    1,
6381      &        30*0/
6382
6383         DATA HINT1/100*0/
6384         DATA IHNT2/50*0/
6385
6386 C...initialize all the data common blocks
6387         DATA NATT/0/,EATT/0.0/,JATT/0/,NT/0/,NP/0/,
6388      1 N0/0/,N01/0/,N10/0/,N11/0/
6389 clin-4/26/01
6390 c        DATA KATT/520000*0/PATT/520000*0.0/
6391         DATA KATT/600004*0/,PATT/600004*0.0/
6392
6393         DATA NFP/4500*0/,PP/4500*0.0/,NFT/4500*0/,PT/4500*0.0/
6394
6395         DATA YP/900*0.0/,YT/900*0.0/
6396
6397         DATA NPJ/300*0/,KFPJ/150000*0/,PJPX/150000*0.0/,PJPY/150000*0.0/
6398      &        ,PJPZ/150000*0.0/,PJPE/150000*0.0/,PJPM/150000*0.0/
6399         DATA NTJ/300*0/,KFTJ/150000*0/,PJTX/150000*0.0/,PJTY/150000*0.0/
6400      &        ,PJTZ/150000*0.0/,PJTE/150000*0.0/,PJTM/150000*0.0/
6401
6402 clin-4/2008
6403 c        DATA NSG/0/,NJSG/900*0/,IASG/2700*0/,K1SG/90000*0/,K2SG/90000*0/
6404 c     &       ,PXSG/90000*0.0/,PYSG/90000*0.0/,PZSG/90000*0.0/
6405 c     &       ,PESG/90000*0.0/,PMSG/90000*0.0/
6406         DATA NSG/0/,NJSG/150001*0/,IASG/450003*0/,
6407      &       K1SG/15000100*0/,K2SG/15000100*0/,
6408      &       PXSG/15000100*0.0/,PYSG/15000100*0.0/,PZSG/15000100*0.0/,
6409      &       PESG/15000100*0.0/,PMSG/15000100*0.0/
6410         DATA MINT4/0/,MINT5/0/,ATCO/4000*0.0/,ATXS/201*0.0/
6411         DATA (HIDAT0(1,I),I=1,10)/0.0,0.0,0.0,0.0,0.0,0.0,2.25,
6412      &          2.5,4.0,4.1/
6413         DATA (HIDAT0(2,I),I=1,10)/2.0,3.0,5.0,6.0,7.0,8.0,8.0,10.0,
6414      &                10.0,10.0/
6415         DATA (HIDAT0(3,I),I=1,10)/1.0,0.8,0.8,0.7,0.45,0.215,
6416      &          0.21,0.19,0.19,0.19/
6417         DATA (HIDAT0(4,I),I=1,10)/0.35,0.35,0.3,0.3,0.3,0.3,
6418      &          0.5,0.6,0.6,0.6/
6419         DATA (HIDAT0(5,I),I=1,10)/23.8,24.0,26.0,26.2,27.0,28.5,28.5,
6420      &                28.5,28.5,28.5/
6421         DATA ((HIDAT0(J,I),I=1,10),J=6,9)/40*0.0/
6422         DATA (HIDAT0(10,I),I=1,10)/5.0,20.0,53.0,62.0,100.0,200.0,
6423      &          546.0,900.0,1800.0,4000.0/
6424         DATA HIDAT/10*0.0/
6425         END
6426 C*******************************************************************
6427 C
6428 C
6429 C
6430 C
6431 C*******************************************************************
6432 C   SUBROUTINE PERFORMS N-DIMENSIONAL MONTE CARLO INTEG'N
6433 C      - BY G.P. LEPAGE   SEPT 1976/(REV)APR 1978
6434 C*******************************************************************
6435 C
6436       SUBROUTINE VEGAS(FXN,AVGI,SD,CHI2A)
6437       IMPLICIT DOUBLE PRECISION (A-H,O-Z)
6438       COMMON/BVEG1/XL(10),XU(10),ACC,NDIM,NCALL,ITMX,NPRN
6439 cc      SAVE /BVEG1/
6440       COMMON/BVEG2/XI(50,10),SI,SI2,SWGT,SCHI,NDO,IT
6441 cc      SAVE /BVEG2/
6442       COMMON/BVEG3/F,TI,TSI   
6443 cc      SAVE /BVEG3/
6444       EXTERNAL FXN
6445       DIMENSION D(50,10),DI(50,10),XIN(50),R(50),DX(10),DT(10),X(10)
6446      1   ,KG(10),IA(10)
6447 c      REAL*4 QRAN(10)
6448       REAL QRAN(10)
6449       SAVE   
6450       DATA NDMX/50/,ALPH/1.5D0/,ONE/1.D0/,MDS/-1/
6451 C
6452       NDO=1
6453       DO 1 J=1,NDIM
6454 1     XI(1,J)=ONE
6455 C
6456       ENTRY VEGAS1(FXN,AVGI,SD,CHI2A)
6457 C         - INITIALIZES CUMMULATIVE VARIABLES, BUT NOT GRID
6458       IT=0
6459       SI=0.d0
6460       SI2=SI
6461       SWGT=SI
6462       SCHI=SI
6463 C
6464       ENTRY VEGAS2(FXN,AVGI,SD,CHI2A)
6465 C         - NO INITIALIZATION
6466       ND=NDMX
6467       NG=1
6468       IF(MDS.EQ.0) GO TO 2
6469       NG=int((real(NCALL)/2.)**(1./real(NDIM)))
6470       MDS=1
6471       IF((2*NG-NDMX).LT.0) GO TO 2
6472       MDS=-1
6473       NPG=NG/NDMX+1
6474       ND=NG/NPG
6475       NG=NPG*ND
6476 2     K=NG**NDIM
6477       NPG=NCALL/K
6478       IF(NPG.LT.2) NPG=2
6479       CALLS=NPG*K
6480       DXG=ONE/NG
6481       DV2G=(CALLS*DXG**NDIM)**2/NPG/NPG/(NPG-ONE)
6482       XND=ND
6483       NDM=ND-1
6484       DXG=DXG*XND
6485       XJAC=ONE/CALLS
6486       DO 3 J=1,NDIM
6487 c***this is the line 50
6488       DX(J)=XU(J)-XL(J)
6489 3     XJAC=XJAC*DX(J)
6490 C
6491 C   REBIN PRESERVING BIN DENSITY
6492 C
6493       IF(ND.EQ.NDO) GO TO 8
6494       RC=NDO/XND
6495       DO 7 J=1,NDIM
6496       K=0
6497       XN=0.d0
6498       DR=XN
6499       I=K
6500 4     K=K+1
6501       DR=DR+ONE
6502       XO=XN
6503       XN=XI(K,J)
6504 5     IF(RC.GT.DR) GO TO 4
6505       I=I+1
6506       DR=DR-RC
6507       XIN(I)=XN-(XN-XO)*DR
6508       IF(I.LT.NDM) GO TO 5
6509       DO 6 I=1,NDM
6510 6     XI(I,J)=XIN(I)
6511 7     XI(ND,J)=ONE
6512       NDO=ND
6513 C
6514 8     CONTINUE
6515 c      IF(NPRN.NE.0) WRITE(16,200) NDIM,CALLS,IT,ITMX,ACC,MDS,ND
6516 c     1                           ,(XL(J),XU(J),J=1,NDIM)
6517 C
6518       ENTRY VEGAS3(FXN,AVGI,SD,CHI2A)
6519 C         - MAIN INTEGRATION LOOP
6520 9     IT=IT+1
6521       TI=0.d0
6522       TSI=TI
6523       DO 10 J=1,NDIM
6524       KG(J)=1
6525       DO 10 I=1,ND
6526       D(I,J)=TI
6527 10    DI(I,J)=TI
6528 C
6529 11    FB=0.d0
6530       F2B=FB
6531       K=0
6532 12    K=K+1
6533       CALL ARAN9(QRAN,NDIM)
6534       WGT=XJAC
6535       DO 15 J=1,NDIM
6536       XN=dble(float(KG(J))-QRAN(J))*DXG+ONE
6537 c*****this is the line 100
6538       IA(J)=int(XN)
6539       IF(IA(J).GT.1) GO TO 13
6540       XO=XI(IA(J),J)
6541       RC=(XN-IA(J))*XO
6542       GO TO 14
6543 13    XO=XI(IA(J),J)-XI(IA(J)-1,J)
6544       RC=XI(IA(J)-1,J)+(XN-IA(J))*XO
6545 14    X(J)=XL(J)+RC*DX(J)
6546       WGT=WGT*XO*XND
6547 15    CONTINUE
6548 C
6549       F=WGT
6550       F=F*FXN(X,WGT)
6551       F2=F*F
6552       FB=FB+F
6553       F2B=F2B+F2
6554       DO 16 J=1,NDIM
6555       DI(IA(J),J)=DI(IA(J),J)+F
6556 16    IF(MDS.GE.0) D(IA(J),J)=D(IA(J),J)+F2
6557       IF(K.LT.NPG) GO TO 12
6558 C
6559       F2B=DSQRT(F2B*NPG)
6560       F2B=(F2B-FB)*(F2B+FB)
6561       TI=TI+FB
6562       TSI=TSI+F2B
6563       IF(MDS.GE.0) GO TO 18
6564       DO 17 J=1,NDIM
6565 17    D(IA(J),J)=D(IA(J),J)+F2B
6566 18    K=NDIM
6567 19    KG(K)=MOD(KG(K),NG)+1
6568       IF(KG(K).NE.1) GO TO 11
6569       K=K-1
6570       IF(K.GT.0) GO TO 19
6571 C
6572 C   FINAL RESULTS FOR THIS ITERATION
6573 C
6574       TSI=TSI*DV2G
6575       TI2=TI*TI
6576       WGT=TI2/(TSI+1.0d-37)
6577       SI=SI+TI*WGT
6578       SI2=SI2+TI2
6579       SWGT=SWGT+WGT
6580       SWGT=SWGT+1.0D-37
6581       SI2=SI2+1.0D-37
6582       SCHI=SCHI+TI2*WGT
6583       AVGI=SI/SWGT
6584       SD=SWGT*IT/SI2
6585       CHI2A=SD*(SCHI/SWGT-AVGI*AVGI)/dble(float(IT)-.999)
6586       SD=DSQRT(ONE/SD)
6587 C****this is the line 150
6588       IF(NPRN.EQ.0) GO TO 21
6589       TSI=DSQRT(TSI)
6590 c      WRITE(16,201) IT,TI,TSI,AVGI,SD,CHI2A
6591 c      IF(NPRN.GE.0) GO TO 21
6592 c      DO 20 J=1,NDIM
6593 c20    WRITE(16,202) J,(XI(I,J),DI(I,J),D(I,J),I=1,ND)
6594 C
6595 C   REFINE GRID
6596 C
6597 21    DO 23 J=1,NDIM
6598       XO=D(1,J)
6599       XN=D(2,J)
6600       D(1,J)=(XO+XN)/2.d0
6601       DT(J)=D(1,J)
6602       DO 22 I=2,NDM
6603       D(I,J)=XO+XN
6604       XO=XN
6605       XN=D(I+1,J)
6606       D(I,J)=(D(I,J)+XN)/3.d0
6607 22    DT(J)=DT(J)+D(I,J)
6608       D(ND,J)=(XN+XO)/2.d0
6609 23    DT(J)=DT(J)+D(ND,J)
6610 C
6611       DO 28 J=1,NDIM
6612       RC=0.d0
6613       DO 24 I=1,ND
6614       R(I)=0.d0
6615       IF (DT(J).GE.1.0D18) THEN
6616        WRITE(6,*) '************** A SINGULARITY >1.0D18'
6617 C      WRITE(5,1111)
6618 C1111  FORMAT(1X,'**************IMPORTANT NOTICE***************')
6619 C      WRITE(5,1112)
6620 C1112  FORMAT(1X,'THE INTEGRAND GIVES RISE A SINGULARITY >1.0D18')
6621 C      WRITE(5,1113)
6622 C1113  FORMAT(1X,'PLEASE CHECK THE INTEGRAND AND THE LIMITS')
6623 C      WRITE(5,1114)
6624 C1114  FORMAT(1X,'**************END NOTICE*************')
6625       END IF    
6626       IF(D(I,J).LE.1.0D-18) GO TO 24
6627       XO=DT(J)/D(I,J)
6628       R(I)=((XO-ONE)/XO/DLOG(XO))**ALPH
6629 24    RC=RC+R(I)
6630       RC=RC/XND
6631       K=0
6632       XN=0.d0
6633       DR=XN
6634       I=K
6635 25    K=K+1
6636       DR=DR+R(K)
6637       XO=XN
6638 c****this is the line 200
6639       XN=XI(K,J)
6640 26    IF(RC.GT.DR) GO TO 25
6641       I=I+1
6642       DR=DR-RC
6643       XIN(I)=XN-(XN-XO)*DR/(R(K)+1.0d-30)
6644       IF(I.LT.NDM) GO TO 26
6645       DO 27 I=1,NDM
6646 27    XI(I,J)=XIN(I)
6647 28    XI(ND,J)=ONE
6648 C
6649       IF(IT.LT.ITMX.AND.ACC*DABS(AVGI).LT.SD) GO TO 9
6650 c200   FORMAT('0INPUT PARAMETERS FOR VEGAS:  NDIM=',I3,'  NCALL=',F8.0
6651 c     1    /28X,'  IT=',I5,'  ITMX=',I5/28X,'  ACC=',G9.3
6652 c     2    /28X,'  MDS=',I3,'   ND=',I4/28X,'  (XL,XU)=',
6653 c     3    (T40,'( ',G12.6,' , ',G12.6,' )'))
6654 c201   FORMAT(///' INTEGRATION BY VEGAS' / '0ITERATION NO.',I3,
6655 c     1    ':   INTEGRAL =',G14.8/21X,'STD DEV  =',G10.4 /
6656 c     2    ' ACCUMULATED RESULTS:   INTEGRAL =',G14.8 /
6657 c     3    24X,'STD DEV  =',G10.4 / 24X,'CHI**2 PER IT''N =',G10.4)
6658 c202   FORMAT('0DATA FOR AXIS',I2 / ' ',6X,'X',7X,'  DELT I  ',
6659 c     1    2X,' CONV''CE  ',11X,'X',7X,'  DELT I  ',2X,' CONV''CE  '
6660 c     2   ,11X,'X',7X,'  DELT I  ',2X,' CONV''CE  ' /
6661 c     2    (' ',3G12.4,5X,3G12.4,5X,3G12.4))
6662       RETURN
6663       END
6664 C
6665 C
6666       SUBROUTINE ARAN9(QRAN,NDIM)
6667       DIMENSION QRAN(10)
6668       COMMON/SEDVAX/NUM1
6669       SAVE   
6670       DO 1 I=1,NDIM
6671     1 QRAN(I)=RANART(NUM1)
6672       RETURN
6673       END
6674
6675 C
6676 C
6677 C*********GAUSSIAN ONE-DIMENSIONAL INTEGRATION PROGRAM*************
6678 C
6679         FUNCTION GAUSS1(F,A,B,EPS)
6680         EXTERNAL F
6681         DIMENSION W(12),X(12)
6682         SAVE   
6683         DATA CONST/1.0E-12/
6684         DATA W/0.1012285,.2223810,.3137067,.3623838,.0271525,
6685      &         .0622535,0.0951585,.1246290,.1495960,.1691565,
6686      &         .1826034,.1894506/
6687         DATA X/0.9602899,.7966665,.5255324,.1834346,.9894009,
6688      &         .9445750,0.8656312,.7554044,.6178762,.4580168,
6689      &         .2816036,.0950125/
6690
6691         DELTA=CONST*ABS(A-B)
6692         GAUSS1=0.0
6693         AA=A
6694 5        Y=B-AA
6695         IF(ABS(Y).LE.DELTA) RETURN
6696 2        BB=AA+Y
6697         C1=0.5*(AA+BB)
6698         C2=C1-AA
6699         S8=0.0
6700         S16=0.0
6701         DO 1 I=1,4
6702         U=X(I)*C2
6703 1        S8=S8+W(I)*(F(C1+U)+F(C1-U))
6704         DO 3 I=5,12
6705         U=X(I)*C2
6706 3        S16=S16+W(I)*(F(C1+U)+F(C1-U))
6707         S8=S8*C2
6708         S16=S16*C2
6709         IF(ABS(S16-S8).GT.EPS*(1.+ABS(S16))) GOTO 4
6710         GAUSS1=GAUSS1+S16
6711         AA=BB
6712         GOTO 5
6713 4        Y=0.5*Y
6714         IF(ABS(Y).GT.DELTA) GOTO 2
6715         WRITE(6,7)
6716         GAUSS1=0.0
6717         RETURN
6718 7        FORMAT(1X,'GAUSS1....TOO HIGH ACURACY REQUIRED')
6719         END
6720 C
6721 C
6722 C
6723         FUNCTION GAUSS2(F,A,B,EPS)
6724         EXTERNAL F
6725         DIMENSION W(12),X(12)
6726         SAVE   
6727         DATA CONST/1.0E-12/
6728         DATA W/0.1012285,.2223810,.3137067,.3623838,.0271525,
6729      &         .0622535,0.0951585,.1246290,.1495960,.1691565,
6730      &         .1826034,.1894506/
6731         DATA X/0.9602899,.7966665,.5255324,.1834346,.9894009,
6732      &         .9445750,0.8656312,.7554044,.6178762,.4580168,
6733      &         .2816036,.0950125/
6734
6735         DELTA=CONST*ABS(A-B)
6736         GAUSS2=0.0
6737         AA=A
6738 5        Y=B-AA
6739         IF(ABS(Y).LE.DELTA) RETURN
6740 2        BB=AA+Y
6741         C1=0.5*(AA+BB)
6742         C2=C1-AA
6743         S8=0.0
6744         S16=0.0
6745         DO 1 I=1,4
6746         U=X(I)*C2
6747 1        S8=S8+W(I)*(F(C1+U)+F(C1-U))
6748         DO 3 I=5,12
6749         U=X(I)*C2
6750 3        S16=S16+W(I)*(F(C1+U)+F(C1-U))
6751         S8=S8*C2
6752         S16=S16*C2
6753         IF(ABS(S16-S8).GT.EPS*(1.+ABS(S16))) GOTO 4
6754         GAUSS2=GAUSS2+S16
6755         AA=BB
6756         GOTO 5
6757 4        Y=0.5*Y
6758         IF(ABS(Y).GT.DELTA) GOTO 2
6759         WRITE(6,7)
6760         GAUSS2=0.0
6761         RETURN
6762 7        FORMAT(1X,'GAUSS2....TOO HIGH ACURACY REQUIRED')
6763         END
6764 C
6765 C
6766 C
6767 C
6768 C
6769         SUBROUTINE TITLE
6770
6771       COMMON/RNDF77/NSEED
6772 cc      SAVE /RNDF77/
6773         SAVE   
6774
6775         WRITE(6,200)
6776 clin-8/15/02 f77:
6777 c200        FORMAT(//10X,
6778 c     &        '**************************************************'/10X,
6779 c     &  '*     |      \       _______      /  ------/     *'/10X,
6780 c     &        '*   ----- ------     |_____|     /_/     /       *'/10X,
6781 c     &        '*    ||\    /        |_____|      /    / \       *'/10X,
6782 c     &        '*    /| \  /_/       /_______    /_  /    \_     *'/10X,
6783 c     &        '*   / |     / /     /  /  / |        -------     *'/10X,
6784 c     &        '*     |    / /\       /  /  |     /     |        *'/10X,
6785 c     &        '*     |   / /  \     /  / \_|    /   -------     *'/10X,
6786 200        FORMAT(//10X,
6787      &        '**************************************************'/10X,
6788      &  '*     |      |       _______      /  ------/     *'/10X,
6789      &        '*   ----- ------     |_____|     /_/     /       *'/10X,
6790      &        '*    |||    /        |_____|      /    / |       *'/10X,
6791      &        '*    /| |  /_/       /_______    /_  /    |      *'/10X,
6792      &        '*   / |     / /     /  /  / |        -------     *'/10X,
6793      &        '*     |    / /|       /  /  |     /     |        *'/10X,
6794      &        '*     |   / /  |     /  /  _|    /   -------     *'/10X,
6795      &        '*                                                *'/10X,
6796      &        '**************************************************'/10X,
6797      &        '                      HIJING                      '/10X,
6798      &        '       Heavy Ion Jet INteraction Generator        '/10X,
6799      &        '                        by                        '/10X,
6800      &  '            X. N. Wang  and  M. Gyulassy           '/10X,
6801      &  '             Lawrence Berkeley Laboratory           '//)        
6802         RETURN
6803         END
6804