//____________________________________________________________________
AliFMDMultCuts::AliFMDMultCuts()
: TObject(),
- fMPVFraction(0),
- fNXi(0),
- fIncludeSigma(false),
- fProbability(0)
+ fMethod(kFixed)
{
Reset();
}
Double_t cut4,
Double_t cut5)
: TObject(),
- fMPVFraction(0),
- fNXi(0),
- fIncludeSigma(false),
- fProbability(0)
+ fMethod(method)
{
Set(method, cut1, cut2, cut3, cut4, cut5);
}
//____________________________________________________________________
AliFMDMultCuts::AliFMDMultCuts(const AliFMDMultCuts& o)
: TObject(o),
- fMPVFraction(o.fMPVFraction),
- fNXi(o.fNXi),
- fIncludeSigma(o.fIncludeSigma),
- fProbability(o.fProbability)
+ fMethod(o.fMethod)
{
- for (Int_t i = 0; i < 5; i++) fMultCuts[i] = o.fMultCuts[i];
+ for (Int_t i = 0; i < 5; i++) fCuts[i] = o.fCuts[i];
}
//____________________________________________________________________
AliFMDMultCuts&
AliFMDMultCuts::operator=(const AliFMDMultCuts& o)
{
if (&o == this) return *this;
- fMPVFraction = o.fMPVFraction;
- fNXi = o.fNXi;
- fIncludeSigma = o.fIncludeSigma;
- fProbability = o.fProbability;
- for (Int_t i = 0; i < 5; i++) fMultCuts[i] = o.fMultCuts[i];
+ fMethod = o.fMethod;
+ for (Int_t i = 0; i < 5; i++) fCuts[i] = o.fCuts[i];
return *this;
}
//____________________________________________________________________
void
AliFMDMultCuts::Reset()
{
- for (Int_t i = 0; i < 5; i++) fMultCuts[i] = -1;
- fMPVFraction = -1;
- fNXi = -1;
- fIncludeSigma = false;
- fProbability = -1;
+ fMethod = kFixed;
+ for (Int_t i = 0; i < 5; i++) fCuts[i] = -1;
}
//____________________________________________________________________
void
AliFMDMultCuts::Set(EMethod method,
- Double_t cut1,
- Double_t cut2,
- Double_t cut3,
- Double_t cut4,
- Double_t cut5)
+ Double_t fmd1i,
+ Double_t fmd2i,
+ Double_t fmd2o,
+ Double_t fmd3i,
+ Double_t fmd3o)
{
// First, reset
Reset();
+ fMethod = method;
+ Double_t oFac = 1;
+ if (fMethod == kFixed) oFac = 1.2;
+ else if (fMethod == kMPVFraction) oFac = 1.1;
+ fCuts[0] = fmd1i;
+ fCuts[1] = fmd2i >= 0 ? fmd2i : fmd1i;
+ fCuts[2] = fmd2o >= 0 ? fmd2o : fmd1i * oFac;
+ fCuts[3] = fmd3i >= 0 ? fmd3i : fmd1i;
+ fCuts[4] = fmd3o >= 0 ? fmd3o : fmd1i * oFac;
+}
+//____________________________________________________________________
+void
+AliFMDMultCuts::DepSet(const char* what,
+ EMethod method,
+ Double_t fmd1i,
+ Double_t fmd2i,
+ Double_t fmd2o,
+ Double_t fmd3i,
+ Double_t fmd3o)
+{
+ Warning(what, "*** DEPRECATED - use AliFMDMultCuts::Set instead ***");
+ Set(method, fmd1i, fmd2i, fmd2o, fmd3i, fmd3o);
+}
- // Then switch on method
- switch(method) {
- case kFixed:
- if (cut2 < 0) SetMultCuts(cut1, cut1, cut1*1.2, cut1*1.2, cut1);
- else SetMultCuts(cut1, cut2, cut3, cut4, cut5);
- break;
- case kMPVFraction:
- SetMPVFraction(cut1);
- break;
- case kFitRange:
- break;
- case kLandauWidth:
- SetNXi(cut1);
- SetIncludeSigma(cut2 > 0);
- break;
- case kProbability:
- SetProbability(cut1);
- break;
+//____________________________________________________________________
+void
+AliFMDMultCuts::SetIncludeSigma(Bool_t in)
+{
+ Warning("SetIncludeSigma",
+ "*** DEPRECATED - use AliFMDMultCuts::Set instead ***");
+ if (in) {
+ if (fMethod == kLandauWidth) fMethod = kLandauSigmaWidth;
+ }
+ else {
+ if (fMethod == kLandauSigmaWidth) fMethod = kLandauWidth;
}
}
-
//____________________________________________________________________
Double_t
-AliFMDMultCuts::GetFixedCut(UShort_t d, Char_t r) const
+AliFMDMultCuts::GetCutParam(UShort_t d, Char_t r) const
{
// Int_t idx = (d == 1 ? 0 : 2*(d - 2) + 1 + ((r=='I' || r=='i') ? 0 : 1));
Int_t idx = -1;
case 2: idx = 1 + ((r == 'I' || r == 'i') ? 0 : 1); break;
case 3: idx = 3 + ((r == 'I' || r == 'i') ? 0 : 1); break;
}
- if (idx < 0) return -1024;
- return fMultCuts[idx];
-}
-
-//____________________________________________________________________
-void
-AliFMDMultCuts::SetMultCuts(Double_t fmd1i,
- Double_t fmd2i,
- Double_t fmd2o,
- Double_t fmd3i,
- Double_t fmd3o)
-{
- fMultCuts[0] = fmd1i;
- fMultCuts[1] = fmd2i >= 0 ? fmd2i : fmd1i;
- fMultCuts[2] = fmd2o >= 0 ? fmd2o : fmd1i;
- fMultCuts[3] = fmd3i >= 0 ? fmd3i : fmd1i;
- fMultCuts[4] = fmd3o >= 0 ? fmd3o : fmd1i;
+ if (idx < 0) return -kBad;
+ return fCuts[idx];
}
-
//____________________________________________________________________
Double_t
// Return:
// Lower cut on multiplicity
//
- UShort_t meth = GetMethod();
DGUARD(fDebug, 5, "Get mult cut for FMD%d%c (method %d) @ etabin=%d",
- d, r, meth, ieta);
- Double_t rcut = -1024;
- if (meth == kFixed) rcut = GetFixedCut(d, r);
+ d, r, fMethod, ieta);
+ Double_t param = GetCutParam(d, r);
+ if (param < 0) {
+ Warning("GetMultCut", "Got bad cut parameter for FMD%d%c ieta=%d",
+ d, r, ieta);
+ return -kBad;
+ }
+
+ // If we're using a fixed cut, just return
+ if (fMethod == kFixed) {
+ DMSG(fDebug, 5, "-> %8.4f", param);
+ return param;
+ }
- if (rcut < 0) {
- // Get the energy loss fits
- AliForwardCorrectionManager& fcm =
- AliForwardCorrectionManager::Instance();
- const AliFMDCorrELossFit* fits = fcm.GetELossFit();
- if (fits) {
- switch (meth) {
- case kMPVFraction:
- // Return fMPVFraction * mpv
- rcut = fits->GetLowerBound(d, r, ieta, fMPVFraction); break;
- case kLandauWidth:
- // Return MPV - fNXi * xi
- rcut = fits->GetLowerBound(d, r, ieta, fNXi, errors,fIncludeSigma);
- break;
- case kProbability:
- // Return probability cut
- rcut = fits->GetLowerBound(d, r, ieta, fProbability, true); break;
- default:
- // Return lower fit boundary
- rcut = fits->GetLowCut(); break;
- }
+ // Bad value
+ Double_t rcut = -kBad;
+
+ // Get the energy loss fits
+ AliForwardCorrectionManager& fcm =
+ AliForwardCorrectionManager::Instance();
+ const AliFMDCorrELossFit* fits = fcm.GetELossFit();
+ if (fits) {
+ switch (fMethod) {
+ case kMPVFraction:
+ // Return fMPVFraction * mpv
+ rcut = fits->GetLowerBound(d, r, ieta, param); break;
+ case kLandauWidth:
+ // Return MPV - fNXi * xi
+ rcut = fits->GetLowerBound(d, r, ieta, param, errors,false);
+ break;
+ case kLandauSigmaWidth:
+ // Return MPV - fNXi * xi
+ rcut = fits->GetLowerBound(d, r, ieta, param, errors,true);
+ break;
+ case kProbability:
+ // Return probability cut
+ rcut = fits->GetLowerBound(d, r, ieta, param, true); break;
+ default:
+ // Return lower fit boundary
+ rcut = fits->GetLowCut(); break;
}
- else
- Warning("GetMultCut", "No energy loss fits obtained from manager");
}
+ else
+ Warning("GetMultCut", "No energy loss fits obtained from manager");
+
DMSG(fDebug, 5, "-> %8.4f", rcut);
return rcut;
return GetMultCut(d, r, iEta, errors);
}
//____________________________________________________________________
-UShort_t
-AliFMDMultCuts::GetMethod() const
+const char*
+AliFMDMultCuts::GetMethodString(Bool_t latex) const
{
- return (fMultCuts[0] >= 0 ? kFixed : // Fixed
- fMPVFraction > 0 ? kMPVFraction : // Fraction MPV
- fNXi > 0 ? kLandauWidth : // Width
- fProbability > 0 ? kProbability :
- kFitRange); // Fit range
+ return Method2String(fMethod, latex);
}
+
//____________________________________________________________________
const char*
-AliFMDMultCuts::GetMethodString() const
+AliFMDMultCuts::Method2String(EMethod method, Bool_t latex)
{
- switch (GetMethod()) {
- case kFixed: return "fixed value";
- case kMPVFraction: return "fraction of MPV";
- case kFitRange: return "fit range";
- case kLandauWidth: return "landau width";
- case kProbability: return "probability";
+ switch (method) {
+ case kFixed:
+ return latex ? "c=X" : "fixed value";
+ case kMPVFraction:
+ return latex ? "c=X#times#Delta_{p}":"fraction of MPV";
+ case kFitRange:
+ return latex ? "range" : "c: lower fit bound";
+ case kLandauWidth:
+ return latex ? "c=#Delta_{p}-X#times#xi" : "landau width";
+ case kLandauSigmaWidth:
+ return latex ? "c=#Delta_{p}-X#times(#xi+#sigma)" : "landau+sigma width";
+ case kProbability:
+ return latex ? "c:P(#Delta<c)<X" : "probability";
}
- return "unknown";
+ return latex ? "c:?" : "unknown";
+}
+//____________________________________________________________________
+AliFMDMultCuts::EMethod
+AliFMDMultCuts::String2Method(const char* str)
+{
+ TString m(str);
+ if (m.EqualTo("fixed value") || m.Contains("fix"))
+ return kFixed;
+ else if (m.EqualTo("fraction of mpv") || m.Contains("mpv"))
+ return kMPVFraction;
+ else if (m.EqualTo("fit range") || m.Contains("fit"))
+ return kFitRange;
+ else if (m.EqualTo("landau width") || m.Contains("xi") ||
+ m.Contains("width")) return kLandauWidth;
+ else if (m.EqualTo("landau+sigma width") || m.Contains("sig"))
+ return kLandauSigmaWidth;
+ else if (m.EqualTo("probability") || m.Contains("prob"))
+ return kProbability;
+ return kFixed;
}
//____________________________________________________________________
AliFMDMultCuts::FillHistogram(TH2* h) const
{
DGUARD(fDebug, 5, "Fill Histogram %s with cuts", h->GetName());
- AliInfoF("Caching multiplicity cuts (%s)", h->GetName());
+ // AliInfoF("Caching multiplicity cuts (%s)", h->GetName());
TAxis* yAxis = h->GetYaxis();
for (Int_t iy = 1; iy <= yAxis->GetNbins(); iy++) {
TString lab(yAxis->GetBinLabel(iy));
UShort_t det = lab.Atoi();
Char_t rng = lab[1];
// Printf("Filling for FMD%d%c (bin # %d) %s", det, rng, iy, lab.Data());
- AliInfoF("FMD%d%c", det, rng);
+ DMSG(fDebug, 5, "FMD%d%c", det, rng);
+ // AliInfoF("FMD%d%c", det, rng);
for (Int_t ix = 1; ix <= h->GetNbinsX(); ix++) {
Double_t eta = h->GetXaxis()->GetBinCenter(ix);
Double_t c = GetMultCut(det, rng, eta, false);
- DMSG(fDebug, 5, "FMD%s bin=%4d -> eta=%8.4f -> %8.4f",
+ DMSG(fDebug, 10, "FMD%s bin=%4d -> eta=%8.4f -> %8.4f",
lab.Data(), ix, eta, c);
// Double_t c = GetMultCut(det, rng, ix, false);
if (c > 0) h->SetBinContent(ix, iy, c);
}
- ll->Add(AliForwardUtil::MakeParameter("nXi", fNXi));
- ll->Add(AliForwardUtil::MakeParameter("frac", fMPVFraction));
- ll->Add(AliForwardUtil::MakeParameter("sigma", fIncludeSigma));
- ll->Add(AliForwardUtil::MakeParameter("probability", fProbability));
- ll->Add(AliForwardUtil::MakeParameter("method", GetMethod()));
+ ll->Add(AliForwardUtil::MakeParameter("method", UShort_t(fMethod)));
+ ll->Add(AliForwardUtil::MakeParameter("fmd1i", fCuts[0]));
+ ll->Add(AliForwardUtil::MakeParameter("fmd2i", fCuts[1]));
+ ll->Add(AliForwardUtil::MakeParameter("fmd2o", fCuts[2]));
+ ll->Add(AliForwardUtil::MakeParameter("fmd3i", fCuts[3]));
+ ll->Add(AliForwardUtil::MakeParameter("fmd3o", fCuts[4]));
}
//____________________________________________________________________
Bool_t
}
if (!ll) return false;
- TObject* nXi = ll->FindObject("nXi");
- TObject* frac = ll->FindObject("frac");
- TObject* sigma = ll->FindObject("sigma");
- TObject* prob = ll->FindObject("probability");
- if (!nXi || !frac || !sigma) return false;
- AliForwardUtil::GetParameter(nXi, fNXi);
- AliForwardUtil::GetParameter(frac, fMPVFraction);
- AliForwardUtil::GetParameter(sigma, fIncludeSigma);
- AliForwardUtil::GetParameter(prob, fProbability);
+ TObject* meth = ll->FindObject("method");
+ TObject* fmd1i = ll->FindObject("fmd1i");
+ TObject* fmd2i = ll->FindObject("fmd2i");
+ TObject* fmd2o = ll->FindObject("fmd2o");
+ TObject* fmd3i = ll->FindObject("fmd3i");
+ TObject* fmd3o = ll->FindObject("fmd3o");
+
+ UShort_t methNum = 0;
+
+ AliForwardUtil::GetParameter(meth, methNum);
+ switch (methNum) {
+ case 0: fMethod = kFixed; break;
+ case 1: fMethod = kMPVFraction; break;
+ case 2: fMethod = kFitRange; break;
+ case 3: fMethod = kLandauWidth; break;
+ case 4: fMethod = kLandauSigmaWidth; break;
+ case 5: fMethod = kProbability; break;
+ }
+
+ AliForwardUtil::GetParameter(fmd1i, fCuts[0]);
+ AliForwardUtil::GetParameter(fmd2i, fCuts[1]);
+ AliForwardUtil::GetParameter(fmd2o, fCuts[2]);
+ AliForwardUtil::GetParameter(fmd3i, fCuts[3]);
+ AliForwardUtil::GetParameter(fmd3o, fCuts[4]);
return true;
}
{
gROOT->IncreaseDirLevel();
PFV("Method used", GetMethodString());
- PF("Fixed cuts","");
gROOT->IncreaseDirLevel();
- PFV("FMD1i", GetFixedCut(1,'I'));
- PFV("FMD2i", GetFixedCut(2,'I'));
- PFV("FMD2o", GetFixedCut(2,'O'));
- PFV("FMD3i", GetFixedCut(3,'I'));
- PFV("FMD3o", GetFixedCut(3,'O'));
+ PFV("FMD1i", GetCutParam(1,'I'));
+ PFV("FMD2i", GetCutParam(2,'I'));
+ PFV("FMD2o", GetCutParam(2,'O'));
+ PFV("FMD3i", GetCutParam(3,'I'));
+ PFV("FMD3o", GetCutParam(3,'O'));
gROOT->DecreaseDirLevel();
- PFV("N xi factor", fNXi);
- PFB("Include sigma in cut", fIncludeSigma);
- PFV("MPV fraction", fMPVFraction);
- PFV("Probability", fProbability);
gROOT->DecreaseDirLevel();
}
//____________________________________________________________________