]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gtrak/gstrac.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / gtrak / gstrac.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.2 1996/02/27 10:30:56 ravndal
6* Correct interaction length for heavy ions
7*
8* Revision 1.1.1.1 1995/10/24 10:21:43 cernlib
9* Geant
10*
11*
12#include "geant321/pilot.h"
13*CMZ : 3.21/04 13/12/94 15.23.45 by S.Giani
14*-- Author :
15 SUBROUTINE GSTRAC
16C.
17C. ******************************************************************
18C. * *
19C. * SUBR. GSTRAC *
20C. * *
21C. * Stores in stack JTRACK the information for current track *
22C. * segment at exit of current Volume/Medium. *
23C. * *
24C. * Called by : GTRACK *
25C. * Authors : S.Banerjee, F.Bruyant *
26C. * *
27C. ******************************************************************
28C.
29#include "geant321/gcbank.inc"
30#include "geant321/gckine.inc"
31#include "geant321/gcnum.inc"
32#include "geant321/gcphys.inc"
33#include "geant321/gcstak.inc"
34#include "geant321/gctrak.inc"
35#include "geant321/gcunit.inc"
36#include "geant321/gcvolu.inc"
37 REAL XC(3)
38C.
39C. ------------------------------------------------------------------
40*
41* *** Find where in the tracking skeleton to enter the current track
42*
43 IF (NLEVIN.EQ.NLEVEL) THEN
44* (case when GINVOL has not been called)
45 JVO = LQ(JVOLUM-LVOLUM(NLEVIN))
46 IF (INGOTO.GT.0) THEN
47*
48* ** Point is in content predicted by GTNEXT, go one level down
49*
50 NLEVIN = NLEVIN +1
51 INFROM = 0
52 JIN = LQ(JVO-INGOTO)
53 IVOT = Q(JIN+2)
54 LVOLUM(NLEVIN) = IVOT
55 LINDEX(NLEVIN) = INGOTO
56 LINMX (NLEVIN) = Q(JVO+3)
57*
58* ** Prepare the translation and rotation matrices if necessary
59*
60 JSKL = LQ(JSKLT-NLEVIN)
61 IF (NLEVIN.GT.2) THEN
62 IOFF = IQ(JSKL-3)
63 DO 29 ILEV = 1, NLEVEL
64 IF (IQ(JSKL+IOFF+ILEV).NE.LINDEX(ILEV)) GO TO 30
65 29 CONTINUE
66 ENDIF
67 JSK = LQ(JSKL-INGOTO)
68 IF (IQ(JSK+1).GT.0) GO TO 100
69 30 IROTT = Q(JIN+4)
70 CALL GTRMUL (GTRAN(1,NLEVEL), GRMAT(1,NLEVEL), Q(JIN+5),
71 + IROTT, GTRAN(1,NLEVIN), GRMAT(1,NLEVIN))
72 GO TO 100
73 ELSE
74*
75* ** otherwise, go one level up
76*
77 NLEVIN = NLEVIN -1
78*
79 ENDIF
80*
81 ELSE IF (NLEVIN.GT.NLEVEL) THEN
82 INFROM = 0
83 GO TO 100
84*
85 ELSE IF (NLEVIN.LT.0) THEN
86* (case when entering a dominant overlaping volume)
87 NLEVIN = -NLEVIN
88 INFROM = LINDEX(NLEVIN+1)
89 GO TO 100
90 ENDIF
91*
92* ** Track has left current volume, check levels up
93*
94 80 IF (NLEVIN.EQ.0) GO TO 999
95*
96 IF (GRMAT(10,NLEVIN).EQ.0.) THEN
97 DO 88 I = 1,3
98 XC(I) = VECT(I) -GTRAN(I,NLEVIN)
99 88 CONTINUE
100 ELSE
101C (later, code in line)
102 CALL GTRNSF (VECT, GTRAN(1,NLEVIN), GRMAT(1,NLEVIN), XC)
103 ENDIF
104*
105 JVO = LQ(JVOLUM-LVOLUM(NLEVIN))
106 JPAR = LQ(JGPAR-NLEVIN)
107 CALL GINME (XC, Q(JVO+2), Q(JPAR+1), IYES)
108 IF (IYES.NE.0) THEN
109 INFROM = LINDEX(NLEVIN+1)
110 ELSE
111 NLEVIN = NLEVIN -1
112 GO TO 80
113 ENDIF
114*
115* *** Allocate last 'garbaged' area if any, otherwise first 'free' one
116*
117 100 IF (NJGARB.NE.0) THEN
118 NCUR = NJGARB
119 LCUR = JTRACK +(NCUR-1)*NWTRAC
120 NJGARB = IQ(LCUR+1)
121 ELSE
122 NCUR = NJFREE
123 LCUR = JTRACK +(NCUR-1)*NWTRAC
124 NJFREE = NCUR +1
125 ENDIF
126*
127* *** Link allocated area to relevant chain in JSKLT structure
128*
129 JSKL = LQ(JSKLT-NLEVIN)
130 IQ(LCUR+1) = IQ(JSKL+LINDEX(NLEVIN))
131 IQ(JSKL+LINDEX(NLEVIN)) = NCUR
132*
133* *** Store information for current track segment in stack JTRACK
134*
135 IQ(LCUR+2) = 0
136 IQ(LCUR+3) = NTMULT
137 IQ(LCUR+4) = ITRA
138 IQ(LCUR+5) = ISTAK
139 IQ(LCUR+6) = IPART
140 IQ(LCUR+7) = NSTEP
141*free IQ(LCUR+8) = IDECAD
142 IQ(LCUR+9) = IEKBIN
143 IQ(LCUR+10)= ISTORY
144 IQ(LCUR+11)= INFROM
145*
146 IPCUR = LCUR +NWINT
147 DO 109 I = 1,7
148 Q(IPCUR+I) = VECT(I)
149 109 CONTINUE
150 Q(IPCUR+8) = GEKIN
151 Q(IPCUR+9) = SLENG
152 Q(IPCUR+10) = GEKRAT
153 Q(IPCUR+11) = TOFG
154 Q(IPCUR+12) = UPWGHT
155*
156 IPCUR = IPCUR +NWREAL
157 IF (ITRTYP.EQ.1) THEN
158* Photons
159 Q(IPCUR+1) = ZINTPA
160 Q(IPCUR+2) = ZINTCO
161 Q(IPCUR+3) = ZINTPH
162 Q(IPCUR+4) = ZINTPF
163 Q(IPCUR+5) = ZINTRA
164 ELSE IF (ITRTYP.EQ.2) THEN
165* Electrons
166 Q(IPCUR+1) = ZINTBR
167 Q(IPCUR+2) = ZINTDR
168 Q(IPCUR+3) = ZINTAN
169 ELSE IF (ITRTYP.EQ.3) THEN
170* Neutral hadrons
171 Q(IPCUR+1) = SUMLIF
172 Q(IPCUR+2) = ZINTHA
173 ELSE IF (ITRTYP.EQ.4) THEN
174* Charged hadrons
175 Q(IPCUR+1) = SUMLIF
176 Q(IPCUR+2) = ZINTHA
177 Q(IPCUR+3) = ZINTDR
178 ELSE IF (ITRTYP.EQ.5) THEN
179* Muons
180 Q(IPCUR+1) = SUMLIF
181 Q(IPCUR+2) = ZINTBR
182 Q(IPCUR+3) = ZINTPA
183 Q(IPCUR+4) = ZINTDR
184 Q(IPCUR+5) = ZINTMU
185 ELSE IF (ITRTYP.EQ.7) THEN
186* Cerenkov photons
187 Q(IPCUR+1) = ZINTLA
188 ELSE IF (ITRTYP.EQ.8) THEN
189* Ions
190 Q(IPCUR+1) = ZINTHA
191 Q(IPCUR+2) = ZINTDR
192 ENDIF
193*
194* *** Take care of the skeleton
195*
196 IF (NLEVIN.GT.NLDOWN) THEN
197 NLDOWN = NLEVIN
198 JSKL = LQ(JSKLT-NLDOWN)
199*
200* ** Clear skeleton at lowest level if necessary
201*
202 JOFF = JSKL + IQ(JSKL-3)
203 DO 229 ILEV = 1, NLDOWN-1
204 IF (IQ(JOFF+ILEV).EQ.LINDEX(ILEV)) GO TO 229
205 NINSK = LINMX(NLDOWN)
206 DO 209 IN = 1, NINSK
207 JSK = LQ(JSKL-IN)
208 IQ(JSK+1) = 0
209 209 CONTINUE
210 DO 219 I = ILEV, NLDOWN-1
211 IQ(JOFF+I) = LINDEX(I)
212 219 CONTINUE
213 GO TO 230
214 229 CONTINUE
215 ENDIF
216*
217* ** Fill up the skeleton at NLDOWN
218*
219 230 IF (NLEVIN.GT.NLEVEL) THEN
220 JSKL = LQ(JSKLT-NLDOWN)
221 JSK = LQ(JSKL-LINDEX(NLDOWN))
222 IF (IQ(JSK+1).LE.0) THEN
223 LQ(JSK-1) = LQ(JGPAR-NLDOWN)
224 IQ(JSK+1) = IQ(JGPAR+NLDOWN)
225 IQ(JSK+2) = LVOLUM(NLDOWN)
226 DO 239 I = 1, 3
227 Q(JSK+2+I) = GTRAN(I,NLDOWN)
228 239 CONTINUE
229 DO 249 I = 1, 10
230 Q(JSK+5+I) = GRMAT(I,NLDOWN)
231 249 CONTINUE
232 ENDIF
233*
234 ENDIF
235*
236* *** Update NALIVE and test if tracking stack is full
237*
238 NALIVE = NALIVE + 1
239 IF (NALIVE-IQ(JSTAK+1).GE.NJTMAX) THEN
240 WRITE (CHMAIL, 1001)
241 CALL GMAIL (0, 0)
242 NJTMAX = -NJTMAX
243 NLVSAV = NLEVEL
244 DO 309 I = 2,NLDOWN
245 LINSAV(I) = LINDEX(I)
246 LMXSAV(I) = LINMX(I)
247 309 CONTINUE
248 ENDIF
249*
250 1001 FORMAT (' GSTRAC : Stack JTRACK full. Inhibit parallel tracking')
251* END GSTRAC
252 999 END
253