Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:15:43

0001 C
0002 C       
0003 C*******************************************************************
0004 C                                                                  *
0005 C               Subroutine HIJSFT                                  *
0006 C                                                                  *
0007 C  Scatter two excited strings, JP from proj and JT from target    *
0008 C*******************************************************************
0009         SUBROUTINE HIJSFT(JP,JT,JOUT,IERROR)
0010         COMMON/HIJCRDN/YP(3,300),YT(3,300)
0011         SAVE  /HIJCRDN/
0012         COMMON/HIPARNT/HIPR1(100),IHPR2(50),HINT1(100),IHNT2(50)
0013         SAVE  /HIPARNT/
0014         COMMON/HIJDAT/HIDAT0(10,10),HIDAT(10)
0015         SAVE  /HIJDAT/
0016         COMMON/RANSEED/NSEED
0017         SAVE  /RANSEED/
0018         COMMON/HIJJET1/NPJ(300),KFPJ(300,500),PJPX(300,500),
0019      &               PJPY(300,500),PJPZ(300,500),PJPE(300,500),
0020      &               PJPM(300,500),NTJ(300),KFTJ(300,500),
0021      &               PJTX(300,500),PJTY(300,500),PJTZ(300,500),
0022      &               PJTE(300,500),PJTM(300,500)
0023         SAVE  /HIJJET1/
0024         COMMON/HIJJET2/NSG,NJSG(900),IASG(900,3),K1SG(900,100),
0025      &          K2SG(900,100),PXSG(900,100),PYSG(900,100),
0026      &          PZSG(900,100),PESG(900,100),PMSG(900,100)
0027         SAVE  /HIJJET2/
0028         COMMON/HISTRNG/NFP(300,15),PP(300,15),NFT(300,15),PT(300,15)
0029         SAVE  /HISTRNG/
0030         COMMON/DPMCOM1/JJP,JJT,AMP,AMT,APX0,ATX0,AMPN,AMTN,AMP0,AMT0,
0031      &          NFDP,NFDT,WP,WM,SW,XREMP,XREMT,DPKC1,DPKC2,PP11,PP12,
0032      &          PT11,PT12,PTP2,PTT2
0033         SAVE  /DPMCOM1/
0034         COMMON/DPMCOM2/NDPM,KDPM(20,2),PDPM1(20,5),PDPM2(20,5)
0035         SAVE  /DPMCOM2/
0036 C*******************************************************************
0037 C       JOUT-> the number
0038 C       of hard scatterings preceding this soft collision. 
0039 C       IHNT2(13)-> 1=
0040 C       double diffrac 2=single diffrac, 3=non-single diffrac.
0041 C*******************************************************************
0042         IERROR=0
0043         JJP=JP
0044         JJT=JT
0045         NDPM=0
0046         IOPMAIN=0
0047         IF(JP.GT.IHNT2(1) .OR. JT.GT.IHNT2(3)) RETURN
0048 
0049         EPP=PP(JP,4)+PP(JP,3)
0050         EPM=PP(JP,4)-PP(JP,3)
0051         ETP=PT(JT,4)+PT(JT,3)
0052         ETM=PT(JT,4)-PT(JT,3)
0053 
0054         WP=EPP+ETP
0055         WM=EPM+ETM
0056         SW=WP*WM
0057 C               ********total W+,W- and center-of-mass energy
0058 
0059         IF(WP.LT.0.0 .OR. WM.LT.0.0) GO TO 1000
0060 
0061         IF(JOUT.EQ.0) THEN
0062                 IF(EPP.LT.0.0) GO TO 1000
0063                 IF(EPM.LT.0.0) GO TO 1000
0064                 IF(ETP.LT.0.0) GO TO 1000
0065                 IF(ETM.LT.0.0) GO TO 1000    
0066                 IF(EPP/(EPM+0.01).LE.ETP/(ETM+0.01)) RETURN
0067         ENDIF
0068 C               ********For strings which does not follow a jet-prod,
0069 C                       scatter only if Ycm(JP)>Ycm(JT). When jets
0070 C                       are produced just before this collision
0071 C                       this requirement has already be enforced
0072 C                       (see SUBROUTINE HIJHRD)
0073         IHNT2(11)=JP
0074         IHNT2(12)=JT
0075 C
0076 C
0077 C
0078         MISS=0
0079         PKC1=0.0
0080         PKC2=0.0
0081         PKC11=0.0
0082         PKC12=0.0
0083         PKC21=0.0
0084         PKC22=0.0
0085         DPKC11=0.0
0086         DPKC12=0.0
0087         DPKC21=0.0
0088         DPKC22=0.0
0089         IF(NFP(JP,10).EQ.1.OR.NFT(JT,10).EQ.1) THEN
0090            IF(NFP(JP,10).EQ.1) THEN
0091               PHI1=ULANGL(PP(JP,10),PP(JP,11))
0092               PPJET=SQRT(PP(JP,10)**2+PP(JP,11)**2)
0093               PKC1=PPJET
0094               PKC11=PP(JP,10)
0095               PKC12=PP(JP,11)
0096            ENDIF
0097            IF(NFT(JT,10).EQ.1) THEN
0098               PHI2=ULANGL(PT(JT,10),PT(JT,11))
0099               PTJET=SQRT(PT(JT,10)**2+PT(JT,11)**2)
0100               PKC2=PTJET
0101               PKC21=PT(JT,10)
0102               PKC22=PT(JT,11)
0103            ENDIF
0104            IF(IHPR2(4).GT.0.AND.IHNT2(1).GT.1.AND.IHNT2(3).GT.1) THEN
0105               IF(NFP(JP,10).EQ.0) THEN
0106                  PHI=-PHI2
0107               ELSE IF(NFT(JT,10).EQ.0) THEN
0108                  PHI=PHI1
0109               ELSE
0110                  PHI=(PHI1+PHI2-HIPR1(40))/2.0
0111               ENDIF
0112               BX=HINT1(19)*COS(HINT1(20))
0113               BY=HINT1(19)*SIN(HINT1(20))
0114               XP0=YP(1,JP)
0115               YP0=YP(2,JP)
0116               XT0=YT(1,JT)+BX
0117               YT0=YT(2,JT)+BY
0118               R1=MAX(1.2*IHNT2(1)**0.3333333,
0119      &               SQRT(XP0**2+YP0**2))
0120               R2=MAX(1.2*IHNT2(3)**0.3333333,
0121      &               SQRT((XT0-BX)**2+(YT0-BY)**2))
0122               IF(ABS(COS(PHI)).LT.1.0E-5) THEN
0123                  DD1=R1
0124                  DD2=R1
0125                  DD3=ABS(BY+SQRT(R2**2-(XP0-BX)**2)-YP0)
0126                  DD4=ABS(BY-SQRT(R2**2-(XP0-BX)**2)-YP0)
0127                  GO TO 5
0128               ENDIF
0129               BB=2.0*SIN(PHI)*(COS(PHI)*YP0-SIN(PHI)*XP0)
0130               CC=(YP0**2-R1**2)*COS(PHI)**2+XP0*SIN(PHI)*(
0131      &                          XP0*SIN(PHI)-2.0*YP0*COS(PHI))
0132               DD=BB**2-4.0*CC
0133               IF(DD.LT.0.0) GO TO 10
0134               XX1=(-BB+SQRT(DD))/2.0
0135               XX2=(-BB-SQRT(DD))/2.0
0136               DD1=ABS((XX1-XP0)/COS(PHI))
0137               DD2=ABS((XX2-XP0)/COS(PHI))
0138 C                       
0139               BB=2.0*SIN(PHI)*(COS(PHI)*(YT0-BY)-SIN(PHI)*XT0)-2.0*BX
0140               CC=(BX**2+(YT0-BY)**2-R2**2)*COS(PHI)**2+XT0*SIN(PHI)
0141      &           *(XT0*SIN(PHI)-2.0*COS(PHI)*(YT0-BY))
0142      &           -2.0*BX*SIN(PHI)*(COS(PHI)*(YT0-BY)-SIN(PHI)*XT0)
0143               DD=BB**2-4.0*CC
0144               IF(DD.LT.0.0) GO TO 10
0145               XX1=(-BB+SQRT(DD))/2.0
0146               XX2=(-BB-SQRT(DD))/2.0
0147               DD3=ABS((XX1-XT0)/COS(PHI))
0148               DD4=ABS((XX2-XT0)/COS(PHI))
0149 C
0150  5            DD1=MIN(DD1,DD3)
0151               DD2=MIN(DD2,DD4)
0152               IF(DD1.LT.HIPR1(13)) DD1=0.0
0153               IF(DD2.LT.HIPR1(13)) DD2=0.0
0154               IF(NFP(JP,10).EQ.1.AND.PPJET.GT.HIPR1(11)) THEN
0155                  DP1=DD1*HIPR1(14)/2.0
0156                  DP1=MIN(DP1,PPJET-HIPR1(11))
0157                  PKC1=PPJET-DP1
0158                  DPX1=COS(PHI1)*DP1
0159                  DPY1=SIN(PHI1)*DP1
0160                  PKC11=PP(JP,10)-DPX1
0161                  PKC12=PP(JP,11)-DPY1
0162                  IF(DP1.GT.0.0) THEN
0163                     CTHEP=PP(JP,12)/SQRT(PP(JP,12)**2+PPJET**2)
0164                     DPZ1=DP1*CTHEP/SQRT(1.0-CTHEP**2)
0165                     DPE1=SQRT(DPX1**2+DPY1**2+DPZ1**2)
0166                     EPPPRM=PP(JP,4)+PP(JP,3)-DPE1-DPZ1
0167                     EPMPRM=PP(JP,4)-PP(JP,3)-DPE1+DPZ1
0168                     IF(EPPPRM.LE.0.0.OR.EPMPRM.LE.0.0) GO TO 15
0169                     EPP=EPPPRM
0170                     EPM=EPMPRM
0171                     PP(JP,10)=PKC11
0172                     PP(JP,11)=PKC12
0173                     NPJ(JP)=NPJ(JP)+1
0174                     KFPJ(JP,NPJ(JP))=21
0175                     PJPX(JP,NPJ(JP))=DPX1
0176                     PJPY(JP,NPJ(JP))=DPY1
0177                     PJPZ(JP,NPJ(JP))=DPZ1
0178                     PJPE(JP,NPJ(JP))=DPE1
0179                     PJPM(JP,NPJ(JP))=0.0
0180                     PP(JP,3)=PP(JP,3)-DPZ1
0181                     PP(JP,4)=PP(JP,4)-DPE1
0182                  ENDIF
0183               ENDIF
0184  15           IF(NFT(JT,10).EQ.1.AND.PTJET.GT.HIPR1(11)) THEN
0185                  DP2=DD2*HIPR1(14)/2.0
0186                  DP2=MIN(DP2,PTJET-HIPR1(11))
0187                  PKC2=PTJET-DP2
0188                  DPX2=COS(PHI2)*DP2
0189                  DPY2=SIN(PHI2)*DP2
0190                  PKC21=PT(JT,10)-DPX2
0191                  PKC22=PT(JT,11)-DPY2
0192                  IF(DP2.GT.0.0) THEN
0193                     CTHET=PT(JT,12)/SQRT(PT(JT,12)**2+PTJET**2)
0194                     DPZ2=DP2*CTHET/SQRT(1.0-CTHET**2)
0195                     DPE2=SQRT(DPX2**2+DPY2**2+DPZ2**2)
0196                     ETPPRM=PT(JT,4)+PT(JT,3)-DPE2-DPZ2
0197                     ETMPRM=PT(JT,4)-PT(JT,3)-DPE2+DPZ2
0198                     IF(ETPPRM.LE.0.0.OR.ETMPRM.LE.0.0) GO TO 16
0199                     ETP=ETPPRM
0200                     ETM=ETMPRM
0201                     PT(JT,10)=PKC21
0202                     PT(JT,11)=PKC22
0203                     NTJ(JT)=NTJ(JT)+1
0204                     KFTJ(JT,NTJ(JT))=21
0205                     PJTX(JT,NTJ(JT))=DPX2
0206                     PJTY(JT,NTJ(JT))=DPY2
0207                     PJTZ(JT,NTJ(JT))=DPZ2
0208                     PJTE(JT,NTJ(JT))=DPE2
0209                     PJTM(JT,NTJ(JT))=0.0
0210                     PT(JT,3)=PT(JT,3)-DPZ2
0211                     PT(JT,4)=PT(JT,4)-DPE2
0212                  ENDIF
0213               ENDIF
0214  16           DPKC11=-(PP(JP,10)-PKC11)/2.0
0215               DPKC12=-(PP(JP,11)-PKC12)/2.0
0216               DPKC21=-(PT(JT,10)-PKC21)/2.0
0217               DPKC22=-(PT(JT,11)-PKC22)/2.0
0218               WP=EPP+ETP
0219               WM=EPM+ETM
0220               SW=WP*WM
0221            ENDIF
0222         ENDIF
0223 C               ********If jet is quenched the pt from valence quark
0224 C                       hard scattering has to reduced by d*kapa
0225 C
0226 C   
0227 10      PTP02=PP(JP,1)**2+PP(JP,2)**2
0228         PTT02=PT(JT,1)**2+PT(JT,2)**2
0229 C       
0230         AMQ=MAX(PP(JP,14)+PP(JP,15),PT(JT,14)+PT(JT,15))
0231         AMX=HIPR1(1)+AMQ
0232 C               ********consider mass cut-off for strings which
0233 C                       must also include quark's mass
0234         AMP0=AMX
0235         DPM0=AMX
0236         NFDP=0
0237         IF(NFP(JP,5).LE.2.AND.NFP(JP,3).NE.0) THEN
0238                 AMP0=ULMASS(NFP(JP,3))
0239                 NFDP=NFP(JP,3)+2*NFP(JP,3)/ABS(NFP(JP,3))
0240                 DPM0=ULMASS(NFDP)
0241                 IF(DPM0.LE.0.0) THEN
0242                         NFDP=NFDP-2*NFDP/ABS(NFDP)
0243                         DPM0=ULMASS(NFDP)
0244                 ENDIF
0245         ENDIF
0246         AMT0=AMX
0247         DTM0=AMX
0248         NFDT=0
0249         IF(NFT(JT,5).LE.2.AND.NFT(JT,3).NE.0) THEN
0250                 AMT0=ULMASS(NFT(JT,3))
0251                 NFDT=NFT(JT,3)+2*NFT(JT,3)/ABS(NFT(JT,3))
0252                 DTM0=ULMASS(NFDT)
0253                 IF(DTM0.LE.0.0) THEN
0254                         NFDT=NFDT-2*NFDT/ABS(NFDT)
0255                         DTM0=ULMASS(NFDT)
0256                 ENDIF
0257         ENDIF
0258 C       
0259         AMPN=SQRT(AMP0**2+PTP02)
0260         AMTN=SQRT(AMT0**2+PTT02)
0261         SNN=(AMPN+AMTN)**2+0.001
0262 C
0263         IF(SW.LT.SNN+0.001) GO TO 4000
0264 C               ********Scatter only if SW>SNN
0265 C*****give some PT kick to the two exited strings******************
0266 20      SWPTN=4.0*(MAX(AMP0,AMT0)**2+MAX(PTP02,PTT02))
0267         SWPTD=4.0*(MAX(DPM0,DTM0)**2+MAX(PTP02,PTT02))
0268         SWPTX=4.0*(AMX**2+MAX(PTP02,PTT02))
0269         IF(SW.LE.SWPTN) THEN
0270                 PKCMX=0.0
0271         ELSE IF(SW.GT.SWPTN .AND. SW.LE.SWPTD
0272      &          .AND.NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0) THEN
0273            PKCMX=SQRT(SW/4.0-MAX(AMP0,AMT0)**2)
0274      &           -SQRT(MAX(PTP02,PTT02))
0275         ELSE IF(SW.GT.SWPTD .AND. SW.LE.SWPTX
0276      &          .AND.NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0) THEN
0277            PKCMX=SQRT(SW/4.0-MAX(DPM0,DTM0)**2)
0278      &           -SQRT(MAX(PTP02,PTT02))
0279         ELSE IF(SW.GT.SWPTX) THEN
0280            PKCMX=SQRT(SW/4.0-AMX**2)-SQRT(MAX(PTP02,PTT02))
0281         ENDIF
0282 C               ********maximun PT kick
0283 C*********************************************************
0284 C
0285         IF(NFP(JP,10).EQ.1.OR.NFT(JT,10).EQ.1) THEN
0286                 IF(PKC1.GT.PKCMX) THEN
0287                         PKC1=PKCMX
0288                         PKC11=PKC1*COS(PHI1)
0289                         PKC12=PKC1*SIN(PHI1)
0290                         DPKC11=-(PP(JP,10)-PKC11)/2.0
0291                         DPKC12=-(PP(JP,11)-PKC12)/2.0
0292                 ENDIF
0293                 IF(PKC2.GT.PKCMX) THEN
0294                         PKC2=PKCMX
0295                         PKC21=PKC2*COS(PHI2)
0296                         PKC22=PKC2*SIN(PHI2)
0297                         DPKC21=-(PT(JT,10)-PKC21)/2.0
0298                         DPKC22=-(PT(JT,11)-PKC22)/2.0
0299                 ENDIF
0300                 DPKC1=DPKC11+DPKC21
0301                 DPKC2=DPKC12+DPKC22
0302                 NFP(JP,10)=-NFP(JP,10)
0303                 NFT(JT,10)=-NFT(JT,10)
0304                 GO TO 40
0305         ENDIF
0306 C               ********If the valence quarks had a hard-collision
0307 C                       the pt kick is the pt from hard-collision.
0308         I_SNG=0
0309         IF(IHPR2(13).NE.0 .AND. ATL_RAN(NSEED).LE.HIDAT(4)) I_SNG=1
0310         IF((NFP(JP,5).EQ.3 .OR.NFT(JT,5).EQ.3).OR.
0311      &          (NPJ(JP).NE.0.OR.NFP(JP,10).NE.0).OR.
0312      &          (NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) I_SNG=0
0313 C
0314 C               ********decite whether to have single-diffractive
0315         IF(IHPR2(5).EQ.0) THEN
0316                 PKC=HIPR1(2)*SQRT(-ALOG(1.0-ATL_RAN(NSEED)
0317      &                  *(1.0-EXP(-PKCMX**2/HIPR1(2)**2))))
0318                 GO TO 30
0319         ENDIF
0320         PKC=HIRND2(3,0.0,PKCMX**2)
0321         PKC=SQRT(PKC)
0322         IF(PKC.GT.HIPR1(20)) 
0323      &     PKC=HIPR1(2)*SQRT(-ALOG(EXP(-HIPR1(20)**2/HIPR1(2)**2)
0324      &         -ATL_RAN(NSEED)*(EXP(-HIPR1(20)**2/HIPR1(2)**2)-
0325      &         EXP(-PKCMX**2/HIPR1(2)**2))))
0326 C
0327         IF(I_SNG.EQ.1) PKC=0.65*SQRT(
0328      &          -ALOG(1.0-ATL_RAN(NSEED)*(1.0-EXP(-PKCMX**2/0.65**2))))
0329 C                       ********select PT kick
0330 30      PHI0=2.0*HIPR1(40)*ATL_RAN(NSEED)
0331         PKC11=PKC*SIN(PHI0)
0332         PKC12=PKC*COS(PHI0)
0333         PKC21=-PKC11
0334         PKC22=-PKC12
0335         DPKC1=0.0
0336         DPKC2=0.0
0337 40      PP11=PP(JP,1)+PKC11-DPKC1
0338         PP12=PP(JP,2)+PKC12-DPKC2
0339         PT11=PT(JT,1)+PKC21-DPKC1
0340         PT12=PT(JT,2)+PKC22-DPKC2
0341         PTP2=PP11**2+PP12**2
0342         PTT2=PT11**2+PT12**2
0343 C
0344         AMPN=SQRT(AMP0**2+PTP2)
0345         AMTN=SQRT(AMT0**2+PTT2)
0346         SNN=(AMPN+AMTN)**2+0.001
0347 C***************************************
0348         WP=EPP+ETP
0349         WM=EPM+ETM
0350         SW=WP*WM
0351 C****************************************
0352         IF(SW.LT.SNN) THEN
0353            MISS=MISS+1
0354            IF(MISS.LE.100) then
0355               PKC=0.0
0356               GO TO 30
0357            ENDIF
0358            IF(IHPR2(10).NE.0) 
0359      &WRITE(6,*) 'Error occured in Pt kick section of HIJSFT'
0360            GO TO 4000
0361         ENDIF
0362 C******************************************************************
0363         AMPD=SQRT(DPM0**2+PTP2)
0364         AMTD=SQRT(DTM0**2+PTT2)
0365 
0366         AMPX=SQRT(AMX**2+PTP2)
0367         AMTX=SQRT(AMX**2+PTT2)
0368 
0369         DPN=AMPN**2/SW
0370         DTN=AMTN**2/SW
0371         DPD=AMPD**2/SW
0372         DTD=AMTD**2/SW
0373         DPX=AMPX**2/SW
0374         DTX=AMTX**2/SW
0375 C
0376         SPNTD=(AMPN+AMTD)**2
0377         SPNTX=(AMPN+AMTX)**2
0378 C                       ********CM energy if proj=N,targ=N*
0379         SPDTN=(AMPD+AMTN)**2
0380         SPXTN=(AMPX+AMTN)**2
0381 C                       ********CM energy if proj=N*,targ=N
0382         SPDTX=(AMPD+AMTX)**2
0383         SPXTD=(AMPX+AMTD)**2
0384         SDD=(AMPD+AMTD)**2
0385         SXX=(AMPX+AMTX)**2
0386 
0387 C
0388 C       
0389 C               ********CM energy if proj=delta, targ=delta
0390 C****************There are many different cases**********
0391 c       IF(IHPR2(15).EQ.1) GO TO 500
0392 C
0393 C               ********to have DPM type soft interactions
0394 C
0395  45     CONTINUE
0396         IF(SW.GT.SXX+0.001) THEN
0397            IF(I_SNG.EQ.0) THEN
0398               D1=DPX
0399               D2=DTX
0400               NFP3=0
0401               NFT3=0
0402               GO TO 400
0403            ELSE
0404 c**** 5/30/1998 this is identical to the above statement. Added to
0405 c**** avoid questional branching to block.
0406               IF((NFP(JP,5).EQ.3 .AND.NFT(JT,5).EQ.3).OR.
0407      &           (NPJ(JP).NE.0.OR.NFP(JP,10).NE.0).OR.
0408      &           (NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) THEN
0409                  D1=DPX
0410                  D2=DTX
0411                  NFP3=0
0412                  NFT3=0
0413                  GO TO 400
0414               ENDIF
0415 C               ********do not allow excited strings to have 
0416 C                       single-diffr 
0417               IF(ATL_RAN(NSEED).GT.0.5.OR.(NFT(JT,5).GT.2.OR.
0418      &                NTJ(JT).NE.0.OR.NFT(JT,10).NE.0)) THEN
0419                  D1=DPN
0420                  D2=DTX
0421                  NFP3=NFP(JP,3)
0422                  NFT3=0
0423                  GO TO 220
0424               ELSE
0425                  D1=DPX
0426                  D2=DTN
0427                  NFP3=0
0428                  NFT3=NFT(JT,3)
0429                  GO TO 240
0430               ENDIF
0431 C               ********have single diffractive collision
0432            ENDIF
0433         ELSE IF(SW.GT.MAX(SPDTX,SPXTD)+0.001 .AND.
0434      &                          SW.LE.SXX+0.001) THEN
0435            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0.AND.
0436      &         ATL_RAN(NSEED).GT.0.5).OR.(NPJ(JP).EQ.0
0437      &         .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
0438               D1=DPD
0439               D2=DTX
0440               NFP3=NFDP
0441               NFT3=0
0442               GO TO 220
0443            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
0444               D1=DPX
0445               D2=DTD
0446               NFP3=0
0447               NFT3=NFDT
0448               GO TO 240
0449            ENDIF
0450            GO TO 4000
0451         ELSE IF(SW.GT.MIN(SPDTX,SPXTD)+0.001.AND.
0452      &                  SW.LE.MAX(SPDTX,SPXTD)+0.001) THEN
0453            IF(SPDTX.LE.SPXTD.AND.NPJ(JP).EQ.0
0454      &                       .AND.NFP(JP,5).LE.2) THEN
0455               D1=DPD
0456               D2=DTX
0457               NFP3=NFDP
0458               NFT3=0
0459               GO TO 220
0460            ELSE IF(SPDTX.GT.SPXTD.AND.NTJ(JT).EQ.0
0461      &                       .AND.NFT(JT,5).LE.2) THEN
0462               D1=DPX
0463               D2=DTD
0464               NFP3=0
0465               NFT3=NFDT
0466               GO TO 240
0467            ENDIF
0468 c*** 5/30/1998 added to avoid questional branching to another block
0469 c*** this is identical to the statement following the next ELSE IF
0470            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0
0471      &       .AND.ATL_RAN(NSEED).GT.0.5).OR.(NPJ(JP).EQ.0
0472      &        .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
0473               D1=DPN
0474               D2=DTX
0475               NFP3=NFP(JP,3)
0476               NFT3=0
0477               GO TO 220
0478            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
0479               D1=DPX
0480               D2=DTN
0481               NFP3=0
0482               NFT3=NFT(JT,3)
0483               GO TO 240
0484            ENDIF
0485            GO TO 4000
0486         ELSE IF(SW.GT.MAX(SPNTX,SPXTN)+0.001 .AND.
0487      &                  SW.LE.MIN(SPDTX,SPXTD)+0.001) THEN
0488            IF(((NPJ(JP).EQ.0.AND.NTJ(JT).EQ.0
0489      &       .AND.ATL_RAN(NSEED).GT.0.5).OR.(NPJ(JP).EQ.0
0490      &        .AND.NTJ(JT).NE.0)).AND.NFP(JP,5).LE.2) THEN
0491               D1=DPN
0492               D2=DTX
0493               NFP3=NFP(JP,3)
0494               NFT3=0
0495               GO TO 220
0496            ELSE IF(NTJ(JT).EQ.0.AND.NFT(JT,5).LE.2) THEN
0497               D1=DPX
0498               D2=DTN
0499               NFP3=0
0500               NFT3=NFT(JT,3)
0501               GO TO 240
0502            ENDIF
0503            GO TO 4000
0504         ELSE IF(SW.GT.MIN(SPNTX,SPXTN)+0.001 .AND.
0505      &                  SW.LE.MAX(SPNTX,SPXTN)+0.001) THEN
0506            IF(SPNTX.LE.SPXTN.AND.NPJ(JP).EQ.0
0507      &                           .AND.NFP(JP,5).LE.2) THEN
0508               D1=DPN
0509               D2=DTX
0510               NFP3=NFP(JP,3)
0511               NFT3=0
0512               GO TO 220
0513            ELSEIF(SPNTX.GT.SPXTN.AND.NTJ(JT).EQ.0
0514      &                           .AND.NFT(JT,5).LE.2) THEN
0515               D1=DPX
0516               D2=DTN
0517               NFP3=0
0518               NFT3=NFT(JT,3)
0519               GO TO 240
0520            ENDIF
0521            GO TO 4000
0522         ELSE IF(SW.LE.MIN(SPNTX,SPXTN)+0.001 .AND.
0523      &                  (NPJ(JP).NE.0 .OR.NTJ(JT).NE.0)) THEN
0524            GO TO 4000
0525         ELSE IF(SW.LE.MIN(SPNTX,SPXTN)+0.001 .AND.
0526      &          NFP(JP,5).GT.2.AND.NFT(JT,5).GT.2) THEN
0527            GO TO 4000
0528         ELSE IF(SW.GT.SDD+0.001.AND.SW.LE.
0529      &                     MIN(SPNTX,SPXTN)+0.001) THEN
0530            D1=DPD
0531            D2=DTD
0532            NFP3=NFDP
0533            NFT3=NFDT
0534            GO TO 100
0535         ELSE IF(SW.GT.MAX(SPNTD,SPDTN)+0.001 
0536      &                      .AND. SW.LE.SDD+0.001) THEN
0537            IF(ATL_RAN(NSEED).GT.0.5) THEN
0538               D1=DPD
0539               D2=DTN
0540               NFP3=NFDP
0541               NFT3=NFT(JT,3)
0542               GO TO 100
0543            ELSE
0544               D1=DPN
0545               D2=DTD
0546               NFP3=NFP(JP,3)
0547               NFT3=NFDT
0548               GO TO 100
0549            ENDIF
0550         ELSE IF(SW.GT.MIN(SPNTD,SPDTN)+0.001
0551      &          .AND. SW.LE.MAX(SPNTD,SPDTN)+0.001) THEN
0552            IF(SPNTD.GT.SPDTN) THEN
0553               D1=DPD
0554               D2=DTN
0555               NFP3=NFDP
0556               NFT3=NFT(JT,3)
0557               GO TO 100
0558            ELSE
0559               D1=DPN
0560               D2=DTD
0561               NFP3=NFP(JP,3)
0562               NFT3=NFDT
0563               GO TO 100
0564            ENDIF
0565         ELSE IF(SW.LE.MIN(SPNTD,SPDTN)+0.001) THEN
0566            D1=DPN
0567            D2=DTN
0568            NFP3=NFP(JP,3)
0569            NFT3=NFT(JT,3)
0570            GO TO 100
0571         ENDIF
0572         WRITE(6,*) 'Error in HIJSFT: There is no path to here'
0573         RETURN
0574 C
0575 C***************  elastic scattering ***************
0576 C       this is like elastic, both proj and targ mass
0577 C       must be fixed
0578 C***************************************************
0579 100     NFP5=MAX(2,NFP(JP,5))
0580         NFT5=MAX(2,NFT(JT,5))
0581         BB1=1.0+D1-D2
0582         BB2=1.0+D2-D1
0583         IF(BB1**2.LT.4.0*D1 .OR. BB2**2.LT.4.0*D2) THEN
0584                 MISS=MISS+1
0585                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
0586                 PKC=PKC*0.5
0587                 GO TO 30
0588         ENDIF
0589         IF(ATL_RAN(NSEED).LT.0.5) THEN
0590                 X1=(BB1-SQRT(BB1**2-4.0*D1))/2.0
0591                 X2=(BB2-SQRT(BB2**2-4.0*D2))/2.0
0592         ELSE
0593                 X1=(BB1+SQRT(BB1**2-4.0*D1))/2.0
0594                 X2=(BB2+SQRT(BB2**2-4.0*D2))/2.0
0595         ENDIF
0596         IHNT2(13)=2
0597         GO TO 600
0598 C
0599 C********** Single diffractive ***********************
0600 C either proj or targ's mass is fixed
0601 C*****************************************************
0602 220     NFP5=MAX(2,NFP(JP,5))
0603         NFT5=3
0604         IF(NFP3.EQ.0) NFP5=3
0605         BB2=1.0+D2-D1
0606         IF(BB2**2.LT.4.0*D2) THEN
0607                 MISS=MISS+1
0608                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
0609                 PKC=PKC*0.5
0610                 GO TO 30
0611         ENDIF
0612         XMIN=(BB2-SQRT(BB2**2-4.0*D2))/2.0
0613         XMAX=(BB2+SQRT(BB2**2-4.0*D2))/2.0
0614         MISS4=0
0615 222     X2=HIRND2(6,XMIN,XMAX)
0616         X1=D1/(1.0-X2)
0617         IF(X2*(1.0-X1).LT.(D2+1.E-4/SW)) THEN
0618                 MISS4=MISS4+1
0619                 IF(MISS4.LE.1000) GO TO 222
0620                 GO TO 5000
0621         ENDIF
0622         IHNT2(13)=2
0623         GO TO 600
0624 C                       ********Fix proj mass*********
0625 240     NFP5=3
0626         NFT5=MAX(2,NFT(JT,5))
0627         IF(NFT3.EQ.0) NFT5=3
0628         BB1=1.0+D1-D2
0629         IF(BB1**2.LT.4.0*D1) THEN
0630                 MISS=MISS+1
0631                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
0632                 PKC=PKC*0.5
0633                 GO TO 30
0634         ENDIF
0635         XMIN=(BB1-SQRT(BB1**2-4.0*D1))/2.0
0636         XMAX=(BB1+SQRT(BB1**2-4.0*D1))/2.0
0637         MISS4=0
0638 242     X1=HIRND2(6,XMIN,XMAX)
0639         X2=D2/(1.0-X1)
0640         IF(X1*(1.0-X2).LT.(D1+1.E-4/SW)) THEN
0641                 MISS4=MISS4+1
0642                 IF(MISS4.LE.1000) GO TO 242
0643                 GO TO 5000
0644         ENDIF
0645         IHNT2(13)=2
0646         GO TO 600
0647 C                       ********Fix targ mass*********
0648 C
0649 C*************non-single diffractive**********************
0650 C       both proj and targ may not be fixed in mass 
0651 C*********************************************************
0652 C
0653 400     NFP5=3
0654         NFT5=3
0655         BB1=1.0+D1-D2
0656         BB2=1.0+D2-D1
0657         IF(BB1**2.LT.4.0*D1 .OR. BB2**2.LT.4.0*D2) THEN
0658                 MISS=MISS+1
0659                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 3000
0660                 PKC=PKC*0.5
0661                 GO TO 30
0662         ENDIF
0663         XMIN1=(BB1-SQRT(BB1**2-4.0*D1))/2.0
0664         XMAX1=(BB1+SQRT(BB1**2-4.0*D1))/2.0
0665         XMIN2=(BB2-SQRT(BB2**2-4.0*D2))/2.0
0666         XMAX2=(BB2+SQRT(BB2**2-4.0*D2))/2.0
0667         MISS4=0 
0668 410     X1=HIRND2(4,XMIN1,XMAX1)
0669         X2=HIRND2(4,XMIN2,XMAX2)
0670         IF(NFP(JP,5).EQ.3.OR.NFT(JT,5).EQ.3) THEN
0671                 X1=HIRND2(6,XMIN1,XMAX1)
0672                 X2=HIRND2(6,XMIN2,XMAX2)
0673         ENDIF
0674 C                       ********
0675         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000.OR.
0676      &                  ABS(NFP(JP,1)*NFP(JP,2)).LT.100) THEN
0677                 X1=HIRND2(5,XMIN1,XMAX1)
0678         ENDIF
0679         IF(ABS(NFT(JT,1)*NFT(JT,2)).GT.1000000.OR.
0680      &                  ABS(NFT(JT,1)*NFT(JT,2)).LT.100) THEN
0681                 X2=HIRND2(5,XMIN2,XMAX2)
0682         ENDIF
0683 c       IF(IOPMAIN.EQ.3) X1=HIRND2(6,XMIN1,XMAX1)
0684 c       IF(IOPMAIN.EQ.2) X2=HIRND2(6,XMIN2,XMAX2) 
0685 C       ********For q-qbar or (qq)-(qq)bar system use symetric
0686 C               distribution, for q-(qq) or qbar-(qq)bar use
0687 C               unsymetrical distribution
0688 C
0689         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000) X1=1.0-X1
0690         XXP=X1*(1.0-X2)
0691         XXT=X2*(1.0-X1)
0692         IF(XXP.LT.(D1+1.E-4/SW) .OR. XXT.LT.(D2+1.E-4/SW)) THEN
0693                 MISS4=MISS4+1
0694                 IF(MISS4.LE.1000) GO TO 410
0695                 GO TO 5000
0696         ENDIF
0697         IHNT2(13)=3
0698 C***************************************************
0699 C***************************************************
0700 600     CONTINUE
0701         IF(X1*(1.0-X2).LT.(AMPN**2-1.E-4)/SW.OR.
0702      &                  X2*(1.0-X1).LT.(AMTN**2-1.E-4)/SW) THEN
0703                 MISS=MISS+1
0704                 IF(MISS.GT.100.OR.PKC.EQ.0.0) GO TO 2000
0705                 PKC=0.0
0706                 GO TO 30
0707         ENDIF
0708 C
0709         EPP=(1.0-X2)*WP
0710         EPM=X1*WM
0711         ETP=X2*WP
0712         ETM=(1.0-X1)*WM
0713         PP(JP,3)=(EPP-EPM)/2.0
0714         PP(JP,4)=(EPP+EPM)/2.0
0715         IF(EPP*EPM-PTP2.LT.0.0) GO TO 6000
0716         PP(JP,5)=SQRT(EPP*EPM-PTP2)
0717         NFP(JP,3)=NFP3
0718         NFP(JP,5)=NFP5
0719 
0720         PT(JT,3)=(ETP-ETM)/2.0
0721         PT(JT,4)=(ETP+ETM)/2.0
0722         IF(ETP*ETM-PTT2.LT.0.0) GO TO 6000
0723         PT(JT,5)=SQRT(ETP*ETM-PTT2)
0724         NFT(JT,3)=NFT3
0725         NFT(JT,5)=NFT5
0726 C*****recoil PT from hard-inter is shared by two end-partons 
0727 C       so that pt=p1+p2
0728         PP(JP,1)=PP11-PKC11
0729         PP(JP,2)=PP12-PKC12
0730 
0731         KICKDIP=1
0732         KICKDIT=1
0733         IF(ABS(NFP(JP,1)*NFP(JP,2)).GT.1000000.OR.
0734      &                  ABS(NFP(JP,1)*NFP(JP,2)).LT.100) THEN
0735                 KICKDIP=0
0736         ENDIF
0737         IF(ABS(NFT(JT,1)*NFT(JT,2)).GT.1000000.OR.
0738      &                  ABS(NFT(JT,1)*NFT(JT,2)).LT.100) THEN
0739                 KICKDIT=0
0740         ENDIF
0741         IF((KICKDIP.EQ.0.AND.ATL_RAN(NSEED).LT.0.5)
0742      &     .OR.(KICKDIP.NE.0.AND.ATL_RAN(NSEED)
0743      &     .LT.0.5/(1.0+(PKC11**2+PKC12**2)/HIPR1(22)**2))) THEN
0744            PP(JP,6)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0+PP(JP,6)
0745            PP(JP,7)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0+PP(JP,7)
0746            PP(JP,8)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0
0747      &              +PP(JP,8)+PKC11
0748            PP(JP,9)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0
0749      &              +PP(JP,9)+PKC12
0750         ELSE
0751            PP(JP,8)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0+PP(JP,8)
0752            PP(JP,9)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0+PP(JP,9)
0753            PP(JP,6)=(PP(JP,1)-PP(JP,6)-PP(JP,8)-DPKC1)/2.0
0754      &              +PP(JP,6)+PKC11
0755            PP(JP,7)=(PP(JP,2)-PP(JP,7)-PP(JP,9)-DPKC2)/2.0
0756      &              +PP(JP,7)+PKC12
0757         ENDIF
0758         PP(JP,1)=PP(JP,6)+PP(JP,8)
0759         PP(JP,2)=PP(JP,7)+PP(JP,9)
0760 C                               ********pt kick for proj
0761         PT(JT,1)=PT11-PKC21
0762         PT(JT,2)=PT12-PKC22
0763         IF((KICKDIT.EQ.0.AND.ATL_RAN(NSEED).LT.0.5)
0764      &     .OR.(KICKDIT.NE.0.AND.ATL_RAN(NSEED)
0765      &     .LT.0.5/(1.0+(PKC21**2+PKC22**2)/HIPR1(22)**2))) THEN
0766            PT(JT,6)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0+PT(JT,6)
0767            PT(JT,7)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0+PT(JT,7)
0768            PT(JT,8)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0
0769      &              +PT(JT,8)+PKC21
0770            PT(JT,9)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0
0771      &              +PT(JT,9)+PKC22
0772         ELSE
0773            PT(JT,8)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0+PT(JT,8)
0774            PT(JT,9)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0+PT(JT,9)
0775            PT(JT,6)=(PT(JT,1)-PT(JT,6)-PT(JT,8)-DPKC1)/2.0
0776      &              +PT(JT,6)+PKC21
0777            PT(JT,7)=(PT(JT,2)-PT(JT,7)-PT(JT,9)-DPKC2)/2.0
0778      &              +PT(JT,7)+PKC22
0779         ENDIF
0780         PT(JT,1)=PT(JT,6)+PT(JT,8)
0781         PT(JT,2)=PT(JT,7)+PT(JT,9)
0782 C                       ********pt kick for targ
0783 
0784         IF(NPJ(JP).NE.0) NFP(JP,5)=3
0785         IF(NTJ(JT).NE.0) NFT(JT,5)=3
0786 C                       ********jets must be connected to string
0787         IF(EPP/(EPM+0.0001).LT.ETP/(ETM+0.0001).AND.
0788      &                  ABS(NFP(JP,1)*NFP(JP,2)).LT.1000000)THEN
0789                 DO 620 JSB=1,15
0790                 PSB=PP(JP,JSB)
0791                 PP(JP,JSB)=PT(JT,JSB)
0792                 PT(JT,JSB)=PSB
0793                 NSB=NFP(JP,JSB)
0794                 NFP(JP,JSB)=NFT(JT,JSB)
0795                 NFT(JT,JSB)=NSB
0796 620             CONTINUE
0797 C               ********when Ycm(JP)<Ycm(JT) after the collision
0798 C                       exchange the positions of the two   
0799         ENDIF
0800 C
0801         RETURN
0802 C**************************************************
0803 C**************************************************
0804 1000    IERROR=1
0805         IF(IHPR2(10).EQ.0) RETURN
0806         WRITE(6,*) '    Fatal HIJSFT start error,abandon this event'
0807         WRITE(6,*) '    PROJ E+,E-,W+',EPP,EPM,WP
0808         WRITE(6,*) '    TARG E+,E-,W-',ETP,ETM,WM
0809         WRITE(6,*) '    W+*W-, (APN+ATN)^2',SW,SNN
0810         RETURN
0811 2000    IERROR=0
0812         IF(IHPR2(10).EQ.0) RETURN
0813         WRITE(6,*) '    (2)energy partition fail,'
0814         WRITE(6,*) '    HIJSFT not performed, but continue'
0815         WRITE(6,*) '    MP1,MPN',X1*(1.0-X2)*SW,AMPN**2
0816         WRITE(6,*) '    MT2,MTN',X2*(1.0-X1)*SW,AMTN**2
0817         RETURN
0818 3000    IERROR=0
0819         IF(IHPR2(10).EQ.0) RETURN
0820         WRITE(6,*) '    (3)something is wrong with the pt kick, '
0821         WRITE(6,*) '    HIJSFT not performed, but continue'
0822         WRITE(6,*) '    D1=',D1,' D2=',D2,' SW=',SW
0823         WRITE(6,*) '    HISTORY NFP5=',NFP(JP,5),' NFT5=',NFT(JT,5)
0824         WRITE(6,*) '    THIS COLLISON NFP5=',NFP5, ' NFT5=',NFT5
0825         WRITE(6,*) '    # OF JET IN PROJ',NPJ(JP),' IN TARG',NTJ(JT)
0826         RETURN
0827 4000    IERROR=0
0828         IF(IHPR2(10).EQ.0) RETURN
0829         WRITE(6,*) '    (4)unable to choose process, but not harmful'
0830         WRITE(6,*) '    HIJSFT not performed, but continue'
0831         WRITE(6,*) '    PTP=',SQRT(PTP2),' PTT=',SQRT(PTT2),' SW=',SW
0832         WRITE(6,*) '    AMCUT=',AMX,' JP=',JP,' JT=',JT
0833         WRITE(6,*) '    HISTORY NFP5=',NFP(JP,5),' NFT5=',NFT(JT,5)
0834         RETURN
0835 5000    IERROR=0
0836         IF(IHPR2(10).EQ.0) RETURN
0837         WRITE(6,*) '    energy partition failed(5),for limited try'
0838         WRITE(6,*) '    HIJSFT not performed, but continue'
0839         WRITE(6,*) '    NFP5=',NFP5,' NFT5=',NFT5
0840         WRITE(6,*) '    D1',D1,' X1(1-X2)',X1*(1.0-X2)
0841         WRITE(6,*) '    D2',D2,' X2(1-X1)',X2*(1.0-X1)
0842         RETURN
0843 6000    PKC=0.0
0844         MISS=MISS+1
0845         IF(MISS.LT.100) GO TO 30
0846         IERROR=1
0847         IF(IHPR2(10).EQ.0) RETURN
0848         WRITE(6,*) 'ERROR OCCURED, HIJSFT NOT PERFORMED'
0849         WRITE(6,*) ' Abort this event'
0850         WRITE(6,*) 'MTP,PTP2',EPP*EPM,PTP2,'  MTT,PTT2',ETP*ETM,PTT2 
0851         RETURN
0852         END