ROOT logo
#include "CommonDefs.C"

Int_t ncentbins = 5;
Int_t nvertexbins = 20;

TZEROcalib(const Char_t *filename = "data.root", const Char_t *calibfilename = NULL, Int_t evMax = kMaxInt)
{

  /* include path for ACLic */
  gSystem->AddIncludePath("-I$ALICE_ROOT/include");
  gSystem->AddIncludePath("-I$ALICE_ROOT/TOF");
  /* load libraries */
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  /* build analysis task class */
  gROOT->LoadMacro("AliAnalysisParticle.cxx+g");
  gROOT->LoadMacro("AliAnalysisEvent.cxx+g");
  gROOT->LoadMacro("AliAnalysisTrack.cxx+g");

  /* open file, get tree and connect */
  TFile *filein = TFile::Open(filename);
  TTree *treein = (TTree *)filein->Get("aodTree");
  printf("got \"aodTree\": %d entries\n", treein->GetEntries());
  AliAnalysisEvent *analysisEvent = new AliAnalysisEvent();
  TClonesArray *analysisTrackArray = new TClonesArray("AliAnalysisTrack");
  AliAnalysisTrack *analysisTrack = NULL;
  treein->SetBranchAddress("AnalysisEvent", &analysisEvent);
  treein->SetBranchAddress("AnalysisTrack", &analysisTrackArray);

  /* open calibfile */
  TH1 *hCentrality_TZEROA_mean = NULL;
  TH1 *hCentrality_TZEROA_sigma = NULL;
  TH1 *hCentrality_TZEROC_mean = NULL;
  TH1 *hCentrality_TZEROC_sigma = NULL;
  TH1 *hCentrality_TOF_mean = NULL;
  TH1 *hCentrality_TOF_TZEROA_mean = NULL;
  TH1 *hCentrality_TOF_TZEROC_mean = NULL;
  TH1 *hCentrality_TOF_TZEROTOF_mean = NULL;
  if (calibfilename) {
    TFile *calibfile = TFile::Open(calibfilename);
    hCentrality_TZEROA_mean = (TH1 *)calibfile->Get("hCentrality_TZEROA_mean");
    hCentrality_TZEROA_sigma = (TH1 *)calibfile->Get("hCentrality_TZEROA_sigma");
    hCentrality_TZEROC_mean = (TH1 *)calibfile->Get("hCentrality_TZEROC_calib");
    hCentrality_TZEROC_sigma = (TH1 *)calibfile->Get("hCentrality_TZEROC_sigma");
    hCentrality_TOF_mean = (TH1 *)calibfile->Get("hCentrality_TOF_mean");
    hCentrality_TOF_TZEROA_mean = (TH1 *)calibfile->Get("hCentrality_TOF_TZEROA_mean");
    hCentrality_TOF_TZEROC_mean = (TH1 *)calibfile->Get("hCentrality_TOF_TZEROC_mean");
    hCentrality_TOF_TZEROTOF_mean = (TH1 *)calibfile->Get("hCentrality_TOF_TZEROTOF_mean");
  }

  /* histos */
  TH1F *hCentrality = new TH1F("hCentrality", "", NcentralityBins, centralityBin);
  TH1F *hCentrality_AC = new TH1F("hCentrality_AC", "", NcentralityBins, centralityBin);
  TH1F *hCentrality_A = new TH1F("hCentrality_A", "", NcentralityBins, centralityBin);
  TH1F *hCentrality_C = new TH1F("hCentrality_C", "", NcentralityBins, centralityBin);
  TH1F *hCentrality_NONE = new TH1F("hCentrality_NONE", "", NcentralityBins, centralityBin);

  TH2F *hCentrality_TZEROA = new TH2F("hCentrality_TZEROA", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TZEROC = new TH2F("hCentrality_TZEROC", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TZEROOR = new TH2F("hCentrality_TZEROOR", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TZEROAND = new TH2F("hCentrality_TZEROAND", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TZEROTOF = new TH2F("hCentrality_TZEROTOF", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TZERODIFF = new TH2F("hCentrality_TZERODIFF", "", NcentralityBins, centralityBin, 200, -2440., 2440.);

  TH2F *hCentrality_TZEROTOF_TZEROA = new TH2F("hCentrality_TZEROTOF_TZEROA", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TZEROTOF_TZEROC = new TH2F("hCentrality_TZEROTOF_TZEROC", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TZEROTOF_TZEROAND = new TH2F("hCentrality_TZEROTOF_TZEROAND", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TZEROA_TZEROC = new TH2F("hCentrality_TZEROA_TZEROC", "", NcentralityBins, centralityBin, 200, -2440., 2440.);

  TH2F *hVertex_TZEROA = new TH2F("hVertex_TZEROA", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TZEROC = new TH2F("hVertex_TZEROC", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TZEROOR = new TH2F("hVertex_TZEROOR", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TZEROAND = new TH2F("hVertex_TZEROAND", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TZEROTOF = new TH2F("hVertex_TZEROTOF", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TZERODIFF = new TH2F("hVertex_TZERODIFF", "", nvertexbins, -10., 10., 200, -2440., 2440.);


  TH2F *hCentrality_TOF = new TH2F("hCentrality_TOF", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TOF_TZEROA = new TH2F("hCentrality_TOF_TZEROA", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TOF_TZEROC = new TH2F("hCentrality_TOF_TZEROC", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TOF_TZEROAND = new TH2F("hCentrality_TOF_TZEROAND", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_TOF_TZEROTOF = new TH2F("hCentrality_TOF_TZEROTOF", "", NcentralityBins, centralityBin, 200, -2440., 2440.);
  TH2F *hCentrality_Resolution = new TH2F("hCentrality_Resolution", "", NcentralityBins, centralityBin, 20, 0., 100.);

  TH2F *hResolution_TZERODIFF = new TH2F("hResolution_TZERODIFF", "", 20, 0., 100., 200, -2440., 2440.);
  TH2F *hResolution_TOF_TZEROA = new TH2F("hResolution_TOF_TZEROA", "", 20, 0., 100., 200, -2440., 2440.);
  TH2F *hResolution_TOF_TZEROC = new TH2F("hResolution_TOF_TZEROC", "", 20, 0., 100., 200, -2440., 2440.);
  TH2F *hResolution_TOF_TZEROAND = new TH2F("hResolution_TOF_TZEROAND", "", 20, 0., 100., 200, -2440., 2440.);
  TH2F *hResolution_TOF_TZEROTOF = new TH2F("hResolution_TOF_TZEROTOF", "", 20, 0., 100., 200, -2440., 2440.);

  TH2F *hVertex_TOF = new TH2F("hVertex_TOF", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TOF_TZEROA = new TH2F("hVertex_TOF_TZEROA", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TOF_TZEROC = new TH2F("hVertex_TOF_TZEROC", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TOF_TZEROOR = new TH2F("hVertex_TOF_TZEROOR", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TOF_TZEROAND = new TH2F("hVertex_TOF_TZEROAND", "", nvertexbins, -10., 10., 200, -2440., 2440.);
  TH2F *hVertex_TOF_TZEROTOF = new TH2F("hVertex_TOF_TZEROTOF", "", nvertexbins, -10., 10., 200, -2440., 2440.);

  TH2F *hDiffDiff = new TH2F("hDiffDiff", "", 200, -2440., 2440., 200, -2440., 2440.);

  /* loop over events */
  for (Int_t iev = 0; iev < treein->GetEntries() && iev < evMax; iev++) {
    /* get event */
    treein->GetEvent(iev);
    if (iev % 100000 == 0) printf("iev = %d\n", iev);
    /* check event */
    if (!analysisEvent->AcceptEvent(acceptEventType)) continue;
    
    /*** ACCEPTED EVENT ***/

    /* get vertex position */
    Double_t vertexz = analysisEvent->GetVertexZ();

    /* get centrality */
    Double_t cent = analysisEvent->GetCentralityPercentile(centralityEstimator);
    hCentrality->Fill(cent);

    Int_t icent;
    for (icent = 0; icent < NcentralityBins; icent++)
      if (cent < centralityBin[icent + 1])
	break;

    Double_t TZEROA_mean = hCentrality_TZEROA_mean ? hCentrality_TZEROA_mean->GetBinContent(icent + 1) : 0.;
    Double_t TZEROA_sigma = hCentrality_TZEROA_sigma ? hCentrality_TZEROA_sigma->GetBinContent(icent + 1) : 1000.;
    Double_t TZEROC_mean  = hCentrality_TZEROC_mean ? hCentrality_TZEROC_mean->GetBinContent(icent + 1) : 0.;
    Double_t TZEROC_sigma = hCentrality_TZEROC_sigma ? hCentrality_TZEROC_sigma->GetBinContent(icent + 1) : 1000.;

    Double_t TOF_mean = hCentrality_TOF_mean ? hCentrality_TOF_mean->GetBinContent(icent + 1) : 0.;
    Double_t TOF_TZEROA_mean = hCentrality_TOF_TZEROA_mean ? hCentrality_TOF_TZEROA_mean->GetBinContent(icent + 1) : 0.;
    Double_t TOF_TZEROC_mean = hCentrality_TOF_TZEROC_mean ? hCentrality_TOF_TZEROC_mean->GetBinContent(icent + 1) : 0.;
    Double_t TOF_TZEROTOF_mean = hCentrality_TOF_TZEROTOF_mean ? hCentrality_TOF_TZEROTOF_mean->GetBinContent(icent + 1) : 0.;
    
    
    /* TZERO */
    Double_t TZEROA = analysisEvent->GetTimeZeroT0(1) - TZEROA_shift;
    Bool_t hasTZEROA = TMath::Abs(TZEROA - TZEROA_mean) < 3. * TZEROA_sigma;
    Double_t TZEROC = analysisEvent->GetTimeZeroT0(2) - TZEROC_shift;
    Bool_t hasTZEROC = TMath::Abs(TZEROC - TZEROC_mean) < 3. * TZEROC_sigma;
    /* vertex correction */
    //    TZEROA += -TZEROvertexCorr * vertexz;
    //    TZEROC += TZEROvertexCorr * vertexz;
    /* alignment to TOF */
    TZEROA += TOF_TZEROA_mean - TOF_mean;
    TZEROC += TOF_TZEROC_mean - TOF_mean;
    /* TZEROAND */
    Double_t TZEROAND = (TZEROA + TZEROC) * 0.5;
    Bool_t hasTZEROAND = hasTZEROA && hasTZEROC;
    /* TZEROTOF */
    Double_t TZEROTOF = analysisEvent->GetTimeZeroTOF()[9];
    Bool_t hasTZEROTOF = analysisEvent->GetTimeZeroTOFSigma()[9] < 150.;
    TZEROTOF += TOF_TZEROTOF_mean - TOF_mean;

    if (hasTZEROA) {
      hCentrality_TZEROA->Fill(cent, TZEROA);
      hVertex_TZEROA->Fill(vertexz, TZEROA);
    }
    if (hasTZEROC) {
      hCentrality_TZEROC->Fill(cent, TZEROC);
      hVertex_TZEROC->Fill(vertexz, TZEROC);
    }
    if (hasTZEROAND) {
      hCentrality_TZEROAND->Fill(cent, TZEROAND);
      hVertex_TZEROAND->Fill(vertexz, TZEROAND);
    }
    if (hasTZEROTOF) {
      hCentrality_TZEROTOF->Fill(cent, TZEROTOF);
      hVertex_TZEROTOF->Fill(vertexz, TZEROTOF);
    }

    if (hasTZEROA && hasTZEROC && hasTZEROAND && hasTZEROTOF) {
      hCentrality_TZEROTOF_TZEROA->Fill(cent, TZEROTOF - TZEROA);
      hCentrality_TZEROTOF_TZEROC->Fill(cent, TZEROTOF - TZEROC);
      hCentrality_TZEROTOF_TZEROAND->Fill(cent, TZEROTOF - TZEROAND);
      hCentrality_TZEROA_TZEROC->Fill(cent, TZEROA - TZEROC);
    }

    /* loop over tracks */
    for (Int_t itrk = 0; itrk < analysisTrackArray->GetEntries(); itrk++) {
      /* get track */
      AliAnalysisTrack *analysisTrack = (AliAnalysisTrack *)analysisTrackArray->At(itrk);
      if (!analysisTrack) continue;
      /* check accepted track */
      if (!analysisTrack->AcceptTrack()) continue;
      /* check momentum */
      if (analysisTrack->GetP() < 0.9 || analysisTrack->GetP() > 1.1) continue;
      /* check TOF pid */
      if (!analysisTrack->HasTOFPID()) continue;
      
      TZEROTOF = analysisEvent->GetTimeZeroTOF(analysisTrack->GetP());
      TZEROTOF += TOF_TZEROTOF_mean - TOF_mean;
      hasTZEROTOF = analysisEvent->GetTimeZeroTOFSigma(analysisTrack->GetP()) < 150.;

      Double_t time = analysisTrack->GetTOFTime() - TOF_mean;
      Double_t texp = analysisTrack->GetTOFExpTime(2);
      Double_t deltat = time - texp;

      
      hCentrality_TOF->Fill(cent, deltat);
      hVertex_TOF->Fill(vertexz, deltat);
      if (hasTZEROA) {
	hCentrality_TOF_TZEROA->Fill(cent, deltat - TZEROA);
	hVertex_TOF_TZEROA->Fill(vertexz, deltat - TZEROA);
      }
      if (hasTZEROC) {
	hCentrality_TOF_TZEROC->Fill(cent, deltat - TZEROC);
	hVertex_TOF_TZEROC->Fill(vertexz, deltat - TZEROC);
      }
      if (hasTZEROAND) {
	hCentrality_TOF_TZEROAND->Fill(cent, deltat - TZEROAND);
	hVertex_TOF_TZEROAND->Fill(vertexz, deltat - TZEROAND);
      }
      if (hasTZEROTOF) {
	hCentrality_TOF_TZEROTOF->Fill(cent, deltat - TZEROTOF);
	hVertex_TOF_TZEROTOF->Fill(vertexz, deltat - TZEROTOF);
      }

    }

  } /* end of loop over events */
  
  /* output */
  if (!calibfilename) TFile *fileout = TFile::Open(Form("TZEROcalib.%s", filename), "RECREATE");
  else TFile *fileout = TFile::Open(Form("TZEROcheck.%s", filename), "RECREATE");

  hCentrality->Write();
  hCentrality_TZEROA->Write();
  hCentrality_TZEROC->Write();
  hCentrality_TZEROAND->Write();
  hCentrality_TZEROTOF->Write();
  hCentrality_TZERODIFF->Write();

  hVertex_TZEROA->Write();
  hVertex_TZEROC->Write();
  hVertex_TZEROAND->Write();
  hVertex_TZEROTOF->Write();
  hVertex_TZERODIFF->Write();

  hCentrality_TOF->Write();
  hCentrality_TOF_TZEROA->Write();
  hCentrality_TOF_TZEROC->Write();
  hCentrality_TOF_TZEROAND->Write();
  hCentrality_TOF_TZEROTOF->Write();
  hCentrality_Resolution->Write();

  hCentrality_TZEROTOF_TZEROA->Write();
  hCentrality_TZEROTOF_TZEROC->Write();
  hCentrality_TZEROTOF_TZEROAND->Write();
  hCentrality_TZEROA_TZEROC->Write();

  hVertex_TOF->Write();
  hVertex_TOF_TZEROA->Write();
  hVertex_TOF_TZEROC->Write();
  hVertex_TOF_TZEROAND->Write();
  hVertex_TOF_TZEROTOF->Write();

  hResolution_TZERODIFF->Write();
  hResolution_TOF_TZEROA->Write();
  hResolution_TOF_TZEROC->Write();
  hResolution_TOF_TZEROAND->Write();

  hDiffDiff->Write();

  fileout->Close();

  if (!calibfilename) {
    TZEROcalibration(Form("TZEROcalib.%s", filename));
    TZEROcalib(filename, "TZEROcalibration.root");
    TZEROresolution(Form("TZEROcheck.%s", filename));
  }

}

TZEROcalibration(const Char_t *filename = "TZEROcalib.data.root", Float_t min = 2., Float_t max = 1.)
{

  gROOT->LoadMacro("FitPeak.C");

  TFile *fin = TFile::Open(filename);
  TH2 *hCentrality_TOF = (TH2 *)fin->Get("hCentrality_TOF");
  TH2 *hCentrality_TZEROA = (TH2 *)fin->Get("hCentrality_TZEROA");
  TH2 *hCentrality_TZEROC = (TH2 *)fin->Get("hCentrality_TZEROC");

  TH2 *hCentrality_TOF_TZEROTOF = (TH2 *)fin->Get("hCentrality_TOF_TZEROTOF");
  TH2 *hCentrality_TOF_TZEROA = (TH2 *)fin->Get("hCentrality_TOF_TZEROA");
  TH2 *hCentrality_TOF_TZEROC = (TH2 *)fin->Get("hCentrality_TOF_TZEROC");
  TH2 *hCentrality_TOF_TZEROTOF = (TH2 *)fin->Get("hCentrality_TOF_TZEROTOF");

  TFile *fout = TFile::Open("TZEROcalibration.root", "RECREATE");
  FitPeak(hCentrality_TOF, 200., 2., 1., "hCentrality_TOF")->Write();
  FitPeak(hCentrality_TZEROA, 200., 2., 1., "hCentrality_TZEROA")->Write();
  FitPeak(hCentrality_TZEROC, 200., 2., 1., "hCentrality_TZEROC")->Write();

  FitPeak(hCentrality_TOF_TZEROA, 200., 2., 1., "hCentrality_TOF_TZEROA")->Write();
  FitPeak(hCentrality_TOF_TZEROC, 200., 2., 1., "hCentrality_TOF_TZEROC")->Write();
  FitPeak(hCentrality_TOF_TZEROTOF, 200., 2., 1., "hCentrality_TOF_TZEROTOF")->Write();

  fout->Close();
}

TZEROresolution(const Char_t *filename, Float_t min = 2., Float_t max = 2., Char_t *what = "Centrality")
{

  TFile *fin = TFile::Open(filename);
  hdiff = (TH2 *)fin->Get(Form("h%s_TZEROA_TZEROC", what));
  hA = (TH2 *)fin->Get(Form("h%s_TZEROTOF_TZEROA", what));
  hC = (TH2 *)fin->Get(Form("h%s_TZEROTOF_TZEROC", what));
  hAND = (TH2 *)fin->Get(Form("h%s_TZEROTOF_TZEROAND", what));

  gROOT->LoadMacro("FitPeak.C");

  
  TH1 *hdiff_sigma = (TH1 *)FitPeak(hdiff, 100., min, max, "sigma1")->At(1);
  
  TH1 *hA_sigma = (TH1 *)FitPeak(hA, 100., min, max, "sigma2")->At(1);
  
  TH1 *hC_sigma = (TH1 *)FitPeak(hC, 100., min, max, "sigma3")->At(1);
  
  TH1 *hAND_sigma = (TH1 *)FitPeak(hAND, 100., min, max, "sigma4")->At(1);

  TH1 *hTZEROTOF_reso = (TH1 *)hdiff_sigma->Clone("hTZEROTOF_reso");
  hTZEROTOF_reso->Reset();
  hTZEROTOF_reso->SetMarkerStyle(20);
  hTZEROTOF_reso->SetMarkerColor(2);
  hTZEROTOF_reso->SetLineColor(2);
  hTZEROTOF_reso->SetTitle("T0-TOF");
  TH1 *hTZEROA_reso = (TH1 *)hdiff_sigma->Clone("hTZEROA_reso");
  hTZEROA_reso->Reset();
  hTZEROA_reso->SetMarkerStyle(21);
  hTZEROA_reso->SetMarkerColor(8);
  hTZEROA_reso->SetLineColor(8);
  hTZEROA_reso->SetTitle("T0-TZEROA");
  TH1 *hTZEROC_reso = (TH1 *)hdiff_sigma->Clone("hTZEROC_reso");
  hTZEROC_reso->Reset();
  hTZEROC_reso->SetMarkerStyle(22);
  hTZEROC_reso->SetMarkerColor(4);
  hTZEROC_reso->SetLineColor(4);
  hTZEROC_reso->SetTitle("T0-TZEROC");
  TH1 *hTZEROAND_reso = (TH1 *)hdiff_sigma->Clone("hTZEROAND_reso");
  hTZEROAND_reso->Reset();
  hTZEROAND_reso->SetMarkerStyle(23);
  hTZEROAND_reso->SetMarkerColor(kYellow+1);
  hTZEROAND_reso->SetLineColor(kYellow+1);
  hTZEROAND_reso->SetTitle("T0-TZEROAND");

  for (Int_t i = 0; i < hTZEROTOF_reso->GetNbinsX(); i++) {

    Double_t diff = hdiff_sigma->GetBinContent(i+1);
    Double_t diff_e = hdiff_sigma->GetBinError(i+1);
    Double_t diff2 = diff*diff;
    Double_t diff2_e = 2.*diff*diff_e;
    Double_t a = hA_sigma->GetBinContent(i+1);
    Double_t a_e = hA_sigma->GetBinError(i+1);
    Double_t a2 = a*a;
    Double_t a2_e = 2.*a*a_e;
    Double_t c = hC_sigma->GetBinContent(i+1);
    Double_t c_e = hC_sigma->GetBinError(i+1);
    Double_t c2 = c*c;
    Double_t c2_e = 2.*c*c_e;
    Double_t ac = hAND_sigma->GetBinContent(i+1);
    Double_t ac_e = hAND_sigma->GetBinError(i+1);
    Double_t ac2 = ac*ac;
    Double_t ac2_e = 2.*ac*ac_e;

    if (diff == 0.) continue;
    if (a2 + c2 - diff2 < 0.) continue;

    printf("a=%f, c=%f, diff=%f, ac=%f\n", a, c, diff, ac);

    Double_t tofreso2 = (a2 + c2 - diff2) * 0.5;
    Double_t tofreso2_e = (a2_e + c2_e + diff2_e) * 0.5;
    Double_t tofreso = TMath::Sqrt(tofreso2);
    Double_t tofreso_e = tofreso2_e / (2. * tofreso);
    hTZEROTOF_reso->SetBinContent(i+1, tofreso);
    hTZEROTOF_reso->SetBinError(i+1, tofreso_e);

    if (a2 - tofreso*tofreso < 0.) continue;
    if (c2 - tofreso*tofreso < 0.) continue;
    if (ac2 - tofreso*tofreso < 0.) continue;

    Double_t tzeroareso2 = a2 - tofreso2;
    Double_t tzeroareso2_e = a2_e + tofreso2_e;
    Double_t tzeroareso = TMath::Sqrt(tzeroareso2);
    Double_t tzeroareso_e = tzeroareso2_e / (2. * tzeroareso);
    hTZEROA_reso->SetBinContent(i+1, tzeroareso);
    hTZEROA_reso->SetBinError(i+1, tzeroareso_e);

    Double_t tzerocreso2 = c2 - tofreso2;
    Double_t tzerocreso2_e = c2_e + tofreso2_e;
    Double_t tzerocreso = TMath::Sqrt(tzerocreso2);
    Double_t tzerocreso_e = tzerocreso2_e / (2. * tzerocreso);
    hTZEROC_reso->SetBinContent(i+1, tzerocreso);
    hTZEROC_reso->SetBinError(i+1, tzerocreso_e);

    Double_t tzeroacreso2 = ac2 - tofreso2;
    Double_t tzeroacreso2_e = ac2_e + tofreso2_e;
    Double_t tzeroacreso = TMath::Sqrt(tzeroacreso2);
    Double_t tzeroacreso_e = tzeroacreso2_e / (2. * tzeroacreso);
    hTZEROAND_reso->SetBinContent(i+1, tzeroacreso);
    hTZEROAND_reso->SetBinError(i+1, tzeroacreso_e);

    //   Double_t tzerocreso = TMath::Sqrt(c2 - tofreso*tofreso);
    //    hTZEROC_reso->SetBinContent(i+1, tzerocreso);

    //    Double_t tzeroacreso = TMath::Sqrt(ac2 - tofreso*tofreso);
    //    hTZEROAND_reso->SetBinContent(i+1, tzeroacreso);

    printf("TOF=%f, TZEROA=%f, TZEROC=%f, TZEROAND=%f\n", tofreso, tzeroareso, tzerocreso, tzeroacreso);
  }

  hTZEROTOF_reso->Draw();
  hTZEROA_reso->Draw("same");
  hTZEROC_reso->Draw("same");
  hTZEROAND_reso->Draw("same");

  TFile *fout = TFile::Open("TZEROresolution.root", "RECREATE");
  hTZEROTOF_reso->Write();
  hTZEROA_reso->Write();
  hTZEROC_reso->Write();
  hTZEROAND_reso->Write();
  fout->Close();
}
 TZEROcalib.C:1
 TZEROcalib.C:2
 TZEROcalib.C:3
 TZEROcalib.C:4
 TZEROcalib.C:5
 TZEROcalib.C:6
 TZEROcalib.C:7
 TZEROcalib.C:8
 TZEROcalib.C:9
 TZEROcalib.C:10
 TZEROcalib.C:11
 TZEROcalib.C:12
 TZEROcalib.C:13
 TZEROcalib.C:14
 TZEROcalib.C:15
 TZEROcalib.C:16
 TZEROcalib.C:17
 TZEROcalib.C:18
 TZEROcalib.C:19
 TZEROcalib.C:20
 TZEROcalib.C:21
 TZEROcalib.C:22
 TZEROcalib.C:23
 TZEROcalib.C:24
 TZEROcalib.C:25
 TZEROcalib.C:26
 TZEROcalib.C:27
 TZEROcalib.C:28
 TZEROcalib.C:29
 TZEROcalib.C:30
 TZEROcalib.C:31
 TZEROcalib.C:32
 TZEROcalib.C:33
 TZEROcalib.C:34
 TZEROcalib.C:35
 TZEROcalib.C:36
 TZEROcalib.C:37
 TZEROcalib.C:38
 TZEROcalib.C:39
 TZEROcalib.C:40
 TZEROcalib.C:41
 TZEROcalib.C:42
 TZEROcalib.C:43
 TZEROcalib.C:44
 TZEROcalib.C:45
 TZEROcalib.C:46
 TZEROcalib.C:47
 TZEROcalib.C:48
 TZEROcalib.C:49
 TZEROcalib.C:50
 TZEROcalib.C:51
 TZEROcalib.C:52
 TZEROcalib.C:53
 TZEROcalib.C:54
 TZEROcalib.C:55
 TZEROcalib.C:56
 TZEROcalib.C:57
 TZEROcalib.C:58
 TZEROcalib.C:59
 TZEROcalib.C:60
 TZEROcalib.C:61
 TZEROcalib.C:62
 TZEROcalib.C:63
 TZEROcalib.C:64
 TZEROcalib.C:65
 TZEROcalib.C:66
 TZEROcalib.C:67
 TZEROcalib.C:68
 TZEROcalib.C:69
 TZEROcalib.C:70
 TZEROcalib.C:71
 TZEROcalib.C:72
 TZEROcalib.C:73
 TZEROcalib.C:74
 TZEROcalib.C:75
 TZEROcalib.C:76
 TZEROcalib.C:77
 TZEROcalib.C:78
 TZEROcalib.C:79
 TZEROcalib.C:80
 TZEROcalib.C:81
 TZEROcalib.C:82
 TZEROcalib.C:83
 TZEROcalib.C:84
 TZEROcalib.C:85
 TZEROcalib.C:86
 TZEROcalib.C:87
 TZEROcalib.C:88
 TZEROcalib.C:89
 TZEROcalib.C:90
 TZEROcalib.C:91
 TZEROcalib.C:92
 TZEROcalib.C:93
 TZEROcalib.C:94
 TZEROcalib.C:95
 TZEROcalib.C:96
 TZEROcalib.C:97
 TZEROcalib.C:98
 TZEROcalib.C:99
 TZEROcalib.C:100
 TZEROcalib.C:101
 TZEROcalib.C:102
 TZEROcalib.C:103
 TZEROcalib.C:104
 TZEROcalib.C:105
 TZEROcalib.C:106
 TZEROcalib.C:107
 TZEROcalib.C:108
 TZEROcalib.C:109
 TZEROcalib.C:110
 TZEROcalib.C:111
 TZEROcalib.C:112
 TZEROcalib.C:113
 TZEROcalib.C:114
 TZEROcalib.C:115
 TZEROcalib.C:116
 TZEROcalib.C:117
 TZEROcalib.C:118
 TZEROcalib.C:119
 TZEROcalib.C:120
 TZEROcalib.C:121
 TZEROcalib.C:122
 TZEROcalib.C:123
 TZEROcalib.C:124
 TZEROcalib.C:125
 TZEROcalib.C:126
 TZEROcalib.C:127
 TZEROcalib.C:128
 TZEROcalib.C:129
 TZEROcalib.C:130
 TZEROcalib.C:131
 TZEROcalib.C:132
 TZEROcalib.C:133
 TZEROcalib.C:134
 TZEROcalib.C:135
 TZEROcalib.C:136
 TZEROcalib.C:137
 TZEROcalib.C:138
 TZEROcalib.C:139
 TZEROcalib.C:140
 TZEROcalib.C:141
 TZEROcalib.C:142
 TZEROcalib.C:143
 TZEROcalib.C:144
 TZEROcalib.C:145
 TZEROcalib.C:146
 TZEROcalib.C:147
 TZEROcalib.C:148
 TZEROcalib.C:149
 TZEROcalib.C:150
 TZEROcalib.C:151
 TZEROcalib.C:152
 TZEROcalib.C:153
 TZEROcalib.C:154
 TZEROcalib.C:155
 TZEROcalib.C:156
 TZEROcalib.C:157
 TZEROcalib.C:158
 TZEROcalib.C:159
 TZEROcalib.C:160
 TZEROcalib.C:161
 TZEROcalib.C:162
 TZEROcalib.C:163
 TZEROcalib.C:164
 TZEROcalib.C:165
 TZEROcalib.C:166
 TZEROcalib.C:167
 TZEROcalib.C:168
 TZEROcalib.C:169
 TZEROcalib.C:170
 TZEROcalib.C:171
 TZEROcalib.C:172
 TZEROcalib.C:173
 TZEROcalib.C:174
 TZEROcalib.C:175
 TZEROcalib.C:176
 TZEROcalib.C:177
 TZEROcalib.C:178
 TZEROcalib.C:179
 TZEROcalib.C:180
 TZEROcalib.C:181
 TZEROcalib.C:182
 TZEROcalib.C:183
 TZEROcalib.C:184
 TZEROcalib.C:185
 TZEROcalib.C:186
 TZEROcalib.C:187
 TZEROcalib.C:188
 TZEROcalib.C:189
 TZEROcalib.C:190
 TZEROcalib.C:191
 TZEROcalib.C:192
 TZEROcalib.C:193
 TZEROcalib.C:194
 TZEROcalib.C:195
 TZEROcalib.C:196
 TZEROcalib.C:197
 TZEROcalib.C:198
 TZEROcalib.C:199
 TZEROcalib.C:200
 TZEROcalib.C:201
 TZEROcalib.C:202
 TZEROcalib.C:203
 TZEROcalib.C:204
 TZEROcalib.C:205
 TZEROcalib.C:206
 TZEROcalib.C:207
 TZEROcalib.C:208
 TZEROcalib.C:209
 TZEROcalib.C:210
 TZEROcalib.C:211
 TZEROcalib.C:212
 TZEROcalib.C:213
 TZEROcalib.C:214
 TZEROcalib.C:215
 TZEROcalib.C:216
 TZEROcalib.C:217
 TZEROcalib.C:218
 TZEROcalib.C:219
 TZEROcalib.C:220
 TZEROcalib.C:221
 TZEROcalib.C:222
 TZEROcalib.C:223
 TZEROcalib.C:224
 TZEROcalib.C:225
 TZEROcalib.C:226
 TZEROcalib.C:227
 TZEROcalib.C:228
 TZEROcalib.C:229
 TZEROcalib.C:230
 TZEROcalib.C:231
 TZEROcalib.C:232
 TZEROcalib.C:233
 TZEROcalib.C:234
 TZEROcalib.C:235
 TZEROcalib.C:236
 TZEROcalib.C:237
 TZEROcalib.C:238
 TZEROcalib.C:239
 TZEROcalib.C:240
 TZEROcalib.C:241
 TZEROcalib.C:242
 TZEROcalib.C:243
 TZEROcalib.C:244
 TZEROcalib.C:245
 TZEROcalib.C:246
 TZEROcalib.C:247
 TZEROcalib.C:248
 TZEROcalib.C:249
 TZEROcalib.C:250
 TZEROcalib.C:251
 TZEROcalib.C:252
 TZEROcalib.C:253
 TZEROcalib.C:254
 TZEROcalib.C:255
 TZEROcalib.C:256
 TZEROcalib.C:257
 TZEROcalib.C:258
 TZEROcalib.C:259
 TZEROcalib.C:260
 TZEROcalib.C:261
 TZEROcalib.C:262
 TZEROcalib.C:263
 TZEROcalib.C:264
 TZEROcalib.C:265
 TZEROcalib.C:266
 TZEROcalib.C:267
 TZEROcalib.C:268
 TZEROcalib.C:269
 TZEROcalib.C:270
 TZEROcalib.C:271
 TZEROcalib.C:272
 TZEROcalib.C:273
 TZEROcalib.C:274
 TZEROcalib.C:275
 TZEROcalib.C:276
 TZEROcalib.C:277
 TZEROcalib.C:278
 TZEROcalib.C:279
 TZEROcalib.C:280
 TZEROcalib.C:281
 TZEROcalib.C:282
 TZEROcalib.C:283
 TZEROcalib.C:284
 TZEROcalib.C:285
 TZEROcalib.C:286
 TZEROcalib.C:287
 TZEROcalib.C:288
 TZEROcalib.C:289
 TZEROcalib.C:290
 TZEROcalib.C:291
 TZEROcalib.C:292
 TZEROcalib.C:293
 TZEROcalib.C:294
 TZEROcalib.C:295
 TZEROcalib.C:296
 TZEROcalib.C:297
 TZEROcalib.C:298
 TZEROcalib.C:299
 TZEROcalib.C:300
 TZEROcalib.C:301
 TZEROcalib.C:302
 TZEROcalib.C:303
 TZEROcalib.C:304
 TZEROcalib.C:305
 TZEROcalib.C:306
 TZEROcalib.C:307
 TZEROcalib.C:308
 TZEROcalib.C:309
 TZEROcalib.C:310
 TZEROcalib.C:311
 TZEROcalib.C:312
 TZEROcalib.C:313
 TZEROcalib.C:314
 TZEROcalib.C:315
 TZEROcalib.C:316
 TZEROcalib.C:317
 TZEROcalib.C:318
 TZEROcalib.C:319
 TZEROcalib.C:320
 TZEROcalib.C:321
 TZEROcalib.C:322
 TZEROcalib.C:323
 TZEROcalib.C:324
 TZEROcalib.C:325
 TZEROcalib.C:326
 TZEROcalib.C:327
 TZEROcalib.C:328
 TZEROcalib.C:329
 TZEROcalib.C:330
 TZEROcalib.C:331
 TZEROcalib.C:332
 TZEROcalib.C:333
 TZEROcalib.C:334
 TZEROcalib.C:335
 TZEROcalib.C:336
 TZEROcalib.C:337
 TZEROcalib.C:338
 TZEROcalib.C:339
 TZEROcalib.C:340
 TZEROcalib.C:341
 TZEROcalib.C:342
 TZEROcalib.C:343
 TZEROcalib.C:344
 TZEROcalib.C:345
 TZEROcalib.C:346
 TZEROcalib.C:347
 TZEROcalib.C:348
 TZEROcalib.C:349
 TZEROcalib.C:350
 TZEROcalib.C:351
 TZEROcalib.C:352
 TZEROcalib.C:353
 TZEROcalib.C:354
 TZEROcalib.C:355
 TZEROcalib.C:356
 TZEROcalib.C:357
 TZEROcalib.C:358
 TZEROcalib.C:359
 TZEROcalib.C:360
 TZEROcalib.C:361
 TZEROcalib.C:362
 TZEROcalib.C:363
 TZEROcalib.C:364
 TZEROcalib.C:365
 TZEROcalib.C:366
 TZEROcalib.C:367
 TZEROcalib.C:368
 TZEROcalib.C:369
 TZEROcalib.C:370
 TZEROcalib.C:371
 TZEROcalib.C:372
 TZEROcalib.C:373
 TZEROcalib.C:374
 TZEROcalib.C:375
 TZEROcalib.C:376
 TZEROcalib.C:377
 TZEROcalib.C:378
 TZEROcalib.C:379
 TZEROcalib.C:380
 TZEROcalib.C:381
 TZEROcalib.C:382
 TZEROcalib.C:383
 TZEROcalib.C:384
 TZEROcalib.C:385
 TZEROcalib.C:386
 TZEROcalib.C:387
 TZEROcalib.C:388
 TZEROcalib.C:389
 TZEROcalib.C:390
 TZEROcalib.C:391
 TZEROcalib.C:392
 TZEROcalib.C:393
 TZEROcalib.C:394
 TZEROcalib.C:395
 TZEROcalib.C:396
 TZEROcalib.C:397
 TZEROcalib.C:398
 TZEROcalib.C:399
 TZEROcalib.C:400
 TZEROcalib.C:401
 TZEROcalib.C:402
 TZEROcalib.C:403
 TZEROcalib.C:404
 TZEROcalib.C:405
 TZEROcalib.C:406
 TZEROcalib.C:407
 TZEROcalib.C:408
 TZEROcalib.C:409
 TZEROcalib.C:410
 TZEROcalib.C:411
 TZEROcalib.C:412
 TZEROcalib.C:413
 TZEROcalib.C:414
 TZEROcalib.C:415
 TZEROcalib.C:416
 TZEROcalib.C:417
 TZEROcalib.C:418
 TZEROcalib.C:419
 TZEROcalib.C:420
 TZEROcalib.C:421