#include <TFormula.h>
#include "AliRsnCut.h"
ClassImp(AliRsnCut)
AliRsnCut::AliRsnCut(const char *name, RSNTARGET target) :
AliRsnTarget(name, target),
fMinI(0),
fMaxI(0),
fMinD(0.),
fMaxD(0.),
fMinIptdep(0),
fMaxIptdep(0),
fMinDptdep(0),
fMaxDptdep(0),
fCutValueI(0),
fCutValueD(0.0),
fPtDepCut(kFALSE),
fRefPtValueD(0.0),
fMaxPt(1E20),
fMinPt(0.0),
fPtDepCutMaxFormula(""),
fPtDepCutMinFormula(""),
fCutResult(kTRUE)
{
}
AliRsnCut::AliRsnCut
(const char *name, RSNTARGET target, Int_t imin, Int_t imax, Double_t dmin, Double_t dmax) :
AliRsnTarget(name, target),
fMinI(imin),
fMaxI(imax),
fMinD(dmin),
fMaxD(dmax),
fMinIptdep(0),
fMaxIptdep(0),
fMinDptdep(0),
fMaxDptdep(0),
fCutValueI(0),
fCutValueD(0.0),
fPtDepCut(kFALSE),
fRefPtValueD(0.0),
fMaxPt(1E20),
fMinPt(0.0),
fPtDepCutMaxFormula(""),
fPtDepCutMinFormula(""),
fCutResult(kTRUE)
{
}
AliRsnCut::AliRsnCut
(const char *name, RSNTARGET target, Double_t dmin, Double_t dmax, Int_t imin, Int_t imax) :
AliRsnTarget(name, target),
fMinI(imin),
fMaxI(imax),
fMinD(dmin),
fMaxD(dmax),
fMinIptdep(0),
fMaxIptdep(0),
fMinDptdep(0),
fMaxDptdep(0),
fCutValueI(0),
fCutValueD(0.0),
fPtDepCut(kFALSE),
fRefPtValueD(0.0),
fMaxPt(1E20),
fMinPt(0.0),
fPtDepCutMaxFormula(""),
fPtDepCutMinFormula(""),
fCutResult(kTRUE)
{
}
AliRsnCut::AliRsnCut(const AliRsnCut ©) :
AliRsnTarget(copy),
fMinI(copy.fMinI),
fMaxI(copy.fMaxI),
fMinD(copy.fMinD),
fMaxD(copy.fMaxD),
fMinIptdep(copy.fMinIptdep),
fMaxIptdep(copy.fMaxIptdep),
fMinDptdep(copy.fMinDptdep),
fMaxDptdep(copy.fMaxDptdep),
fCutValueI(copy.fCutValueI),
fCutValueD(copy.fCutValueD),
fPtDepCut(copy.fPtDepCut),
fRefPtValueD(copy.fRefPtValueD),
fMaxPt(copy.fMaxPt),
fMinPt(copy.fMinPt),
fPtDepCutMaxFormula(copy.fPtDepCutMaxFormula),
fPtDepCutMinFormula(copy.fPtDepCutMinFormula),
fCutResult(copy.fCutResult)
{
}
AliRsnCut &AliRsnCut::operator=(const AliRsnCut ©)
{
AliRsnTarget::operator=(copy);
if (this == ©)
return *this;
fMinI = copy.fMinI;
fMaxI = copy.fMaxI;
fMinD = copy.fMinD;
fMaxD = copy.fMaxD;
fMinIptdep = copy.fMinIptdep;
fMaxIptdep = copy.fMaxIptdep;
fMinDptdep = copy.fMinDptdep;
fMaxDptdep = copy.fMaxDptdep;
fCutValueI = copy.fCutValueI;
fCutValueD = copy.fCutValueD;
fPtDepCut = copy.fPtDepCut;
fRefPtValueD = copy.fRefPtValueD;
fMaxPt = copy.fMaxPt;
fMinPt = copy.fMinPt;
fPtDepCutMaxFormula = copy.fPtDepCutMaxFormula;
fPtDepCutMinFormula = copy.fPtDepCutMinFormula;
fCutResult = copy.fCutResult;
return (*this);
}
Bool_t AliRsnCut::IsSelected(TObject * )
{
AliWarning("This virtual function must be implemented properly");
return kTRUE;
}
Bool_t AliRsnCut::OkValueI()
{
if (fPtDepCut){
if(fRefPtValueD > fMaxPt) {
AliDebug(2,Form("pt = %f (> %f), cutting at %d\n",fRefPtValueD, fMaxPt, fMinI));
fCutResult = (fCutValueI == fMinI);
} else if (fRefPtValueD < fMinPt){
AliDebug(2,Form("pt = %f (< %f), cutting at %d\n",fRefPtValueD, fMinPt, fMinI));
fCutResult = (fCutValueI == fMinI);
}else{
TString str(fPtDepCutMinFormula);
str.ReplaceAll("pt", "x");
TFormula ptdepcut(Form("%s_ptdepcut", GetName()), str.Data());
fMinIptdep = static_cast<int> (ptdepcut.Eval(fRefPtValueD));
AliDebug(2,Form("pt = %f (> %f and < %f), cutting at %d\n",fRefPtValueD, fMinPt, fMaxPt, fMinIptdep));
fCutResult = (fCutValueI == fMinIptdep);
}
}
else fCutResult = (fCutValueI == fMinI);
AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
AliDebug(AliLog::kDebug + 2, Form("Cut name : %s", GetName()));
AliDebug(AliLog::kDebug + 2, Form("Checked value: %d", fCutValueI));
AliDebug(AliLog::kDebug + 2, Form("Cut value : %d", fMinI));
AliDebug(AliLog::kDebug + 2, Form("Cut result : %s", (fCutResult ? "PASSED" : "NOT PASSED")));
AliDebug(AliLog::kDebug + 2, "=== END CUT DEBUG ====================================================");
return fCutResult;
}
Bool_t AliRsnCut::OkValueD()
{
if (fPtDepCut){
if(fRefPtValueD > fMaxPt) {
AliDebug(2,Form("pt = %f (> %f), cutting at %f\n",fRefPtValueD, fMaxPt, fMinD));
fCutResult = (TMath::Abs(fCutValueD - fMinD) < 1E-6);
} else if (fRefPtValueD < fMinPt){
AliDebug(2,Form("pt = %f (< %f), cutting at %f\n",fRefPtValueD, fMinPt, fMinD));
fCutResult = (TMath::Abs(fCutValueD - fMinD) < 1E-6);
}else{
TString str(fPtDepCutMinFormula);
str.ReplaceAll("pt", "x");
TFormula ptdepcut(Form("%s_ptdepcut", GetName()), str.Data());
fMinDptdep = ptdepcut.Eval(fRefPtValueD);
AliDebug(2,Form("pt = %f (> %f and < %f), cutting at %f\n",fRefPtValueD, fMinPt, fMaxPt, fMinDptdep));
fCutResult = (TMath::Abs(fCutValueD - fMinDptdep) < 1E-6);
}
}
else fCutResult = (TMath::Abs(fCutValueD - fMinD) < 1E-6);
AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG =======================================================");
AliDebug(AliLog::kDebug + 2, Form("Cut name : %s", GetName()));
AliDebug(AliLog::kDebug + 2, Form("Checked value: %f", fCutValueD));
AliDebug(AliLog::kDebug + 2, Form("Cut value : %f", fMinD));
AliDebug(AliLog::kDebug + 2, Form("Cut result : %s", (fCutResult ? "PASSED" : "NOT PASSED")));
AliDebug(AliLog::kDebug + 2, "=== END CUT DEBUG ===================================================");
return fCutResult;
}
Bool_t AliRsnCut::OkRangeI()
{
if (fPtDepCut){
if(fRefPtValueD > fMaxPt) {
AliDebug(2,Form("pt = %f (> %f), cutting between [%d, %d]\n",fRefPtValueD, fMaxPt, fMinI, fMaxI));
fCutResult = ((fCutValueI >= fMinI) && (fCutValueD <= fMaxI));
} else if (fRefPtValueD < fMinPt){
AliDebug(2,Form("pt = %f (< %f), cutting between [%d, %d]\n",fRefPtValueD, fMinPt, fMinI, fMaxI));
fCutResult = ((fCutValueI >= fMinI) && (fCutValueD <= fMaxI));
} else {
TString str(fPtDepCutMinFormula);
str.ReplaceAll("pt", "x");
TFormula ptdepcut(Form("%s_ptdepcut", GetName()), str.Data());
fMinIptdep = static_cast<int> (ptdepcut.Eval(fRefPtValueD));
TString str2(fPtDepCutMaxFormula);
str2.ReplaceAll("pt", "x");
TFormula ptdepcut2(Form("%s_ptdepcut", GetName()), str2.Data());
fMaxIptdep = static_cast<int> (ptdepcut2.Eval(fRefPtValueD));
AliDebug(2,Form("pt = %f (> %f and < %f), cutting according to the fiducial zone [%d, %d]\n",fRefPtValueD, fMinPt, fMaxPt, fMinIptdep, fMaxIptdep));
fCutResult = ((fCutValueI >= fMinIptdep) && (fCutValueI <= fMaxIptdep));
}
}
else fCutResult = ((fCutValueI >= fMinI) && (fCutValueI <= fMaxI));
AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
AliDebug(AliLog::kDebug + 2, Form("Cut name : %s", GetName()));
AliDebug(AliLog::kDebug + 2, Form("Checked value: %d", fCutValueI));
AliDebug(AliLog::kDebug + 2, Form("Cut range : %d , %d", fMinI, fMaxI));
AliDebug(AliLog::kDebug + 2, Form("Cut result : %s", (fCutResult ? "PASSED" : "NOT PASSED")));
AliDebug(AliLog::kDebug + 2, "=== END CUT DEBUG ====================================================");
return fCutResult;
}
Bool_t AliRsnCut::OkRangeD()
{
if (fPtDepCut){
if(fRefPtValueD > fMaxPt) {
AliDebug(2,Form("pt = %f (> %f), cutting between [%f, %f]\n",fRefPtValueD, fMaxPt, fMinD, fMaxD));
fCutResult = ((fCutValueD >= fMinD) && (fCutValueD <= fMaxD));
} else if (fRefPtValueD < fMinPt) {
AliDebug(2,Form("pt = %f (< %f), cutting between [%f, %f]\n",fRefPtValueD, fMinPt, fMinD, fMaxD));
fCutResult = ((fCutValueD >= fMinD) && (fCutValueD <= fMaxD));
} else {
TString str(fPtDepCutMinFormula);
str.ReplaceAll("pt", "x");
TFormula ptdepcut(Form("%s_ptdepcut", GetName()), str.Data());
fMinDptdep = ptdepcut.Eval(fRefPtValueD);
TString str2(fPtDepCutMaxFormula);
str2.ReplaceAll("pt", "x");
TFormula ptdepcut2(Form("%s_ptdepcut", GetName()), str2.Data());
fMaxDptdep = ptdepcut2.Eval(fRefPtValueD);
AliDebug(2,Form("pt = %f (> %f and < %f), cutting according to the fiducial zone [%f, %f]\n",fRefPtValueD, fMinPt, fMaxPt, fMinDptdep, fMaxDptdep));
fCutResult = ((fCutValueD >= fMinDptdep) && (fCutValueD <= fMaxDptdep));
}
}
else fCutResult = ((fCutValueD >= fMinD) && (fCutValueD <= fMaxD));
AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
AliDebug(AliLog::kDebug + 2, Form("Cut name : %s", GetName()));
AliDebug(AliLog::kDebug + 2, Form("Checked value: %f", fCutValueD));
AliDebug(AliLog::kDebug + 2, Form("Cut range : %f , %f", fMinD, fMaxD));
AliDebug(AliLog::kDebug + 2, Form("Cut result : %s", (fCutResult ? "PASSED" : "NOT PASSED")));
AliDebug(AliLog::kDebug + 2, "=== END CUT DEBUG ====================================================");
return fCutResult;
}
void AliRsnCut::Print(Option_t *) const
{
AliInfo("=== CUT DETAILS ====================================");
AliInfo(Form("Cut name : [%s]", GetName()));
AliInfo(Form("Cut target : [%s]", GetTargetTypeName()));
AliInfo(Form("Cut edges [D]: [%f - %f]", fMinD, fMaxD));
AliInfo(Form("Cut edges [I]: [%d - %d]", fMinI, fMaxI));
AliInfo(Form("Cut pt dependent: %s", (fPtDepCut ? "YES" : "NO")));
AliInfo("====================================================");
}