Subversion Repositories f9daq

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
326 f9daq 1
#include <stdio.h>
2
#include <stdlib.h>
3
 
4
#include <TROOT.h>
5
#include <TH1D.h>
6
#include <TH2D.h>
7
#include <TH3D.h>
8
#include <TCanvas.h>
9
#include <TStyle.h>
10
#include <TSystem.h>
11
#include <TFile.h>
12
#include <TDirectory.h>
13
#include <TPaveText.h>
14
 
15
#include "base.h"
16
#include "focus.h"
17
 
18
int focus(int runNumber, int save) {
19
 
20
  int HAPDnumber; //Number of HAPD: 0, 1, 2 or 3!
21
 
22
  int direction, nx, ny;
23
  char name[128];
24
  char pdfname[128];
25
  char buf[256];
26
  float pNoise;
27
  int color[6] = {1,2,4,6,8,9};
28
 
29
  char hname[0xF];
30
 
31
  int max = 20;
32
 
33
  TFile * data[max];
34
 
35
 
36
  for (int b=0;b<max;b++){
37
    sprintf(buf,"./meritve/%04d_4_2DX_zOS_%05d.root",runNumber+b,(runNumber-10+b)*1000);
38
    data[b] = new TFile(buf);
39
  }
40
 
41
  const char * serialNumber = getSN();
42
  char * serialNumberTemp = strdup(serialNumber);
43
  char * HAPDserialNumber;
44
 
45
  GRID m = mapping();
46
  int vrstaPisave = 82;
47
 
48
  TCanvas * c;
49
  TPad * pad1, * pad2, * pad3;
50
  TPad * VirtualPad2[12];
51
  TPaveText * info, * axisName;
52
  TAxis * axis;
53
  TH3D * h;
54
  TH2D * slice[12]; //take the right slice from 3D histogram
55
  TH1D * p[12];
56
 
57
  /********** GLOBALNE **********/
58
    gStyle->SetOptStat(0);
59
    //gStyle->SetOptTitle(1);
60
    gStyle->SetTitleFontSize(.15);
61
 
62
  for(int HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
63
    HAPDserialNumber = strsep(&serialNumberTemp,",");
64
    if(!strcmp(HAPDserialNumber,"noserial")) continue;
65
 
66
    sprintf(hname,"hxy%d_0;1",HAPDnumber);
67
    printf("%s \t %s \n",HAPDserialNumber,hname);
68
 
69
    h = (TH3D *) data[0]->Get(hname);
70
 
71
    /********** SMER MERITVE **********/
72
    h->GetZaxis()->SetRange(1,1);
73
    nx = h->GetNbinsX();
74
    ny = h->GetNbinsY();
75
    if (nx>=ny) direction = 0;
76
    else direction = 1;
77
 
78
    printf("Direction = %d\n", direction);
79
 
80
    /********** CANVAS **********/
81
    if (!direction) {
82
      sprintf(buf,"%04d_%s_px",runNumber,HAPDserialNumber);
83
      c = new TCanvas(buf,buf,0,0,2000,2000);
84
    } else {
85
      sprintf(buf,"%04d_%s_py",runNumber,HAPDserialNumber);
86
      c = new TCanvas(buf,buf,0,0,2000,2000);
87
    }
88
    c->Divide(4,5,0,0);
89
 
90
    for(int a=0;a<max;a++){
91
      c->cd(a+1);
92
      c->cd(a+1)->SetBorderSize(0);
93
      c->cd(a+1)->SetBorderMode(0);
94
      pad1 = new TPad("pad1","Title",0.05,0.94,0.95,1,0,0);
95
        pad1->SetFillStyle(4000);
96
        pad1->Draw();
97
 
98
      pad2 = new TPad("pad2","Graphs",0,0,1,0.95,0,0);
99
        pad2->SetFillStyle(4000);
100
        pad2->Draw();
101
 
102
      pad3 = new TPad("pad3","AxisTitle",0.57,0,0.92,0.05,0,0);
103
        pad3->SetFillStyle(4000);
104
        pad3->Draw();
105
 
106
      /********** PAD 1 **********/
107
      pad1->cd();
108
        info = new TPaveText(0.2,0,0.8,1,"ndc");
109
        info->SetBorderSize(0);
110
        info->SetFillColor(4000);
111
        info->SetTextSize(1);
112
        info->SetTextAlign(22);
113
 
114
        sprintf(name,"Z = %d stage steps", (runNumber-10+a)*1000);
115
        info->AddText(name);
116
        info->Draw();
117
 
118
      /********** PAD3 **********/
119
      pad3->cd();
120
        axisName = new TPaveText(0.2,0,0.8,1,"ndc");
121
        axisName->SetBorderSize(0);
122
        axisName->SetFillColor(4000);
123
        axisName->SetTextSize(.7);
124
        axisName->SetTextFont(vrstaPisave);
125
        axisName->SetTextAlign(22);
126
 
127
        sprintf(name,"Incident light position (stage step)");
128
        axisName->AddText(name);
129
        //axisName->Draw();
130
 
131
      /********** PAD2 **********/
132
      pad2->cd();
133
      pad2->Divide(1,4,0,0);
134
 
135
      if(a) h = (TH3D *) data[a]->Get(hname);
136
 
137
      for (int i=4;i<8;i++) {
138
        if (!direction) {
139
          pad2->cd(11 - i+1-4);
140
          VirtualPad2[11 - i-4] = (TPad *)(pad2->cd(11 - i+1-4)); //Tole nastaviš zato, da lahko daš Log skalo
141
          VirtualPad2[11 - i-4]->SetLogy(1);
142
          //VirtualPad2[11 - i]->SetLeftMargin(.05);
143
          //VirtualPad2[11 - i]->SetRightMargin(.05);
144
          //VirtualPad2[11 - i]->SetGrid();
145
        } else {
146
          pad2->cd(i+1-4);
147
          VirtualPad2[i-4] = (TPad *)(pad2->cd(11 - i+1 - 4)); //Tole nastaviš zato, da lahko daš Log skalo
148
          VirtualPad2[i-4]->SetLogy(1);
149
          //VirtualPad2[i]->SetLeftMargin(.05);
150
          //VirtualPad2[i]->SetRightMargin(.05);
151
          //VirtualPad2[i]->SetGrid();
152
        }
153
        for (int j=4;j<8;j++) {
154
          if (!direction) h->GetZaxis()->SetRange(m.koordinatniSistem[j][i]+1,m.koordinatniSistem[j][i]+1);
155
          else h->GetZaxis()->SetRange(m.koordinatniSistem[i][j]+1,m.koordinatniSistem[i][j]+1);
156
 
157
          slice[j] = (TH2D *)h->Project3D("pyx");
158
 
159
          if (!direction) {
160
            sprintf(name,"PX: (%d,%d)",j,i);
161
            p[j] = slice[j]->ProjectionX(name,i+1-4,i+1-4);
162
            sprintf(name,"Projection X of row %d",i);
163
          } else {
164
            sprintf(name,"PY: (%d,%d)",i,j);
165
            p[j] = slice[j]->ProjectionY(name,i+1-4,i+1-4);
166
            sprintf(name,"Projection Y of column %d",i);
167
          }
168
        axis = p[j]->GetXaxis();
169
 
170
 
171
        if(!direction) VirtualPad2[3]->SetBottomMargin(.17);
172
        else VirtualPad2[0]->SetBottomMargin(.17);
173
 
174
        p[j]->SetLineWidth(1);
175
 
176
        p[j]->SetTitle(name);
177
        p[j]->SetTitleOffset(1.5);
178
 
179
        p[j]->GetYaxis()->SetRangeUser(1,10000);
180
        p[j]->GetYaxis()->SetTickLength(0.01);
181
        p[j]->GetYaxis()->SetTitleFont(vrstaPisave);
182
        p[j]->GetYaxis()->SetLabelFont(vrstaPisave);
183
        p[j]->GetYaxis()->SetLabelSize(0.05);
184
        p[j]->GetYaxis()->SetLabelColor(kBlack);
185
        p[j]->GetYaxis()->SetTitle("# events");
186
        p[j]->GetYaxis()->SetNdivisions(0);
187
        p[j]->GetYaxis()->CenterTitle();
188
        p[j]->GetYaxis()->SetTitleSize(0.05);
189
        p[j]->GetYaxis()->SetTitleOffset(.5);
190
        p[j]->GetYaxis()->SetTitleColor(kWhite);
191
 
192
        p[j]->GetXaxis()->SetTickLength(0.1);
193
        p[j]->GetXaxis()->SetTitleFont(vrstaPisave);
194
        p[j]->GetXaxis()->SetLabelFont(vrstaPisave);
195
        p[j]->GetXaxis()->SetLabelSize(0.15);
196
        p[j]->GetXaxis()->SetLabelColor(kBlack);
197
        p[j]->GetXaxis()->SetLabelOffset(.05);
198
        p[j]->GetXaxis()->SetTitle("Incident light position (stage step)");
199
        //p[j]->GetXaxis()->SetNdivisions(0);
200
        //p[j]->GetXaxis()->CenterTitle();
201
        p[j]->GetXaxis()->SetTitleSize(0.01);
202
        p[j]->GetXaxis()->SetTitleColor(kWhite); //zato ker ga ne moreš pozicionirat
203
        p[j]->GetXaxis()->SetTitleOffset(.5);
204
 
205
        pNoise = noise(p[j]);
206
        for (int k=1;k<=p[j]->GetSize();k++) p[j]->SetBinContent(k,p[j]->GetBinContent(k)-pNoise);
207
 
208
        if (j<6) p[j]->SetLineColor(kWhite+color[j]);
209
        else p[j]->SetLineColor(kWhite+color[j-6]);
210
        if (j==4) p[j]->DrawCopy();
211
        else p[j]->DrawCopy("SAME");
212
      }
213
    }
214
  }
215
    c->Modified();
216
    c->Update();
217
    if (save==1){
218
      switch (direction) {
219
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus1_run%04d_to%04d.pdf",HAPDserialNumber,runNumber,runNumber+max-1);break;
220
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus1_run%04d_to%04d.pdf",HAPDserialNumber,runNumber,runNumber+max-1);break;
221
      }
222
      c->SaveAs(pdfname,"pdf");
223
    } else if (save==2){
224
      switch (direction) {
225
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus1.pdf(",HAPDserialNumber);break;
226
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus1.pdf(",HAPDserialNumber);break;
227
      }
228
      c->SaveAs(pdfname,"pdf");
229
    } else if (save==3){
230
      switch (direction) {
231
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus1.pdf",HAPDserialNumber);break;
232
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus1.pdf",HAPDserialNumber);break;
233
      }
234
      c->SaveAs(pdfname,"pdf");
235
    } else if (save==4){
236
      switch (direction) {
237
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus1.pdf)",HAPDserialNumber);break;
238
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus1.pdf)",HAPDserialNumber);break;
239
      }
240
      c->SaveAs(pdfname,"pdf");
241
    }
242
  }
243
 
244
  return 0;
245
}
246
 
