Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
109 | f9daq | 1 | //root [1] .x read.C("../../guest/datoteka.dat") |
2 | |||
3 | const int BSIZE=10000; |
||
4 | unsigned int gBuf[BSIZE]; |
||
5 | const int MAXCH=32; |
||
6 | TH1F* gHisto[MAXCH]; |
||
7 | |||
8 | int read(char *fname="datoteka.dat", int fDebug=1){ |
||
9 | FILE *fp= fopen(fname,"r"); |
||
10 | if (!fp) { |
||
11 | printf("Error! File %s not found\n", fname); |
||
12 | return 0; |
||
13 | } |
||
14 | |||
15 | |||
16 | for (int i=0;i<MAXCH;i++){ |
||
17 | char hname[50]; |
||
18 | sprintf(hname,"TDC Ch. %d;TDC;N",i); |
||
19 | char hn[50]; |
||
20 | sprintf(hn,"ch%d",i); |
||
21 | gHisto[i] = new TH1F(hn,hname,128,-0.5,1024*8-0.5); |
||
22 | } |
||
23 | |||
24 | int hdr[4]; |
||
25 | int n=0; |
||
26 | while (!feof(fp)){ |
||
27 | fread(hdr,sizeof(int),4,fp); |
||
28 | if (hdr[0]!=1) { |
||
29 | printf("error\n"); |
||
30 | return -1; |
||
31 | } |
||
32 | int nb = hdr[1]-4*sizeof(int); |
||
33 | fread(gBuf,sizeof(int),nb,fp); |
||
34 | unsigned int *data= gBuf; |
||
35 | int evsize=0; |
||
36 | int events=0; |
||
37 | int ib=1,count=0; |
||
38 | events = data[0]; |
||
39 | evsize = data[1]&0xffff; |
||
40 | if (evsize<2){ |
||
41 | continue; |
||
42 | } |
||
43 | n=hdr[3]; |
||
44 | const unsigned int END_MARKER=0xFAF5; |
||
45 | if (fDebug) printf("nb=%d Event:%d events=%d EvSize:%d\n",nb,n, events, evsize); |
||
46 | for (int i=0;i<evsize;i++) { |
||
47 | //if (fDebug) printf("%d\t%08x\n", ib, data[ib]); |
||
48 | |||
49 | if (data[ib]== END_MARKER) break; |
||
50 | if (ib%2==0) { |
||
51 | unsigned short word1 =data[ib ]&0xFFFF; |
||
52 | unsigned short word2 =data[ib+1]&0xFFFF; |
||
53 | unsigned short tdc = word1; |
||
54 | unsigned short ch = (word2 >> 1 ) &0x1F; |
||
55 | unsigned short edge = word2 & 0x1; |
||
56 | unsigned short q = (word2 >> 8) &0x1; |
||
57 | unsigned short x = (word2 >> 9) &0x1; |
||
58 | |||
59 | if (edge && ch < MAXCH) gHisto[ch]->Fill(tdc); |
||
60 | |||
61 | if (fDebug) printf("%d. [ch=%2d] edge=%d data=%d q=%d x=%d\n",count,ch,edge,tdc, q, x); |
||
62 | |||
63 | count++; |
||
64 | } |
||
65 | ib++; |
||
66 | } |
||
67 | if (data[evsize+1]!=END_MARKER) printf("Error! END_MARKER not found\n"); |
||
68 | //***************** |
||
69 | } |
||
70 | for (int i=0;i<MAXCH;i++){ |
||
71 | if (gHisto[i]->GetEntries()>0) gHisto[i]->Draw(); |
||
72 | |||
73 | } |
||
74 | |||
75 | } |