]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1995/10/24 10:21:10 cernlib | |
6 | * Geant | |
7 | * | |
8 | * | |
9 | #include "geant321/pilot.h" | |
10 | *CMZ : 3.21/02 29/03/94 15.41.20 by S.Giani | |
11 | *-- Author : | |
12 | SUBROUTINE GPHITS(IUSET,IUDET) | |
13 | C. | |
14 | C. ****************************************************************** | |
15 | C. * * | |
16 | C. * Prints HITS into detector IUDET of set IUSET * | |
17 | C. * * | |
18 | C. * If IPKHIT in /CGDRAW/ is greater than zero, * | |
19 | C. * only hit nr. IPKHIT is printed. * | |
20 | C. * * | |
21 | C. * JH=LQ(JHITS-ISET) * | |
22 | C. * JHD=LQ(JH-IDET) * | |
23 | C. * IQ(JH+IDET)= pointer to first free word in JHD * | |
24 | C. * Each hit is packed into JHD in the following format * | |
25 | C. * --Track number ITRA not packed * | |
26 | C. * --Volume numbers packed * | |
27 | C. * --Hits transformed and packed * | |
28 | C. * * | |
29 | C. * ==>Called by : <USER>, GPRINT ,<GXINT>, GINC4, GKHITS * | |
30 | C. * Authors : R.Brun ********** * | |
31 | C. * P.Zanarini * * | |
32 | C. * * | |
33 | C. ****************************************************************** | |
34 | C. | |
35 | #include "geant321/gcbank.inc" | |
36 | #include "geant321/gcunit.inc" | |
37 | #include "geant321/gcdraw.inc" | |
38 | PARAMETER (NHEMX=100,NVMAX=20) | |
39 | DIMENSION HITS(NHEMX),KWS(120),NUMBV(NVMAX) | |
40 | EQUIVALENCE (WS(1),NUMBV(1)),(WS(101),HITS(1)),(WS(201),KWS(1)) | |
41 | CHARACTER*4 IUSET,IUDET | |
42 | C. | |
43 | C. ------------------------------------------------------------------ | |
44 | C. | |
45 | IF(JHITS.LE.0)GO TO 999 | |
46 | NSET=IQ(JSET-1) | |
47 | NS1=1 | |
48 | NS2=NSET | |
49 | IF(IUSET(1:1).NE.'*')THEN | |
50 | CALL GLOOK(IUSET,IQ(JSET+1),NSET,ISET) | |
51 | IF(ISET.LE.0)GO TO 999 | |
52 | NS1=ISET | |
53 | NS2=ISET | |
54 | ENDIF | |
55 | C | |
56 | C loop on all selected sets | |
57 | C | |
58 | DO 130 ISET=NS1,NS2 | |
59 | JS=LQ(JSET-ISET) | |
60 | JH=LQ(JHITS-ISET) | |
61 | IF(JS.LE.0)GO TO 130 | |
62 | IF(JH.LE.0)GO TO 130 | |
63 | NDET=IQ(JS-1) | |
64 | ND1=1 | |
65 | ND2=NDET | |
66 | IF(IUDET(1:1).NE.'*')THEN | |
67 | CALL GLOOK(IUDET,IQ(JS+1),NDET,IDET) | |
68 | IF(IDET.EQ.0)GO TO 130 | |
69 | ND1=IDET | |
70 | ND2=IDET | |
71 | ENDIF | |
72 | C | |
73 | C loop on selected detectors for this set | |
74 | C | |
75 | DO 120 IDET=ND1,ND2 | |
76 | JD=LQ(JS-IDET) | |
77 | JHD=LQ(JH-IDET) | |
78 | IF(JHD.LE.0)GO TO 120 | |
79 | JDH=LQ(JD-1) | |
80 | C | |
81 | WRITE(CHMAIL,1000)IQ(JS+IDET),IQ(JSET+ISET) | |
82 | CALL GMAIL(1,1) | |
83 | C | |
84 | ILAST=IQ(JH+IDET) | |
85 | IF(ILAST.EQ.0)GO TO 120 | |
86 | NV=IQ(JD+2) | |
87 | NH=IQ(JD+4) | |
88 | NW=IQ(JD+1)+IQ(JD+3)+1 | |
89 | C | |
90 | CALL VBLANK(KWS,120) | |
91 | K=0 | |
92 | IF(NV.GT.0) THEN | |
93 | C Number of printed elements limited to 9 | |
94 | NVM=MIN(NV,NVMAX) | |
95 | DO 22 I=1,NVM | |
96 | CALL UBLOW(IQ(JD+2*I+9),KWS(K+1),4) | |
97 | K=K+5 | |
98 | 22 CONTINUE | |
99 | ENDIF | |
100 | IF(NH.GT.0)THEN | |
101 | K=K+5 | |
102 | IP0 = K | |
103 | NHM=MIN(NH,NHEMX) | |
104 | DO 26 I=1,NHM | |
105 | IF(K.GT.110)GO TO 26 | |
106 | NH1=I | |
107 | CALL UBLOW(IQ(JDH+4*I-3),KWS(K+1),4) | |
108 | K=K+10 | |
109 | 26 CONTINUE | |
110 | ENDIF | |
111 | WRITE(CHMAIL,2000)(KWS(I),I=1,K) | |
112 | CALL GMAIL(0,0) | |
113 | C | |
114 | IF(NH.GT.0)THEN | |
115 | IF(NH1.LT.NHM)THEN | |
116 | CALL VBLANK(KWS,IP0) | |
117 | DO 40 NHP1=NH1+1,NHM,NH1 | |
118 | NHP2=NHP1+NH1-1 | |
119 | NHP2=MIN(NHP2,NHM) | |
120 | K=IP0 | |
121 | DO 30 I=NHP1,NHP2 | |
122 | CALL UBLOW(IQ(JDH+4*I-3),KWS(K+1),4) | |
123 | K=K+10 | |
124 | 30 CONTINUE | |
125 | WRITE(CHMAIL,2100)(KWS(I),I=1,K) | |
126 | CALL GMAIL(0,0) | |
127 | 40 CONTINUE | |
128 | ENDIF | |
129 | ENDIF | |
130 | C | |
131 | C Now loop on all hits to get volume numbers and hits | |
132 | C | |
133 | IHIT=0 | |
134 | DO 110 I=1,ILAST,NW | |
135 | IHIT=IHIT+1 | |
136 | C | |
137 | C IPKHIT in /CGDRAW/ is used to print just that hit | |
138 | C | |
139 | IF (IPKHIT.GT.0.AND.IHIT.NE.IPKHIT) GO TO 110 | |
140 | C | |
141 | ITRA=IQ(JHD+I) | |
142 | C | |
143 | C Get unpacked volume numbers | |
144 | C | |
145 | NK=1 | |
146 | IF(NV.GT.0)THEN | |
147 | K=1 | |
148 | DO 50 IV=1,NVM | |
149 | NB=IQ(JD+2*IV+10) | |
150 | IF(NB.LE.0)THEN | |
151 | IF(K.GT.1)THEN | |
152 | K=1 | |
153 | NK=NK+1 | |
154 | ENDIF | |
155 | NUMBV(IV)=IQ(JHD+I+NK) | |
156 | IF(IV.NE.NV)NK=NK+1 | |
157 | ELSE | |
158 | IF(K+NB.GT.33)THEN | |
159 | K=1 | |
160 | NK=NK+1 | |
161 | ENDIF | |
162 | NUMBV(IV)=IBITS(IQ(JHD+I+NK),K-1,NB) | |
163 | K=K+NB | |
164 | ENDIF | |
165 | 50 CONTINUE | |
166 | NK=NK+1 | |
167 | ENDIF | |
168 | C | |
169 | C Get unpacked hits | |
170 | C Hits origin is shifted . Division by scale factor | |
171 | C | |
172 | IF(NH.GT.0)THEN | |
173 | K=1 | |
174 | DO 90 IH=1,NHM | |
175 | NB=IQ(JDH+4*IH-2) | |
176 | IF(NB.LE.0)THEN | |
177 | IF(K.GT.1)THEN | |
178 | NK=NK+1 | |
179 | ENDIF | |
180 | KHIT=IQ(JHD+I+NK) | |
181 | K=1 | |
182 | NK=NK+1 | |
183 | ELSE | |
184 | IF(K+NB.GT.33)THEN | |
185 | K=1 | |
186 | NK=NK+1 | |
187 | ENDIF | |
188 | KHIT=IBITS(IQ(JHD+I+NK),K-1,NB) | |
189 | K=K+NB | |
190 | ENDIF | |
191 | HITS(IH)=FLOAT(KHIT)/Q(JDH+4*IH) - Q(JDH+4*IH-1) | |
192 | 90 CONTINUE | |
193 | ENDIF | |
194 | C | |
195 | WRITE(CHMAIL,3000)IHIT,ITRA,(NUMBV(L),L=1,NV) | |
196 | IF(NH.GT.0)THEN | |
197 | IP0=NV*5+15 | |
198 | DO 100 NHP1=1,NHM,NH1 | |
199 | NHP2=NHP1+NH1-1 | |
200 | NHP2=MIN(NHP2,NHM) | |
201 | WRITE(CHMAIL(IP0+1:),4000)(HITS(L),L=NHP1,NHP2) | |
202 | CALL GMAIL(0,0) | |
203 | CHMAIL(1:IP0)=' ' | |
204 | 100 CONTINUE | |
205 | ENDIF | |
206 | C | |
207 | IF(IHIT.EQ.IPKHIT)GO TO 999 | |
208 | C | |
209 | 110 CONTINUE | |
210 | 120 CONTINUE | |
211 | 130 CONTINUE | |
212 | C | |
213 | 1000 FORMAT(' =====>HITS IN DETECTOR ** ',A4, | |
214 | +' ** OF SET ** ',A4,' **') | |
215 | 2000 FORMAT(' HIT TRACK ',120A1) | |
216 | 2100 FORMAT(12X,120A1) | |
217 | 3000 FORMAT(1X,I4,I6,20I5) | |
218 | 4000 FORMAT(12(G10.3)) | |
219 | 999 RETURN | |
220 | END |