Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

#include <stdio.h>
#include <stdlib.h>

#include <TROOT.h>
#include <TH1D.h>
#include <TH2D.h>
#include <TH3D.h>
#include <TCanvas.h>
#include <TStyle.h>
#include <TSystem.h>
#include <TFile.h>
#include <TDirectory.h>
#include <TPaveText.h>

#include "base.h"
#include "focus.h"

int focus(int runNumber, int save) {

  int HAPDnumber; //Number of HAPD: 0, 1, 2 or 3!

  int direction, nx, ny;
  char name[128];
  char pdfname[128];
  char buf[256];
  float pNoise;
  int color[6] = {1,2,4,6,8,9};

  char hname[0xF];

  int max = 20;

  TFile * data[max];


  for (int b=0;b<max;b++){
    sprintf(buf,"./meritve/%04d_4_2DX_zOS_%05d.root",runNumber+b,(runNumber-10+b)*1000);
    data[b] = new TFile(buf);
  }

  const char * serialNumber = getSN();
  char * serialNumberTemp = strdup(serialNumber);
  char * HAPDserialNumber;

  GRID m = mapping();
  int vrstaPisave = 82;

  TCanvas * c;
  TPad * pad1, * pad2, * pad3;
  TPad * VirtualPad2[12];
  TPaveText * info, * axisName;
  TAxis * axis;
  TH3D * h;
  TH2D * slice[12]; //take the right slice from 3D histogram
  TH1D * p[12];

  /********** GLOBALNE **********/
    gStyle->SetOptStat(0);
    //gStyle->SetOptTitle(1);
    gStyle->SetTitleFontSize(.15);

  for(int HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
    HAPDserialNumber = strsep(&serialNumberTemp,",");
    if(!strcmp(HAPDserialNumber,"noserial")) continue;
 
    sprintf(hname,"hxy%d_0;1",HAPDnumber);
    printf("%s \t %s \n",HAPDserialNumber,hname);

    h = (TH3D *) data[0]->Get(hname);

    /********** SMER MERITVE **********/
    h->GetZaxis()->SetRange(1,1);
    nx = h->GetNbinsX();
    ny = h->GetNbinsY();
    if (nx>=ny) direction = 0;
    else direction = 1;

    printf("Direction = %d\n", direction);

    /********** CANVAS **********/
    if (!direction) {
      sprintf(buf,"%04d_%s_px",runNumber,HAPDserialNumber);
      c = new TCanvas(buf,buf,0,0,2000,2000);
    } else {
      sprintf(buf,"%04d_%s_py",runNumber,HAPDserialNumber);
      c = new TCanvas(buf,buf,0,0,2000,2000);
    }
    c->Divide(4,5,0,0);

    for(int a=0;a<max;a++){
      c->cd(a+1);
      c->cd(a+1)->SetBorderSize(0);
      c->cd(a+1)->SetBorderMode(0);
      pad1 = new TPad("pad1","Title",0.05,0.94,0.95,1,0,0);
        pad1->SetFillStyle(4000);
        pad1->Draw();

      pad2 = new TPad("pad2","Graphs",0,0,1,0.95,0,0);
        pad2->SetFillStyle(4000);
        pad2->Draw();

      pad3 = new TPad("pad3","AxisTitle",0.57,0,0.92,0.05,0,0);
        pad3->SetFillStyle(4000);
        pad3->Draw();
     
      /********** PAD 1 **********/
      pad1->cd();
        info = new TPaveText(0.2,0,0.8,1,"ndc");
        info->SetBorderSize(0);
        info->SetFillColor(4000);
        info->SetTextSize(1);
        info->SetTextAlign(22);
     
        sprintf(name,"Z = %d stage steps", (runNumber-10+a)*1000);
        info->AddText(name);
        info->Draw();

      /********** PAD3 **********/
      pad3->cd();
        axisName = new TPaveText(0.2,0,0.8,1,"ndc");
        axisName->SetBorderSize(0);
        axisName->SetFillColor(4000);
        axisName->SetTextSize(.7);
        axisName->SetTextFont(vrstaPisave);
        axisName->SetTextAlign(22);
       
        sprintf(name,"Incident light position (stage step)");
        axisName->AddText(name);
        //axisName->Draw();
     
      /********** PAD2 **********/
      pad2->cd();
      pad2->Divide(1,4,0,0);

      if(a) h = (TH3D *) data[a]->Get(hname);

      for (int i=4;i<8;i++) {
        if (!direction) {
          pad2->cd(11 - i+1-4);
          VirtualPad2[11 - i-4] = (TPad *)(pad2->cd(11 - i+1-4)); //Tole nastaviš zato, da lahko daš Log skalo
          VirtualPad2[11 - i-4]->SetLogy(1);
          //VirtualPad2[11 - i]->SetLeftMargin(.05);
          //VirtualPad2[11 - i]->SetRightMargin(.05);
          //VirtualPad2[11 - i]->SetGrid();
        } else {
          pad2->cd(i+1-4);
          VirtualPad2[i-4] = (TPad *)(pad2->cd(11 - i+1 - 4)); //Tole nastaviš zato, da lahko daš Log skalo
          VirtualPad2[i-4]->SetLogy(1);
          //VirtualPad2[i]->SetLeftMargin(.05);
          //VirtualPad2[i]->SetRightMargin(.05);
          //VirtualPad2[i]->SetGrid();
        }
        for (int j=4;j<8;j++) {
          if (!direction) h->GetZaxis()->SetRange(m.koordinatniSistem[j][i]+1,m.koordinatniSistem[j][i]+1);
          else h->GetZaxis()->SetRange(m.koordinatniSistem[i][j]+1,m.koordinatniSistem[i][j]+1);

          slice[j] = (TH2D *)h->Project3D("pyx");

          if (!direction) {
            sprintf(name,"PX: (%d,%d)",j,i);
            p[j] = slice[j]->ProjectionX(name,i+1-4,i+1-4);
            sprintf(name,"Projection X of row %d",i);
          } else {
            sprintf(name,"PY: (%d,%d)",i,j);
            p[j] = slice[j]->ProjectionY(name,i+1-4,i+1-4);
            sprintf(name,"Projection Y of column %d",i);
          }
        axis = p[j]->GetXaxis();


        if(!direction) VirtualPad2[3]->SetBottomMargin(.17);
        else VirtualPad2[0]->SetBottomMargin(.17);

        p[j]->SetLineWidth(1);

        p[j]->SetTitle(name);
        p[j]->SetTitleOffset(1.5);

        p[j]->GetYaxis()->SetRangeUser(1,10000);
        p[j]->GetYaxis()->SetTickLength(0.01);
        p[j]->GetYaxis()->SetTitleFont(vrstaPisave);
        p[j]->GetYaxis()->SetLabelFont(vrstaPisave);
        p[j]->GetYaxis()->SetLabelSize(0.05);
        p[j]->GetYaxis()->SetLabelColor(kBlack);
        p[j]->GetYaxis()->SetTitle("# events");
        p[j]->GetYaxis()->SetNdivisions(0);
        p[j]->GetYaxis()->CenterTitle();
        p[j]->GetYaxis()->SetTitleSize(0.05);
        p[j]->GetYaxis()->SetTitleOffset(.5);
        p[j]->GetYaxis()->SetTitleColor(kWhite);

        p[j]->GetXaxis()->SetTickLength(0.1);
        p[j]->GetXaxis()->SetTitleFont(vrstaPisave);
        p[j]->GetXaxis()->SetLabelFont(vrstaPisave);
        p[j]->GetXaxis()->SetLabelSize(0.15);
        p[j]->GetXaxis()->SetLabelColor(kBlack);
        p[j]->GetXaxis()->SetLabelOffset(.05);
        p[j]->GetXaxis()->SetTitle("Incident light position (stage step)");
        //p[j]->GetXaxis()->SetNdivisions(0);
        //p[j]->GetXaxis()->CenterTitle();
        p[j]->GetXaxis()->SetTitleSize(0.01);
        p[j]->GetXaxis()->SetTitleColor(kWhite); //zato ker ga ne moreš pozicionirat
        p[j]->GetXaxis()->SetTitleOffset(.5);

        pNoise = noise(p[j]);
        for (int k=1;k<=p[j]->GetSize();k++) p[j]->SetBinContent(k,p[j]->GetBinContent(k)-pNoise);

        if (j<6) p[j]->SetLineColor(kWhite+color[j]);
        else p[j]->SetLineColor(kWhite+color[j-6]);
        if (j==4) p[j]->DrawCopy();
        else p[j]->DrawCopy("SAME");
      }
    }
  }
    c->Modified();
    c->Update();
    if (save==1){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus1_run%04d_to%04d.pdf",HAPDserialNumber,runNumber,runNumber+max-1);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus1_run%04d_to%04d.pdf",HAPDserialNumber,runNumber,runNumber+max-1);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==2){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus1.pdf(",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus1.pdf(",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==3){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus1.pdf",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus1.pdf",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==4){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus1.pdf)",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus1.pdf)",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    }
  }

  return 0;
}

