ROOT logo
#ifndef ALIVANALYSISMUON_H
#define ALIVANALYSISMUON_H

/* $Id: AliVAnalysisMuon.h 47782 2011-02-24 18:37:31Z martinez $ */ 

//
// Base class for single muon analysis
//
// Author: Diego Stocco
//

#include "AliAnalysisTaskSE.h"

class TString;
class TObjArray;
class TAxis;
class TLorentzVector;
class TList;
class THashList;
class AliMergeableCollection;
class AliCounterCollection;
class AliVParticle;
class AliAODEvent;
class AliESDEvent;
class AliCFGridSparse;
class AliMuonEventCuts;
class AliMuonTrackCuts;
class AliMuonPairCuts;
class AliVVertex;
class AliUtilityMuonAncestor;

class AliVAnalysisMuon : public AliAnalysisTaskSE {
 public:
  AliVAnalysisMuon();
  AliVAnalysisMuon(const char *name, const AliMuonTrackCuts& trackCuts);
  AliVAnalysisMuon(const char *name, const AliMuonPairCuts& pairCuts);
  AliVAnalysisMuon(const char *name, const AliMuonTrackCuts& trackCuts, const AliMuonPairCuts& pairCuts);
  
  virtual ~AliVAnalysisMuon();

  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *option);
  virtual void   NotifyRun();
  virtual void   FinishTaskOutput();

  void SetCentralityClasses(Int_t nCentralityBins = -1, Double_t* centralityBins = 0x0);
  TAxis* GetCentralityClasses() const;
  Bool_t SetCentralityClassesFromOutput();

  void SetTrigClassPatterns(const TString pattern);
  TString GetDefaultTrigClassPatterns() const;
  /// Get trigger classes
  TList* GetAllSelectedTrigClasses() const;
  
  void SetTerminateOptions(TString physSel="All", TString trigClass="ANY", TString centralityRange="", TString furtherOpts="");
  
  /// Get muon event cuts
  AliMuonEventCuts* GetMuonEventCuts() { return fMuonEventCuts; }
  /// Get muon track cuts
  AliMuonTrackCuts* GetMuonTrackCuts() { return fMuonTrackCuts; }
  /// Get muon pair cuts
  AliMuonPairCuts* GetMuonPairCuts() { return fMuonPairCuts; }
  
  // Utility methods for CF container
  static Bool_t SetSparseRange(AliCFGridSparse* gridSparse,
                               Int_t ivar, TString labelName,
                               Double_t varMin, Double_t varMax,
                               TString option = "");
  
  void SetWeight ( TObject* wgtObj );
  TObject* GetWeight ( const char* wgtName );
  
  enum {
    kPhysSelPass,    ///< Physics selected events
    kPhysSelReject,  ///< Events non-passing selection
    kNselections     ///< Number of selections
  };
  
  enum {
    kCharmMu,       ///< Mu from charm
    kBeautyMu,      ///< Mu from beauty
    kQuarkoniumMu,  ///< Mu from resonance
    kWbosonMu,      ///< Mu from W
    kZbosonMu,      ///< Mu from Z
    kDecayMu,       ///< Decay mu
    kSecondaryMu,   ///< Secondary mu
    kRecoHadron,    ///< Reconstructed hadron
    kUnidentified,  ///< Particle that fails matching kine
    kNtrackSources  ///< Total number of track sources
  };


 protected:
  
  /////////////////////////////////////////////////////
  // Pure virtual methods to be implemented bu users //
  /////////////////////////////////////////////////////
  
  virtual void MyUserCreateOutputObjects() = 0;
  // In this method you have to create your own output as well as
  // the mergeable objects that will be then used
  // in the counter collection.
  // To do so, create your object and add it to the collection through:
  //    TH1* histo = new TH1F();
  //    AddObjectToCollection(histo, index)
  
  virtual void ProcessEvent(TString physSel, const TObjArray& selectTrigClasses, TString centrality) = 0;
  // This method is called at each event.
  // In this method you can fill the histograms or the CF container that you have created
  
  /////////////////////
  // Utility methods //
  /////////////////////
    
  // Methods for MC
  Int_t GetParticleType ( AliVParticle* track );
  
  // Methods for mergeable object collections
  Bool_t AddObjectToCollection(TObject* object, Int_t index = -1);
  TObject* GetMergeableObject(TString physSel, TString trigClassName, TString centrality, TString objectName);
  TObject* GetSum(TString physSel, TString trigClassNames, TString centrality, TString objectPattern);
  
    
  AliMuonEventCuts* fMuonEventCuts; ///< Muon event cuts
  AliMuonTrackCuts* fMuonTrackCuts; ///< Muon track cuts
  AliMuonPairCuts* fMuonPairCuts;   ///< Muon pair track cuts
  AliESDEvent* fESDEvent;      //!< ESD event, not owner
  AliAODEvent* fAODEvent;      //!< AOD event, not owner
  TObjArray* fTerminateOptions; ///< Terminate options
  TObjArray* fChargeKeys;      ///< Muon charge keys
  TObjArray* fSrcKeys;         ///< MC sources names
  TObjArray* fPhysSelKeys;     ///< Physics selection names
  THashList* fWeights;         ///< List of objects to weight histograms
  AliUtilityMuonAncestor* fUtilityMuonAncestor; ///< Utility to get the muon ancestor
  
  AliCounterCollection* fEventCounters;  //!< event counters
  AliMergeableCollection* fMergeableCollection; //!< collection of mergeable objects
  TObjArray* fOutputList;  //!< List of outputs  

 private:
  AliVAnalysisMuon(const AliVAnalysisMuon&);
  AliVAnalysisMuon& operator=(const AliVAnalysisMuon&);
  
  void InitKeys();
  void CreateMergeableObjects(TString physSel, TString trigClassName, TString centrality);
  TObjArray* fOutputPrototypeList; //!< List of prototype object to be used in collection

  ClassDef(AliVAnalysisMuon, 6);
};

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