/** * 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(o1); AliCentralCorrSecondaryMap* obj2 = static_cast(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<GetVertexAxis().GetBinLowEdge(v); Double_t vh = obj1->GetVertexAxis().GetBinUpEdge(v); TH2* ratio = static_cast(h1->Clone(Form("tmpSPD_%3d",v))); ratio->SetName(Form("SPD_vtx%03d_ratio", v)); ratio->SetTitle(Form("%+5.1fDivide(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(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 //