// Martin Vala (martin.vala@cern.ch)
//
+#include <TFormula.h>
#include "AliRsnCut.h"
ClassImp(AliRsnCut)
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)
{
//
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)
{
//
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)
{
//
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)
{
//
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* /*object*/)
+Bool_t AliRsnCut::IsSelected(TObject * /*object*/)
{
//
// Virtual cut-checking method.
//
// eval result
- fCutResult = (fCutValueI == fMinI);
+
+ 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);
// print debug message
AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
//
// eval result
- fCutResult = (TMath::Abs(fCutValueD - fMinD) < 1E-6);
+
+ 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);
// print debug message
AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG =======================================================");
// This method is used to compare a value with an integer range.
//
- // eval result
- fCutResult = ((fCutValueI >= fMinI) && (fCutValueI <= fMaxI));
+ // eval result
+ 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));
// print debug message
AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
// This method is used to compare a value with a double-float range.
//
- // eval result
- fCutResult = ((fCutValueD >= fMinD) && (fCutValueD <= fMaxD));
+ // eval result
+
+ 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));
// print debug message
AliDebug(AliLog::kDebug + 2, "=== CUT DEBUG ========================================================");
return fCutResult;
}
+
//______________________________________________________________________________
void AliRsnCut::Print(Option_t *) const
{
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("====================================================");
}