4 *CMZ :- -26/04/91 10.18.56 by Bryan Webber
6 *-- Author : Bryan Webber
8 C-----------------------------------------------------------------------
10 SUBROUTINE HWBFIN(IHEP)
12 C-----------------------------------------------------------------------
14 C DELETES INTERNAL LINES FROM SHOWER, MAKES COLOUR CONNECTION INDEX
16 C AND COPIES INTO /HEPEVT/ IN COLOUR ORDER.
18 C-----------------------------------------------------------------------
20 INCLUDE 'HERWIG61.INC'
22 INTEGER IHEP,ID,IJET,KHEP,IPAR,JPAR,NXPAR,IP,JP
24 IF (IERROR.NE.0) RETURN
26 C---SAVE VIRTUAL PARTON DATA
30 IF(NHEP.GT.NMXHEP) CALL HWWARN('HWBFIN',100,*999)
38 ISTHEP(NHEP)=ISTHEP(IHEP)+20
42 JMOHEP(2,NHEP)=JMOHEP(1,IHEP)
50 CALL HWVEQU(5,PPAR(1,2),PHEP(1,NHEP))
52 CALL HWVEQU(4,VPAR(1,2),VHEP(1,NHEP))
54 C---FINISHED FOR SPECTATOR OR NON-PARTON JETS
56 IF (ISTHEP(NHEP).GT.136) RETURN
58 IF (ID.GT.13.AND.ID.LT.209 .AND. ID.NE.59) RETURN
60 IF (ID.GT.220.AND.ABS(IDPDG(ID)).LT.1000000) RETURN
62 IF (ID.GT.424.AND.ID.NE.449) RETURN
64 IF (.NOT.TMPAR(2).AND.ID.EQ.59) RETURN
76 IF(NHEP.GT.NMXHEP) CALL HWWARN('HWBFIN',101,*999)
86 JMOHEP(2,NHEP)=JCOPAR(1,1)
92 CALL HWVEQU(5,PPAR,PHEP(1,NHEP))
94 CALL HWVEQU(4,VPAR(1,2),VHEP(1,NHEP))
100 C---START WITH ANTICOLOUR DAUGHTER OF HARDEST PARTON
112 IF (JPAR.EQ.0) GOTO 15
114 IF (JCOPAR(2,JPAR).EQ.IPAR) THEN
130 C---COULDN'T FIND COLOUR PARTNER
132 CALL HWWARN('HWBFIN',1,*999)
134 15 JPAR=JCOPAR(1,IPAR)
138 IF(KHEP.GT.NMXHEP) CALL HWWARN('HWBFIN',102,*999)
142 IF (TMPAR(IPAR)) THEN
148 ELSEIF (ID.EQ.59) THEN
152 ELSEIF (ID.LT.109) THEN
156 ELSEIF (ID.LT.120) THEN
160 ELSEIF (ABS(IDPDG(ID)).LT.1000000) THEN
164 ELSEIF (ID.LT.425) THEN
168 ELSEIF (ID.EQ.449) THEN
180 ISTHEP(KHEP)=ISTHEP(IHEP)+24
186 IDHEP(KHEP)=IDPDG(ID)
188 CALL HWVEQU(5,PPAR(1,IPAR),PHEP(1,KHEP))
190 CALL HWVEQU(4,VPAR(1,IPAR),VHEP(1,KHEP))
194 JMOHEP(2,KHEP)=KHEP+1
198 JDAHEP(2,KHEP)=KHEP-1
206 JDAHEP(1,IJET)=NHEP+1
216 *CMZ :- -14/10/99 18.04.56 by Mike Seymour
218 *-- Author : Bryan Webber
220 C-----------------------------------------------------------------------
224 C-----------------------------------------------------------------------
226 C BRANCHING GENERATOR WITH INTERFERING GLUONS
228 C HWBGEN EVOLVES QCD JETS ACCORDING TO THE METHOD OF
230 C G.MARCHESINI & B.R.WEBBER, NUCL. PHYS. B238(1984)1
232 C-----------------------------------------------------------------------
234 INCLUDE 'HERWIG61.INC'
236 DOUBLE PRECISION HWULDO,HWRGAU,EINHEP,ERTXI,RTXI,XF
238 INTEGER NTRY,LASHEP,IHEP,NRHEP,ID,IST,JHEP,KPAR,I,J,IRHEP(NMXJET),
244 EXTERNAL HWULDO,HWRGAU
246 IF (IERROR.NE.0) RETURN
248 IF (IPRO.EQ.80) RETURN
250 C---CHECK THAT EMSCA IS SET
252 IF (EMSCA.LE.ZERO) CALL HWWARN('HWBGEN',200,*999)
256 C---FORCE A BRANCH INTO THE `DEAD ZONE' IN E+E-
258 IF (IPROC/10.EQ.10) CALL HWBDED(1)
260 C---FORCE A BRANCH INTO THE `DEAD ZONE' IN DIS
262 IF (IPRO.EQ.90) CALL HWBDIS(1)
264 C---FORCE A BRANCH INTO THE `DEAD ZONE' IN DRELL-YAN PROCESSES
266 IF (IPRO.EQ.13.OR.IPRO.EQ.14) CALL HWBDYP(1)
268 C---FORCE A BRANCH INTO THE `DEAD ZONE' IN TOP DECAYS
274 C---GENERATE INTRINSIC PT ONCE AND FOR ALL
278 IF (PTRMS.NE.0.) THEN
280 PTINT(1,JNHAD)=HWRGAU(1,ZERO,PXRMS)
282 PTINT(2,JNHAD)=HWRGAU(2,ZERO,PXRMS)
284 PTINT(3,JNHAD)=PTINT(1,JNHAD)**2+PTINT(2,JNHAD)**2
288 CALL HWVZRO(3,PTINT(1,JNHAD))
300 IF (NTRY.GT.NETRY) CALL HWWARN('HWBGEN',ISLENT*100,*999)
312 IF (IST.GE.111.AND.IST.LE.115) THEN
324 C---FOUND A PARTON TO EVOLVE
348 C---SET UP EVOLUTION SCALE AND FRAME
354 IF (HWRLOG(HALF)) JHEP=JDAHEP(2,IHEP)
356 ELSEIF (IST.GT.112) THEN
358 IF ((ID.GT.6.AND.ID.LT.13).OR.
360 & (ID.GT.214.AND.ID.LT.221)) JHEP=JDAHEP(2,IHEP)
364 IF (ID.LT.7.OR.(ID.GT.208.AND.ID.LT.215)) JHEP=JDAHEP(2,IHEP)
368 IF (JHEP.LE.0.OR.JHEP.GT.NHEP) THEN
370 CALL HWWARN('HWBGEN',1,*999)
380 ERTXI=HWULDO(PHEP(1,IHEP),PHEP(1,JHEP))
382 IF (ERTXI.LT.ZERO) ERTXI=0.
384 IF (IST.LE.112.AND.IHEP.EQ.JHEP) ERTXI=0.
386 IF (ISTHEP(JHEP).EQ.155) THEN
388 ERTXI=ERTXI/PHEP(5,JHEP)
400 IF (RTXI.EQ.ZERO) THEN
430 IF (PPAR(4,2).LT.PHEP(5,IHEP)) PPAR(4,2)=PHEP(5,IHEP)
434 PPAR(5,2)=PHEP(5,IHEP)
436 CALL HWVZRO(4,VPAR(1,1))
438 CALL HWVZRO(4,VPAR(1,2))
458 IF (JDAHEP(1,JNHAD).NE.0) INHAD=JDAHEP(1,JNHAD)
460 XFACT=XF/PHEP(4,INHAD)
468 C---FOR QUARKS IN A COLOUR SINGLET, ALLOW SOFT MATRIX-ELEMENT CORRECTION
472 IF (SOFTME.AND.IDHW(IHEP).LT.13.AND.
474 $ ((JMOHEP(2,JHEP).EQ.IHEP.AND.JDAHEP(2,JHEP).EQ.IHEP).OR.
476 $ ISTHEP(JHEP).EQ.155)) HARDST=0
478 C---CREATE BRANCHES AND COMPUTE ENERGIES
482 IF (TMPAR(KPAR)) THEN
492 IF (IERROR.NE.0) RETURN
496 IF (KPAR.EQ.NPAR) GOTO 30
500 C---COMPUTE MASSES AND 3-MOMENTA
506 IF (AZSPIN) CALL HWBSPN
518 C---ENTER PARTON JET IN /HEPEVT/
528 IF (ID.GT.120.AND.ID.LT.133 .OR. ID.GE.198.AND.ID.LE.201) THEN
540 IDHEP(NHEP)=IDPDG(ID)
550 CALL HWVEQU(5,PHEP(1,IHEP),PHEP(1,NHEP))
554 ISTHEP(IHEP)=ISTHEP(IHEP)+10
572 C---ATTACH SPECTATORS
582 C---BAD JET: RESTORE PARTONS AND RE-EVOLVE
586 120 ISTHEP(IRHEP(I))=IRST(I)
602 C---CLEAN UP IF THERE WAS A BRANCH IN THE `DEAD ZONE' IN E+E-
604 IF (IPROC/10.EQ.10) CALL HWBDED(2)
606 C---CLEAN UP IF THERE WAS A BRANCH IN THE `DEAD ZONE' IN DIS
608 IF (IPRO.EQ.90) CALL HWBDIS(2)
610 C---CLEAN UP IF THERE WAS A BRANCH IN THE `DEAD ZONE' IN DRELL-YAN PROC
612 IF (IPRO.EQ.13.OR.IPRO.EQ.14) CALL HWBDYP(2)
616 C---IF THE CLEAN-UP OPERATION ADDED ANY PARTONS TO THE EVENT RECORD
618 C IT MIGHT NEED RESHOWERING
620 IF (NHEP.GT.LASHEP) THEN
632 *CMZ :- -26/04/91 14.25.31 by Federico Carminati
634 *-- Author : Bryan Webber
636 C-----------------------------------------------------------------------
640 C-----------------------------------------------------------------------
642 C COMBINES JETS WITH REQUIRED KINEMATICS
644 C-----------------------------------------------------------------------
646 INCLUDE 'HERWIG61.INC'
648 DOUBLE PRECISION HWULDO,EPS,PTX,PTY,PF,PTINF,PTCON,CN,CP,SP,PP0,
650 & PM0,ET0,DET,ECM,EMJ,EMP,EMS,DMS,ES,DPF,ALF,AL(2),ET(2),PP(2),
652 & PT(3),PB(5),PC(5),PQ(5),PR(5),PS(5),RR(3,3),RS(3,3),ETC,
654 & PJ(NMXJET),PM(NMXJET),PBR(5),RBR(3,3),DISP(4)
656 INTEGER LJET,IJ1,IST,IP,ICM,IP1,IP2,NP,IHEP,MHEP,JP,KP,LP,KHEP,
658 & JHEP,NE,IJT,IEND(2),IJET(NMXJET),IPAR(NMXJET)
660 LOGICAL AZCOR,JETRAD,DISPRO,DISLOW
664 PARAMETER (EPS=1.D-4)
666 IF (IERROR.NE.0) RETURN
668 AZCOR=AZSOFT.OR.AZSPIN
670 C---FIRST LOOK FOR SPACELIKE JETS
682 IF (IST.EQ.137.OR.IST.EQ.138) IST=133
684 IF (IST.EQ.LJET) THEN
686 C---FOUND AN UNBOOSTED JET - FIND PARTNERS
692 DISPRO=IPRO/10.EQ.9.AND.IDHW(ICM).EQ.15
694 DISLOW=DISPRO.AND.JDAHEP(1,ICM).EQ.JDAHEP(2,ICM)-1
710 IF (IP1.NE.IP) CALL HWWARN('HWBJCO',100,*999)
720 30 IJET(NP)=JDAHEP(1,JHEP)
730 IF (LJET.EQ.131) THEN
740 50 IF (LJET.EQ.131) THEN
742 C---SPACELIKE JETS: FIND SPACELIKE PARTONS
744 IF (NP.NE.2) CALL HWWARN('HWBJCO',103,*999)
746 C---special for DIS: FIND BOOST AND ROTATION FROM LAB TO BREIT FRAME
748 IF (DISPRO.AND.BREIT) THEN
752 IF (JDAHEP(1,IP).NE.0) IP=JDAHEP(1,IP)
754 CALL HWVDIF(4,PHEP(1,JMOHEP(1,ICM)),PHEP(1,JDAHEP(1,ICM)),PB)
758 C---IF Q**2<10**-2, SOMETHING MUST HAVE ALREADY GONE WRONG
760 IF (PB(5)**2.LT.1.D-2) CALL HWWARN('HWBJCO',102,*999)
762 CALL HWVSCA(4,PB(5)**2/HWULDO(PHEP(1,IP),PB),PHEP(1,IP),PBR)
764 CALL HWVSUM(4,PB,PBR,PBR)
768 CALL HWULOF(PBR,PB,PB)
770 CALL HWUROT(PB,ONE,ZERO,RBR)
784 IF (JDAHEP(1,MHEP).EQ.0) THEN
786 C---SPECIAL FOR NON-PARTON JETS
798 60 IF (ISTHEP(IHEP).EQ.IST) GOTO 70
800 C---COULDN'T FIND SPACELIKE PARTON
802 CALL HWWARN('HWBJCO',101,*999)
806 70 CALL HWVSCA(3,PF,PHEP(1,IHEP),PS)
808 IF (PTINT(3,IP).GT.ZERO) THEN
818 CALL HWUROT(PS, ONE,ZERO,RS)
820 CALL HWUROB(RS,PT,PT)
822 CALL HWVSUM(3,PS,PT,PS)
828 IF (AZCOR.AND.JP.LE.NHEP.AND.IDHW(JP).EQ.17) THEN
830 C---ALIGN CONE WITH INTERFERING PARTON
832 CALL HWUROT(PS, ONE,ZERO,RS)
834 CALL HWUROF(RS,PHEP(1,JP),PR)
836 PTCON=PR(1)**2+PR(2)**2
842 CALL HWWARN('HWBJCO',1,*999)
848 CALL HWVEQU(4,PHEP(1,KP),PB)
850 IF (DISPRO.AND.BREIT) THEN
852 CALL HWULOF(PBR,PB,PB)
854 CALL HWUROF(RBR,PB,PB)
858 PTINF=PB(1)**2+PB(2)**2
860 IF (PTINF.LT.EPS) THEN
862 C---COLLINEAR JETS: ALIGN CONES
866 IF (ISTHEP(KP).EQ.100.AND.ISTHEP(KP-1)/10.EQ.14) THEN
868 CALL HWVEQU(4,PHEP(1,KP),PB)
870 IF (DISPRO.AND.BREIT) THEN
872 CALL HWULOF(PBR,PB,PB)
874 CALL HWUROF(RBR,PB,PB)
878 PTINF=PB(1)**2+PB(2)**2
890 IF (PTCON.NE.ZERO.AND.PTINF.NE.ZERO) THEN
892 CN=1./SQRT(PTINF*PTCON)
894 CP=CN*(PR(1)*PB(1)+PR(2)*PB(2))
896 SP=CN*(PR(1)*PB(2)-PR(2)*PB(1))
900 CALL HWRAZM( ONE,CP,SP)
906 CALL HWRAZM( ONE,CP,SP)
910 C---ROTATE SO SPACELIKE IS ALONG AXIS (APART FROM INTRINSIC PT)
912 CALL HWUROT(PS,CP,SP,RS)
918 IF (KHEP.LT.IHEP) KHEP=IHEP
924 CALL HWUROF(RS,PHEP(1,JHEP),PHEP(1,JHEP))
926 80 CALL HWUROF(RS,VHEP(1,JHEP),VHEP(1,JHEP))
928 PP(IP)=PHEP(4,IHEP)+PF*PHEP(3,IHEP)
930 ET(IP)=PHEP(1,IHEP)**2+PHEP(2,IHEP)**2-PHEP(5,IHEP)**2
944 C---special for DIS: keep lepton momenta fixed
954 C---IJT will be used to store lepton momentum transfer
956 CALL HWVDIF(4,PHEP(1,IP1),PHEP(1,IP2),PHEP(1,IJT))
958 CALL HWUMAS(PHEP(1,IJT))
960 IF (IDHEP(IP1).EQ.IDHEP(IP2)) THEN
964 ELSEIF (IDHEP(IP1).LT.IDHEP(IP2)) THEN
974 IDHEP(IJT)=IDPDG(IDHW(IJT))
978 C---calculate boost for struck parton
980 C PC is momentum of outgoing parton(s)
984 IF (.NOT.DISLOW) THEN
986 C---FOR heavy QQbar PQ and PC are old and new QQbar momenta
988 CALL HWVSUM(4,PHEP(1,IP2-1),PHEP(1,IP2),PQ)
996 PC(5)=PHEP(5,JDAHEP(1,IP2))
1000 CALL HWVSUM(2,PHEP(1,IJT),PHEP(1,IJET(2)),PC)
1004 C---USE BREIT FRAME BOSON MOMENTUM IF NECESSARY
1008 ET(2)=ET(1)+PC(5)**2+PHEP(5,IJET(2))**2
1016 ET(2)=PC(1)**2+PC(2)**2+PC(5)**2
1018 PP0=PHEP(4,IJT)+PHEP(3,IJT)
1020 PM0=PHEP(4,IJT)-PHEP(3,IJT)
1024 ET0=(PP0*PM0)+ET(1)-ET(2)
1026 DET=ET0**2-4.*(PP0*PM0)*ET(1)
1028 IF (DET.LT.ZERO) THEN
1036 ALF=(SQRT(DET)-ET0)/(2.*PP0*PP(2))
1048 DO 100 IHEP=IJET(2),IEND(2)
1050 CALL HWULOF(PB,PHEP(1,IHEP),PHEP(1,IHEP))
1052 CALL HWULF4(PB,VHEP(1,IHEP),VHEP(1,IHEP))
1054 C---BOOST FROM BREIT FRAME IF NECESSARY
1058 CALL HWUROB(RBR,PHEP(1,IHEP),PHEP(1,IHEP))
1060 CALL HWULOB(PBR,PHEP(1,IHEP),PHEP(1,IHEP))
1062 CALL HWUROB(RBR,VHEP(1,IHEP),VHEP(1,IHEP))
1064 CALL HWULB4(PBR,VHEP(1,IHEP),VHEP(1,IHEP))
1068 100 ISTHEP(IHEP)=ISTHEP(IHEP)+10
1070 CALL HWVDIF(4,VHEP(1,IPAR(2)),VHEP(1,IJET(2)),DISP)
1072 DO 110 IHEP=IJET(2),IEND(2)
1074 110 CALL HWVSUM(4,DISP,VHEP(1,IHEP),VHEP(1,IHEP))
1076 IF (IEND(2).GT.IJET(2)+1) ISTHEP(IJET(2)+1)=100
1078 CALL HWVSUM(4,PHEP(1,IJT),PHEP(1,IJET(2)),PC)
1080 CALL HWVSUM(4,PHEP(1,IP1),PHEP(1,IJET(2)),PHEP(1,ICM))
1082 CALL HWUMAS(PHEP(1,ICM))
1084 ELSEIF (IPRO/10.EQ.5) THEN
1086 C Special to preserve photon momentum
1088 ETC=PTX**2+PTY**2+PHEP(5,ICM)**2
1092 DET=ET0**2-4.*ETC*ET(1)
1094 IF (DET.LT.ZERO) THEN
1102 ALF=(SQRT(DET)+ET0-2.*ET(1))/(2.*PP(1)*PP(2))
1116 DO 120 IHEP=IJT,IEND(2)
1118 CALL HWULOF(PB,PHEP(1,IHEP),PHEP(1,IHEP))
1120 CALL HWULF4(PB,VHEP(1,IHEP),VHEP(1,IHEP))
1122 120 ISTHEP(IHEP)=ISTHEP(IHEP)+10
1124 CALL HWVDIF(4,VHEP(1,IPAR(2)),VHEP(1,IJT),DISP)
1126 DO 130 IHEP=IJT,IEND(2)
1128 130 CALL HWVSUM(4,DISP,VHEP(1,IHEP),VHEP(1,IHEP))
1130 IF (IEND(2).GT.IJT+1) ISTHEP(IJT+1)=100
1132 ISTHEP(IJET(1))=ISTHEP(IJET(1))+10
1134 CALL HWVSUM(2,PHEP(3,IPAR(1)),PHEP(3,IJT),PHEP(3,ICM))
1138 PHEP(4,ICM)=SQRT(PTX**2+PTY**2+PHEP(3,ICM)**2+PHEP(5,ICM)**2)
1140 C---NOW BOOST TO REQUIRED Q**2 AND X-F
1142 PP0=PHEP(4,ICM)+PHEP(3,ICM)
1144 PM0=PHEP(4,ICM)-PHEP(3,ICM)
1146 ET0=(PP0*PM0)+ET(1)-ET(2)
1148 DET=ET0**2-4.*(PP0*PM0)*ET(1)
1150 IF (DET.LT.ZERO) THEN
1160 AL(1)= 2.*PM0*PP(1)/DET
1162 AL(2)=(PM0/PP(2))*(1.-2.*ET(1)/DET)
1172 PB(3)=AL(IP)-(1./AL(IP))
1174 PB(4)=AL(IP)+(1./AL(IP))
1178 DO 140 IHEP=IJT,IEND(IP)
1180 CALL HWULOF(PB,PHEP(1,IHEP),PHEP(1,IHEP))
1182 CALL HWULF4(PB,VHEP(1,IHEP),VHEP(1,IHEP))
1184 140 ISTHEP(IHEP)=ISTHEP(IHEP)+10
1186 CALL HWVDIF(4,VHEP(1,IPAR(IP)),VHEP(1,IJT),DISP)
1188 DO 150 IHEP=IJT,IEND(IP)
1190 150 CALL HWVSUM(4,DISP,VHEP(1,IHEP),VHEP(1,IHEP))
1192 IF (IEND(IP).GT.IJT+1) THEN
1196 ELSEIF (IEND(IP).EQ.IJT) THEN
1214 C special for DIS: preserve outgoing lepton momentum
1218 CALL HWVEQU(5,PHEP(1,IPAR(1)),PHEP(1,IJET(1)))
1226 CALL HWVEQU(5,PHEP(1,ICM),PC)
1228 C--- PQ AND PC ARE OLD AND NEW PARTON CM
1230 CALL HWVSUM(4,PHEP(1,IPAR(1)),PHEP(1,IPAR(2)),PQ)
1238 170 CALL HWVSUM(4,PHEP(1,IPAR(KP)),PQ,PQ)
1246 IF (.NOT.DISLOW) THEN
1248 C---FIND JET CM MOMENTA
1258 EMJ=PHEP(5,IJET(KP))
1260 EMP=PHEP(5,IPAR(KP))
1262 JETRAD=JETRAD.OR.EMJ.NE.EMP
1268 C---N.B. ROUNDING ERRORS HERE AT HIGH ENERGIES
1270 PJ(KP)=(HWULDO(PHEP(1,IPAR(KP)),PQ)/ECM)**2-EMP**2
1272 IF (PJ(KP).LE.ZERO) CALL HWWARN('HWBJCO',104,*999)
1280 C---JETS DID RADIATE
1282 IF (EMS.GE.ECM) THEN
1298 ES=SQRT(PF*PJ(KP)+PM(KP))
1302 190 DMS=DMS+PJ(KP)/ES
1306 IF (DPF.GT.PF) DPF=0.9*PF
1310 200 IF (ABS(DPF).LT.EPS) GOTO 210
1312 CALL HWWARN('HWBJCO',105,*999)
1320 C---BOOST PC AND PQ TO BREIT FRAME IF NECESSARY
1322 IF (DISPRO.AND.BREIT) THEN
1324 CALL HWULOF(PBR,PC,PC)
1326 CALL HWUROF(RBR,PC,PC)
1328 IF (.NOT.DISLOW) THEN
1330 CALL HWULOF(PBR,PQ,PQ)
1332 CALL HWUROF(RBR,PQ,PQ)
1340 C---FIND CM ROTATION FOR JET IP
1342 IF (.NOT.DISLOW) THEN
1344 CALL HWVEQU(4,PHEP(1,IPAR(IP)),PR)
1346 IF (DISPRO.AND.BREIT) THEN
1348 CALL HWULOF(PBR,PR,PR)
1350 CALL HWUROF(RBR,PR,PR)
1354 CALL HWULOF(PQ,PR,PR)
1356 CALL HWUROT(PR, ONE,ZERO,RR)
1362 PR(3)=SQRT(PF*PJ(IP))
1364 PR(4)=SQRT(PF*PJ(IP)+PM(IP))
1366 PR(5)=PHEP(5,IJET(IP))
1368 CALL HWUROB(RR,PR,PR)
1370 CALL HWULOB(PC,PR,PR)
1374 CALL HWVEQU(5,PC,PR)
1378 C---NOW PR IS LAB/BREIT MOMENTUM OF JET IP
1382 IF (AZCOR.AND.KP.LE.NHEP.AND.IDHW(KP).EQ.17) THEN
1384 C---ALIGN CONE WITH INTERFERING PARTON
1386 CALL HWUROT(PR, ONE,ZERO,RS)
1392 CALL HWWARN('HWBJCO',2,*999)
1398 CALL HWVEQU(4,PHEP(1,JP),PS)
1400 IF (DISPRO.AND.BREIT) THEN
1402 CALL HWULOF(PBR,PS,PS)
1404 CALL HWUROF(RBR,PS,PS)
1408 CALL HWUROF(RS,PS,PS)
1410 PTINF=PS(1)**2+PS(2)**2
1412 IF (PTINF.LT.EPS) THEN
1414 C---COLLINEAR JETS: ALIGN CONES
1418 IF (ISTHEP(JP).EQ.100.AND.ISTHEP(JP-1)/10.EQ.14) THEN
1420 CALL HWVEQU(4,PHEP(1,JP),PS)
1422 IF (DISPRO.AND.BREIT) THEN
1424 CALL HWULOF(PBR,PS,PS)
1426 CALL HWUROF(RBR,PS,PS)
1430 CALL HWUROF(RS,PS,PS)
1432 PTINF=PS(1)**2+PS(2)**2
1444 CALL HWVEQU(4,PHEP(1,KP),PB)
1446 IF (DISPRO.AND.BREIT) THEN
1448 CALL HWULOF(PBR,PB,PB)
1450 CALL HWUROF(RBR,PB,PB)
1454 PTCON=PB(1)**2+PB(2)**2
1456 IF (PTCON.NE.ZERO.AND.PTINF.NE.ZERO) THEN
1458 CN=1./SQRT(PTINF*PTCON)
1460 CP=CN*(PS(1)*PB(1)+PS(2)*PB(2))
1462 SP=CN*(PS(1)*PB(2)-PS(2)*PB(1))
1466 CALL HWRAZM( ONE,CP,SP)
1472 CALL HWRAZM( ONE,CP,SP)
1476 CALL HWUROT(PR,CP,SP,RS)
1478 C---FIND BOOST FOR JET IP
1480 ALF=(PHEP(3,IJET(IP))+PHEP(4,IJET(IP)))/
1482 & (PR(4)+SQRT((PR(4)+PR(5))*(PR(4)-PR(5))))
1498 IF (KHEP.LT.IHEP) KHEP=IHEP
1500 DO 220 JHEP=IHEP,KHEP
1502 CALL HWULOF(PB,PHEP(1,JHEP),PHEP(1,JHEP))
1504 CALL HWUROB(RS,PHEP(1,JHEP),PHEP(1,JHEP))
1506 CALL HWULF4(PB,VHEP(1,JHEP),VHEP(1,JHEP))
1508 CALL HWUROB(RS,VHEP(1,JHEP),VHEP(1,JHEP))
1510 C---BOOST FROM BREIT FRAME IF NECESSARY
1512 IF (DISPRO.AND.BREIT) THEN
1514 CALL HWUROB(RBR,PHEP(1,JHEP),PHEP(1,JHEP))
1516 CALL HWULOB(PBR,PHEP(1,JHEP),PHEP(1,JHEP))
1518 CALL HWUROB(RBR,VHEP(1,JHEP),VHEP(1,JHEP))
1520 CALL HWULB4(PBR,VHEP(1,JHEP),VHEP(1,JHEP))
1524 CALL HWVSUM(4,VHEP(1,JHEP),VHEP(1,IPAR(IP)),VHEP(1,JHEP))
1526 220 ISTHEP(JHEP)=ISTHEP(JHEP)+10
1528 IF (KHEP.GT.IHEP+1) THEN
1532 ELSEIF (KHEP.EQ.IHEP) THEN
1542 IF (ISTHEP(ICM).EQ.110) ISTHEP(ICM)=120
1552 *CMZ :- -26/04/91 11.11.54 by Bryan Webber
1554 *-- Author : Bryan Webber
1556 C-----------------------------------------------------------------------
1560 C-----------------------------------------------------------------------
1562 C Passes backwards through a jet cascade calculating the masses
1564 C and magnitudes of the longitudinal and transverse three momenta.
1566 C Components given relative to direction of parent for a time-like
1568 C vertex and with respect to z-axis for space-like vertices.
1572 C On input PPAR(1-5,*) contains:
1574 C (E*sqrt(Xi),Xi,3-mom (if external),E,M-sq (if external))
1578 C On output PPAR(1-5,*) (if TMPAR(*)), containts:
1580 C (P-trans,Xi or Xilast,P-long,E,M)
1582 C-----------------------------------------------------------------------
1584 INCLUDE 'HERWIG61.INC'
1586 DOUBLE PRECISION HWUSQR,EXI,PISQ,PJPK,EJEK,PTSQ,Z,ZMIN,ZMAX,
1588 $ EMI,EMJ,EMK,C,NQ,HWBVMC,RHO,POLD,PNEW,EOLD,ENEW,A,B
1590 INTEGER IPAR,JPAR,KPAR,MPAR,I,J,K
1594 IF (IERROR.NE.0) RETURN
1598 DO 30 MPAR=NPAR-1,3,-2
1602 C Find parent and partner of this branch
1608 C Determine type of branching
1610 IF (TMPAR(IPAR)) THEN
1612 C Time-like branching
1614 C Compute mass of parent
1616 EXI=PPAR(1,JPAR)*PPAR(1,KPAR)
1618 PPAR(5,IPAR)=PPAR(5,JPAR)+PPAR(5,KPAR)+2.*EXI
1620 C Compute three momentum of parent
1622 PISQ=PPAR(4,IPAR)*PPAR(4,IPAR)-PPAR(5,IPAR)
1624 PPAR(3,IPAR)=HWUSQR(PISQ)
1626 C---SPECIAL FOR G-->QQBAR: READJUST ANGULAR DISTRIBUTION
1628 IF (IDPAR(IPAR).EQ.13 .AND. IDPAR(JPAR).LT.13) THEN
1630 Z=PPAR(4,JPAR)/PPAR(4,IPAR)
1632 ZMIN=HWBVMC(IDPAR(JPAR))/PPAR(1,JPAR)*Z
1634 RHO=(Z*(3-Z*(3-2*Z))-ZMIN*(3-ZMIN*(3-2*ZMIN)))
1636 $ /(2*(1-2*ZMIN)*(1-ZMIN*(1-ZMIN)))
1638 NQ=PPAR(3,IPAR)*(PPAR(3,IPAR)+PPAR(4,IPAR))
1646 ZMIN=MAX((EMI+EMJ-EMK)/(2*(EMI+NQ)),
1648 $ (EMI+EMJ-EMK-SQRT((EMI-EMJ-EMK)**2-4*EMJ*EMK))/(2*EMI))
1650 ZMAX=1-MAX((EMI-EMJ+EMK)/(2*(EMI+NQ)),
1652 $ (EMI-EMJ+EMK-SQRT((EMI-EMJ-EMK)**2-4*EMJ*EMK))/(2*EMI))
1654 C=2*RMASS(IDPAR(JPAR))**2/EMI
1656 Z=(4*ZMIN*(1.5*(1+C-ZMIN)+ZMIN**2)*(1-RHO)
1658 $ +4*ZMAX*(1.5*(1+C-ZMAX)+ZMAX**2)*RHO-2-3*C)/(1+2*C)**1.5
1660 Z=SQRT(1+2*C)*SINH(LOG(Z+SQRT(Z**2+1))/3)+0.5
1662 Z=(Z*NQ+(EMI+EMJ-EMK)/2)/(NQ+EMI)
1664 PPAR(4,JPAR)=Z*PPAR(4,IPAR)
1666 PPAR(4,KPAR)=PPAR(4,IPAR)-PPAR(4,JPAR)
1668 PPAR(3,JPAR)=HWUSQR(PPAR(4,JPAR)**2-EMJ)
1670 PPAR(3,KPAR)=HWUSQR(PPAR(4,KPAR)**2-EMK)
1672 PPAR(2,JPAR)=EXI/(PPAR(4,JPAR)*PPAR(4,KPAR))
1674 IF(JDAPAR(2,JPAR).NE.0)PPAR(2,JDAPAR(2,JPAR))=PPAR(2,JPAR)
1676 IF(JDAPAR(2,KPAR).NE.0)PPAR(2,JDAPAR(2,KPAR))=PPAR(2,JPAR)
1678 C---FIND DESCENDENTS OF THIS SPLITTING AND READJUST THEIR MOMENTA TOO
1680 DO 20 J=JPAR+2,NPAR-1,2
1686 IF (I.GT.IPAR) GOTO 10
1694 POLD=PPAR(3,J)+PPAR(3,K)
1696 EOLD=PPAR(4,J)+PPAR(4,K)
1698 PNEW=HWUSQR(PPAR(4,I)**2-PPAR(5,I))
1702 A=(ENEW*EOLD-PNEW*POLD)/PPAR(5,I)
1704 B=(PNEW*EOLD-ENEW*POLD)/PPAR(5,I)
1706 PPAR(3,J)=A*PPAR(3,J)+B*PPAR(4,J)
1708 PPAR(4,J)=(PPAR(4,J)+B*PPAR(3,J))/A
1710 PPAR(3,K)=PNEW-PPAR(3,J)
1712 PPAR(4,K)=ENEW-PPAR(4,J)
1714 PPAR(2,J)=1-(PPAR(3,J)*PPAR(3,K)+PPAR(1,J)*PPAR(1,K))
1716 $ /(PPAR(4,J)*PPAR(4,K))
1718 IF (JDAPAR(2,J).NE.0) PPAR(2,JDAPAR(2,J))=PPAR(2,J)
1720 IF (JDAPAR(2,K).NE.0) PPAR(2,JDAPAR(2,K))=PPAR(2,J)
1728 C Compute daughter' transverse and longitudinal momenta
1730 PJPK=PPAR(3,JPAR)*PPAR(3,KPAR)
1732 EJEK=PPAR(4,JPAR)*PPAR(4,KPAR)-EXI
1734 PTSQ=(PJPK+EJEK)*(PJPK-EJEK)/PISQ
1736 PPAR(1,JPAR)=HWUSQR(PTSQ)
1738 PPAR(3,JPAR)=HWUSQR(PPAR(3,JPAR)*PPAR(3,JPAR)-PTSQ)
1740 PPAR(1,KPAR)=-PPAR(1,JPAR)
1742 PPAR(3,KPAR)= PPAR(3,IPAR)-PPAR(3,JPAR)
1746 C Space-like branching
1748 C Re-arrange such that JPAR is time-like
1750 IF (TMPAR(KPAR)) THEN
1758 C Compute time-like branch
1760 PTSQ=(2.-PPAR(2,JPAR))*PPAR(1,JPAR)*PPAR(1,JPAR)
1764 PPAR(1,JPAR)=HWUSQR(PTSQ)
1766 PPAR(3,JPAR)=(1.-PPAR(2,JPAR))*PPAR(4,JPAR)
1768 PPAR(3,IPAR)=PPAR(3,KPAR)-PPAR(3,JPAR)
1776 C Reset Xi to Xilast
1778 PPAR(2,KPAR)=PPAR(2,IPAR)
1786 40 PPAR(5,IPAR)=HWUSQR(PPAR(5,IPAR))