]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gtrak/ghelix.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / gtrak / ghelix.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:21:41 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.23 by S.Giani
11*-- Author :
12 SUBROUTINE GHELIX (CHARGE, STEP, VECT, VOUT)
13C.
14C. ******************************************************************
15C. * *
16C. * Performs the tracking of one step in a magnetic field *
17C. * The trajectory is assumed to be a helix in a constant field *
18C. * taken at the mid point of the step. *
19C. * Parameters: *
20C. * input *
21C. * STEP =arc length of the step asked *
22C. * VECT =input vector (position,direction cos and momentum) *
23C. * CHARGE= electric charge of the particle *
24C. * output *
25C. * VOUT = same as VECT after completion of the step *
26C. * *
27C. * ==>Called by : <USER>, GUSWIM *
28C. * Author M.Hansroul ********* *
29C. * Modified S.Egli, S.V.Levonian *
30C. * Modified V.Perevoztchikov
31C. * *
32C. ******************************************************************
33C.
34 DIMENSION VECT(7),VOUT(7)
35 DIMENSION XYZ(3),H(4),HXP(3)
36 PARAMETER (IX=1,IY=2,IZ=3,IPX=4,IPY=5,IPZ=6,IPP=7)
37 PARAMETER (SIXTH = 1./6.)
38 PARAMETER (EC=2.9979251E-4)
39C.
40C. ------------------------------------------------------------------
41C.
42C units are kgauss,centimeters,gev/c
43C
44 VOUT(IPP) = VECT(IPP)
45 IF (CHARGE.EQ.0.) GO TO 10
46 XYZ(1) = VECT(IX) + 0.5 * STEP * VECT(IPX)
47 XYZ(2) = VECT(IY) + 0.5 * STEP * VECT(IPY)
48 XYZ(3) = VECT(IZ) + 0.5 * STEP * VECT(IPZ)
49C
50 CALL GUFLD (XYZ, H)
51
52 H2XY = H(1)**2 + H(2)**2
53 H(4) = H(3)**2 + H2XY
54 IF (H(4).LE.1.E-12) GO TO 10
55 IF (H2XY.LE.1.E-12*H(4)) THEN
56 CALL GHELX3 (CHARGE*H(3), STEP, VECT, VOUT)
57 GO TO 999
58 ENDIF
59 H(4) = SQRT(H(4))
60 H(1) = H(1)/H(4)
61 H(2) = H(2)/H(4)
62 H(3) = H(3)/H(4)
63 H(4) = H(4)*EC
64*
65 HXP(1) = H(2)*VECT(IPZ) - H(3)*VECT(IPY)
66 HXP(2) = H(3)*VECT(IPX) - H(1)*VECT(IPZ)
67 HXP(3) = H(1)*VECT(IPY) - H(2)*VECT(IPX)
68
69 HP = H(1)*VECT(IPX) + H(2)*VECT(IPY) + H(3)*VECT(IPZ)
70*
71 RHO = -CHARGE*H(4)/VECT(IPP)
72 TET = RHO * STEP
73 IF (ABS(TET).GT.0.15) THEN
74 SINT = SIN(TET)
75 SINTT = (SINT/TET)
76 TSINT = (TET-SINT)/TET
77 COS1T = 2.*(SIN(0.5*TET))**2/TET
78 ELSE
79 TSINT = SIXTH*TET**2
80 SINTT = (1. - TSINT)
81 SINT = TET*SINTT
82 COS1T = 0.5*TET
83 ENDIF
84*
85 F1 = STEP * SINTT
86 F2 = STEP * COS1T
87 F3 = STEP * TSINT * HP
88 F4 = -TET*COS1T
89 F5 = SINT
90 F6 = TET * COS1T * HP
91
92 VOUT(IX) = VECT(IX) + (F1*VECT(IPX) + F2*HXP(1) + F3*H(1))
93 VOUT(IY) = VECT(IY) + (F1*VECT(IPY) + F2*HXP(2) + F3*H(2))
94 VOUT(IZ) = VECT(IZ) + (F1*VECT(IPZ) + F2*HXP(3) + F3*H(3))
95
96 VOUT(IPX) = VECT(IPX) + (F4*VECT(IPX) + F5*HXP(1) + F6*H(1))
97 VOUT(IPY) = VECT(IPY) + (F4*VECT(IPY) + F5*HXP(2) + F6*H(2))
98 VOUT(IPZ) = VECT(IPZ) + (F4*VECT(IPZ) + F5*HXP(3) + F6*H(3))
99
100 GO TO 999
101
102 10 CONTINUE
103 DO 20 I = 1,3
104 VOUT(I) = VECT(I) + STEP * VECT(I+3)
105 VOUT(I+3) = VECT(I+3)
106 20 CONTINUE
107C
108 999 END