ROOT logo

#ifndef AlidNdPtAnalysisPbPb_H
#define AlidNdPtAnalysisPbPb_H


//------------------------------------------------------------------------------
// AlidNdPtAnalysisPbPb class used for dNdPt analysis.in PbPb collision 
// 
// Author: J.Otwinowski 04/11/2008 
// last change: 2011-04-04 by M.Knichel
//------------------------------------------------------------------------------

class iostream;

class TFile;
class TCint;
class TProfile;
class TFolder;
class TObjArray;
class TString;
class THnSparse;

class AliESDtrackCuts;
class AliVertexerTracks;
class AliESD;
class AliESDfriend;
class AliESDfriendTrack;
class AlidNdPtHelper;
class AliTriggerAnalysis;

#include "AlidNdPt.h"

class AlidNdPtAnalysisPbPb : public AlidNdPt {
public :
  AlidNdPtAnalysisPbPb(); 
  AlidNdPtAnalysisPbPb(Char_t* name, Char_t* title);
  ~AlidNdPtAnalysisPbPb();

  // Init data members
  virtual void Init();

  // Process events
  virtual void Process(AliESDEvent *const esdEvent=0, AliMCEvent *const mcEvent=0);

  // Merge output objects (needed by PROOF) 
  virtual Long64_t Merge(TCollection* const list);

  // Analyse output histograms 
  virtual void Analyse();

  // Export objects to folder
  virtual TFolder *ExportToFolder(TObjArray * const array=0);

  // Get analysis folder
  TFolder* GetAnalysisFolder() const {return fAnalysisFolder;}

  // Fill control histograms
  void SetHistogramsOn(const Bool_t histOn=kTRUE) {fHistogramsOn = histOn;}
  Bool_t IsHistogramsOn() const {return fHistogramsOn;}
    
  // Create folder for analysed histograms
  TFolder *CreateFolder(TString folder = "folderdNdPtAnalysis",TString title = "Analysed dNdPt histograms");
  
  // Set binning for Histograms (if not set default binning is used)
  void SetBinsMult(Int_t nbins, Double_t* edges) { fMultNbins = nbins; fBinsMult = CloneArray(nbins+1,edges); }
  void SetBinsPt(Int_t nbins, Double_t* edges) { fPtNbins = nbins; fBinsPt = CloneArray(nbins+1,edges); }
  void SetBinsPtCorr(Int_t nbins, Double_t* edges) { fPtCorrNbins = nbins; fBinsPtCorr = CloneArray(nbins+1,edges); }
  void SetBinsEta(Int_t nbins, Double_t* edges) { fEtaNbins = nbins; fBinsEta = CloneArray(nbins+1,edges); }
  void SetBinsZv(Int_t nbins, Double_t* edges) { fZvNbins = nbins; fBinsZv= CloneArray(nbins+1,edges); }
  void SetBinsCentrality(Int_t nbins, Double_t* edges) { fCentralityNbins = nbins; fBinsCentrality = CloneArray(nbins+1,edges); }

  // Fill histograms
  void FillHistograms(AliESDtrack *const esdTrack, AliStack *const stack, AlidNdPtHelper::TrackObject trackObj, Float_t centralityF);
  void FillHistograms(AliStack *const stack, Int_t label, AlidNdPtHelper::TrackObject trackObj, Float_t centralityF);
  void FillHistograms(TObjArray *const allChargedTracks,Int_t *const labelsAll,Int_t multAll,Int_t *const labelsAcc,Int_t multAcc,Int_t *const labelsRec,Int_t multRec,  Float_t centralityF);

  // Getters
  THnSparseF *GetTrackPtCorrelationMatrix()   const {return fTrackPtCorrelationMatrix;}
  //
  THnSparseF *GetGenEventMatrix() const {return fGenEventMatrix;}
  THnSparseF *GetTriggerEventMatrix() const {return fTriggerEventMatrix;}
  THnSparseF *GetRecEventMatrix() const {return fRecEventMatrix;}
  // 
  THnSparseF *GetGenTrackEventMatrix() const {return fGenTrackEventMatrix;}
  THnSparseF *GetTriggerTrackEventMatrix() const {return fTriggerTrackEventMatrix;}
  THnSparseF *GetRecTrackEventMatrix() const {return fRecTrackEventMatrix;}
  //
  THnSparseF *GetGenTrackMatrix() const {return fGenTrackMatrix;}
  THnSparseF *GetGenPrimTrackMatrix() const {return fGenPrimTrackMatrix;}
  THnSparseF *GetRecPrimTrackMatrix() const {return fRecPrimTrackMatrix;}

