/[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 4.0 - (hide annotations) (download)
Sun Mar 6 04:33:02 2005 UTC (19 years, 9 months ago) by kusanagi
Branch: MAIN
CVS Tags: YODA4_0/04, YODA4_0/03, YODA4_0/02, YODA4_0/01
Changes since 3.0: +0 -0 lines
Stable version 4.0 - 6 March 2005 - Maurizio Nagni

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