ROOT logo
//
// *** Class AliRsnCutManager ***
//
// This class is used both in normal analysis and efficiency computation
// as a collection of all cuts which could be needed in a single job.
// It allocates an AliRsnCutSet for each possible target:
//  - one with all cuts common to all tracks
//  - one with all cuts for first candidate daughter (definition #1 in pairDef)
//  - one with all cuts for second candidate daughter (definition #2 in pairDef)
//  - one with all cuts on the pair
// -----
// This object is used to define a step in efficiency CORRFW container
// and also is contained in all AliRsnPair objects to decide if two candidates
// can be accepted or not.
//
// authors: Martin Vala (martin.vala@cern.ch)
//          Alberto Pulvirenti (alberto.pulvirenti@cern.ch)
//

#ifndef ALIRSNCUTMANAGER_H
#define ALIRSNCUTMANAGER_H

#include <TNamed.h>

#include "AliRsnDaughter.h"
#include "AliRsnMother.h"
#include "AliRsnCutSet.h"

class AliRsnCut;

class AliRsnCutManager : public TNamed {
public:

   AliRsnCutManager();
   AliRsnCutManager(const char *name, const char *title = "");
   AliRsnCutManager(const AliRsnCutManager &cut);
   AliRsnCutManager &operator=(const AliRsnCutManager &cut);
   ~AliRsnCutManager();

   AliRsnCutSet  *GetCommonDaughterCuts() {return &fDaughterCutsCommon;}
   AliRsnCutSet  *GetDaughter1Cuts()      {return &fDaughterCuts1;}
   AliRsnCutSet  *GetDaughter2Cuts()      {return &fDaughterCuts2;}
   AliRsnCutSet  *GetMotherCuts()         {return &fMotherCuts;}

   Bool_t         IsSelected(TObject *object);
   Bool_t         PassCommonDaughterCuts(AliRsnDaughter *daughter) {return fDaughterCutsCommon.IsSelected(daughter);}
   Bool_t         PassDaughter1Cuts(AliRsnDaughter *daughter)      {return fDaughterCuts1.IsSelected(daughter);}
   Bool_t         PassDaughter2Cuts(AliRsnDaughter *daughter)      {return fDaughterCuts2.IsSelected(daughter);}
   Bool_t         PassMotherCuts(AliRsnMother *mother)             {return fMotherCuts.IsSelected(mother);}
   Bool_t         PassSpecificDaughterCuts(Bool_t first, AliRsnDaughter *daughter)
   {if (first) return PassDaughter1Cuts(daughter); else return PassDaughter2Cuts(daughter);}

private:

   AliRsnCutSet  fDaughterCutsCommon; // single-track cuts common to both daughters
   AliRsnCutSet  fDaughterCuts1;      // single-track cuts for only first daughter
   AliRsnCutSet  fDaughterCuts2;      // single-track cuts for only second daughter
   AliRsnCutSet  fMotherCuts;         // mother cuts (on relations between daughters)

   ClassDef(AliRsnCutManager, 2)      // dictionary
};

inline Bool_t AliRsnCutManager::IsSelected(TObject *object)
{
//
// Check all selection cuts
//

   if (object->InheritsFrom(AliRsnDaughter::Class())) {
      return PassCommonDaughterCuts((AliRsnDaughter *)object);
   } else if (object->InheritsFrom(AliRsnMother::Class())) {
      AliRsnMother *mother = (AliRsnMother *)object;
      if (!PassCommonDaughterCuts(mother->GetDaughter(0))) return kFALSE;
      if (!PassCommonDaughterCuts(mother->GetDaughter(1))) return kFALSE;
      if (!PassDaughter1Cuts(mother->GetDaughter(0))) return kFALSE;
      if (!PassDaughter2Cuts(mother->GetDaughter(1))) return kFALSE;
      if (!PassMotherCuts(mother)) return kFALSE;
      return kTRUE;
   } else {
      AliError("AliRsnCutManager can check only daughters and mothers");
      return kFALSE;
   }
}

#endif
 AliRsnCutManager.h:1
 AliRsnCutManager.h:2
 AliRsnCutManager.h:3
 AliRsnCutManager.h:4
 AliRsnCutManager.h:5
 AliRsnCutManager.h:6
 AliRsnCutManager.h:7
 AliRsnCutManager.h:8
 AliRsnCutManager.h:9
 AliRsnCutManager.h:10
 AliRsnCutManager.h:11
 AliRsnCutManager.h:12
 AliRsnCutManager.h:13
 AliRsnCutManager.h:14
 AliRsnCutManager.h:15
 AliRsnCutManager.h:16
 AliRsnCutManager.h:17
 AliRsnCutManager.h:18
 AliRsnCutManager.h:19
 AliRsnCutManager.h:20
 AliRsnCutManager.h:21
 AliRsnCutManager.h:22
 AliRsnCutManager.h:23
 AliRsnCutManager.h:24
 AliRsnCutManager.h:25
 AliRsnCutManager.h:26
 AliRsnCutManager.h:27
 AliRsnCutManager.h:28
 AliRsnCutManager.h:29
 AliRsnCutManager.h:30
 AliRsnCutManager.h:31
 AliRsnCutManager.h:32
 AliRsnCutManager.h:33
 AliRsnCutManager.h:34
 AliRsnCutManager.h:35
 AliRsnCutManager.h:36
 AliRsnCutManager.h:37
 AliRsnCutManager.h:38
 AliRsnCutManager.h:39
 AliRsnCutManager.h:40
 AliRsnCutManager.h:41
 AliRsnCutManager.h:42
 AliRsnCutManager.h:43
 AliRsnCutManager.h:44
 AliRsnCutManager.h:45
 AliRsnCutManager.h:46
 AliRsnCutManager.h:47
 AliRsnCutManager.h:48
 AliRsnCutManager.h:49
 AliRsnCutManager.h:50
 AliRsnCutManager.h:51
 AliRsnCutManager.h:52
 AliRsnCutManager.h:53
 AliRsnCutManager.h:54
 AliRsnCutManager.h:55
 AliRsnCutManager.h:56
 AliRsnCutManager.h:57
 AliRsnCutManager.h:58
 AliRsnCutManager.h:59
 AliRsnCutManager.h:60
 AliRsnCutManager.h:61
 AliRsnCutManager.h:62
 AliRsnCutManager.h:63
 AliRsnCutManager.h:64
 AliRsnCutManager.h:65
 AliRsnCutManager.h:66
 AliRsnCutManager.h:67
 AliRsnCutManager.h:68
 AliRsnCutManager.h:69
 AliRsnCutManager.h:70
 AliRsnCutManager.h:71
 AliRsnCutManager.h:72
 AliRsnCutManager.h:73
 AliRsnCutManager.h:74
 AliRsnCutManager.h:75
 AliRsnCutManager.h:76
 AliRsnCutManager.h:77
 AliRsnCutManager.h:78
 AliRsnCutManager.h:79
 AliRsnCutManager.h:80
 AliRsnCutManager.h:81
 AliRsnCutManager.h:82
 AliRsnCutManager.h:83
 AliRsnCutManager.h:84
 AliRsnCutManager.h:85