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