Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001     
0002 C*********************************************************************  
0003     
0004       SUBROUTINE LUEEVT(KFL,ECM)    
0005     
0006 C...Purpose: to handle the generation of an e+e- annihilation jet event.    
0007       IMPLICIT DOUBLE PRECISION(D)  
0008       COMMON/LUJETS/N,K(9000,5),P(9000,5),V(9000,5)
0009       SAVE /LUJETS/ 
0010       COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) 
0011       SAVE /LUDAT1/ 
0012       COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)    
0013       SAVE /LUDAT2/ 
0014     
0015 C...Check input parameters. 
0016       IF(MSTU(12).GE.1) CALL LULIST(0)  
0017       IF(KFL.LT.0.OR.KFL.GT.8) THEN 
0018         CALL LUERRM(16,'(LUEEVT:) called with unknown flavour code')    
0019         IF(MSTU(21).GE.1) RETURN    
0020       ENDIF 
0021       IF(KFL.LE.5) ECMMIN=PARJ(127)+2.02*PARF(100+MAX(1,KFL))   
0022       IF(KFL.GE.6) ECMMIN=PARJ(127)+2.02*PMAS(KFL,1)    
0023       IF(ECM.LT.ECMMIN) THEN    
0024         CALL LUERRM(16,'(LUEEVT:) called with too small CM energy') 
0025         IF(MSTU(21).GE.1) RETURN    
0026       ENDIF 
0027     
0028 C...Check consistency of MSTJ options set.  
0029       IF(MSTJ(109).EQ.2.AND.MSTJ(110).NE.1) THEN    
0030         CALL LUERRM(6,  
0031      &  '(LUEEVT:) MSTJ(109) value requires MSTJ(110) = 1') 
0032         MSTJ(110)=1 
0033       ENDIF 
0034       IF(MSTJ(109).EQ.2.AND.MSTJ(111).NE.0) THEN    
0035         CALL LUERRM(6,  
0036      &  '(LUEEVT:) MSTJ(109) value requires MSTJ(111) = 0') 
0037         MSTJ(111)=0 
0038       ENDIF 
0039     
0040 C...Initialize alpha_strong and total cross-section.    
0041       MSTU(111)=MSTJ(108)   
0042       IF(MSTJ(108).EQ.2.AND.(MSTJ(101).EQ.0.OR.MSTJ(101).EQ.1)) 
0043      &MSTU(111)=1   
0044       PARU(112)=PARJ(121)   
0045       IF(MSTU(111).EQ.2) PARU(112)=PARJ(122)    
0046       IF(MSTJ(116).GT.0.AND.(MSTJ(116).GE.2.OR.ABS(ECM-PARJ(151)).GE.   
0047      &PARJ(139).OR.10*MSTJ(102)+KFL.NE.MSTJ(119))) CALL LUXTOT(KFL,ECM, 
0048      &XTOT) 
0049       IF(MSTJ(116).GE.3) MSTJ(116)=1    
0050     
0051 C...Add initial e+e- to event record (documentation only).  
0052       NTRY=0    
0053   100 NTRY=NTRY+1   
0054       IF(NTRY.GT.100) THEN  
0055         CALL LUERRM(14,'(LUEEVT:) caught in an infinite loop')  
0056         RETURN  
0057       ENDIF 
0058       NC=0  
0059       IF(MSTJ(115).GE.2) THEN   
0060         NC=NC+2 
0061         CALL LU1ENT(NC-1,11,0.5*ECM,0.,0.)  
0062         K(NC-1,1)=21    
0063         CALL LU1ENT(NC,-11,0.5*ECM,PARU(1),0.)  
0064         K(NC,1)=21  
0065       ENDIF 
0066     
0067 C...Radiative photon (in initial state).    
0068       MK=0  
0069       ECMC=ECM  
0070       IF(MSTJ(107).GE.1.AND.MSTJ(116).GE.1) CALL LURADK(ECM,MK,PAK, 
0071      &THEK,PHIK,ALPK)   
0072       IF(MK.EQ.1) ECMC=SQRT(ECM*(ECM-2.*PAK))   
0073       IF(MSTJ(115).GE.1.AND.MK.EQ.1) THEN   
0074         NC=NC+1 
0075         CALL LU1ENT(NC,22,PAK,THEK,PHIK)    
0076         K(NC,3)=MIN(MSTJ(115)/2,1)  
0077       ENDIF 
0078     
0079 C...Virtual exchange boson (gamma or Z0).   
0080       IF(MSTJ(115).GE.3) THEN   
0081         NC=NC+1 
0082         KF=22   
0083         IF(MSTJ(102).EQ.2) KF=23    
0084         MSTU10=MSTU(10) 
0085         MSTU(10)=1  
0086         P(NC,5)=ECMC    
0087         CALL LU1ENT(NC,KF,ECMC,0.,0.)   
0088         K(NC,1)=21  
0089         K(NC,3)=1   
0090         MSTU(10)=MSTU10 
0091       ENDIF 
0092     
0093 C...Choice of flavour and jet configuration.    
0094       CALL LUXKFL(KFL,ECM,ECMC,KFLC)    
0095       IF(KFLC.EQ.0) GOTO 100    
0096       CALL LUXJET(ECMC,NJET,CUT)    
0097       KFLN=21   
0098       IF(NJET.EQ.4) CALL LUX4JT(NJET,CUT,KFLC,ECMC,KFLN,X1,X2,X4,   
0099      &X12,X14)  
0100       IF(NJET.EQ.3) CALL LUX3JT(NJET,CUT,KFLC,ECMC,X1,X3)   
0101       IF(NJET.EQ.2) MSTJ(120)=1 
0102     
0103 C...Fill jet configuration and origin.  
0104       IF(NJET.EQ.2.AND.MSTJ(101).NE.5) CALL LU2ENT(NC+1,KFLC,-KFLC,ECMC)    
0105       IF(NJET.EQ.2.AND.MSTJ(101).EQ.5) CALL LU2ENT(-(NC+1),KFLC,-KFLC,  
0106      &ECMC) 
0107       IF(NJET.EQ.3) CALL LU3ENT(NC+1,KFLC,21,-KFLC,ECMC,X1,X3)  
0108       IF(NJET.EQ.4.AND.KFLN.EQ.21) CALL LU4ENT(NC+1,KFLC,KFLN,KFLN, 
0109      &-KFLC,ECMC,X1,X2,X4,X12,X14)  
0110       IF(NJET.EQ.4.AND.KFLN.NE.21) CALL LU4ENT(NC+1,KFLC,-KFLN,KFLN,    
0111      &-KFLC,ECMC,X1,X2,X4,X12,X14)  
0112       DO 110 IP=NC+1,N  
0113   110 K(IP,3)=K(IP,3)+MIN(MSTJ(115)/2,1)+(MSTJ(115)/3)*(NC-1)   
0114     
0115 C...Angular orientation according to matrix element.    
0116       IF(MSTJ(106).EQ.1) THEN   
0117         CALL LUXDIF(NC,NJET,KFLC,ECMC,CHI,THE,PHI)  
0118         CALL LUDBRB(NC+1,N,0.,CHI,0D0,0D0,0D0)  
0119         CALL LUDBRB(NC+1,N,THE,PHI,0D0,0D0,0D0) 
0120       ENDIF 
0121     
0122 C...Rotation and boost from radiative photon.   
0123       IF(MK.EQ.1) THEN  
0124         DBEK=-PAK/(ECM-PAK) 
0125         NMIN=NC+1-MSTJ(115)/3   
0126         CALL LUDBRB(NMIN,N,0.,-PHIK,0D0,0D0,0D0)    
0127         CALL LUDBRB(NMIN,N,ALPK,0.,DBEK*SIN(THEK),0D0,DBEK*COS(THEK))   
0128         CALL LUDBRB(NMIN,N,0.,PHIK,0D0,0D0,0D0) 
0129       ENDIF 
0130     
0131 C...Generate parton shower. Rearrange along strings and check.  
0132       IF(MSTJ(101).EQ.5) THEN   
0133         CALL LUSHOW(N-1,N,ECMC) 
0134         MSTJ14=MSTJ(14) 
0135         IF(MSTJ(105).EQ.-1) MSTJ(14)=0  
0136         IF(MSTJ(105).GE.0) MSTU(28)=0   
0137         CALL LUPREP(0)  
0138         MSTJ(14)=MSTJ14 
0139         IF(MSTJ(105).GE.0.AND.MSTU(28).NE.0) GOTO 100   
0140       ENDIF 
0141     
0142 C...Fragmentation/decay generation. Information for LUTABU. 
0143       IF(MSTJ(105).EQ.1) CALL LUEXEC    
0144       MSTU(161)=KFLC    
0145       MSTU(162)=-KFLC   
0146     
0147       RETURN    
0148       END