Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:21:09

0001  
0002 C*********************************************************************
0003  
0004 C...PYBESQ
0005 C...Calculates the momentum shift in a system of two particles assuming
0006 C...the relative momentum squared should be shifted to Q2NEW. NI is the
0007 C...last position occupied in /PYJETS/.
0008  
0009       SUBROUTINE PYBESQ(I1,I2,NI,Q2OLD,Q2NEW)
0010  
0011 C...Double precision and integer declarations.
0012       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0013       IMPLICIT INTEGER(I-N)
0014       INTEGER PYK,PYCHGE,PYCOMP
0015 C...Parameter statement to help give large particle numbers.
0016       PARAMETER (KSUSY1=1000000,KSUSY2=2000000,KTECHN=3000000,
0017      &KEXCIT=4000000,KDIMEN=5000000)
0018 C...Commonblocks.
0019       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
0020       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0021       SAVE /PYJETS/,/PYDAT1/
0022 C...Local arrays and data.
0023       DIMENSION DP(5)
0024       SAVE HC1
0025  
0026       IF(MSTJ(55).EQ.0) THEN
0027         DQ2=Q2NEW-Q2OLD
0028         DP2=(P(I1,1)-P(I2,1))**2+(P(I1,2)-P(I2,2))**2+
0029      &  (P(I1,3)-P(I2,3))**2
0030         DP12=P(I1,1)**2+P(I1,2)**2+P(I1,3)**2
0031      &  -P(I2,1)**2-P(I2,2)**2-P(I2,3)**2
0032         SE=P(I1,4)+P(I2,4)
0033         DE=P(I1,4)-P(I2,4)
0034         DQ2SE=DQ2+SE**2
0035         DA=SE*DE*DP12-DP2*DQ2SE
0036         DB=DP2*DQ2SE-DP12**2
0037         HA=(DA+SQRT(MAX(DA**2+DQ2*(DQ2+SE**2-DE**2)*DB,0D0)))/(2D0*DB)
0038         DO 100 J=1,3
0039           PD=HA*(P(I1,J)-P(I2,J))
0040           P(NI+1,J)=PD
0041           P(NI+2,J)=-PD
0042   100   CONTINUE
0043         RETURN
0044       ENDIF
0045  
0046       K(NI+1,1)=1
0047       K(NI+2,1)=1
0048       DO 110 J=1,5
0049         P(NI+1,J)=P(I1,J)
0050         P(NI+2,J)=P(I2,J)
0051         DP(J)=P(I1,J)+P(I2,J)
0052   110 CONTINUE
0053  
0054 C...Boost to cms and rotate first particle to z-axis
0055       CALL PYROBO(NI+1,NI+2,0.0D0,0.0D0,
0056      &-DP(1)/DP(4),-DP(2)/DP(4),-DP(3)/DP(4))
0057       PHI=PYANGL(P(NI+1,1),P(NI+1,2))
0058       THE=PYANGL(P(NI+1,3),SQRT(P(NI+1,1)**2+P(NI+1,2)**2))
0059       S=Q2NEW+(P(I1,5)+P(I2,5))**2
0060       PZ=0.5D0*SQRT(Q2NEW*(S-(P(I1,5)-P(I2,5))**2)/S)
0061       P(NI+1,1)=0.0D0
0062       P(NI+1,2)=0.0D0
0063       P(NI+1,3)=PZ
0064       P(NI+1,4)=SQRT(PZ**2+P(I1,5)**2)
0065       P(NI+2,1)=0.0D0
0066       P(NI+2,2)=0.0D0
0067       P(NI+2,3)=-PZ
0068       P(NI+2,4)=SQRT(PZ**2+P(I2,5)**2)
0069       DP(4)=SQRT(DP(1)**2+DP(2)**2+DP(3)**2+S)
0070       CALL PYROBO(NI+1,NI+2,THE,PHI,
0071      &DP(1)/DP(4),DP(2)/DP(4),DP(3)/DP(4))
0072  
0073       DO 120 J=1,3
0074         P(NI+1,J)=P(NI+1,J)-P(I1,J)
0075         P(NI+2,J)=P(NI+2,J)-P(I2,J)
0076   120 CONTINUE
0077  
0078       RETURN
0079       END