ROOT logo
//
// Class AliRsnCutMomentumComparison
//
// General implementation of a single cut strategy, which can be:
// - a value contained in a given interval  [--> IsBetween()   ]
// - a value equal to a given reference     [--> MatchesValue()]
//
// In all cases, the reference value(s) is (are) given as data members
// and each kind of cut requires a given value type (Int, UInt, Double),
// but the cut check procedure is then automatized and chosen thanks to
// an enumeration of the implemented cut types.
// At the end, the user (or any other point which uses this object) has
// to use the method IsSelected() to check if this cut has been passed.
//
// authors: Martin Vala (martin.vala@cern.ch)
//          Alberto Pulvirenti (alberto.pulvirenti@ct.infn.it)
//
#include "TMath.h"

#include "AliRsnDaughter.h"
#include "AliRsnMother.h"
#include "AliRsnCutMomentumComparison.h"

ClassImp(AliRsnCutMomentumComparison)

//_________________________________________________________________________________________________
AliRsnCutMomentumComparison::AliRsnCutMomentumComparison(const char *name, EMode mode) :
   AliRsnCut(name, AliRsnCut::kMother),
   fMode(mode)
{
//
// Default constructor.
//
}

//_________________________________________________________________________________________________
AliRsnCutMomentumComparison::AliRsnCutMomentumComparison(const AliRsnCutMomentumComparison &copy) :
   AliRsnCut(copy),
   fMode(copy.fMode)
{
//
// Copy constructor
//
}

//_________________________________________________________________________________________________
AliRsnCutMomentumComparison &AliRsnCutMomentumComparison::operator=(const AliRsnCutMomentumComparison &copy)
{
//
// Assignment operator
//

   AliRsnCut::operator=(copy);
   if (this == &copy)
      return *this;
   fMode = copy.fMode;

   return (*this);
}

//_________________________________________________________________________________________________
Bool_t AliRsnCutMomentumComparison::IsSelected(TObject *object)
{
//
// Cut checker.
//

   // convert the object into the unique correct type
   if (!TargetOK(object)) return kFALSE;

   // compare momenta
   Double_t p1  = fMother->GetDaughter(0)->GetRef()->P();
   Double_t p2  = fMother->GetDaughter(1)->GetRef()->P();
   Double_t pt1 = fMother->GetDaughter(0)->GetRef()->Pt();
   Double_t pt2 = fMother->GetDaughter(1)->GetRef()->Pt();

   switch (fMode)
   {
      case kFirstLargerP  : return (p1 > p2);
      case kFirstSmallerP : return (p1 < p2);
      case kFirstLargerPt : return (pt1 > pt2);
      case kFirstSmallerPt: return (pt1 < pt2);
      default:
         AliError("Invalid mode selected. Cut is skipped");
         return kTRUE;
   }
}
 AliRsnCutMomentumComparison.cxx:1
 AliRsnCutMomentumComparison.cxx:2
 AliRsnCutMomentumComparison.cxx:3
 AliRsnCutMomentumComparison.cxx:4
 AliRsnCutMomentumComparison.cxx:5
 AliRsnCutMomentumComparison.cxx:6
 AliRsnCutMomentumComparison.cxx:7
 AliRsnCutMomentumComparison.cxx:8
 AliRsnCutMomentumComparison.cxx:9
 AliRsnCutMomentumComparison.cxx:10
 AliRsnCutMomentumComparison.cxx:11
 AliRsnCutMomentumComparison.cxx:12
 AliRsnCutMomentumComparison.cxx:13
 AliRsnCutMomentumComparison.cxx:14
 AliRsnCutMomentumComparison.cxx:15
 AliRsnCutMomentumComparison.cxx:16
 AliRsnCutMomentumComparison.cxx:17
 AliRsnCutMomentumComparison.cxx:18
 AliRsnCutMomentumComparison.cxx:19
 AliRsnCutMomentumComparison.cxx:20
 AliRsnCutMomentumComparison.cxx:21
 AliRsnCutMomentumComparison.cxx:22
 AliRsnCutMomentumComparison.cxx:23
 AliRsnCutMomentumComparison.cxx:24
 AliRsnCutMomentumComparison.cxx:25
 AliRsnCutMomentumComparison.cxx:26
 AliRsnCutMomentumComparison.cxx:27
 AliRsnCutMomentumComparison.cxx:28
 AliRsnCutMomentumComparison.cxx:29
 AliRsnCutMomentumComparison.cxx:30
 AliRsnCutMomentumComparison.cxx:31
 AliRsnCutMomentumComparison.cxx:32
 AliRsnCutMomentumComparison.cxx:33
 AliRsnCutMomentumComparison.cxx:34
 AliRsnCutMomentumComparison.cxx:35
 AliRsnCutMomentumComparison.cxx:36
 AliRsnCutMomentumComparison.cxx:37
 AliRsnCutMomentumComparison.cxx:38
 AliRsnCutMomentumComparison.cxx:39
 AliRsnCutMomentumComparison.cxx:40
 AliRsnCutMomentumComparison.cxx:41
 AliRsnCutMomentumComparison.cxx:42
 AliRsnCutMomentumComparison.cxx:43
 AliRsnCutMomentumComparison.cxx:44
 AliRsnCutMomentumComparison.cxx:45
 AliRsnCutMomentumComparison.cxx:46
 AliRsnCutMomentumComparison.cxx:47
 AliRsnCutMomentumComparison.cxx:48
 AliRsnCutMomentumComparison.cxx:49
 AliRsnCutMomentumComparison.cxx:50
 AliRsnCutMomentumComparison.cxx:51
 AliRsnCutMomentumComparison.cxx:52
 AliRsnCutMomentumComparison.cxx:53
 AliRsnCutMomentumComparison.cxx:54
 AliRsnCutMomentumComparison.cxx:55
 AliRsnCutMomentumComparison.cxx:56
 AliRsnCutMomentumComparison.cxx:57
 AliRsnCutMomentumComparison.cxx:58
 AliRsnCutMomentumComparison.cxx:59
 AliRsnCutMomentumComparison.cxx:60
 AliRsnCutMomentumComparison.cxx:61
 AliRsnCutMomentumComparison.cxx:62
 AliRsnCutMomentumComparison.cxx:63
 AliRsnCutMomentumComparison.cxx:64
 AliRsnCutMomentumComparison.cxx:65
 AliRsnCutMomentumComparison.cxx:66
 AliRsnCutMomentumComparison.cxx:67
 AliRsnCutMomentumComparison.cxx:68
 AliRsnCutMomentumComparison.cxx:69
 AliRsnCutMomentumComparison.cxx:70
 AliRsnCutMomentumComparison.cxx:71
 AliRsnCutMomentumComparison.cxx:72
 AliRsnCutMomentumComparison.cxx:73
 AliRsnCutMomentumComparison.cxx:74
 AliRsnCutMomentumComparison.cxx:75
 AliRsnCutMomentumComparison.cxx:76
 AliRsnCutMomentumComparison.cxx:77
 AliRsnCutMomentumComparison.cxx:78
 AliRsnCutMomentumComparison.cxx:79
 AliRsnCutMomentumComparison.cxx:80
 AliRsnCutMomentumComparison.cxx:81
 AliRsnCutMomentumComparison.cxx:82
 AliRsnCutMomentumComparison.cxx:83
 AliRsnCutMomentumComparison.cxx:84
 AliRsnCutMomentumComparison.cxx:85
 AliRsnCutMomentumComparison.cxx:86
 AliRsnCutMomentumComparison.cxx:87