]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGLF/RESONANCES/AliRsnCut.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / AliRsnCut.cxx
index 464e092b13acfc1c761394ffdc15f9e583c65d60..0ee6d3af161c28ade1957270aa62df39673ab41c 100644 (file)
@@ -13,6 +13,7 @@
 //          Martin Vala (martin.vala@cern.ch)
 //
 
+#include <TFormula.h>
 #include "AliRsnCut.h"
 
 ClassImp(AliRsnCut)
@@ -24,8 +25,18 @@ AliRsnCut::AliRsnCut(const char *name, RSNTARGET target) :
    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)
 {
 //
@@ -41,8 +52,18 @@ AliRsnCut::AliRsnCut
    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)
 {
 //
@@ -59,8 +80,18 @@ AliRsnCut::AliRsnCut
    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)
 {
 //
@@ -76,8 +107,18 @@ AliRsnCut::AliRsnCut(const AliRsnCut &copy) :
    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)
 {
 //
@@ -102,15 +143,25 @@ AliRsnCut &AliRsnCut::operator=(const AliRsnCut &copy)
    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.
@@ -132,7 +183,24 @@ Bool_t AliRsnCut::OkValueI()
 //
 
    // 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 ========================================================");
@@ -154,7 +222,24 @@ Bool_t AliRsnCut::OkValueD()
 //
 
    // 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 =======================================================");
@@ -174,8 +259,30 @@ Bool_t AliRsnCut::OkRangeI()
 // 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 ========================================================");
@@ -195,8 +302,31 @@ Bool_t AliRsnCut::OkRangeD()
 // 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 ========================================================");
@@ -209,6 +339,7 @@ Bool_t AliRsnCut::OkRangeD()
    return fCutResult;
 }
 
+
 //______________________________________________________________________________
 void AliRsnCut::Print(Option_t *) const
 {
@@ -222,5 +353,6 @@ 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("====================================================");
 }