/[PAMELA software]/gpamela/gpspe/gpdspe.F
ViewVC logotype

Contents of /gpamela/gpspe/gpdspe.F

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3.8 - (show annotations) (download)
Sun Apr 9 23:29:19 2006 UTC (18 years, 7 months ago) by cafagna
Branch: MAIN
CVS Tags: v4r4, v4r5
Changes since 3.7: +32 -25 lines
Several new things, among this: ND and CARD

1 *
2 * $Id: gpdspe.F,v 3.7 2006/02/07 11:38:52 bottai Exp $
3 *
4 * $Log: gpdspe.F,v $
5 * Revision 3.7 2006/02/07 11:38:52 bottai
6 * test of mail delivery
7 *
8 * Revision 3.6 2006/02/06 14:17:21 bottai
9 * adapt again the resolution simulation to the ITRPB volume identification
10 *
11 * Revision 3.5 2006/01/24 13:52:01 bottai
12 * prepare to store the x and y multiplicity of the hit
13 *
14 * Revision 3.4 2006/01/18 09:41:33 bottai
15 * Some correction to the spe plane ID due to the new geometry tree
16 *
17 * Revision 3.3 2005/12/05 12:15:21 pam-ba
18 * new spectrometer geometry and internal magnetic field
19 *
20 * Revision 3.2 2005/07/25 11:53:21 cafagna
21 * Several updates. See history for details
22 *
23 * Revision 3.1.1.1 2002/07/11 16:02:13 cafagna
24 * First GPAMELA release on CVS
25 *
26 *
27 *CMZ : 2.01/00 05/04/2000 14.35.18 by Marialuigia Ambriola
28 *CMZ : 2.00/00 03/03/2000 15.39.06 by Francesco Cafagna
29 *CMZ : 1.02/00 19/01/2000 15.50.14 by Francesco Cafagna
30 *CMZ : 1.01/00 16/05/96 17.38.13 by Francesco Cafagna
31 *CMZ : 1.00/02 27/03/96 18.35.42 by Francesco Cafagna
32 *-- Author : Francesco Cafagna 23/02/96
33 SUBROUTINE GPDSPE
34 *************************************************************************
35 * *
36 * To perform SPE digitization *
37 * *
38 * Called by: GUDIGI *
39 * Author: Francesco Cafagna, 23/02/96 12.50.38 *
40 * *
41 *************************************************************************
42 #include "gcunit.inc"
43 #include "gpphit.inc"
44 PARAMETER (RADDEG=57.295779)
45 PARAMETER (NH=NHSPE,NHM=NHMSPE,NVOL=3)
46 #include "gppdigi.inc"
47 c +SEQ,GPDSPE.
48 #include "gprhit.inc"
49 #include "gpspe.inc"
50 #include "gpsed.inc"
51 #include "gpkey.inc"
52 *
53 INTEGER IS,ID,NV,NVM,GPNHIT,NTHIT,NHFRST
54 CHARACTER*4 CSET
55 LOGICAL CONT,HF
56 *
57 * Data block for digitalization
58 *
59 INTEGER NTRA,IDIG,LTRA,NPLANE,LKDN,NTDIGI,JJ
60 INTEGER KDIGI(4),NUMBVD(NVOL)
61 REAL XI,YI,XO,YO,PATH,DE,GPGAUS
62 REAL VPOS(3),BMAGNET(3),ANGLEX,ANGLEY,XMULT,YMULT,DXPOS,DYPOS
63 *
64 DATA NTRA,LTRA/1,1/
65 *
66 *
67 * Vector zeroed
68 *
69 CALL VZERO(ITRPB ,NHM)
70 CALL VZERO(ITRSL ,NHM)
71 CALL VZERO(ITSPA ,NHM)
72 CALL VZERO(XTSPA,NHM)
73 CALL VZERO(YTSPA,NHM)
74 CALL VZERO(ZTSPA,NHM)
75 CALL VZERO(XOTSPA,NHM)
76 CALL VZERO(YOTSPA,NHM)
77 CALL VZERO(ZOTSPA,NHM)
78 CALL VZERO(ERTSPA,NHM)
79 CALL VZERO(PATSPA,NHM)
80 CALL VZERO(NUMD ,NVOL)
81 CALL VZERO(NDPLAN,NDMSPE)
82 CALL VZERO(NDSIL ,NDMSPE)
83 CALL VZERO(NDISTR,NDMSPE)
84 CALL VZERO(NDIADC,NDMSPE)
85 *
86 CONT = .FALSE.
87 HF = .TRUE.
88 NTDIGI = 0
89 NDISPE = 0
90 NV = NVOL
91 NVM= NVMAX
92 IS = ISSPE
93 ID = IDTSPA
94 CSET = 'SPE '
95 IT = -1
96 *
97 * Get the total number of hits stored for TSPA detector
98 *
99 NTHIT = GPNHIT(CSET,CNSED(IS,ID) )
100 IF (NTHIT.GT.NHM) CONT=.TRUE.
101 *
102 * Check on the volume level
103 *
104 IF (NV.GT.NVM) THEN
105 WRITE(CHMAIL,10000) CSET,CNSED(IS,ID),NVOL,NVMAX,
106 + IDRUN,IDEVT
107 CALL GMAIL(1,0)
108 GO TO 20
109 ENDIF
110 CALL VZERO(VHITS,NH*NHM)
111 CALL VZERO(ITRA ,NHM)
112 CALL VZERO(NUMBV,NVOL*NHM)
113 NHITS = -1
114 NHFRST = 1
115 LKDN = 0
116 10 CALL GPRHIT(CSET,CNSED(IS,ID),IS,ID,NVOL,NH,NHM,NHFRST,
117 + IT,NUMD,ITRA,NUMBV,VHITS,NHITS)
118 *
119 * If there was a problem in GPRHIT then exit
120 *
121 IF(NHITS.LT.0.AND.(NHITS.NE.-(NHM+1)) ) THEN
122 WRITE(CHMAIL,10100) CSET,CNSED(IS,ID),NHITS,NHM,
123 + IDRUN,IDEVT
124 CALL GMAIL(1,0)
125 GO TO 20
126 ENDIF
127 IF( NHITS.EQ. -(NHM+1) ) NHITS = NHM
128 *
129 * Fill CWN entuple
130 *
131 NTHSPE = NHITS
132 DO I=1,NHITS
133 ITRPB(I) = NUMBV(1,I)
134 ITRSL(I) = NUMBV(2,I)
135 ITSPA(I) = NUMBV(3,I)
136 #if defined(GPAMELA_INTER)
137 XAVSPE(I) = VHITS(1,I)
138 YAVSPE(I) = VHITS(2,I)
139 ZAVSPE(I) = VHITS(3,I)
140 XOUTSPE(I) = VHITS(4,I)
141 YOUTSPE(I) = VHITS(5,I)
142 ZOUTSPE(I) = VHITS(6,I)
143 XINSPE(I) = 2*XAVSPE(I) - XOUTSPE(I)
144 YINSPE(I) = 2*YAVSPE(I) - YOUTSPE(I)
145 ZINSPE(I) = 2*ZAVSPE(I) - ZOUTSPE(I)
146 #endif
147 #if !defined(GPAMELA_INTER)
148 XINSPE(I) = VHITS(1,I)
149 YINSPE(I) = VHITS(2,I)
150 ZINSPE(I) = VHITS(3,I)
151 XOUTSPE(I) = VHITS(4,I)
152 YOUTSPE(I) = VHITS(5,I)
153 ZOUTSPE(I) = VHITS(6,I)
154 XAVSPE(I) = (XINSPE(I)+XOUTSPE(I))/2.
155 YAVSPE(I) = (YINSPE(I)+YOUTSPE(I))/2.
156 ZAVSPE(I) = (ZINSPE(I)+ZOUTSPE(I))/2.
157 #endif
158 ERELSPE(I) = VHITS(7,I)
159 PATHSPE(I) = VHITS(8,I)
160 IPARSPE(I) = VHITS(9,I)
161 P0SPE (I) = VHITS(10,I)
162 IF(FFIELD.NE.0) THEN
163 C
164 C ADD RESOLUTION SIMULATION TO XAVSPE
165 C
166 ANGLEX=0.
167 ANGLEY=0.
168 IF(ZOUTSPE(I).NE.ZINSPE(I)) THEN
169 ANGLEX=RADDEG*ATAN( ABS(XOUTSPE(I)-XINSPE(I) )/
170 + ABS(ZOUTSPE(I)-ZINSPE(I) ) )
171 ANGLEY=RADDEG*ATAN( ABS(YOUTSPE(I)-YINSPE(I) )/
172 + ABS(ZOUTSPE(I)-ZINSPE(I) ) )
173 ENDIF
174
175 VPOS(1)=XAVSPE(I)
176 VPOS(2)=YAVSPE(I)
177 VPOS(3)=ZAVSPE(I)
178 CALL GUFLD(VPOS,BMAGNET)
179
180 CALL GPRSPE(ANGLEX,ANGLEY,BMAGNET,XMULT,YMULT,DXPOS,DYPOS)
181
182 NXMULT(I)=INT(XMULT)
183 NYMULT(I)=INT(YMULT)
184
185 XAVSPE(I) = XAVSPE(I) + DXPOS
186 YAVSPE(I) = YAVSPE(I) + DYPOS
187
188 C
189 C ADD THE SHIFT INDUCED BY THE MAG. FIELD
190 C
191
192 IF(ITRPB(I).LT.6) THEN
193 XAVSPE(I) = XAVSPE(I) - 2.64e-4/4.5*BMAGNET(2)
194 ELSE IF(ITRPB(I).EQ.6) THEN
195 XAVSPE(I) = XAVSPE(I) + 2.64e-4/4.5*BMAGNET(2)
196 ENDIF
197 ENDIF
198 ENDDO
199
200 *
201 * Loop on the hits retrived to fill the CWN common and the DIGI b
202 *
203 C fc IF (HF) NTHSPE = NHITS
204 C fc DO I=1,NHITS
205 C fc *
206 C fc * Start DIGI action
207 C fc *
208 C fc NPLANE=NUMBV(3,I)
209 C fc XI=VHITS(1,I)
210 C fc YI=VHITS(2,I)
211 C fc ZI=VHITS(3,I)
212 C fc XO=VHITS(4,I)
213 C fc YO=VHITS(5,I)
214 C fc ZO=VHITS(6,I)
215 C fc +SELF,IF=INTER
216 C fc * interactive case: we need the track edges
217 C fc XI=2.*XI-XO
218 C fc YI=2.*YI-YO
219 C fc ZI=2.*ZI-ZO
220 C fc +SELF.
221 C fc PATH=VHITS(8,I)
222 C fc DE=VHITS(7,I)
223 C fc IF(DE.GT.0.) THEN
224 C fc DO J=1,6
225 C fc NUMBVD(J)=NUMBV(J,I)
226 C fc ENDDO
227 C fc c+SELF,IF=PAOLO
228 C fc c CALL GPSPEHD(I,NPLANE,XI,YI,ZI,XO,YO,ZO,PATH,DE,LKDN)
229 C fc c+SELF
230 C fc c+SELF,IF=-PAOLO
231 C fc c CALL GPSPEHD(I,NUMBVD,NVSPE,XI,YI,ZI,XO,YO,ZO,PATH,DE,LKDN)
232 C fc c+SELF.
233 C fc NTDIGI = LKDN
234 C fc ENDIF
235 C fc *
236 C fc * Fill CWN common
237 C fc *
238 C fc IF(HF) THEN
239 C fc ITRPB(I) = NUMBV((NVSPE-3),I)
240 C fc ITRSL(I) = NUMBV((NVSPE-1),I)
241 C fc ITSPA(I) = NUMBV(NVSPE,I)
242 C fc XTSPA(I) = VHITS(1,I)
243 C fc YTSPA(I) = VHITS(2,I)
244 C fc ZTSPA(I) = VHITS(3,I)
245 C fc XOTSPA(I) = VHITS(4,I)
246 C fc YOTSPA(I) = VHITS(5,I)
247 C fc ZOTSPA(I) = VHITS(6,I)
248 C fc ERTSPA(I) = VHITS(7,I)
249 C fc PATSPA(I) = VHITS(8,I)
250 C fc ENDIF
251 C fc IF(CONT) HF = .FALSE.
252 C fc ENDDO
253 C fc IF(CONT) THEN
254 C fc NHFRST = NHFRST + NHM
255 C fc IF( (NTHIT-NHFRST).LE.NHM) CONT=.FALSE.
256 C fc GO TO 10
257 C fc ENDIF
258 C fc *
259 C fc * fill digits with noise included
260 C fc *
261 C fc IF(LKDN.GE.1) THEN
262 C fc DO II=1,LKDN
263 C fc * plane=0 if the signal is lesser than 1 ADC
264 C fc IF(INT(RLKD4(II)*ADCX).LE.0.AND.LKD2(II).GE.1.
265 C fc + AND.LKD2(II).LE.3) LKD1(II)=0
266 C fc IF(INT(RLKD4(II)*ADCY).LE.0.AND.LKD2(II).GE.4.
267 C fc + AND.LKD2(II).LE.5) LKD1(II)=0
268 C fc *
269 C fc JJ=LKDH(II)+(NHFRST-1)
270 C fc * KDIGI(1)=LKD1(II)
271 C fc * KDIGI(2)=LKD2(II)
272 C fc KDIGI(1)=LKD2(II)
273 C fc KDIGI(2)=LKD3(II)
274 C fc * R1=RAN(IR)
275 C fc * R2=RAN(IR)
276 C fc * GRNDM0=SIN(2.*3.14159*R1)*SQRT(-2.*LOG(R2))
277 C fc GRNDM0 = GPGAUS(0.)
278 C fc IF(LKD2(II).GE.1.AND.LKD2(II).LE.3) THEN
279 C fc RLKD4(II)=RLKD4(II)+GRNDM0*ENOISX+PIEDX
280 C fc KDIGI(3)=INT(RLKD4(II)*ADCX)
281 C fc ENDIF
282 C fc IF(LKD2(II).GE.4.AND.LKD2(II).LE.5) THEN
283 C fc RLKD4(II)=RLKD4(II)+GRNDM0*ENOISY+PIEDY
284 C fc KDIGI(3)=INT(RLKD4(II)*ADCY)
285 C fc ENDIF
286 C fc C+SELF,IF=PAOLO
287 C fc DO J=1,NVOL
288 C fc NUMBVD(J)=NUMBV(J,JJ)
289 C fc ENDDO
290 C fc C+SELF
291 C fc LTRA=ITRA(JJ)
292 C fc IF(KDIGI(3).LT.0) KDIGI(3)=0
293 C fc IF(KDIGI(3).GE.1024) KDIGI(3)=1023
294 C fc IF(KDIGI(3).GT.0.AND.LKD1(II).GT.0) THEN
295 C fc CALL GSDIGI(IS,ID,LTRA,NTRA,NUMBVD,KDIGI,IDIG)
296 C fc IF (IDIG.EQ.0) THEN
297 C fc WRITE(CHMAIL,10200) CSET,CNSED(IS,ID),NVOL,KDIGI
298 C fc CALL GMAIL(1,0)
299 C fc GO TO 20
300 C fc ENDIF
301 C fc ENDIF
302 C fc *
303 C fc * Fills CWN
304 C fc *
305 C fc IF(HF) THEN
306 C fc IF(LKD2(II).GE.1.AND.LKD2(II).LE.3) KDIGIT=INT(RLKD4(II)*
307 C fc + ADCX)
308 C fc IF(LKD2(II).GE.4.AND.LKD2(II).LE.5) KDIGIT=INT(RLKD4(II)*
309 C fc + ADCY)
310 C fc IF(KDIGIT.GT.0.AND.LKD1(II).GT.0) THEN
311 C fc NDISPE=NDISPE+1
312 C fc IF (NDISPE.LE.NDMSPE) THEN
313 C fc NDPLAN(NDISPE)=LKD1(II)
314 C fc NDSIL (NDISPE)=LKD2(II)
315 C fc NDISTR(NDISPE)=LKD3(II)
316 C fc IF(KDIGIT.LT.1024) THEN
317 C fc NDIADC(NDISPE)=KDIGIT
318 C fc ELSE
319 C fc NDIADC(NDISPE)=1023
320 C fc ENDIF
321 C fc ENDIF
322 C fc ENDIF
323 C fc ENDIF
324 C fc ENDDO
325 C fc ENDIF
326 *
327 10000 FORMAT(' GPDSPE: VOLUME level too big: SET=',A4,', DET=',A4,',
328 + NVOL=',I3,', NVMAX=',I3,', RUN=',I5,', EVT=',I8)
329 10100 FORMAT(' GPDSPE: Error in GPRHIT: SET=',A4,
330 + ', DET=',A4,',NHITS=',I5,', NHMAX=',I5,
331 + ', RUN=',I5,', EVT=',I8)
332 10200 FORMAT(' GPDSPE: digitization ERROR: SET=',A4,', DET=',A4,',
333 + NVOL=',I3,', KDIGI=',4I4)
334 20 RETURN
335 END

  ViewVC Help
Powered by ViewVC 1.1.23