247
int focus2(int runNumber, int save) {
248
 
249
  int HAPDnumber; //Number of HAPD: 0, 1, 2 or 3!
250
 
251
  int direction, nx, ny;
252
  char name[128];
253
  char pdfname[128];
254
  char buf[256];
255
  float pNoise;
256
  int color[6] = {1,2,4,6,8,9};
257
 
258
  char hname[0xF];
259
  int max = 20;
260
 
261
  TFile * data[max];
262
  for (int b=0;b<max;b++){
263
    sprintf(buf,"./meritve/%04d_4_2DX_zOS_%05d.root",runNumber+b,(runNumber-10+b)*1000);
264
    data[b] = new TFile(buf);
265
  }
266
 
267
  const char * serialNumber = getSN();
268
  char * serialNumberTemp = strdup(serialNumber);
269
  char * HAPDserialNumber;
270
 
271
  GRID m = mapping();
272
  int vrstaPisave = 82;
273
 
274
  TCanvas * c;
275
  TPad * pad2;
276
  TPad * VirtualPad2[max];
277
  TH3D * h;
278
  TH2D * slice[max]; //take the right slice from 3D histogram
279
  TH1D * p[max];
280
 
281
  /********** GLOBALNE **********/
282
    gStyle->SetOptStat(0);
283
    //gStyle->SetOptTitle(1);
284
    gStyle->SetTitleFontSize(.15);
285
 
286
 
287
 
288
  int line = 1;
289
 
290
  for(int HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
291
    HAPDserialNumber = strsep(&serialNumberTemp,",");
292
    if(!strcmp(HAPDserialNumber,"noserial")) continue;
293
 
294
    sprintf(hname,"hxy%d_0;1",HAPDnumber);
295
    printf("%s \t %s \n",HAPDserialNumber,hname);
296
 
297
    h = (TH3D *) data[0]->Get(hname);
298
 
299
    /********** SMER MERITVE **********/
300
    h->GetZaxis()->SetRange(1,1);
301
    nx = h->GetNbinsX();
302
    ny = h->GetNbinsY();
303
    if (nx>=ny) direction = 0;
304
    else direction = 1;
305
 
306
    printf("Direction = %d\n", direction);
307
 
308
    /********** CANVAS **********/
309
    if (!direction) {
310
      sprintf(buf,"%04d_%s_px",runNumber,HAPDserialNumber);
311
      c = new TCanvas(buf,buf,0,0,500,2000);
312
    } else {
313
      sprintf(buf,"%04d_%s_py",runNumber,HAPDserialNumber);
314
      c = new TCanvas(buf,buf,0,0,2000,2000);
315
    }
316
      pad2 = new TPad("pad2","Graphs",0,0,1,1,0,0);
317
        pad2->SetFillStyle(4000);
318
        pad2->Draw();
319
 
320
      /********** PAD2 **********/
321
      pad2->cd();
322
      pad2->Divide(1,max,0,0);
323
 
324
      for (int i=0;i<max;i++) {
325
        if(i) h = (TH3D *) data[i]->Get(hname);
326
 
327
          pad2->cd(i+1);
328
          VirtualPad2[i] = (TPad *)(pad2->cd(i+1)); //Tole nastaviš zato, da lahko daš Log skalo
329
          VirtualPad2[i]->SetLogy(1);
330
          //VirtualPad2[i]->SetLeftMargin(.05);
331
          //VirtualPad2[i]->SetRightMargin(.05);
332
          //VirtualPad2[i]->SetGrid();
333
 
334
        for (int j=4;j<8;j++) {
335
          if (!direction) h->GetZaxis()->SetRange(m.koordinatniSistem[j][line+4]+1,m.koordinatniSistem[j][line+4]+1);
336
          else h->GetZaxis()->SetRange(m.koordinatniSistem[line+4][j]+1,m.koordinatniSistem[line+4][j]+1);
337
 
338
          slice[j] = (TH2D *)h->Project3D("pyx");
339
 
340
          if (!direction) {
341
            sprintf(name,"PX: (%d,%d)",j,line+4);
342
            p[j] = slice[j]->ProjectionX(name,line+1,line+1);
343
            sprintf(name,"Z = %d      Projection X of row %d",(runNumber-10+i)*1000,line+4);
344
          } else {
345
            sprintf(name,"PY: (%d,%d)",line+4,j);
346
            p[j] = slice[j]->ProjectionY(name,line+1,line+1);
347
            sprintf(name,"Z = %d      Projection Y of column %d",(runNumber-10+i)*1000,line+4);
348
          }
349
 
350
        p[j]->SetLineWidth(1);
351
 
352
        p[j]->SetTitle(name);
353
        p[j]->SetTitleOffset(1.5);
354
 
355
        p[j]->GetYaxis()->SetRangeUser(1,10000);
356
        p[j]->GetYaxis()->SetTickLength(0.01);
357
        p[j]->GetYaxis()->SetTitleFont(vrstaPisave);
358
        p[j]->GetYaxis()->SetLabelFont(vrstaPisave);
359
        p[j]->GetYaxis()->SetLabelSize(0.05);
360
        p[j]->GetYaxis()->SetLabelColor(kBlack);
361
        p[j]->GetYaxis()->SetTitle("# events");
362
        p[j]->GetYaxis()->SetNdivisions(0);
363
        p[j]->GetYaxis()->CenterTitle();
364
        p[j]->GetYaxis()->SetTitleSize(0.05);
365
        p[j]->GetYaxis()->SetTitleOffset(.5);
366
        p[j]->GetYaxis()->SetTitleColor(kWhite);
367
 
368
        p[j]->GetXaxis()->SetTickLength(0.1);
369
        p[j]->GetXaxis()->SetTitleFont(vrstaPisave);
370
        p[j]->GetXaxis()->SetLabelFont(vrstaPisave);
371
        p[j]->GetXaxis()->SetLabelSize(0.15);
372
        p[j]->GetXaxis()->SetLabelColor(kBlack);
373
        p[j]->GetXaxis()->SetLabelOffset(.05);
374
        p[j]->GetXaxis()->SetTitle("Incident light position (stage step)");
375
        //p[j]->GetXaxis()->SetNdivisions(0);
376
        //p[j]->GetXaxis()->CenterTitle();
377
        p[j]->GetXaxis()->SetTitleSize(0.01);
378
        p[j]->GetXaxis()->SetTitleColor(kWhite); //zato ker ga ne moreš pozicionirat
379
        p[j]->GetXaxis()->SetTitleOffset(.5);
380
 
381
        pNoise = noise(p[j]);
382
        for (int k=1;k<=p[j]->GetSize();k++) p[j]->SetBinContent(k,p[j]->GetBinContent(k)-pNoise);
383
 
384
        if (j<6) p[j]->SetLineColor(kWhite+color[j]);
385
        else p[j]->SetLineColor(kWhite+color[j-6]);
386
        if (j==4) p[j]->DrawCopy();
387
        else p[j]->DrawCopy("SAME");
388
      }
389
  if(i==max-1) VirtualPad2[max-1]->SetBottomMargin(.17);
390
 
391
  }
392
    c->Modified();
393
    c->Update();
394
    if (save==1){
395
      switch (direction) {
396
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus2_run%04d_to%04d.pdf",HAPDserialNumber,runNumber,runNumber+max-1);break;
397
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus2_run%04d_to%04d.pdf",HAPDserialNumber,runNumber,runNumber+max-1);break;
398
      }
399
      c->SaveAs(pdfname,"pdf");
400
    } else if (save==2){
401
      switch (direction) {
402
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus2.pdf(",HAPDserialNumber);break;
403
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus2.pdf(",HAPDserialNumber);break;
404
      }
405
      c->SaveAs(pdfname,"pdf");
406
    } else if (save==3){
407
      switch (direction) {
408
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus2.pdf",HAPDserialNumber);break;
409
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus2.pdf",HAPDserialNumber);break;
410
      }
411
      c->SaveAs(pdfname,"pdf");
412
    } else if (save==4){
413
      switch (direction) {
414
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus2.pdf)",HAPDserialNumber);break;
415
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus2.pdf)",HAPDserialNumber);break;
416
      }
417
      c->SaveAs(pdfname,"pdf");
418
    }
419
  }
420
 
421
  return 0;
422
}
423
 
