ROOT logo
#ifndef ALIANALYSISMUMUBASE_H
#define ALIANALYSISMUMUBASE_H

/**
 *
 * \class AliAnalysisMuMuBase
 *
 * \brief Base class of the sub-analysis for AliAnalysisTaskMuMu
 *
 * \author L. Aphecetche (Subatech)
 */

#include "TObject.h"
#include "TString.h"
#include "TProfile.h"

class AliCounterCollection;
class AliAnalysisMuMuBinning;
class AliMergeableCollection;
class AliVParticle;
class AliVEvent;
class AliMCEvent;
class TH1;
class AliInputEventHandler;
class AliAnalysisMuMuCutRegistry;

class AliAnalysisMuMuBase : public TObject
{
public:

  AliAnalysisMuMuBase();
  virtual ~AliAnalysisMuMuBase() {}

  /** Define the histograms needed for the path starting at eventSelection/triggerClassName/centrality.
   * This method has to ensure the histogram creation is performed only once !
   */
  virtual void DefineHistogramCollection(const char* eventSelection,
                                         const char* triggerClassName,
                                         const char* centrality) = 0;

  /** Fill histograms for one event */
  virtual void FillHistosForEvent(const char* /*eventSelection*/,const char* /*triggerClassName*/,const char* /*centrality*/) {}

  /** Fill histograms for one MC event */
  virtual void FillHistosForMCEvent(const char* /*eventSelection*/,const char* /*triggerClassName*/,const char* /*centrality*/) {}
  
  /** Fill histograms for one track */
  virtual void FillHistosForTrack(const char* /*eventSelection*/,const char* /*triggerClassName*/,const char* /*centrality*/,
                                  const char* /*trackCutName*/,
                                  const AliVParticle& /*part*/) {}

  /** Fill histograms for one track pair */
  virtual void FillHistosForPair(const char* /*eventSelection*/,const char* /*triggerClassName*/,const char* /*centrality*/,
                                 const char* /*pairCutName*/,
                                 const AliVParticle& /*part1*/,
                                 const AliVParticle& /*part2*/) {}
  
  virtual void Init(AliCounterCollection& cc,
                    AliMergeableCollection& hc,
                    const AliAnalysisMuMuBinning& binning,
                    const AliAnalysisMuMuCutRegistry& cutRegister);

  virtual void SetEvent(AliVEvent* event, AliMCEvent* mcEvent=0x0);

  virtual Bool_t IsHistogramDisabled(const char* hname) const;
  
  virtual Bool_t IsHistogrammingDisabled() const;
  
  virtual void DisableHistograms(const char* pattern="*");
  
  AliVEvent* Event() const { return fEvent; }
  
  AliMCEvent* MCEvent() const { return fMCEvent; }
  
  static const char* MCInputPrefix() { return "MCINPUT" ; }
  
  /// Called at each new run
  virtual void SetRun(const AliInputEventHandler* /*eventHandler*/) {}

  virtual void Terminate(Option_t* /*opt*/="") {}
  
  enum EDataType
  {
    kHistoForMCInput = (1<<0),
    kHistoForData = (1<<1)
  };
  
  void SetMC() { fHasMC = kTRUE; }
  
  Bool_t HasMC() const { return fHasMC; }
  
  Bool_t AlwaysTrue(const AliVEvent& /*event*/) const { return kTRUE; }
  Bool_t AlwaysTrue(const AliVParticle& /*particle*/) const { return kTRUE; }
  Bool_t AlwaysTrue(const AliVParticle& /*particle*/, const AliVParticle& /*particle*/) const { return kTRUE; }
  void NameOfAlwaysTrue(TString& name) const { name = "ALL"; }

  Bool_t AlwaysFalse(const AliVEvent& /*event*/) const { return kFALSE; }
  Bool_t AlwaysFalse(const AliVParticle& /*particle*/) const { return kFALSE; }
  Bool_t AlwaysFalse(const AliVParticle& /*particle*/, const AliVParticle& /*particle*/) const { return kFALSE; }
  void NameOfAlwaysFalse(TString& name) const { name = "NONE"; }
  
  void SetHistogramCollection(AliMergeableCollection* h) { fHistogramCollection = h; }
  
protected:

  void CreateHistos(const TObjArray& paths,
                    const char* hname, const char* htitle,
                    Int_t nbinsx, Double_t xmin, Double_t xmax,
                    Int_t nbinsy=-1, Double_t ymin=0.0, Double_t ymax=0.0) const;

