Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

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

#include <TROOT.h>
#include <TH1D.h>
#include <TH1F.h>
#include <TH2D.h>
#include <TH2F.h>
#include <TH2I.h>
#include <TNtuple.h>
#include <TTree.h>
#include <TGraph.h>
#include <TGraphErrors.h>
#include <TCanvas.h>
#include <TStyle.h>
#include <TSystem.h>
#include <TFile.h>
#include <TDirectory.h>
#include <TPaveText.h>
#include <TSpectrum.h>
#include <TF1.h>
#include <TColor.h>
#include <algorithm>
using namespace std;

#include <iostream>
#include <string>

#include "base.h"
#include "gain.h"
#include "savetoroot.h"

int charge(int runNumber, int save){

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

  double xmin = -50;
  double xmax = 300;
  char name[64];
  char pdfname[128];
  char buf[256];
  char hname[0xF];

  sprintf(buf,"../modules/%04d/%04d_1_Treshold_Waveform.root",runNumber,runNumber);
  TFile * data = new TFile(buf);

  const char * serialNumber = getSN(runNumber);
  printf("base.c return: %s\n", serialNumber);
  /******* PREVERI ČE JE NALOŽEN FILE *******/
  if (!strcmp(serialNumber, "NoFILE")){
    printf("Ni naloženege datoteke\n");
    return -1;
  }
  std::string serialNumberTemp = serialNumber;
  std::cout << serialNumberTemp << std::endl;
  std::string HAPDserialNumber,FEBserialNumber;

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

  TCanvas * c, * c4;
  TH1D * h;
  TH2D * h2 = NULL;
  TPad * pad1, * pad2, * pad3;
  TPaveText * sn, * gainTitle;

  /********** GLOBALNE **********/
  gStyle->SetOptStat(0);
  //gStyle->SetOptTitle(1);
  gStyle->SetTextFont(vrstaPisave);
  gStyle->SetTitleFont(vrstaPisave);
  gStyle->SetTitleFontSize(0.1);
  gStyle->SetNumberContours(100);

  gStyle->SetPalette(55);

  //gROOT->SetBatch(kTRUE); //Does not show canvases



  /******* ZRIHTA GRAFE *******/
  for(HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
         
        if(save==2) {  
            SaveToRootInit();
        }
       
    //std::cout << serialNumberTemp << std::endl;
    FEBserialNumber = serialNumberTemp.substr(0,serialNumberTemp.find(","));
    serialNumberTemp.erase(0,FEBserialNumber.length()+1);
    if(!FEBserialNumber.compare("noserial")) continue;
    HAPDserialNumber = FEBserialNumber.substr(0,FEBserialNumber.find("/"));
    FEBserialNumber.erase(0,FEBserialNumber.find("/")+1);
 
    sprintf(hname,"hcharge%d_0",HAPDnumber);
    printf("%s \t %s \t %s \n",FEBserialNumber.c_str(),HAPDserialNumber.c_str(),hname);

    sprintf(name,"%04d_%s_Charge_c4",runNumber,HAPDserialNumber.c_str());
    c4 = new TCanvas(name,name,0,0,1200,1200);
    c4->Divide(2,2);

    for (int chip=0;chip<4; chip++){
      sprintf(name,"%04d_%s_c%d",runNumber,HAPDserialNumber.c_str(),chip);
      c = new TCanvas(name,name,0,0,1200,1200);
      c->cd();
      pad1 = new TPad("pad11","SN",0,0.975,1,1,0,0);
        pad1->SetFillStyle(4000);
        pad1->Draw();
        pad1->cd();
        sn = new TPaveText(0.2,0,0.8,1,"ndc");
          sn->SetBorderSize(0);
          sn->SetFillColor(4000);
          sn->SetTextSize(.8);
          sn->SetTextAlign(22);
          sprintf(buf,"Charge %s",HAPDserialNumber.c_str());
          sn->AddText(buf);
          //sn->Draw();

      /******* DRUGI PAD *******/
      c->cd();
      pad2 = new TPad("pad2","Date",0.05,0.95,0.95,.99,0,0);
        pad2->SetFillStyle(4000);
        pad2->Draw();
        pad2->cd();
        gainTitle = new TPaveText(0,0,1,1,"ndc");
          gainTitle->SetBorderSize(0);
          gainTitle->SetFillColor(kSpring+1);
          gainTitle->SetTextSize(.8);
          gainTitle->SetTextAlign(22);
          sprintf(buf,"Charge scan over center of channels:");
          switch(chip){
            case 0: sprintf(buf,"%s Chip A",buf);break;
            case 1: sprintf(buf,"%s Chip B",buf);break;
            case 2: sprintf(buf,"%s Chip D",buf);break;
            case 3: sprintf(buf,"%s Chip C",buf);break;
          }
          gainTitle->AddText(buf);
          gainTitle->Draw();

      //----------- PAD 2 (FIGURES)
      c->cd();
      pad3 = new TPad("pad3","Figures",0,0,1,0.96,0,0);
        pad3->SetFillStyle(4000);
        pad3->Draw();
        pad3->cd();
        pad3->Divide(6,6,0,0,0);
      for (int i=0;i<36;i++) {      
        int idx = i+chip*36;
        sprintf(name,"%s;%d",hname,m.pozicijaPixla[idx]+1);
        h = ((TH1D * ) data->Get(name));

        TVirtualPad *pad = pad3->cd(m.pozicijaPixlaNaCipu[idx]+1);
        pad->SetBorderSize(0);
        pad->SetBorderMode(0);

        if (idx==0 && h->InheritsFrom("TH1D") ) {
          sprintf(name,"%s_2d",h->GetName());
          TAxis *axis = h->GetXaxis();
          h2 = new TH2D(name,h->GetTitle(),144,-0.5,143.5,axis->GetNbins(),
                                                          axis->GetXmin(),
                                                          axis->GetXmax());
          h2->GetXaxis()->SetTitle("HAPD 2d channels");
          h2->GetYaxis()->SetTitle(axis->GetTitle());
          h2->GetYaxis()->SetTitleOffset(1.4);
        }

        if (h) {
          //printf("TH2D %s\n",name);
          sprintf(name,"ASIC %d ch %d",chip,idx);
          h->SetTitle(name);
          h->GetXaxis()->SetRangeUser(xmin,xmax);
          h->SetMinimum(-0.1);
          h->SetStats(kFALSE);
          h->SetFillColor(kBlue);
          h->DrawCopy("AH");
         
            if(save==2) {  
                sprintf(text_for_STR, "Charge_1D_%s_ASIC_%d_CH_%d", HAPDserialNumber.c_str(),chip,idx);
                SaveToRootAddTH1DCopy(h, text_for_STR);
            }

          if (h2){
            for(int k=xmin;k<h->GetNbinsX(); k++){
              //if (idx==133) printf("x = %d \t y = %d \t value = %d\n", idx+1, k,(int)h->GetBinContent(k+1));
              if ((int)h->GetBinContent(k+1)==0) h2->SetBinContent(idx+1,k+1,1);
              else h2->SetBinContent(idx+1,k+1,h->GetBinContent(k+1));
            }
          }
        } else printf("TH2D %s does not exist !!!!\n",name);  
      }
      c->Modified();
      c->Update();
      if(chip%2==0) c4->cd(chip+2);
      else c4->cd(chip);
      c->DrawClonePad();
      if (save==1){
        switch (chip) {
          case 0: sprintf(pdfname,"../modules/%04d/%04d_%s_1_Charge.pdf(",runNumber,runNumber,HAPDserialNumber.c_str());break;
          default: sprintf(pdfname,"../modules/%04d/%04d_%s_1_Charge.pdf",runNumber,runNumber,HAPDserialNumber.c_str());break;
        }
        c->SaveAs(pdfname,"pdf");
      } else if (save==4){
        sprintf(pdfname,"../modules/%04d/%04d_%s.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
        c->SaveAs(pdfname,"pdf");
      }
    }
    if (h2) {
      sprintf(name,"%04d_%s_c%d",runNumber,HAPDserialNumber.c_str(),5);
      c = new TCanvas(name,name,600,500);
      c->SetLeftMargin(0.15);
      c->SetRightMargin(0.15);
      c->SetLogz(1);

      sprintf(buf,"Charge scan over the center of channels");

      h2->SetTitle(buf);
      gStyle->SetTitleFontSize(0.05);
      h2->SetTitleFont(vrstaPisave);
      h2->SetTitleOffset(0);

      h2->GetZaxis()->SetRangeUser(1,10000);
      h2->GetZaxis()->SetTickLength(.02);
      h2->GetZaxis()->SetLabelFont(vrstaPisave);
      h2->GetZaxis()->SetLabelSize(0.03);

      h2->GetYaxis()->SetRangeUser(xmin,xmax);
      h2->GetYaxis()->SetTitleFont(vrstaPisave);
      h2->GetYaxis()->SetLabelFont(vrstaPisave);
      //h2->GetYaxis()->SetLabelSize(0.04);
      h2->GetYaxis()->SetLabelColor(kBlack);
      //h2->GetYaxis()->SetNdivisions(12);
      h2->GetYaxis()->CenterTitle();
      h2->GetYaxis()->SetTitle("ADC channel (a.u.)");
      //h2->GetYaxis()->SetTitleSize(0.05);
      h2->GetYaxis()->SetTitleOffset(1.5);
      h2->GetYaxis()->SetTitleColor(kBlack);

      //h2->GetXaxis()->SetTickLength(0.05);
      h2->GetXaxis()->SetTitleFont(vrstaPisave);
      h2->GetXaxis()->SetLabelFont(vrstaPisave);
      //h2->GetXaxis()->SetLabelSize(0.04);
      h2->GetXaxis()->SetLabelColor(kBlack);
      //h2->GetXaxis()->SetLabelOffset(.05);
      //h2->GetXaxis()->SetNdivisions(0);
      //h2->GetXaxis()->CenterTitle();
      h2->GetXaxis()->SetTitle("Channel");
      //h2->GetXaxis()->SetTitleSize(0.05);
      h2->GetXaxis()->SetTitleColor(kBlack); //zato ker ga ne moreš pozicionirat
      h2->GetXaxis()->SetTitleOffset(1.2);


      h2->DrawCopy("COLZ");
        if(save==2) {    
            sprintf(text_for_STR, "Charge_2D_%s", HAPDserialNumber.c_str());
            SaveToRootAddTH2DCopy(h2, text_for_STR);
        }
         
      c->Modified();
      c->Update();
      if (save==1){
        sprintf(pdfname,"../modules/%04d/%04d_%s_1_Charge.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
        c4->SaveAs(pdfname,"pdf");
        sprintf(pdfname,"../modules/%04d/%04d_%s_1_Charge.pdf)",runNumber,runNumber,HAPDserialNumber.c_str());
        c->SaveAs(pdfname,"pdf");
      } else if (save==2){
        sprintf(pdfname,"../modules/%04d/%04d_%s.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
        c4->SaveAs(pdfname,"pdf");
        c->SaveAs(pdfname,"pdf");
      }
     
        if(save==2) {  
            sprintf(text_for_STR,"../modules/%04d/%04d_%s_out.root",runNumber,runNumber,HAPDserialNumber.c_str());
            SaveToRootWrite(text_for_STR, HAPDserialNumber.c_str());
        }
    }
  }
  delete data;
  return 0;
}

float getGain(TH1D * h, int deadChannelSigma) {
  TF1 * g0,  * g1, * g2,  * g3;
  float gain;
  float mean1, sigma1, mean2;
  //Double_t * xpeaks;
  Float_t * xpeaks;

  TSpectrum * s = new TSpectrum(3);
  int nfound = s->Search(h); //TALE FUNKICJA LAHKO POVZROČA TEŽAVE, KER NI NUJNO DA VRNE VRHOVE V PRAVEM ZAPOREDJU
  //printf("Found %d candidate peaks to fit\n",nfound);
  xpeaks = s->GetPositionX();

  Float_t * first(&xpeaks[0]);
  Float_t * last(first + nfound);
  std::sort(first, last);



  float xp;
  for (int p=0;p<nfound;p++) {
    xp = xpeaks[p];
    //printf("Vrh številka %d je na poziciji %f\n",p,xp);
    if(p==0) {
      g0 = new TF1("0ph","gaus",xp-14,xp+14);
      h->Fit(g0,"QR");
    } else if(p==1) {
      g1 = new TF1("1ph","gaus",xp-14,xp+14);
      h->Fit(g1,"QR+");
     } else if(p==2) {
      g2 = new TF1("2ph","gaus",xp-14,xp+14);
      h->Fit(g2,"QR+");
    } else {
      g3 = new TF1("3ph","gaus",xp-14,xp+14);
      h->Fit(g3,"QR+");
    }
  }

  if(nfound >= 1){
    mean1 = g0->GetParameter(1);
    sigma1 = g0->GetParameter(2);
    if (sigma1<deadChannelSigma) gain = 0;
    else gain = 30;
  } else {
    gain = 0;
  }
  if(nfound > 1){
    mean2 = g1->GetParameter(1);
    printf("%f \t %f\n", mean1, mean2);
    if (mean1<mean2) gain = mean2 - mean1;
    else gain = mean1 - mean2;
    //printf("nfound: %d \t gain: %.1f \t mean1: %.1f \t sigma1: %.1f \t mean2: %.1f\n", nfound, gain, mean1, sigma1, mean2);
  }
  delete s;
  return gain;
}

int gain(int runNumber, int save){

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

  char name[128];
  char pdfname[128];
  char buf[0xFF];
  float ojacanje;

  char hname[0xF];

  sprintf(buf,"../modules/%04d/%04d_1_Treshold_Waveform.root",runNumber,runNumber);
  TFile * data = new TFile(buf);

  const char * serialNumber = getSN(runNumber);
  printf("base.c return: %s\n", serialNumber);
  /******* PREVERI ČE JE NALOŽEN FILE *******/
  if (!strcmp(serialNumber, "NoFILE")){
    printf("Ni naloženege datoteke\n");
    return -1;
  }
  std::string serialNumberTemp = serialNumber;
  std::cout << serialNumberTemp << std::endl;
  std::string HAPDserialNumber,FEBserialNumber;

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

  int blackWhite = 40;
  int max = 140;

  TCanvas * c1, * c2, * c3;
  TPad * pad1, * pad2;
  TPaveText * title;
  TH1D * h;
  TH1F * Gain1D;
  TH2F * Gain2D;
  TH2I * Gain2D_black, * Gain2D_white;

  gStyle->SetOptStat(0);
  gStyle->SetPalette(52);
  gStyle->SetNumberContours(100);


  for(HAPDnumber=0;HAPDnumber<4;HAPDnumber++){
         
          SaveToRootInit();

    //std::cout << serialNumberTemp << std::endl;
    FEBserialNumber = serialNumberTemp.substr(0,serialNumberTemp.find(","));
    serialNumberTemp.erase(0,FEBserialNumber.length()+1);
    if(!FEBserialNumber.compare("noserial")) continue;
    HAPDserialNumber = FEBserialNumber.substr(0,FEBserialNumber.find("/"));
    FEBserialNumber.erase(0,FEBserialNumber.find("/")+1);
 
    sprintf(hname,"hcharge%d_0",HAPDnumber);
    printf("%s \t %s \t %s \n",FEBserialNumber.c_str(),HAPDserialNumber.c_str(),hname);  
 
    /******* 1D *******/
    sprintf(buf,"%04d_%s_Gain1D",runNumber,HAPDserialNumber.c_str());
    c1 = new TCanvas(buf,buf,0,0,600,300);
 
    sprintf(name,"1D Gain of HAPD %s (%04d);Channel number;Gain",HAPDserialNumber.c_str(),runNumber);
    Gain1D = new TH1F("Gain1D",name,144,0,144);
 
    /******* 2D *******/
    sprintf(buf,"%04d_%s_Gain2D",runNumber,HAPDserialNumber.c_str());
    c2 = new TCanvas(buf,buf,0,0,600,600);
      c2->SetRightMargin(0.15);
 
    sprintf(name,"Backside view: Gain of HAPD %s (%04d)",HAPDserialNumber.c_str(),runNumber);
    Gain2D = new TH2F("Gain2D",name,12,-0.5,11.5,12,-0.5,11.5);
    Gain2D_black = new TH2I("Gain2D_black","Gain2D_black",12,-0.5,11.5,12,-0.5,11.5);
    Gain2D_white = new TH2I("Gain2D_white","Gain2D_white",12,-0.5,11.5,12,-0.5,11.5);
    Gain2D->SetMinimum(-0.1);
    Gain2D->SetMaximum(max);
    Gain2D_black->SetMinimum(blackWhite);
 
    /******* NAREDI HISTOGRAME *******/
    for (int i=0;i<12;i++) {
      for (int j=0;j<12;j++) {
        sprintf(name,"%s;%d",hname,m.pozicijaPixla[m.koordinatniSistem[i][j]]+1);
        //printf("%s\n",name);
        h = (TH1D *) data->Get(name);
        h->GetXaxis()->SetRangeUser(-50,300);
 
        ojacanje = getGain(h);
        //printf("channel %d \t gain %f\n", m.koordinatniSistem[i][j], ojacanje);
       
        Gain1D->Fill(m.koordinatniSistem[i][j],ojacanje);
 
        Gain2D->Fill(i,j,ojacanje);
        if(ojacanje<=blackWhite) Gain2D_white->Fill(i,j,ojacanje);
        Gain2D_black->Fill(i,j,ojacanje);
      }
    }
 
 
    c1->cd();
      c1->SetGrid(1);
 
      Gain1D->SetTitle("");
      //Gain1D->SetLineWidth(2);
      Gain1D->SetFillColor(kRed-10);
 
      Gain1D->GetYaxis()->SetRangeUser(0,140);
      Gain1D->GetYaxis()->SetTickLength(0.01);
      Gain1D->GetYaxis()->SetTitleFont(vrstaPisave);
      Gain1D->GetYaxis()->SetLabelFont(vrstaPisave);
      Gain1D->GetYaxis()->SetLabelSize(0.04);
      Gain1D->GetYaxis()->SetLabelColor(kBlack);
      //Gain1D->GetYaxis()->SetNdivisions(0);
      Gain1D->GetYaxis()->CenterTitle();
      Gain1D->GetYaxis()->SetTitle("Gain");
      Gain1D->GetYaxis()->SetTitleSize(0.05);
      //Gain1D->GetYaxis()->SetTitleOffset(.5);
      Gain1D->GetYaxis()->SetTitleColor(kBlack);
 
      //Gain1D->GetXaxis()->SetRangeUser(0,80);
      //Gain1D->GetXaxis()->SetTickLength(0.05);
      Gain1D->GetXaxis()->SetTitleFont(vrstaPisave);
      Gain1D->GetXaxis()->SetLabelFont(vrstaPisave);
      Gain1D->GetXaxis()->SetLabelSize(0.04);
      Gain1D->GetXaxis()->SetLabelColor(kBlack);
      //Gain1D->GetXaxis()->SetLabelOffset(.05);
      //Gain1D->GetXaxis()->SetNdivisions(0);
      //Gain1D->GetXaxis()->CenterTitle();
      Gain1D->GetXaxis()->SetTitle("Channel");
      Gain1D->GetXaxis()->SetTitleSize(0.05);
      Gain1D->GetXaxis()->SetTitleColor(kBlack); //zato ker ga ne moreš pozicionirat
      Gain1D->GetXaxis()->SetTitleOffset(1);
 
      Gain1D->DrawCopy();
     
 
    c2->cd();
 
      Gain2D->SetTitle("");

      Gain2D->GetZaxis()->SetTickLength(.02);
      Gain2D->GetZaxis()->SetTitleFont(vrstaPisave);
      Gain2D->GetZaxis()->SetLabelFont(vrstaPisave);
      Gain2D->GetZaxis()->SetLabelSize(0.03);
      Gain2D->GetZaxis()->SetTitle("G_{a}");
      Gain2D->GetZaxis()->CenterTitle();
 
 
      //Gain2D->GetYaxis()->SetTickLength(0.03);
      Gain2D->GetYaxis()->SetTitleFont(vrstaPisave);
      Gain2D->GetYaxis()->SetLabelFont(vrstaPisave);
      Gain2D->GetYaxis()->SetLabelSize(0.03);
      Gain2D->GetYaxis()->SetLabelColor(kBlack);
      Gain2D->GetYaxis()->SetLabelOffset(.01);
      //Gain2D->GetYaxis()->SetNdivisions(12);
      Gain2D->GetYaxis()->CenterTitle();
      Gain2D->GetYaxis()->SetTitle("Rows");
      Gain2D->GetYaxis()->SetTitleSize(0.035);
      Gain2D->GetYaxis()->SetTitleOffset(1.2);
      Gain2D->GetYaxis()->SetTitleColor(kBlack);
 
      //Gain2D->GetXaxis()->SetTickLength(0.03);
      Gain2D->GetXaxis()->SetTitleFont(vrstaPisave);
      Gain2D->GetXaxis()->SetLabelFont(vrstaPisave);
      Gain2D->GetXaxis()->SetLabelSize(0.03);
      Gain2D->GetXaxis()->SetLabelColor(kBlack);
      //Gain2D->GetXaxis()->SetLabelOffset(.05);
      //Gain2D->GetXaxis()->SetNdivisions(0);
      //Gain2D->GetXaxis()->CenterTitle();
      Gain2D->GetXaxis()->SetTitle("Columns");
      Gain2D->GetXaxis()->SetTitleSize(0.03);
      Gain2D->GetXaxis()->SetTitleColor(kBlack); //zato ker ga ne moreš pozicionirat
      Gain2D->GetXaxis()->SetTitleOffset(1.2);
 
      Gain2D->DrawCopy("COLZ");
 
      Gain2D_black->DrawCopy("TEXT,SAME");
      Gain2D_white->SetMarkerColor(kWhite);
      Gain2D_white->DrawCopy("TEXT,SAME");
 
 
    c1->Modified();
    c1->Update();
    c2->Modified();
    c2->Update();

    sprintf(buf,"%04d_%s_Gain",runNumber,HAPDserialNumber.c_str());
    c3 = new TCanvas(buf,buf,0,0,1000,1000);
    c3->cd();
    /******* 1D *******/
    sprintf(buf,"%04d_%s_gain1d_pad1",runNumber,HAPDserialNumber.c_str());
    pad1 = new TPad(buf,"SN",.15,0.7,.85,1,0,0);
      pad1->SetFillStyle(4000);
      pad1->Draw();
      //pad1->SetRightMargin(0.15);

    /******* 2D *******/
    sprintf(buf,"%04d_%s_gain2d_pad2",runNumber,HAPDserialNumber.c_str());
    pad2 = new TPad(buf,"Date",.15,0,.85,0.7,0,0);
      pad2->SetFillStyle(4000);
      pad2->Draw();
      pad2->SetRightMargin(0.15);

    pad1->cd();
      pad1->SetGrid(1);
      Gain1D->DrawCopy();

          sprintf(text_for_STR, "Gain_1D_%s", HAPDserialNumber.c_str());
          SaveToRootAddTH1F(Gain1D, text_for_STR);

      title = new TPaveText(0.2,.93,0.8,.94,"ndc");
        title->SetBorderSize(0);
        title->SetFillColor(4000);
        title->SetTextSize(.06);
        title->SetTextAlign(22);
        title->SetTextFont(vrstaPisave);
      title->AddText("Gain");
      title->Draw();


    pad2->cd();
      Gain2D->DrawCopy("COLZ");
 
      Gain2D_black->DrawCopy("TEXT,SAME");
      Gain2D_white->SetMarkerColor(kWhite);
      Gain2D_white->DrawCopy("TEXT,SAME");

          sprintf(text_for_STR, "Gain_2D_%s", HAPDserialNumber.c_str());
          SaveToRootAddTH2F(Gain2D, text_for_STR);
         
      title = new TPaveText(0.2,.91,0.8,.93,"ndc");
        title->SetBorderSize(0);
        title->SetFillColor(4000);
        title->SetTextSize(.035);
        title->SetTextAlign(22);
        title->SetTextFont(vrstaPisave);
      title->AddText("Backside view gain");
      title->Draw();

      delete c1;
      delete c2;
 
    if (save==1) {
      sprintf(pdfname,"../modules/%04d/%04d_%s_Gain.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
      c3->SaveAs(pdfname,"pdf");
    } else if (save==2){
      sprintf(pdfname,"../modules/%04d/%04d_%s.pdf",runNumber,runNumber,HAPDserialNumber.c_str());
      c3->SaveAs(pdfname,"pdf");
    } else if (save==3){
      sprintf(pdfname,"../modules/%04d/%04d_%s.pdf(",runNumber,runNumber,HAPDserialNumber.c_str());
      c3->SaveAs(pdfname,"pdf");
    } else if (save==5){
      sprintf(pdfname,"../modules/%04d/%04d_%s.root",runNumber,runNumber,HAPDserialNumber.c_str());
      c3->SaveAs(pdfname,"root");
    }
   
   
    sprintf(text_for_STR,"../modules/%04d/%04d_%s_out.root",runNumber,runNumber,HAPDserialNumber.c_str());
    SaveToRootWrite(text_for_STR, HAPDserialNumber.c_str());
 
    delete Gain1D;
    delete Gain2D;
    delete Gain2D_white;
    delete Gain2D_black;
 
  }
  delete data;
  return 0;
}