+++ /dev/null
-
-C***********************************************************************
-
- FUNCTION PYSPEN(XREIN,XIMIN,IREIM)
-
-C...Calculates real and imaginary part of Spence function; see
-C...G. 't Hooft and M. Veltman, Nucl. Phys. B153 (1979) 365.
- COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
- SAVE /LUDAT1/
- DIMENSION B(0:14)
-
- DATA B/
- & 1.000000E+00, -5.000000E-01, 1.666667E-01,
- & 0.000000E+00, -3.333333E-02, 0.000000E+00,
- & 2.380952E-02, 0.000000E+00, -3.333333E-02,
- & 0.000000E+00, 7.575757E-02, 0.000000E+00,
- &-2.531135E-01, 0.000000E+00, 1.166667E+00/
-
- XRE=XREIN
- XIM=XIMIN
- IF(ABS(1.-XRE).LT.1.E-6.AND.ABS(XIM).LT.1.E-6) THEN
- IF(IREIM.EQ.1) PYSPEN=PARU(1)**2/6.
- IF(IREIM.EQ.2) PYSPEN=0.
- RETURN
- ENDIF
-
- XMOD=SQRT(XRE**2+XIM**2)
- IF(XMOD.LT.1.E-6) THEN
- IF(IREIM.EQ.1) PYSPEN=0.
- IF(IREIM.EQ.2) PYSPEN=0.
- RETURN
- ENDIF
-
- XARG=SIGN(ACOS(XRE/XMOD),XIM)
- SP0RE=0.
- SP0IM=0.
- SGN=1.
- IF(XMOD.GT.1.) THEN
- ALGXRE=LOG(XMOD)
- ALGXIM=XARG-SIGN(PARU(1),XARG)
- SP0RE=-PARU(1)**2/6.-(ALGXRE**2-ALGXIM**2)/2.
- SP0IM=-ALGXRE*ALGXIM
- SGN=-1.
- XMOD=1./XMOD
- XARG=-XARG
- XRE=XMOD*COS(XARG)
- XIM=XMOD*SIN(XARG)
- ENDIF
- IF(XRE.GT.0.5) THEN
- ALGXRE=LOG(XMOD)
- ALGXIM=XARG
- XRE=1.-XRE
- XIM=-XIM
- XMOD=SQRT(XRE**2+XIM**2)
- XARG=SIGN(ACOS(XRE/XMOD),XIM)
- ALGYRE=LOG(XMOD)
- ALGYIM=XARG
- SP0RE=SP0RE+SGN*(PARU(1)**2/6.-(ALGXRE*ALGYRE-ALGXIM*ALGYIM))
- SP0IM=SP0IM-SGN*(ALGXRE*ALGYIM+ALGXIM*ALGYRE)
- SGN=-SGN
- ENDIF
-
- XRE=1.-XRE
- XIM=-XIM
- XMOD=SQRT(XRE**2+XIM**2)
- XARG=SIGN(ACOS(XRE/XMOD),XIM)
- ZRE=-LOG(XMOD)
- ZIM=-XARG
-
- SPRE=0.
- SPIM=0.
- SAVERE=1.
- SAVEIM=0.
- DO 100 I=0,14
- IF(MAX(ABS(SAVERE),ABS(SAVEIM)).LT.1E-30) GOTO 110
- TERMRE=(SAVERE*ZRE-SAVEIM*ZIM)/FLOAT(I+1)
- TERMIM=(SAVERE*ZIM+SAVEIM*ZRE)/FLOAT(I+1)
- SAVERE=TERMRE
- SAVEIM=TERMIM
- SPRE=SPRE+B(I)*TERMRE
- SPIM=SPIM+B(I)*TERMIM
- 100 CONTINUE
-
- 110 IF(IREIM.EQ.1) PYSPEN=SP0RE+SGN*SPRE
- IF(IREIM.EQ.2) PYSPEN=SP0IM+SGN*SPIM
-
- RETURN
- END