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