]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HERWIG/src/hwdrm5.f
Minor fixes in the event tag to take into account the new way of storing the trigger...
[u/mrichter/AliRoot.git] / HERWIG / src / hwdrm5.f
1
2 CDECK  ID>, HWDRM5.
3
4 *CMZ :-        -20/07/99  10:56:12  by  Peter Richardson
5
6 *-- Author :    Peter Richardson
7
8 C-----------------------------------------------------------------------
9
10       SUBROUTINE HWDRM5(X,Y,Z,A,B,MA,MB,MC,MD,MR,GAM)
11
12 C-----------------------------------------------------------------------
13
14 C     Subroutine to find the maximum of the ME
15
16 C-----------------------------------------------------------------------
17
18       IMPLICIT NONE
19
20       DOUBLE PRECISION X,Y,Z,MA,MB,MC,MD,MR,GAM,RES(3),A,B,C,D,
21
22      &                 E2S,E3S,E2M,E3M,LOW,UPP,HWRUNI,EPS,ZERO
23
24       EXTERNAL HWRUNI
25
26       PARAMETER(EPS=1D-9,ZERO=0)
27
28       C = A**2+B**2
29
30       D = 4*A*B
31
32       RES(1) = -D*(MA**2 + MB**2)*MC*MD +
33
34      &          C*(GAM**2*MR**2 + MR**4 - MA**2*MC**2 - MB**2*MC**2 -
35
36      &          MA**2*MD**2 - MB**2*MD**2)
37
38       RES(2) = (GAM**2*MR**2 + (-MR**2 + MA**2 + MB**2)**2)*
39
40      &          (D**2*MC**2*MD**2 +
41
42      &          2*C*D*MC*MD*(-MR**2 + MC**2 + MD**2) +
43
44      &          C**2*(GAM**2*MR**2 + (-MR**2 + MC**2 + MD**2)**2))
45
46       RES(3) = -D*MC*MD+C*(2*MR**2-(MA**2+MB**2+MC**2+MD**2))
47
48       IF(RES(2).GT.ZERO) THEN
49
50         RES(2) = SQRT(RES(2))
51
52       ELSE
53
54         RES(2) = 0.0D0
55
56       ENDIF
57
58       IF((RES(1)+RES(2))/RES(3).GT.(MD-MC)**2.OR.
59
60      &              (RES(1)+RES(2))/RES(3).LT.(MA+MB)**2) THEN
61
62         X = (RES(1)-RES(2))/RES(3)
63
64       ELSE
65
66         X = (RES(1)+RES(2))/RES(3)
67
68       ENDIF
69
70       IF(X.GT.(MD-MC)**2) X = (MD-MC)**2
71
72       IF(X.LT.(MA+MB)**2) X = (MA+MB)**2
73
74       E2S = (X-MA**2+MB**2)/(2*SQRT(X))
75
76       E3S = (MD**2-X-MC**2)/(2*SQRT(X))
77
78       E2M = E2S**2-MB**2
79
80       E3M = E3S**2-MC**2
81
82       IF(E2M.LT.ZERO) THEN
83
84         IF(ABS(E2M/E2S).GT.EPS) CALL HWWARN('HWDRM5',2,*10)
85
86  10     E2M= 0.0D0
87
88       ENDIF
89
90       IF(E3M.LT.ZERO) THEN
91
92         IF(ABS(E3M/E3S).GT.EPS) CALL HWWARN('HWDRM5',3,*20)
93
94  20     E3M= 0.0D0
95
96       ENDIF
97
98       E2M = SQRT(E2M)
99
100       E3M = SQRT(E3M)
101
102       LOW = (E2S+E3S)**2-(E2M+E3M)**2
103
104       UPP = (E2S+E3S)**2-(E2M-E3M)**2
105
106       Y   = HWRUNI(1,LOW,UPP)
107
108       Z   = MA**2+MB**2+MC**2+MD**2-X-Y
109
110       END