Back to home page

sPhenix code displayed by LXR

 
 

    


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

0001  
0002 C*********************************************************************
0003  
0004 C...PYPDPR
0005 C...Gives proton parton distributions according to a few different
0006 C...parametrizations.
0007  
0008       SUBROUTINE PYPDPR(X,Q2,XPPR)
0009  
0010 C...Double precision and integer declarations.
0011       IMPLICIT DOUBLE PRECISION(A-H, O-Z)
0012       IMPLICIT INTEGER(I-N)
0013       INTEGER PYK,PYCHGE,PYCOMP
0014 C...Commonblocks.
0015       COMMON/PYDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
0016       COMMON/PYDAT2/KCHG(500,4),PMAS(500,4),PARF(2000),VCKM(4,4)
0017       COMMON/PYPARS/MSTP(200),PARP(200),MSTI(200),PARI(200)
0018       COMMON/PYINT1/MINT(400),VINT(400)
0019       SAVE /PYDAT1/,/PYDAT2/,/PYPARS/,/PYINT1/
0020 C...Arrays and data.
0021       DIMENSION XPPR(-6:6),Q2MIN(16)
0022       DATA Q2MIN/ 2.56D0, 2.56D0, 2.56D0, 0.4D0, 0.4D0, 0.4D0,
0023      &1.0D0, 1.0D0, 2*0D0, 0.25D0, 5D0, 5D0, 4D0, 4D0, 0D0/
0024  
0025 C...Reset output array.
0026       DO 100 KFL=-6,6
0027         XPPR(KFL)=0D0
0028   100 CONTINUE
0029  
0030 C...Common preliminaries.
0031       NSET=MAX(1,MIN(16,MSTP(51)))
0032       IF(NSET.EQ.9.OR.NSET.EQ.10) NSET=6
0033       VINT(231)=Q2MIN(NSET)
0034       IF(MSTP(57).EQ.0) THEN
0035         Q2L=Q2MIN(NSET)
0036       ELSE
0037         Q2L=MAX(Q2MIN(NSET),Q2)
0038       ENDIF
0039  
0040       IF(NSET.GE.1.AND.NSET.LE.3) THEN
0041 C...Interface to the CTEQ 3 parton distributions.
0042         QRT=SQRT(MAX(1D0,Q2L))
0043  
0044 C...Loop over flavours.
0045         DO 110 I=-6,6
0046           IF(I.LE.0) THEN
0047             XPPR(I)=PYCTEQ(NSET,I,X,QRT)
0048           ELSEIF(I.LE.2) THEN
0049             XPPR(I)=PYCTEQ(NSET,I,X,QRT)+XPPR(-I)
0050           ELSE
0051             XPPR(I)=XPPR(-I)
0052           ENDIF
0053   110   CONTINUE
0054  
0055       ELSEIF(NSET.GE.4.AND.NSET.LE.6) THEN
0056 C...Interface to the GRV 94 distributions.
0057         IF(NSET.EQ.4) THEN
0058           CALL PYGRVL (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
0059         ELSEIF(NSET.EQ.5) THEN
0060           CALL PYGRVM (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
0061         ELSE
0062           CALL PYGRVD (X, Q2L, UV, DV, DEL, UDB, SB, CHM, BOT, GL)
0063         ENDIF
0064  
0065 C...Put into output array.
0066         XPPR(0)=GL
0067         XPPR(-1)=0.5D0*(UDB+DEL)
0068         XPPR(-2)=0.5D0*(UDB-DEL)
0069         XPPR(-3)=SB
0070         XPPR(-4)=CHM
0071         XPPR(-5)=BOT
0072         XPPR(1)=DV+XPPR(-1)
0073         XPPR(2)=UV+XPPR(-2)
0074         XPPR(3)=SB
0075         XPPR(4)=CHM
0076         XPPR(5)=BOT
0077  
0078       ELSEIF(NSET.EQ.7) THEN
0079 C...Interface to the CTEQ 5L parton distributions.
0080 C...Range of validity 10^-6 < x < 1, 1 < Q < 10^4 extended by
0081 C...freezing x*f(x,Q2) at borders.
0082         QRT=SQRT(MAX(1D0,MIN(1D8,Q2L)))
0083         XIN=MAX(1D-6,MIN(1D0,X))
0084  
0085 C...Loop over flavours (with u <-> d notation mismatch).
0086         SUMUDB=PYCT5L(-1,XIN,QRT)
0087         RATUDB=PYCT5L(-2,XIN,QRT)
0088         DO 120 I=-5,2
0089           IF(I.EQ.1) THEN
0090             XPPR(I)=XIN*PYCT5L(2,XIN,QRT)
0091           ELSEIF(I.EQ.2) THEN
0092             XPPR(I)=XIN*PYCT5L(1,XIN,QRT)
0093           ELSEIF(I.EQ.-1) THEN
0094             XPPR(I)=XIN*SUMUDB*RATUDB/(1D0+RATUDB)
0095           ELSEIF(I.EQ.-2) THEN
0096             XPPR(I)=XIN*SUMUDB/(1D0+RATUDB)
0097           ELSE
0098             XPPR(I)=XIN*PYCT5L(I,XIN,QRT)
0099             IF(I.LT.0) XPPR(-I)=XPPR(I)
0100           ENDIF
0101   120   CONTINUE
0102  
0103       ELSEIF(NSET.EQ.8) THEN
0104 C...Interface to the CTEQ 5M1 parton distributions.
0105         QRT=SQRT(MAX(1D0,MIN(1D8,Q2L)))
0106         XIN=MAX(1D-6,MIN(1D0,X))
0107  
0108 C...Loop over flavours (with u <-> d notation mismatch).
0109         SUMUDB=PYCT5M(-1,XIN,QRT)
0110         RATUDB=PYCT5M(-2,XIN,QRT)
0111         DO 130 I=-5,2
0112           IF(I.EQ.1) THEN
0113             XPPR(I)=XIN*PYCT5M(2,XIN,QRT)
0114           ELSEIF(I.EQ.2) THEN
0115             XPPR(I)=XIN*PYCT5M(1,XIN,QRT)
0116           ELSEIF(I.EQ.-1) THEN
0117             XPPR(I)=XIN*SUMUDB*RATUDB/(1D0+RATUDB)
0118           ELSEIF(I.EQ.-2) THEN
0119             XPPR(I)=XIN*SUMUDB/(1D0+RATUDB)
0120           ELSE
0121             XPPR(I)=XIN*PYCT5M(I,XIN,QRT)
0122             IF(I.LT.0) XPPR(-I)=XPPR(I)
0123           ENDIF
0124   130   CONTINUE
0125  
0126       ELSEIF(NSET.GE.11.AND.NSET.LE.15) THEN
0127 C...GRV92LO, EHLQ1, EHLQ2, DO1 AND DO2 distributions:
0128 C...obsolete but offers backwards compatibility.
0129         CALL PYPDPO(X,Q2L,XPPR)
0130  
0131 C...Symmetric choice for debugging only
0132       ELSEIF(NSET.EQ.16) THEN
0133         XPPR(0)=.5D0/X
0134         XPPR(1)=.05D0/X
0135         XPPR(2)=.05D0/X
0136         XPPR(3)=.05D0/X
0137         XPPR(4)=.05D0/X
0138         XPPR(5)=.05D0/X
0139         XPPR(-1)=.05D0/X
0140         XPPR(-2)=.05D0/X
0141         XPPR(-3)=.05D0/X
0142         XPPR(-4)=.05D0/X
0143         XPPR(-5)=.05D0/X
0144  
0145       ENDIF
0146  
0147       RETURN
0148       END