424
int focus3(int runNumber, int save) {
425
 
426
  int HAPDnumber; //Number of HAPD: 0, 1, 2 or 3!
427
 
428
  int direction, nx, ny;
429
  char name[128];
430
  char pdfname[128];
431
  char buf[256];
432
  float pNoise;
433
  int color[6] = {1,2,4,6,8,9};
434
 
435
  char hname[0xF];
436
 
437
  const char * serialNumber = getSN();
438
  char * serialNumberTemp = strdup(serialNumber);
439
  char * HAPDserialNumber;
440
 
441
  GRID m = mapping();
442
  int vrstaPisave = 82;
443
 
444
  TCanvas * c;
445
  TPad * pad1, * pad2, * pad3;
446
  TPad * VirtualPad2[12];
447
  TPaveText * info, * axisName;
448
  TAxis * axis;
449
  TH3D * h;
450
  TH2D * slice[12]; //take the right slice from 3D histogram
451
  TH1D * p[12];
452
 
453
  /********** GLOBALNE **********/
454
    gStyle->SetOptStat(0);
455
    //gStyle->SetOptTitle(1);
456
    gStyle->SetTitleFontSize(.15);
457
 
458
  for(int HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
459
    HAPDserialNumber = strsep(&serialNumberTemp,",");
460
    if(!strcmp(HAPDserialNumber,"noserial")) continue;
461
 
462
    sprintf(hname,"hxy%d_0;1",HAPDnumber);
463
    printf("%s \t %s \n",HAPDserialNumber,hname);
464
 
465
    h = (TH3D *) gDirectory->Get(hname);
466
 
467
    /********** SMER MERITVE **********/
468
    h->GetZaxis()->SetRange(1,1);
469
    nx = h->GetNbinsX();
470
    ny = h->GetNbinsY();
471
    if (nx>=ny) direction = 0;
472
    else direction = 1;
473
 
474
    printf("Direction = %d\n", direction);
475
 
476
    /********** CANVAS **********/
477
    if (!direction) {
478
      sprintf(buf,"%04d_%s_px",runNumber,HAPDserialNumber);
479
      c = new TCanvas(buf,buf,0,0,700,700);
480
    } else {
481
      sprintf(buf,"%04d_%s_py",runNumber,HAPDserialNumber);
482
      c = new TCanvas(buf,buf,0,0,700,700);
483
    }
484
      pad1 = new TPad("pad1","Title",0.05,0.94,0.95,1,0,0);
485
        pad1->SetFillStyle(4000);
486
        pad1->Draw();
487
 
488
      pad2 = new TPad("pad2","Graphs",0,0,1,0.95,0,0);
489
        pad2->SetFillStyle(4000);
490
        pad2->Draw();
491
 
492
      pad3 = new TPad("pad3","AxisTitle",0.57,0,0.92,0.05,0,0);
493
        pad3->SetFillStyle(4000);
494
        pad3->Draw();
495
 
496
      /********** PAD 1 **********/
497
      pad1->cd();
498
        info = new TPaveText(0.2,0,0.8,1,"ndc");
499
        info->SetBorderSize(0);
500
        info->SetFillColor(4000);
501
        info->SetTextSize(1);
502
        info->SetTextAlign(22);
503
 
504
        sprintf(name,"HAPD# %s   (center)", HAPDserialNumber);
505
        info->AddText(name);
506
        info->Draw();
507
 
508
      /********** PAD3 **********/
509
      pad3->cd();
510
        axisName = new TPaveText(0.2,0,0.8,1,"ndc");
511
        axisName->SetBorderSize(0);
512
        axisName->SetFillColor(4000);
513
        axisName->SetTextSize(.7);
514
        axisName->SetTextFont(vrstaPisave);
515
        axisName->SetTextAlign(22);
516
 
517
        sprintf(name,"Incident light position (stage step)");
518
        axisName->AddText(name);
519
        //axisName->Draw();
520
 
521
      /********** PAD2 **********/
522
      pad2->cd();
523
      pad2->Divide(1,4,0,0);
524
 
525
      h = (TH3D *) gDirectory->Get(hname);
526
 
527
      for (int i=4;i<8;i++) {
528
        if (!direction) {
529
          pad2->cd(11 - i+1-4);
530
          VirtualPad2[11 - i-4] = (TPad *)(pad2->cd(11 - i+1-4)); //Tole nastaviš zato, da lahko daš Log skalo
531
          VirtualPad2[11 - i-4]->SetLogy(1);
532
          //VirtualPad2[11 - i]->SetLeftMargin(.05);
533
          //VirtualPad2[11 - i]->SetRightMargin(.05);
534
          VirtualPad2[11 - i-4]->SetGrid();
535
        } else {
536
          pad2->cd(i+1-4);
537
          VirtualPad2[i-4] = (TPad *)(pad2->cd(11 - i+1 - 4)); //Tole nastaviš zato, da lahko daš Log skalo
538
          VirtualPad2[i-4]->SetLogy(1);
539
          //VirtualPad2[i]->SetLeftMargin(.05);
540
          //VirtualPad2[i]->SetRightMargin(.05);
541
          VirtualPad2[i-4]->SetGrid();
542
        }
543
        for (int j=4;j<8;j++) {
544
          if (!direction) h->GetZaxis()->SetRange(m.koordinatniSistem[j][i]+1,m.koordinatniSistem[j][i]+1);
545
          else h->GetZaxis()->SetRange(m.koordinatniSistem[i][j]+1,m.koordinatniSistem[i][j]+1);
546
 
547
          slice[j] = (TH2D *)h->Project3D("pyx");
548
 
549
          if (!direction) {
550
            sprintf(name,"PX: (%d,%d)",j,i);
551
            p[j] = slice[j]->ProjectionX(name,i+1-4,i+1-4);
552
            sprintf(name,"Projection X of row %d",i);
553
          } else {
554
            sprintf(name,"PY: (%d,%d)",i,j);
555
            p[j] = slice[j]->ProjectionY(name,i+1-4,i+1-4);
556
            sprintf(name,"Projection Y of column %d",i);
557
          }
558
        axis = p[j]->GetXaxis();
559
 
560
 
561
        if(!direction) VirtualPad2[3]->SetBottomMargin(.17);
562
        else VirtualPad2[0]->SetBottomMargin(.17);
563
 
564
        p[j]->SetLineWidth(1);
565
 
566
        p[j]->SetTitle(name);
567
        p[j]->SetTitleOffset(1.5);
568
 
569
        p[j]->GetYaxis()->SetRangeUser(1,10000);
570
        p[j]->GetYaxis()->SetTickLength(0.01);
571
        p[j]->GetYaxis()->SetTitleFont(vrstaPisave);
572
        p[j]->GetYaxis()->SetLabelFont(vrstaPisave);
573
        p[j]->GetYaxis()->SetLabelSize(0.05);
574
        p[j]->GetYaxis()->SetLabelColor(kBlack);
575
        p[j]->GetYaxis()->SetTitle("# events");
576
        p[j]->GetYaxis()->SetNdivisions(0);
577
        p[j]->GetYaxis()->CenterTitle();
578
        p[j]->GetYaxis()->SetTitleSize(0.05);
579
        p[j]->GetYaxis()->SetTitleOffset(.5);
580
        p[j]->GetYaxis()->SetTitleColor(kWhite);
581
 
582
        p[j]->GetXaxis()->SetTickLength(0.1);
583
        p[j]->GetXaxis()->SetTitleFont(vrstaPisave);
584
        p[j]->GetXaxis()->SetLabelFont(vrstaPisave);
585
        p[j]->GetXaxis()->SetLabelSize(0.15);
586
        p[j]->GetXaxis()->SetLabelColor(kBlack);
587
        p[j]->GetXaxis()->SetLabelOffset(.05);
588
        p[j]->GetXaxis()->SetTitle("Incident light position (stage step)");
589
        //p[j]->GetXaxis()->SetNdivisions(0);
590
        //p[j]->GetXaxis()->CenterTitle();
591
        p[j]->GetXaxis()->SetTitleSize(0.01);
592
        p[j]->GetXaxis()->SetTitleColor(kWhite); //zato ker ga ne moreš pozicionirat
593
        p[j]->GetXaxis()->SetTitleOffset(.5);
594
 
595
        pNoise = noise(p[j]);
596
        for (int k=1;k<=p[j]->GetSize();k++) p[j]->SetBinContent(k,p[j]->GetBinContent(k)-pNoise);
597
 
598
        if (j<6) p[j]->SetLineColor(kWhite+color[j]);
599
        else p[j]->SetLineColor(kWhite+color[j-6]);
600
        if (j==4) p[j]->DrawCopy();
601
        else p[j]->DrawCopy("SAME");
602
      }
603
  }
604
    c->Modified();
605
    c->Update();
606
    if (save==1){
607
      switch (direction) {
608
        case 0: sprintf(pdfname,"./meritve/%03d_%s_4_2DX_focus3.pdf",runNumber,HAPDserialNumber);break;
609
        case 1: sprintf(pdfname,"./meritve/%03d_%s_5_2DY_focus3.pdf",runNumber,HAPDserialNumber);break;
610
      }
611
      c->SaveAs(pdfname,"pdf");
612
    } else if (save==2){
613
      switch (direction) {
614
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus3.pdf(",HAPDserialNumber);break;
615
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus3.pdf(",HAPDserialNumber);break;
616
      }
617
      c->SaveAs(pdfname,"pdf");
618
    } else if (save==3){
619
      switch (direction) {
620
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus3.pdf",HAPDserialNumber);break;
621
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus3.pdf",HAPDserialNumber);break;
622
      }
623
      c->SaveAs(pdfname,"pdf");
624
    } else if (save==4){
625
      switch (direction) {
626
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus3.pdf)",HAPDserialNumber);break;
627
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus3.pdf)",HAPDserialNumber);break;
628
      }
629
      c->SaveAs(pdfname,"pdf");
630
    }
631
  }
632
 
633
  return 0;
634
}
635
 
636
float noise(TH1D * proj) {
637
  float nBin=proj->GetSize(); //ugotovi koliko binov je v histogramu
638
  float wholeAverage=0;   //sem da povprečje celotnega kanala
639
  float noise=0;    //sem da povprečn šum
640
  int j=0;
641
  for (int i=1;i<=nBin;i++) wholeAverage+=proj->GetBinContent(i)/nBin;
642
  for (int i=1;i<=nBin;i++) {
643
    if (proj->GetBinContent(i)<1.1*wholeAverage) {
644
      noise+=proj->GetBinContent(i);
645
      j++;
646
    }
647
  }
648
  if(j!=0) return noise/j;
649
  else return 0;
650
}