]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PYTHIA/pythia/pyspen.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / PYTHIA / pythia / pyspen.F
1  
2 C***********************************************************************
3  
4       FUNCTION PYSPEN(XREIN,XIMIN,IREIM)
5  
6 C...Calculates real and imaginary part of Spence function; see
7 C...G. 't Hooft and M. Veltman, Nucl. Phys. B153 (1979) 365.
8       COMMON/LUDAT1/MSTU(200),PARU(200),MSTJ(200),PARJ(200)
9       SAVE /LUDAT1/
10       DIMENSION B(0:14)
11  
12       DATA B/
13      & 1.000000E+00,        -5.000000E-01,         1.666667E-01,
14      & 0.000000E+00,        -3.333333E-02,         0.000000E+00,
15      & 2.380952E-02,         0.000000E+00,        -3.333333E-02,
16      & 0.000000E+00,         7.575757E-02,         0.000000E+00,
17      &-2.531135E-01,         0.000000E+00,         1.166667E+00/
18  
19       XRE=XREIN
20       XIM=XIMIN
21       IF(ABS(1.-XRE).LT.1.E-6.AND.ABS(XIM).LT.1.E-6) THEN
22         IF(IREIM.EQ.1) PYSPEN=PARU(1)**2/6.
23         IF(IREIM.EQ.2) PYSPEN=0.
24         RETURN
25       ENDIF
26  
27       XMOD=SQRT(XRE**2+XIM**2)
28       IF(XMOD.LT.1.E-6) THEN
29         IF(IREIM.EQ.1) PYSPEN=0.
30         IF(IREIM.EQ.2) PYSPEN=0.
31         RETURN
32       ENDIF
33  
34       XARG=SIGN(ACOS(XRE/XMOD),XIM)
35       SP0RE=0.
36       SP0IM=0.
37       SGN=1.
38       IF(XMOD.GT.1.) THEN
39         ALGXRE=LOG(XMOD)
40         ALGXIM=XARG-SIGN(PARU(1),XARG)
41         SP0RE=-PARU(1)**2/6.-(ALGXRE**2-ALGXIM**2)/2.
42         SP0IM=-ALGXRE*ALGXIM
43         SGN=-1.
44         XMOD=1./XMOD
45         XARG=-XARG
46         XRE=XMOD*COS(XARG)
47         XIM=XMOD*SIN(XARG)
48       ENDIF
49       IF(XRE.GT.0.5) THEN
50         ALGXRE=LOG(XMOD)
51         ALGXIM=XARG
52         XRE=1.-XRE
53         XIM=-XIM
54         XMOD=SQRT(XRE**2+XIM**2)
55         XARG=SIGN(ACOS(XRE/XMOD),XIM)
56         ALGYRE=LOG(XMOD)
57         ALGYIM=XARG
58         SP0RE=SP0RE+SGN*(PARU(1)**2/6.-(ALGXRE*ALGYRE-ALGXIM*ALGYIM))
59         SP0IM=SP0IM-SGN*(ALGXRE*ALGYIM+ALGXIM*ALGYRE)
60         SGN=-SGN
61       ENDIF
62  
63       XRE=1.-XRE
64       XIM=-XIM
65       XMOD=SQRT(XRE**2+XIM**2)
66       XARG=SIGN(ACOS(XRE/XMOD),XIM)
67       ZRE=-LOG(XMOD)
68       ZIM=-XARG
69  
70       SPRE=0.
71       SPIM=0.
72       SAVERE=1.
73       SAVEIM=0.
74       DO 100 I=0,14
75       IF(MAX(ABS(SAVERE),ABS(SAVEIM)).LT.1E-30) GOTO 110
76       TERMRE=(SAVERE*ZRE-SAVEIM*ZIM)/FLOAT(I+1)
77       TERMIM=(SAVERE*ZIM+SAVEIM*ZRE)/FLOAT(I+1)
78       SAVERE=TERMRE
79       SAVEIM=TERMIM
80       SPRE=SPRE+B(I)*TERMRE
81       SPIM=SPIM+B(I)*TERMIM
82   100 CONTINUE
83  
84   110 IF(IREIM.EQ.1) PYSPEN=SP0RE+SGN*SPRE
85       IF(IREIM.EQ.2) PYSPEN=SP0IM+SGN*SPIM
86  
87       RETURN
88       END