ROOT logo
/////////////////////////////////////////////////////
// AliAnalysisTaskFlowEvent:
// analysis task to fill the flow event 
// and make it available to the flow analysis methods.
//////////////////////////////////////////////////////

/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
* See cxx source for full Copyright notice */
/* $Id: $ */

#ifndef ALIANALYSISTASKFLOWEVENT_H
#define ALIANALYSISTASKFLOWEVENT_H

#include "AliFlowTrackSimple.h"

class AliCFManager;
class AliFlowEventCuts;
class AliFlowTrackCuts;
class AliFlowEventSimpleMaker;
class AliFlowEvent;
class TList;
class TF1;
class TRandom3;
class AliAnalysisTaskSE;
class TString;
class AliESDpid;

class AliAnalysisTaskFlowEvent : public AliAnalysisTaskSE {
 public:
  AliAnalysisTaskFlowEvent();
  AliAnalysisTaskFlowEvent(const char *name, TString RPtype = "", Bool_t QAon = kFALSE, UInt_t seed=666, Bool_t bCandidates=kFALSE);
  virtual ~AliAnalysisTaskFlowEvent();
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *);
  virtual void   NotifyRun();

  void    SetAnalysisType(TString type) { this->fAnalysisType = type; }
  TString GetAnalysisType() const       { return this->fAnalysisType; }

  void    SetRPType(TString rptype) { this->fRPType = rptype; }
  TString GetRPType() const         { return this->fRPType; }

  void    SetMinMult(Int_t multmin)    {this->fMinMult = multmin; }
  Int_t   GetMinMult() const           {return this->fMinMult; }
  void    SetMaxMult(Int_t multmax)    {this->fMaxMult = multmax; }
  Int_t   GetMaxMult() const           {return this->fMaxMult; }

  void SetSubeventEtaRange(Double_t minA, Double_t maxA, Double_t minB, Double_t maxB)
    {this->fMinA = minA; this->fMaxA = maxA; this->fMinB = minB; this->fMaxB = maxB; }
  Double_t GetMinA() const {return this->fMinA;}
  Double_t GetMaxA() const {return this->fMaxA;}
  Double_t GetMinB() const {return this->fMinB;}
  Double_t GetMaxB() const {return this->fMaxB;}
  
  void DefineDeadZone( Double_t etaMin, Double_t etaMax, Double_t phiMin, Double_t phiMax )
  {this->fExcludedEtaMin = etaMin; this->fExcludedEtaMax = etaMax; 
    this->fExcludedPhiMin = phiMin; this->fExcludedPhiMax = phiMax; }

  void          SetCutsEvent(AliFlowEventCuts* cutsEvent) {fCutsEvent=cutsEvent;}
  AliFlowEventCuts* GetCutsEvent() const {return fCutsEvent;}
  void          SetCutsRP(AliFlowTrackCuts* cutsRP) {fCutContainer->AddAt(cutsRP,0); fCutsRP=cutsRP; cutsRP->SetPOItype(0); }
  AliFlowTrackCuts* GetCutsRP() const {return fCutsRP;} //to be reimplemented
  void          SetCutsPOI(AliFlowTrackCuts* cutsPOI) {fCutContainer->AddAt(cutsPOI,1); fCutsPOI=cutsPOI; cutsPOI->SetPOItype(1); }
  AliFlowTrackCuts* GetCutsPOI() const {return fCutsPOI;} //to be reimplemented

  void          SetCFManager1(AliCFManager* cfmgr) {this->fCFManager1 = cfmgr; } 
  AliCFManager* GetCFManager1() const {return this->fCFManager1; }
  void          SetCFManager2(AliCFManager* cfmgr) {this->fCFManager2 = cfmgr; } 
  AliCFManager* GetCFManager2() const       {return this->fCFManager2; }
  TList*        GetQAList()      const      {return fQAList; }
  void          SetQAOn(Bool_t kt)        {fQAon = kt; }
  Bool_t        GetQAOn()   const         {return fQAon; }

  void          SetShuffleTracks(Bool_t b)  {fShuffleTracks=b;}

  // setters for common constants
  void SetNbinsMult( Int_t i ) { fNbinsMult = i; }
  void SetNbinsPt( Int_t i )   { fNbinsPt = i; }
  void SetNbinsPhi( Int_t i )  { fNbinsPhi = i; }
  void SetNbinsEta( Int_t i )  { fNbinsEta = i; }
  void SetNbinsQ( Int_t i )    { fNbinsQ = i; }
  void SetNbinsMass( Int_t i ) { fNbinsMass = i; }
   
  void SetMultMin( Double_t i ) { fMultMin = i; }
  void SetMultMax( Double_t i ) { fMultMax = i; }
  void SetPtMin( Double_t i )   { fPtMin = i; }
  void SetPtMax( Double_t i )   { fPtMax = i; }
  void SetPhiMin( Double_t i )  { fPhiMin = i; }
  void SetPhiMax( Double_t i )  { fPhiMax = i; }
  void SetEtaMin( Double_t i )  { fEtaMin = i; }
  void SetEtaMax( Double_t i )  { fEtaMax = i; }
  void SetQMin( Double_t i )    { fQMin = i; }
  void SetQMax( Double_t i )    { fQMax = i; }
  void SetMassMin( Double_t i ) { fMassMin = i; }
  void SetMassMax( Double_t i ) { fMassMax = i; }
  void SetHistWeightvsPhiMin( Double_t i ) {fHistWeightvsPhiMin=i;}
  void SetHistWeightvsPhiMax( Double_t i ) {fHistWeightvsPhiMax=i;}
  // end setters common constants

  // setters for adding by hand flow values (afterburner)
  void SetAfterburnerOn(Bool_t b=kTRUE) {fAfterburnerOn=b;}
  void SetNonFlowNumberOfTrackClones(Int_t n) {fNonFlowNumberOfTrackClones=n;}
  void SetPtDifferentialV2( TF1 *gPtV2) {
    fDifferentialV2 = gPtV2;}
  void SetFlow( Double_t v1, Double_t v2, Double_t v3=0.0, Double_t v4=0.0, Double_t v5=0.0)
               {fV1=v1;fV2=v2;fV3=v3;fV4=v4;fV5=v5;}
  // end setters afterburner

 private:

  AliAnalysisTaskFlowEvent(const AliAnalysisTaskFlowEvent& aAnalysisTask);
  AliAnalysisTaskFlowEvent& operator=(const AliAnalysisTaskFlowEvent& aAnalysisTask); 

  //  TFile*        fOutputFile;    // temporary output file for testing
  //  AliESDEvent*  fESD;           // ESD object
  //  AliAODEvent*  fAOD;           // AOD object
  TString       fAnalysisType;      // can be MC, ESD or AOD
  TString       fRPType;            // can be Global or Tracklet or FMD
  AliCFManager* fCFManager1;        // correction framework manager
  AliCFManager* fCFManager2;        // correction framework manager
  AliFlowEventCuts* fCutsEvent;     //event cuts
  AliFlowTrackCuts* fCutsRP;        //cuts for RPs
  AliFlowTrackCuts* fCutsPOI;       //cuts for POIs
  TList*            fCutContainer;  //contains the cut objects
  TList*        fQAList;             // QA histogram list
  Int_t         fMinMult;           // Minimum multiplicity from tracks selected using CORRFW
  Int_t         fMaxMult;           // Maximum multiplicity from tracks selected using CORRFW 
  Double_t      fMinA;              // Minimum of eta range for subevent A
  Double_t      fMaxA;              // Maximum of eta range for subevent A
  Double_t      fMinB;              // Minimum of eta range for subevent B
  Double_t      fMaxB;              // Maximum of eta range for subevent B

  Bool_t fQAon;                       // flag to set the filling of the QA hostograms
  Bool_t fLoadCandidates;           // true if reciving candidates collection

  // setters for common constants
  //histogram sizes
  Int_t  fNbinsMult; // histogram size
  Int_t  fNbinsPt;   // histogram size
  Int_t  fNbinsPhi;  // histogram size
  Int_t  fNbinsEta;  // histogram size
  Int_t  fNbinsQ;    // histogram size
  Int_t  fNbinsMass; // histogram size
 
  // Histograms limits
  Double_t  fMultMin;  // histogram limit 
  Double_t  fMultMax;  // histogram limit
  Double_t  fPtMin;    // histogram limit
  Double_t  fPtMax;    // histogram limit
  Double_t  fPhiMin;   // histogram limit
  Double_t  fPhiMax;   // histogram limit
  Double_t  fEtaMin;   // histogram limit
  Double_t  fEtaMax;   // histogram limit
  Double_t  fQMin;     // histogram limit
  Double_t  fQMax;     // histogram limit
  Double_t  fMassMin;  // histogram limit
  Double_t  fMassMax;  // histogram limit
  Double_t fHistWeightvsPhiMin; //histogram limit
  Double_t fHistWeightvsPhiMax; //histogram limit
  // end common constants

  // Excluding a range
  Double_t  fExcludedEtaMin;  // excluded region limit 
  Double_t  fExcludedEtaMax;  // excluded region limit 
  Double_t  fExcludedPhiMin;  // excluded region limit 
  Double_t  fExcludedPhiMax;  // excluded region limit 
  // End of excluding a range

  // values afterburner
  Bool_t    fAfterburnerOn;              // do we afterburn?
  Int_t     fNonFlowNumberOfTrackClones; // number of times to clone the particles (nonflow) 
  Double_t  fV1;        // Add Flow. Must be in range [0,0.5].
  Double_t  fV2;        // Add Flow. Must be in range [0,0.5].
  Double_t  fV3;        // Add Flow. Must be in range [0,0.5].
  Double_t  fV4;        // Add Flow. Must be in range [0,0.5].
  Double_t  fV5;        // Add Flow. Must be in range [0,0.5].
  TF1 *fDifferentialV2; // pt-differential v2

  AliFlowEvent* fFlowEvent; //flowevent
  Bool_t fShuffleTracks;    //serve the tracks shuffled
    
  TRandom3* fMyTRandom3;     // TRandom3 generator
  // end afterburner
  
  ClassDef(AliAnalysisTaskFlowEvent, 1); // example of analysis
};

#endif

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