ROOT logo
//____________________________________________________________________
/** 
 * 
 * 
 * @param fn1 
 * @param fn2 
 * @param n1 
 * @param n2 
 * @param load 
 *
 * @ingroup pwglf_forward_scripts_corr
 */
void
CompareSecMaps(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/corrs/CompareCorrs.C");
  }

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

  // --- Make canvas -------------------------------------------------
  Canvas* c = new Canvas("secMapComparison", "Ratio of secondary maps", n1, n2);
  c->Open();

  // --- Loop over the data ------------------------------------------
  for (UShort_t d = 1; d <= 3; d++) { 
    UShort_t nR = (d == 1 ? 1 : 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(d, r, v);
	TH2* h2 = obj2->GetCorrection(d, r, v);
  
	if (!h1) { 
	  Error("CompareSecMaps", 
		"Map for FMD%d%c, vtxbin %3d not found in first", 
		d, r, v);
	  continue;
	}
	if (!h2) { 
	  Error("CompareSecMaps", 
		"Map 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");
	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
// 
 CompareSecMaps.C:1
 CompareSecMaps.C:2
 CompareSecMaps.C:3
 CompareSecMaps.C:4
 CompareSecMaps.C:5
 CompareSecMaps.C:6
 CompareSecMaps.C:7
 CompareSecMaps.C:8
 CompareSecMaps.C:9
 CompareSecMaps.C:10
 CompareSecMaps.C:11
 CompareSecMaps.C:12
 CompareSecMaps.C:13
 CompareSecMaps.C:14
 CompareSecMaps.C:15
 CompareSecMaps.C:16
 CompareSecMaps.C:17
 CompareSecMaps.C:18
 CompareSecMaps.C:19
 CompareSecMaps.C:20
 CompareSecMaps.C:21
 CompareSecMaps.C:22
 CompareSecMaps.C:23
 CompareSecMaps.C:24
 CompareSecMaps.C:25
 CompareSecMaps.C:26
 CompareSecMaps.C:27
 CompareSecMaps.C:28
 CompareSecMaps.C:29
 CompareSecMaps.C:30
 CompareSecMaps.C:31
 CompareSecMaps.C:32
 CompareSecMaps.C:33
 CompareSecMaps.C:34
 CompareSecMaps.C:35
 CompareSecMaps.C:36
 CompareSecMaps.C:37
 CompareSecMaps.C:38
 CompareSecMaps.C:39
 CompareSecMaps.C:40
 CompareSecMaps.C:41
 CompareSecMaps.C:42
 CompareSecMaps.C:43
 CompareSecMaps.C:44
 CompareSecMaps.C:45
 CompareSecMaps.C:46
 CompareSecMaps.C:47
 CompareSecMaps.C:48
 CompareSecMaps.C:49
 CompareSecMaps.C:50
 CompareSecMaps.C:51
 CompareSecMaps.C:52
 CompareSecMaps.C:53
 CompareSecMaps.C:54
 CompareSecMaps.C:55
 CompareSecMaps.C:56
 CompareSecMaps.C:57
 CompareSecMaps.C:58
 CompareSecMaps.C:59
 CompareSecMaps.C:60
 CompareSecMaps.C:61
 CompareSecMaps.C:62
 CompareSecMaps.C:63
 CompareSecMaps.C:64
 CompareSecMaps.C:65
 CompareSecMaps.C:66
 CompareSecMaps.C:67
 CompareSecMaps.C:68
 CompareSecMaps.C:69
 CompareSecMaps.C:70
 CompareSecMaps.C:71
 CompareSecMaps.C:72
 CompareSecMaps.C:73
 CompareSecMaps.C:74
 CompareSecMaps.C:75
 CompareSecMaps.C:76
 CompareSecMaps.C:77
 CompareSecMaps.C:78
 CompareSecMaps.C:79
 CompareSecMaps.C:80
 CompareSecMaps.C:81
 CompareSecMaps.C:82
 CompareSecMaps.C:83
 CompareSecMaps.C:84
 CompareSecMaps.C:85
 CompareSecMaps.C:86
 CompareSecMaps.C:87
 CompareSecMaps.C:88
 CompareSecMaps.C:89
 CompareSecMaps.C:90
 CompareSecMaps.C:91
 CompareSecMaps.C:92
 CompareSecMaps.C:93
 CompareSecMaps.C:94
 CompareSecMaps.C:95
 CompareSecMaps.C:96
 CompareSecMaps.C:97
 CompareSecMaps.C:98
 CompareSecMaps.C:99
 CompareSecMaps.C:100
 CompareSecMaps.C:101
 CompareSecMaps.C:102
 CompareSecMaps.C:103
 CompareSecMaps.C:104
 CompareSecMaps.C:105
 CompareSecMaps.C:106
 CompareSecMaps.C:107
 CompareSecMaps.C:108
 CompareSecMaps.C:109
 CompareSecMaps.C:110
 CompareSecMaps.C:111
 CompareSecMaps.C:112
 CompareSecMaps.C:113
 CompareSecMaps.C:114
 CompareSecMaps.C:115
 CompareSecMaps.C:116
 CompareSecMaps.C:117
 CompareSecMaps.C:118
 CompareSecMaps.C:119
 CompareSecMaps.C:120
 CompareSecMaps.C:121
 CompareSecMaps.C:122
 CompareSecMaps.C:123
 CompareSecMaps.C:124
 CompareSecMaps.C:125
 CompareSecMaps.C:126
 CompareSecMaps.C:127
 CompareSecMaps.C:128
 CompareSecMaps.C:129
 CompareSecMaps.C:130
 CompareSecMaps.C:131
 CompareSecMaps.C:132
 CompareSecMaps.C:133
 CompareSecMaps.C:134
 CompareSecMaps.C:135
 CompareSecMaps.C:136
 CompareSecMaps.C:137
 CompareSecMaps.C:138