ROOT logo
#ifndef ALIANALYSISTASKMUMU_H
#define ALIANALYSISTASKMUMU_H

/**
 * \defgroup pwg-muon-mumu pwg-muon-mumu
 *
 * \brief Small sub-framework to analyse muon pairs and more...
 *
 * Started as a simple invariant mass analysis and grew into a bit more general thing...
 *
 * Can now compute the charged particle multiplicy (from SPD tracklets only) in order
 * to be able to correlate it with e.g. J/psi or single mu.
 */

/**
 * \ingroup pwg-muon-mumu
 *
 * \class AliAnalysisTaskMuMu
 *
 * \brief Steering class for mu pairs analysis (and more...)
 *
 * This class acts as a small sub-framework to steer various sub-analysis which
 * share the same MergeableCollection and the same CounterCollection.
 *
 *  \author: L. Aphecetche (Subatech)
 */

#ifndef ALIANALYSISTASKSE_H
#  include "AliAnalysisTaskSE.h"
#endif

#ifndef ROOT_TMath
#  include "TMath.h"
#endif

class AliAnalysisMuMuBinning;
class AliCounterCollection;
class AliMergeableCollection;
class AliVParticle;
class TList;
class TObjArray;
class AliAnalysisMuMuBase;
class AliAnalysisMuMuCutRegistry;

class AliAnalysisTaskMuMu : public AliAnalysisTaskSE
{
public:
  AliAnalysisTaskMuMu();
  virtual ~AliAnalysisTaskMuMu();

  AliAnalysisMuMuCutRegistry* CutRegistry() const;
  
  AliAnalysisMuMuBinning* Binning() const;

  void AdoptSubAnalysis(AliAnalysisMuMuBase* analysis);
  
  virtual void DisableHistograms(const char* pattern="*");
  
  void SetCountInBins( Bool_t disableHistoLoop=kTRUE ) { fCountInBins = kTRUE; fDisableHistoLoop = disableHistoLoop; }
  
  void DisableHistoLoop( Bool_t disableHistoLoop=kTRUE ) { fDisableHistoLoop = disableHistoLoop; }

  void SetBeamYear(const char* beamYear) { fBeamYear = beamYear; }
  
  virtual void FinishTaskOutput();
  
  virtual void NotifyRun();
  
  virtual void Print(Option_t* opt="") const;
  
  virtual void Terminate(Option_t *);
  
  void UserCreateOutputObjects();

  virtual void UserExec(Option_t* opt);
  
private:
  
  void CreateTrackHisto(const char* eventSelection,
                        const char* triggerClassName,
                        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,
                        Bool_t separatePlusAndMinus=kFALSE) const;
  
  void CreatePairHisto(const char* eventSelection,
                       const char* triggerClassName,
                       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;
  
  const char* DefaultCentralityName() const;

  AliVEvent* Event() const;
  
  void FillHistos(const char* eventSelection, const char* triggerClassName, const char* centrality);
  
  void FillCounters(const char* eventSelection, const char* triggerClassName, const char* centrality, Int_t currentRun, const char* binningName="ntrcorr"/*"dnchdeta"*/);
  
  void Fill(const char* eventSelection, const char* triggerClassName);
  
  void FillMC();
  
  void GetSelectedTrigClassesInEvent(const AliVEvent* event, TObjArray& array);

  Bool_t IsHistogrammingDisabled() const;
  
  virtual Bool_t IsHistogramDisabled(const char* hname) const;
  
  Bool_t IsPP() const;
  
private:
  
  AliAnalysisTaskMuMu(const AliAnalysisTaskMuMu&); // not implemented (on purpose)
  AliAnalysisTaskMuMu& operator=(const AliAnalysisTaskMuMu&); // not implemented (on purpose)

private:
  
  AliMergeableCollection* fHistogramCollection; //! collection of histograms
  AliCounterCollection* fEventCounters; //! event counters
  mutable AliAnalysisMuMuBinning* fBinning; // binning for particles

  mutable AliAnalysisMuMuCutRegistry* fCutRegistry; // cuts (owner)
  
  TString fBeamYear; // beam and year
  
  TList* fHistogramToDisable; // list of regexp of histo name(s) to disable
  
  TObjArray* fSubAnalysisVector; // list of companion analysis
  
  Bool_t fCountInBins; //Flag to count events in bins
  
  Bool_t fDisableHistoLoop; //Flag to not enter in the Filling histos Loop without disabling the histogramming (neccesary to have dNhcdEta event info avaliable)
  
  ClassDef(AliAnalysisTaskMuMu,26) // a class to analyse muon pairs (and single also ;-) )
};

#endif

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