ROOT logo
#ifndef ALIMUONEVENTCUTS_H
#define ALIMUONEVENTCUTS_H

#include "AliAnalysisCuts.h"

class AliVEvent;
class AliVVertex;
class TList;
class TAxis;
class TArrayI;
class TString;
class TObjString;
class TObjArray;
class AliAnalysisUtils;

class AliMuonEventCuts : public AliAnalysisCuts
{
 public:
  
  enum {
    kPhysicsSelected = BIT(0),
    kSelectedCentrality = BIT(1),
    kSelectedTrig = BIT(2),
    kGoodVertex = BIT(3),
    kNoPileup = BIT(4)
  };
  
  AliMuonEventCuts();
  AliMuonEventCuts(const char* name, const char* title);
  AliMuonEventCuts(const AliMuonEventCuts& obj);
  AliMuonEventCuts& operator=(const AliMuonEventCuts& obj);
  
  virtual ~AliMuonEventCuts();
  
  virtual UInt_t GetSelectionMask ( const TObject* obj );
  virtual Bool_t IsSelected ( TObject* obj );
  virtual Bool_t IsSelected ( TList* /*list */ );
  
  void SetDefaultFilterMask();
  void SetDefaultParameters();
  
  /// Skip tests which are not active in the filter mask
  void SkipTestsNonInFilterMask ( UInt_t skipMask = 0xFFFF) { fCheckMask = ~skipMask; }
  
  // Handle trigger
  void SetTrigClassPatterns ( TString trigPattern, TString trigInputsMap = "" );
  /// Get default trigger class patterns
  TString GetDefaultTrigClassPatterns() const;
  TString GetDefaultTrigInputsMap() const;
  void SetTrigClassLevels (TString pattern = "MSL:Lpt,MUSL:Lpt,MSH:Hpt,MUSH:Hpt,MUL:LptLpt,MUU:LptLpt,MLL:LptLpt" );
  TArrayI GetTrigClassPtCutLevel (TString trigClassName ) const;
  /// Get trigger classes found in run
  TList* GetAllSelectedTrigClasses () const { return fAllSelectedTrigClasses; }
  const TObjArray* GetSelectedTrigClassesInEvent ( const AliVEvent* event );
  const TObjArray* GetSelectedTrigClassesInEvent(const TString& firedTriggerClasses,
                                                 UInt_t l0Inputs, UInt_t l1Inputs, UInt_t l2Inputs);

  UInt_t GetTriggerInputBitMaskFromInputName(const char* inputName) const;

  // Handle centrality
  void SetCentralityClasses(Int_t nCentralityBins = -1, Double_t* centralityBins = 0x0);
  /// Get centrality classes
  TAxis* GetCentralityClasses() const { return fCentralityClasses; }
  
  void SetCentralityEstimator (TString centralityEstimator = "V0M" );
  TString GetCentralityEstimator () const;
  Double_t GetCentrality ( const AliVEvent* event ) const;
  
  
  /// Set Physics selection mask
  void SetPhysicsSelectionMask (UInt_t physicsSelectionMask ) { fPhysicsSelectionMask = physicsSelectionMask; }
  
  
  /// Set minimum number of vertex contributors
  void SetVertexMinNContributors (Int_t vertexMinNContributors ) { fVertexMinNContributors = vertexMinNContributors; }
  /// Get minimum number of vertex contributors
  Int_t GetVertexMinNContributors () const { return fVertexMinNContributors; }
  /// Set Vz limits
  void SetVertexVzLimits ( Double_t vzMin = -999., Double_t vzMax = 999. ) { fVertexVzMin = vzMin; fVertexVzMax = vzMax; }
  /// Get Vtx vz min
  Double_t GetVertexVzMin () const { return fVertexVzMin; }
  /// Get Vtx vz max
  Double_t GetVertexVzMax () const { return fVertexVzMax; }
  
  /// Return pointer to analysis utils (to configure cuts)
  AliAnalysisUtils* GetAnalysisUtils ( ) { return fAnalysisUtils; }

  void Print ( Option_t* option = "" ) const;

 protected:
  
  void BuildTriggerClasses (TString firedTrigClasses, UInt_t l0Inputs, UInt_t l1Inputs, UInt_t l2Inputs );
  Bool_t CheckTriggerClassPattern ( const TString& toCheck ) const;
  Bool_t CheckTriggerClassCombination ( const TObjArray* combo, const TString& firedTriggerClasses, UInt_t l0Inputs, UInt_t l1Inputs, UInt_t l2Inputs ) const;
  void AddToEventSelectedClass ( const TString& toCheck, const TObjString* foundTrig, const UInt_t comboType = 0 );
  Bool_t UpdateEvent( const AliVEvent* event );
  void SetDefaultTrigClassPatterns();
  void SetTrigInputsMap ( TString trigInputsMap );
    
  UInt_t fPhysicsSelectionMask; ///< Physics selection mask
  
  Int_t fVertexMinNContributors;  ///< Minimum number of SPD vertex contributors
  Double_t fVertexVzMin;          ///< SPD vertex Vz min
  Double_t fVertexVzMax;          ///< SPD vertex Vz max
  
  UInt_t fCheckMask;              ///< Mask telling which cuts to check (by default check filter mask)
  
  TObjArray* fSelectedTrigPattern; ///< List of triggers to be kept
  TObjArray* fRejectedTrigPattern; ///< List of triggers to be rejected
  TObjArray* fSelectedTrigLevel;   ///< Track-trigger pt cut for selected trigger class
  TObjArray* fSelectedTrigCombination; ///< Selected trigger combinations
  TList* fTrigInputsMap;       ///< Trigger inputs map
  TList* fAllSelectedTrigClasses;  ///< List of all selected trigger classes found
  TAxis* fCentralityClasses;   ///< Centrality classes
  AliAnalysisUtils* fAnalysisUtils;    ///< Analysis utility
  
  private:
  ULong64_t fEventTriggerMask; //!< Fired trigger mask in the event
  TObjArray* fSelectedTrigClassesInEvent; //!< list of selected trigger classes in current event
  enum {kComboSimple, kComboFormula, kComboAND, kComboOR}; //!< Trigger combination types
  
  ClassDef(AliMuonEventCuts, 6); // Class for muon event filters
};

#endif

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