ROOT logo
/* $Id$ */

#ifndef DNDETANALYSIS_H
#define DNDETANALYSIS_H

// ------------------------------------------------------
//
// Class for dn/deta analysis
//
// ------------------------------------------------------
// 
// TODO:
// - more documentation
// - add debug statements
// - add more histograms
// - add functionality to set the bin sizes
// - figure out correct way to treat the errors
// - add functionality to make dn/deta for different mult classes?

#include <TNamed.h>
#include "AlidNdEtaCorrection.h"
#include "AliPWG0Helper.h"
#include <TString.h>

class TH1F;
class TCollection;

class AliCorrection;

class dNdEtaAnalysis : public TNamed
{
public:
  enum { kVertexBinning = 1+2 }; // the first is for the whole vertex range, the others divide the vertex range

  dNdEtaAnalysis();
  dNdEtaAnalysis(const Char_t* name, const Char_t* title, AliPWG0Helper::AnalysisMode analysisMode = (AliPWG0Helper::AnalysisMode) (AliPWG0Helper::kTPC | AliPWG0Helper::kFieldOn));
  virtual ~dNdEtaAnalysis();

  dNdEtaAnalysis(const dNdEtaAnalysis &c);
  dNdEtaAnalysis &operator=(const dNdEtaAnalysis &c);
  virtual void Copy(TObject &c) const;

  void FillTrack(Float_t vtx, Float_t eta, Float_t pt);
  void FillEvent(Float_t vtx, Float_t n);
  void FillTriggeredEvent(Float_t n);

  void Finish(AlidNdEtaCorrection* correction, Float_t ptCut, AlidNdEtaCorrection::CorrectionType correctionType, const char* tag = "", Int_t backgroundSubtraction = 0, TH1* combinatoricsCorrection = 0);

  void DrawHistograms(Bool_t simple = kFALSE);
  void LoadHistograms(const Char_t* dir = 0);
  void SaveHistograms();

  virtual Long64_t Merge(TCollection* list);

  AliCorrection* GetData() const { return fData; }

  TH1F* GetPtHistogram() const { return fPtDist; }

  TH1F* GetdNdEtaHistogram(Int_t i = 0) const { return fdNdEta[i]; }
  TH1F* GetdNdEtaPtCutOffCorrectedHistogram(Int_t i = 0) const { return fdNdEtaPtCutOffCorrected[i]; }

  void SetAnalysisMode(AliPWG0Helper::AnalysisMode mode) { fAnalysisMode = mode; }
  AliPWG0Helper::AnalysisMode GetAnalysisMode() { return fAnalysisMode; }

  void SetVtxMin(Float_t vtxMin) {fvtxMin = vtxMin;}
  void SetVtxMax(Float_t vtxMax) {fvtxMax = vtxMax;}

protected:
  Float_t GetVtxMin(Float_t eta);

  AliCorrection* fData;     // we store the data in an AliCorrection
  TH1F* fMult;              // (raw) multiplicity distribution of triggered events

  TH1F* fPtDist; // pt distribution

  TH1F* fdNdEta[kVertexBinning];                   // dndeta results for different vertex bins (0 = full range)
  TH1F* fdNdEtaPtCutOffCorrected[kVertexBinning];  // dndeta results for different vertex bins (0 = full range), pt cut off corrected

  AliPWG0Helper::AnalysisMode fAnalysisMode;       // detector (combination) used for the analysis
  TString fTag;                                   // tag saved that describes the applied correction

  Float_t fvtxMin;  // mininum vtx on which to integrate
  Float_t fvtxMax;  // maximum vtx on which to intgrate

  ClassDef(dNdEtaAnalysis, 3)
};

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