/[PAMELA software]/yoda/techmodel/forroutines/anticounter/AC.c
ViewVC logotype

Annotation of /yoda/techmodel/forroutines/anticounter/AC.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2.1 - (hide annotations) (download)
Sun Oct 17 12:42:54 2004 UTC (20 years, 1 month ago) by kusanagi
Branch: MAIN
File MIME type: text/plain
*** empty log message ***

1 kusanagi 2.1 /*****************************************************************
2     Function to read AC physics data v1.1
3     Author: Petter Hofverberg, petter@particle.kth.se
4    
5     0408 v1.0 alive
6     0409 Added shifting operators to fix problem with odd data (BBAC|11DD)
7     -----
8     Errors: (returned to the main program as the variable "err")
9     err=
10     0 - Ok
11     1 - Data found, but corrupt
12     2 - Data dont found in buffer
13    
14     ToDo: i) do it endian-independent
15     ii) check for more events in the same file?
16     ******************************************************************/
17    
18     #include <stdio.h>
19     #include "AC.h"
20    
21     int i,err,found,j;
22     //unsigned short buffer[1000];
23     //unsigned short tmp1,tmp2;
24     unsigned short buffer[1000];
25     unsigned short tmp1;
26    
27     struct physicsstruct physicsdata;
28     struct physicsstruct *physicspointer;
29    
30     struct calibstruct calibdata;
31     struct calibstruct *calibpointer;
32    
33    
34     //int ACphysics(int length,unsigned short* datapointer,struct physicsstruct* physicspointer)
35     int ACphysics(int length,unsigned char* datapointer,struct physicsstruct* physicspointer)
36     {
37    
38     int iter=2;
39    
40     *physicspointer=physicsdata;
41    
42     //look for header AC11, then cut out the event to a temp buffer
43     while(found==0 && iter<length)
44     {
45     tmp1 = ((*datapointer) << 8) | *(datapointer+1);
46    
47     if(tmp1==0xAC11)
48     //if(tmp1==0xAC11) //flipped
49     {
50     found=1;
51     for(i=0;i<64;i++)
52     {
53     buffer[i]=((*datapointer) << 8) | *(datapointer+1);
54     datapointer=datapointer+2;
55     }
56     tmp1=0x0000;
57     }
58     else{
59     datapointer++;
60     iter=iter+1;}
61     }
62    
63     //check errors
64     if(found==0)
65     err=2;
66     else if(buffer[1]==0x22AC || buffer[1]==0xAC22)
67     err=0;
68     else
69     err=1;
70    
71     //Fill physicsdata from buffer
72     for(i=0;i<2;i++) physicsdata.header[i]=buffer[i];
73     physicsdata.status=buffer[2];
74     physicsdata.hitmap=buffer[3];
75     for(i=0;i<6;i++) physicsdata.regist[i]=buffer[4+i];
76     for(i=0;i<16;i++) physicsdata.shift[i]=buffer[10+i];
77     for(i=0;i<16;i++) physicsdata.counters[i]=buffer[26+i];
78     for(i=0;i<8;i++) physicsdata.coinc[i]=buffer[42+i];
79     physicsdata.trigg=buffer[50];
80     for(i=0;i<2;i++) physicsdata.clock[i]=buffer[51+i];
81     for(i=0;i<2;i++) physicsdata.temp[i]=buffer[53+i];
82     for(i=0;i<8;i++) physicsdata.DAC[i]=buffer[55+i];
83     physicsdata.CRC=buffer[63];
84    
85     return err;
86    
87     }
88    
89    
90     int ACcalib(int length, unsigned char* datapointer, struct calibstruct* calibpointer)
91     {
92    
93     int iter=2;
94    
95     //point struct-pointer to calibdata
96     *calibpointer=calibdata;
97    
98     //look for header 0xACCA
99     while(found==0 && iter<length)
100     {
101     tmp1 = ((*datapointer) << 8) | *(datapointer+1);
102    
103     if(tmp1==0xACCA)
104     {
105     found=1;
106     for(i=0;i<8256;i++)
107     {
108     buffer[i]=((*datapointer) << 8) | *(datapointer+1);
109     datapointer=datapointer+2;
110     }
111     tmp1=0x0000;
112     }
113     else{
114     datapointer++;
115     iter=iter+1;}
116     }
117    
118     //check errors
119     if(found==0)
120     err=2;
121     else if(buffer[8254]==0xAC22)
122     err=0;
123     else
124     err=1;
125    
126     printf("length: %d\n iter: %d\n",length,iter);
127    
128     //Fill calibdata from buffer
129     calibdata.header=buffer[0];
130     for(i=0;i<5;i++) calibdata.status[i]=buffer[1+i];
131     for(i=0;i<8;i++) calibdata.temp[i]=buffer[6+i];
132     for(i=0;i<8;i++) calibdata.DAC1[i]=buffer[14+i];
133     for(i=0;i<8;i++) calibdata.DAC2[i]=buffer[22+i];
134     for(i=0;i<6;i++) calibdata.regist[i]=buffer[30+i];
135     for(i=0;i<8;i++) calibdata.time[i]=buffer[36+i];
136     calibdata.n_tr=buffer[44];
137     for(i=0;i<16;i++) calibdata.hitmap_tr[i]=buffer[45+i];
138     for(i=0;i<4096;i++) calibdata.curve1[i]=buffer[61+i];
139     for(i=0;i<4096;i++) calibdata.curve2[i]=buffer[4157+i];
140     calibdata.iCRC=buffer[8253];
141     calibdata.tail=buffer[8254];
142     calibdata.CRC=buffer[8255];
143    
144     /*
145     //debug
146     if(err!=2)
147     {
148     printf("header..... %hx\n",calibdata.header);
149     printf("status..... %hx\n",calibdata.status[0]);
150     printf("temp....... %hx\n",calibdata.temp[0]);
151     printf("DAC1....... %hx\n",calibdata.DAC1[0]);
152     printf("DAC2....... %hx\n",calibdata.DAC2[0]);
153     printf("regist..... %hx\n",calibdata.regist[0]);
154     printf("time....... %hx\n",calibdata.time[0]);
155     printf("n_tr....... %hx\n",calibdata.n_tr);
156     printf("hitmap_tr.. %hx\n",calibdata.hitmap_tr[0]);
157     printf("curve1..... %hx\n",calibdata.curve1[0]);
158     printf("curve2..... %hx\n",calibdata.curve2[0]);
159     printf("iCRC....... %hx\n",calibdata.iCRC);
160     printf("tail....... %hx\n",calibdata.tail);
161     printf("CRC........ %hx\n",calibdata.CRC);
162     }
163     printf("err: %d\n",err);
164     */
165    
166     return err;
167     }
168    
169    
170    
171     //transposing function
172     int flip(int i16)
173     {
174     int temp;
175    
176     temp = 0;
177     temp |= 0xFF00 & ((0x00FF & i16) << 8);
178     temp |= 0x00FF & ((0xFF00 & i16) >> 8);
179     return temp;
180     }

  ViewVC Help
Powered by ViewVC 1.1.23