  void CreateEventHistos(UInt_t dataType,
                         const char* what,
                         const char* hname, const char* htitle,
                         Int_t nbinsx, Double_t xmin, Double_t xmax,
                         Int_t nbinsy=-1, Double_t ymin=0.0, Double_t ymax=0.0) const;

  void CreateEventHistos(UInt_t dataType,
                         const char* eventSelection,
                         const char* triggerClassName,
                         const char* centrality,
                         const char* hname, const char* htitle,
                         Int_t nbinsx, Double_t xmin, Double_t xmax,
                         Int_t nbinsy=-1, Double_t ymin=0.0, Double_t ymax=0.0) const;
  
  
  void CreateTrackHistos(UInt_t dataType,
                         const char* eventSelection,
                         const char* triggerClassName,
                         const char* centrality,
                         const char* hname, const char* htitle,
                         Int_t nbinsx, Double_t xmin, Double_t xmax,
                         Int_t nbinsy=-1, Double_t ymin=0.0, Double_t ymax=0.0) const;
  
  void CreatePairHistos(UInt_t dataType,
                        const char* eventSelection,
                        const char* triggerClassName,
                        const char* centrality,
                        const char* hname, const char* htitle,
                        Int_t nbinsx, Double_t xmin, Double_t xmax,
                        Int_t nbinsy=-1, Double_t ymin=0.0, Double_t ymax=0.0) const;

  TH1* Histo(const char* eventSelection, const char* histoname);
  TH1* Histo(const char* eventSelection, const char* triggerClassName, const char* histoname);
  TH1* Histo(const char* eventSelection, const char* triggerClassName, const char* cent, const char* histoname);
  TH1* Histo(const char* eventSelection, const char* triggerClassName, const char* cent,
             const char* what, const char* histoname);

  TH1* MCHisto(const char* eventSelection, const char* histoname);
  TH1* MCHisto(const char* eventSelection, const char* triggerClassName, const char* histoname);
  TH1* MCHisto(const char* eventSelection, const char* triggerClassName, const char* cent, const char* histoname);
  TH1* MCHisto(const char* eventSelection, const char* triggerClassName, const char* cent,
             const char* what, const char* histoname);
  
  TProfile* Prof(const char* eventSelection, const char* histoname);
  TProfile* Prof(const char* eventSelection, const char* triggerClassName, const char* histoname);
  TProfile* Prof(const char* eventSelection, const char* triggerClassName, const char* cent, const char* histoname);
  TProfile* Prof(const char* eventSelection, const char* triggerClassName, const char* cent,
                 const char* what, const char* histoname);
  
  TProfile* MCProf(const char* eventSelection, const char* histoname);
  TProfile* MCProf(const char* eventSelection, const char* triggerClassName, const char* histoname);
  TProfile* MCProf(const char* eventSelection, const char* triggerClassName, const char* cent, const char* histoname);
  TProfile* MCProf(const char* eventSelection, const char* triggerClassName, const char* cent,
                 const char* what, const char* histoname);

  Int_t GetNbins(Double_t xmin, Double_t xmax, Double_t xstep);

  AliCounterCollection* CounterCollection() const { return fEventCounters; }
  AliMergeableCollection* HistogramCollection() const { return fHistogramCollection; }
  const AliAnalysisMuMuBinning* Binning() const { return fBinning; }
  const AliAnalysisMuMuCutRegistry* CutRegistry() const { return fCutRegistry; }
  
private:
  
  /// not implemented on purpose
  AliAnalysisMuMuBase& operator=(const AliAnalysisMuMuBase& rhs);
  /// not implemented on purpose
  AliAnalysisMuMuBase(const AliAnalysisMuMuBase& rhs);
  
  AliCounterCollection* fEventCounters; //! event counters
  AliMergeableCollection* fHistogramCollection; //! collection of histograms
  const AliAnalysisMuMuBinning* fBinning; //! binning for particles
  const AliAnalysisMuMuCutRegistry* fCutRegistry; //! registry of cut combinations
  AliVEvent* fEvent; //! current event
  AliMCEvent* fMCEvent; //! current MC event
  TList* fHistogramToDisable; // list of regexp of histo name to disable
  Bool_t fHasMC; // whether or not we're dealing with MC data
  
  ClassDef(AliAnalysisMuMuBase,1) // base class for a companion class to AliAnalysisMuMu
};

