2 TestSPD(const TString& which, Double_t nVar=2)
4 TFile* file = TFile::Open("forward.root", "READ");
7 Bool_t spd = which.EqualTo("spd", TString::kIgnoreCase);
10 if (spd) l = static_cast<TList*>(file->Get("CentralSums"));
11 else l = static_cast<TList*>(file->Get("ForwardSums"));
13 Warning("", "%sSums not found", spd ? "Central" : "Forward");
17 TList* ei = static_cast<TList*>(l->FindObject("fmdEventInspector"));
19 Warning("", "fmdEventInspector not found");
23 TObject* run = ei->FindObject("runNo");
25 Warning("", "No run number found");
26 ULong_t runNo = run ? run->GetUniqueID() : 0;
29 if (spd) h = static_cast<TH2*>(l->FindObject("nClusterVsnTracklet"));
31 TList* den = static_cast<TList*>(l->FindObject("fmdDensityCalculator"));
33 Error("", "fmdDensityCalculator not found");
36 TList* rng = static_cast<TList*>(den->FindObject(which));
38 Error("", "%s not found", which.Data());
41 h = static_cast<TH2*>(rng->FindObject("elossVsPoisson"));
44 Warning("", "%s not found", spd ? nClusterVsnTracklet : "elossVsPoisson");
48 gStyle->SetOptFit(1111);
49 gStyle->SetOptStat(0);
50 TCanvas* c = new TCanvas("c", Form("Run %u", runNo));
53 TVirtualPad* p = c->cd(1);
61 TObjArray* fits = new TObjArray;
62 h->FitSlicesY(0, 1, -1, 0, "QN", fits);
64 TF1* mean = new TF1("mean", "pol1");
65 TF1* var = new TF1("var", "pol1");
66 // mean->FixParameter(0, 0);
67 // var->FixParameter(0, 0);
68 for (Int_t i = 0; i < 3; i++) {
74 TH1* hh = static_cast<TH1*>(fits->At(i));
79 hh->Fit((i == 1? mean : var), "+Q");
83 TGraphErrors* g1 = new TGraphErrors(h->GetNbinsX());
84 g1->SetFillColor(kBlue-10);
85 g1->SetFillStyle(3001);
87 TGraph* u1 = new TGraph(h->GetNbinsX());
88 TGraph* l1 = new TGraph(h->GetNbinsX());
89 u1->SetLineColor(kBlue+1);
90 l1->SetLineColor(kBlue+1);
93 TGraphErrors* g2 = new TGraphErrors(h->GetNbinsX());
94 g2->SetFillColor(kRed-10);
95 g2->SetFillStyle(3001);
97 TGraph* u2 = new TGraph(h->GetNbinsX());
98 TGraph* l2 = new TGraph(h->GetNbinsX());
99 u2->SetLineColor(kRed+1);
100 l2->SetLineColor(kRed+1);
103 for (Int_t i = 1; i <= h->GetNbinsX(); i++) {
104 Double_t x = hh->GetXaxis()->GetBinCenter(i);
105 Double_t y = mean->Eval(x);
106 Double_t e = var->Eval(y);
107 Double_t e1 = nVar * e;
108 if (spd) e1 *= TMath::Log10(e);
109 // Printf("%10e -> %10e +/- %10e", x, y, ee);
110 g1->SetPoint(i-1, x, y);
111 g1->SetPointError(i-1, 0, e1);
112 u1->SetPoint(i-1, x, y+e1);
113 l1->SetPoint(i-1, x, y-e1);
114 // Printf("%3d: %f -> %f +/- %f", i, x, y, ee);
116 Double_t e2 = nVar*0.05*x;
117 g2->SetPoint(i-1, x, x);
118 g2->SetPointError(i-1, 0, e2);
119 u2->SetPoint(i-1, x, x+e2);
120 l2->SetPoint(i-1, x, x-e2);
137 TLatex* ltx = new TLatex(0.15, ly, Form("#LTy#GT = %f + %f x",
138 mean->GetParameter(0),
139 mean->GetParameter(1)));
141 ltx->SetTextSize(dy);
142 ltx->SetTextAlign(13);
146 ltx->DrawLatex(0.15, ly, Form("#sigma_{y} = %f + %f x",
147 var->GetParameter(0),
148 var->GetParameter(1)));
151 ltx->DrawLatex(0.15, ly, Form("#delta = %f #sigma %s",
152 nVar, (spd ? "log_{10}(#sigma" : "")));