ROOT logo
/* $Id$ */

#ifndef ALIDNDETACORRECTION_H
#define ALIDNDETACORRECTION_H


// ------------------------------------------------------
//
// Class to handle corrections for dN/dEta measurements
//
// ------------------------------------------------------
//
// TODO:
// - add functionality to set the bin sizes
// - update MERge function
//

#include <TCollection.h>
#include <TNamed.h>
#include "AliPWG0Helper.h"

class AliCorrection;
class TH1;

class AlidNdEtaCorrection : public TNamed
{
public:
  enum CorrectionType {
    kNone = 0,
    kTrack2Particle,  // measured events
    kVertexReco,      // MB sample
    kINEL,
    kNSD,
    kND,
    kOnePart
  };

  AlidNdEtaCorrection();
  AlidNdEtaCorrection(const Char_t* name, const Char_t* title, AliPWG0Helper::AnalysisMode analysis = (AliPWG0Helper::AnalysisMode) (AliPWG0Helper::kTPC | AliPWG0Helper::kFieldOn));

  virtual Long64_t Merge(TCollection* list);

  ~AlidNdEtaCorrection();

  void FillMCParticle(Float_t vtx, Float_t eta, Float_t pt, Bool_t trigger, Bool_t vertex, Int_t processType);
  void FillTrackedParticle(Float_t vtx, Float_t eta, Float_t pt, Double_t weight=1.);
  void FillEvent(Float_t vtx, Float_t n, Bool_t trigger, Bool_t vertex, Int_t processType);

  void Finish();

  AliCorrection* GetTrack2ParticleCorrection()  {return fTrack2ParticleCorrection;}
  AliCorrection* GetVertexRecoCorrection()      {return fVertexRecoCorrection;}
  AliCorrection* GetTriggerBiasCorrectionINEL() {return fTriggerBiasCorrectionMBToINEL;}
  AliCorrection* GetTriggerBiasCorrectionNSD()  {return fTriggerBiasCorrectionMBToNSD;}
  AliCorrection* GetTriggerBiasCorrectionND()   {return fTriggerBiasCorrectionMBToND;}
  AliCorrection* GetTriggerBiasCorrectionOnePart()   {return fTriggerBiasCorrectionMBToOnePart;}
  AliCorrection* GetCorrection(CorrectionType correctionType);

  void    Reset(void);
  void    Add(AlidNdEtaCorrection* aCorrectionsToAdd, Float_t c=1);
  void    Scale(Float_t c);

  void    SaveHistograms();
  Bool_t  LoadHistograms(const Char_t* dir = 0);
  void    DrawHistograms();
  void    DrawOverview(const char* canvasName = 0);

  Float_t GetMeasuredFraction(CorrectionType correctionType, Float_t ptCutOff, Float_t eta = -100, Int_t vertexBegin = -1, Int_t vertexEnd = -1, Bool_t debug = kFALSE);
  TH1*    GetMeasuredEventFraction(CorrectionType correctionType, Int_t multCut);

  void    ReduceInformation();

protected:
  AliCorrection* fTrack2ParticleCorrection;       //-> handles the track-to-particle correction (only track level (vtx_z, eta, pt))
  AliCorrection* fVertexRecoCorrection;           //-> handles the vertex reconstruction efficiency, (n, vtx_z)
  AliCorrection* fTriggerBiasCorrectionMBToINEL;  //-> handles the trigger bias MB->INEL, function of n and vtx_z
  AliCorrection* fTriggerBiasCorrectionMBToNSD;   //-> handles the trigger bias MB->NSD,  function of n and vtx_z
  AliCorrection* fTriggerBiasCorrectionMBToND;    //-> handles the trigger bias MB->ND,   function of n and vtx_z
  AliCorrection* fTriggerBiasCorrectionMBToOnePart;    //-> handles the trigger bias MB->OnePart,   function of n and vtx_z

private:
  AlidNdEtaCorrection(const AlidNdEtaCorrection&);
  AlidNdEtaCorrection& operator=(const AlidNdEtaCorrection&);

  ClassDef(AlidNdEtaCorrection, 2)
};

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