ROOT logo
#ifndef ALIANALYSISMUMUCUTREGISTRY_H
#define ALIANALYSISMUMUCUTREGISTRY_H

/**
 *
 * \class AliAnalysisMuMuCutRegistry
 *
 * \brief Container of AliAnalysisMuMuCutElement and AliAnalysisMuMuCutCombination objects.
 *
 * \author L. Aphecetche (Subatech)
 *
 */

#include "TObject.h"
#include "TString.h"
#include "TMethodCall.h"
#include "AliAnalysisMuMuCutElement.h"

class AliVEvent;
class AliAnalysisMuMuCutElementBar;
class AliAnalysisMuMuCutCombination;
class AliVParticle;
class AliVEventHandler;

class AliAnalysisMuMuCutRegistry : public TObject
{
public:
  AliAnalysisMuMuCutRegistry();
  virtual ~AliAnalysisMuMuCutRegistry();

  AliAnalysisMuMuCutElement* AddEventCut(TObject& cutClass,
                                           const char* cutMethodName,
                                           const char* cutMethodPrototype,
                                           const char* defaultParameters);

  AliAnalysisMuMuCutElement* AddTrackCut(TObject& cutClass,
                                           const char* cutMethodName,
                                           const char* cutMethodPrototype,
                                           const char* defaultParameters);

  AliAnalysisMuMuCutElement* AddTrackPairCut(TObject& cutClass,
                                             const char* cutMethodName,
                                             const char* cutMethodPrototype,
                                             const char* defaultParameters);

  AliAnalysisMuMuCutElement* AddTriggerClassCut(TObject& cutClass,
                                                const char* cutMethodName,
                                                const char* cutMethodPrototype,
                                                const char* defaultParameters);
  
  AliAnalysisMuMuCutElement* Not(const AliAnalysisMuMuCutElement& cutElement);

  AliAnalysisMuMuCutElement* AddCutElement(AliAnalysisMuMuCutElement* ce);

  Int_t AddCutCombination(const TObjArray& cutElements);
  
  Int_t AddCutCombination(AliAnalysisMuMuCutElement* ce1);
  Int_t AddCutCombination(AliAnalysisMuMuCutElement* ce1, AliAnalysisMuMuCutElement* ce2);
  Int_t AddCutCombination(AliAnalysisMuMuCutElement* ce1, AliAnalysisMuMuCutElement* ce2, AliAnalysisMuMuCutElement* ce3);
  Int_t AddCutCombination(AliAnalysisMuMuCutElement* ce1, AliAnalysisMuMuCutElement* ce2, AliAnalysisMuMuCutElement* ce3,
                          AliAnalysisMuMuCutElement* ce4);
  Int_t AddCutCombination(AliAnalysisMuMuCutElement* ce1, AliAnalysisMuMuCutElement* ce2, AliAnalysisMuMuCutElement* ce3,
                          AliAnalysisMuMuCutElement* ce4, AliAnalysisMuMuCutElement* ce5);
  Int_t AddCutCombination(AliAnalysisMuMuCutElement* ce1, AliAnalysisMuMuCutElement* ce2, AliAnalysisMuMuCutElement* ce3,
                          AliAnalysisMuMuCutElement* ce4, AliAnalysisMuMuCutElement* ce5, AliAnalysisMuMuCutElement* ce6);

  /// Get cut combinations of a given type
  const TObjArray* GetCutCombinations(AliAnalysisMuMuCutElement::ECutType type) const;
  TObjArray* GetCutCombinations(AliAnalysisMuMuCutElement::ECutType type);

  /// Get cut elements of a given type
  const TObjArray* GetCutElements(AliAnalysisMuMuCutElement::ECutType type) const;
  TObjArray* GetCutElements(AliAnalysisMuMuCutElement::ECutType type);

  virtual void Print(Option_t* opt="") const;
  
  Bool_t AlwaysTrue(const AliVEvent& /*event*/) const { return kTRUE; }
  void NameOfAlwaysTrue(TString& name) const { name="ALL"; }
  Bool_t AlwaysTrue(const AliVEventHandler& /*eventHandler*/) const { return kTRUE; }
  Bool_t AlwaysTrue(const AliVParticle& /*part*/) const { return kTRUE; }
  Bool_t AlwaysTrue(const AliVParticle& /*p1*/, const AliVParticle& /*p2*/) const { return kTRUE; }
  
private:
  
  /// not implemented on purpose
  AliAnalysisMuMuCutRegistry(const AliAnalysisMuMuCutRegistry& rhs);
  /// not implemented on purpose
  AliAnalysisMuMuCutRegistry& operator=(const AliAnalysisMuMuCutRegistry& rhs);
  
  AliAnalysisMuMuCutElement* CreateCutElement(AliAnalysisMuMuCutElement::ECutType expectedType,
                                              TObject& cutClass,
                                              const char* cutMethodName,
                                              const char* cutMethodPrototype,
                                              const char* defaultParameters);
  
private:
  
  mutable TObjArray* fCutElements; // cut elements
  mutable TObjArray* fCutCombinations; // cut combinations
  
  ClassDef(AliAnalysisMuMuCutRegistry,1) // storage for cut pointers
};

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