11 #include <TVirtualPad.h> 64 fChi2(f.GetChisquare()),
93 for (
Int_t i = 0; i <
fN-1; i++) {
157 for (
Int_t i = 0; i <
fN-1; i++) {
197 for (
Int_t i = 0; i <
fN-1; i++) {
218 if (&o ==
this)
return *
this;
237 if (
fA)
delete []
fA;
242 if (
fN <= 0)
return *
this;
245 for (
Int_t i = 0; i <
fN; i++) {
289 for (
Int_t i = 0; i < n; i++, m++) {
292 if (
fA[i] < leastWeight)
break;
293 if (
fEA[i] /
fA[i] > maxRelError)
break;
356 for (
Int_t i = 1; i <= n; i++) {
358 if (
fA[i-1] < 0)
break;
363 if (den <= 0)
return 1;
368 #define OUTPAR(N,V,E) \ 369 std::setprecision(9) << \ 370 std::setw(12) << N << ": " << \ 371 std::setw(14) << V << " +/- " << \ 372 std::setw(14) << E << " (" << \ 373 std::setprecision(-1) << \ 374 std::setw(5) << 100*(V>0?E/V:1) << "%)\n" 396 if (this->fQuality < other->
fQuality)
return -1;
397 if (this->fQuality > other->
fQuality)
return +1;
400 if (TMath::Abs(chi2nu-1) < TMath::Abs(oChi2nu-1))
return +1;
401 if (TMath::Abs(chi2nu-1) > TMath::Abs(oChi2nu-1))
return -1;
402 if (
fN > other->
fN)
return +1;
403 if (fN < other->
fN)
return -1;
418 if (o.Contains(
"S", TString::kIgnoreCase)) {
419 Printf(
"%15s: q=%2d n=%1d chi2/nu=%6.3f",
424 std::cout <<
GetName() <<
":\n" 425 <<
" chi^2/nu = " <<
fChi2 <<
"/" <<
fNu <<
" = " 433 for (
Int_t i = 0; i <
fN-1; i++)
434 std::cout <<
OUTPAR(Form(
"a%d", i+2),
fA[i],
fEA[i]);
435 std::cout << std::flush;
442 const Double_t upX = (max < 0 ? 10 : max);
482 Draw(b ? b->GetDrawOption() :
"comp values");
505 if (opt.Contains(
"COMP")) {
506 opt.ReplaceAll(
"COMP",
"");
509 if (opt.Contains(
"GOOD")) {
510 opt.ReplaceAll(
"GOOD",
"");
513 if (opt.Contains(
"VALUES")) {
514 opt.ReplaceAll(
"VALUES",
"");
517 if (opt.Contains(
"LEGEND")) {
518 opt.ReplaceAll(
"LEGEND",
"");
521 if (!opt.Contains(
"SAME")) {
524 if (opt.Contains(
"PEAK")) {
529 l =
new TLegend(.3, .5, .59, .94);
538 tot->SetLineColor(kBlack);
539 tot->SetLineWidth(2);
540 tot->SetLineStyle(1);
542 if (l) l->AddEntry(tot,
"Total",
"l");
546 if (!opt.Contains(
"SAME")) {
550 frame->SetMinimum(max/10000);
551 frame->SetMaximum(max*1.4);
552 frame->SetXTitle(
"#Delta / #Delta_{mip}");
556 TF1* cpy = tot->DrawCopy(opt.Data());
564 TLatex* ltx1 =
new TLatex(x1, y,
"");
565 TLatex* ltx2 =
new TLatex(x2, y,
"");
567 ltx1->SetTextAlign(33);
568 ltx1->SetTextFont(132);
569 ltx1->SetTextSize(dy-.01);
571 ltx2->SetTextAlign(13);
572 ltx2->SetTextFont(132);
573 ltx2->SetTextSize(dy-.01);
575 ltx1->DrawLatex(x1, y,
"Quality");
576 ltx2->DrawLatex(x2, y, Form(
"%d",
fQuality));
579 ltx1->DrawLatex(x1, y,
"#chi^{2}/#nu");
580 ltx2->DrawLatex(x2, y, Form(
"%7.3f", (
fNu > 0 ?
fChi2 /
fNu : -1)));
583 const Char_t* pn[] = {
"C",
"#Delta",
"#xi",
"#sigma" };
586 for (
Int_t i = 0; i < 4; i++) {
587 ltx1->DrawLatex(x1, y, pn[i]);
588 ltx2->DrawLatex(x2, y, Form(
"%6.4f#pm%6.4f", pv[i], pe[i]));
591 for (
Int_t i=2; i <=
fN; i++) {
593 ltx1->SetTextColor(kRed+3);
594 ltx2->SetTextColor(kRed+3);
596 ltx1->DrawLatex(x1, y, Form(
"a_{%d}", i));
597 ltx2->DrawLatex(x2, y, Form(
"%6.4f#pm%6.4f",
fA[i-2],
fEA[i-2]));
604 TLine* pl =
new TLine(
fDelta, 0.01*max,
fDelta, 1.5*max);
606 pl->SetLineColor(kBlack);
616 for (
Int_t i=1; i <=
fN; i++) {
617 if (good && i > maxW)
break;
623 f->SetLineStyle(i > maxW ? 2 : 1);
624 min = TMath::Min(f->GetMaximum(), min);
625 f->DrawCopy(opt.Data());
626 if (l) l->AddEntry(f, Form(
"%d MIP%s", i, (i>1 ?
"s" :
"")),
"l");
631 if (max <= 0) max = 0.1;
632 if (min <= 0) min = 1e-4;
633 cpy->SetMaximum(max);
634 cpy->SetMinimum(min);
635 cpy->GetHistogram()->SetMaximum(max);
636 cpy->GetHistogram()->SetMinimum(min);
637 cpy->GetHistogram()->GetYaxis()->SetRangeUser(min, max);
645 #define CHECKPAR(V,E,T) ((V > 0) && (E / V < T)) 672 return fDelta - f * sum / nor;
683 if (!(f =
GetF1(1,5)))
684 throw TString(
"Didn't TF1 object");
685 if (!(g =
new TGraph(f,
"i")))
686 throw TString(
"Failed to integrate function");
691 throw TString::Format(
"Invalid integral: %lf", total);
693 for (
Int_t i = 0; i < n; i++) {
694 Double_t prob = g->GetY()[i] / total;
701 throw TString::Format(
"Couldn't find x value for cut %lf", low);
704 AliWarningF(
"%s: %s",
GetName(), str.Data());
724 if (red < maxChi2nu) qual += 4;
726 Int_t q =
Int_t((maxChi2nu+decline - red) / decline * 4);
727 if (q > 0) qual += q;
736 if (
fXi < 0.01) qual -= 2;
737 if (
fSigma < 0.01) qual -= 2;
803 if (&o ==
this)
return *
this;
811 #define CACHE(BIN,IDX,OFFSET) fCache[IDX*OFFSET+BIN-1] 812 #define CACHEDR(BIN,D,R,OFFSET) \ 813 CACHE(BIN,(D == 1 ? 0 : (D - 2) * 2 + 1 + (R=='I' || R=='i' ? 0 : 1)),OFFSET) 820 if (
fCache.GetSize() > 0)
return;
825 fCache.Set(nRings*offset);
828 for (
Int_t i = 0; i < nRings; i++) {
834 Int_t minBin = offset+1;
836 Int_t realMinBin = offset+1;
837 Int_t realMaxBin = -1;
838 for (
Int_t j = 1; j < ringArray->GetEntriesFast(); j++) {
844 realMinBin = TMath::Min(j, realMinBin);
845 realMaxBin = TMath::Max(j, realMaxBin);
851 if (minQuality > 0 && fit->
fQuality < minQuality)
continue;
855 CACHE(j,i,offset) = j;
856 minBin = TMath::Min(j, minBin);
857 maxBin = TMath::Max(j, maxBin);
859 AliInfoF(
"Out of %d bins, %d had fits, of which %d are good (%5.1f%%)",
860 offset, nFits, nGood, (nFits > 0 ? 100*
float(nGood)/nFits : 0));
863 realMinBin = TMath::Max(1, realMinBin-1);
864 realMaxBin = TMath::Min(offset, realMaxBin+1);
865 for (
Int_t j = realMinBin; j <= realMaxBin; j++) {
866 if (
CACHE(j,i,offset) > 0)
continue;
868 Int_t nK = TMath::Max(realMaxBin - j, j - realMinBin);
870 for (
Int_t k = 1; k <= nK; k++) {
873 if (left > realMinBin &&
874 CACHE(left,i,offset) == left) found = left;
875 else if (right < realMaxBin &&
876 CACHE(right,i,offset) == right) found = right;
877 if (found > 0)
break;
880 if (found)
CACHE(j,i,offset) =
CACHE(found,i,offset);
881 else AliWarningF(
"No fit found for etabin=%d in ring=%d", j, i);
903 AliWarning(
"No eta axis defined");
907 if (bin <= 0 || bin >
fEtaAxis.GetNbins())
return 0;
926 AliError(Form(
"Failed to make ring array for FMD%d%c", d, r));
929 if (etaBin <= 0 || etaBin >=
fEtaAxis.GetNbins()+1) {
930 AliError(Form(
"bin=%d is out of range [%d,%d]",
935 ringArray->AddAtAndExpand(fit, etaBin);
954 AliError(Form(
"eta=%f is out of range [%f,%f]",
959 return SetFit(d, r, bin, fit);
1008 if (!
SetFit(d, r, eta, e)) {
1017 Int_t quality,
const TF1& f)
1030 if (!
SetFit(d, r, eta, e)) {
1052 if (!ringArray)
return 0;
1053 if (etabin <= 0 || etabin >=
fEtaAxis.GetNbins())
return 0;
1054 if (etabin > ringArray->GetEntriesFast())
return 0;
1055 else if (etabin >= ringArray->GetEntriesFast()) etabin--;
1056 else if (!ringArray->At(etabin)) etabin++;
1057 return static_cast<ELossFit*
>(ringArray->At(etabin));
1075 return GetFit(d, r, etabin);
1094 if (etabin <= 0 || etabin >=
fEtaAxis.GetNbins()) {
1102 AliError(Form(
"Failed to make ring array for FMD%d%c", d, r));
1105 DMSG(fDebug, 10,
"Got ringArray %s for FMD%d%c", ringArray->GetName(), d, r);
1108 Int_t idx = (d == 1 ? 0 :
1109 (d - 2) * 2 + 1 + (r==
'I' || r==
'i' ? 0 : 1));
1113 if (bin < 0 || bin > ringArray->GetEntriesFast())
return 0;
1115 return static_cast<ELossFit*
>(ringArray->At(bin));
1134 return FindFit(d, r, etabin, minQ);
1142 case 2:
return (r ==
'i' || r ==
'I') ? 1 : 2;
1143 case 3:
return (r ==
'i' || r ==
'I') ? 3 : 4;
1163 if (idx < 0)
return 0;
1181 if (idx < 0)
return 0;
1182 if (idx >=
fRings.GetEntriesFast() || !
fRings.At(idx)) {
1185 a->SetName(Form(
"FMD%d%c", d, r));
1187 fRings.AddAtAndExpand(a, idx);
1200 if (!fit)
return -1024;
1212 if (!fit)
return -1024;
1223 if (!fit)
return -1024;
1234 if (!fit)
return -1024;
1245 if (!fit)
return -1024;
1262 if (
fRings.GetEntries() <= 0) isGood =
false;
1265 while ((ringArray = static_cast<TObjArray*>(nextRing()))) {
1266 Char_t r = ringArray->GetName()[4];
1274 if (iEta > ringArray->GetEntriesFast()) {
1275 max = TMath::Max(gap, max);
1278 TObject* o = ringArray->At(iEta);
1280 if (!first) { gap++; len++; }
1292 max = TMath::Max(max, gap);
1296 Int_t min = (r ==
'I' ? minInner : minOuter);
1298 if (rate < minRate) thisGood =
false;
1299 if (len < min) thisGood =
false;
1300 if (max > maxGap) thisGood =
false;
1301 if (!thisGood) isGood =
false;
1303 Printf(
"%s: %2d/%2d=%5.1f%%%-2s%5.1f%% good (%d) fits (%-2s %2d) " 1304 "max gap %2d (%-2s %2d) -> %s",
1305 ringArray->GetName(), good, len, 100*rate,
1306 (rate < minRate ?
"<" :
">="), 100*minRate,
1308 (len < min ?
"<" :
">="), min, max,
1309 (max > maxGap ?
">" :
"<="), maxGap,
1310 (thisGood ?
"good" :
"bad"));
1322 TH1D* MakeHist(
const TAxis& axis,
const char* name,
const char*
title,
1325 TH1D* h =
new TH1D(Form(
"%s_%s", name, title),
1326 Form(
"%s %s", name, title),
1327 axis.GetNbins(), axis.GetXmin(), axis.GetXmax());
1329 h->SetMarkerStyle(20);
1330 h->SetMarkerColor(color);
1331 h->SetMarkerSize(0.5);
1332 h->SetFillColor(color);
1333 h->SetFillStyle(3001);
1334 h->SetLineColor(color);
1341 #define IDX2RING(I) (i == 0 || i == 1 || i == 3 ? 'I' : 'O') 1342 #define IDX2DET(I) (i == 0 ? 1 : (i == 1 || i == 2 ? 2 : 3)) 1371 stacks->AddAt(sChi2nu=
new THStack(
"chi2",
"#chi^{2}/#nu"), kChi2nu);
1372 stacks->AddAt(sC =
new THStack(
"c",
"C"), kC);
1373 stacks->AddAt(sDelta =
new THStack(
"delta",
"#Delta_{mp}"), kDelta);
1374 stacks->AddAt(sXi =
new THStack(
"xi",
"#xi"), kXi);
1375 stacks->AddAt(sSigma =
new THStack(
"sigma",
"#sigma"), kSigma);
1377 stacks->AddAt(n =
new THStack(
"n",
"N"), kN);
1379 sChi2nu->SetName(
"qual");
1380 sChi2nu->SetTitle(
"Quality");
1382 n->SetTitle(
"Bin map");
1384 for (
Int_t i = 1; i <= maxN; i++) {
1385 stacks->AddAt(
new THStack(Form(
"a_%02d", i+1), Form(
"a_{%d}", i+1)), kN+i);
1393 for (
Int_t i = 0; i < nRings; i++) {
1394 if (!
fRings.At(i))
continue;
1396 Int_t nFits = a->GetEntriesFast();
1409 for (
Int_t j = 0; j < maxN; j++) hA[j] = 0;
1410 const char* ho = (rel || !err ?
"hist" :
"e");
1411 sChi2nu->Add(hChi,
"hist");
1413 sDelta ->Add(hDelta, ho);
1415 sSigma ->Add(hSigma, ho);
1417 n ->Add(hN,
"hist");
1418 hChi->SetFillColor(color);
1419 hChi->SetFillStyle(3001);
1420 hN->SetFillColor(color);
1421 hN->SetFillStyle(3001);
1423 for (
Int_t k = 1; k <= maxN; k++) {
1424 hA[k-1] = MakeHist(
fEtaAxis,a->GetName(), Form(
"a%02d",k+1),
color);
1425 static_cast<THStack*
>(stacks->At(kN+k))->Add(hA[k-1], ho);
1433 UpdateStackHist(f, rel, j, hChi, hN, hC, hDelta, hXi, hSigma, maxN, hA);
1437 for (
Int_t j = 0; j < nFits; j++) {
1442 hChi, hN, hC, hDelta, hXi, hSigma, maxN, hA);
1466 hChi ->SetBinContent(b, chi2nu);
1467 hN ->SetBinContent(b, w);
1468 hC ->SetBinContent(b, c);
1469 hDelta ->SetBinContent(b, delta);
1470 hXi ->SetBinContent(b, xi);
1471 hSigma ->SetBinContent(b, sigma);
1474 hC ->SetBinError(b, f->
fEC);
1475 hDelta ->SetBinError(b, f->
fEDelta);
1476 hXi ->SetBinError(b, f->
fEXi);
1477 hSigma ->SetBinError(b, f->
fESigma);
1480 for (
Int_t k = 0; k < f->
fN-1 && k < maxN; k++) {
1482 hA[k]->SetBinContent(b, a);
1483 if (!rel) hA[k]->SetBinError(b, f->
fEA[k]);
1498 TString opt(Form(
"nostack %s", option));
1500 Bool_t rel = (opt.Contains(
"relative"));
1501 Bool_t err = (opt.Contains(
"error"));
1502 Bool_t clr = (opt.Contains(
"clear"));
1503 Bool_t gdd = (opt.Contains(
"good"));
1504 if (rel) opt.ReplaceAll(
"relative",
"");
1505 if (err) opt.ReplaceAll(
"error",
"");
1506 if (clr) opt.ReplaceAll(
"clear",
"");
1507 if (gdd) opt.ReplaceAll(
"good",
"");
1511 for (
Int_t i = 0; i < nRings; i++) {
1512 if (!
fRings.At(i))
continue;
1514 Int_t nFits = a->GetEntriesFast();
1516 for (
Int_t j = 0; j < nFits; j++) {
1523 Int_t nPad = 6+maxN-1;
1524 TVirtualPad* pad = gPad;
1527 pad->SetTopMargin(0.02);
1528 pad->SetRightMargin(0.02);
1529 pad->SetBottomMargin(0.15);
1530 pad->SetLeftMargin(0.10);
1532 pad->Divide(2, (nPad+1)/2, 0.1, 0, 0);
1536 Int_t nPad2 = (nPad+1) / 2;
1537 for (
Int_t i = 0; i < nPad; i++) {
1538 Int_t iPad = 1 + i/nPad2 + 2 * (i % nPad2);
1539 TVirtualPad* p = pad->cd(iPad);
1540 p->SetLeftMargin(.15);
1545 if (rel && i != 0 && i != 6 && i != 5 && i != 4) p->SetLogy();
1548 THStack*
stack =
static_cast<THStack*
>(stacks->At(i));
1549 if (!stack->GetHists() || stack->GetHists()->GetEntries() <= 0) {
1550 AliWarningF(
"No histograms in %s", stack->GetName());
1559 stack->Draw(opt.Data());
1561 TString tit(stack->GetTitle());
1562 if (rel && i != 0 && i != 5)
1563 tit = Form(
"#delta %s/%s", tit.Data(), tit.Data());
1564 TH1* hist = stack->GetHistogram();
1565 TAxis* yaxis = hist->GetYaxis();
1566 yaxis->SetTitle(tit.Data());
1567 yaxis->SetTitleSize(0.15);
1568 yaxis->SetLabelSize(0.08);
1569 yaxis->SetTitleOffset(0.35);
1570 yaxis->SetTitleFont(132);
1571 yaxis->SetLabelFont(132);
1572 yaxis->SetNdivisions(5);
1575 TAxis* xaxis = stack->GetHistogram()->GetXaxis();
1576 xaxis->SetTitle(
"#eta");
1577 xaxis->SetTitleSize(0.15);
1578 xaxis->SetLabelSize(0.08);
1579 xaxis->SetTitleOffset(0.35);
1580 xaxis->SetTitleFont(132);
1581 xaxis->SetLabelFont(132);
1582 xaxis->SetNdivisions(10);
1584 stack->Draw(opt.Data());
1604 bool recurse = opt.Contains(
"R");
1605 bool cache = opt.Contains(
"C") &&
fCache.GetSize() > 0;
1608 std::cout <<
"Low cut in fit range: " <<
fLowCut <<
"\n" 1609 <<
"Eta axis: " << nBins
1610 <<
" bins, range [" <<
fEtaAxis.GetXmin() <<
"," 1611 <<
fEtaAxis.GetXmax() <<
"]" << std::endl;
1613 for (
Int_t i = 0; i < nRings; i++) {
1614 if (!
fRings.At(i))
continue;
1616 Int_t nFits = a->GetEntriesFast();
1618 std::cout << a->GetName() <<
" [" << nFits <<
" entries]" 1619 << (recurse ?
":\n" :
"\t");
1622 for (
Int_t j = 0; j < nFits; j++) {
1623 if (!a->At(j))
continue;
1625 min = TMath::Min(j, min);
1626 max = TMath::Max(j, max);
1629 std::cout <<
"Bin # " << j <<
"\t";
1635 std::cout <<
" bin range: " << std::setw(3) << min
1636 <<
"-" << std::setw(3) << max <<
" " << std::setw(3)
1637 << (max-min+1) <<
" bins" << std::endl;
1642 std::cout <<
" eta bin | Fit bin \n" 1643 <<
" # range | FMD1i FMD2i FMD2o FMD3i FMD3o" 1646 size_t oldPrec = std::cout.precision();
1647 std::cout.precision(3);
1648 for (
Int_t i = 1; i <= nBins; i++) {
1649 std::cout << std::setw(4) << i <<
" " 1650 << std::setw(5) << std::showpos <<
fEtaAxis.GetBinLowEdge(i)
1651 <<
" - " << std::setw(5) <<
fEtaAxis.GetBinUpEdge(i)
1652 << std::noshowpos <<
" | ";
1653 for (
Int_t j = 0; j < 5; j++) {
1655 if (bin <= 0) std::cout <<
" ";
1656 else std::cout << std::setw(5) << bin
1657 << (bin == i ?
' ' :
'*') <<
' ';
1659 std::cout << std::endl;
1661 std::cout.precision(oldPrec);
Int_t color[]
print message on plot with ok/not ok
Bool_t SetFit(UShort_t d, Char_t r, Double_t eta, Int_t quality, const TF1 &f)
void UpdateStackHist(ELossFit *f, Bool_t rel, Int_t used, TH1 *hChi, TH1 *hN, TH1 *hC, TH1 *hDelta, TH1 *hXi, TH1 *hSigma, Int_t maxN, TH1 **hA) const
static TF1 * MakeFn(Double_t c, Double_t delta, Double_t xi, Double_t sigma, Double_t sigma_n, Int_t n, const Double_t *a, Double_t xmin, Double_t xmax)
TObjArray * GetOrMakeRingArray(UShort_t d, Char_t r)
Double_t GetXiCut(UShort_t d, Char_t r, Int_t etaBin, Double_t f) const
#define CACHE(BIN, IDX, OFFSET)
virtual ~AliFMDCorrELossFit()
ELossFit * FindFit(UShort_t d, Char_t r, Double_t eta, UShort_t minQ) const
#define DMSG(L, N, F,...)
void Print(Option_t *option="R") const
static TF1 * MakeF1(Double_t c, Double_t delta, Double_t xi, Double_t sigma, Double_t sigma_n, Double_t xmin, Double_t xmax)
void CalculateQuality(Double_t maxChi2nu=fgMaxChi2nu, Double_t maxRelError=fgMaxRelError, Double_t leastWeight=fgLeastWeight)
static Double_t Fn(Double_t x, Double_t delta, Double_t xi, Double_t sigma, Double_t sigma_n, Int_t n, const Double_t *a)
void CacheBins(UShort_t minQuality=kDefaultQuality) const
Declaration and implementation of Landau-Gauss distributions.
void Draw(Option_t *option="comp")
#define CACHEDR(BIN, D, R, OFFSET)
Double_t Evaluate(Double_t x, UShort_t maxN=999) const
Double_t FindProbabilityCut(Double_t low) const
static Color_t RingColor(UShort_t d, Char_t r)
Bool_t IsGood(Bool_t verbose=true, Double_t minRate=.7, Int_t maxGap=3, Int_t minInner=25, Int_t minOuter=15, Int_t minQuality=kDefaultQuality)
TObjArray * GetRingArray(UShort_t d, Char_t r) const
Int_t Compare(const TObject *o) const
Int_t FindEtaBin(Double_t eta) const
static Double_t fgMaxRelError
Cached maximum weight.
void Print(Option_t *option) const
ELossFit & operator=(const ELossFit &o)
Various utilities used in PWGLF/FORWARD.
Double_t GetAvgXiSigmaCut(UShort_t d, Char_t r, Int_t etaBin, Double_t f) const
static TF1 * MakeFi(Double_t c, Double_t delta, Double_t xi, Double_t sigma, Double_t sigma_n, Int_t i, Double_t xmin, Double_t xmax)
Double_t GetXiSigmaCut(UShort_t d, Char_t r, Int_t etaBin, Double_t f) const
Double_t GetProbabilityCut(UShort_t d, Char_t r, Int_t etaBin, Double_t f) const
Double_t GetXiSigmaCut(Double_t f) const
void SetEtaAxis(const TAxis &axis)
Double_t GetMpvCut(Double_t f) const
TList * GetStacks(Bool_t err, Bool_t rel, Bool_t good, UShort_t maxN=5) const
const Char_t * GetName() const
ELossFit * GetFit(UShort_t d, Char_t r, Double_t eta) const
Double_t GetAvgXiSigmaCut(Double_t f) const
void Draw(Option_t *option="")
static Bool_t EnableSigmaShift(Short_t val=-1)
static Double_t fgMaxChi2nu
static Double_t Fi(Double_t x, Double_t delta, Double_t xi, Double_t sigma, Double_t sigma_n, Int_t i)
Double_t GetMpvCut(UShort_t d, Char_t r, Int_t etaBin, Double_t f) const
Double_t EvaluateWeighted(Double_t x, UShort_t maxN=9999) const
AliFMDCorrELossFit & operator=(const AliFMDCorrELossFit &o)
TF1 * GetF1(Int_t i=0, Double_t max=20) const
#define CHECKPAR(V, E, T)
Int_t GetRingIndex(UShort_t d, Char_t r) const
Double_t GetXiCut(Double_t f) const
static Double_t fgLeastWeight
Int_t FindMaxWeight(Double_t maxRelError=2 *fgMaxRelError, Double_t leastWeight=fgLeastWeight, UShort_t maxN=999) const