This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / gdraw / gdchit.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:20:21  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 29/03/94  15.41.26  by  S.Giani
11 *-- Author :
12       SUBROUTINE GDCHIT (IUSET,IUDET,ITRS,ISYMB,SIZMAX,KDHIT,
13      +                   HITMIN,HITMAX)
14 C.
15 C.    ******************************************************************
16 C.    *                                                                *
17 C.    *       Draw Calorimetry Hits of track ITRS in detector IUDET    *
18 C.    *       of set IUSET, in case that the spatial coordinates       *
19 C.    *       of the HITS had been stored as the first three words     *
20 C.    *       in the argument vector of GSAHIT.                        *
21 C.    *                                                                *
22 C.    *       The following characters may be chosen :                 *
23 C.    *          ISYMB = -1   hardware character    (fast),            *
24 C.    *                =  0   crosses X by TVDRAW   (default),         *
25 C.    *                       (size = SSYMB in cm, default = 0.1),     *
26 C.    *                = 840  characters by HPLSOF                     *
27 C.    *                   .   according to the table p. 25             *
28 C.    *                   .   of the HPLOT manual                      *
29 C.    *                  853  (size = SSYMB in cm)                     *
30 C.    *             (844,854  white, black asterisk * in addition).    *
31 C.    *                                                                *
32 C.    *       SIZMAX is the maximum character size                     *
33 C.    *                                                                *
34 C.    *       KDHIT is the hit number selected : the character size    *
35 C.    *       is a function of HITS(KDHIT) and HITMIN and HITMAX are   *
36 C.    *       its limits                                               *
37 C.    *                                                                *
38 C.    *                                                                *
39 C.    *       JH =LQ(JHITS-ISET)                                       *
40 C.    *       JHD=LQ(JH-IDET)                                          *
41 C.    *       IQ(JH+IDET)=pointer to the LAST USED word in JHD         *
42 C.    *         Each hit was packed into JHD in the following format:  *
43 C.    *        --Track number ITRA not packed;                         *
44 C.    *        --Volume numbers packed;                                *
45 C.    *        --Hits transformed and packed.                          *
46 C.    *                                                                *
47 C.    *    ==>Called by : <USER>, <GXINT>                              *
48 C.    *       Authors : R.Brun, P.Zanarini   *********                 *
49 C.    *                                                                *
50 C.    ******************************************************************
51 C.
52 #include "geant321/gcbank.inc"
53 #include "geant321/gcdraw.inc"
54       DIMENSION HITS(3,10),ASIZE(10)
55       CHARACTER*4 IUSET,IUDET
56 C.
57 C.    ------------------------------------------------------------------
58 C.
59       CALL UCTOH('OFF ',IOFF,4,4)
60 C
61 C            Set IOBJ to HIT
62 C
63       IOBJ=3
64 C
65       IF (JHITS.LE.0)           GOTO 140
66       NSET = IQ(JSET-1)
67       NS1        = 1
68       NS2        = NSET
69       IF (IUSET(1:1).EQ.'*')   GOTO  10
70       CALL GLOOK(IUSET,IQ(JSET+1),NSET,ISET)
71       IF (ISET .LE.0)           GOTO 140
72       NS1        = ISET
73       NS2        = ISET
74    10 CONTINUE
75 C
76 C            loop on all selected sets
77 C
78       DO 130   ISET=NS1,NS2
79       JS = LQ(JSET-ISET)
80       JH = LQ(JHITS-ISET)
81       IF(JS.LE.0)GO TO 130
82       IF(JH.LE.0)GO TO 130
83       NDET = IQ(JS-1)
84       ND1        = 1
85       ND2        = NDET
86       IF (IUDET(1:1).EQ.'*')   GOTO  20
87       CALL GLOOK(IUDET,IQ(JS+1),NDET,IDET)
88       IF (IDET .EQ.0)   GOTO 130
89       ND1        = IDET
90       ND2        = IDET
91    20 CONTINUE
92 C
93 C            loop on selected detectors for this set
94 C
95       DO 120   IDET=ND1,ND2
96       JD = LQ(JS-IDET)
97       JHD = LQ(JH-IDET)
98       IF (JHD  .LE.0)   GOTO 120
99       JDH = LQ(JD-1)
100       ILAST = IQ(JH+IDET)
101       IF (ILAST.EQ.0)   GOTO 120
102       NV = IQ(JD+2)
103       NH = IQ(JD+4)
104       NW = IQ(JD+1) + IQ(JD+3) + 1
105 C
106 C            Now loop on all hits to get their space coordinates
107 C
108       MH         = 0
109       DO 110   I=1,ILAST,NW
110       ITRA = IQ(JHD+I)
111 C
112 C            Is this the right track ?
113 C
114       IF (ITRS.NE.0 .AND. ITRS.NE.ITRA) GOTO 110
115 C
116 C            Is THRZ option set on (R-Z projection)
117 C            and the cut lateral (vertical or horizontal) ?
118 C
119       IF (ITHRZ.NE.IOFF) THEN
120         IF (ICUT.EQ.1.OR.ICUT.EQ.2) ITR3D=-ITRA
121       ELSE
122         ITR3D=0
123       ENDIF
124 C
125 C            Skip words with volume numbers
126 C
127       NK         = 1
128       K          = 1
129       IF (NV.LE.0)      GOTO  40
130       DO 30   IV=1,NV
131       NB = IQ(JD+2*IV+10)
132       IF (NB.EQ.0)  NB=32
133       K          = NB + K
134       IF (K.LE.33)      GOTO  30
135       NK         = NK + 1
136       K          = NB + 1
137    30 CONTINUE
138       NK         = NK + 1
139 C
140 C            Get unpacked (first three !) HITS.
141 C            Hits origin is shifted. Division by scale factor.
142 C
143    40 CONTINUE
144       IF (NH.LE.2)      GOTO 110
145       MH         = MH + 1
146 C
147       IF (KDHIT.GT.3.AND.KDHIT.LE.10) THEN
148         KDH=KDHIT
149       ELSE
150         KDH=3
151         HITKH=0.
152       ENDIF
153 C
154       K=1
155       DO 80   IH=1,KDH
156       NB = IQ(JDH+4*IH-2)
157       IF (NB.GT.0)      GOTO  50
158       IF (K.GT.1) THEN
159         NK=NK+1
160       ENDIF
161       KHIT = IQ(JHD+I+NK)
162       K          = 1
163       NK         = NK + 1
164       GOTO  70
165    50 IF (K+NB.LE.33)   GOTO  60
166       K          = 1
167       NK         = NK + 1
168    60 KHIT = IBITS(IQ(JHD+I+NK),K-1,NB)
169       K          = K + NB
170    70 CONTINUE
171       IF (IH.LE.3) THEN
172         HITS(IH,MH)= FLOAT(KHIT)/Q(JDH+4*IH) - Q(JDH+4*IH-1)
173       ELSE
174         HITKH=FLOAT(KHIT)/Q(JDH+4*IH) - Q(JDH+4*IH-1)
175       ENDIF
176    80 CONTINUE
177 C
178 C             Compute symbol size
179 C
180       IF (HITMAX.LE.0) THEN
181         SSYMB=SIZMAX
182       ELSE
183         SSYMB=SIZMAX*(HITKH-HITMIN)/HITMAX
184         IF (SSYMB.GT.SIZMAX) SSYMB=SIZMAX
185 C
186 C             HPLSOF accepts a minimum SIZE of 0.001,
187 C             otherwise set SIZE=0.25 : protect here this case
188 C
189         IF (SSYMB.LT.0.0011) SSYMB=0.0011
190       ENDIF
191       ASIZE(MH)=SSYMB
192 C
193 C            Draw the hits (usually 10 at a time);
194 C            flush HITS vector if
195 C             --loop on this detector volume is to finish,
196 C             --loop on current track is to finish,
197 C             --HITS vector is full.
198 C
199       IF ((ILAST-I).LT.NW)   GOTO 90
200       ITRN = IQ(JHD+I+NW)
201       IF (ITRA.NE.ITRN)      GOTO 90
202       IF (MH  .NE.  10)      GOTO 110
203 C
204    90 CONTINUE
205 C
206       DO 100 II=1,MH
207         CALL GDAHIT(HITS(1,II),HITS(2,II),HITS(3,II),ISYMB,ASIZE(II))
208   100 CONTINUE
209       MH=0
210 C
211   110 CONTINUE
212   120 CONTINUE
213   130 CONTINUE
214   140 CONTINUE
215 C
216 C             Reset ITR3D to 'standard projection'
217 C
218       ITR3D=0
219       IOBJ=0
220 C
221       END