ROOT logo
//
// Class AliRsnCutSet
//
// This is the front-end for cut management and checking.
// It must be prepared by adding all required single cuts,
// and then with a logical expression which combines all cuts
// with the "AND", "OR" and "NOT" operators.
//
// author: M. Vala (martin.vala@cern.ch)
//

#ifndef ALIRSNCUTSET_H
#define ALIRSNCUTSET_H

#include <TNamed.h>
#include <TObjArray.h>

#include "AliRsnTarget.h"
#include "AliRsnListOutput.h"

class AliRsnCut;
class AliRsnDaughter;
class AliRsnExpression;
class AliRsnPairParticle;
class AliRsnEvent;

class AliRsnCutSet : public AliRsnTarget {
public:

   AliRsnCutSet();
   AliRsnCutSet(const char *name, RSNTARGET target);
   AliRsnCutSet(const AliRsnCutSet &copy);
   AliRsnCutSet &operator=(const AliRsnCutSet &copy);
   ~AliRsnCutSet();

   void      AddCut(AliRsnCut *cut);
   Bool_t    Init(TList *list);

   void      ShowCuts() const;
   Int_t     GetIndexByCutName(TString s);
   Bool_t    Passed();
   Bool_t    IsValidScheme();
   TString   ShowCutScheme() const;
   Int_t     TestExpression(TString opt = "short");
   void      PrintSetInfo();

   Bool_t    IsSelected(TObject *object);

   void SetBoolValue(Bool_t theValue, Int_t index) { fBoolValues[index] = theValue; }
   Bool_t GetBoolValue(Int_t index) const { return fBoolValues[index]; }

   void SetCutScheme(const char *theValue);
   TString GetCutScheme() const { return fCutScheme; }

   void SetCutSchemeIndexed(TString theValue);
   TString   GetCutSchemeIndexed();

   TObjArray *GetCuts() { return &fCuts; }

   void AddMonitor(AliRsnListOutput *mon);
   TObjArray *GetMonitorOutput() { fUseMonitor = kTRUE; return &fMonitors; }

   void UseMonitor(Bool_t useMonitor=kTRUE) { fUseMonitor = useMonitor; }

private:

   TObjArray         fCuts;                  // array of cuts
   Int_t             fNumOfCuts;             // number of cuts
   TString           fCutScheme;             // cut scheme
   TString           fCutSchemeIndexed;      // cut scheme indexed

   Bool_t           *fBoolValues;            //[fNumOfCuts]
   Bool_t            fIsScheme;              // is scheme

   AliRsnExpression *fExpression;            // pointer to AliRsnExpression
   TObjArray         fMonitors;              // array of monitor object
   Bool_t            fUseMonitor;            // flag if monitoring should be used

   ClassDef(AliRsnCutSet, 3)   // ROOT dictionary
};

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