  THnSparseF *GetRecTrackMatrix() const {return fRecTrackMatrix;}
  THnSparseF *GetRecSecTrackMatrix() const {return fRecSecTrackMatrix;}
  THnSparseF *GetRecMultTrackMatrix() const {return fRecMultTrackMatrix;}
  //
  // control histograms
  //
  THnSparseF *GetMCEventHist1() const {return fMCEventHist1;}
  THnSparseF *GetRecEventHist1() const {return fRecEventHist1;}
  THnSparseF *GetRecEventHist2() const {return fRecEventHist2;}


  THnSparseF *GetRecMCEventHist1() const {return fRecMCEventHist1;}
  THnSparseF *GetRecMCTrackHist1() const {return fRecMCTrackHist1;}

  THnSparseF *GetRecMCEventHist2() const {return fRecMCEventHist2;}

  THnSparseF *GetMCTrackHist1(Int_t i) const {return fMCTrackHist1[i];}
  THnSparseF *GetMCPrimTrackHist1(Int_t i) const {return fMCPrimTrackHist1[i];}
  THnSparseF *GetMCPrimTrackHist2(Int_t i) const {return fMCPrimTrackHist2[i];}
  THnSparseF *GetMCSecTrackHist1(Int_t i) const {return fMCSecTrackHist1[i];}

  THnSparseF *GetRecTrackHist1(Int_t i) const {return fRecTrackHist1[i];}
  THnSparseF *GetRecTrackHist2(Int_t i) const {return fRecTrackHist2[i];}
  THnSparseF *GetRecTrackMultHist1(Int_t i) const {return fRecTrackMultHist1[i];}


  THnSparseF *GetMCMultRecTrackHist1() const {return fMCMultRecTrackHist1;}

  THnSparseF *GetRecTrackHist3() const {return fRecTrackHist3;}
  
  TString GetCentralityEstimator() const {return fCentralityEstimator; }
   
  void SetCentralityEstimator(TString centEst="V0M") { fCentralityEstimator = centEst; }

private:

  // analysis folder 
  TFolder *fAnalysisFolder; // folder for analysed histograms
  Bool_t fHistogramsOn; // switch on/off filling of control histograms 

  // 
  // correlation matrices (histograms)
  //
  // rec. track pt vs true track pt correlation matrix for given eta
  THnSparseF *fTrackPtCorrelationMatrix; //-> Pt:mcPt:mcEta:centrality

  //
  // event level correction 
  //
  // all generated
  THnSparseF *fGenEventMatrix; //-> mcZv:multMB:centrality 

  // trigger bias corrections (fTriggerEventMatrix / fGenEventMatrix)
  THnSparseF *fTriggerEventMatrix; //-> mcZv:multMB:centrality

  // event vertex rec. eff correction (fRecEventMatrix / fTriggerEventMatrix)
  THnSparseF *fRecEventMatrix; //-> mcZv:multMB:centrality 

  // track-event level correction 
  THnSparseF *fGenTrackEventMatrix; //-> mcZv:mcPt:mcEta:centrality

  // trigger bias corrections (fTriggerTrackEventMatrix / fGenTrackEventMatrix)
  THnSparseF *fTriggerTrackEventMatrix; //-> mcZv:mcPt:mcEta:centrality

  // event vertex rec. corrections (fRecTrackEventMatrix / fTriggerTrackEventMatrix)
  THnSparseF *fRecTrackEventMatrix; //-> mcZv:Pt:mcEta:centrality

