Rev 1 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1 | f9daq | 1 | /* |
2 | |||
3 | Skripta za kalibracijo pozicije kanalov |
||
4 | Vhod: histogrami utezenih pozicij |
||
5 | |||
6 | Navodilo: |
||
7 | 1.klikni na GCUT toolbar |
||
8 | 2.poklikaj vrhove vseh kristalov po vrstnem redu zgoraj levo->zgoraj desno ->spodaj desno |
||
9 | 3. zakljuci na zadnjem vrhu tako, da se enkrat kliknes na isto tocko |
||
10 | |||
11 | Izhod: Datoteka s kalibracijskimi histogrami, kjer je st. entrijev enako stevilki kanala |
||
12 | |||
13 | .x calibration.cxx("/tmp/pet.root","calibration.root") |
||
14 | |||
15 | */ |
||
16 | |||
17 | int calibration(char *fname, char* fout){ |
||
18 | |||
19 | char cmd[256]; |
||
20 | TFile *f= new TFile(fname); |
||
21 | TFile *fnew= new TFile(fout,"RECREATE"); |
||
22 | for (int ii=0;ii<4;ii++){ |
||
23 | sprintf(cmd,"c%d",ii); |
||
24 | TCanvas *c= new TCanvas(cmd,cmd,1500,1000); |
||
25 | sprintf(cmd,"pmt1%d",ii); |
||
26 | TH2 *h = (TH2 *) f->Get(cmd); |
||
27 | if (!h) { |
||
28 | cout << "Histogram not found " << cmd << endl; |
||
29 | continue; |
||
30 | } else { |
||
31 | |||
32 | } |
||
33 | c->ToggleToolBar(); |
||
34 | c->Divide(2,1); |
||
35 | c->cd(1); |
||
36 | h->Draw("colz"); |
||
37 | sprintf(cmd,"pmt1%d_calib",ii); |
||
38 | TH2F *h1= h->Clone(cmd); |
||
39 | h1->Reset(); |
||
40 | |||
41 | c->WaitPrimitive("CUTG"); |
||
42 | TCutG *mycutg = (TCutG*)gROOT->GetListOfSpecials()->FindObject("CUTG"); |
||
43 | if (mycutg) { |
||
44 | sprintf(cmd,"cutg%d",ii); |
||
45 | mycutg->SetName(cmd); |
||
46 | mycutg->Print(); |
||
47 | int n= mycutg->GetN(); |
||
48 | double x,y; |
||
49 | TAxis *xaxis = h1->GetXaxis(); |
||
50 | TAxis *yaxis = h1->GetYaxis(); |
||
51 | for (int i=0; i < xaxis->GetNbins();i++){ |
||
52 | double x0=yaxis->GetBinCenter(i+1); |
||
53 | for (int j=0; j < yaxis->GetNbins();j++){ |
||
54 | double y0=yaxis->GetBinCenter(j+1); |
||
55 | double rmin=1e10; |
||
56 | int w=-1; |
||
57 | for (int k=0;k<n;k++){ |
||
58 | mycutg->GetPoint(k, x, y); |
||
59 | double r2 = (x0-x)*(x0-x)+(y0-y)*(y0-y); |
||
60 | if (r2<rmin || k==0 ) { |
||
61 | w=k; |
||
62 | rmin=r2; |
||
63 | } |
||
64 | |||
65 | } |
||
66 | h1->Fill(x0,y0,w); |
||
67 | } |
||
68 | } |
||
69 | c->cd(2); |
||
70 | h1->Draw("colz"); |
||
71 | h->Write(); |
||
72 | mycutg->Write(); |
||
73 | } |
||
74 | } |
||
75 | fnew->Write(); |
||
76 | return 0; |
||
77 | } |