Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001     
0002 C*********************************************************************  
0003     
0004       SUBROUTINE LUXKFL(KFL,ECM,ECMC,KFLC)  
0005     
0006 C...Purpose: to select flavour for produced qqbar pair. 
0007       COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200) 
0008       SAVE /LUDAT1/ 
0009       COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)    
0010       SAVE /LUDAT2/ 
0011     
0012 C...Calculate maximum weight in QED or QFD case.    
0013       IF(MSTJ(102).LE.1) THEN   
0014         RFMAX=4./9. 
0015       ELSE  
0016         POLL=1.-PARJ(131)*PARJ(132) 
0017         SFF=1./(16.*PARU(102)*(1.-PARU(102)))   
0018         SFW=ECMC**4/((ECMC**2-PARJ(123)**2)**2+(PARJ(123)*PARJ(124))**2)    
0019         SFI=SFW*(1.-(PARJ(123)/ECMC)**2)    
0020         VE=4.*PARU(102)-1.  
0021         HF1I=SFI*SFF*(VE*POLL+PARJ(132)-PARJ(131))  
0022         HF1W=SFW*SFF**2*((VE**2+1.)*POLL+2.*VE*(PARJ(132)-PARJ(131)))   
0023         RFMAX=MAX(4./9.*POLL-4./3.*(1.-8.*PARU(102)/3.)*HF1I+   
0024      &  ((1.-8.*PARU(102)/3.)**2+1.)*HF1W,1./9.*POLL+2./3.* 
0025      &  (-1.+4.*PARU(102)/3.)*HF1I+((-1.+4.*PARU(102)/3.)**2+1.)*HF1W)  
0026       ENDIF 
0027     
0028 C...Choose flavour. Gives charge and velocity.  
0029       NTRY=0    
0030   100 NTRY=NTRY+1   
0031       IF(NTRY.GT.100) THEN  
0032         CALL LUERRM(14,'(LUXKFL:) caught in an infinite loop')  
0033         KFLC=0  
0034         RETURN  
0035       ENDIF 
0036       KFLC=KFL  
0037       IF(KFL.LE.0) KFLC=1+INT(MSTJ(104)*RLU(0)) 
0038       MSTJ(93)=1    
0039       PMQ=ULMASS(KFLC)  
0040       IF(ECM.LT.2.*PMQ+PARJ(127)) GOTO 100  
0041       QF=KCHG(KFLC,1)/3.    
0042       VQ=1. 
0043       IF(MOD(MSTJ(103),2).EQ.1) VQ=SQRT(MAX(0.,1.-(2.*PMQ/ECMC)**2))    
0044     
0045 C...Calculate weight in QED or QFD case.    
0046       IF(MSTJ(102).LE.1) THEN   
0047         RF=QF**2    
0048         RFV=0.5*VQ*(3.-VQ**2)*QF**2 
0049       ELSE  
0050         VF=SIGN(1.,QF)-4.*QF*PARU(102)  
0051         RF=QF**2*POLL-2.*QF*VF*HF1I+(VF**2+1.)*HF1W 
0052         RFV=0.5*VQ*(3.-VQ**2)*(QF**2*POLL-2.*QF*VF*HF1I+VF**2*HF1W)+    
0053      &  VQ**3*HF1W  
0054       ENDIF 
0055     
0056 C...Weighting or new event (radiative photon). Cross-section update.    
0057       IF(KFL.LE.0.AND.RF.LT.RLU(0)*RFMAX) GOTO 100  
0058       PARJ(158)=PARJ(158)+1.    
0059       IF(ECMC.LT.2.*PMQ+PARJ(127).OR.RFV.LT.RLU(0)*RF) KFLC=0   
0060       IF(MSTJ(107).LE.0.AND.KFLC.EQ.0) GOTO 100 
0061       IF(KFLC.NE.0) PARJ(159)=PARJ(159)+1.  
0062       PARJ(144)=PARJ(157)*PARJ(159)/PARJ(158)   
0063       PARJ(148)=PARJ(144)*86.8/ECM**2   
0064     
0065       RETURN    
0066       END