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 PYHIKMAP(IVAR,MVAR,VVAR) 
0005     
0006 C...Maps a uniform distribution into a distribution of a kinematical    
0007 C...variable according to one of the possibilities allowed. It is   
0008 C...assumed that kinematical limits have been set by a PYKLIM call. 
0009       COMMON/LUDAT2/KCHG(500,3),PMAS(500,4),PARF(2000),VCKM(4,4)    
0010       SAVE /LUDAT2/ 
0011       COMMON/PYHIINT1/MINT(400),VINT(400) 
0012       SAVE /PYHIINT1/ 
0013       COMMON/PYHIINT2/ISET(200),KFPR(200,2),COEF(200,20),ICOL(40,4,2) 
0014       SAVE /PYHIINT2/ 
0015     
0016 C...Convert VVAR to tau variable.   
0017       ISUB=MINT(1)  
0018       IF(IVAR.EQ.1) THEN    
0019         TAUMIN=VINT(11) 
0020         TAUMAX=VINT(31) 
0021         IF(MVAR.EQ.3.OR.MVAR.EQ.4) THEN 
0022           TAURE=VINT(73)    
0023           GAMRE=VINT(74)    
0024         ELSEIF(MVAR.EQ.5.OR.MVAR.EQ.6) THEN 
0025           TAURE=VINT(75)    
0026           GAMRE=VINT(76)    
0027         ENDIF   
0028         IF(MINT(43).EQ.1.AND.(ISET(ISUB).EQ.1.OR.ISET(ISUB).EQ.2)) THEN 
0029           TAU=1.    
0030         ELSEIF(MVAR.EQ.1) THEN  
0031           TAU=TAUMIN*(TAUMAX/TAUMIN)**VVAR  
0032         ELSEIF(MVAR.EQ.2) THEN  
0033           TAU=TAUMAX*TAUMIN/(TAUMIN+(TAUMAX-TAUMIN)*VVAR)   
0034         ELSEIF(MVAR.EQ.3.OR.MVAR.EQ.5) THEN 
0035           RATGEN=(TAURE+TAUMAX)/(TAURE+TAUMIN)*TAUMIN/TAUMAX    
0036           TAU=TAURE*TAUMIN/((TAURE+TAUMIN)*RATGEN**VVAR-TAUMIN) 
0037         ELSE    
0038           AUPP=ATAN((TAUMAX-TAURE)/GAMRE)   
0039           ALOW=ATAN((TAUMIN-TAURE)/GAMRE)   
0040           TAU=TAURE+GAMRE*TAN(ALOW+(AUPP-ALOW)*VVAR)    
0041         ENDIF   
0042         VINT(21)=MIN(TAUMAX,MAX(TAUMIN,TAU))    
0043     
0044 C...Convert VVAR to y* variable.    
0045       ELSEIF(IVAR.EQ.2) THEN    
0046         YSTMIN=VINT(12) 
0047         YSTMAX=VINT(32) 
0048         IF(MINT(43).EQ.1) THEN  
0049           YST=0.    
0050         ELSEIF(MINT(43).EQ.2) THEN  
0051           IF(ISET(ISUB).LE.2) YST=-0.5*LOG(VINT(21))    
0052           IF(ISET(ISUB).GE.3) YST=-0.5*LOG(VINT(26))    
0053         ELSEIF(MINT(43).EQ.3) THEN  
0054           IF(ISET(ISUB).LE.2) YST=0.5*LOG(VINT(21)) 
0055           IF(ISET(ISUB).GE.3) YST=0.5*LOG(VINT(26)) 
0056         ELSEIF(MVAR.EQ.1) THEN  
0057           YST=YSTMIN+(YSTMAX-YSTMIN)*SQRT(VVAR) 
0058         ELSEIF(MVAR.EQ.2) THEN  
0059           YST=YSTMAX-(YSTMAX-YSTMIN)*SQRT(1.-VVAR)  
0060         ELSE    
0061           AUPP=ATAN(EXP(YSTMAX))    
0062           ALOW=ATAN(EXP(YSTMIN))    
0063           YST=LOG(TAN(ALOW+(AUPP-ALOW)*VVAR))   
0064         ENDIF   
0065         VINT(22)=MIN(YSTMAX,MAX(YSTMIN,YST))    
0066     
0067 C...Convert VVAR to cos(theta-hat) variable.    
0068       ELSEIF(IVAR.EQ.3) THEN    
0069         RM34=2.*VINT(63)*VINT(64)/(VINT(21)*VINT(2))**2 
0070         RSQM=1.+RM34    
0071         IF(2.*VINT(71)**2/(VINT(21)*VINT(2)).LT.0.0001) RM34=MAX(RM34,  
0072      &  2.*VINT(71)**2/(VINT(21)*VINT(2)))  
0073         CTNMIN=VINT(13) 
0074         CTNMAX=VINT(33) 
0075         CTPMIN=VINT(14) 
0076         CTPMAX=VINT(34) 
0077         IF(MVAR.EQ.1) THEN  
0078           ANEG=CTNMAX-CTNMIN    
0079           APOS=CTPMAX-CTPMIN    
0080           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
0081             VCTN=VVAR*(ANEG+APOS)/ANEG  
0082             CTH=CTNMIN+(CTNMAX-CTNMIN)*VCTN 
0083           ELSE  
0084             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
0085             CTH=CTPMIN+(CTPMAX-CTPMIN)*VCTP 
0086           ENDIF 
0087         ELSEIF(MVAR.EQ.2) THEN  
0088           RMNMIN=MAX(RM34,RSQM-CTNMIN)  
0089           RMNMAX=MAX(RM34,RSQM-CTNMAX)  
0090           RMPMIN=MAX(RM34,RSQM-CTPMIN)  
0091           RMPMAX=MAX(RM34,RSQM-CTPMAX)  
0092           ANEG=LOG(RMNMIN/RMNMAX)   
0093           APOS=LOG(RMPMIN/RMPMAX)   
0094           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
0095             VCTN=VVAR*(ANEG+APOS)/ANEG  
0096             CTH=RSQM-RMNMIN*(RMNMAX/RMNMIN)**VCTN   
0097           ELSE  
0098             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
0099             CTH=RSQM-RMPMIN*(RMPMAX/RMPMIN)**VCTP   
0100           ENDIF 
0101         ELSEIF(MVAR.EQ.3) THEN  
0102           RMNMIN=MAX(RM34,RSQM+CTNMIN)  
0103           RMNMAX=MAX(RM34,RSQM+CTNMAX)  
0104           RMPMIN=MAX(RM34,RSQM+CTPMIN)  
0105           RMPMAX=MAX(RM34,RSQM+CTPMAX)  
0106           ANEG=LOG(RMNMAX/RMNMIN)   
0107           APOS=LOG(RMPMAX/RMPMIN)   
0108           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
0109             VCTN=VVAR*(ANEG+APOS)/ANEG  
0110             CTH=RMNMIN*(RMNMAX/RMNMIN)**VCTN-RSQM   
0111           ELSE  
0112             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
0113             CTH=RMPMIN*(RMPMAX/RMPMIN)**VCTP-RSQM   
0114           ENDIF 
0115         ELSEIF(MVAR.EQ.4) THEN  
0116           RMNMIN=MAX(RM34,RSQM-CTNMIN)  
0117           RMNMAX=MAX(RM34,RSQM-CTNMAX)  
0118           RMPMIN=MAX(RM34,RSQM-CTPMIN)  
0119           RMPMAX=MAX(RM34,RSQM-CTPMAX)  
0120           ANEG=1./RMNMAX-1./RMNMIN  
0121           APOS=1./RMPMAX-1./RMPMIN  
0122           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
0123             VCTN=VVAR*(ANEG+APOS)/ANEG  
0124             CTH=RSQM-1./(1./RMNMIN+ANEG*VCTN)   
0125           ELSE  
0126             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
0127             CTH=RSQM-1./(1./RMPMIN+APOS*VCTP)   
0128           ENDIF 
0129         ELSEIF(MVAR.EQ.5) THEN  
0130           RMNMIN=MAX(RM34,RSQM+CTNMIN)  
0131           RMNMAX=MAX(RM34,RSQM+CTNMAX)  
0132           RMPMIN=MAX(RM34,RSQM+CTPMIN)  
0133           RMPMAX=MAX(RM34,RSQM+CTPMAX)  
0134           ANEG=1./RMNMIN-1./RMNMAX  
0135           APOS=1./RMPMIN-1./RMPMAX  
0136           IF(ANEG.GT.0..AND.VVAR*(ANEG+APOS).LE.ANEG) THEN  
0137             VCTN=VVAR*(ANEG+APOS)/ANEG  
0138             CTH=1./(1./RMNMIN-ANEG*VCTN)-RSQM   
0139           ELSE  
0140             VCTP=(VVAR*(ANEG+APOS)-ANEG)/APOS   
0141             CTH=1./(1./RMPMIN-APOS*VCTP)-RSQM   
0142           ENDIF 
0143         ENDIF   
0144         IF(CTH.LT.0.) CTH=MIN(CTNMAX,MAX(CTNMIN,CTH))   
0145         IF(CTH.GT.0.) CTH=MIN(CTPMAX,MAX(CTPMIN,CTH))   
0146         VINT(23)=CTH    
0147     
0148 C...Convert VVAR to tau' variable.  
0149       ELSEIF(IVAR.EQ.4) THEN    
0150         TAU=VINT(11)    
0151         TAUPMN=VINT(16) 
0152         TAUPMX=VINT(36) 
0153         IF(MINT(43).EQ.1) THEN  
0154           TAUP=1.   
0155         ELSEIF(MVAR.EQ.1) THEN  
0156           TAUP=TAUPMN*(TAUPMX/TAUPMN)**VVAR 
0157         ELSE    
0158           AUPP=(1.-TAU/TAUPMX)**4   
0159           ALOW=(1.-TAU/TAUPMN)**4   
0160           TAUP=TAU/(1.-(ALOW+(AUPP-ALOW)*VVAR)**0.25)   
0161         ENDIF   
0162         VINT(26)=MIN(TAUPMX,MAX(TAUPMN,TAUP))   
0163       ENDIF 
0164     
0165       RETURN    
0166       END