ROOT logo
void CompareCorrectedSpectra(const char *datafilea, const char *datafileb){
  
  gROOT->SetStyle("Plain");
  gStyle->SetPalette(1);
  gStyle->SetOptStat(1111);
  gStyle->SetPadBorderMode(0);
  gStyle->SetCanvasColor(10);
  gStyle->SetPadLeftMargin(0.13);
  gStyle->SetPadRightMargin(0.13);

  // Take files

  TFile *filea = TFile::Open(datafilea);
  TGraphErrors *correctedSpectrum_a = (TGraphErrors *) filea->Get("AlltogetherSpectrum");
 
  TH1D *histo = (TH1D*) filea->Get("RatioUnfoldingAlltogetherSpectrum");
  histo->SetName("historatio");
  TH1D *histoa = (TH1D*) histo->Clone();
  histoa->Sumw2();
  histoa->SetName("a");
  TH1D *histob = (TH1D*) histo->Clone();
  histob->Sumw2();
  histob->SetName("b");
  
 
  TFile *fileb = TFile::Open(datafileb);
  TGraphErrors *correctedSpectrum_b = (TGraphErrors *) fileb->Get("AlltogetherSpectrum");
    
  // Style
  
 correctedSpectrum_a->SetMarkerStyle(24);
 correctedSpectrum_a->SetMarkerColor(1);
 correctedSpectrum_a->SetLineColor(1);

 correctedSpectrum_b->SetMarkerStyle(27);
 correctedSpectrum_b->SetMarkerColor(4);
 correctedSpectrum_b->SetLineColor(4);

  //

  TCanvas *c1 = new TCanvas("CorrectedSpectrum","CorrectedSpectrum",800,800);
  c1->cd(1);
  TH1D *total = new TH1D("total","",1,0.38,4.3);
  total->SetMaximum(1.0);
  total->SetMinimum(1.0e-09);
  total->SetXTitle("p_{T} [GeV/c]");
  total->SetYTitle("1/2#pip_{T} d^{2}N/dp_{T}dy [GeV/c]^{-2}, |#eta| < 0.8");
  total->SetTitleOffset(1.5,"Y");
  total->Draw();
  gPad->SetLeftMargin(0.13);
  gPad->SetLogy();
  gPad->SetTicks();
  gPad->SetFillColor(10);
  gPad->SetFrameFillColor(10);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(1111);
  gStyle->SetOptTitle(0);
  correctedSpectrum_a->Draw("Psame");
  correctedSpectrum_b->Draw("Psame");
  TLegend *leg = new TLegend(0.25,0.825,0.48,0.875);
  leg->AddEntry(correctedSpectrum_a,"Corrected spectrum a","lep");
  leg->AddEntry(correctedSpectrum_b,"Corrected spectrum b","lep");
  leg->SetFillStyle(0);
  leg->Draw("same");
    
  // Ratio

  Double_t x[300];
  Double_t ry[300];
  Double_t y[300];
  Double_t rex[300];
  Double_t rey[300];

  double xa,ya,xb,yb,eya,exa,eyb,exb;
  Int_t npointsa = correctedSpectrum_a->GetN();
  Int_t npointsb = correctedSpectrum_b->GetN();
  if(npointsa != npointsb) {
    printf("Problem the two spectra have not the same number of points");
    return;
  }
  for(Int_t k = 0; k < npointsa; k++){
    correctedSpectrum_a->GetPoint(k,xa,ya);
    correctedSpectrum_b->GetPoint(k,xb,yb);
    //
    Double_t centerhisto = histoa->GetBinCenter(k+1);
    //printf("bin center %f and center %f\n",centerhisto,xa);
    histoa->SetBinContent(k+1,ya);
    histob->SetBinContent(k+1,yb);
    //
    if(TMath::Abs(xa-xb) > 0.0001) {
      printf("Problem the two spectra have not the same number of points");
      return;
    }
    eya = correctedSpectrum_a->GetErrorY(k);
    exa = correctedSpectrum_a->GetErrorX(k);
    eyb = correctedSpectrum_b->GetErrorY(k);
    exb = correctedSpectrum_b->GetErrorX(k);
    x[k] = xa;
    rex[k] = exa;
    if(yb > 0.0) y[k] = ya/yb;
    ry[k] = ya-yb;
    Double_t error = 0.0;
    if((yb > 0.0) && (ya > 0.0)) {
      error = TMath::Sqrt(TMath::Abs(eya*eya-eyb*eyb));
    }
    rey[k] = error;
    histoa->SetBinError(k+1,eya);
    histob->SetBinError(k+1,eyb);
  }
  
  histo->Sumw2();
  histo->Divide(histoa,histob,1.0,1.0,"B");

  TGraph *gratio = new TGraph(npointsa,&x[0],&y[0]);
  gratio->SetName("RatioOfSpectra");

  TGraphErrors *gdiff = new TGraphErrors(npointsa,&x[0],&ry[0],&rex[0],&rey[0]);
  gdiff->SetName("Difference");

  TCanvas *c2 = new TCanvas("ratio","ratio",800,800);
  c2->cd(1);
  TH1D *ratio = new TH1D("ratio","",1,0.38,10.0);
  ratio->SetMaximum(1.5);
  ratio->SetMinimum(0.5);
  ratio->SetXTitle("p_{T} [GeV/c]");
  ratio->SetYTitle("Ratio of corrected spectra a/b");
  ratio->SetTitleOffset(1.5,"Y");
  //ratio->Draw();
  histo->SetLineColor(2);
  histo->Draw();
  gPad->SetLeftMargin(0.13);
  gPad->SetTicks();
  //gPad->SetGridx();
  //gPad->SetGridy();
  gPad->SetFillColor(10);
  gPad->SetFrameFillColor(10);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(1111);
  gStyle->SetOptTitle(0);
  gratio->SetMarkerStyle(24);
  gratio->SetMarkerColor(4);
  gratio->SetLineColor(4);
  gratio->Draw("P");

  TCanvas *c3 = new TCanvas("Difference","Difference",800,800);
  c3->cd(1);
  TH1D *diff = new TH1D("difference","",1,0.38,4.3);
  diff->SetMaximum(1.0e-04);
  diff->SetMinimum(-1.0e-04);
  diff->SetXTitle("p_{T} [GeV/c]");
  diff->SetYTitle("Difference of corrected spectra a-b");
  diff->SetTitleOffset(1.5,"Y");
  diff->Draw();
  gPad->SetLeftMargin(0.13);
  gPad->SetTicks();
  //gPad->SetGridx();
  //gPad->SetGridy();
  gPad->SetFillColor(10);
  gPad->SetFrameFillColor(10);
  gStyle->SetOptStat(0);
  gStyle->SetOptFit(1111);
  gStyle->SetOptTitle(0);
  gdiff->SetMarkerStyle(24);
  gdiff->SetMarkerColor(4);
  gdiff->SetLineColor(4);
  gdiff->Draw("P");
  

 return;

}

 CompareCorrectedSpectra.C:1
 CompareCorrectedSpectra.C:2
 CompareCorrectedSpectra.C:3
 CompareCorrectedSpectra.C:4
 CompareCorrectedSpectra.C:5
 CompareCorrectedSpectra.C:6
 CompareCorrectedSpectra.C:7
 CompareCorrectedSpectra.C:8
 CompareCorrectedSpectra.C:9
 CompareCorrectedSpectra.C:10
 CompareCorrectedSpectra.C:11
 CompareCorrectedSpectra.C:12
 CompareCorrectedSpectra.C:13
 CompareCorrectedSpectra.C:14
 CompareCorrectedSpectra.C:15
 CompareCorrectedSpectra.C:16
 CompareCorrectedSpectra.C:17
 CompareCorrectedSpectra.C:18
 CompareCorrectedSpectra.C:19
 CompareCorrectedSpectra.C:20
 CompareCorrectedSpectra.C:21
 CompareCorrectedSpectra.C:22
 CompareCorrectedSpectra.C:23
 CompareCorrectedSpectra.C:24
 CompareCorrectedSpectra.C:25
 CompareCorrectedSpectra.C:26
 CompareCorrectedSpectra.C:27
 CompareCorrectedSpectra.C:28
 CompareCorrectedSpectra.C:29
 CompareCorrectedSpectra.C:30
 CompareCorrectedSpectra.C:31
 CompareCorrectedSpectra.C:32
 CompareCorrectedSpectra.C:33
 CompareCorrectedSpectra.C:34
 CompareCorrectedSpectra.C:35
 CompareCorrectedSpectra.C:36
 CompareCorrectedSpectra.C:37
 CompareCorrectedSpectra.C:38
 CompareCorrectedSpectra.C:39
 CompareCorrectedSpectra.C:40
 CompareCorrectedSpectra.C:41
 CompareCorrectedSpectra.C:42
 CompareCorrectedSpectra.C:43
 CompareCorrectedSpectra.C:44
 CompareCorrectedSpectra.C:45
 CompareCorrectedSpectra.C:46
 CompareCorrectedSpectra.C:47
 CompareCorrectedSpectra.C:48
 CompareCorrectedSpectra.C:49
 CompareCorrectedSpectra.C:50
 CompareCorrectedSpectra.C:51
 CompareCorrectedSpectra.C:52
 CompareCorrectedSpectra.C:53
 CompareCorrectedSpectra.C:54
 CompareCorrectedSpectra.C:55
 CompareCorrectedSpectra.C:56
 CompareCorrectedSpectra.C:57
 CompareCorrectedSpectra.C:58
 CompareCorrectedSpectra.C:59
 CompareCorrectedSpectra.C:60
 CompareCorrectedSpectra.C:61
 CompareCorrectedSpectra.C:62
 CompareCorrectedSpectra.C:63
 CompareCorrectedSpectra.C:64
 CompareCorrectedSpectra.C:65
 CompareCorrectedSpectra.C:66
 CompareCorrectedSpectra.C:67
 CompareCorrectedSpectra.C:68
 CompareCorrectedSpectra.C:69
 CompareCorrectedSpectra.C:70
 CompareCorrectedSpectra.C:71
 CompareCorrectedSpectra.C:72
 CompareCorrectedSpectra.C:73
 CompareCorrectedSpectra.C:74
 CompareCorrectedSpectra.C:75
 CompareCorrectedSpectra.C:76
 CompareCorrectedSpectra.C:77
 CompareCorrectedSpectra.C:78
 CompareCorrectedSpectra.C:79
 CompareCorrectedSpectra.C:80
 CompareCorrectedSpectra.C:81
 CompareCorrectedSpectra.C:82
 CompareCorrectedSpectra.C:83
 CompareCorrectedSpectra.C:84
 CompareCorrectedSpectra.C:85
 CompareCorrectedSpectra.C:86
 CompareCorrectedSpectra.C:87
 CompareCorrectedSpectra.C:88
 CompareCorrectedSpectra.C:89
 CompareCorrectedSpectra.C:90
 CompareCorrectedSpectra.C:91
 CompareCorrectedSpectra.C:92
 CompareCorrectedSpectra.C:93
 CompareCorrectedSpectra.C:94
 CompareCorrectedSpectra.C:95
 CompareCorrectedSpectra.C:96
 CompareCorrectedSpectra.C:97
 CompareCorrectedSpectra.C:98
 CompareCorrectedSpectra.C:99
 CompareCorrectedSpectra.C:100
 CompareCorrectedSpectra.C:101
 CompareCorrectedSpectra.C:102
 CompareCorrectedSpectra.C:103
 CompareCorrectedSpectra.C:104
 CompareCorrectedSpectra.C:105
 CompareCorrectedSpectra.C:106
 CompareCorrectedSpectra.C:107
 CompareCorrectedSpectra.C:108
 CompareCorrectedSpectra.C:109
 CompareCorrectedSpectra.C:110
 CompareCorrectedSpectra.C:111
 CompareCorrectedSpectra.C:112
 CompareCorrectedSpectra.C:113
 CompareCorrectedSpectra.C:114
 CompareCorrectedSpectra.C:115
 CompareCorrectedSpectra.C:116
 CompareCorrectedSpectra.C:117
 CompareCorrectedSpectra.C:118
 CompareCorrectedSpectra.C:119
 CompareCorrectedSpectra.C:120
 CompareCorrectedSpectra.C:121
 CompareCorrectedSpectra.C:122
 CompareCorrectedSpectra.C:123
 CompareCorrectedSpectra.C:124
 CompareCorrectedSpectra.C:125
 CompareCorrectedSpectra.C:126
 CompareCorrectedSpectra.C:127
 CompareCorrectedSpectra.C:128
 CompareCorrectedSpectra.C:129
 CompareCorrectedSpectra.C:130
 CompareCorrectedSpectra.C:131
 CompareCorrectedSpectra.C:132
 CompareCorrectedSpectra.C:133
 CompareCorrectedSpectra.C:134
 CompareCorrectedSpectra.C:135
 CompareCorrectedSpectra.C:136
 CompareCorrectedSpectra.C:137
 CompareCorrectedSpectra.C:138
 CompareCorrectedSpectra.C:139
 CompareCorrectedSpectra.C:140
 CompareCorrectedSpectra.C:141
 CompareCorrectedSpectra.C:142
 CompareCorrectedSpectra.C:143
 CompareCorrectedSpectra.C:144
 CompareCorrectedSpectra.C:145
 CompareCorrectedSpectra.C:146
 CompareCorrectedSpectra.C:147
 CompareCorrectedSpectra.C:148
 CompareCorrectedSpectra.C:149
 CompareCorrectedSpectra.C:150
 CompareCorrectedSpectra.C:151
 CompareCorrectedSpectra.C:152
 CompareCorrectedSpectra.C:153
 CompareCorrectedSpectra.C:154
 CompareCorrectedSpectra.C:155
 CompareCorrectedSpectra.C:156
 CompareCorrectedSpectra.C:157
 CompareCorrectedSpectra.C:158
 CompareCorrectedSpectra.C:159
 CompareCorrectedSpectra.C:160
 CompareCorrectedSpectra.C:161
 CompareCorrectedSpectra.C:162
 CompareCorrectedSpectra.C:163
 CompareCorrectedSpectra.C:164
 CompareCorrectedSpectra.C:165
 CompareCorrectedSpectra.C:166
 CompareCorrectedSpectra.C:167
 CompareCorrectedSpectra.C:168
 CompareCorrectedSpectra.C:169
 CompareCorrectedSpectra.C:170
 CompareCorrectedSpectra.C:171
 CompareCorrectedSpectra.C:172
 CompareCorrectedSpectra.C:173