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