]> git.uio.no Git - u/mrichter/AliRoot.git/blob - GEANT321/gphys/gfang.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / gphys / gfang.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:21:24  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 06/07/94  18.28.55  by  S.Giani
11 *-- Author :
12       SUBROUTINE GFANG(P,COSTH,SINTH,COSPH,SINPH,ROTATE)
13 C.
14 C.    ******************************************************************
15 C.    *                                                                *
16 C.    *  Finds theta-phi angles for a particle with director cosines P *
17 C.    *  The logical flag ROTATE indicates whether the the director    *
18 C.    *  cosines are along the Z axis (.FALSE.) or not (.TRUE.).       *
19 C.    *                                                                *
20 C.    *    ==>Called by :                                              *
21 C.    *       Author    F.Carminati  *********                         *
22 C.    *                                                                *
23 C.    *                                                                *
24 C.    ******************************************************************
25 C.
26       DIMENSION P(*)
27 #if !defined(CERNLIB_SINGLE)
28       DOUBLE PRECISION DUX, DUY, DUZ, DSITH2, ONE, DNORM
29 #endif
30       LOGICAL ROTATE
31       PARAMETER (ONE=1)
32 C.
33 C.    ------------------------------------------------------------------
34 C.
35       DUX      = P(1)
36       DUY      = P(2)
37       DUZ      = P(3)
38       ROTATE   = .TRUE.
39       IF(ABS(DUZ).GE.0.85) THEN
40          DSITH2=DUX**2+DUY**2
41          IF(DSITH2.GT.0.) THEN
42             COSTH  = SIGN(ONE,DUZ)*SQRT(ONE-DSITH2)
43             DSITH  = SQRT(DSITH2)
44             SINTH  = DSITH
45             COSPH  = DUX/DSITH
46             SINPH  = DUY/DSITH
47          ELSEIF(DUZ.GT.0.)THEN
48             ROTATE = .FALSE.
49             COSTH =  1.
50             SINTH =  0.
51             COSPH =  1.
52             SINPH =  0.
53          ELSE
54             COSTH = -1.
55             SINTH =  0.
56             COSPH =  1.
57             SINPH =  0.
58          ENDIF
59       ELSE
60          COSTH  = DUZ
61          DSITH  = SQRT((ONE+DUZ)*(ONE-DUZ))
62          SINTH  = DSITH
63          DNORM  = ONE/SQRT(DUX**2+DUY**2)
64          COSPH  = DUX*DNORM
65          SINPH  = DUY*DNORM
66       ENDIF
67 *
68       END