--- /dev/null
+/**
+ * Make ratio of two specific maps
+ *
+ * @param d Detector
+ * @param r Ring
+ * @param v Vertex bin (1 based)
+ * @param first First correction
+ * @param second Second correction
+ *
+ * @return Ratio of the two, or null
+ */
+
+//____________________________________________________________________
+void
+CompareCentralSecMaps(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/PWG2/FORWARD/analysis2/scripts/LoadLibs.C");
+ // gROOT->LoadMacro("$ALICE_ROOT/PWG2/FORWARD/analysis2/scripts/CompareCorrs.C");
+ }
+
+ // --- Get Objects -------------------------------------------------
+ TObject* o1 = 0;
+ TObject* o2 = 0;
+ TFile file1(fn1);
+ TFile file2(fn2);
+
+ AliCentralMultiplicityTask task("tmp");
+
+ o1 = file1.Get(task.GetManager().GetSecMapName());
+ o2 = file2.Get(task.GetManager().GetSecMapName());
+ if (!o1 || !o2) return;
+ AliCentralCorrSecondaryMap* obj1 = static_cast<AliCentralCorrSecondaryMap*>(o1);
+ AliCentralCorrSecondaryMap* obj2 = static_cast<AliCentralCorrSecondaryMap*>(o2);
+ UShort_t nVtx = obj1->GetVertexAxis().GetNbins();
+
+ // --- Make canvas -------------------------------------------------
+ // Canvas* c = new Canvas("CentralSecMapComparison", "Ratio of central 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);
+ TCanvas* c2D = new TCanvas("2Dcomparison","2Dcomparison",800,1000);
+ TCanvas* c1D = new TCanvas("1Dcomparison","1Dcomparison",800,1000);
+ c2D->Divide(2,5);
+ c1D->Divide(2,5);
+ c2D->cd();
+
+ TList hists;
+ for (UShort_t v=1; v <= nVtx; v++) {
+ // TVirtualPad* p = c->cd(v);
+ c2D->cd(v);
+ TH2* h1 = obj1->GetCorrection( v);
+ TH2* h2 = obj2->GetCorrection( v);
+ //std::cout<<h1<<" "<<h2<<std::endl;
+ /* if (!h1) {
+ Error("CompareSecMaps",
+ "Map for SPD, vtxbin %3d not found in first",
+ v);
+ continue;
+ }
+ if (!h2) {
+ Error("CompareSecMaps",
+ "Map for SPD, vtxbin %3d not found in second",
+ v);
+ continue;
+ }
+ */
+ Double_t vl = obj1->GetVertexAxis().GetBinLowEdge(v);
+ Double_t vh = obj1->GetVertexAxis().GetBinUpEdge(v);
+ TH2* ratio =
+ static_cast<TH2*>(h1->Clone(Form("tmpSPD_%3d",v)));
+ ratio->SetName(Form("SPD_vtx%03d_ratio", 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->DrawCopy("colz");
+ hists.AddAt(ratio, v-1);
+
+ }
+ // c->Print(d, r);
+
+ // --- Make 1D profiles ----------------------------------------
+ //c->Clear(nVtx, d, r);
+
+ c1D->cd();
+ for (UShort_t v=1; v <= nVtx; v++) {
+ //c->cd(v);
+ c1D->cd(v);
+ TH2* hist = static_cast<TH2*>(hists.At(v-1));
+ TH1D* prof = hist->ProjectionX();
+ prof->Clear();
+ for(Int_t i=1; i<=hist->GetNbinsX();i++) {
+
+ Float_t sum = 0;
+ Float_t error = 0;
+ Int_t n = 0;
+ for(Int_t j=1; j<=hist->GetNbinsY();j++) {
+ if(hist->GetBinContent(i,j) > 0) {
+ sum = sum+hist->GetBinContent(i,j);
+ error = error + TMath::Power(hist->GetBinError(i,j),2);
+ n++;
+ }
+
+ }
+ if(n>0) {
+ sum = sum/(Float_t)n;
+ error = TMath::Sqrt(error) / (Float_t)n;
+ prof->SetBinContent(i,sum);
+ prof->SetBinError(i,error);
+ }
+ }
+
+ // prof->Scale(0.05);
+ prof->SetStats(0);
+ prof->SetMinimum(0.8);
+ prof->SetMaximum(1.2);
+
+
+ prof->Fit("pol0","Q");
+ prof->DrawCopy();
+
+ 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");
+ c2D->Print("comparisonSPD.pdf(");
+ c1D->Print("comparisonSPD.pdf)");
+
+
+ // --- Close stuff -------------------------------------------------
+ //c->Close();
+ // file1->Close();
+ // file2->Close();
+}
+
+
+//____________________________________________________________________
+//
+// EOF
+//