]> git.uio.no Git - u/mrichter/AliRoot.git/blob - GEANT321/gtrak/gskpho.F
New protections added
[u/mrichter/AliRoot.git] / GEANT321 / gtrak / gskpho.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1999/05/18 15:55:21  fca
6 * AliRoot sources
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/02 03/07/94  19.07.28  by  S.Giani
14 *-- Author :
15       SUBROUTINE GSKPHO (IGK)
16 C.
17 C.    ******************************************************************
18 C.    *                                                                *
19 C.    *                                                                *
20 C.    *   Stores in stack JSTAK either the IGKth Cherenkov photon of   *
21 C.    *   /GCKIN2/, or the NPHOT tracks when IGK is 0.                 *
22 C.    *                                                                *
23 C.    *   Called by : 'User'                                           *
24 C.    *   Authors   : F.Carminati                                      *
25 C.    *                                                                *
26 C.    ******************************************************************
27 C.
28 #include "geant321/gcbank.inc"
29 #include "geant321/gcjloc.inc"
30 #include "geant321/gcking.inc"
31 #include "geant321/gcnum.inc"
32 #include "geant321/gcunit.inc"
33 #include "geant321/gctrak.inc"
34 #include "geant321/gcmzfo.inc"
35 #include "geant321/gcstak.inc"
36 #include "geant321/gckine.inc"
37 *
38       PARAMETER (NWPOLA=3)
39 C.
40 C.    ------------------------------------------------------------------
41 C.
42 *
43 * *** Make sure the request is reasonable
44       IF (NGPHOT.LE.0) GO TO 999
45       IF (IGK.EQ.0) THEN
46          N1 = 1
47          N2 = NGPHOT
48       ELSE
49          IF (IGK.LT.0.OR.IGK.GT.NGPHOT) THEN
50             WRITE(CHMAIL,10000) IGK, NGPHOT
51 10000 FORMAT(' **** GSKPHO: ',I6,'th photon requested, ',
52      + I6,' in stack')
53             CALL GMAIL(0,0)
54             GO TO 999
55          ENDIF
56          N1 = IGK
57          N2 = IGK
58       ENDIF
59 *
60 * *** Store photons in stack JSTAK
61 *
62 * *** Check that the bank is there and big enough
63       IF (JSTAK.EQ.0) THEN
64          NDBOOK = NTSTKP*NWSTAK +3
65          NDPUSH = NTSTKS*NWSTAK
66          CALL MZBOOK (IXCONS,JSTAK,JSTAK,1,'STAK', 1,1,NDBOOK, IOSTAK,3)
67          IQ(JSTAK+2) = NTSTKP
68       ENDIF
69       IF(IQ(JSTAK-2).EQ.0) THEN
70          CALL MZPUSH(IXCONS,JSTAK,1,0,'I')
71       ENDIF
72       IF(LQ(JSTAK-1).EQ.0) THEN
73          CALL MZBOOK(IXCONS,JPOLAR,JSTAK,-1,'POLA',0,0,
74      +               NTSTKP*NWPOLA,3,-1)
75       ENDIF
76       MISSNG=IQ(JSTAK+1)+N2-N1+1-IQ(JSTAK+2)
77       IF (MISSNG.GT.0) THEN
78          CALL MZPUSH (IXCONS, JSTAK, 0, MISSNG*NWSTAK+NDPUSH, 'I')
79          IQ(JSTAK+2) = IQ(JSTAK+2) +NTSTKS+MISSNG
80       ENDIF
81       MSSPOL = IQ(JSTAK+1)+N2-N1+1-IQ(JPOLAR-1)/3
82       IF(MSSPOL.GT.0) THEN
83          CALL MZPUSH (IXCONS,JPOLAR,0,(NTSTKS+MSSPOL)*NWPOLA, 'I')
84       ENDIF
85 *
86 * *** Now we can go
87       DO 20  NN=N1,N2
88          JST = JSTAK  +IQ(JSTAK+1)*NWSTAK +3
89          JPO = JPOLAR +IQ(JSTAK+1)*NWPOLA
90          IQ(JSTAK+1) = IQ(JSTAK+1) +1
91          IF (IQ(JSTAK+3).EQ.0) IQ(JSTAK+3) = IQ(JSTAK+1)
92          IF (IQ(JSTAK+1).GT.NSTMAX) NSTMAX = IQ(JSTAK+1)
93 *
94          IQ(JST+1) = -ITRA
95          IQ(JST+2) = IPART
96          IQ(JST+3) = 0
97          DO 10 I = 1,3
98             Q(JST+3+I) = XPHOT(I  ,NN)
99             Q(JST+6+I) = XPHOT(I+3,NN)*XPHOT(7,NN)
100             Q(JPO+  I) = XPHOT(I+7,NN)
101    10    CONTINUE
102          Q(JST+10) = XPHOT(11,NN)
103          Q(JST+11) = SAFETY
104          Q(JST+12) = UPWGHT
105 *
106          NALIVE = NALIVE +1
107    20 CONTINUE
108 *                                                             END GSKPHO
109   999 END