]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1995/10/24 10:22:00 cernlib | |
6 | * Geant | |
7 | * | |
8 | * | |
9 | #include "geant321/pilot.h" | |
10 | *CMZ : 3.21/02 29/03/94 15.41.46 by S.Giani | |
11 | *-- Author : | |
12 | *$ CREATE COSLEG.FOR | |
13 | *COPY COSLEG | |
14 | * | |
15 | *=== cosleg ===========================================================* | |
16 | * | |
17 | FUNCTION COSLEG ( ACOLEG ) | |
18 | ||
19 | #include "geant321/dblprc.inc" | |
20 | #include "geant321/dimpar.inc" | |
21 | #include "geant321/iounit.inc" | |
22 | * | |
23 | *----------------------------------------------------------------------* | |
24 | *----------------------------------------------------------------------* | |
25 | * | |
26 | DIMENSION ACOLEG (0:2) | |
27 | REAL RNDM(2) | |
28 | * | |
29 | IF ( ACOLEG (0) .NE. 0.5D+00 ) THEN | |
30 | ANORM = 0.5D+00 / ACOLEG (0) | |
31 | DO 100 I = 0,2 | |
32 | ACOLEG (I) = ACOLEG (I) * ANORM | |
33 | 100 CONTINUE | |
34 | END IF | |
35 | ACOF = 1.5D+00 * ACOLEG (2) | |
36 | BCOF = ACOLEG (1) | |
37 | CCOF = ACOLEG (0) - 0.5D+00 * ACOLEG (2) | |
38 | FORWRA = 0.3333333333333333D+00 * ACOF | |
39 | FORWRB = 0.5D+00 * BCOF | |
40 | FORWRC = CCOF | |
41 | FORWRD = FORWRA + FORWRB + FORWRC | |
42 | BACKWR = 1.D+00 - FORWRD | |
43 | CALL GRNDM(RNDM,1) | |
44 | RNDCOS = RNDM (1) | |
45 | IF ( RNDCOS .LT. FORWRD ) THEN | |
46 | RNDCOS = RNDCOS | |
47 | IF ( RNDCOS .LT. FORWRA ) THEN | |
48 | COSLEG = ( RNDCOS / FORWRA )**0.3333333333333333D+00 | |
49 | ELSE IF ( RNDCOS .LT. FORWRA + FORWRB ) THEN | |
50 | COSLEG = SQRT ( ( RNDCOS - FORWRA ) / FORWRB ) | |
51 | ELSE | |
52 | COSLEG = ( RNDCOS - FORWRA - FORWRB ) / FORWRC | |
53 | END IF | |
54 | ELSE | |
55 | COSLEG = - ( RNDCOS - FORWRD ) / BACKWR | |
56 | IF ( ACOF .LT. - ANGLGB ) THEN | |
57 | COSMAX = - 0.5D+00 * BCOF / ACOF | |
58 | IF ( COSMAX .GT. 0.D+00 ) THEN | |
59 | PROMAX = CCOF | |
60 | ELSE IF ( COSMAX .LT. -1.D+00 ) THEN | |
61 | PROMAX = ACOF - BCOF + CCOF | |
62 | ELSE | |
63 | PROMAX = ACOF * COSMAX**2 + BCOF * COSMAX + CCOF | |
64 | END IF | |
65 | ELSE IF ( ACOF .GT. ANGLGB ) THEN | |
66 | IF ( ACOF .GT. BCOF ) THEN | |
67 | PROMAX = ACOF - BCOF + CCOF | |
68 | ELSE | |
69 | PROMAX = CCOF | |
70 | END IF | |
71 | ELSE | |
72 | PROMAX = CCOF | |
73 | END IF | |
74 | 200 CONTINUE | |
75 | FREJE = ( ACOF * COSLEG**2 + BCOF * COSLEG + CCOF ) / PROMAX | |
76 | CALL GRNDM(RNDM,2) | |
77 | IF ( RNDM (1) .GE. FREJE ) THEN | |
78 | COSLEG = - RNDM (2) | |
79 | GO TO 200 | |
80 | END IF | |
81 | END IF | |
82 | *=== End of subroutine cosleg =========================================* | |
83 | RETURN | |
84 | END |