]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HIJING/hijing1_36/hijsft.F
Containers definition
[u/mrichter/AliRoot.git] / HIJING / hijing1_36 / hijsft.F
1 * $Id$
2 C
3 C       
4 C*******************************************************************
5 C                                                                  *
6 C               Subroutine HIJSFT                                  *
7 C                                                                  *
8 C  Scatter two excited strings, JP from proj and JT from target    *
9 C*******************************************************************
10         SUBROUTINE HIJSFT(JP,JT,JOUT,IERROR)
11 #include "hijcrdn.inc"
12 #include "hiparnt.inc"
13 #include "hijdat.inc"
14 #include "hijjet1.inc"
15 #include "hijjet2.inc"
16 #include "histrng.inc"
17 #include "dpmcom1.inc"
18 #include "dpmcom2.inc"
19         SAVE
20 C*******************************************************************
21 C       JOUT-> the number
22 C       of hard scatterings preceding this soft collision. 
23 C       IHNT2(13)-> 1=
24 C       double diffrac 2=single diffrac, 3=non-single diffrac.
25 C*******************************************************************
26         IERROR=0
27         JJP=JP
28         JJT=JT
29         NDPM=0
30         IOPMAIN=0
31         IF(JP.GT.IHNT2(1) .OR. JT.GT.IHNT2(3)) RETURN
32
33         EPP=PP(JP,4)+PP(JP,3)
34         EPM=PP(JP,4)-PP(JP,3)
35         ETP=PT(JT,4)+PT(JT,3)
36         ETM=PT(JT,4)-PT(JT,3)
37
38         WP=EPP+ETP
39         WM=EPM+ETM
40         SW=WP*WM
41 C               ********total W+,W- and center-of-mass energy
42
43         IF(WP.LT.0.0 .OR. WM.LT.0.0) GO TO 1000
44
45         IF(JOUT.EQ.0) THEN
46                 IF(EPP.LT.0.0) GO TO 1000
47                 IF(EPM.LT.0.0) GO TO 1000
48                 IF(ETP.LT.0.0) GO TO 1000
49                 IF(ETM.LT.0.0) GO TO 1000    
50                 IF(EPP/(EPM+0.01).LE.ETP/(ETM+0.01)) RETURN
51         ENDIF
52 C               ********For strings which does not follow a jet-prod,
53 C                       scatter only if Ycm(JP)>Ycm(JT). When jets
54 C                       are produced just before this collision
55 C                       this requirement has already be enforced
56 C                       (see SUBROUTINE HIJHRD)
57         IHNT2(11)=JP
58         IHNT2(12)=JT
59 C
60 C
61 C
62         MISS=0
63         PKC1=0.0
64         PKC2=0.0
65         PKC11=0.0
66         PKC12=0.0
67         PKC21=0.0
68         PKC22=0.0
69         DPKC11=0.0
70         DPKC12=0.0
71         DPKC21=0.0
72         DPKC22=0.0
73         IF(NFP(JP,10).EQ.1.OR.NFT(JT,10).EQ.1) THEN
74            IF(NFP(JP,10).EQ.1) THEN
75               PHI1=ULANGL_HIJING(PP(JP,10),PP(JP,11))
76               PPJET=SQRT(PP(JP,10)**2+PP(JP,11)**2)
77               PKC1=PPJET
78               PKC11=PP(JP,10)
79               PKC12=PP(JP,11)
80            ENDIF
81            IF(NFT(JT,10).EQ.1) THEN
82               PHI2=ULANGL_HIJING(PT(JT,10),PT(JT,11))
83               PTJET=SQRT(PT(JT,10)**2+PT(JT,11)**2)
84               PKC2=PTJET
85               PKC21=PT(JT,10)
86               PKC22=PT(JT,11)
87            ENDIF
88            IF(IHPR2(4).GT.0.AND.IHNT2(1).GT.1.AND.IHNT2(3).GT.1) THEN
89               IF(NFP(JP,10).EQ.0) THEN
90                  PHI=-PHI2
91               ELSE IF(NFT(JT,10).EQ.0) THEN
92                  PHI=PHI1
93               ELSE
94                  PHI=(PHI1+PHI2-HIPR1(40))/2.0
95               ENDIF
96               BX=HINT1(19)*COS(HINT1(20))
97               BY=HINT1(19)*SIN(HINT1(20))
98               XP0=YP(1,JP)
99               YP0=YP(2,JP)
100               XT0=YT(1,JT)+BX
101               YT0=YT(2,JT)+BY
102               R1=MAX(1.2*IHNT2(1)**0.3333333,
103      &               SQRT(XP0**2+YP0**2))
104               R2=MAX(1.2*IHNT2(3)**0.3333333,
105      &               SQRT((XT0-BX)**2+(YT0-BY)**2))
106               IF(ABS(COS(PHI)).LT.1.0E-5) THEN
107                  DD1=R1
108                  DD2=R1
109                  DD3=ABS(BY+SQRT(R2**2-(XP0-BX)**2)-YP0)
110                  DD4=ABS(BY-SQRT(R2**2-(XP0-BX)**2)-YP0)
111                  GO TO 5
112               ENDIF
113               BB=2.0*SIN(PHI)*(COS(PHI)*YP0-SIN(PHI)*XP0)
114               CC=(YP0**2-R1**2)*COS(PHI)**2+XP0*SIN(PHI)*(
115      &                          XP0*SIN(PHI)-2.0*YP0*COS(PHI))
116               DD=BB**2-4.0*CC
117               IF(DD.LT.0.0) GO TO 10
118               XX1=(-BB+SQRT(DD))/2.0
119               XX2=(-BB-SQRT(DD))/2.0
120               DD1=ABS((XX1-XP0)/COS(PHI))
121               DD2=ABS((XX2-XP0)/COS(PHI))
122 C                       
123               BB=2.0*SIN(PHI)*(COS(PHI)*(YT0-BY)-SIN(PHI)*XT0)-2.0*BX
124               CC=(BX**2+(YT0-BY)**2-R2**2)*COS(PHI)**2+XT0*SIN(PHI)
125      &           *(XT0*SIN(PHI)-2.0*COS(PHI)*(YT0-BY))
126      &           -2.0*BX*SIN(PHI)*(COS(PHI)*(YT0-BY)-SIN(PHI)*XT0)
127               DD=BB**2-4.0*CC
128               IF(DD.LT.0.0) GO TO 10
129               XX1=(-BB+SQRT(DD))/2.0
130               XX2=(-BB-SQRT(DD))/2.0
131               DD3=ABS((XX1-XT0)/COS(PHI))
132               DD4=ABS((XX2-XT0)/COS(PHI))
133 C
134  5            DD1=MIN(DD1,DD3)
135               DD2=MIN(DD2,DD4)
136               IF(DD1.LT.HIPR1(13)) DD1=0.0
137               IF(DD2.LT.HIPR1(13)) DD2=0.0
138               IF(NFP(JP,10).EQ.1.AND.PPJET.GT.HIPR1(11)) THEN
139                  DP1=DD1*HIPR1(14)/2.0
140                  DP1=MIN(DP1,PPJET-HIPR1(11))
141                  PKC1=PPJET-DP1
142                  DPX1=COS(PHI1)*DP1
143                  DPY1=SIN(PHI1)*DP1
144                  PKC11=PP(JP,10)-DPX1
145                  PKC12=PP(JP,11)-DPY1
146                  IF(DP1.GT.0.0) THEN
147                     CTHEP=PP(JP,12)/SQRT(PP(JP,12)**2+PPJET**2)
148                     DPZ1=DP1*CTHEP/SQRT(1.0-CTHEP**2)
149                     DPE1=SQRT(DPX1**2+DPY1**2+DPZ1**2)
150                     EPPPRM=PP(JP,4)+PP(JP,3)-DPE1-DPZ1
151                     EPMPRM=PP(JP,4)-PP(JP,3)-DPE1+DPZ1
152                     IF(EPPPRM.LE.0.0.OR.EPMPRM.LE.0.0) GO TO 15
153                     EPP=EPPPRM
154                     EPM=EPMPRM
155                     PP(JP,10)=PKC11
156                     PP(JP,11)=PKC12
157                     NPJ(JP)=NPJ(JP)+1
158                     KFPJ(JP,NPJ(JP))=21
159                     PJPX(JP,NPJ(JP))=DPX1
160                     PJPY(JP,NPJ(JP))=DPY1
161                     PJPZ(JP,NPJ(JP))=DPZ1
162                     PJPE(JP,NPJ(JP))=DPE1
163                     PJPM(JP,NPJ(JP))=0.0
164                     PP(JP,3)=PP(JP,3)-DPZ1
165                     PP(JP,4)=PP(JP,4)-DPE1
166                  ENDIF
167               ENDIF
168  15           IF(NFT(JT,10).EQ.1.AND.PTJET.GT.HIPR1(11)) THEN
169                  DP2=DD2*HIPR1(14)/2.0
170                  DP2=MIN(DP2,PTJET-HIPR1(11))
171                  PKC2=PTJET-DP2
172                  DPX2=COS(PHI2)*DP2
173                  DPY2=SIN(PHI2)*DP2
174                  PKC21=PT(JT,10)-DPX2
175                  PKC22=PT(JT,11)-DPY2
176                  IF(DP2.GT.0.0) THEN
177                     CTHET=PT(JT,12)/SQRT(PT(JT,12)**2+PTJET**2)
178                     DPZ2=DP2*CTHET/SQRT(1.0-CTHET**2)
179                     DPE2=SQRT(DPX2**2+DPY2**2+DPZ2**2)
180                     ETPPRM=PT(JT,4)+PT(JT,3)-DPE2-DPZ2
181                     ETMPRM=PT(JT,4)-PT(JT,3)-DPE2+DPZ2
182                     IF(ETPPRM.LE.0.0.OR.ETMPRM.LE.0.0) GO TO 16
183                     ETP=ETPPRM
184                     ETM=ETMPRM
185                     PT(JT,10)=PKC21
186                     PT(JT,11)=PKC22
187                     NTJ(JT)=NTJ(JT)+1
188                     KFTJ(JT,NTJ(JT))=21
189                     PJTX(JT,NTJ(JT))=DPX2
190                     PJTY(JT,NTJ(JT))=DPY2
191                     PJTZ(JT,NTJ(JT))=DPZ2
192                     PJTE(JT,NTJ(JT))=DPE2
193                     PJTM(JT,NTJ(JT))=0.0
194                     PT(JT,3)=PT(JT,3)-DPZ2
195                     PT(JT,4)=PT(JT,4)-DPE2
196                  ENDIF
197               ENDIF
198  16           DPKC11=-(PP(JP,10)-PKC11)/2.0
199               DPKC12=-(PP(JP,11)-PKC12)/2.0
200               DPKC21=-(PT(JT,10)-PKC21)/2.0
201               DPKC22=-(PT(JT,11)-PKC22)/2.0
202               WP=EPP+ETP
203               WM=EPM+ETM
204               SW=WP*WM
205            ENDIF
206         ENDIF
207 C               ********If jet is quenched the pt from valence quark
208 C                       hard scattering has to reduced by d*kapa
209 C
210 C   
211 10      PTP02=PP(JP,1)**2+PP(JP,2)**2
212         PTT02=PT(JT,1)**2+PT(JT,2)**2
213 C       
214         AMQ=MAX(PP(JP,14)+PP(JP,15),PT(JT,14)+PT(JT,15))
215         AMX=HIPR1(1)+AMQ
216 C               ********consider mass cut-off for strings which
217 C                       must also include quark's mass
218         AMP0=AMX
219         DPM0=AMX
220         NFDP=0
221         IF(NFP(JP,5).LE.2.AND.NFP(JP,3).NE.0) THEN
222                 AMP0=ULMASS_HIJING(NFP(JP,3))
223                 NFDP=NFP(JP,3)+2*NFP(JP,3)/ABS(NFP(JP,3))
224                 DPM0=ULMASS_HIJING(NFDP)
225                 IF(DPM0.LE.0.0) THEN
226                         NFDP=NFDP-2*NFDP/ABS(NFDP)
227                         DPM0=ULMASS_HIJING(NFDP)
228                 ENDIF
229         ENDIF
230         AMT0=AMX
231         DTM0=AMX
232         NFDT=0
233         IF(NFT(JT,5).LE.2.AND.NFT(JT,3).NE.0) THEN
234                 AMT0=ULMASS_HIJING(NFT(JT,3))
235                 NFDT=NFT(JT,3)+2*NFT(JT,3)/ABS(NFT(JT,3))
236                 DTM0=ULMASS_HIJING(NFDT)
237                 IF(DTM0.LE.0.0) THEN
238                         NFDT=NFDT-2*NFDT/ABS(NFDT)
239                         DTM0=ULMASS_HIJING(NFDT)
240                 ENDIF
241         ENDIF
242 C       
243         AMPN=SQRT(AMP0**2+PTP02)
244         AMTN=SQRT(AMT0**2+PTT02)
245         SNN=(AMPN+AMTN)**2+0.001
246 C
247         IF(SW.LT.SNN+0.001) GO TO 4000
248 C               ********Scatter only if SW>SNN
249 C*****give some PT kick to the two exited strings******************
250 20      SWPTN=4.0*(MAX(AMP0,AMT0)**2+MAX(PTP02,PTT02))
251         SWPTD=4.0*(MAX(DPM0,DTM0)**2+MAX(PTP02,PTT02))
252         SWPTX=4.0*(AMX**2+MAX(PTP02,PTT02))
253         IF(SW.LE.SWPTN) THEN
254                 PKCMX=0.0
255         ELSE IF(SW.GT.SWPTN .AND. SW.LE.SWPTD
256      &          .AND.NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0) THEN
257            PKCMX=SQRT(SW/4.0-MAX(AMP0,AMT0)**2)
258      &           -SQRT(MAX(PTP02,PTT02))
259         ELSE IF(SW.GT.SWPTD .AND. SW.LE.SWPTX
260      &          .AND.NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0) THEN
261            PKCMX=SQRT(SW/4.0-MAX(DPM0,DTM0)**2)
262      &           -SQRT(MAX(PTP02,PTT02))
263         ELSE IF(SW.GT.SWPTX) THEN
264            PKCMX=SQRT(SW/4.0-AMX**2)-SQRT(MAX(PTP02,PTT02))
265         ENDIF
266 C               ********maximun PT kick
267 C*********************************************************
268 C
269         IF(NFP(JP,10).EQ.1.OR.NFT(JT,10).EQ.1) THEN
270                 IF(PKC1.GT.PKCMX) THEN
271                         PKC1=PKCMX
272                         PKC11=PKC1*COS(PHI1)
273                         PKC12=PKC1*SIN(PHI1)
274                         DPKC11=-(PP(JP,10)-PKC11)/2.0
275                         DPKC12=-(PP(JP,11)-PKC12)/2.0
276                 ENDIF
277                 IF(PKC2.GT.PKCMX) THEN
278                         PKC2=PKCMX
279                         PKC21=PKC2*COS(PHI2)
280                         PKC22=PKC2*SIN(PHI2)
281                         DPKC21=-(PT(JT,10)-PKC21)/2.0
282                         DPKC22=-(PT(JT,11)-PKC22)/2.0
283                 ENDIF
284                 DPKC1=DPKC11+DPKC21
285                 DPKC2=DPKC12+DPKC22
286                 NFP(JP,10)=-NFP(JP,10)
287                 NFT(JT,10)=-NFT(JT,10)
288                 GO TO 40
289         ENDIF
290 C               ********If the valence quarks had a hard-collision
291 C                       the pt kick is the pt from hard-collision.
292         I_SNG=0
293         IF(IHPR2(13).NE.0 .AND. RLU_HIJING(0).LE.HIDAT(4)) I_SNG=1
294         IF((NFP(JP,5).EQ.3 .OR.NFT(JT,5).EQ.3).OR.
295      &          (NPJ(JP).NE.0.OR.NFP(JP,10).NE.0).OR.
296      &          (NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) I_SNG=0
297 C
298 C               ********decite whether to have single-diffractive
299         IF(IHPR2(5).EQ.0) THEN
300                 PKC=HIPR1(2)*SQRT(-ALOG(1.0-RLU_HIJING(0)
301      &                  *(1.0-EXP(-PKCMX**2/HIPR1(2)**2))))
302                 GO TO 30
303         ENDIF
304         PKC=HIRND2(3,0.0,PKCMX**2)
305         PKC=SQRT(PKC)
306         IF(PKC.GT.HIPR1(20)) 
307      &     PKC=HIPR1(2)*SQRT(-ALOG(EXP(-HIPR1(20)**2/HIPR1(2)**2)
308      &         -RLU_HIJING(0)*(EXP(-HIPR1(20)**2/HIPR1(2)**2)-
309      &         EXP(-PKCMX**2/HIPR1(2)**2))))
310 C
311         IF(I_SNG.EQ.1) PKC=0.65*SQRT(
312      &          -ALOG(1.0-RLU_HIJING(0)*(1.0-EXP(-PKCMX**2/0.65**2))))
313 C                       ********select PT kick
314 30      PHI0=2.0*HIPR1(40)*RLU_HIJING(0)
315         PKC11=PKC*SIN(PHI0)
316         PKC12=PKC*COS(PHI0)
317         PKC21=-PKC11
318         PKC22=-PKC12
319         DPKC1=0.0
320         DPKC2=0.0
321 40      PP11=PP(JP,1)+PKC11-DPKC1
322         PP12=PP(JP,2)+PKC12-DPKC2
323         PT11=PT(JT,1)+PKC21-DPKC1
324         PT12=PT(JT,2)+PKC22-DPKC2
325         PTP2=PP11**2+PP12**2
326         PTT2=PT11**2+PT12**2
327 C
328         AMPN=SQRT(AMP0**2+PTP2)
329         AMTN=SQRT(AMT0**2+PTT2)
330         SNN=(AMPN+AMTN)**2+0.001
331 C***************************************
332         WP=EPP+ETP
333         WM=EPM+ETM
334         SW=WP*WM
335 C****************************************
336         IF(SW.LT.SNN) THEN
337            MISS=MISS+1
338            IF(MISS.LE.100) then
339               PKC=0.0
340               GO TO 30
341            ENDIF
342            IF(IHPR2(10).NE.0) 
343      &       WRITE(6,*) 'Error occured in Pt kick section of HIJSFT'
344            GO TO 4000
345         ENDIF
346 C******************************************************************
347         AMPD=SQRT(DPM0**2+PTP2)
348         AMTD=SQRT(DTM0**2+PTT2)
349
350         AMPX=SQRT(AMX**2+PTP2)
351         AMTX=SQRT(AMX**2+PTT2)
352
353         DPN=AMPN**2/SW
354         DTN=AMTN**2/SW
355         DPD=AMPD**2/SW
356         DTD=AMTD**2/SW
357         DPX=AMPX**2/SW
358         DTX=AMTX**2/SW
359 C
360         SPNTD=(AMPN+AMTD)**2
361         SPNTX=(AMPN+AMTX)**2
362 C                       ********CM energy if proj=N,targ=N*
363         SPDTN=(AMPD+AMTN)**2
364         SPXTN=(AMPX+AMTN)**2
365 C                       ********CM energy if proj=N*,targ=N
366         SPDTX=(AMPD+AMTX)**2
367         SPXTD=(AMPX+AMTD)**2
368         SDD=(AMPD+AMTD)**2
369         SXX=(AMPX+AMTX)**2
370
371 C
372 C       
373 C               ********CM energy if proj=delta, targ=delta
374 C****************There are many different cases**********
375 c       IF(IHPR2(15).EQ.1) GO TO 500
376 C
377 C               ********to have DPM type soft interactions
378 C
379  45     CONTINUE
380         IF(SW.GT.SXX+0.001) THEN
381            IF(I_SNG.EQ.0) THEN
382               D1=DPX
383               D2=DTX
384               NFP3=0
385               NFT3=0
386               GO TO 400
387            ELSE
388 c**** 5/30/1998 this is identical to the above statement. Added to
389 c**** avoid questional branching to block.
390               IF((NFP(JP,5).EQ.3 .AND.NFT(JT,5).EQ.3).OR.
391      &           (NPJ(JP).NE.0.OR.NFP(JP,10).NE.0).OR.
392      &           (NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) THEN
393                  D1=DPX
394                  D2=DTX
395                  NFP3=0
396                  NFT3=0
397                  GO TO 400
398               ENDIF
399 C               ********do not allow excited strings to have 
400 C                       single-diffr 
401               IF(RLU_HIJING(0).GT.0.5.OR.(NFT(JT,5).GT.2.OR.
402      &                NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) THEN
403                  D1=DPN
404                  D2=DTX
405                  NFP3=NFP(JP,3)
406                  NFT3=0
407                  GO TO 220
408               ELSE
409                  D1=DPX
410                  D2=DTN
411                  NFP3=0
412                  NFT3=NFT(JT,3)
413                  GO TO 240
414               ENDIF
415 C               ********have single diffractive collision
416            ENDIF
417         ELSE IF(SW.GT.MAX(SPDTX,SPXTD)+0.001 .AND.
418      &                          SW.LE.SXX+0.001) THEN
419            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0.AND.
420      &         RLU_HIJING(0).GT.0.5).OR.(NPJ(JP).EQ.0
421      &         .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
422               D1=DPD
423               D2=DTX
424               NFP3=NFDP
425               NFT3=0
426               GO TO 220
427            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
428               D1=DPX
429               D2=DTD
430               NFP3=0
431               NFT3=NFDT
432               GO TO 240
433            ENDIF
434            GO TO 4000
435         ELSE IF(SW.GT.MIN(SPDTX,SPXTD)+0.001.AND.
436      &                  SW.LE.MAX(SPDTX,SPXTD)+0.001) THEN
437            IF(SPDTX.LE.SPXTD.AND.NPJ(JP).EQ.0
438      &                       .AND.NFP(JP,5).LE.2) THEN
439               D1=DPD
440               D2=DTX
441               NFP3=NFDP
442               NFT3=0
443               GO TO 220
444            ELSE IF(SPDTX.GT.SPXTD.AND.NTJ(JT).EQ.0
445      &                       .AND.NFT(JT,5).LE.2) THEN
446               D1=DPX
447               D2=DTD
448               NFP3=0
449               NFT3=NFDT
450               GO TO 240
451            ENDIF
452 c*** 5/30/1998 added to avoid questional branching to another block
453 c*** this is identical to the statement following the next ELSE IF
454            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0
455      &       .AND.RLU_HIJING(0).GT.0.5).OR.(NPJ(JP).EQ.0
456      &        .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
457               D1=DPN
458               D2=DTX
459               NFP3=NFP(JP,3)
460               NFT3=0
461               GO TO 220
462            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
463               D1=DPX
464               D2=DTN
465               NFP3=0
466               NFT3=NFT(JT,3)
467               GO TO 240
468            ENDIF
469            GO TO 4000
470         ELSE IF(SW.GT.MAX(SPNTX,SPXTN)+0.001 .AND.
471      &                  SW.LE.MIN(SPDTX,SPXTD)+0.001) THEN
472            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0
473      &       .AND.RLU_HIJING(0).GT.0.5).OR.(NPJ(JP).EQ.0
474      &        .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
475               D1=DPN
476               D2=DTX
477               NFP3=NFP(JP,3)
478               NFT3=0
479               GO TO 220
480            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
481               D1=DPX
482               D2=DTN
483               NFP3=0
484               NFT3=NFT(JT,3)
485               GO TO 240
486            ENDIF
487            GO TO 4000
488         ELSE IF(SW.GT.MIN(SPNTX,SPXTN)+0.001 .AND.
489      &                  SW.LE.MAX(SPNTX,SPXTN)+0.001) THEN
490            IF(SPNTX.LE.SPXTN.AND.NPJ(JP).EQ.0
491      &                           .AND.NFP(JP,5).LE.2) THEN
492               D1=DPN
493               D2=DTX
494               NFP3=NFP(JP,3)
495               NFT3=0
496               GO TO 220
497            ELSEIF(SPNTX.GT.SPXTN.AND.NTJ(JT).EQ.0
498      &                           .AND.NFT(JT,5).LE.2) THEN
499               D1=DPX
500               D2=DTN
501               NFP3=0
502               NFT3=NFT(JT,3)
503               GO TO 240
504            ENDIF
505            GO TO 4000
506         ELSE IF(SW.LE.MIN(SPNTX,SPXTN)+0.001 .AND.
507      &                  (NPJ(JP).NE.0 .OR.NTJ(JT).NE.0)) THEN
508            GO TO 4000
509         ELSE IF(SW.LE.MIN(SPNTX,SPXTN)+0.001 .AND.
510      &          NFP(JP,5).GT.2.AND.NFT(JT,5).GT.2) THEN
511            GO TO 4000
512         ELSE IF(SW.GT.SDD+0.001.AND.SW.LE.
513      &                     MIN(SPNTX,SPXTN)+0.001) THEN
514            D1=DPD
515            D2=DTD
516            NFP3=NFDP
517            NFT3=NFDT
518            GO TO 100
519         ELSE IF(SW.GT.MAX(SPNTD,SPDTN)+0.001 
520      &                      .AND. SW.LE.SDD+0.001) THEN
521            IF(RLU_HIJING(0).GT.0.5) THEN
522               D1=DPD
523               D2=DTN
524               NFP3=NFDP
525               NFT3=NFT(JT,3)
526               GO TO 100
527            ELSE
528               D1=DPN
529               D2=DTD
530               NFP3=NFP(JP,3)
531               NFT3=NFDT
532               GO TO 100
533            ENDIF
534         ELSE IF(SW.GT.MIN(SPNTD,SPDTN)+0.001
535      &          .AND. SW.LE.MAX(SPNTD,SPDTN)+0.001) THEN
536            IF(SPNTD.GT.SPDTN) THEN
537               D1=DPD
538               D2=DTN
539               NFP3=NFDP
540               NFT3=NFT(JT,3)
541               GO TO 100
542            ELSE
543               D1=DPN
544               D2=DTD
545               NFP3=NFP(JP,3)
546               NFT3=NFDT
547               GO TO 100
548            ENDIF
549         ELSE IF(SW.LE.MIN(SPNTD,SPDTN)+0.001) THEN
550            D1=DPN
551            D2=DTN
552            NFP3=NFP(JP,3)
553            NFT3=NFT(JT,3)
554            GO TO 100
555         ENDIF
556         WRITE(6,*) ' Error in HIJSFT: There is no path to here'
557         RETURN
558 C
559 C***************  elastic scattering ***************
560 C       this is like elastic, both proj and targ mass
561 C       must be fixed
562 C***************************************************
563 100     NFP5=MAX(2,NFP(JP,5))
564         NFT5=MAX(2,NFT(JT,5))
565         BB1=1.0+D1-D2
566         BB2=1.0+D2-D1
567         IF(BB1**2.LT.4.0*D1 .OR. BB2**2.LT.4.0*D2) THEN
568                 MISS=MISS+1
569                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
570                 PKC=PKC*0.5
571                 GO TO 30
572         ENDIF
573         IF(RLU_HIJING(0).LT.0.5) THEN
574                 X1=(BB1-SQRT(BB1**2-4.0*D1))/2.0
575                 X2=(BB2-SQRT(BB2**2-4.0*D2))/2.0
576         ELSE
577                 X1=(BB1+SQRT(BB1**2-4.0*D1))/2.0
578                 X2=(BB2+SQRT(BB2**2-4.0*D2))/2.0
579         ENDIF
580         IHNT2(13)=2
581         GO TO 600
582 C
583 C********** Single diffractive ***********************
584 C either proj or targ's mass is fixed
585 C*****************************************************
586 220     NFP5=MAX(2,NFP(JP,5))
587         NFT5=3
588         IF(NFP3.EQ.0) NFP5=3
589         BB2=1.0+D2-D1
590         IF(BB2**2.LT.4.0*D2) THEN
591                 MISS=MISS+1
592                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
593                 PKC=PKC*0.5
594                 GO TO 30
595         ENDIF
596         XMIN=(BB2-SQRT(BB2**2-4.0*D2))/2.0
597         XMAX=(BB2+SQRT(BB2**2-4.0*D2))/2.0
598         MISS4=0
599 222     X2=HIRND2(6,XMIN,XMAX)
600         X1=D1/(1.0-X2)
601         IF(X2*(1.0-X1).LT.(D2+1.E-4/SW)) THEN
602                 MISS4=MISS4+1
603                 IF(MISS4.LE.1000) GO TO 222
604                 GO TO 5000
605         ENDIF
606         IHNT2(13)=2
607         GO TO 600
608 C                       ********Fix proj mass*********
609 240     NFP5=3
610         NFT5=MAX(2,NFT(JT,5))
611         IF(NFT3.EQ.0) NFT5=3
612         BB1=1.0+D1-D2
613         IF(BB1**2.LT.4.0*D1) THEN
614                 MISS=MISS+1
615                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
616                 PKC=PKC*0.5
617                 GO TO 30
618         ENDIF
619         XMIN=(BB1-SQRT(BB1**2-4.0*D1))/2.0
620         XMAX=(BB1+SQRT(BB1**2-4.0*D1))/2.0
621         MISS4=0
622 242     X1=HIRND2(6,XMIN,XMAX)
623         X2=D2/(1.0-X1)
624         IF(X1*(1.0-X2).LT.(D1+1.E-4/SW)) THEN
625                 MISS4=MISS4+1
626                 IF(MISS4.LE.1000) GO TO 242
627                 GO TO 5000
628         ENDIF
629         IHNT2(13)=2
630         GO TO 600
631 C                       ********Fix targ mass*********
632 C
633 C*************non-single diffractive**********************
634 C       both proj and targ may not be fixed in mass 
635 C*********************************************************
636 C
637 400     NFP5=3
638         NFT5=3
639         BB1=1.0+D1-D2
640         BB2=1.0+D2-D1
641         IF(BB1**2.LT.4.0*D1 .OR. BB2**2.LT.4.0*D2) THEN
642                 MISS=MISS+1
643                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
644                 PKC=PKC*0.5
645                 GO TO 30
646         ENDIF
647         XMIN1=(BB1-SQRT(BB1**2-4.0*D1))/2.0
648         XMAX1=(BB1+SQRT(BB1**2-4.0*D1))/2.0
649         XMIN2=(BB2-SQRT(BB2**2-4.0*D2))/2.0
650         XMAX2=(BB2+SQRT(BB2**2-4.0*D2))/2.0
651         MISS4=0 
652 410     X1=HIRND2(4,XMIN1,XMAX1)
653         X2=HIRND2(4,XMIN2,XMAX2)
654         IF(NFP(JP,5).EQ.3.OR.NFT(JT,5).EQ.3) THEN
655                 X1=HIRND2(6,XMIN1,XMAX1)
656                 X2=HIRND2(6,XMIN2,XMAX2)
657         ENDIF
658 C                       ********
659         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000.OR.
660      &                  ABS(NFP(JP,1)*NFP(JP,2)).LT.100) THEN
661                 X1=HIRND2(5,XMIN1,XMAX1)
662         ENDIF
663         IF(ABS(NFT(JT,1)*NFT(JT,2)).GT.1000000.OR.
664      &                  ABS(NFT(JT,1)*NFT(JT,2)).LT.100) THEN
665                 X2=HIRND2(5,XMIN2,XMAX2)
666         ENDIF
667 c       IF(IOPMAIN.EQ.3) X1=HIRND2(6,XMIN1,XMAX1)
668 c       IF(IOPMAIN.EQ.2) X2=HIRND2(6,XMIN2,XMAX2) 
669 C       ********For q-qbar or (qq)-(qq)bar system use symetric
670 C               distribution, for q-(qq) or qbar-(qq)bar use
671 C               unsymetrical distribution
672 C
673         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000) X1=1.0-X1
674         XXP=X1*(1.0-X2)
675         XXT=X2*(1.0-X1)
676         IF(XXP.LT.(D1+1.E-4/SW) .OR. XXT.LT.(D2+1.E-4/SW)) THEN
677                 MISS4=MISS4+1
678                 IF(MISS4.LE.1000) GO TO 410
679                 GO TO 5000
680         ENDIF
681         IHNT2(13)=3
682 C***************************************************
683 C***************************************************
684 600     CONTINUE
685         IF(X1*(1.0-X2).LT.(AMPN**2-1.E-4)/SW.OR.
686      &                  X2*(1.0-X1).LT.(AMTN**2-1.E-4)/SW) THEN
687                 MISS=MISS+1
688                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 2000
689                 PKC=0.0
690                 GO TO 30
691         ENDIF
692 C
693         EPP=(1.0-X2)*WP
694         EPM=X1*WM
695         ETP=X2*WP
696         ETM=(1.0-X1)*WM
697         PP(JP,3)=(EPP-EPM)/2.0
698         PP(JP,4)=(EPP+EPM)/2.0
699         IF(EPP*EPM-PTP2.LT.0.0) GO TO 6000
700         PP(JP,5)=SQRT(EPP*EPM-PTP2)
701         NFP(JP,3)=NFP3
702         NFP(JP,5)=NFP5
703
704         PT(JT,3)=(ETP-ETM)/2.0
705         PT(JT,4)=(ETP+ETM)/2.0
706         IF(ETP*ETM-PTT2.LT.0.0) GO TO 6000
707         PT(JT,5)=SQRT(ETP*ETM-PTT2)
708         NFT(JT,3)=NFT3
709         NFT(JT,5)=NFT5
710 C*****recoil PT from hard-inter is shared by two end-partons 
711 C       so that pt=p1+p2
712         PP(JP,1)=PP11-PKC11
713         PP(JP,2)=PP12-PKC12
714
715         KICKDIP=1
716         KICKDIT=1
717         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000.OR.
718      &                  ABS(NFP(JP,1)*NFP(JP,2)).LT.100) THEN
719                 KICKDIP=0
720         ENDIF
721         IF(ABS(NFT(JT,1)*NFT(JT,2)).GT.1000000.OR.
722      &                  ABS(NFT(JT,1)*NFT(JT,2)).LT.100) THEN
723                 KICKDIT=0
724         ENDIF
725         IF((KICKDIP.EQ.0.AND.RLU_HIJING(0).LT.0.5)
726      &     .OR.(KICKDIP.NE.0.AND.RLU_HIJING(0)
727      &     .LT.0.5/(1.0+(PKC11**2+PKC12**2)/HIPR1(22)**2))) THEN
728            PP(JP,6)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0+PP(JP,6)
729            PP(JP,7)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0+PP(JP,7)
730            PP(JP,8)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0
731      &              +PP(JP,8)+PKC11
732            PP(JP,9)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0
733      &              +PP(JP,9)+PKC12
734         ELSE
735            PP(JP,8)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0+PP(JP,8)
736            PP(JP,9)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0+PP(JP,9)
737            PP(JP,6)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0
738      &              +PP(JP,6)+PKC11
739            PP(JP,7)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0
740      &              +PP(JP,7)+PKC12
741         ENDIF
742         PP(JP,1)=PP(JP,6)+PP(JP,8)
743         PP(JP,2)=PP(JP,7)+PP(JP,9)
744 C                               ********pt kick for proj
745         PT(JT,1)=PT11-PKC21
746         PT(JT,2)=PT12-PKC22
747         IF((KICKDIT.EQ.0.AND.RLU_HIJING(0).LT.0.5)
748      &     .OR.(KICKDIT.NE.0.AND.RLU_HIJING(0)
749      &     .LT.0.5/(1.0+(PKC21**2+PKC22**2)/HIPR1(22)**2))) THEN
750            PT(JT,6)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0+PT(JT,6)
751            PT(JT,7)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0+PT(JT,7)
752            PT(JT,8)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0
753      &              +PT(JT,8)+PKC21
754            PT(JT,9)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0
755      &              +PT(JT,9)+PKC22
756         ELSE
757            PT(JT,8)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0+PT(JT,8)
758            PT(JT,9)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0+PT(JT,9)
759            PT(JT,6)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0
760      &              +PT(JT,6)+PKC21
761            PT(JT,7)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0
762      &              +PT(JT,7)+PKC22
763         ENDIF
764         PT(JT,1)=PT(JT,6)+PT(JT,8)
765         PT(JT,2)=PT(JT,7)+PT(JT,9)
766 C                       ********pt kick for targ
767
768         IF(NPJ(JP).NE.0) NFP(JP,5)=3
769         IF(NTJ(JT).NE.0) NFT(JT,5)=3
770 C                       ********jets must be connected to string
771         IF(EPP/(EPM+0.0001).LT.ETP/(ETM+0.0001).AND.
772      &                  ABS(NFP(JP,1)*NFP(JP,2)).LT.1000000)THEN
773                 DO 620 JSB=1,15
774                 PSB=PP(JP,JSB)
775                 PP(JP,JSB)=PT(JT,JSB)
776                 PT(JT,JSB)=PSB
777                 NSB=NFP(JP,JSB)
778                 NFP(JP,JSB)=NFT(JT,JSB)
779                 NFT(JT,JSB)=NSB
780 620             CONTINUE
781 C               ********when Ycm(JP)<Ycm(JT) after the collision
782 C                       exchange the positions of the two   
783         ENDIF
784 C
785         RETURN
786 C**************************************************
787 C**************************************************
788 1000    IERROR=1
789         IF(IHPR2(10).EQ.0) RETURN
790         WRITE(6,*) '    Fatal HIJSFT start error,abandon this event'
791         WRITE(6,*) '    PROJ E+,E-,W+',EPP,EPM,WP
792         WRITE(6,*) '    TARG E+,E-,W-',ETP,ETM,WM
793         WRITE(6,*) '    W+*W-, (APN+ATN)^2',SW,SNN
794         RETURN
795 2000    IERROR=0
796         IF(IHPR2(10).EQ.0) RETURN
797         WRITE(6,*) '    (2)energy partition fail,'
798         WRITE(6,*) '    HIJSFT not performed, but continue'
799         WRITE(6,*) '    MP1,MPN',X1*(1.0-X2)*SW,AMPN**2
800         WRITE(6,*) '    MT2,MTN',X2*(1.0-X1)*SW,AMTN**2
801         RETURN
802 3000    IERROR=0
803         IF(IHPR2(10).EQ.0) RETURN
804         WRITE(6,*) '    (3)something is wrong with the pt kick, '
805         WRITE(6,*) '    HIJSFT not performed, but continue'
806         WRITE(6,*) '    D1=',D1,' D2=',D2,' SW=',SW
807         WRITE(6,*) '    HISTORY NFP5=',NFP(JP,5),' NFT5=',NFT(JT,5)
808         WRITE(6,*) '    THIS COLLISON NFP5=',NFP5, ' NFT5=',NFT5
809         WRITE(6,*) '    # OF JET IN PROJ',NPJ(JP),' IN TARG',NTJ(JT)
810         RETURN
811 4000    IERROR=0
812         IF(IHPR2(10).EQ.0) RETURN
813         WRITE(6,*) '    (4)unable to choose process, but not harmful'
814         WRITE(6,*) '    HIJSFT not performed, but continue'
815         WRITE(6,*) '    PTP=',SQRT(PTP2),' PTT=',SQRT(PTT2),' SW=',SW
816         WRITE(6,*) '    AMCUT=',AMX,' JP=',JP,' JT=',JT
817         WRITE(6,*) '    HISTORY NFP5=',NFP(JP,5),' NFT5=',NFT(JT,5)
818         RETURN
819 5000    IERROR=0
820         IF(IHPR2(10).EQ.0) RETURN
821         WRITE(6,*) '    energy partition failed(5),for limited try'
822         WRITE(6,*) '    HIJSFT not performed, but continue'
823         WRITE(6,*) '    NFP5=',NFP5,' NFT5=',NFT5
824         WRITE(6,*) '    D1',D1,' X1(1-X2)',X1*(1.0-X2)
825         WRITE(6,*) '    D2',D2,' X2(1-X1)',X2*(1.0-X1)
826         RETURN
827 6000    PKC=0.0
828         MISS=MISS+1
829         IF(MISS.LT.100) GO TO 30
830         IERROR=1
831         IF(IHPR2(10).EQ.0) RETURN
832         WRITE(6,*) ' ERROR OCCURED, HIJSFT NOT PERFORMED'
833         WRITE(6,*) ' Abort this event'
834         WRITE(6,*) 'MTP,PTP2',EPP*EPM,PTP2,'  MTT,PTT2',ETP*ETM,PTT2 
835         RETURN
836         END