Subversion Repositories f9daq

Rev

Rev 218 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 218 Rev 315
1
#include <stdlib.h>
1
#include <stdlib.h>
2
#include <stdio.h>
2
#include <stdio.h>
3
#include <TFile.h>
3
#include <TFile.h>
4
#include <TH1F.h>
4
#include <TH1F.h>
5
#include <TH1D.h>
5
#include <TH1D.h>
6
#include <TH2F.h>
6
#include <TH2F.h>
7
#include <TStyle.h>
7
#include <TStyle.h>
8
#include <TCanvas.h>
8
#include <TCanvas.h>
9
#include <TLegend.h>
9
#include <TLegend.h>
10
// Program za analizo podatkov zajetih z AITSiPMDAQ 
10
// Program za analizo podatkov zajetih z AITSiPMDAQ 
11
 
11
 
12
int aitana( const char *fname="a1.dat", int range=10, float cut=500, int *offset = NULL)
12
int aitana( const char *fname="a1.dat", int range=5, float cut=300, int *offset = NULL)
13
{
13
{
14
        int debug=0;
14
        int debug=0;
15
       //int off[4]={507,521,497,459};
15
       //int off[4]={507,521,497,459};
-
 
16
                //int off[4]={198,203,190,150}; /// run 1
16
                int off[4]={87,125,95,80};
17
                int off[4]={120,120,120,120}; /// run 6
17
                if (offset) for (int i=0;i<4;i++){off[i]=offset[i];};
18
                if (offset) for (int i=0;i<4;i++){off[i]=offset[i];};
18
 
-
 
19
                gStyle->SetOptStat(0);
19
                gStyle->SetOptStat(0);
20
 
20
 
21
        char rootname[0xFF];
21
        char rootname[0xFF];
22
                sprintf(rootname, "%s.root", fname);
22
                sprintf(rootname, "%s.root", fname);
23
        TFile *froot = new  TFile(rootname,"RECREATE");
23
        TFile *froot = new  TFile(rootname,"RECREATE");
24
                char histname[128];
24
                char histname[128];
25
            TLegend * leg = new TLegend(0.8, 0.8, 1, 1);
25
            TLegend * leg = new TLegend(0.8, 0.8, 1, 1);
26
                TH1F *hadc[4];
26
                TH1F *hadc[4];
27
                TH1F *hadcsum;
27
                TH1F *hadcsum;
28
                TH1F *hadcsumx;
28
                TH1F *hadcsumx;
29
                TH1F *hadcsumy;
29
                TH1F *hadcsumy;
30
                TH2F *hxy;
30
                TH2F *hxy,*hxy1,*hxy2;
31
                TH2F *h2d=NULL;
31
                TH2F *h2d=NULL;
32
                TH2F *h2dx=NULL;
32
                TH2F *h2dx=NULL;
33
                TH2F *h2dy=NULL;
33
                TH2F *h2dy=NULL;
34
                TH2F *hxcorr=NULL;
34
                TH2F *hxcorr=NULL;
35
                TH2F *hycorr=NULL;
35
                TH2F *hycorr=NULL;
36
               
36
               
37
               
37
               
38
            for (int i=0; i<4; i++) {
38
            for (int i=0; i<4; i++) {
39
         sprintf(histname,"adc%d",i);
39
         sprintf(histname,"adc%d",i);
40
         hadc[i]=new TH1F(histname,histname,200,0.5,200*range+0.5);
40
         hadc[i]=new TH1F(histname,histname,200,0.5,200*range+0.5);
41
                }
41
                }
42
                hadcsum=new TH1F("adcsum","adcsum",200,0.5,8*200*range+0.5);
42
                hadcsum=new TH1F("adcsum","adcsum",200,0.5,8*200*range+0.5);
43
                hadcsumx=new TH1F("adcsumx","adcsumx",200,0.5,200*range+0.5);
43
                hadcsumx=new TH1F("adcsumx","adcsumx",200,0.5,200*range+0.5);
44
                hadcsumy=new TH1F("adcsumy","adcsumy",200,0.5,200*range+0.5);
44
                hadcsumy=new TH1F("adcsumy","adcsumy",200,0.5,200*range+0.5);
45
        hxy=new TH2F("hxy","Center of gravity;ycog(a.u.);xcog(a.u.)",200,0,1,200,0,1);
45
        hxy=new TH2F("hxy","Center of gravity;ycog(a.u.);xcog(a.u.)",200,-0.1,1.1,200,-0.1,1.1);
46
     
-
 
-
 
46
        hxy1=new TH2F("hxy1","Center of gravity for position 1;ycog(a.u.);xcog(a.u.)",200,-0.1,1.1,200,-0.1,1.1);
-
 
47
        hxy2=new TH2F("hxy2","Center of gravity for position 2;ycog(a.u.);xcog(a.u.)",200,-0.1,1.1,200,-0.1,1.1);
47
                FILE *fin=fopen(fname,"rb");
48
                FILE *fin=fopen(fname,"rb");
48
        if (fin==NULL) {
49
        if (fin==NULL) {
49
                printf("Error opening file %s\n",fname);
50
                printf("Error opening file %s\n",fname);
50
                return 0;
51
                return 0;
51
        }
52
        }
52
       
53
       
53
        unsigned short hdr[2];
54
        unsigned short hdr[2];
54
                int pos[7]={0,0,0,0,0,0,0};
55
                int pos[7]={0,0,0,0,0,0,0};
55
                int poshdr[9]={0,0,0,0,0,0,0,0,0};
56
                int poshdr[9]={0,0,0,0,0,0,0,0,0};
56
        float b[4], sum=0;
57
        float b[4], sum=0;
57
                unsigned short a[4];
58
                unsigned short a[4];
58
                unsigned short buf[10000];
59
                unsigned short buf[10000];
59
                float posx=0, posy=0;
60
                float posx=0, posy=0;
60
        while(!feof(fin)) {
61
        while(!feof(fin)) {
61
               
62
               
62
                int stat=fread(hdr,1,4,fin);
63
                int stat=fread(hdr,1,4,fin);
63
               
64
               
64
                //if (hdr[0]!= 1 ) printf("#%d %d\n",hdr[0], hdr[1] );
65
                //if (hdr[0]!= 1 ) printf("#%d %d\n",hdr[0], hdr[1] );
65
               
66
               
66
                                stat=fread(buf,1,hdr[1],fin);
67
                                stat=fread(buf,1,hdr[1],fin);
67
                                if (stat!=hdr[1]){
68
                                if (stat!=hdr[1]){
68
                                       
69
                                       
69
                                        printf("READ ERROR!\n");
70
                                        printf("READ ERROR!\n");
70
                                        break;
71
                                        break;
71
                                       
72
                                       
72
                                }
73
                                }
73
                switch (hdr[0]) {
74
                switch (hdr[0]) {
74
                                       
75
                                       
75
                                        case 0x1:
76
                                        case 0x1:
76
                                                   
77
                                                   
77
                                                   for (int i=0;i<hdr[1]/4/sizeof(unsigned short);i++){
78
                                                   for (int i=0;i<hdr[1]/4/sizeof(unsigned short);i++){
78
                                                           unsigned short *adc=&buf[i*4];
79
                                                           unsigned short *adc=&buf[i*4];
79
                                                           sum=0;                                                          
80
                                                           sum=0;                                                          
80
                                                           for (int j=0;j<4;j++){
81
                                                           for (int j=0;j<4;j++){
81
                                                                 a[j]=adc[j]&0xFFF;
82
                                                                 a[j]=adc[j]&0xFFF;
82
                                                                 //sum+=a[j];
83
                                                                 //sum+=a[j];
83
                                                                 hadc[j]->Fill(a[j]);  
84
                                                                 hadc[j]->Fill(a[j]);  
84
                                 b[j]=a[j]-off[j]+10;
85
                                 b[j]=a[j]-off[j];
-
 
86
                                                                 if (b[j]< 0) b[j]=0;
85
                                 sum+=b[j];                                                              
87
                                 sum+=b[j];                                                              
86
                                                           }
88
                                                           }
87
                                                           hadcsum->Fill(sum);
89
                                                           hadcsum->Fill(sum);
88
                                                           hadcsumx->Fill(a[0]+a[1]);
90
                                                           hadcsumx->Fill(a[0]+a[1]);
89
                                                           hadcsumy->Fill(a[2]+a[3]);
91
                                                           hadcsumy->Fill(a[2]+a[3]);
90
                               float y = (b[0]+b[1])? b[0]/(b[0]+b[1]) : 0;                                                    
92
                               float y = (b[0]+b[1])? b[0]/(b[0]+b[1]) : 0;                                                    
91
                               float x = (b[2]+b[3])? b[2]/(b[2]+b[3]) : 0;
93
                               float x = (b[2]+b[3])? b[2]/(b[2]+b[3]) : 0;
92
                                                           if (h2d) h2d->Fill(posx,posy,sum);
94
                                                           if (h2d) h2d->Fill(posx,posy,sum);
93
                                                           if (h2dx) h2dx->Fill(posx,posy,b[0]+b[1]);
95
                                                           if (h2dx) h2dx->Fill(posx,posy,b[0]+b[1]);
94
                                                           if (h2dy) h2dy->Fill(posx,posy,b[2]+b[3]);
96
                                                           if (h2dy) h2dy->Fill(posx,posy,b[2]+b[3]);
95
                                                           
97
                                                           
96
                                                           if (sum>cut) {
98
                                                           if (sum>cut) {
97
                                                                   hxy->Fill(y,x);
99
                                                                   hxy->Fill(y,x);
-
 
100
                                   if (pos[3]==poshdr[6]/4 && pos[4]==poshdr[7]/4) hxy1->Fill(y,x);
-
 
101
                                   if (pos[3]==poshdr[6]/4*3 && pos[4]==poshdr[7]/4*3) hxy2->Fill(y,x);
98
                                                                   if (hxcorr) hxcorr->Fill(pos[0],y);
102
                                                                   if (hxcorr) hxcorr->Fill(pos[0],y);
99
                                                                   if (hycorr) hycorr->Fill(pos[1],x);
103
                                                                   if (hycorr) hycorr->Fill(pos[1],x);
100
                                                           }       
104
                                                           }       
101
                                                           
105
                                                           
102
                                                   }
106
                                                   }
103
                                                   break;
107
                                                   break;
104
                                                case 0x2:{
108
                                                case 0x2:{
105
                           int *p= (int *) &buf[0];    
109
                           int *p= (int *) &buf[0];    
106
                                                   for (int k=0;k<7;k++) pos[k]=p[k];
110
                                                   for (int k=0;k<7;k++) pos[k]=p[k];
107
                           printf("Position: %d %d\n",pos[3], pos[4] );
111
                           printf("Position: %d %d\n",pos[3], pos[4] );
108
                                                   posx = poshdr[0]+pos[3]* poshdr[3];
112
                                                   posx = poshdr[0]+pos[3]* poshdr[3];
109
                                                   posy = poshdr[1]+pos[4]* poshdr[4];
113
                                                   posy = poshdr[1]+pos[4]* poshdr[4];
110
                        }                                                  
114
                        }                                                  
111
                                                   break;
115
                                                   break;
112
                                                case 0x3:{
116
                                                case 0x3:{
113
                                                int *p= (int *) &buf[0];
117
                                                int *p= (int *) &buf[0];
114
                        for (int k=0;k<9;k++) poshdr[k]=p[k];                                          
118
                        for (int k=0;k<9;k++) poshdr[k]=p[k];                                          
115
                                                     
119
                                                     
116
                                h2d=new TH2F("h2d","Position dependency of sum;x(step);y(step)",
120
                                h2d=new TH2F("h2d","Position dependency of sum;x(step);y(step)",
117
                                                poshdr[6],poshdr[0]-poshdr[3]*0.5 ,poshdr[0]+poshdr[6]*(poshdr[3]-0.5),
121
                                                poshdr[6],poshdr[0]-poshdr[3]*0.5 ,poshdr[0]+poshdr[6]*(poshdr[3]-0.5),
118
                                                poshdr[7],poshdr[1]-poshdr[4]*0.5 ,poshdr[1]+poshdr[7]*(poshdr[4]-0.5)   );
122
                                                poshdr[7],poshdr[1]-poshdr[4]*0.5 ,poshdr[1]+poshdr[7]*(poshdr[4]-0.5)   );
119
               
123
               
120
                                                h2dx=new TH2F("h2dx","Position dependency of xsum;x(step);y(step)",
124
                                                h2dx=new TH2F("h2dx","Position dependency of xsum;x(step);y(step)",
121
                                                poshdr[6],poshdr[0]-poshdr[3]*0.5 ,poshdr[0]+poshdr[6]*(poshdr[3]-0.5),
125
                                                poshdr[6],poshdr[0]-poshdr[3]*0.5 ,poshdr[0]+poshdr[6]*(poshdr[3]-0.5),
122
                                                poshdr[7],poshdr[1]-poshdr[4]*0.5 ,poshdr[1]+poshdr[7]*(poshdr[4]-0.5)   );
126
                                                poshdr[7],poshdr[1]-poshdr[4]*0.5 ,poshdr[1]+poshdr[7]*(poshdr[4]-0.5)   );
123
                                               
127
                                               
124
                                                h2dy=new TH2F("h2dy","Position dependency of ysum;x(step);y(step)",
128
                                                h2dy=new TH2F("h2dy","Position dependency of ysum;x(step);y(step)",
125
                                                poshdr[6],poshdr[0]-poshdr[3]*0.5 ,poshdr[0]+poshdr[6]*(poshdr[3]-0.5),
129
                                                poshdr[6],poshdr[0]-poshdr[3]*0.5 ,poshdr[0]+poshdr[6]*(poshdr[3]-0.5),
126
                                                poshdr[7],poshdr[1]-poshdr[4]*0.5 ,poshdr[1]+poshdr[7]*(poshdr[4]-0.5)   );
130
                                                poshdr[7],poshdr[1]-poshdr[4]*0.5 ,poshdr[1]+poshdr[7]*(poshdr[4]-0.5)   );
127
                                               
131
                                               
128
                                   
132
                                   
129
                                hxcorr=new TH2F("hxcorr","Correlation stage position vs cog;x(step);xcog(a.u.)",
133
                                hxcorr=new TH2F("hxcorr","Correlation stage position vs cog;x(step);xcog(a.u.)",
130
                                            poshdr[6],poshdr[0]-poshdr[3]*0.5 ,poshdr[0]+poshdr[6]*(poshdr[3]-0.5), 100 , 0, 1);
134
                                            poshdr[6],poshdr[0]-poshdr[3]*0.5 ,poshdr[0]+poshdr[6]*(poshdr[3]-0.5), 100 , 0, 1);
131
                 
135
                 
132
                                hycorr=new TH2F("hycorr","Correlation stage position vs cog;y(step);ycog(a.u.)",
136
                                hycorr=new TH2F("hycorr","Correlation stage position vs cog;y(step);ycog(a.u.)",
133
                                                poshdr[7],poshdr[1]-poshdr[4]*0.5 ,poshdr[1]+poshdr[7]*(poshdr[4]-0.5), 100 , 0, 1);
137
                                                poshdr[7],poshdr[1]-poshdr[4]*0.5 ,poshdr[1]+poshdr[7]*(poshdr[4]-0.5), 100 , 0, 1);
134
                                                }
138
                                                }
135
                                                break;
139
                                                break;
136
                                                default: break;
140
                                                default: break;
137
                                }
141
                                }
138
        }                              
142
        }                              
139
 
143
 
140
        TCanvas* c= new TCanvas("c","ADC",750,50,700,700);
144
        TCanvas* c= new TCanvas("c","ADC",750,50,700,700);
141
                sprintf(rootname, "%s.pdf", fname);
145
                sprintf(rootname, "%s.pdf", fname);
142
                c->Print(TString(rootname) + "[","pdf");
146
                c->Print(TString(rootname) + "[","pdf");
143
               
147
               
144
        c->Divide(2,3);
148
        c->Divide(2,3);
145
        for (int i=0; i<4; i++) {
149
        for (int i=0; i<4; i++) {
146
                  c->cd(i+1)->SetLogy();
150
                  c->cd(i+1)->SetLogy();
147
                  hadc[i]->DrawCopy();
151
                  hadc[i]->DrawCopy();
148
            }
152
            }
149
                c->cd(5)->SetLogy();hadcsumx->DrawCopy();
153
                c->cd(5)->SetLogy();hadcsumx->DrawCopy();
150
                c->cd(6)->SetLogy();hadcsumy->DrawCopy();
154
                c->cd(6)->SetLogy();hadcsumy->DrawCopy();
151
               
155
               
152
                /*
156
                /*
153
                c->cd(7);hadcsumx->DrawCopy();
157
                c->cd(7);hadcsumx->DrawCopy();
154
                hadc[0]->DrawCopy("same");
158
                hadc[0]->DrawCopy("same");
155
                hadc[1]->DrawCopy("same");
159
                hadc[1]->DrawCopy("same");
156
                c->cd(8);hadcsumy->DrawCopy();
160
                c->cd(8);hadcsumy->DrawCopy();
157
                hadc[2]->DrawCopy("same");
161
                hadc[2]->DrawCopy("same");
158
                hadc[3]->DrawCopy("same");
162
                hadc[3]->DrawCopy("same");
159
                */
163
                */
160
                c->Print(rootname,"pdf");
164
                c->Print(rootname,"pdf");
161
 
165
 
162
               
166
               
163
                c= new TCanvas("c1","ait reconstruction",750,50,700,700);
167
                c= new TCanvas("c1","ait reconstruction",750,50,700,700);
164
                c->Divide(2,3);
168
                c->Divide(2,4);
165
                if (!h2d){
169
                if (!h2d){
166
              c->Clear();
170
              c->Clear();
167
                  c->Divide(1,4);
171
                  c->Divide(2,3);
168
                }      
172
                }      
169
       
173
       
170
               
174
               
171
                hxy->SetMinimum(-1);
175
                hxy->SetMinimum(-1);
172
                hxy->SetMaximum(1000);
176
                hxy->SetMaximum(1000);
173
                c->cd(1)->SetLogz(); hxy->DrawCopy("colz");
177
                c->cd(1)->SetLogz(); hxy->DrawCopy("colz");
-
 
178
        c->cd(3)->SetLogz(); hxy1->DrawCopy("colz");
-
 
179
        c->cd(4)->SetLogz(); hxy2->DrawCopy("colz");
174
                c->cd(4)->SetLogy(); hadcsum->DrawCopy();
180
                c->cd(2)->SetLogy(); hadcsum->DrawCopy();
175
               
181
               
176
                if (h2d){
182
                if (h2d){
177
                  hxcorr->SetMinimum(-1);
183
                  hxcorr->SetMinimum(-1);
178
                  hycorr->SetMinimum(-1);
184
                  hycorr->SetMinimum(-1);
179
                  c->cd(5); hxcorr->DrawCopy("colz");
185
                  c->cd(7); hxcorr->DrawCopy("colz");
180
                  c->cd(6); hycorr->DrawCopy("colz");
186
                  c->cd(8); hycorr->DrawCopy("colz");
181
                }  
187
                }  
182
                TH1D *px = hxy->ProjectionX("_px",0,-1);
188
                TH1D *px = hxy->ProjectionX("_px",0,-1);
183
                c->cd(2); px->DrawCopy();
189
                c->cd(5); px->DrawCopy();
184
         
190
         
185
            TH1D *py = hxy->ProjectionY("_py",0,-1);
191
            TH1D *py = hxy->ProjectionY("_py",0,-1);
186
                c->cd(3); py->DrawCopy();
192
                c->cd(6); py->DrawCopy();
187
               
193
               
188
                c->Modified();
194
                c->Modified();
189
                c->Update();
195
                c->Update();
190
                c->Print(rootname,"pdf");
196
                c->Print(rootname,"pdf");
191
               
197
               
192
               
198
               
193
                if (h2d){
199
                if (h2d){
194
                  c= new TCanvas("c2","position dependence sum, xsum, ysum",750,50,700,700);
200
                  c= new TCanvas("c2","position dependence sum, xsum, ysum",750,50,700,700);
195
                  c->Divide(1,3);
201
                  c->Divide(1,3);
196
                  c->cd(1); h2d->DrawCopy("colz");
202
                  c->cd(1); h2d->DrawCopy("colz");
197
                  c->cd(2); h2dx->DrawCopy("colz");
203
                  c->cd(2); h2dx->DrawCopy("colz");
198
                  c->cd(3); h2dy->DrawCopy("colz");
204
                  c->cd(3); h2dy->DrawCopy("colz");
199
                  c->Modified();
205
                  c->Modified();
200
                  c->Update();
206
                  c->Update();
201
                  c->Print(rootname,"pdf");
207
                  c->Print(rootname,"pdf");
202
                }                
208
                }                
203
               
209
               
204
                c->Print(TString(rootname) + "]","pdf");
210
                c->Print(TString(rootname) + "]","pdf");
205
                froot->Write();
211
                froot->Write();
206
                froot->Close();
212
                froot->Close();
207
                if (fin) fclose(fin);
213
                if (fin) fclose(fin);
208
       
214
       
209
        return 0;
215
        return 0;
210
}
216
}
211
 
217