#include #include #include #include #include #include #include #include #include #include #include /* .L $ALICE_ROOT/TPC/Upgrade/macros/AnaDelta.C+g */ void AnaDelta(TString file, TString outDir=".") { // // // gStyle->SetOptFit(); TTreeSRedirector stream(Form("%s/deltas.root",outDir.Data())); gROOT->cd(); TFile f(file); THn *hn=(THn*)f.Get("hn"); TAxis *ar = hn->GetAxis(0); TAxis *aphi = hn->GetAxis(1); TAxis *az = hn->GetAxis(2); for (Int_t iz=0; izGetNbins(); ++iz) { az->SetRange(iz+1,iz+1); TObjArray arrFits; arrFits.SetName(Form("z_%02d",iz)); arrFits.SetOwner(); for (Int_t ir=0; irGetNbins(); ++ir) { ar->SetRange(ir+1,ir+1); for (Int_t iphi=0; iphiGetNbins(); ++iphi) { aphi->SetRange(iphi+1,iphi+1); TH1 *hProj = hn->Projection(3); if (hProj->GetEntries()<1) { delete hProj; continue; } TF1 fg("fg","gaus",-2,2); Double_t cr = ar->GetBinCenter(ir+1); Double_t cphi = aphi->GetBinCenter(iphi+1); Double_t cz = az->GetBinCenter(iz+1); hProj->SetNameTitle(Form("h_%02d_%02d_%d02",iz+1, iphi+1, ir+1), Form("z,phi,r: %02d,%02d,%d02 (%.2f, %.2f, %.2f)",iz+1,iphi+1,ir+1, cr, cphi, cz )); hProj->Fit(&fg,"QR"); arrFits.Add(hProj); Double_t mean = fg.GetParameter(1); Double_t meanErr = fg.GetParError(1); Double_t sigma = fg.GetParameter(2); Double_t sigmaErr = fg.GetParError(2); Int_t entries = hProj->GetEntries(); Double_t chi2ndf = fg.GetChisquare()/fg.GetNDF(); stream << "d" << "ir=" << ir << "iphi=" << iphi << "iz=" << iz << "cr=" << cr << "cphi=" << cphi << "cz=" << cz << "mean=" << mean << "meanErr=" << meanErr << "sigma=" << sigma << "sigmaErr=" << sigmaErr << "entries=" << entries << "chi2ndf=" << chi2ndf << "\n"; } } stream.GetFile()->cd(); arrFits.Write(0x0,TObject::kSingleKey); gROOT->cd(); } delete hn; }