1 |
pam-fi |
1.1 |
************************************************************************ |
2 |
|
|
* |
3 |
|
|
* Program readraw.F |
4 |
|
|
* |
5 |
|
|
* Read downlink data files and unpacks tracker physics |
6 |
|
|
* event and calibration data |
7 |
|
|
* |
8 |
|
|
* |
9 |
|
|
* 10-11/9/2005 modified by david fedele to read buffer-data |
10 |
|
|
* instead raw-data-file |
11 |
|
|
* |
12 |
|
|
* 29/11/2005 modified by david fedele to include crc control |
13 |
|
|
************************************************************************* |
14 |
|
|
|
15 |
|
|
|
16 |
|
|
program readraw |
17 |
|
|
|
18 |
|
|
include '../common/commontracker.f' |
19 |
|
|
include '../common/common_readraw.f' |
20 |
|
|
include '../common/level0.f' |
21 |
|
|
include '../common/calib.f' |
22 |
|
|
|
23 |
|
|
include '../tof/common_tof.f' |
24 |
|
|
|
25 |
|
|
c------------------------------------------------------------------------ |
26 |
|
|
c |
27 |
|
|
c local variables |
28 |
|
|
c |
29 |
|
|
c------------------------------------------------------------------------ |
30 |
|
|
parameter (nfile_max=20) |
31 |
|
|
|
32 |
|
|
character*24 processing_date |
33 |
|
|
|
34 |
|
|
c local variables for input files |
35 |
|
|
character*60 name_temp |
36 |
|
|
character*2 aaa |
37 |
|
|
character*40 base_file(nfile_max) !base file name |
38 |
|
|
character*40 in_file(nfile_max) !input data file |
39 |
|
|
character*40 in_dir !input data dir |
40 |
|
|
character*40 out_dir !output dir |
41 |
|
|
character*60 out_file_level0 !output rz file (level 0) |
42 |
|
|
character*60 out_file_calib !output rz file (calibration) |
43 |
|
|
character*60 out_file_tof !output rz file (TOF) |
44 |
|
|
character*60 out_file_list !output text file (calib list) |
45 |
|
|
character*10 input_string(nfile_max) |
46 |
|
|
|
47 |
|
|
c local variables for data unpacking |
48 |
|
|
integer ffd !input file descriptor |
49 |
|
|
integer runerror !readevent error flag |
50 |
|
|
parameter (MAXBUFFLEN=z'172c8') |
51 |
|
|
integer*4 length_buffer |
52 |
|
|
integer*1 buffer(MAXBUFFLEN) |
53 |
|
|
integer curpos !current position in buffer |
54 |
|
|
c***************************************************** |
55 |
|
|
cccccc 29/11/2005 modified by david fedele |
56 |
|
|
integer startcrc |
57 |
|
|
integer stopcrc |
58 |
|
|
integer*1 crctemp |
59 |
|
|
c***************************************************** |
60 |
|
|
|
61 |
|
|
integer acq_build_info !runheader field telling which of the front-ends have been included in the acquisition in the run |
62 |
|
|
integer trk_calib_used !runheader field telling which kind of calibration has been used for the events of the run |
63 |
|
|
integer trk_calib_used_old |
64 |
|
|
|
65 |
|
|
logical DEBUG,ALARMs |
66 |
|
|
common/DEBUGflag/DEBUG,ALARMS |
67 |
|
|
|
68 |
|
|
logical trk_link(2) |
69 |
|
|
|
70 |
|
|
c flags |
71 |
|
|
integer last_CPU_pkt !to check pkt_num inside a downlink is consecutive |
72 |
|
|
integer last_CPU_pkt_loc !to check pkt_num inside a downlink is consecutive |
73 |
|
|
integer last_obt |
74 |
|
|
logical runheader |
75 |
|
|
logical runtrailer |
76 |
|
|
logical found_calib |
77 |
|
|
logical skip |
78 |
|
|
logical exitflag |
79 |
|
|
logical default_calib_written |
80 |
|
|
logical online_calib_written |
81 |
|
|
|
82 |
|
|
integer n_cal_pkt !count calibration packets |
83 |
|
|
|
84 |
|
|
integer calib_default |
85 |
|
|
integer calib_lastonline !store the identification number of the last calibration file |
86 |
|
|
|
87 |
|
|
character*40 calib_default_file !file containing the default calibration info |
88 |
|
|
data calib_default_file/'default_calib.rz'/ |
89 |
|
|
|
90 |
|
|
c local parameters |
91 |
|
|
parameter (lun_out_file_calib=50) !output file id number |
92 |
|
|
parameter (lun_out_file_level0=51) !output file id number |
93 |
|
|
parameter (lun_out_file_tof=52) !output file id number |
94 |
|
|
|
95 |
|
|
parameter (lun_in_file=53) !input file id number |
96 |
|
|
|
97 |
|
|
|
98 |
|
|
parameter (max_event_number=50000) !maximum number of events |
99 |
|
|
|
100 |
|
|
integer last_trigger(nviews) |
101 |
|
|
common/trigger_counter/last_trigger |
102 |
|
|
data last_trigger/12*0./ |
103 |
|
|
|
104 |
|
|
|
105 |
|
|
COMMON/QUEST/IQUEST(100) !permette di ottenere ntuple funzionanti nonostante |
106 |
|
|
! il messaggio dei 64K di RZOUT...!??? |
107 |
|
|
|
108 |
|
|
c***************************************************** |
109 |
|
|
cccccc 20/9/2005 modified by david fedele |
110 |
|
|
swcode=202 |
111 |
|
|
c***************************************************** |
112 |
|
|
c------------------------------------------------------------------------ |
113 |
|
|
c |
114 |
|
|
c HBOOK initialization |
115 |
|
|
c |
116 |
|
|
c------------------------------------------------------------------------ |
117 |
|
|
|
118 |
|
|
call HLIMIT(NWPAWC) |
119 |
|
|
|
120 |
|
|
|
121 |
|
|
c------------------------------------------------------------------------ |
122 |
|
|
c |
123 |
|
|
c reads input informations (through < go_readraw) |
124 |
|
|
c |
125 |
|
|
c------------------------------------------------------------------------ |
126 |
|
|
call fdate(processing_date) |
127 |
|
|
write(*,101) |
128 |
|
|
$ processing_date |
129 |
|
|
101 format(/ |
130 |
|
|
$ ,'*** *** *** *** *** *** *** *** *** *** *** *** ***',/ |
131 |
|
|
$ ,'* *',/ |
132 |
|
|
$ ,'* READRAW *',/ |
133 |
|
|
$ ,'* *',/ |
134 |
|
|
$ ,'*** *** *** *** *** *** *** *** *** *** *** *** ***',/ |
135 |
|
|
$ ,a24,/ |
136 |
|
|
$ ) |
137 |
|
|
|
138 |
|
|
print*,'Number of files to be analysed:' |
139 |
|
|
read(*,*)nfile |
140 |
|
|
print*,nfile |
141 |
|
|
|
142 |
|
|
499 format(A40) |
143 |
|
|
|
144 |
|
|
c in_dir='raw-data/' |
145 |
|
|
print*,'raw-data directory:' |
146 |
|
|
read(*,499)in_dir |
147 |
|
|
print*,in_dir |
148 |
|
|
|
149 |
|
|
|
150 |
|
|
print*,'List of file identifiers: (DATE_NUM)' |
151 |
|
|
300 format(A10) |
152 |
|
|
read(*,300)(input_string(i),i=1,nfile) |
153 |
|
|
do i=1,nfile |
154 |
|
|
print*,input_string(i) |
155 |
|
|
enddo |
156 |
|
|
|
157 |
|
|
401 format('DW_',A10) !base file name |
158 |
|
|
4401 format(a,'.dat') !input file name |
159 |
|
|
|
160 |
|
|
do i=1,nfile |
161 |
|
|
write(name_temp,401)input_string(i) |
162 |
|
|
base_file(i)=name_temp(1:LNBLNK(name_temp)) |
163 |
|
|
write(name_temp,4401) base_file(i)(1:LNBLNK(base_file(i))) |
164 |
|
|
in_file(i)=name_temp(1:LNBLNK(name_temp)) |
165 |
|
|
enddo |
166 |
|
|
|
167 |
|
|
print*,'output directory:' |
168 |
|
|
read(*,499)out_dir |
169 |
|
|
print*,out_dir |
170 |
|
|
|
171 |
|
|
print*,'Maximum number of events to be analized:' |
172 |
|
|
read(*,*)nev_total |
173 |
|
|
print*,nev_total |
174 |
|
|
print*,'---------------------------------------------------' |
175 |
|
|
|
176 |
|
|
*------------------------------------------------------------- |
177 |
|
|
* init |
178 |
|
|
* (some flags to check the data stream) |
179 |
|
|
*------------------------------------------------------------ |
180 |
|
|
last_CPU_pkt = 0 |
181 |
|
|
last_obt = 0 |
182 |
|
|
iev_total=0 !total number of events |
183 |
|
|
found_calib=.false. |
184 |
|
|
trk_link(1)=.false. |
185 |
|
|
trk_link(2)=.false. |
186 |
|
|
|
187 |
|
|
c trk_calib_used=0 |
188 |
|
|
which_calib=0 |
189 |
|
|
calib_default=0 |
190 |
|
|
calib_lastonline=0 |
191 |
|
|
|
192 |
|
|
|
193 |
|
|
c------------------------------------------------------------------------ |
194 |
|
|
c |
195 |
|
|
c loop on files |
196 |
|
|
c |
197 |
|
|
c------------------------------------------------------------------------ |
198 |
|
|
|
199 |
|
|
do ifile = 1,nfile !files loop |
200 |
|
|
|
201 |
|
|
c------------------------------------------------------------------------ |
202 |
|
|
c init |
203 |
|
|
c------------------------------------------------------------------------ |
204 |
|
|
runheader=.false. |
205 |
|
|
runtrailer=.false. |
206 |
|
|
default_calib_written=.false. |
207 |
|
|
online_calib_written=.false. |
208 |
|
|
exitflag=.false. |
209 |
|
|
c nev_file_good = 0 |
210 |
|
|
n_cal_pkt=0 |
211 |
|
|
n_cal_list=0 !calibration file identifier in the calibration list file |
212 |
|
|
trk_calib_used_old=0 |
213 |
|
|
n_run_pkt=0 |
214 |
|
|
last_CPU_pkt_loc = 0 |
215 |
|
|
|
216 |
|
|
nev0=0 !global event counter |
217 |
|
|
nev0_good = 0 !total number of good events |
218 |
|
|
|
219 |
|
|
nev_run=0 !event counter relative to the run |
220 |
|
|
trk_calib_used=0 |
221 |
|
|
c which_calib=0 |
222 |
|
|
|
223 |
|
|
c------------------------------------------------------------------------ |
224 |
|
|
c open input file |
225 |
|
|
c------------------------------------------------------------------------ |
226 |
|
|
|
227 |
|
|
print*,' ' |
228 |
|
|
print*,'OPENING PARTICLE FILE:' |
229 |
|
|
print*,in_file(ifile) |
230 |
|
|
print*,' ' |
231 |
|
|
|
232 |
|
|
open(unit=lun_in_file, |
233 |
|
|
$ file=in_dir(1:LNBLNK(in_dir)) |
234 |
|
|
$ //in_file(ifile)(1:LNBLNK(in_file(ifile))), |
235 |
|
|
$ status='old', |
236 |
|
|
$ form='unformatted', |
237 |
|
|
$ err=22) |
238 |
|
|
ffd = FNum(lun_in_file) !reads unix file descriptor |
239 |
|
|
|
240 |
|
|
c------------------------------------------------------------------------ |
241 |
|
|
c open output file and book ntuple structure |
242 |
|
|
c------------------------------------------------------------------------ |
243 |
|
|
502 format(a,'_level0.rz') |
244 |
|
|
write(out_file_level0,502) |
245 |
|
|
$ base_file(ifile)(1:LNBLNK(base_file(ifile))) |
246 |
|
|
|
247 |
|
|
5022 format(a,'_tof.rz') |
248 |
|
|
write(out_file_tof,5022) |
249 |
|
|
$ base_file(ifile)(1:LNBLNK(base_file(ifile))) |
250 |
|
|
|
251 |
|
|
50222 format(a,'_calib.txt') |
252 |
|
|
write(out_file_list,50222) |
253 |
|
|
$ base_file(ifile)(1:LNBLNK(base_file(ifile))) |
254 |
|
|
|
255 |
|
|
|
256 |
|
|
IQUEST(10)=64000 |
257 |
|
|
c permette di ottenere ntuple funzionanti nonostante |
258 |
|
|
c il messaggio dei 64K di RZOUT... !??? |
259 |
|
|
|
260 |
|
|
write(*,103) |
261 |
|
|
$ out_file_level0,out_file_tof |
262 |
|
|
103 format( |
263 |
|
|
$ ' ------------------------------------',/ |
264 |
|
|
$ ,' Creating rz files:',/ |
265 |
|
|
$ ,' ',a40,/ |
266 |
|
|
$ ,' ',a40,/ |
267 |
|
|
$ ,' ------------------------------------',/ |
268 |
|
|
$ ) |
269 |
|
|
* -------------------------- |
270 |
|
|
* create LEVEL0 tracker file |
271 |
|
|
* -------------------------- |
272 |
|
|
call HROPEN(lun_out_file_level0, |
273 |
|
|
$ 'LEVEL0', |
274 |
|
|
$ out_dir(1:LNBLNK(out_dir)) |
275 |
|
|
$ //out_file_level0(1:LNBLNK(out_file_level0)), |
276 |
|
|
$ 'QNP',4096,istat) !opens rz |
277 |
|
|
if(istat.ne.0) goto 17 |
278 |
|
|
call HCDIR('//LEVEL0',' ') |
279 |
|
|
call book_level0 |
280 |
|
|
* -------------------------- |
281 |
|
|
* create TOF tracker file |
282 |
|
|
* -------------------------- |
283 |
|
|
call HROPEN(lun_out_file_tof, |
284 |
|
|
$ 'TOF', |
285 |
|
|
$ out_dir(1:LNBLNK(out_dir)) |
286 |
|
|
$ //out_file_tof(1:LNBLNK(out_file_tof)), |
287 |
|
|
$ 'QNP',4096,istat) !opens rz |
288 |
|
|
if(istat.ne.0) goto 17 |
289 |
|
|
call HCDIR('//TOF',' ') |
290 |
|
|
call book_tof |
291 |
|
|
|
292 |
|
|
* -------------------------------- |
293 |
|
|
* create tracker calibration list |
294 |
|
|
* -------------------------------- |
295 |
|
|
open(UNIT=lun_calib_list |
296 |
|
|
$ ,FILE=out_dir(1:LNBLNK(out_dir)) |
297 |
|
|
$ //out_file_list(1:LNBLNK(out_file_list)) |
298 |
|
|
$ ,FORM='FORMATTED' |
299 |
|
|
$ ,STATUS='UNKNOWN' |
300 |
|
|
$ ) |
301 |
|
|
|
302 |
|
|
c------------------------------------------------------------------------ |
303 |
|
|
c |
304 |
|
|
c loop on events |
305 |
|
|
c |
306 |
|
|
c------------------------------------------------------------------------ |
307 |
|
|
|
308 |
|
|
do iev = 1,min(nev_total,max_event_number) !event loop |
309 |
|
|
|
310 |
|
|
skip=.false. |
311 |
|
|
|
312 |
|
|
iev_total=iev_total+1 |
313 |
|
|
if(iev_total.eq.nev_total) then |
314 |
|
|
exitflag=.true. |
315 |
|
|
goto 9900 !close files and exit if nev_total is reached |
316 |
|
|
endif |
317 |
|
|
|
318 |
|
|
**************************************************************** |
319 |
|
|
* this routine search for a cpu header pointing to a tracker |
320 |
|
|
* packet, and save the content in a buffer |
321 |
|
|
|
322 |
|
|
c***************************************************** |
323 |
|
|
cccccc 11/9/2005 modified by david fedele |
324 |
|
|
c packet, and save the content in a temp file |
325 |
|
|
* >>>>>> packet.dat <<<<<< |
326 |
|
|
c******************************************************** |
327 |
|
|
c------------------------------------------------------------------------ |
328 |
|
|
c look for a cpu packet header |
329 |
|
|
c------------------------------------------------------------------------ |
330 |
|
|
iskipcpu=0 |
331 |
|
|
88 continue |
332 |
|
|
call findcpuheader(runerror,ffd,pkt_type,pkt_num |
333 |
|
|
$ ,obt,buffer,length_buffer) |
334 |
|
|
if(runerror.ne.0) then |
335 |
|
|
* unexpected end of file |
336 |
|
|
if(iskipcpu.ne.0)then |
337 |
|
|
print*,'**** READRAW: WARNING ' |
338 |
|
|
$ //'- Skipped all packets. ' |
339 |
|
|
$ //'(>>> Reduce the file separately!)' |
340 |
|
|
print*,'' |
341 |
|
|
endif |
342 |
|
|
goto 9900 !next file |
343 |
|
|
endif |
344 |
|
|
if(iev.eq.1.and.iskipcpu.eq.0)then |
345 |
|
|
print*,'FIRST CPU PKT: ' |
346 |
|
|
$ ,' pkt ID ',pkt_type |
347 |
|
|
$ ,' - pkt N.',pkt_num |
348 |
|
|
$ ,' - OBT ',obt |
349 |
|
|
print*,'' |
350 |
|
|
endif |
351 |
|
|
|
352 |
|
|
**** CHECK CPU-pkt SEQUENCE |
353 |
|
|
* ------------------------------------------------ |
354 |
|
|
* 1) if at the end of the file there are pkts |
355 |
|
|
* remained in the memory, these are skipped |
356 |
|
|
* ------------------------------------------------ |
357 |
|
|
if(pkt_num.le.last_CPU_pkt_loc)then |
358 |
|
|
goto 9900 !next file |
359 |
|
|
endif |
360 |
|
|
* ------------------------------------------------ |
361 |
|
|
* 2) if through the chained downlinks the |
362 |
|
|
* packets are not consecutive a warning is set. |
363 |
|
|
* In case there is overlapping of pkts |
364 |
|
|
* it search the next consecutive packet. |
365 |
|
|
* ------------------------------------------------ |
366 |
|
|
if(pkt_num.le.last_CPU_pkt)then |
367 |
|
|
if(iskipcpu.eq.0)then |
368 |
|
|
print*,' ' |
369 |
|
|
print*,'**** READRAW: WARNING ' |
370 |
|
|
$ //'- Not consecutive CPU packet ' |
371 |
|
|
$ //'(from pkt ',last_CPU_pkt,' to ',pkt_num,')' |
372 |
|
|
endif |
373 |
|
|
iskipcpu=iskipcpu+1 |
374 |
|
|
good0=.false. |
375 |
|
|
if(pkt_type.eq.z'10'.or.pkt_type.eq.z'30')then |
376 |
|
|
nev0=nev0+1 |
377 |
|
|
***************************************************** |
378 |
|
|
cccccc 20/9/2005 modified by david fedele |
379 |
|
|
ccc call init_level0 |
380 |
|
|
call initlevel0 |
381 |
|
|
c******************************************************** |
382 |
|
|
call initlevel0 |
383 |
|
|
call HCDIR('//LEVEL0',' ') |
384 |
|
|
call HFNT(ntp_level0) !ntuple filling |
385 |
|
|
good=.false. |
386 |
|
|
call init_tof |
387 |
|
|
call HCDIR('//TOF',' ') |
388 |
|
|
call HFNT(ntp_tof) !ntuple filling |
389 |
|
|
endif |
390 |
|
|
if(pkt_num.eq.last_CPU_pkt.and.obt.ne.last_obt)goto 9900 !next file |
391 |
|
|
if(pkt_num.lt.last_CPU_pkt)goto 88 !search next cpu header |
392 |
|
|
endif |
393 |
|
|
if(iskipcpu.ne.0)then |
394 |
|
|
print*,'**** READRAW: WARNING ' |
395 |
|
|
$ //'- ',iskipcpu,' pkts overlap' |
396 |
|
|
|
397 |
|
|
print*,'' |
398 |
|
|
print*,'NEXT CPU PKT: ' |
399 |
|
|
$ ,' pkt ID ',pkt_type |
400 |
|
|
$ ,' - pkt N.',pkt_num |
401 |
|
|
$ ,' - OBT ',obt |
402 |
|
|
print*,'' |
403 |
|
|
endif |
404 |
|
|
|
405 |
|
|
last_CPU_pkt = pkt_num |
406 |
|
|
last_CPU_pkt_loc = pkt_num |
407 |
|
|
last_obt = obt |
408 |
|
|
|
409 |
|
|
c***************************************************** |
410 |
|
|
cccccc 10/9/2005 modified by david fedele |
411 |
|
|
c name_temp='bin-aux/packet.dat' |
412 |
|
|
c***************************************************** |
413 |
|
|
|
414 |
|
|
|
415 |
|
|
****************************************************** |
416 |
|
|
****************************************************** |
417 |
|
|
****************************************************** |
418 |
|
|
****************************************************** |
419 |
|
|
****************************************************** |
420 |
|
|
****************************************************** |
421 |
|
|
****************************************************** |
422 |
|
|
****************************************************** |
423 |
|
|
|
424 |
|
|
c------------------------------------------------------------------------ |
425 |
|
|
c read the packet according to packet type as indicated in the header |
426 |
|
|
c------------------------------------------------------------------------ |
427 |
|
|
|
428 |
|
|
if(pkt_type.eq.z'12'.or.pkt_type.eq.z'13')then |
429 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
430 |
|
|
c ----------- |
431 |
|
|
c CALIBRATION |
432 |
|
|
c ----------- |
433 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
434 |
|
|
if(pkt_type.eq.z'12')then |
435 |
|
|
trk_link(1)=.true. |
436 |
|
|
print*,'' |
437 |
|
|
print*,'CALIB 1' |
438 |
|
|
$ ,' - pkt N.',pkt_num |
439 |
|
|
$ ,' - OBT ',obt |
440 |
|
|
else |
441 |
|
|
trk_link(2)=.true. |
442 |
|
|
print*,'CALIB 2' |
443 |
|
|
$ ,' - pkt N.',pkt_num |
444 |
|
|
$ ,' - OBT ',obt |
445 |
|
|
endif |
446 |
|
|
c**************************************************** |
447 |
|
|
cccccc 10/9/2005 modified by david fedele |
448 |
|
|
cccccc call trkcalibpkt(runerror,name_temp) |
449 |
|
|
curpos=1 |
450 |
|
|
c***************************************************** |
451 |
|
|
cccccc 29/11/2005 modified by david fedele |
452 |
|
|
startcrc=0 |
453 |
|
|
stopcrc=0 |
454 |
|
|
c***************************************************** |
455 |
|
|
call trkcalibpkt(runerror,buffer,length_buffer,curpos, |
456 |
|
|
$ startcrc,stopcrc,crctemp) |
457 |
|
|
c**************************************************** |
458 |
|
|
|
459 |
|
|
elseif(pkt_type.eq.z'10'.or.pkt_type.eq.z'30')then |
460 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
461 |
|
|
c ----- |
462 |
|
|
c EVENT |
463 |
|
|
c ----- |
464 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
465 |
|
|
|
466 |
|
|
c***************************************************** |
467 |
|
|
cccccc 10/9/2005 modified by david fedele |
468 |
|
|
c good0=.true. |
469 |
|
|
c call init_level0 |
470 |
|
|
c call trkeventpkt(runerror,name_temp) |
471 |
|
|
curpos=1 |
472 |
|
|
c***************************************************** |
473 |
|
|
cccccc 29/11/2005 modified by david fedele |
474 |
|
|
startcrc=0 |
475 |
|
|
stopcrc=0 |
476 |
|
|
c***************************************************** |
477 |
|
|
call trkeventpkt(runerror,buffer,length_buffer,curpos, |
478 |
|
|
$ startcrc,stopcrc,crctemp) |
479 |
|
|
c***************************************************** |
480 |
|
|
if(runerror.ne.0)then |
481 |
|
|
good0=.false. |
482 |
|
|
DEBUG = .true. |
483 |
|
|
endif |
484 |
|
|
|
485 |
|
|
call init_tof |
486 |
|
|
good=.true. |
487 |
|
|
call triggerunpack(buffer,length_buffer,me) |
488 |
|
|
if(me.eq.1)good=.false. |
489 |
|
|
call tofunpack(buffer,length_buffer,me) |
490 |
|
|
if(me.eq.1)good=.false. |
491 |
|
|
|
492 |
|
|
elseif(pkt_type.eq.z'83')then |
493 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
494 |
|
|
c ----- |
495 |
|
|
c ALARM |
496 |
|
|
c ----- |
497 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
498 |
|
|
|
499 |
|
|
print*,' ' |
500 |
|
|
print*,'ALARM ' |
501 |
|
|
$ ,' - pkt N.',pkt_num |
502 |
|
|
$ ,' - OBT ',obt |
503 |
|
|
call trkalarmpkt(buffer,length_buffer,runerror) |
504 |
|
|
|
505 |
|
|
elseif(pkt_type.eq.z'20')then |
506 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
507 |
|
|
c ----- |
508 |
|
|
c RUNHEADER PACKET |
509 |
|
|
c ----- |
510 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
511 |
|
|
c this gives the TRK_CALIB_USED field and the ACQ_BUILD_INFO only |
512 |
|
|
c inside the runheader packet |
513 |
|
|
|
514 |
|
|
runheader=.true. !a run header has been found |
515 |
|
|
runtrailer=.false. ! |
516 |
|
|
n_run_pkt=n_run_pkt+1 !run counter (relative to downlink) |
517 |
|
|
nev_run=0 !event counter relative to the run |
518 |
|
|
|
519 |
|
|
print*,'RUN # ',n_run_pkt |
520 |
|
|
$ ,' - pkt N.',pkt_num |
521 |
|
|
$ ,' - OBT ',obt |
522 |
|
|
|
523 |
|
|
call runheaderpkt(buffer,length_buffer |
524 |
|
|
$ ,trk_calib_used,acq_build_info) |
525 |
|
|
|
526 |
|
|
elseif(pkt_type.eq.z'21')then |
527 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
528 |
|
|
c ----- |
529 |
|
|
c RUNTRAILER PACKET |
530 |
|
|
c ----- |
531 |
|
|
c-- **--**--**--**--**--**--**--**--**--**--**--**--**--**--** |
532 |
|
|
runtrailer=.true. ! |
533 |
|
|
print*,'RUN # ',n_run_pkt |
534 |
|
|
$ ,' - Calib. used ',trk_calib_used |
535 |
|
|
$ ,' - Events ',nev_run |
536 |
|
|
if(which_calib.eq.0)then |
537 |
|
|
print*,'RUN # ',n_run_pkt |
538 |
|
|
$ ,' - Calib. entry ',which_calib |
539 |
|
|
$ ,' - File **NONE**' |
540 |
|
|
else |
541 |
|
|
print*,'RUN # ',n_run_pkt |
542 |
|
|
$ ,' - Calib. entry ',which_calib |
543 |
|
|
$ ,' - File ',file_calib |
544 |
|
|
endif |
545 |
|
|
print*,'--------' |
546 |
|
|
endif !end pkt type conditions |
547 |
|
|
|
548 |
|
|
|
549 |
|
|
****************************************************** |
550 |
|
|
****************************************************** |
551 |
|
|
****************************************************** |
552 |
|
|
****************************************************** |
553 |
|
|
****************************************************** |
554 |
|
|
****************************************************** |
555 |
|
|
|
556 |
|
|
|
557 |
|
|
c---------------------------------------------------------------- |
558 |
|
|
c |
559 |
|
|
c elaborate the packet content |
560 |
|
|
c |
561 |
|
|
c---------------------------------------------------------------- |
562 |
|
|
|
563 |
|
|
c---------------------------------------------------------------- |
564 |
|
|
c calibration packet: if both 12 and 13 calibration packets |
565 |
|
|
c (corresponding to the X and Y views (in which order?!)) |
566 |
|
|
c have been found, store them |
567 |
|
|
c---------------------------------------------------------------- |
568 |
|
|
if( |
569 |
|
|
$ (pkt_type.eq.z'12'.or.pkt_type.eq.z'13').and. |
570 |
|
|
$ trk_link(1).and. |
571 |
|
|
$ trk_link(2).and. |
572 |
|
|
$ .true.) then |
573 |
|
|
c print*,trk_link(1),trk_link(2),pkt_type |
574 |
|
|
c---------------------------------------------------------------- |
575 |
|
|
c a calibration packet has been found |
576 |
|
|
c create a new calibration file: DW_DATE_NUM_NN_calib.rz |
577 |
|
|
c where NN=n_cal_pkt |
578 |
|
|
c --> book and fill histos |
579 |
|
|
c---------------------------------------------------------------- |
580 |
|
|
found_calib=.true. |
581 |
|
|
|
582 |
|
|
n_cal_pkt = n_cal_pkt + 1 |
583 |
|
|
nnnn=n_cal_pkt |
584 |
|
|
call intstr(nnnn,aaa,2) |
585 |
|
|
503 format(a,'_',a2,'_calib.rz') |
586 |
|
|
write(out_file_calib,503) |
587 |
|
|
$ base_file(ifile)(1:LNBLNK(base_file(ifile))), |
588 |
|
|
$ aaa |
589 |
|
|
|
590 |
|
|
write(*,106)out_file_calib |
591 |
|
|
106 format( |
592 |
|
|
$ ' ------------------------------------',/ |
593 |
|
|
$ ,' Creating CALIBRATION rz file ',/ |
594 |
|
|
$ ,' ',a40,/ |
595 |
|
|
$ ,' ------------------------------------',/ |
596 |
|
|
$ ) |
597 |
|
|
|
598 |
|
|
call HROPEN(lun_out_file_calib, |
599 |
|
|
$ 'CALIB', |
600 |
|
|
$ out_dir(1:LNBLNK(out_dir)) |
601 |
|
|
$ //out_file_calib(1:LNBLNK(out_file_calib)), |
602 |
|
|
$ 'QNP',4096,istat) !opens rz |
603 |
|
|
if(istat.ne.0) goto 19 |
604 |
|
|
call HCDIR('//CALIB',' ') |
605 |
|
|
|
606 |
|
|
call book_histos |
607 |
|
|
call fill_histos |
608 |
|
|
|
609 |
|
|
call HCDIR('//CALIB',' ') |
610 |
|
|
do iview=1,nviews |
611 |
|
|
call HROUT(id_hi_bad+iview,ICYCLE,'T') |
612 |
|
|
call HROUT(id_hi_ped+iview,ICYCLE,'T') |
613 |
|
|
call HROUT(id_hi_sig+iview,ICYCLE,'T') |
614 |
|
|
call HDELET(id_hi_bad+iview) |
615 |
|
|
call HDELET(id_hi_ped+iview) |
616 |
|
|
call HDELET(id_hi_sig+iview) |
617 |
|
|
enddo |
618 |
|
|
call HREND('CALIB') |
619 |
|
|
close(lun_out_file_calib) |
620 |
|
|
do iview=1,nviews |
621 |
|
|
trk_DSP_ok(iview)=0 !init DSP flag |
622 |
|
|
enddo |
623 |
|
|
trk_link(1)=.false. |
624 |
|
|
trk_link(2)=.false. |
625 |
|
|
|
626 |
|
|
|
627 |
|
|
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
628 |
|
|
* add a entry to the calibration list file |
629 |
|
|
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
630 |
|
|
file_calib=out_file_calib(1:LNBLNK(out_file_calib)) |
631 |
|
|
online_calib_written=.false. |
632 |
|
|
c call add_calib_entry |
633 |
|
|
c calib_lastonline=n_cal_list !store the identification number of the last calibration file used |
634 |
|
|
* +++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
635 |
|
|
|
636 |
|
|
c---------------------------------------------------------------- |
637 |
|
|
c runheader packet: use trk_calib_used and acq_build_info info |
638 |
|
|
c---------------------------------------------------------------- |
639 |
|
|
elseif( |
640 |
|
|
$ (pkt_type.eq.z'20') |
641 |
|
|
$ .and..true.) then |
642 |
|
|
|
643 |
|
|
if((trk_calib_used.eq.1) !use previous calibration |
644 |
|
|
$ .or.(trk_calib_used.eq.2)) then |
645 |
|
|
|
646 |
|
|
if(.not.found_calib) then |
647 |
|
|
c---------------------------------------------------------------- |
648 |
|
|
* here if the first file is not the first of a data set |
649 |
|
|
c---------------------------------------------------------------- |
650 |
|
|
print*,'**** READRAW: WARNING ' |
651 |
|
|
$ //'- Missing calibration! (useless run)' |
652 |
|
|
else |
653 |
|
|
if(.not.online_calib_written) then |
654 |
|
|
c---------------------------------------------------------------- |
655 |
|
|
* for the first run of a file, create a new entry in the calibration list file, |
656 |
|
|
* pointing to the last calibration of the previous file (out_file_calib) |
657 |
|
|
c---------------------------------------------------------------- |
658 |
|
|
* ++++++++++++++++++++++++++++++++++++++++++++++ |
659 |
|
|
file_calib= |
660 |
|
|
$ out_file_calib(1:LNBLNK(out_file_calib)) |
661 |
|
|
call add_calib_entry |
662 |
|
|
calib_lastonline=n_cal_list |
663 |
|
|
* ++++++++++++++++++++++++++++++++++++++++++++++ |
664 |
|
|
online_calib_written=.true. |
665 |
|
|
endif |
666 |
|
|
* for a normal event, use the last online-calibration file |
667 |
|
|
which_calib=calib_lastonline !<<<<<<<<<<<<<<<<< |
668 |
|
|
endif |
669 |
|
|
c---------------------------------------------------------------- |
670 |
|
|
c if default calibration has been used, write the default |
671 |
|
|
c calibration file name in the calibration list file |
672 |
|
|
c---------------------------------------------------------------- |
673 |
|
|
elseif((trk_calib_used.eq.104) !use default calibration |
674 |
|
|
$ ) then |
675 |
|
|
|
676 |
|
|
if(.not.default_calib_written)then |
677 |
|
|
c if(calib_default.eq.0)then |
678 |
|
|
c 777 continue |
679 |
|
|
default_calib_written=.true. |
680 |
|
|
* +++++++++++++++++++++++++++++++++++++++++++++++++++ |
681 |
|
|
* add a entry to the calibration list file |
682 |
|
|
* +++++++++++++++++++++++++++++++++++++++++++++++++++ |
683 |
|
|
file_calib=calib_default_file |
684 |
|
|
call add_calib_entry |
685 |
|
|
calib_default=n_cal_list |
686 |
|
|
* +++++++++++++++++++++++++++++++++++++++++++++++++++ |
687 |
|
|
endif |
688 |
|
|
which_calib=calib_default !<<<<<<<<<<<<<<<<<<< |
689 |
|
|
|
690 |
|
|
else |
691 |
|
|
print*,'**** READRAW: ERROR:' |
692 |
|
|
$ //' Wrong calibration identifier for run' |
693 |
|
|
$ //' starting at event ',iev,'(runheader packet' |
694 |
|
|
$ //' number: ',pkt_num,')' |
695 |
|
|
which_calib=0 |
696 |
|
|
endif |
697 |
|
|
|
698 |
|
|
|
699 |
|
|
c---------------------------------------------------------------- |
700 |
|
|
c check if the tracker has been included in this run |
701 |
|
|
c---------------------------------------------------------------- |
702 |
|
|
|
703 |
|
|
if(iand(acq_build_info,z'00ffff00') |
704 |
|
|
$ .eq.z'00000000') then |
705 |
|
|
skip=.true. !skip the event if no DSP has been included in ACQ |
706 |
|
|
endif |
707 |
|
|
|
708 |
|
|
c---------------------------------------------------------------- |
709 |
|
|
c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
710 |
|
|
c |
711 |
|
|
c |
712 |
|
|
c event packet. |
713 |
|
|
c z'10'=normal event, |
714 |
|
|
c z'30'=full event for special calibration |
715 |
|
|
c |
716 |
|
|
c |
717 |
|
|
c- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
718 |
|
|
c---------------------------------------------------------------- |
719 |
|
|
elseif( |
720 |
|
|
$ (pkt_type.eq.z'10'.or.pkt_type.eq.z'30') |
721 |
|
|
$ .and..true.) then |
722 |
|
|
|
723 |
|
|
|
724 |
|
|
if((pkt_type.eq.z'10') |
725 |
|
|
$ .and.(.not.runheader) |
726 |
|
|
$ .and.nev_run.eq.0) then |
727 |
|
|
print*,'**** READRAW: WARNING - Missing RunHeader ' |
728 |
|
|
endif |
729 |
|
|
|
730 |
|
|
if(.not.skip) then |
731 |
|
|
|
732 |
|
|
|
733 |
|
|
**** CHECK TRIGGER SEQUENCE **** |
734 |
|
|
* --------------------------------------------------------- |
735 |
|
|
do idsp=1,nviews |
736 |
|
|
if(trk_DSP_ok(idsp).eq.1)then |
737 |
|
|
if(eventn(idsp).ne.(last_trigger(idsp)+1) |
738 |
|
|
$ .and.eventn(idsp).ne.1 |
739 |
|
|
$ .and.last_trigger(idsp).ne.0) |
740 |
|
|
$ write(*,8181) |
741 |
|
|
$ idsp,last_trigger(idsp),eventn(idsp) |
742 |
|
|
$ ,last_CPU_pkt |
743 |
|
|
last_trigger(idsp)=eventn(idsp) |
744 |
|
|
endif |
745 |
|
|
enddo |
746 |
|
|
8181 format('DSP ',i2,' >> JUMP from trigger ',i6,' to ' |
747 |
|
|
$ ,i6,' (CPU pkt N.',i8,')') |
748 |
|
|
* --------------------------------------------------------- |
749 |
|
|
**** CHECK NUMBER OF DSP PACKETS |
750 |
|
|
dsptot=0 |
751 |
|
|
do iview=1,nviews |
752 |
|
|
dsptot=dsptot+trk_DSP_ok(iview) |
753 |
|
|
trk_DSP_ok(iview)=0 !init DSP flag |
754 |
|
|
enddo |
755 |
|
|
|
756 |
|
|
if(dsptot.lt.nviews)then |
757 |
|
|
good0=.false. |
758 |
|
|
print *,'DSP pkt found: ' |
759 |
|
|
$ ,(trk_DSP_ok(iview),iview=1,12) |
760 |
|
|
$ ,' (CPU pkt N.',last_CPU_pkt,')' |
761 |
|
|
elseif(DEBUG)then |
762 |
|
|
print*,' (CPU pkt N.',last_CPU_pkt,')' |
763 |
|
|
DEBUG = .false. |
764 |
|
|
endif |
765 |
|
|
* --------------------------------------------------------- |
766 |
|
|
|
767 |
|
|
|
768 |
|
|
* --------------------------------------------------------- |
769 |
|
|
* for the first event of a file, create a new entry in the |
770 |
|
|
* calibration list file, pointing to the last calibration |
771 |
|
|
* of the previous file (out_file_calib) |
772 |
|
|
* --------------------------------------------------------- |
773 |
|
|
if((nev_run.eq.0).and. |
774 |
|
|
$ (.not.runheader).and. |
775 |
|
|
$ which_calib.ne.0) then |
776 |
|
|
call add_calib_entry |
777 |
|
|
if(which_calib.eq.calib_lastonline)then |
778 |
|
|
calib_lastonline=n_cal_list |
779 |
|
|
online_calib_written=.true. |
780 |
|
|
elseif(which_calib.eq.calib_default)then |
781 |
|
|
calib_default=n_cal_list |
782 |
|
|
default_calib_written=.true. |
783 |
|
|
endif |
784 |
|
|
which_calib=n_cal_list |
785 |
|
|
endif |
786 |
|
|
* --------------------------------------------------------- |
787 |
|
|
|
788 |
|
|
|
789 |
|
|
|
790 |
|
|
* event counter relative to the run |
791 |
|
|
if(pkt_type.eq.z'10')nev_run=nev_run+1 |
792 |
|
|
|
793 |
|
|
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
794 |
|
|
C then the nt-uple is filled |
795 |
|
|
C - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
796 |
|
|
|
797 |
|
|
if(good0.and.which_calib.ne.0) nev0_good = nev0_good +1 |
798 |
|
|
|
799 |
|
|
c nev_trk= iev |
800 |
|
|
|
801 |
|
|
nev0=nev0+1 |
802 |
|
|
call HCDIR('//LEVEL0',' ') |
803 |
|
|
call HFNT(ntp_level0) !ntuple filling |
804 |
|
|
|
805 |
|
|
call HCDIR('//TOF',' ') |
806 |
|
|
call HFNT(ntp_tof) !ntuple filling |
807 |
|
|
|
808 |
|
|
|
809 |
|
|
endif |
810 |
|
|
|
811 |
|
|
|
812 |
|
|
|
813 |
|
|
|
814 |
|
|
c---------------------------------------------------------------- |
815 |
|
|
c alarm packet |
816 |
|
|
c---------------------------------------------------------------- |
817 |
|
|
elseif( |
818 |
|
|
$ pkt_type.eq.z'83'.and. |
819 |
|
|
$ .true.) then |
820 |
|
|
|
821 |
|
|
print*,'' |
822 |
|
|
print*,'@@@@@@@@@@@@ ALARM @@@@@@@@@@@@@@@' |
823 |
|
|
print*,'' |
824 |
|
|
|
825 |
|
|
|
826 |
|
|
endif !pkt_type condition |
827 |
|
|
|
828 |
|
|
9909 continue |
829 |
|
|
|
830 |
|
|
|
831 |
|
|
enddo !end loop on events |
832 |
|
|
|
833 |
|
|
9900 continue |
834 |
|
|
|
835 |
|
|
if(.not.runtrailer)then |
836 |
|
|
print*,'RUN # ',n_run_pkt |
837 |
|
|
$ ,' - Calib. used ',trk_calib_used |
838 |
|
|
$ ,' - Events ',nev_run |
839 |
|
|
if(which_calib.eq.0)then |
840 |
|
|
print*,'RUN # ',n_run_pkt |
841 |
|
|
$ ,' - Calib. entry ',which_calib |
842 |
|
|
$ ,' - File **NONE**' |
843 |
|
|
else |
844 |
|
|
print*,'RUN # ',n_run_pkt |
845 |
|
|
$ ,' - Calib. entry ',which_calib |
846 |
|
|
$ ,' - File ',file_calib |
847 |
|
|
endif |
848 |
|
|
print*,' ' |
849 |
|
|
endif |
850 |
|
|
|
851 |
|
|
|
852 |
|
|
|
853 |
|
|
c------------------------------------------------------------------------ |
854 |
|
|
c |
855 |
|
|
c closes files and exits |
856 |
|
|
c |
857 |
|
|
c------------------------------------------------------------------------ |
858 |
|
|
|
859 |
|
|
c***************************************************** |
860 |
|
|
cccccc 10/9/2005 modified by david fedele |
861 |
|
|
c call system('rm -f '//name_temp) |
862 |
|
|
c***************************************************** |
863 |
|
|
close(lun_in_file) |
864 |
|
|
|
865 |
|
|
c nev0_good = nev0_good + nev_file_good |
866 |
|
|
|
867 |
|
|
print*,' ' |
868 |
|
|
print*,'CLOSING FILES:' |
869 |
|
|
print*,out_file_level0 |
870 |
|
|
print*,out_file_tof |
871 |
|
|
print*,' ' |
872 |
|
|
|
873 |
|
|
call HCDIR('//LEVEL0',' ') |
874 |
|
|
c call HPRNTU(ntp_level0) !prints ntuple structure |
875 |
|
|
c deletes all but the last cycles of all key |
876 |
|
|
c from the current working RZ directory |
877 |
|
|
call RZPURG(-1) |
878 |
|
|
call HROUT(ntp_level0,ICYCLE,'T') |
879 |
|
|
call HREND('LEVEL0') |
880 |
|
|
close(lun_out_file_level0) |
881 |
|
|
|
882 |
|
|
call HCDIR('//TOF',' ') |
883 |
|
|
c call HPRNTU(ntp_tof) !prints ntuple structure |
884 |
|
|
c deletes all but the last cycles of all key |
885 |
|
|
c from the current working RZ directory |
886 |
|
|
call RZPURG(-1) |
887 |
|
|
call HROUT(ntp_tof,ICYCLE,'T') |
888 |
|
|
call HREND('TOF') |
889 |
|
|
close(lun_out_file_tof) |
890 |
|
|
|
891 |
|
|
|
892 |
|
|
close(lun_calib_list) |
893 |
|
|
|
894 |
|
|
|
895 |
|
|
write(*,107) |
896 |
|
|
c $ iev, |
897 |
|
|
c $ nev_file_good |
898 |
|
|
$ nev0, |
899 |
|
|
$ nev0_good |
900 |
|
|
107 format( |
901 |
|
|
$ ' ------------------------------------',/ |
902 |
|
|
$ ,' | Number of events ',i8,' |'/ |
903 |
|
|
$ ,' | Good events ',i8,' |'/ |
904 |
|
|
$ ,' ------------------------------------',/ |
905 |
|
|
$ ) |
906 |
|
|
|
907 |
|
|
|
908 |
|
|
|
909 |
|
|
if(exitflag) goto 9990 !nev_total has been reached --> exit |
910 |
|
|
|
911 |
|
|
print*,'LAST CPU PKT: ' |
912 |
|
|
$ ,' pkt ID ',pkt_type |
913 |
|
|
$ ,' - pkt N.',pkt_num |
914 |
|
|
$ ,' - OBT ',obt |
915 |
|
|
|
916 |
|
|
|
917 |
|
|
enddo !end loop on files |
918 |
|
|
|
919 |
|
|
9990 continue |
920 |
|
|
|
921 |
|
|
|
922 |
|
|
goto 9000 !go to end |
923 |
|
|
c----------------------------------------- |
924 |
|
|
c level0 file creation error |
925 |
|
|
c----------------------------------------- |
926 |
|
|
17 continue |
927 |
|
|
print*,' ' |
928 |
|
|
print*,'readraw: ERROR CREATING OUTPUT FILE: ',out_file_level0 |
929 |
|
|
print*,istat |
930 |
|
|
print*,' ' |
931 |
|
|
print*,' ' |
932 |
|
|
goto 9000 !the end |
933 |
|
|
c----------------------------------------- |
934 |
|
|
c tof file creation error |
935 |
|
|
c----------------------------------------- |
936 |
|
|
18 continue |
937 |
|
|
print*,' ' |
938 |
|
|
print*,'readraw: ERROR CREATING OUTPUT FILE: ',out_file_tof |
939 |
|
|
print*,istat |
940 |
|
|
print*,' ' |
941 |
|
|
print*,' ' |
942 |
|
|
goto 9000 !the end |
943 |
|
|
c----------------------------------------- |
944 |
|
|
c calibration file creation error |
945 |
|
|
c----------------------------------------- |
946 |
|
|
19 continue |
947 |
|
|
print*,' ' |
948 |
|
|
print*,'readraw: ERROR CREATING OUTPUT FILE: ',out_file_calib |
949 |
|
|
print*,istat |
950 |
|
|
print*,' ' |
951 |
|
|
print*,' ' |
952 |
|
|
goto 9000 !the end |
953 |
|
|
c----------------------------------------- |
954 |
|
|
c particle input file opening error |
955 |
|
|
c----------------------------------------- |
956 |
|
|
22 continue |
957 |
|
|
print*,' ' |
958 |
|
|
print*,'readraw: ERROR OPENING PARTICLE FILE: ',in_file(ifile) |
959 |
|
|
print *,in_dir |
960 |
|
|
print *,in_dir(1:LNBLNK(in_dir)) |
961 |
|
|
$ //in_file(ifile)(1:LNBLNK(in_file(ifile))) |
962 |
|
|
print*,' ' |
963 |
|
|
goto 9000 !the end |
964 |
|
|
|
965 |
|
|
|
966 |
|
|
c------------------------------------------------------------------------ |
967 |
|
|
c |
968 |
|
|
c exit |
969 |
|
|
c |
970 |
|
|
c------------------------------------------------------------------------ |
971 |
|
|
9000 continue |
972 |
|
|
|
973 |
|
|
|
974 |
|
|
stop |
975 |
|
|
end |