/[PAMELA software]/yoda/techmodel/forroutines/tof/tofunpack.for
ViewVC logotype

Annotation of /yoda/techmodel/forroutines/tof/tofunpack.for

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3.0 - (hide annotations) (download)
Fri Mar 4 15:54:11 2005 UTC (19 years, 9 months ago) by kusanagi
Branch: MAIN
Changes since 1.1: +0 -0 lines
Error proof version.
Implemented all detectors packets plus all the main telemetries packets.
Missing all the Init and Alarm packets.
Disabled CRC control on VarDump, ArrDump, TabDump for CPU debugging needs
(the data formats seems correct even if CRC get wrong)

1 kusanagi 1.1 C--------------------------------------------------------------------
2     SUBROUTINE TOFUNPACK(vecta,lung,me)
3     C D.Campana, Dec. 04
4     C---------------------------------------------------------------------
5    
6     IMPLICIT NONE
7    
8     C
9     C Normal variables definition
10     C
11     integer lung
12     integer*1 vecta(lung)
13     integer me
14     integer check, crctof
15     integer ic0,sup,inf
16     integer i, ic, bit, bi,j
17     integer start,ntdc
18     integer tdcid(12),evcount(12)
19     integer tdcmask(12),adc(4,12),tdc(4,12)
20     integer rawadc(4,12),rawtdc(4,12),grayadc(4,12),graytdc(4,12)
21     integer temp1(12),temp2(12)
22     C
23     c data start,ntdc /150,12/ ! to read data before Christmas 2004
24     data start,ntdc /153,12/ ! to read data after Christmas 2004
25    
26     COMMON / tofvar /tdcid,evcount,tdcmask,adc,tdc,temp1,temp2
27     save / tofvar /
28    
29     C
30     C Begin !
31     C
32    
33     C
34     C AAA : Bisogna definire un pattern per il tof
35     C
36    
37     ic = start
38     C
39     c print *,'++++++++++ Tof Unpack ++++++++++++++++'
40    
41     do j = 1,ntdc
42     ic0 = ic ! primo indice per il calcolo del CRC
43     tdcid(j) = 0
44     evcount(j) = 0
45     do bit = 0, 7
46     bi = ibits(vecta(ic),bit,1)
47     if (bi.eq.1) tdcid(j) = ibset(tdcid(j),bit)
48     bi = ibits(vecta(ic+1),bit,1)
49     if (bi.eq.1) evcount(j) = ibset(evcount(j),bit)
50     enddo
51     c print *,'tdcid(',j,')', 'evcount(',j,')'
52     c print *,tdcid(j), evcount(j)
53     c
54     ic=ic+2
55     tdcmask(j) = 0
56     do bit = 0, 7
57     bi = ibits(vecta(ic),bit,1)
58     if (bi.eq.1) tdcmask(j) = ibset(tdcmask(j),bit+8)
59     bi = ibits(vecta(ic+1),bit,1)
60     if (bi.eq.1) tdcmask(j) = ibset(tdcmask(j),bit)
61     enddo
62     c print *,'tdcmask(',j,')'
63     c print *,tdcmask(j)
64    
65     ic=ic+2
66     do i=1,4
67     rawadc(i,j) = 0
68     rawtdc(i,j) = 0
69     grayadc(i,j) = 0
70     graytdc(i,j) = 0
71     do bit = 0, 7
72     bi = ibits(vecta(ic),bit,1)
73     if (bi.eq.1) rawadc(i,j) = ibset(rawadc(i,j),bit+8)
74     bi = ibits(vecta(ic+1),bit,1)
75     if (bi.eq.1) rawadc(i,j) = ibset(rawadc(i,j),bit)
76     bi = ibits(vecta(ic+2),bit,1)
77     if (bi.eq.1) rawtdc(i,j) = ibset(rawtdc(i,j),bit+8)
78     bi = ibits(vecta(ic+3),bit,1)
79     if (bi.eq.1) rawtdc(i,j) = ibset(rawtdc(i,j),bit)
80     enddo
81     c print *,'rawadc(',i,',',j,')','rawtdc(',i,',',j,')'
82     c print *, rawadc(i,j),rawtdc(i,j)
83     c
84     c adc e tdc data have to be translated from Gray code to binary (bit 0-11)
85     c bit 12 is added after conversion (control bit)
86     c bit 13 is 1(0) for charge(time) information
87     c bits 14-15 give the channel 1-4 on the board.
88     c
89     grayadc(i,j)=ibits(rawadc(i,j),0,12)
90     graytdc(i,j)=ibits(rawtdc(i,j),0,12)
91     c
92     call graytobin(grayadc(i,j),adc(i,j),12)
93     call graytobin(graytdc(i,j),tdc(i,j),12)
94     c print *,'grayadc(',i,',',j,')','graytdc(',i,',',j,')'
95     c print *, grayadc(i,j),graytdc(i,j)
96     c print *,'adc(',i,',',j,')','tdc(',i,',',j,')','prima del bit 12'
97     c print *, adc(i,j),tdc(i,j)
98     c
99     bi = ibits(rawtdc(i,j),12,1)
100     if (bi.eq.1) tdc(i,j) = ibset(tdc(i,j),12)
101     bi = ibits(rawadc(i,j),12,1)
102     if (bi.eq.1) adc(i,j) = ibset(adc(i,j),12)
103     c
104     c print *,'adc(',i,',',j,')','tdc(',i,',',j,')'
105     c print *, adc(i,j),tdc(i,j)
106     c
107     ic=ic+4
108     enddo
109     c
110     temp1(j) = 0
111     temp2(j) = 0
112     do bit = 0, 7
113     bi = ibits(vecta(ic),bit,1)
114     if (bi.eq.1) temp1(j) = ibset(temp1(j),bit)
115     bi = ibits(vecta(ic+1),bit,1)
116     if (bi.eq.1) temp2(j) = ibset(temp2(j),bit)
117     enddo
118     c print *,'temp1(',j,')', 'temp2(',j,')'
119     c print *,temp1(j), temp2(j)
120    
121     ic=ic+2
122    
123     c
124     c vecta(ic) is the CRC
125     c Check consistency of CRC.
126     c
127     if(vecta(ic).lt.0)vecta(ic)=vecta(ic)+256
128     check = 0
129     inf = ic0
130     sup = ic - 1
131     do i = inf,sup
132     check=crctof(check,vecta(i))
133     enddo
134     if (check.ne.vecta(ic)) then
135     c print *,'crc sbagliato ',vecta(ic), check
136     me = 1
137     else
138     c print *,'crc corretto ',vecta(ic)
139     endif
140    
141     c
142     c print *,'---------> ic, j' ,ic,j
143     ic=ic+1
144    
145     enddo ! j = 1,ntdc
146    
147    
148     RETURN
149     END
150    
151    
152    

  ViewVC Help
Powered by ViewVC 1.1.23