Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
291 | f9daq | 1 | #include "stdio.h" |
2 | #include "TROOT.h" |
||
3 | #include "TSystem.h" |
||
4 | #include "TFile.h" |
||
5 | #include "TH1F.h" |
||
6 | #include "TH2F.h" |
||
7 | #include "TF1.h" |
||
8 | #include "TMath.h" |
||
9 | |||
10 | #define NCH 32 |
||
11 | |||
12 | #define HEADER_WORD_1 0xFFFF |
||
13 | #define HEADER_WORD_2 0xEA0C |
||
14 | #define ID_ADC_HG 0x81 |
||
15 | #define ID_ADC_LG 0x60 |
||
16 | #define ID_TDC 0xCC |
||
17 | #define PRINT_FREQUENCY 10000 |
||
18 | |||
19 | void e2r(char* dfile0="test", int dbg=0) |
||
20 | { |
||
21 | char fullname[256], sbuff[256]; |
||
22 | |||
23 | FILE *dfp; |
||
24 | char dfile[256]; |
||
25 | sprintf(dfile, "data/%s", dfile0); |
||
26 | |||
27 | if((dfp=fopen(dfile,"rb")) == NULL) { |
||
28 | printf("Cannot open data file %s !!!\n", dfile); |
||
29 | return; |
||
30 | } else { |
||
31 | printf("Opened data file %s.\n", dfile); |
||
32 | } |
||
33 | |||
34 | if(sizeof(int) != 4) { |
||
35 | printf("sizeof(int) != 4, sizeof(int) = %d !!!\n", sizeof(int)); |
||
36 | return; |
||
37 | } |
||
38 | int dum32; |
||
39 | |||
40 | |||
41 | |||
42 | char hname[256], htitle[256]; |
||
43 | TH1F *htdc[2][NCH], *hadc_hg[NCH], *hadc_lg[NCH]; |
||
44 | |||
45 | //opens ROOT file |
||
46 | TFile *rootfile; char fnameroot[256]; |
||
47 | sprintf(fnameroot, "root/%s.root", dfile0); |
||
48 | //rootfile = (TFile *) gROOT->FindObjectAny(dfile0); |
||
49 | //if (rootfile!=NULL) {printf("!!!\n");rootfile->Close();} |
||
50 | //rootfile = new TFile(fnameroot); |
||
51 | //if(rootfile) rootfile->Close(); |
||
52 | rootfile = new TFile(fnameroot,"RECREATE",dfile0); |
||
53 | |||
54 | for(int i=0; i<NCH; i++) { |
||
55 | sprintf(hname, "htdc_le_%d", i); |
||
56 | htdc[0][i] = (TH1F*)gROOT->FindObject(hname); |
||
57 | if(htdc[0][i]) delete htdc[0][i]; |
||
58 | htdc[0][i] = new TH1F(hname, hname, 256, -0.5, 255.5); |
||
59 | |||
60 | sprintf(hname, "htdc_te_%d", i); |
||
61 | htdc[1][i] = (TH1F*)gROOT->FindObject(hname); |
||
62 | if(htdc[1][i]) delete htdc[1][i]; |
||
63 | htdc[1][i] = new TH1F(hname, hname, 256, -0.5, 255.5); |
||
64 | |||
65 | sprintf(hname, "hadc_hg%d", i); |
||
66 | hadc_hg[i] = (TH1F*)gROOT->FindObject(hname); |
||
67 | if(hadc_hg[i]) delete hadc_hg[i]; |
||
68 | hadc_hg[i] = new TH1F(hname, hname, 4096, -0.5, 4095.5); |
||
69 | |||
70 | sprintf(hname, "hadc_lg%d", i); |
||
71 | hadc_lg[i] = (TH1F*)gROOT->FindObject(hname); |
||
72 | if(hadc_lg[i]) delete hadc_lg[i]; |
||
73 | hadc_lg[i] = new TH1F(hname, hname, 4096, -0.5, 4095.5); |
||
74 | } |
||
75 | |||
76 | // ------------- data ---------------------------------------------------- |
||
77 | |||
78 | int ceve = 0; |
||
79 | while(!feof(dfp)) { |
||
80 | fread( &dum32, sizeof(int), 1, dfp); |
||
81 | |||
82 | int hw1 = (dum32 >> 16) & 0xFFFF; |
||
83 | int hw2 = dum32 & 0xFFFF; |
||
84 | if( (hw1 == HEADER_WORD_1) && (hw2 == HEADER_WORD_2) ) { |
||
85 | fread( &dum32, sizeof(int), 1, dfp); |
||
86 | int Number_of_word = dum32 & 0xFFFF; |
||
87 | fread( &dum32, sizeof(int), 1, dfp); |
||
88 | int EventCounter = (dum32 >> 16) & 0xFFFF; |
||
89 | if(dbg) printf("\n>>>>>> Number_of_word = %d | EventCounter = %d\n", Number_of_word, EventCounter); |
||
90 | //~ else if( !(EventCounter%PRINT_FREQUENCY) ) printf(" EventConter = %d\n", EventCounter); |
||
91 | else if( !(EventCounter%PRINT_FREQUENCY) ) printf("."); |
||
92 | ceve++; |
||
93 | continue; |
||
94 | } |
||
95 | |||
96 | int id = (dum32 >> 24) & 0xFF; |
||
97 | int ch, overflow, edge, data; |
||
98 | switch(id) { |
||
99 | case ID_ADC_HG: |
||
100 | ch = (dum32 >> 16) & 0x1F; |
||
101 | overflow = (dum32 >> 13) & 0x1; |
||
102 | data = (dum32) & 0xFFF; |
||
103 | //~ printf("ID_ADC_HG: ch = %d | X = %d | data = %d\n", ch, overflow, data); |
||
104 | if(dbg) printf("HG[%2d]=%4d ", ch, data); |
||
105 | hadc_hg[ch]->Fill(data); |
||
106 | break; |
||
107 | case ID_ADC_LG: |
||
108 | ch = (dum32 >> 16) & 0x1F; |
||
109 | overflow = (dum32 >> 13) & 0x1; |
||
110 | data = (dum32) & 0xFFF; |
||
111 | //~ printf("ID_ADC_LG: ch = %d | X = %d | data = %d\n", ch, overflow, data); |
||
112 | if(dbg) printf("LG[%2d]=%4d ", ch, data); |
||
113 | hadc_lg[ch]->Fill(data); |
||
114 | break; |
||
115 | case ID_TDC: |
||
116 | ch = (dum32 >> 16) & 0x1F; |
||
117 | edge = (dum32 >> 15) & 0x1; |
||
118 | data = (dum32) & 0x3FFF; |
||
119 | printf("ID_TDC: ch = %d | X = %d | data = %d\n", ch, overflow, data); |
||
120 | if(edge < 2) htdc[edge][ch]->Fill(data); |
||
121 | break; |
||
122 | default: |
||
123 | printf("default: dum32 = 0x%X!!!\n", dum32); |
||
124 | break; |
||
125 | } |
||
126 | //~ ceve++; |
||
127 | //~ if( !(ceve%PRINT_FREQUENCY) ) printf("."); |
||
128 | if(dbg && (ceve > dbg) ) break; |
||
129 | } |
||
130 | printf("\nProcessed events = %d\n", ceve); |
||
131 | |||
132 | // ------------------------------------------------------------------------ |
||
133 | |||
134 | if(dfp) fclose(dfp); |
||
135 | |||
136 | if(dbg) return; |
||
137 | if(rootfile) { |
||
138 | rootfile->Write(); |
||
139 | printf("Saved to %s\n", fnameroot); |
||
140 | rootfile->Close(); |
||
141 | } |
||
142 | |||
143 | gSystem->Exit(1); |
||
144 | } |