This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / fluka / trans.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:20:04  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 29/03/94  15.41.44  by  S.Giani
11 *-- Author :
12 *$ CREATE TRANS.FOR
13 *COPY TRANS
14 *  FLUPDATE FORTRAN file
15 *  These are corrected versions of TRANS and TTRANS which make the
16 *  correct transformation even in the small-angle, backwards direction
17 *  Correction installed 11.03.88
18       SUBROUTINE TRANS (XO,YO,ZO,DE,SFE,CFE,X,Y,Z)
19  
20 #include "geant321/dblprc.inc"
21 #include "geant321/dimpar.inc"
22 #include "geant321/iounit.inc"
23 C********************************************************************
24 C     VERSION BY                     J. RANFT
25 C                                    LEIPZIG
26 C     LAST CHANGE 12. APRIL 83    BY PERTTI AARNIO
27 C                                    HELSINKI UNIVERSITY OF
28 C                                    TECHNOLOGY, FINLAND
29 C
30 C
31 C     THIS IS A SUBROUTINE OF FLUKA TO GIVE NEW DIRECTION COSINES
32 C
33 C     INPUT VARIABLES:
34 C        XO,YO,ZO = ORIGINAL DIRECTION COSINES
35 C        DE       = POLAR (THETA) ANGLE OF "SCATTERING"
36 C        SFE,CFE  = SINE AND COSINE OF THE AZIMUTHAL (PHI) ANGLE
37 C                   OF "SCATTERING"
38 C
39 C     OUTPUT VARIABLES:
40 C        X,Y,Z     = NEW DIRECTION COSINES
41 C
42 C     ROTATION OF COORDINATE SYSTEM (SEE CERN 64-47)
43 C
44 C     DUE TO THE IMPLEMENTATION OF THE MULTIPLE COULOMB SCATTERING
45 C     ALSO VERY SMALL ANGLES HAVE TO BE TREATED CORRECTLY.
46 C     NOW SMALL ANGLE APPROXIMATION IS USED PRACTICALLY ONLY
47 C     WHEN XO AND YO ARE EXACTLY 0.
48 C
49 C********************************************************************
50 C
51 *
52       CDE=COS(DE)
53       SDE=SIN(DE)
54       A = XO**2 + YO**2
55       IF ( A .LT. ANGLSQ ) THEN
56          X=SDE*CFE
57          Y=SDE*SFE
58 C   Z=CDE CORRECTED AUGUST 88 PA
59          Z=CDE*ZO
60       ELSE
61          XI=SDE*CFE
62          YI=SDE*SFE
63          ZI=CDE
64          A =SQRT(A)
65          X=-YO*XI/A-ZO*XO*YI/A+XO*ZI
66          Y=XO*XI/A-ZO*YO*YI/A+YO*ZI
67          Z=A*YI+ZO*ZI
68       END IF
69       RETURN
70       END