  //
  // track level correction 
  //
  // track rec. efficiency correction (fRecPrimTrackMatrix / fGenPrimTrackMatrix)
  THnSparseF *fGenTrackMatrix; //-> mcZv:mcPt:mcEta:centrality
  THnSparseF *fGenPrimTrackMatrix; //-> mcZv:mcPt:mcEta:centrality
  THnSparseF *fRecPrimTrackMatrix; //-> mcZv:mcPt:mcEta:centrality
  // secondary track contamination correction (fRecSecTrackMatrix / fRecTrackMatrix)
  THnSparseF *fRecTrackMatrix;    //-> mcZv:mcPt:mcEta:centrality
  THnSparseF *fRecSecTrackMatrix; //-> mcZv:mcPt:mcEta:centrality
  // multiple rec. track corrections (fRecMultTrackMatrix / fRecTrackMatrix)
  THnSparseF *fRecMultTrackMatrix; //-> mcZv:Pt:mcEta:centrality

  //
  // ESD and MC control analysis histograms
  //
  // THnSparse event histograms
  THnSparseF *fMCEventHist1;  //-> mcXv:mcYv:mcZv:centrality
  THnSparseF *fRecEventHist1; //-> Xv:Yv:Zv:centrality
  THnSparseF *fRecEventHist2; //-> Zv:multMB:mult:centrality
  THnSparseF *fRecMCEventHist1; //-> Xv-mcXv:Yv-mcYv:Zv-mcZv:centrality
  THnSparseF *fRecMCEventHist2; //-> Xv-mcXv:Zv-mcZv:mult:centrality

  // [0] - after charged track selection, [1] - after acceptance cuts, [2] - after esd track cuts
  THnSparseF *fMCTrackHist1[AlidNdPtHelper::kCutSteps];     //-> mcPt:mcEta:mcPhi:centrality
  THnSparseF *fMCPrimTrackHist1[AlidNdPtHelper::kCutSteps]; //-> mcPt:mcEta:pid:mech:mother:centrality
  THnSparseF *fMCPrimTrackHist2[AlidNdPtHelper::kCutSteps]; //-> pdg:mech:mother:centrality
  THnSparseF *fMCSecTrackHist1[AlidNdPtHelper::kCutSteps];  //-> mcPt:mcEta:pid:mech:mother:centrality

  THnSparseF *fRecTrackHist1[AlidNdPtHelper::kCutSteps];     //-> Pt:Eta:Phi:centrality
  THnSparseF *fRecTrackHist2[AlidNdPtHelper::kCutSteps];     //-> Zv:Pt:Eta:centrality
  THnSparseF *fRecTrackMultHist1[AlidNdPtHelper::kCutSteps]; //-> Pt:mult:centrality
  THnSparseF *fRecMCTrackHist1; //-> mcPt:mcEta:(Pt-mcPt)/mcPt:(Eta-mcEta):centrality

  //multple reconstructed tracks
  THnSparseF *fMCMultRecTrackHist1; //-> mcPt:mcEta:pid:centrality
  // track control histograms
  THnSparseF *fRecTrackHist3;  //-> nclust:chi2:Pt:Eta:Phi:centrality

  AliTriggerAnalysis *fTriggerAnalysis; //! trigger analysis object;
  TString fCentralityEstimator;     // use centrality can be "VOM" (default), "FMD", "TRK", "TKL", "CL0", "CL1", "V0MvsFMD", "TKLvsV0M", "ZEMvsZDC"
  
  //binning for THNsparse
  Int_t	fMultNbins;
  Int_t fPtNbins;
  Int_t fPtCorrNbins;
  Int_t fEtaNbins;
  Int_t fZvNbins;
  Int_t fCentralityNbins;
  Double_t* fBinsMult;
  Double_t* fBinsPt;
  Double_t* fBinsPtCorr;
  Double_t* fBinsEta;
  Double_t* fBinsZv;
  Double_t* fBinsCentrality;
  
  Bool_t fIsInit;
  

  AlidNdPtAnalysisPbPb(const AlidNdPtAnalysisPbPb&); // not implemented
  AlidNdPtAnalysisPbPb& operator=(const AlidNdPtAnalysisPbPb&); // not implemented  

  ClassDef(AlidNdPtAnalysisPbPb,6);
};

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