--- /dev/null
+//____________________________________________________________________
+AliFMDAnaCalibEnergyDistribution*
+ViewEDCor(const char* filename)
+{
+ // gSystem->Load("libANALYSIS");
+ // gSystem->Load("libANALYSISalice");
+ // gSystem->Load("libPWG0base");
+ // gSystem->Load("libPWG2forward");
+
+ AliFMDAnaParameters* param = AliFMDAnaParameters::Instance();
+ param->SetEnergy(900.F);
+ param->SetCollisionSystem("pp");
+ param->SetMagField(+5.F);
+ param->Init(kTRUE,AliFMDAnaParameters::kBackgroundCorrection);
+
+ TFile* file = TFile::Open(filename, "READ");
+ if (!file) {
+ Error("ViewEDCor", "Cannot open file %s", filename);
+ return 0;
+ }
+
+ AliFMDAnaCalibEnergyDistribution* bg =
+ static_cast<AliFMDAnaCalibEnergyDistribution*>(file->Get("energydistributions"));
+
+ return bg;
+}
+
+
+//____________________________________________________________________
+struct RingHistos
+{
+ TH1D* MakeHisto(const char* name, const char* title,
+ const TAxis* etaAxis)
+ {
+ TH1D* ret = new TH1D(Form(name, fD, fR),
+ Form(title, fD, fR),
+ etaAxis->GetNbins(),
+ etaAxis->GetXmin(),
+ etaAxis->GetXmax());
+ ret->SetDirectory(0);
+ ret->SetLineColor(fC);
+ ret->SetMarkerColor(fC);
+ ret->SetMarkerStyle(20+2*fD+(fR == 'I' || fR == 'i' ? 0 : 1));
+ ret->SetFillColor(fC);
+ ret->SetFillStyle(3001);
+ ret->SetXTitle("#eta");
+ ret->SetYTitle(title);
+ ret->SetStats(0);
+ return ret;
+ }
+
+
+ RingHistos(UShort_t d, Char_t r, const TAxis* etaAxis, Int_t c)
+ : fD(d), fR(r), fC(c)
+ {
+ fHists.AddAt(MakeHisto("c%d%c", "Constant FMD%d%c", etaAxis),0);
+ fHists.AddAt(MakeHisto("mpv%d%c", "MPV FMD%d%c", etaAxis),1);
+ fHists.AddAt(MakeHisto("w%d%c", "Width FMD%d%c", etaAxis),2);
+ fHists.AddAt(MakeHisto("alpha%d%c", "#alpha FMD%d%c", etaAxis),3);
+ fHists.AddAt(MakeHisto("beta%d%c", "#beta FMD%d%c", etaAxis),4);
+ fHists.AddAt(MakeHisto("chi%d%c", "#chi^{2}/#nu FMD%d%c", etaAxis),5);
+ fHists.AddAt(MakeHisto("acc%d%c", "Acceptance in FMD%d%c", etaAxis),6);
+ }
+ void Fill(Int_t iEta, Int_t p, Double_t v, Double_t e=0)
+ {
+ TH1D* h = Get(p);
+ if (!h) return;
+ h->SetBinContent(iEta, v);
+ h->SetBinError(iEta, e);
+ }
+ TH1D* Get(Int_t p) const
+ {
+ return static_cast<TH1D*>(fHists.At(p));
+ }
+ UShort_t fD;
+ Char_t fR;
+ Int_t fC;
+ TObjArray fHists;
+};
+
+//____________________________________________________________________
+struct All
+{
+ All(const TAxis* etaAxis)
+ {
+ fFMD1i = new RingHistos(1,'i', etaAxis, kRed+1);
+ fFMD2i = new RingHistos(2,'i', etaAxis, kGreen+1);
+ fFMD2o = new RingHistos(2,'o', etaAxis, kGreen+7);
+ fFMD3i = new RingHistos(3,'i', etaAxis, kBlue+1);
+ fFMD3o = new RingHistos(3,'o', etaAxis, kBlue+7);
+ }
+ RingHistos* Get(UShort_t d, Char_t r) const
+ {
+ switch (d) {
+ case 1: return fFMD1i;
+ case 2: return (r == 'I' || r == 'i' ? fFMD2i : fFMD2o);
+ case 3: return (r == 'I' || r == 'i' ? fFMD3i : fFMD3o);
+ }
+ return 0;
+ }
+ RingHistos* fFMD1i;
+ RingHistos* fFMD2i;
+ RingHistos* fFMD2o;
+ RingHistos* fFMD3i;
+ RingHistos* fFMD3o;
+};
+
+//____________________________________________________________________
+PlotEDCor(const char* filename)
+{
+ AliFMDAnaCalibEnergyDistribution* ed = ViewEDCor(filename);
+
+ AliFMDAnaParameters* param = AliFMDAnaParameters::Instance();
+
+ TAxis* etaAxis = param->GetBackgroundCorrection(1,'I',4)->GetXaxis();
+ All* all = new All(etaAxis);
+
+ for (Int_t iEta = 1; iEta < etaAxis->GetNbins(); iEta++) {
+ Float_t eta = etaAxis->GetBinCenter(iEta);
+ Info("PlotEDCor", "eta bin %3d, eta=%f", iEta, eta);
+
+ for (UShort_t d=1; d <= 3; d++) {
+ UShort_t nq = d == 1 ? 1 : 2;
+ for (UShort_t q = 0; q < nq; q++) {
+ Char_t r = q == 0 ? 'I' : 'O';
+ RingHistos* hists = all->Get(d, r);
+ if (!hists) continue;
+
+ TH1F* hed = ed->GetEnergyDistribution(d, r, eta);
+ if (!hed) continue;
+
+ if (hed->GetEntries() > 0)
+ hists->Fill(iEta, 6, 1);
+
+ TF1* fed = hed->GetFunction("FMDfitFunc");
+ if (!fed) continue;
+
+ Int_t npar = fed->GetNpar();
+ for (Int_t i = 0; i < npar; i++) {
+ Double_t par = fed->GetParameter(i);
+ Double_t err = fed->GetParError(i);
+ hists->Fill(iEta, i, par, err);
+ }
+ Double_t chi2 = fed->GetChisquare();
+ Double_t ndf = fed->GetNDF();
+ if (ndf != 0)
+ hists->Fill(iEta, 5, chi2/ndf);
+ }
+ }
+ }
+
+ TCanvas* c = new TCanvas("c", "c", 800, 800);
+ c->SetFillColor(0);
+ c->SetBorderMode(0);
+ c->SetBorderSize(0);
+ c->Divide(1,7,0,0);
+
+ THStack* stack = 0;
+
+ const char* yTitles[] = { "Constant", "#Delta_{p}", "w",
+ "#alpha", "#beta", "#chi^2/NDF",
+ "Acceptance" };
+ for (Int_t i = 0; i < 7; i++) {
+ TVirtualPad* p = c->cd(i+1);
+ p->SetFillColor(0);
+ p->SetFillStyle(0);
+ THStack* stack = new THStack;
+ stack->Add(all->Get(1,'i')->Get(i));
+ stack->Add(all->Get(2,'i')->Get(i));
+ stack->Add(all->Get(2,'o')->Get(i));
+ stack->Add(all->Get(3,'i')->Get(i));
+ stack->Add(all->Get(3,'o')->Get(i));
+ stack->Draw("nostack");
+ stack->GetHistogram()->SetYTitle(yTitles[i]);
+ stack->GetHistogram()->SetXTitle("#eta");
+ TAxis* yaxis = stack->GetHistogram()->GetYaxis();
+ yaxis->SetTitleSize(0.15);
+ yaxis->SetLabelSize(0.08);
+ yaxis->SetTitleOffset(0.35);
+ yaxis->SetNdivisions(10);
+ TAxis* xaxis = stack->GetHistogram()->GetXaxis();
+ xaxis->SetTitleSize(0.15);
+ xaxis->SetLabelSize(0.08);
+ xaxis->SetTitleOffset(0.35);
+ xaxis->SetNdivisions(320);
+ p->cd();
+ }
+ c->cd();
+ c->Print("energyDist.png");
+}
+//____________________________________________________________________
+//
+// EOF
+//
+