ROOT logo
// -*- C++ -*-
// $Id: AliAnalysisTaskLongRangeCorrelations.h 405 2014-03-21 11:49:16Z cmayer $
#ifndef _AliAnalysisTaskLongRangeCorrelations_H_
#define _AliAnalysisTaskLongRangeCorrelations_H_

/* Copyright(c) 2012, ALICE Experiment at CERN, All rights reserved.      *
 * See cxx source for full Copyright notice                               */

////////////////////////////////////////////////////////////////////////
//
// Analysis class for Long-range Correlations
//
// Look for correlations in eta (and in phi)
//
// This class needs input AODs.
// The output is a list of analysis-specific containers.
//
//    Author:
//    Christoph Mayer
// 
////////////////////////////////////////////////////////////////////////


class TAxis;
class TClonesArray;
class TList;
class TObjArray;

class AliAODEvent;
class AliAODHeader;
class AliEventPoolManager;
class AliTHn;

#include <TObject.h>
#include "AliAnalysisTaskSE.h"

class AliAnalysisTaskLongRangeCorrelations : public AliAnalysisTaskSE { 
public: 
  AliAnalysisTaskLongRangeCorrelations(const char *name="AliAnalysisTaskLongRangeCorrelations");
  virtual ~AliAnalysisTaskLongRangeCorrelations();

  /*   virtual void NotifyRun(); */
  virtual void UserCreateOutputObjects();
  virtual void UserExec(Option_t *);
  virtual void Terminate(Option_t *);

  void SetRunMixing(Bool_t runMixing)      { fRunMixing    = runMixing; }
  void SetMixingTracks(Int_t mixingTracks) { fMixingTracks = mixingTracks; }
  void SetTrackFilter(Int_t trackFilter)   { fTrackFilter  = trackFilter; }

  void SetCentralityRange(Double_t centMin, Double_t centMax) {
    fCentMin = centMin; fCentMax = centMax;
  }
  void SetPtRange(Double_t ptMin, Double_t ptMax) {
    fPtMin = ptMin; fPtMax = ptMax;
  }
  void SetPhiRange(Double_t phiMin, Double_t phiMax) {
    fPhiMin = phiMin; fPhiMax = phiMax;
  }
  void SetMaxAbsVertexZ(Double_t maxAbsVertexZ) { fMaxAbsVertexZ = maxAbsVertexZ; }

  void SetSelectPrimaryMCParticles(Int_t flagMC, Int_t flagMCData) {
    fSelectPrimaryMCParticles     = flagMC;
    fSelectPrimaryMCDataParticles = flagMCData;
  }

  void SetRangeN(Int_t nMin, Int_t nMax, Double_t deltaEta) {
    fNMin = nMin;
    fNMax = nMax;
    fDeltaEta = deltaEta;
  }

  Double_t GetDeltaEta() const { return fDeltaEta; }
  Int_t GetNMin() const { return fNMin; }
  Int_t GetNMax() const { return fNMax; }

  TString GetOutputListName() const;

protected:
  // for now up to second moments:
  // <n_1>(phi_1,eta_1)
  // <n_2>(phi_2,eta_2) 
  // <n_1, n_2>(phi_1,eta_1;phi_2,eta_2)
  void       CalculateMoments(TString, TObjArray*, TObjArray*, Double_t, Double_t); 
  void       ComputeNXForThisEvent(TObjArray*, const char*, Double_t, Double_t);
  THnSparse* ComputeNForThisEvent(TObjArray*, const char*, Double_t) const;
  void       FillNEtaHist(TString, THnSparse*, Double_t);

  TObjArray* GetAcceptedTracks(AliAODEvent*, TClonesArray*, Double_t);
  TObjArray* GetAcceptedTracks(TClonesArray*, Double_t);

  // filling histograms by name
  void Fill(const char*, Double_t);                           // TH1 weight=1
  void Fill(const char*, Double_t, Double_t );                // TH2 weight=1
  void Fill(const char*, Double_t, Double_t, Double_t);       // TH3 weight=1
  void Fill(const char*, const Double_t*, Double_t weight=1); // THnSparse

  void SetupForMixing();

  THnSparse* MakeHistSparsePhiEta(const char* name) const;
  AliTHn* MakeHistPhiEta(const char* name) const;
  AliTHn* MakeHistPhiEtaPhiEta(const char* name) const; 

private:
  TList*               fOutputList;         //! Output list
  TAxis*               fVertexZ;            //! vertex z bins
  Bool_t               fRunMixing;          //
  AliEventPoolManager* fPoolMgr;            //! event pool manager  
  Int_t                fMixingTracks;       //
  Int_t                fTrackFilter;        //
  Double_t             fCentMin, fCentMax;  // centrality range
  Double_t             fPtMin, fPtMax;      // P_{T} range
  Double_t             fPhiMin, fPhiMax;    // #phi range
  Double_t             fMaxAbsVertexZ;      // max abs(zvertex)
  Int_t                fSelectPrimaryMCParticles;     // 0: no, 1: yes, -1: only non-primary particles
  Int_t                fSelectPrimaryMCDataParticles; // 0: no, 1: yes, -1: only non-primary particles
  Int_t                fNMin;
  Int_t                fNMax;
  Double_t             fDeltaEta;
  // histogram data
  Int_t    fnBinsCent, fnBinsPt, fnBinsPhi, fnBinsEta;
  Double_t fxMinCent,  fxMinPt,  fxMinPhi,  fxMinEta;
  Double_t fxMaxCent,  fxMaxPt,  fxMaxPhi,  fxMaxEta;  

  AliAnalysisTaskLongRangeCorrelations(const AliAnalysisTaskLongRangeCorrelations&); // not implemented
  AliAnalysisTaskLongRangeCorrelations& operator=(const AliAnalysisTaskLongRangeCorrelations&); // not implemented
  
  ClassDef(AliAnalysisTaskLongRangeCorrelations, 1);
} ; 

class LRCParticle : public TObject {
public:
  LRCParticle(Double_t eta=0, Double_t phi=0)
    : fEta(eta), fPhi(phi) {}
  virtual ~LRCParticle() {}

  Double_t Eta() const { return fEta; }
  Double_t Phi() const { return fPhi; }

protected:
private:
  LRCParticle(const LRCParticle&);
  LRCParticle& operator=(const LRCParticle&);

  Double_t fEta;
  Double_t fPhi;
  ClassDef(LRCParticle, 1);
} ;
#endif // _AliAnalysisTaskLongRangeCorrelations_H_

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