ROOT logo
//____________________________________________________________________
/** 
 * 
 * 
 * @param fn1 
 * @param fn2 
 * @param n1 
 * @param n2 
 * @param load 
 *
 * @ingroup pwglf_forward_scripts_corr
 */
void
CompareVtxBias(const char* fn1,   const char* fn2, 
	       const char* n1=0,  const char* n2=0,
	       bool load=true)
{

  // --- Load Utilities ----------------------------------------------
  if (load) {
    gROOT->Macro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/LoadLibs.C");
    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/FORWARD/analysis2/scripts/CompareCorrs.C");
  }

  // --- Get Objects -------------------------------------------------
  TObject* o1 = 0;
  TObject* o2 = 0;
  GetObjects(AliForwardCorrectionManager::kVertexBias, fn1, fn2, o1, o2);
  if (!o1 || !o2) return; 
  AliFMDCorrVertexBias* obj1 = static_cast<AliFMDCorrVertexBias*>(o1);
  AliFMDCorrVertexBias* obj2 = static_cast<AliFMDCorrVertexBias*>(o2);
  UShort_t nVtx = obj1->GetVertexAxis().GetNbins();

  // --- Make canvas -------------------------------------------------
  Canvas* c = new Canvas("vtxBiasComparison", "Ratio of vertex bias", n1, n2);
  c->Open();

  // --- Loop over the data ------------------------------------------
  UShort_t d  = 0;
  UShort_t nR = 2;
  for (UShort_t q = 0; q < nR; q++) { 
    Char_t   r  = (q == 0 ? 'I' : 'O');
    UShort_t nS = (q == 0 ?  20 :  40);
    
    // --- Make 2D ratios ------------------------------------------
    c->Clear(nVtx, d, r);
    TList hists;
    for (UShort_t v=1; v <= nVtx; v++) { 
      TVirtualPad* p = c->cd(v);
      
      TH2* h1 = obj1->GetCorrection(r, v);
      TH2* h2 = obj2->GetCorrection(r, v);
      
      if (!h1) { 
	Error("CompareVtxBias", 
	      "Bias for FMD%d%c, vtxbin %3d not found in first", 
	      d, r, v);
	continue;
      }
      if (!h2) { 
	Error("CompareVtxBias", 
	      "Bias for FMD%d%c, vtxbin %3d not found in second", 
	      d, r, v);
	continue;
      }
  
      Double_t vl    = obj1->GetVertexAxis().GetBinLowEdge(v);
      Double_t vh    = obj1->GetVertexAxis().GetBinUpEdge(v);
      TH2*     ratio = 
	static_cast<TH2*>(h1->Clone(Form("tmpFMD%d%c_%3d",d,r,v)));
      ratio->SetName(Form("FMD%d%c_vtx%03d_ratio", d, r, v));
      ratio->SetTitle(Form("%+5.1f<v_{z}<%-+5.1f", vl, vh));
      ratio->Divide(h2);
      ratio->SetStats(0);
      ratio->SetDirectory(0);
      ratio->SetZTitle("ratio");
      
      if (ratio->GetMaximum()-ratio->GetMinimum() > 10) 
	p->SetLogz();
      
      ratio->Draw("colz");
      // h2->Draw("colz");
      hists.AddAt(ratio, v-1);
    }
    c->Print(d, r);
      
    // --- Make 1D profiles ----------------------------------------
    c->Clear(nVtx, d, r);
    for (UShort_t v=1; v <= nVtx; v++) { 
      c->cd(v);
      TH2* hist = static_cast<TH2*>(hists.At(v-1));
      TH1* prof = hist->ProjectionX();
      prof->Scale(1. / nS);
      prof->SetStats(0);
      prof->SetMinimum(0.8);
      prof->SetMaximum(1.2);
      
      prof->Draw();
      prof->Fit("pol0","Q");
      
      TF1* f = prof->GetFunction("pol0");
      
      TLatex* l = new TLatex(0.5, 0.4, Form("A = %f #pm %f", 
					    f->GetParameter(0), 
					      f->GetParError(0)));
      l->SetTextAlign(22);
      l->SetNDC();
      l->Draw();
      l->DrawLatex(0.5, 0.3, Form("#chi^2/NDF = %f / %d = %f", 
				  f->GetChisquare(), 
				  f->GetNDF(), 
				  f->GetChisquare() / f->GetNDF()));
      Double_t dist = TMath::Abs(1 - f->GetParameter(0));
      l->DrawLatex(0.5, 0.35, Form("|1 - A| = %f %s #deltaA", 
				   dist, dist <= f->GetParError(0) ? 
				   "#leq" : ">")); 

      TLine* l1 = new TLine(-4, 1, 6, 1);
      l1->SetLineColor(kRed);
      l1->SetLineStyle(2);
      l1->Draw();
    }

    c->Print(d, r, "profiles");
  }

  // --- Close stuff -------------------------------------------------
  c->Close();
  // file1->Close();
  // file2->Close();
}

  
//____________________________________________________________________
//
// EOF
// 
 CompareVtxBias.C:1
 CompareVtxBias.C:2
 CompareVtxBias.C:3
 CompareVtxBias.C:4
 CompareVtxBias.C:5
 CompareVtxBias.C:6
 CompareVtxBias.C:7
 CompareVtxBias.C:8
 CompareVtxBias.C:9
 CompareVtxBias.C:10
 CompareVtxBias.C:11
 CompareVtxBias.C:12
 CompareVtxBias.C:13
 CompareVtxBias.C:14
 CompareVtxBias.C:15
 CompareVtxBias.C:16
 CompareVtxBias.C:17
 CompareVtxBias.C:18
 CompareVtxBias.C:19
 CompareVtxBias.C:20
 CompareVtxBias.C:21
 CompareVtxBias.C:22
 CompareVtxBias.C:23
 CompareVtxBias.C:24
 CompareVtxBias.C:25
 CompareVtxBias.C:26
 CompareVtxBias.C:27
 CompareVtxBias.C:28
 CompareVtxBias.C:29
 CompareVtxBias.C:30
 CompareVtxBias.C:31
 CompareVtxBias.C:32
 CompareVtxBias.C:33
 CompareVtxBias.C:34
 CompareVtxBias.C:35
 CompareVtxBias.C:36
 CompareVtxBias.C:37
 CompareVtxBias.C:38
 CompareVtxBias.C:39
 CompareVtxBias.C:40
 CompareVtxBias.C:41
 CompareVtxBias.C:42
 CompareVtxBias.C:43
 CompareVtxBias.C:44
 CompareVtxBias.C:45
 CompareVtxBias.C:46
 CompareVtxBias.C:47
 CompareVtxBias.C:48
 CompareVtxBias.C:49
 CompareVtxBias.C:50
 CompareVtxBias.C:51
 CompareVtxBias.C:52
 CompareVtxBias.C:53
 CompareVtxBias.C:54
 CompareVtxBias.C:55
 CompareVtxBias.C:56
 CompareVtxBias.C:57
 CompareVtxBias.C:58
 CompareVtxBias.C:59
 CompareVtxBias.C:60
 CompareVtxBias.C:61
 CompareVtxBias.C:62
 CompareVtxBias.C:63
 CompareVtxBias.C:64
 CompareVtxBias.C:65
 CompareVtxBias.C:66
 CompareVtxBias.C:67
 CompareVtxBias.C:68
 CompareVtxBias.C:69
 CompareVtxBias.C:70
 CompareVtxBias.C:71
 CompareVtxBias.C:72
 CompareVtxBias.C:73
 CompareVtxBias.C:74
 CompareVtxBias.C:75
 CompareVtxBias.C:76
 CompareVtxBias.C:77
 CompareVtxBias.C:78
 CompareVtxBias.C:79
 CompareVtxBias.C:80
 CompareVtxBias.C:81
 CompareVtxBias.C:82
 CompareVtxBias.C:83
 CompareVtxBias.C:84
 CompareVtxBias.C:85
 CompareVtxBias.C:86
 CompareVtxBias.C:87
 CompareVtxBias.C:88
 CompareVtxBias.C:89
 CompareVtxBias.C:90
 CompareVtxBias.C:91
 CompareVtxBias.C:92
 CompareVtxBias.C:93
 CompareVtxBias.C:94
 CompareVtxBias.C:95
 CompareVtxBias.C:96
 CompareVtxBias.C:97
 CompareVtxBias.C:98
 CompareVtxBias.C:99
 CompareVtxBias.C:100
 CompareVtxBias.C:101
 CompareVtxBias.C:102
 CompareVtxBias.C:103
 CompareVtxBias.C:104
 CompareVtxBias.C:105
 CompareVtxBias.C:106
 CompareVtxBias.C:107
 CompareVtxBias.C:108
 CompareVtxBias.C:109
 CompareVtxBias.C:110
 CompareVtxBias.C:111
 CompareVtxBias.C:112
 CompareVtxBias.C:113
 CompareVtxBias.C:114
 CompareVtxBias.C:115
 CompareVtxBias.C:116
 CompareVtxBias.C:117
 CompareVtxBias.C:118
 CompareVtxBias.C:119
 CompareVtxBias.C:120
 CompareVtxBias.C:121
 CompareVtxBias.C:122
 CompareVtxBias.C:123
 CompareVtxBias.C:124
 CompareVtxBias.C:125
 CompareVtxBias.C:126
 CompareVtxBias.C:127
 CompareVtxBias.C:128
 CompareVtxBias.C:129
 CompareVtxBias.C:130
 CompareVtxBias.C:131
 CompareVtxBias.C:132
 CompareVtxBias.C:133
 CompareVtxBias.C:134
 CompareVtxBias.C:135
 CompareVtxBias.C:136
 CompareVtxBias.C:137
 CompareVtxBias.C:138