#endif

 AliAnalysisMuMuBase.h:1
 AliAnalysisMuMuBase.h:2
 AliAnalysisMuMuBase.h:3
 AliAnalysisMuMuBase.h:4
 AliAnalysisMuMuBase.h:5
 AliAnalysisMuMuBase.h:6
 AliAnalysisMuMuBase.h:7
 AliAnalysisMuMuBase.h:8
 AliAnalysisMuMuBase.h:9
 AliAnalysisMuMuBase.h:10
 AliAnalysisMuMuBase.h:11
 AliAnalysisMuMuBase.h:12
 AliAnalysisMuMuBase.h:13
 AliAnalysisMuMuBase.h:14
 AliAnalysisMuMuBase.h:15
 AliAnalysisMuMuBase.h:16
 AliAnalysisMuMuBase.h:17
 AliAnalysisMuMuBase.h:18
 AliAnalysisMuMuBase.h:19
 AliAnalysisMuMuBase.h:20
 AliAnalysisMuMuBase.h:21
 AliAnalysisMuMuBase.h:22
 AliAnalysisMuMuBase.h:23
 AliAnalysisMuMuBase.h:24
 AliAnalysisMuMuBase.h:25
 AliAnalysisMuMuBase.h:26
 AliAnalysisMuMuBase.h:27
 AliAnalysisMuMuBase.h:28
 AliAnalysisMuMuBase.h:29
 AliAnalysisMuMuBase.h:30
 AliAnalysisMuMuBase.h:31
 AliAnalysisMuMuBase.h:32
 AliAnalysisMuMuBase.h:33
 AliAnalysisMuMuBase.h:34
 AliAnalysisMuMuBase.h:35
 AliAnalysisMuMuBase.h:36
 AliAnalysisMuMuBase.h:37
 AliAnalysisMuMuBase.h:38
 AliAnalysisMuMuBase.h:39
 AliAnalysisMuMuBase.h:40
 AliAnalysisMuMuBase.h:41
 AliAnalysisMuMuBase.h:42
 AliAnalysisMuMuBase.h:43
 AliAnalysisMuMuBase.h:44
 AliAnalysisMuMuBase.h:45
 AliAnalysisMuMuBase.h:46
 AliAnalysisMuMuBase.h:47
 AliAnalysisMuMuBase.h:48
 AliAnalysisMuMuBase.h:49
 AliAnalysisMuMuBase.h:50
 AliAnalysisMuMuBase.h:51
 AliAnalysisMuMuBase.h:52
 AliAnalysisMuMuBase.h:53
 AliAnalysisMuMuBase.h:54
 AliAnalysisMuMuBase.h:55
 AliAnalysisMuMuBase.h:56
 AliAnalysisMuMuBase.h:57
 AliAnalysisMuMuBase.h:58
 AliAnalysisMuMuBase.h:59
 AliAnalysisMuMuBase.h:60
 AliAnalysisMuMuBase.h:61
 AliAnalysisMuMuBase.h:62
 AliAnalysisMuMuBase.h:63
 AliAnalysisMuMuBase.h:64
 AliAnalysisMuMuBase.h:65
 AliAnalysisMuMuBase.h:66
 AliAnalysisMuMuBase.h:67
 AliAnalysisMuMuBase.h:68
 AliAnalysisMuMuBase.h:69
 AliAnalysisMuMuBase.h:70
 AliAnalysisMuMuBase.h:71
 AliAnalysisMuMuBase.h:72
 AliAnalysisMuMuBase.h:73
 AliAnalysisMuMuBase.h:74
 AliAnalysisMuMuBase.h:75
 AliAnalysisMuMuBase.h:76
 AliAnalysisMuMuBase.h:77
 AliAnalysisMuMuBase.h:78
 AliAnalysisMuMuBase.h:79
 AliAnalysisMuMuBase.h:80
 AliAnalysisMuMuBase.h:81
 AliAnalysisMuMuBase.h:82
 AliAnalysisMuMuBase.h:83
 AliAnalysisMuMuBase.h:84
 AliAnalysisMuMuBase.h:85
 AliAnalysisMuMuBase.h:86
 AliAnalysisMuMuBase.h:87
 AliAnalysisMuMuBase.h:88
 AliAnalysisMuMuBase.h:89
 AliAnalysisMuMuBase.h:90
 AliAnalysisMuMuBase.h:91
 AliAnalysisMuMuBase.h:92
 AliAnalysisMuMuBase.h:93
 AliAnalysisMuMuBase.h:94
 AliAnalysisMuMuBase.h:95
 AliAnalysisMuMuBase.h:96
 AliAnalysisMuMuBase.h:97
 AliAnalysisMuMuBase.h:98
 AliAnalysisMuMuBase.h:99
 AliAnalysisMuMuBase.h:100
 AliAnalysisMuMuBase.h:101
 AliAnalysisMuMuBase.h:102
 AliAnalysisMuMuBase.h:103
 AliAnalysisMuMuBase.h:104
 AliAnalysisMuMuBase.h:105
 AliAnalysisMuMuBase.h:106
 AliAnalysisMuMuBase.h:107
 AliAnalysisMuMuBase.h:108
 AliAnalysisMuMuBase.h:109
 AliAnalysisMuMuBase.h:110
 AliAnalysisMuMuBase.h:111
 AliAnalysisMuMuBase.h:112
 AliAnalysisMuMuBase.h:113
 AliAnalysisMuMuBase.h:114
 AliAnalysisMuMuBase.h:115
 AliAnalysisMuMuBase.h:116
 AliAnalysisMuMuBase.h:117
 AliAnalysisMuMuBase.h:118
 AliAnalysisMuMuBase.h:119
 AliAnalysisMuMuBase.h:120
 AliAnalysisMuMuBase.h:121
 AliAnalysisMuMuBase.h:122
 AliAnalysisMuMuBase.h:123
 AliAnalysisMuMuBase.h:124
 AliAnalysisMuMuBase.h:125
 AliAnalysisMuMuBase.h:126
 AliAnalysisMuMuBase.h:127
 AliAnalysisMuMuBase.h:128
 AliAnalysisMuMuBase.h:129
 AliAnalysisMuMuBase.h:130
 AliAnalysisMuMuBase.h:131
 AliAnalysisMuMuBase.h:132
 AliAnalysisMuMuBase.h:133
 AliAnalysisMuMuBase.h:134
 AliAnalysisMuMuBase.h:135
 AliAnalysisMuMuBase.h:136
 AliAnalysisMuMuBase.h:137
 AliAnalysisMuMuBase.h:138
 AliAnalysisMuMuBase.h:139
 AliAnalysisMuMuBase.h:140
 AliAnalysisMuMuBase.h:141
 AliAnalysisMuMuBase.h:142
 AliAnalysisMuMuBase.h:143
 AliAnalysisMuMuBase.h:144
 AliAnalysisMuMuBase.h:145
 AliAnalysisMuMuBase.h:146
 AliAnalysisMuMuBase.h:147
 AliAnalysisMuMuBase.h:148
 AliAnalysisMuMuBase.h:149
 AliAnalysisMuMuBase.h:150
 AliAnalysisMuMuBase.h:151
 AliAnalysisMuMuBase.h:152
 AliAnalysisMuMuBase.h:153
 AliAnalysisMuMuBase.h:154
 AliAnalysisMuMuBase.h:155
 AliAnalysisMuMuBase.h:156
 AliAnalysisMuMuBase.h:157
 AliAnalysisMuMuBase.h:158
 AliAnalysisMuMuBase.h:159
 AliAnalysisMuMuBase.h:160
 AliAnalysisMuMuBase.h:161
 AliAnalysisMuMuBase.h:162
 AliAnalysisMuMuBase.h:163
 AliAnalysisMuMuBase.h:164
 AliAnalysisMuMuBase.h:165
 AliAnalysisMuMuBase.h:166
 AliAnalysisMuMuBase.h:167
 AliAnalysisMuMuBase.h:168
 AliAnalysisMuMuBase.h:169
 AliAnalysisMuMuBase.h:170
 AliAnalysisMuMuBase.h:171
 AliAnalysisMuMuBase.h:172
 AliAnalysisMuMuBase.h:173
 AliAnalysisMuMuBase.h:174
 AliAnalysisMuMuBase.h:175
 AliAnalysisMuMuBase.h:176
 AliAnalysisMuMuBase.h:177
 AliAnalysisMuMuBase.h:178
 AliAnalysisMuMuBase.h:179
 AliAnalysisMuMuBase.h:180
 AliAnalysisMuMuBase.h:181
 AliAnalysisMuMuBase.h:182
 AliAnalysisMuMuBase.h:183
 AliAnalysisMuMuBase.h:184
 AliAnalysisMuMuBase.h:185
 AliAnalysisMuMuBase.h:186
 AliAnalysisMuMuBase.h:187
 AliAnalysisMuMuBase.h:188
 AliAnalysisMuMuBase.h:189
 AliAnalysisMuMuBase.h:190
 AliAnalysisMuMuBase.h:191
 AliAnalysisMuMuBase.h:192
 AliAnalysisMuMuBase.h:193