ROOT logo
#ifndef AliEbyENetChargeFluctuationTask_cxx
#define AliEbyENetChargeFluctuationTask_cxx

//=========================================================================//
//                                                                         //
//             AliEbyE Analysis for Net-Charge     Fluctuation             //
//              Author:   Deepika Rathee  || Satyajit Jena                 //
//                        drathee@cern.ch || sjena@cern.ch                 //
//                                                                         //
//=========================================================================//

#include "THnBase.h"
#include "THn.h"
#include "TH1F.h"
#include "TF1.h"
#include "TProfile2D.h"
#include "TRandom3.h"

class TList;

class AliESDtrack;
class AliMCEvent;
class AliStack;
class AliPIDResponse;
class AliESDtrackCuts;
class AliInputEventHandler;
class AliESDInputHandler;
class AliAODInputHandler;
class AliAODEvent;
class AliAODTrack;
class AliAODMCParticle;
class AliMCParticle;
class TClonesArray;
class AliHelperPID;

#include "AliAnalysisTaskSE.h"

class AliEbyENetChargeFluctuationTask: public AliAnalysisTaskSE {

 public:

  AliEbyENetChargeFluctuationTask( const char *name = "NetChargeFluctuation");
  virtual ~AliEbyENetChargeFluctuationTask();
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *);
  
  void SetVertexDiamond(Double_t vx, Double_t vy, Double_t vz) {
    fVxMax = vx;fVyMax = vy; fVzMax = vz;
  }
  void SetKinematicsCuts(Double_t ptl, Double_t pth, Double_t eta, Double_t rap) {
    fPtMin = ptl; fPtMax = pth; fEtaMin = -eta; fEtaMax = eta; fRapMin = -rap; fRapMax = rap;
  }
  void SetTrackFilterBit(Int_t bit) {fAODtrackCutBit = bit; }
  void SetCentralityEstimator(const char* cent)  { fCentralityEstimator = cent;}
  void SetSystemType(Int_t i) { fSystemType = i; }
 
  void SetPhi(Double_t phil) {fPhiMax = phil;}
  void SetIsMC() {fIsMC = kTRUE;}
  void SetNSubSamples(Int_t i) {fNSubSamples = i;}
  void Debug() {fDebug = kTRUE;}
  void SetIsAOD() {fIsAOD = kTRUE;}
  void SetAnal(Int_t i);// {fAnalType = i; };
  void SetHelperPID(AliHelperPID* pid){ fHelperPID = pid; }
  void SetDca(Double_t dcaxy,Double_t dcaz) { fDcaXy = dcaxy; fDcaZ = dcaz;}
 
  void SetAnalysisCutObject(AliESDtrackCuts *const trackCuts) {
    fESDtrackCuts = trackCuts;}
  

 private:

  Int_t GetPDG(Int_t i) {
    if (i == 0) return 0;  else if (i == 1) return  211;  
    else if (i == 2) return  321; else if (i == 3) return  2212;  
    else return 0; }
  Double_t *CreateLogAxis(Int_t nbins, Double_t xmin, Double_t xmax);
  
  /*---- Setup events ----*/

  Int_t SetupEvent();
  Int_t SetupESD();
  Int_t SetupAOD();
  Int_t SetupMC();
  Int_t SetupEventCR(AliESDInputHandler *esdHandler, AliAODInputHandler *aodHandler, AliMCEvent *mcEvent);
  void  ResetCurrentEvent();
  /* ---- Check Events/Track/AOD/ESD ---- */
  
  Bool_t ChargedTrack(AliVTrack* track);
  Bool_t TriggeredEvents();
  Bool_t RejectedEvent();
  Bool_t ParticleRapidity(AliVParticle *particle, Double_t &yP, Int_t gCurPid);
  Bool_t TrackRapidity(AliVTrack *track, Double_t &yP, Int_t gCurPid);
  Bool_t IsFindableInTPC(Int_t label);
  Bool_t AcceptEvent(AliAODEvent *event, Int_t cent) const; //! accept eventc
  Bool_t IsEventStats(Int_t *aEventCuts);
  Bool_t AcceptTrack(AliVTrack *track) const;
  Bool_t AcceptTrackMC(AliVParticle *particle, Int_t idxMC) const;

  /* ------ Containers ------ */
  
  void InitPhy();  
  void CreateQA();
  void CreateBasicQA();
  void CreateBasicHistos(const Char_t *name, const Char_t *title);
  void CreateRatioHistos(const Char_t *name, const Char_t *title,Bool_t isPer);
  void CreateGroupHistos(const Char_t *name, const Char_t *title, Int_t nSample,Bool_t isPer);
  void FillBasicHistos(const Char_t *name, Bool_t isMC);
  void FillRatioHistos(const Char_t *name,Bool_t isMC,Bool_t isPer);
  void FillGroupHistos(const Char_t *name, Int_t iSub, Bool_t isMC,Bool_t isPer);
  
 
  void FillCC(Int_t i);
  void FillRCC(Int_t i);
  void FillRecCE(Int_t i);
  void FillRecDE(Int_t i);
  void FillRecDED(Int_t i);
  void FillGenCE(Int_t i);
  void FillQAThnRec(AliVTrack *track, Int_t gPid, Double_t rap);
  void FillQAThnMc(AliVParticle *particle, Int_t gPid, Double_t rap);

  /* ------ Get-Calculate-Fill ------ */

  void ExecAA();
  void ExecpA();
  void Execpp();
  void CalEC();
  void CalED();
  void CreateCE(); 
  void CreateDEM(); 
  void CreateDED(); 
  void CalculateCE(Int_t gPid);
  void CalculateDE(Int_t gPid);
  void CalculateDED(Int_t gPid);
  
  /* Global Members Private */

  AliInputEventHandler *fInputEventHandler; // Input Handler
  AliESDEvent          *fESD;               // Current ESD events
  AliAODEvent          *fAOD;               // Current AOD events
  AliMCEvent           *fMCEvent;           // Current MC Event
  AliStack             *fStack;             // Stak tree
  AliAODInputHandler   *fAODHandler;        // AOD handler
  AliESDInputHandler   *fESDHandler;        // ESD handler
  AliStack             *fMCStack;           // MC Stack
  TClonesArray         *fArrayMC;           // AOD MC stack
  AliESDtrackCuts      *fESDtrackCuts;      // ESD Track Cuts

  TList     *fQaList;                       // Tree of QA
  TList     *fPhyList;                      // For Analysis
  TList     *fDcaList;                      // dca for Both Data and MC 
  TList     *fEffList;                      // Correction List

  Int_t      fSystemType;                   // Translated to Int_t 0:"pp", 1:"pA", 2:"AA"
  TString    fCentralityEstimator;          // "V0M","TRK","TKL","ZDC","FMD"  
 
  Double_t   fVxMax;                        // X vertex  Range
  Double_t   fVyMax;                        // Y vertex Range
  Double_t   fVzMax;                        // Z vertex Range
  Double_t   fPhiMin;                       // Phi Minimum
  Double_t   fPhiMax;                       // Phi Maximum
  Double_t   fPtMin;                        // pT Minimum
  Double_t   fPtMax;                        // Pt Maximum
  Double_t   fEtaMin;                       // Eta Minimum
  Double_t   fEtaMax;                       // Eta Maximum
  Double_t   fRapMin;                       // Rapidity Minimum
  Double_t   fRapMax;                       // Rapidity Maximum
  Double_t   fDcaXy;                        // DCA Xy
  Double_t   fDcaZ;                         // DCA Z
  Double_t   fCentralityBin;                // Centrality bin of current event within max centrality bin
  Double_t   fCentralityPercentile;         // Centrality percentile of current event
  Double_t   fNp[4][2];                     // Array of particle/anti-particle counts
  Double_t   fMCNp[4][2];                   // Array of MC particle/anti-particle counts
  Double_t   fRedFactp[9][2];               // Array of particle/anti-particle reduced factorial
  Double_t   fCurGen[8];                    // Current Gen Track
  Double_t   fCurGenD[8];                   // Current info on DGen
  Double_t   fCurRecD[7];                   // Current DRec
  Double_t   fCurRec[5];                    // Current Rec info
  Double_t   fCurCont[6];                   // Current Contamination

  Float_t    fMinTrackLengthMC;             // Min track length for MC tracks
  Int_t      fAODtrackCutBit;               // AOD BITs
  Int_t      fNSubSamples;                  // N subsamples
  Int_t      fSubSampleIdx;                 // Subsample idx for current event
  Int_t      fOrder;                        // Max order of higher order distributions
  Int_t      fNTriggers;                    // N triggers used
  Int_t      fHEventStatMax;                // Max N cuts to be included in HEventSta
  Int_t      fNCentralityBins;              // N centrality bins used
  Int_t      fCentralityBinMax;             // Max Cent
  Int_t      fNTracks;                      // Number of Tracks of Current Events

  Bool_t     fIsMC;                         // Is MC event - Auto set by Add Task
  Bool_t     fIsRatio;                      // Is Ratio
  Bool_t     fIsAOD;                        // analysis mode: 0 = ESDs  | 1 = AODs
  Bool_t     fIsSub;                        // analysis mode SS  
  Bool_t     fIsBS;                         // analysis mode BS
  Bool_t     fIsPer;                        // analysis mode PER
  Bool_t     fIsEff;                        // analysis mode Eff
  Bool_t     fDebug;                        // Check for QA
  Bool_t     fIsQa;                         // Check for QA
  Bool_t     fIsPhy;                        // Check for QA
  Bool_t     fIsDca;                        // Check for QA

  TRandom3  *fRan;                          // Radom Number BS
  TRandom3  *fRanIdx;                       // Random Number SS

  AliHelperPID *fHelperPID;                 // Customised HelperPID class

  AliEbyENetChargeFluctuationTask(const AliEbyENetChargeFluctuationTask&);
  AliEbyENetChargeFluctuationTask& operator = (const AliEbyENetChargeFluctuationTask&);
  ClassDef(AliEbyENetChargeFluctuationTask, 1);

};

#endif

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