int focus2(int runNumber, int save) {

  int HAPDnumber; //Number of HAPD: 0, 1, 2 or 3!

  int direction, nx, ny;
  char name[128];
  char pdfname[128];
  char buf[256];
  float pNoise;
  int color[6] = {1,2,4,6,8,9};

  char hname[0xF];
  int max = 20;

  TFile * data[max];
  for (int b=0;b<max;b++){
    sprintf(buf,"./meritve/%04d_4_2DX_zOS_%05d.root",runNumber+b,(runNumber-10+b)*1000);
    data[b] = new TFile(buf);
  }

  const char * serialNumber = getSN();
  char * serialNumberTemp = strdup(serialNumber);
  char * HAPDserialNumber;

  GRID m = mapping();
  int vrstaPisave = 82;

  TCanvas * c;
  TPad * pad2;
  TPad * VirtualPad2[max];
  TH3D * h;
  TH2D * slice[max]; //take the right slice from 3D histogram
  TH1D * p[max];

  /********** GLOBALNE **********/
    gStyle->SetOptStat(0);
    //gStyle->SetOptTitle(1);
    gStyle->SetTitleFontSize(.15);


 
  int line = 1;
 
  for(int HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
    HAPDserialNumber = strsep(&serialNumberTemp,",");
    if(!strcmp(HAPDserialNumber,"noserial")) continue;
 
    sprintf(hname,"hxy%d_0;1",HAPDnumber);
    printf("%s \t %s \n",HAPDserialNumber,hname);

    h = (TH3D *) data[0]->Get(hname);

    /********** SMER MERITVE **********/
    h->GetZaxis()->SetRange(1,1);
    nx = h->GetNbinsX();
    ny = h->GetNbinsY();
    if (nx>=ny) direction = 0;
    else direction = 1;

    printf("Direction = %d\n", direction);

    /********** CANVAS **********/
    if (!direction) {
      sprintf(buf,"%04d_%s_px",runNumber,HAPDserialNumber);
      c = new TCanvas(buf,buf,0,0,500,2000);
    } else {
      sprintf(buf,"%04d_%s_py",runNumber,HAPDserialNumber);
      c = new TCanvas(buf,buf,0,0,2000,2000);
    }
      pad2 = new TPad("pad2","Graphs",0,0,1,1,0,0);
        pad2->SetFillStyle(4000);
        pad2->Draw();
     
      /********** PAD2 **********/
      pad2->cd();
      pad2->Divide(1,max,0,0);

      for (int i=0;i<max;i++) {
        if(i) h = (TH3D *) data[i]->Get(hname);

          pad2->cd(i+1);
          VirtualPad2[i] = (TPad *)(pad2->cd(i+1)); //Tole nastaviš zato, da lahko daš Log skalo
          VirtualPad2[i]->SetLogy(1);
          //VirtualPad2[i]->SetLeftMargin(.05);
          //VirtualPad2[i]->SetRightMargin(.05);
          //VirtualPad2[i]->SetGrid();
       
        for (int j=4;j<8;j++) {
          if (!direction) h->GetZaxis()->SetRange(m.koordinatniSistem[j][line+4]+1,m.koordinatniSistem[j][line+4]+1);
          else h->GetZaxis()->SetRange(m.koordinatniSistem[line+4][j]+1,m.koordinatniSistem[line+4][j]+1);

          slice[j] = (TH2D *)h->Project3D("pyx");

          if (!direction) {
            sprintf(name,"PX: (%d,%d)",j,line+4);
            p[j] = slice[j]->ProjectionX(name,line+1,line+1);
            sprintf(name,"Z = %d      Projection X of row %d",(runNumber-10+i)*1000,line+4);
          } else {
            sprintf(name,"PY: (%d,%d)",line+4,j);
            p[j] = slice[j]->ProjectionY(name,line+1,line+1);
            sprintf(name,"Z = %d      Projection Y of column %d",(runNumber-10+i)*1000,line+4);
          }

        p[j]->SetLineWidth(1);

        p[j]->SetTitle(name);
        p[j]->SetTitleOffset(1.5);

        p[j]->GetYaxis()->SetRangeUser(1,10000);
        p[j]->GetYaxis()->SetTickLength(0.01);
        p[j]->GetYaxis()->SetTitleFont(vrstaPisave);
        p[j]->GetYaxis()->SetLabelFont(vrstaPisave);
        p[j]->GetYaxis()->SetLabelSize(0.05);
        p[j]->GetYaxis()->SetLabelColor(kBlack);
        p[j]->GetYaxis()->SetTitle("# events");
        p[j]->GetYaxis()->SetNdivisions(0);
        p[j]->GetYaxis()->CenterTitle();
        p[j]->GetYaxis()->SetTitleSize(0.05);
        p[j]->GetYaxis()->SetTitleOffset(.5);
        p[j]->GetYaxis()->SetTitleColor(kWhite);

        p[j]->GetXaxis()->SetTickLength(0.1);
        p[j]->GetXaxis()->SetTitleFont(vrstaPisave);
        p[j]->GetXaxis()->SetLabelFont(vrstaPisave);
        p[j]->GetXaxis()->SetLabelSize(0.15);
        p[j]->GetXaxis()->SetLabelColor(kBlack);
        p[j]->GetXaxis()->SetLabelOffset(.05);
        p[j]->GetXaxis()->SetTitle("Incident light position (stage step)");
        //p[j]->GetXaxis()->SetNdivisions(0);
        //p[j]->GetXaxis()->CenterTitle();
        p[j]->GetXaxis()->SetTitleSize(0.01);
        p[j]->GetXaxis()->SetTitleColor(kWhite); //zato ker ga ne moreš pozicionirat
        p[j]->GetXaxis()->SetTitleOffset(.5);

        pNoise = noise(p[j]);
        for (int k=1;k<=p[j]->GetSize();k++) p[j]->SetBinContent(k,p[j]->GetBinContent(k)-pNoise);

        if (j<6) p[j]->SetLineColor(kWhite+color[j]);
        else p[j]->SetLineColor(kWhite+color[j-6]);
        if (j==4) p[j]->DrawCopy();
        else p[j]->DrawCopy("SAME");
      }
  if(i==max-1) VirtualPad2[max-1]->SetBottomMargin(.17);

  }
    c->Modified();
    c->Update();
    if (save==1){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus2_run%04d_to%04d.pdf",HAPDserialNumber,runNumber,runNumber+max-1);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus2_run%04d_to%04d.pdf",HAPDserialNumber,runNumber,runNumber+max-1);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==2){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus2.pdf(",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus2.pdf(",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==3){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus2.pdf",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus2.pdf",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==4){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus2.pdf)",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus2.pdf)",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    }
  }

  return 0;
}

