Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001  
0002 C*********************************************************************
0003  
0004 C...PYINKI
0005 C...Sets up kinematics, including rotations and boosts to/from CM frame.
0006  
0007       SUBROUTINE PYINKI(MODKI)
0008  
0009 C...Double precision and integer declarations.
0010       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0011       IMPLICIT INTEGER(I-N)
0012       INTEGER PYK,PYCHGE,PYCOMP
0013  
0014 C...User process initialization commonblock.
0015       INTEGER MAXPUP
0016       PARAMETER (MAXPUP=100)
0017       INTEGER IDBMUP,PDFGUP,PDFSUP,IDWTUP,NPRUP,LPRUP
0018       DOUBLE PRECISION EBMUP,XSECUP,XERRUP,XMAXUP
0019       COMMON/HEPRUP/IDBMUP(2),EBMUP(2),PDFGUP(2),PDFSUP(2),
0020      &IDWTUP,NPRUP,XSECUP(MAXPUP),XERRUP(MAXPUP),XMAXUP(MAXPUP),
0021      &LPRUP(MAXPUP)
0022       SAVE /HEPRUP/
0023  
0024 C...Commonblocks.
0025       COMMON/PYJETS/N,NPAD,K(4000,5),P(4000,5),V(4000,5)
0026       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0027       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
0028       COMMON/PYSUBS/MSEL,MSELPD,MSUB(500),KFIN(2,-40:40),CKIN(200)
0029       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0030       COMMON/PYINT1/MINT(400),VINT(400)
0031       SAVE /PYJETS/,/PYDAT1/,/PYDAT2/,/PYSUBS/,/PYPARS/,/PYINT1/
0032  
0033 C...Set initial flavour state.
0034       N=2
0035       DO 100 I=1,2
0036         K(I,1)=1
0037         K(I,2)=MINT(10+I)
0038         IF(MINT(140+I).NE.0) K(I,2)=MINT(140+I)
0039   100 CONTINUE
0040  
0041 C...Reset boost. Do kinematics for various cases.
0042       DO 110 J=6,10
0043         VINT(J)=0D0
0044   110 CONTINUE
0045  
0046 C...Set up kinematics for events defined in CM frame.
0047       IF(MINT(111).EQ.1) THEN
0048         WIN=VINT(290)
0049         IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
0050         S=WIN**2
0051         P(1,5)=VINT(3)
0052         P(2,5)=VINT(4)
0053         IF(MINT(141).NE.0) P(1,5)=VINT(303)
0054         IF(MINT(142).NE.0) P(2,5)=VINT(304)
0055         P(1,1)=0D0
0056         P(1,2)=0D0
0057         P(2,1)=0D0
0058         P(2,2)=0D0
0059         P(1,3)=SQRT(((S-P(1,5)**2-P(2,5)**2)**2-(2D0*P(1,5)*P(2,5))**2)/
0060      &  (4D0*S))
0061         P(2,3)=-P(1,3)
0062         P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
0063         P(2,4)=SQRT(P(2,3)**2+P(2,5)**2)
0064  
0065 C...Set up kinematics for fixed target events.
0066       ELSEIF(MINT(111).EQ.2) THEN
0067         WIN=VINT(290)
0068         IF(MODKI.EQ.1) WIN=PARP(171)*VINT(290)
0069         P(1,5)=VINT(3)
0070         P(2,5)=VINT(4)
0071         IF(MINT(141).NE.0) P(1,5)=VINT(303)
0072         IF(MINT(142).NE.0) P(2,5)=VINT(304)
0073         P(1,1)=0D0
0074         P(1,2)=0D0
0075         P(2,1)=0D0
0076         P(2,2)=0D0
0077         P(1,3)=WIN
0078         P(1,4)=SQRT(P(1,3)**2+P(1,5)**2)
0079         P(2,3)=0D0
0080         P(2,4)=P(2,5)
0081         S=P(1,5)**2+P(2,5)**2+2D0*P(2,4)*P(1,4)
0082         VINT(10)=P(1,3)/(P(1,4)+P(2,4))
0083         CALL PYROBO(0,0,0D0,0D0,0D0,0D0,-VINT(10))
0084  
0085 C...Set up kinematics for events in user-defined frame.
0086       ELSEIF(MINT(111).EQ.3) THEN
0087         P(1,5)=VINT(3)
0088         P(2,5)=VINT(4)
0089         IF(MINT(141).NE.0) P(1,5)=VINT(303)
0090         IF(MINT(142).NE.0) P(2,5)=VINT(304)
0091         P(1,4)=SQRT(P(1,1)**2+P(1,2)**2+P(1,3)**2+P(1,5)**2)
0092         P(2,4)=SQRT(P(2,1)**2+P(2,2)**2+P(2,3)**2+P(2,5)**2)
0093         DO 120 J=1,3
0094           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
0095   120   CONTINUE
0096         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
0097         VINT(7)=PYANGL(P(1,1),P(1,2))
0098         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
0099         VINT(6)=PYANGL(P(1,3),P(1,1))
0100         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
0101         S=P(1,5)**2+P(2,5)**2+2D0*(P(1,4)*P(2,4)-P(1,3)*P(2,3))
0102  
0103 C...Set up kinematics for events with user-defined four-vectors.
0104       ELSEIF(MINT(111).EQ.4) THEN
0105         PMS1=P(1,4)**2-P(1,1)**2-P(1,2)**2-P(1,3)**2
0106         P(1,5)=SIGN(SQRT(ABS(PMS1)),PMS1)
0107         PMS2=P(2,4)**2-P(2,1)**2-P(2,2)**2-P(2,3)**2
0108         P(2,5)=SIGN(SQRT(ABS(PMS2)),PMS2)
0109         DO 130 J=1,3
0110           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
0111   130   CONTINUE
0112         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
0113         VINT(7)=PYANGL(P(1,1),P(1,2))
0114         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
0115         VINT(6)=PYANGL(P(1,3),P(1,1))
0116         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
0117         S=(P(1,4)+P(2,4))**2
0118  
0119 C...Set up kinematics for events with user-defined five-vectors.
0120       ELSEIF(MINT(111).EQ.5) THEN
0121         DO 140 J=1,3
0122           VINT(7+J)=(P(1,J)+P(2,J))/(P(1,4)+P(2,4))
0123   140   CONTINUE
0124         CALL PYROBO(0,0,0D0,0D0,-VINT(8),-VINT(9),-VINT(10))
0125         VINT(7)=PYANGL(P(1,1),P(1,2))
0126         CALL PYROBO(0,0,0D0,-VINT(7),0D0,0D0,0D0)
0127         VINT(6)=PYANGL(P(1,3),P(1,1))
0128         CALL PYROBO(0,0,-VINT(6),0D0,0D0,0D0,0D0)
0129         S=(P(1,4)+P(2,4))**2
0130  
0131 C...Set up kinematics for events with external user processes.
0132       ELSEIF(MINT(111).GE.11) THEN
0133         P(1,5)=VINT(3)
0134         P(2,5)=VINT(4)
0135         IF(MINT(141).NE.0) P(1,5)=VINT(303)
0136         IF(MINT(142).NE.0) P(2,5)=VINT(304)
0137         P(1,1)=0D0
0138         P(1,2)=0D0
0139         P(2,1)=0D0
0140         P(2,2)=0D0
0141         P(1,3)=SQRT(MAX(0D0,EBMUP(1)**2-P(1,5)**2))
0142         P(2,3)=-SQRT(MAX(0D0,EBMUP(2)**2-P(2,5)**2))
0143         P(1,4)=EBMUP(1)
0144         P(2,4)=EBMUP(2)
0145         VINT(10)=(P(1,3)+P(2,3))/(P(1,4)+P(2,4))
0146         CALL PYROBO(0,0,0D0,0D0,0D0,0D0,-VINT(10))
0147         S=(P(1,4)+P(2,4))**2
0148       ENDIF
0149  
0150 C...Return or error for too low CM energy.
0151       IF(MODKI.EQ.1.AND.S.LT.PARP(2)**2) THEN
0152         IF(MSTP(172).LE.1) THEN
0153           CALL PYERRM(23,
0154      &    '(PYINKI:) too low invariant mass in this event')
0155         ELSE
0156           MSTI(61)=1
0157           RETURN
0158         ENDIF
0159       ENDIF
0160  
0161 C...Save information on incoming particles.
0162       VINT(1)=SQRT(S)
0163       VINT(2)=S
0164       IF(MINT(111).GE.4) THEN
0165         IF(MINT(141).EQ.0) THEN
0166           VINT(3)=P(1,5)
0167           IF(MINT(11).EQ.22.AND.P(1,5).LT.0) VINT(307)=P(1,5)**2
0168         ELSE
0169           VINT(303)=P(1,5)
0170         ENDIF
0171         IF(MINT(142).EQ.0) THEN
0172           VINT(4)=P(2,5)
0173           IF(MINT(12).EQ.22.AND.P(2,5).LT.0) VINT(308)=P(2,5)**2
0174         ELSE
0175           VINT(304)=P(2,5)
0176         ENDIF
0177       ENDIF
0178       VINT(5)=P(1,3)
0179       IF(MODKI.EQ.0) VINT(289)=S
0180       DO 150 J=1,5
0181         V(1,J)=0D0
0182         V(2,J)=0D0
0183         VINT(290+J)=P(1,J)
0184         VINT(295+J)=P(2,J)
0185   150 CONTINUE
0186  
0187 C...Store pT cut-off and related constants to be used in generation.
0188       IF(MODKI.EQ.0) VINT(285)=CKIN(3)
0189       IF(MSTP(82).LE.1) THEN
0190         PTMN=PARP(81)*(VINT(1)/PARP(89))**PARP(90)
0191       ELSE
0192         PTMN=PARP(82)*(VINT(1)/PARP(89))**PARP(90)
0193       ENDIF
0194       VINT(149)=4D0*PTMN**2/S
0195       VINT(154)=PTMN
0196  
0197       RETURN
0198       END