5 * Revision 1.1.1.1 1995/10/24 10:21:43 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.23 by S.Giani
12 SUBROUTINE GSSTAK (IFLAG)
14 C. ******************************************************************
16 C. * SUBR. GSSTAK (IFLAG) *
18 C. * Stores in auxiliary stack JSTAK the particle currently *
19 C. * described in common /GCKINE/. *
21 C. * On request, creates also an entry in structure JKINE : *
23 C. * 0 : No entry in JKINE structure required (user) *
24 C. * 1 : New entry in JVERTX / JKINE structures required (user) *
25 C. * <0 : New entry in JKINE structure at vertex -IFLAG (user) *
26 C. * 2 : Entry in JKINE structure exists already (from GTREVE) *
28 C. * Called by : GSKING, GTREVE *
29 C. * Author : S.Banerjee, F.Bruyant *
31 C. ******************************************************************
33 #include "geant321/gcbank.inc"
34 #include "geant321/gckine.inc"
35 #include "geant321/gcjloc.inc"
36 #include "geant321/gcmzfo.inc"
37 #include "geant321/gcnum.inc"
38 #include "geant321/gcstak.inc"
39 #include "geant321/gctrak.inc"
40 #if defined(CERNLIB_USRJMP)
41 #include "geant321/gcjump.inc"
44 COMMON/VTXKIN/NVTX,ITR
48 C. ------------------------------------------------------------------
50 IF (IPART.LE.0.OR.IPART.GT.NPART) THEN
51 PRINT *, ' GSSTAK - Unknown particle code, skip track ', IPART
55 * *** Give control to user for track selection
57 #if !defined(CERNLIB_USRJMP)
60 #if defined(CERNLIB_USRJMP)
61 CALL JUMPT1(JUSKIP,ISKIP)
63 IF (ISKIP.NE.0) GO TO 999
65 * *** Check if an entry in JKINE structure is required
68 CALL GSVERT (VERT, ITRA, 0, UBUF, 0, NVTX)
69 CALL GSKINE (PVERT, IPART, NVTX, UBUF, 0, ITR)
70 ELSE IF (IFLAG.LT.0) THEN
72 CALL GSKINE (PVERT, IPART, NVTX, UBUF, 0, ITR)
75 * Store -ITRA in stack for a track without entry in JKINE
82 * *** Store information in stack
85 NDBOOK = NTSTKP*NWSTAK +3
86 NDPUSH = NTSTKS*NWSTAK
87 CALL MZBOOK (IXCONS,JSTAK,JSTAK,1,'STAK', 0,0,NDBOOK, IOSTAK,3)
89 ELSE IF (IQ(JSTAK+1).EQ.IQ(JSTAK+2)) THEN
90 CALL MZPUSH (IXCONS, JSTAK, 0, NDPUSH, 'I')
91 IQ(JSTAK+2) = IQ(JSTAK+2) +NTSTKS
94 JST = JSTAK +IQ(JSTAK+1)*NWSTAK +3
95 IQ(JSTAK+1) = IQ(JSTAK+1) +1
96 IF (IQ(JSTAK+3).EQ.0) IQ(JSTAK+3) = IQ(JSTAK+1)
97 IF (IQ(JSTAK+1).GT.NSTMAX) NSTMAX = IQ(JSTAK+1)
104 Q(JST+6+I) = PVERT(I)