int focus3(int runNumber, int save) {

  int HAPDnumber; //Number of HAPD: 0, 1, 2 or 3!

  int direction, nx, ny;
  char name[128];
  char pdfname[128];
  char buf[256];
  float pNoise;
  int color[6] = {1,2,4,6,8,9};

  char hname[0xF];

  const char * serialNumber = getSN();
  char * serialNumberTemp = strdup(serialNumber);
  char * HAPDserialNumber;

  GRID m = mapping();
  int vrstaPisave = 82;

  TCanvas * c;
  TPad * pad1, * pad2, * pad3;
  TPad * VirtualPad2[12];
  TPaveText * info, * axisName;
  TAxis * axis;
  TH3D * h;
  TH2D * slice[12]; //take the right slice from 3D histogram
  TH1D * p[12];

  /********** GLOBALNE **********/
    gStyle->SetOptStat(0);
    //gStyle->SetOptTitle(1);
    gStyle->SetTitleFontSize(.15);

  for(int HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
    HAPDserialNumber = strsep(&serialNumberTemp,",");
    if(!strcmp(HAPDserialNumber,"noserial")) continue;
 
    sprintf(hname,"hxy%d_0;1",HAPDnumber);
    printf("%s \t %s \n",HAPDserialNumber,hname);

    h = (TH3D *) gDirectory->Get(hname);

    /********** SMER MERITVE **********/
    h->GetZaxis()->SetRange(1,1);
    nx = h->GetNbinsX();
    ny = h->GetNbinsY();
    if (nx>=ny) direction = 0;
    else direction = 1;

    printf("Direction = %d\n", direction);

    /********** CANVAS **********/
    if (!direction) {
      sprintf(buf,"%04d_%s_px",runNumber,HAPDserialNumber);
      c = new TCanvas(buf,buf,0,0,700,700);
    } else {
      sprintf(buf,"%04d_%s_py",runNumber,HAPDserialNumber);
      c = new TCanvas(buf,buf,0,0,700,700);
    }
      pad1 = new TPad("pad1","Title",0.05,0.94,0.95,1,0,0);
        pad1->SetFillStyle(4000);
        pad1->Draw();

      pad2 = new TPad("pad2","Graphs",0,0,1,0.95,0,0);
        pad2->SetFillStyle(4000);
        pad2->Draw();

      pad3 = new TPad("pad3","AxisTitle",0.57,0,0.92,0.05,0,0);
        pad3->SetFillStyle(4000);
        pad3->Draw();
     
      /********** PAD 1 **********/
      pad1->cd();
        info = new TPaveText(0.2,0,0.8,1,"ndc");
        info->SetBorderSize(0);
        info->SetFillColor(4000);
        info->SetTextSize(1);
        info->SetTextAlign(22);
     
        sprintf(name,"HAPD# %s   (center)", HAPDserialNumber);
        info->AddText(name);
        info->Draw();

      /********** PAD3 **********/
      pad3->cd();
        axisName = new TPaveText(0.2,0,0.8,1,"ndc");
        axisName->SetBorderSize(0);
        axisName->SetFillColor(4000);
        axisName->SetTextSize(.7);
        axisName->SetTextFont(vrstaPisave);
        axisName->SetTextAlign(22);
       
        sprintf(name,"Incident light position (stage step)");
        axisName->AddText(name);
        //axisName->Draw();
     
      /********** PAD2 **********/
      pad2->cd();
      pad2->Divide(1,4,0,0);

      h = (TH3D *) gDirectory->Get(hname);

      for (int i=4;i<8;i++) {
        if (!direction) {
          pad2->cd(11 - i+1-4);
          VirtualPad2[11 - i-4] = (TPad *)(pad2->cd(11 - i+1-4)); //Tole nastaviš zato, da lahko daš Log skalo
          VirtualPad2[11 - i-4]->SetLogy(1);
          //VirtualPad2[11 - i]->SetLeftMargin(.05);
          //VirtualPad2[11 - i]->SetRightMargin(.05);
          VirtualPad2[11 - i-4]->SetGrid();
        } else {
          pad2->cd(i+1-4);
          VirtualPad2[i-4] = (TPad *)(pad2->cd(11 - i+1 - 4)); //Tole nastaviš zato, da lahko daš Log skalo
          VirtualPad2[i-4]->SetLogy(1);
          //VirtualPad2[i]->SetLeftMargin(.05);
          //VirtualPad2[i]->SetRightMargin(.05);
          VirtualPad2[i-4]->SetGrid();
        }
        for (int j=4;j<8;j++) {
          if (!direction) h->GetZaxis()->SetRange(m.koordinatniSistem[j][i]+1,m.koordinatniSistem[j][i]+1);
          else h->GetZaxis()->SetRange(m.koordinatniSistem[i][j]+1,m.koordinatniSistem[i][j]+1);

          slice[j] = (TH2D *)h->Project3D("pyx");

          if (!direction) {
            sprintf(name,"PX: (%d,%d)",j,i);
            p[j] = slice[j]->ProjectionX(name,i+1-4,i+1-4);
            sprintf(name,"Projection X of row %d",i);
          } else {
            sprintf(name,"PY: (%d,%d)",i,j);
            p[j] = slice[j]->ProjectionY(name,i+1-4,i+1-4);
            sprintf(name,"Projection Y of column %d",i);
          }
        axis = p[j]->GetXaxis();


        if(!direction) VirtualPad2[3]->SetBottomMargin(.17);
        else VirtualPad2[0]->SetBottomMargin(.17);

        p[j]->SetLineWidth(1);

        p[j]->SetTitle(name);
        p[j]->SetTitleOffset(1.5);

        p[j]->GetYaxis()->SetRangeUser(1,10000);
        p[j]->GetYaxis()->SetTickLength(0.01);
        p[j]->GetYaxis()->SetTitleFont(vrstaPisave);
        p[j]->GetYaxis()->SetLabelFont(vrstaPisave);
        p[j]->GetYaxis()->SetLabelSize(0.05);
        p[j]->GetYaxis()->SetLabelColor(kBlack);
        p[j]->GetYaxis()->SetTitle("# events");
        p[j]->GetYaxis()->SetNdivisions(0);
        p[j]->GetYaxis()->CenterTitle();
        p[j]->GetYaxis()->SetTitleSize(0.05);
        p[j]->GetYaxis()->SetTitleOffset(.5);
        p[j]->GetYaxis()->SetTitleColor(kWhite);

        p[j]->GetXaxis()->SetTickLength(0.1);
        p[j]->GetXaxis()->SetTitleFont(vrstaPisave);
        p[j]->GetXaxis()->SetLabelFont(vrstaPisave);
        p[j]->GetXaxis()->SetLabelSize(0.15);
        p[j]->GetXaxis()->SetLabelColor(kBlack);
        p[j]->GetXaxis()->SetLabelOffset(.05);
        p[j]->GetXaxis()->SetTitle("Incident light position (stage step)");
        //p[j]->GetXaxis()->SetNdivisions(0);
        //p[j]->GetXaxis()->CenterTitle();
        p[j]->GetXaxis()->SetTitleSize(0.01);
        p[j]->GetXaxis()->SetTitleColor(kWhite); //zato ker ga ne moreš pozicionirat
        p[j]->GetXaxis()->SetTitleOffset(.5);

        pNoise = noise(p[j]);
        for (int k=1;k<=p[j]->GetSize();k++) p[j]->SetBinContent(k,p[j]->GetBinContent(k)-pNoise);

        if (j<6) p[j]->SetLineColor(kWhite+color[j]);
        else p[j]->SetLineColor(kWhite+color[j-6]);
        if (j==4) p[j]->DrawCopy();
        else p[j]->DrawCopy("SAME");
      }
  }
    c->Modified();
    c->Update();
    if (save==1){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%03d_%s_4_2DX_focus3.pdf",runNumber,HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%03d_%s_5_2DY_focus3.pdf",runNumber,HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==2){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus3.pdf(",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus3.pdf(",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==3){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus3.pdf",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus3.pdf",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    } else if (save==4){
      switch (direction) {
        case 0: sprintf(pdfname,"./meritve/%s_4_2DX_focus3.pdf)",HAPDserialNumber);break;
        case 1: sprintf(pdfname,"./meritve/%s_5_2DY_focus3.pdf)",HAPDserialNumber);break;
      }
      c->SaveAs(pdfname,"pdf");
    }
  }

  return 0;
}

float noise(TH1D * proj) {
  float nBin=proj->GetSize(); //ugotovi koliko binov je v histogramu
  float wholeAverage=0;   //sem da povprečje celotnega kanala
  float noise=0;    //sem da povprečn šum
  int j=0;
  for (int i=1;i<=nBin;i++) wholeAverage+=proj->GetBinContent(i)/nBin;
  for (int i=1;i<=nBin;i++) {
    if (proj->GetBinContent(i)<1.1*wholeAverage) {
      noise+=proj->GetBinContent(i);
      j++;
    }
  }
  if(j!=0) return noise/j;
  else return 0;
}