Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include <TROOT.h>
  5. #include <TH1D.h>
  6. #include <TH1F.h>
  7. #include <TH2D.h>
  8. #include <TH2F.h>
  9. #include <TH2I.h>
  10. #include <TNtuple.h>
  11. #include <TTree.h>
  12. #include <TGraph.h>
  13. #include <TGraphErrors.h>
  14. #include <TCanvas.h>
  15. #include <TStyle.h>
  16. #include <TSystem.h>
  17. #include <TFile.h>
  18. #include <TDirectory.h>
  19. #include <TPaveText.h>
  20. #include <TSpectrum.h>
  21. #include <TF1.h>
  22. #include <TColor.h>
  23. #include <algorithm>
  24. using namespace std;
  25.  
  26. #include <iostream>
  27. #include <string>
  28.  
  29. #include "base.h"
  30. #include "gain.h"
  31. #include "savetoroot.h"
  32.  
  33. int charge(int runNumber, int save){
  34.  
  35.   int HAPDnumber; //Number of HAPD: 0, 1, 2 or 3!
  36.  
  37.   double xmin = -50;
  38.   double xmax = 300;
  39.   char name[64];
  40.   char pdfname[128];
  41.   char buf[256];
  42.   char hname[0xF];
  43.  
  44.   sprintf(buf,"../modules/%04d/%04d_1_Treshold_Waveform.root",runNumber,runNumber);
  45.   TFile * data = new TFile(buf);
  46.  
  47.   const char * serialNumber = getSN(runNumber);
  48.   printf("base.c return: %s\n", serialNumber);
  49.   /******* PREVERI ČE JE NALOŽEN FILE *******/
  50.   if (!strcmp(serialNumber, "NoFILE")){
  51.     printf("Ni naloženege datoteke\n");
  52.     return -1;
  53.   }
  54.   std::string serialNumberTemp = serialNumber;
  55.   std::cout << serialNumberTemp << std::endl;
  56.   std::string HAPDserialNumber,FEBserialNumber;
  57.  
  58.   GRID m = mapping();
  59.   int vrstaPisave = 82;
  60.  
  61.   TCanvas * c, * c4;
  62.   TH1D * h;
  63.   TH2D * h2 = NULL;
  64.   TPad * pad1, * pad2, * pad3;
  65.   TPaveText * sn, * gainTitle;
  66.  
  67.   /********** GLOBALNE **********/
  68.   gStyle->SetOptStat(0);
  69.   //gStyle->SetOptTitle(1);
  70.   gStyle->SetTextFont(vrstaPisave);
  71.   gStyle->SetTitleFont(vrstaPisave);
  72.   gStyle->SetTitleFontSize(0.1);
  73.   gStyle->SetNumberContours(100);
  74.  
  75.   gStyle->SetPalette(55);
  76.  
  77.   //gROOT->SetBatch(kTRUE); //Does not show canvases
  78.  
  79.  
  80.  
  81.   /******* ZRIHTA GRAFE *******/
  82.   for(HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
  83.          
  84.         if(save==2) {  
  85.             SaveToRootInit();
  86.         }
  87.        
  88.     //std::cout << serialNumberTemp << std::endl;
  89.     FEBserialNumber = serialNumberTemp.substr(0,serialNumberTemp.find(","));
  90.     serialNumberTemp.erase(0,FEBserialNumber.length()+1);
  91.     if(!FEBserialNumber.compare("noserial")) continue;
  92.     HAPDserialNumber = FEBserialNumber.substr(0,FEBserialNumber.find("/"));
  93.     FEBserialNumber.erase(0,FEBserialNumber.find("/")+1);
  94.  
  95.     sprintf(hname,"hcharge%d_0",HAPDnumber);
  96.     printf("%s \t %s \t %s \n",FEBserialNumber.c_str(),HAPDserialNumber.c_str(),hname);
  97.  
  98.     sprintf(name,"%04d_%s_Charge_c4",runNumber,HAPDserialNumber.c_str());
  99.     c4 = new TCanvas(name,name,0,0,1200,1200);
  100.     c4->Divide(2,2);
  101.  
  102.     for (int chip=0;chip<4; chip++){
  103.       sprintf(name,"%04d_%s_c%d",runNumber,HAPDserialNumber.c_str(),chip);
  104.       c = new TCanvas(name,name,0,0,1200,1200);
  105.       c->cd();
  106.       pad1 = new TPad("pad11","SN",0,0.975,1,1,0,0);
  107.         pad1->SetFillStyle(4000);
  108.         pad1->Draw();
  109.         pad1->cd();
  110.         sn = new TPaveText(0.2,0,0.8,1,"ndc");
  111.           sn->SetBorderSize(0);
  112.           sn->SetFillColor(4000);
  113.           sn->SetTextSize(.8);
  114.           sn->SetTextAlign(22);
  115.           sprintf(buf,"Charge %s",HAPDserialNumber.c_str());
  116.           sn->AddText(buf);
  117.           //sn->Draw();
  118.  
  119.       /******* DRUGI PAD *******/
  120.       c->cd();
  121.       pad2 = new TPad("pad2","Date",0.05,0.95,0.95,.99,0,0);
  122.         pad2->SetFillStyle(4000);
  123.         pad2->Draw();
  124.         pad2->cd();
  125.         gainTitle = new TPaveText(0,0,1,1,"ndc");
  126.           gainTitle->SetBorderSize(0);
  127.           gainTitle->SetFillColor(kSpring+1);
  128.           gainTitle->SetTextSize(.8);
  129.           gainTitle->SetTextAlign(22);
  130.           sprintf(buf,"Charge scan over center of channels:");
  131.           switch(chip){
  132.             case 0: sprintf(buf,"%s Chip A",buf);break;
  133.             case 1: sprintf(buf,"%s Chip B",buf);break;
  134.             case 2: sprintf(buf,"%s Chip D",buf);break;
  135.             case 3: sprintf(buf,"%s Chip C",buf);break;
  136.           }
  137.           gainTitle->AddText(buf);
  138.           gainTitle->Draw();
  139.  
  140.       //----------- PAD 2 (FIGURES)
  141.       c->cd();
  142.       pad3 = new TPad("pad3","Figures",0,0,1,0.96,0,0);
  143.         pad3->SetFillStyle(4000);
  144.         pad3->Draw();
  145.         pad3->cd();
  146.         pad3->Divide(6,6,0,0,0);
  147.       for (int i=0;i<36;i++) {      
  148.         int idx = i+chip*36;
  149.         sprintf(name,"%s;%d",hname,m.pozicijaPixla[idx]+1);
  150.         h = ((TH1D * ) data->Get(name));
  151.  
  152.         TVirtualPad *pad = pad3->cd(m.pozicijaPixlaNaCipu[idx]+1);
  153.         pad->SetBorderSize(0);
  154.         pad->SetBorderMode(0);
  155.  
  156.         if (idx==0 && h->InheritsFrom("TH1D") ) {
  157.           sprintf(name,"%s_2d",h->GetName());
  158.           TAxis *axis = h->GetXaxis();
  159.           h2 = new TH2D(name,h->GetTitle(),144,-0.5,143.5,axis->GetNbins(),
  160.                                                           axis->GetXmin(),
  161.                                                           axis->GetXmax());
  162.           h2->GetXaxis()->SetTitle("HAPD 2d channels");
  163.           h2->GetYaxis()->SetTitle(axis->GetTitle());
  164.           h2->GetYaxis()->SetTitleOffset(1.4);
  165.         }
  166.  
  167.         if (h) {
  168.           //printf("TH2D %s\n",name);
  169.           sprintf(name,"ASIC %d ch %d",chip,idx);
  170.           h->SetTitle(name);
  171.           h->GetXaxis()->SetRangeUser(xmin,xmax);
  172.           h->SetMinimum(-0.1);
  173.           h->SetStats(kFALSE);
  174.           h->SetFillColor(kBlue);
  175.           h->DrawCopy("AH");
  176.          
  177.             if(save==2) {  
  178.                 sprintf(text_for_STR, "Charge_1D_%s_ASIC_%d_CH_%d", HAPDserialNumber.c_str(),chip,idx);
  179.                 SaveToRootAddTH1DCopy(h, text_for_STR);
  180.             }
  181.  
  182.           if (h2){
  183.             for(int k=xmin;k<h->GetNbinsX(); k++){
  184.               //if (idx==133) printf("x = %d \t y = %d \t value = %d\n", idx+1, k,(int)h->GetBinContent(k+1));
  185.               if ((int)h->GetBinContent(k+1)==0) h2->SetBinContent(idx+1,k+1,1);
  186.               else h2->SetBinContent(idx+1,k+1,h->GetBinContent(k+1));
  187.             }
  188.           }
  189.         } else printf("TH2D %s does not exist !!!!\n",name);  
  190.       }
  191.       c->Modified();
  192.       c->Update();
  193.       if(chip%2==0) c4->cd(chip+2);
  194.       else c4->cd(chip);
  195.       c->DrawClonePad();
  196.       if (save==1){
  197.         switch (chip) {
  198.           case 0: sprintf(pdfname,"../modules/%04d/%04d_%s_1_Charge.pdf(",runNumber,runNumber,HAPDserialNumber.c_str());break;
  199.           default: sprintf(pdfname,"../modules/%04d/%04d_%s_1_Charge.pdf",runNumber,runNumber,HAPDserialNumber.c_str());break;
  200.         }
  201.         c->SaveAs(pdfname,"pdf");
  202.       } else if (save==4){
  203.         sprintf(pdfname,"../modules/%04d/%04d_%s.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
  204.         c->SaveAs(pdfname,"pdf");
  205.       }
  206.     }
  207.     if (h2) {
  208.       sprintf(name,"%04d_%s_c%d",runNumber,HAPDserialNumber.c_str(),5);
  209.       c = new TCanvas(name,name,600,500);
  210.       c->SetLeftMargin(0.15);
  211.       c->SetRightMargin(0.15);
  212.       c->SetLogz(1);
  213.  
  214.       sprintf(buf,"Charge scan over the center of channels");
  215.  
  216.       h2->SetTitle(buf);
  217.       gStyle->SetTitleFontSize(0.05);
  218.       h2->SetTitleFont(vrstaPisave);
  219.       h2->SetTitleOffset(0);
  220.  
  221.       h2->GetZaxis()->SetRangeUser(1,10000);
  222.       h2->GetZaxis()->SetTickLength(.02);
  223.       h2->GetZaxis()->SetLabelFont(vrstaPisave);
  224.       h2->GetZaxis()->SetLabelSize(0.03);
  225.  
  226.       h2->GetYaxis()->SetRangeUser(xmin,xmax);
  227.       h2->GetYaxis()->SetTitleFont(vrstaPisave);
  228.       h2->GetYaxis()->SetLabelFont(vrstaPisave);
  229.       //h2->GetYaxis()->SetLabelSize(0.04);
  230.       h2->GetYaxis()->SetLabelColor(kBlack);
  231.       //h2->GetYaxis()->SetNdivisions(12);
  232.       h2->GetYaxis()->CenterTitle();
  233.       h2->GetYaxis()->SetTitle("ADC channel (a.u.)");
  234.       //h2->GetYaxis()->SetTitleSize(0.05);
  235.       h2->GetYaxis()->SetTitleOffset(1.5);
  236.       h2->GetYaxis()->SetTitleColor(kBlack);
  237.  
  238.       //h2->GetXaxis()->SetTickLength(0.05);
  239.       h2->GetXaxis()->SetTitleFont(vrstaPisave);
  240.       h2->GetXaxis()->SetLabelFont(vrstaPisave);
  241.       //h2->GetXaxis()->SetLabelSize(0.04);
  242.       h2->GetXaxis()->SetLabelColor(kBlack);
  243.       //h2->GetXaxis()->SetLabelOffset(.05);
  244.       //h2->GetXaxis()->SetNdivisions(0);
  245.       //h2->GetXaxis()->CenterTitle();
  246.       h2->GetXaxis()->SetTitle("Channel");
  247.       //h2->GetXaxis()->SetTitleSize(0.05);
  248.       h2->GetXaxis()->SetTitleColor(kBlack); //zato ker ga ne moreš pozicionirat
  249.       h2->GetXaxis()->SetTitleOffset(1.2);
  250.  
  251.  
  252.       h2->DrawCopy("COLZ");
  253.         if(save==2) {    
  254.             sprintf(text_for_STR, "Charge_2D_%s", HAPDserialNumber.c_str());
  255.             SaveToRootAddTH2DCopy(h2, text_for_STR);
  256.         }
  257.          
  258.       c->Modified();
  259.       c->Update();
  260.       if (save==1){
  261.         sprintf(pdfname,"../modules/%04d/%04d_%s_1_Charge.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
  262.         c4->SaveAs(pdfname,"pdf");
  263.         sprintf(pdfname,"../modules/%04d/%04d_%s_1_Charge.pdf)",runNumber,runNumber,HAPDserialNumber.c_str());
  264.         c->SaveAs(pdfname,"pdf");
  265.       } else if (save==2){
  266.         sprintf(pdfname,"../modules/%04d/%04d_%s.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
  267.         c4->SaveAs(pdfname,"pdf");
  268.         c->SaveAs(pdfname,"pdf");
  269.       }
  270.      
  271.         if(save==2) {  
  272.             sprintf(text_for_STR,"../modules/%04d/%04d_%s_out.root",runNumber,runNumber,HAPDserialNumber.c_str());
  273.             SaveToRootWrite(text_for_STR, HAPDserialNumber.c_str());
  274.         }
  275.     }
  276.   }
  277.   delete data;
  278.   return 0;
  279. }
  280.  
  281. float getGain(TH1D * h, int deadChannelSigma) {
  282.   TF1 * g0,  * g1, * g2,  * g3;
  283.   float gain;
  284.   float mean1, sigma1, mean2;
  285.   //Double_t * xpeaks;
  286.   Float_t * xpeaks;
  287.  
  288.   TSpectrum * s = new TSpectrum(3);
  289.   int nfound = s->Search(h); //TALE FUNKICJA LAHKO POVZROČA TEŽAVE, KER NI NUJNO DA VRNE VRHOVE V PRAVEM ZAPOREDJU
  290.   //printf("Found %d candidate peaks to fit\n",nfound);
  291.   xpeaks = s->GetPositionX();
  292.  
  293.   Float_t * first(&xpeaks[0]);
  294.   Float_t * last(first + nfound);
  295.   std::sort(first, last);
  296.  
  297.  
  298.  
  299.   float xp;
  300.   for (int p=0;p<nfound;p++) {
  301.     xp = xpeaks[p];
  302.     //printf("Vrh številka %d je na poziciji %f\n",p,xp);
  303.     if(p==0) {
  304.       g0 = new TF1("0ph","gaus",xp-14,xp+14);
  305.       h->Fit(g0,"QR");
  306.     } else if(p==1) {
  307.       g1 = new TF1("1ph","gaus",xp-14,xp+14);
  308.       h->Fit(g1,"QR+");
  309.      } else if(p==2) {
  310.       g2 = new TF1("2ph","gaus",xp-14,xp+14);
  311.       h->Fit(g2,"QR+");
  312.     } else {
  313.       g3 = new TF1("3ph","gaus",xp-14,xp+14);
  314.       h->Fit(g3,"QR+");
  315.     }
  316.   }
  317.  
  318.   if(nfound >= 1){
  319.     mean1 = g0->GetParameter(1);
  320.     sigma1 = g0->GetParameter(2);
  321.     if (sigma1<deadChannelSigma) gain = 0;
  322.     else gain = 30;
  323.   } else {
  324.     gain = 0;
  325.   }
  326.   if(nfound > 1){
  327.     mean2 = g1->GetParameter(1);
  328.     printf("%f \t %f\n", mean1, mean2);
  329.     if (mean1<mean2) gain = mean2 - mean1;
  330.     else gain = mean1 - mean2;
  331.     //printf("nfound: %d \t gain: %.1f \t mean1: %.1f \t sigma1: %.1f \t mean2: %.1f\n", nfound, gain, mean1, sigma1, mean2);
  332.   }
  333.   delete s;
  334.   return gain;
  335. }
  336.  
  337. int gain(int runNumber, int save){
  338.  
  339.   int HAPDnumber = 0; //Number of HAPD: 0, 1, 2 or 3!
  340.  
  341.   char name[128];
  342.   char pdfname[128];
  343.   char buf[0xFF];
  344.   float ojacanje;
  345.  
  346.   char hname[0xF];
  347.  
  348.   sprintf(buf,"../modules/%04d/%04d_1_Treshold_Waveform.root",runNumber,runNumber);
  349.   TFile * data = new TFile(buf);
  350.  
  351.   const char * serialNumber = getSN(runNumber);
  352.   printf("base.c return: %s\n", serialNumber);
  353.   /******* PREVERI ČE JE NALOŽEN FILE *******/
  354.   if (!strcmp(serialNumber, "NoFILE")){
  355.     printf("Ni naloženege datoteke\n");
  356.     return -1;
  357.   }
  358.   std::string serialNumberTemp = serialNumber;
  359.   std::cout << serialNumberTemp << std::endl;
  360.   std::string HAPDserialNumber,FEBserialNumber;
  361.  
  362.   GRID m = mapping();
  363.   int vrstaPisave = 82;
  364.  
  365.   int blackWhite = 40;
  366.   int max = 140;
  367.  
  368.   TCanvas * c1, * c2, * c3;
  369.   TPad * pad1, * pad2;
  370.   TPaveText * title;
  371.   TH1D * h;
  372.   TH1F * Gain1D;
  373.   TH2F * Gain2D;
  374.   TH2I * Gain2D_black, * Gain2D_white;
  375.  
  376.   gStyle->SetOptStat(0);
  377.   gStyle->SetPalette(52);
  378.   gStyle->SetNumberContours(100);
  379.  
  380.  
  381.   for(HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
  382.          
  383.           SaveToRootInit();
  384.  
  385.     //std::cout << serialNumberTemp << std::endl;
  386.     FEBserialNumber = serialNumberTemp.substr(0,serialNumberTemp.find(","));
  387.     serialNumberTemp.erase(0,FEBserialNumber.length()+1);
  388.     if(!FEBserialNumber.compare("noserial")) continue;
  389.     HAPDserialNumber = FEBserialNumber.substr(0,FEBserialNumber.find("/"));
  390.     FEBserialNumber.erase(0,FEBserialNumber.find("/")+1);
  391.  
  392.     sprintf(hname,"hcharge%d_0",HAPDnumber);
  393.     printf("%s \t %s \t %s \n",FEBserialNumber.c_str(),HAPDserialNumber.c_str(),hname);  
  394.  
  395.     /******* 1D *******/
  396.     sprintf(buf,"%04d_%s_Gain1D",runNumber,HAPDserialNumber.c_str());
  397.     c1 = new TCanvas(buf,buf,0,0,600,300);
  398.  
  399.     sprintf(name,"1D Gain of HAPD %s (%04d);Channel number;Gain",HAPDserialNumber.c_str(),runNumber);
  400.     Gain1D = new TH1F("Gain1D",name,144,0,144);
  401.  
  402.     /******* 2D *******/
  403.     sprintf(buf,"%04d_%s_Gain2D",runNumber,HAPDserialNumber.c_str());
  404.     c2 = new TCanvas(buf,buf,0,0,600,600);
  405.       c2->SetRightMargin(0.15);
  406.  
  407.     sprintf(name,"Backside view: Gain of HAPD %s (%04d)",HAPDserialNumber.c_str(),runNumber);
  408.     Gain2D = new TH2F("Gain2D",name,12,-0.5,11.5,12,-0.5,11.5);
  409.     Gain2D_black = new TH2I("Gain2D_black","Gain2D_black",12,-0.5,11.5,12,-0.5,11.5);
  410.     Gain2D_white = new TH2I("Gain2D_white","Gain2D_white",12,-0.5,11.5,12,-0.5,11.5);
  411.     Gain2D->SetMinimum(-0.1);
  412.     Gain2D->SetMaximum(max);
  413.     Gain2D_black->SetMinimum(blackWhite);
  414.  
  415.     /******* NAREDI HISTOGRAME *******/
  416.     for (int i=0;i<12;i++) {
  417.       for (int j=0;j<12;j++) {
  418.         sprintf(name,"%s;%d",hname,m.pozicijaPixla[m.koordinatniSistem[i][j]]+1);
  419.         //printf("%s\n",name);
  420.         h = (TH1D *) data->Get(name);
  421.         h->GetXaxis()->SetRangeUser(-50,300);
  422.  
  423.         ojacanje = getGain(h);
  424.         //printf("channel %d \t gain %f\n", m.koordinatniSistem[i][j], ojacanje);
  425.        
  426.         Gain1D->Fill(m.koordinatniSistem[i][j],ojacanje);
  427.  
  428.         Gain2D->Fill(i,j,ojacanje);
  429.         if(ojacanje<=blackWhite) Gain2D_white->Fill(i,j,ojacanje);
  430.         Gain2D_black->Fill(i,j,ojacanje);
  431.       }
  432.     }
  433.  
  434.  
  435.     c1->cd();
  436.       c1->SetGrid(1);
  437.  
  438.       Gain1D->SetTitle("");
  439.       //Gain1D->SetLineWidth(2);
  440.       Gain1D->SetFillColor(kRed-10);
  441.  
  442.       Gain1D->GetYaxis()->SetRangeUser(0,140);
  443.       Gain1D->GetYaxis()->SetTickLength(0.01);
  444.       Gain1D->GetYaxis()->SetTitleFont(vrstaPisave);
  445.       Gain1D->GetYaxis()->SetLabelFont(vrstaPisave);
  446.       Gain1D->GetYaxis()->SetLabelSize(0.04);
  447.       Gain1D->GetYaxis()->SetLabelColor(kBlack);
  448.       //Gain1D->GetYaxis()->SetNdivisions(0);
  449.       Gain1D->GetYaxis()->CenterTitle();
  450.       Gain1D->GetYaxis()->SetTitle("Gain");
  451.       Gain1D->GetYaxis()->SetTitleSize(0.05);
  452.       //Gain1D->GetYaxis()->SetTitleOffset(.5);
  453.       Gain1D->GetYaxis()->SetTitleColor(kBlack);
  454.  
  455.       //Gain1D->GetXaxis()->SetRangeUser(0,80);
  456.       //Gain1D->GetXaxis()->SetTickLength(0.05);
  457.       Gain1D->GetXaxis()->SetTitleFont(vrstaPisave);
  458.       Gain1D->GetXaxis()->SetLabelFont(vrstaPisave);
  459.       Gain1D->GetXaxis()->SetLabelSize(0.04);
  460.       Gain1D->GetXaxis()->SetLabelColor(kBlack);
  461.       //Gain1D->GetXaxis()->SetLabelOffset(.05);
  462.       //Gain1D->GetXaxis()->SetNdivisions(0);
  463.       //Gain1D->GetXaxis()->CenterTitle();
  464.       Gain1D->GetXaxis()->SetTitle("Channel");
  465.       Gain1D->GetXaxis()->SetTitleSize(0.05);
  466.       Gain1D->GetXaxis()->SetTitleColor(kBlack); //zato ker ga ne moreš pozicionirat
  467.       Gain1D->GetXaxis()->SetTitleOffset(1);
  468.  
  469.       Gain1D->DrawCopy();
  470.      
  471.  
  472.     c2->cd();
  473.  
  474.       Gain2D->SetTitle("");
  475.  
  476.       Gain2D->GetZaxis()->SetTickLength(.02);
  477.       Gain2D->GetZaxis()->SetTitleFont(vrstaPisave);
  478.       Gain2D->GetZaxis()->SetLabelFont(vrstaPisave);
  479.       Gain2D->GetZaxis()->SetLabelSize(0.03);
  480.       Gain2D->GetZaxis()->SetTitle("G_{a}");
  481.       Gain2D->GetZaxis()->CenterTitle();
  482.  
  483.  
  484.       //Gain2D->GetYaxis()->SetTickLength(0.03);
  485.       Gain2D->GetYaxis()->SetTitleFont(vrstaPisave);
  486.       Gain2D->GetYaxis()->SetLabelFont(vrstaPisave);
  487.       Gain2D->GetYaxis()->SetLabelSize(0.03);
  488.       Gain2D->GetYaxis()->SetLabelColor(kBlack);
  489.       Gain2D->GetYaxis()->SetLabelOffset(.01);
  490.       //Gain2D->GetYaxis()->SetNdivisions(12);
  491.       Gain2D->GetYaxis()->CenterTitle();
  492.       Gain2D->GetYaxis()->SetTitle("Rows");
  493.       Gain2D->GetYaxis()->SetTitleSize(0.035);
  494.       Gain2D->GetYaxis()->SetTitleOffset(1.2);
  495.       Gain2D->GetYaxis()->SetTitleColor(kBlack);
  496.  
  497.       //Gain2D->GetXaxis()->SetTickLength(0.03);
  498.       Gain2D->GetXaxis()->SetTitleFont(vrstaPisave);
  499.       Gain2D->GetXaxis()->SetLabelFont(vrstaPisave);
  500.       Gain2D->GetXaxis()->SetLabelSize(0.03);
  501.       Gain2D->GetXaxis()->SetLabelColor(kBlack);
  502.       //Gain2D->GetXaxis()->SetLabelOffset(.05);
  503.       //Gain2D->GetXaxis()->SetNdivisions(0);
  504.       //Gain2D->GetXaxis()->CenterTitle();
  505.       Gain2D->GetXaxis()->SetTitle("Columns");
  506.       Gain2D->GetXaxis()->SetTitleSize(0.03);
  507.       Gain2D->GetXaxis()->SetTitleColor(kBlack); //zato ker ga ne moreš pozicionirat
  508.       Gain2D->GetXaxis()->SetTitleOffset(1.2);
  509.  
  510.       Gain2D->DrawCopy("COLZ");
  511.  
  512.       Gain2D_black->DrawCopy("TEXT,SAME");
  513.       Gain2D_white->SetMarkerColor(kWhite);
  514.       Gain2D_white->DrawCopy("TEXT,SAME");
  515.  
  516.  
  517.     c1->Modified();
  518.     c1->Update();
  519.     c2->Modified();
  520.     c2->Update();
  521.  
  522.     sprintf(buf,"%04d_%s_Gain",runNumber,HAPDserialNumber.c_str());
  523.     c3 = new TCanvas(buf,buf,0,0,1000,1000);
  524.     c3->cd();
  525.     /******* 1D *******/
  526.     sprintf(buf,"%04d_%s_gain1d_pad1",runNumber,HAPDserialNumber.c_str());
  527.     pad1 = new TPad(buf,"SN",.15,0.7,.85,1,0,0);
  528.       pad1->SetFillStyle(4000);
  529.       pad1->Draw();
  530.       //pad1->SetRightMargin(0.15);
  531.  
  532.     /******* 2D *******/
  533.     sprintf(buf,"%04d_%s_gain2d_pad2",runNumber,HAPDserialNumber.c_str());
  534.     pad2 = new TPad(buf,"Date",.15,0,.85,0.7,0,0);
  535.       pad2->SetFillStyle(4000);
  536.       pad2->Draw();
  537.       pad2->SetRightMargin(0.15);
  538.  
  539.     pad1->cd();
  540.       pad1->SetGrid(1);
  541.       Gain1D->DrawCopy();
  542.  
  543.           sprintf(text_for_STR, "Gain_1D_%s", HAPDserialNumber.c_str());
  544.           SaveToRootAddTH1F(Gain1D, text_for_STR);
  545.  
  546.       title = new TPaveText(0.2,.93,0.8,.94,"ndc");
  547.         title->SetBorderSize(0);
  548.         title->SetFillColor(4000);
  549.         title->SetTextSize(.06);
  550.         title->SetTextAlign(22);
  551.         title->SetTextFont(vrstaPisave);
  552.       title->AddText("Gain");
  553.       title->Draw();
  554.  
  555.  
  556.     pad2->cd();
  557.       Gain2D->DrawCopy("COLZ");
  558.  
  559.       Gain2D_black->DrawCopy("TEXT,SAME");
  560.       Gain2D_white->SetMarkerColor(kWhite);
  561.       Gain2D_white->DrawCopy("TEXT,SAME");
  562.  
  563.           sprintf(text_for_STR, "Gain_2D_%s", HAPDserialNumber.c_str());
  564.           SaveToRootAddTH2F(Gain2D, text_for_STR);
  565.          
  566.       title = new TPaveText(0.2,.91,0.8,.93,"ndc");
  567.         title->SetBorderSize(0);
  568.         title->SetFillColor(4000);
  569.         title->SetTextSize(.035);
  570.         title->SetTextAlign(22);
  571.         title->SetTextFont(vrstaPisave);
  572.       title->AddText("Backside view gain");
  573.       title->Draw();
  574.  
  575.       delete c1;
  576.       delete c2;
  577.  
  578.     if (save==1) {
  579.       sprintf(pdfname,"../modules/%04d/%04d_%s_Gain.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
  580.       c3->SaveAs(pdfname,"pdf");
  581.     } else if (save==2){
  582.       sprintf(pdfname,"../modules/%04d/%04d_%s.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
  583.       c3->SaveAs(pdfname,"pdf");
  584.     } else if (save==3){
  585.       sprintf(pdfname,"../modules/%04d/%04d_%s.pdf(",runNumber,runNumber,HAPDserialNumber.c_str());
  586.       c3->SaveAs(pdfname,"pdf");
  587.     } else if (save==5){
  588.       sprintf(pdfname,"../modules/%04d/%04d_%s.root",runNumber,runNumber,HAPDserialNumber.c_str());
  589.       c3->SaveAs(pdfname,"root");
  590.     }
  591.    
  592.    
  593.     sprintf(text_for_STR,"../modules/%04d/%04d_%s_out.root",runNumber,runNumber,HAPDserialNumber.c_str());
  594.     SaveToRootWrite(text_for_STR, HAPDserialNumber.c_str());
  595.  
  596.     delete Gain1D;
  597.     delete Gain2D;
  598.     delete Gain2D_white;
  599.     delete Gain2D_black;
  600.  
  601.   }
  602.   delete data;
  603.   return 0;
  604. }
  605.