ROOT logo
#ifndef ALIANALYSISTASKITSSATRACKS
#define ALIANALYSISTASKITSSATRACKS

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

//*************************************************************************
// Class AliAnalysisTaskITSsaTracks
// AliAnalysisTaskSE to extract QA and performance histos for ITS standalone tracks
// 
//
// Authors: L. Milano, milano@to.infn.it
//          F. Prino, prino@to.infn.it
//          
//*************************************************************************

class TList;
class TNtuple;
class TH1F;
class TH2F;
class TTree;
class TString;
class AliESDEvent;
class AliESDfriend;
class AliTriggerConfiguration;

#include "AliAnalysisTaskSE.h"

class AliAnalysisTaskITSsaTracks : public AliAnalysisTaskSE {

 public:
  
  AliAnalysisTaskITSsaTracks();
  virtual ~AliAnalysisTaskITSsaTracks();

  virtual void   UserExec(Option_t *option);
  virtual void   UserCreateOutputObjects();
  virtual void   Terminate(Option_t *option);

  void SetMinITSPoints(Int_t minp=4){
    fMinITSpts=minp;
  }
  void SetMinTPCPoints(Int_t minp=50){
    fMinTPCpts=minp;
  }
  void SetMinSPDPoints(Int_t minp=1){
    fMinSPDpts=minp;
  }
  void SetMinPointsForITSPid(Int_t minp=3){
    fMinPtsforPid=minp;
  }
  void SetITSChi2Cut(Float_t maxchi2=2.5){
    fMaxITSChi2Clu=maxchi2;
  }

  void SetPtBins(Int_t n, Double_t* lim);

  void RequirePointInLayer(Int_t iLay){
    if(iLay<6) fRequirePoint[iLay]=kTRUE;
  }
  void RequireInnerSPD(){
    fRequirePoint[0]=kTRUE;
  }
  void RequireBothSPD(){
    fRequirePoint[0]=kTRUE;
    fRequirePoint[1]=kTRUE;
  }

  void SetFillNtuple(Bool_t fill=kTRUE){
    fFillNtuple=fill;
  }  
  void SetReadMC(Bool_t optMC=kTRUE){
    fReadMC=optMC;
  }
  void SetUseMCtruthForPID(Bool_t opt=kTRUE){
    fUseMCId=opt;
  }

  void SetUseCentrality(Bool_t usec){
    fUseCentrality=usec;
  }
  void SetCentralityRange(Float_t minc, Float_t maxc){
    fMinCentrality=minc; fMaxCentrality=maxc; fUseCentrality=kTRUE;
  }
  void SetRequireSPDInTriggerCluster(Bool_t opt=kTRUE){
    fRequireSPD=opt;
  }
  void SetRequireSDDInTriggerCluster(Bool_t opt=kTRUE){
    fRequireSDD=opt;
  }
  void SetRequireSSDInTriggerCluster(Bool_t opt=kTRUE){
    fRequireSSD=opt;
  }

 private:
  enum {kPion=0,kKaon,kProton,kNspecies};
  enum {kTypeTPCITS=0, kTypeITSsa, kTypeITSpureSA, kNtrackTypes};
  enum {kMaxPtBins=40};

  AliAnalysisTaskITSsaTracks(const AliAnalysisTaskITSsaTracks &source);
  AliAnalysisTaskITSsaTracks& operator=(const AliAnalysisTaskITSsaTracks &source);
  
  TList*  fOutput;          //! list of output histos
  TH1F*   fHistNEvents;     //! histo with N of events  

  
  TH1F*   fHistPt[kNtrackTypes];          //! pt distr., no PID
  TH1F*   fHistPtGood[kNtrackTypes];      //! pt distr. good tracks, no PID
  TH1F*   fHistPtFake[kNtrackTypes];      //! pt distr. fake tracks, no PID

  TH2F*   fHistEtaPhi[kNtrackTypes];      //! etaphi distr., no PID
  TH2F*   fHistEtaPhiGood[kNtrackTypes];  //! etaphi distr. good tracks, no PID
  TH2F*   fHistEtaPhiFake[kNtrackTypes];  //! etaphi distr. fake tracks, no PID

  TH2F*   fHistEtaPhiAny[kNtrackTypes];   //! etaphi distr., no PID, no ITS requirements
  TH2F*   fHistEtaPhi1SPD[kNtrackTypes];  //! etaphi distr., no PID, at least 1 SPD
  TH2F*   fHistEtaPhi4Clu[kNtrackTypes];  //! etaphi distr., no PID, 1SPD+ 3 dEdx
  TH2F*   fHistEtaPhi6Clu[kNtrackTypes];  //! etaphi distr., no PID, 6 Clu

  TH1F*   fHistChi2[kNtrackTypes];        //! chi2 distr., no PID
  TH1F*   fHistChi2Good[kNtrackTypes];    //! chi2 distr., good tracks, no PID
  TH1F*   fHistChi2Fake[kNtrackTypes];    //! chi2 distr., fake tracks, no PID

  TH1F*   fHistNclu[kNtrackTypes];        //! ITS clu distr., no PID
  TH1F*   fHistNcluGood[kNtrackTypes];    //! ITS clu distr., good tracks, no PID
  TH1F*   fHistNcluFake[kNtrackTypes];    //! ITS clu distr., fake tracks, no PID

  TH2F*   fHistdedxvsP2cls[kNtrackTypes]; //! dedx vs. p for tracks with 2 clus in SDD+SSD
  TH2F*   fHistdedxvsP3cls[kNtrackTypes]; //! dedx vs. p for tracks with 3 clus in SDD+SSD
  TH2F*   fHistdedxvsP4cls[kNtrackTypes]; //! dedx vs. p for tracks with 4 clus in SDD+SSD


  TH1F*   fHistPtTPCITS[kNspecies];    //! pt distribution of TPC+ITS tracks
  TH1F*   fHistPtITSsa[kNspecies];     //! pt distribution of ITSsa tracks
  TH1F*   fHistPtITSpureSA[kNspecies]; //! pt distribution of ITS pure SA tracks

  TH2F*   fHistEtaPhiTPCITS[kNspecies];    //! etaphi distr. of TPC+ITS tracks
  TH2F*   fHistEtaPhiITSsa[kNspecies];     //! etaphi distr. of ITSsa tracks
  TH2F*   fHistEtaPhiITSpureSA[kNspecies]; //! etaphi distr. of ITSpureSA tracks

  TH2F*   fHistNcluTPCITS[kNspecies];    //! n. of clusters for TPC+ITS tracks vs. pt
  TH2F*   fHistNcluITSsa[kNspecies];     //! n. of clusters for ITSsa tracks vs. pt
  TH2F*   fHistNcluITSpureSA[kNspecies]; //! n. of clusters for ITSpureSA tracks vs. pt
  TH2F*   fHistd0rphiITSpureSA[kNspecies]; //! d0z for ITSpureSA tracks vs. pt
  TH2F*   fHistd0zITSpureSA[kNspecies]; //! d0z for ITSpureSA tracks vs. pt
  TH2F*   fHistCluInLayTPCITS[kNspecies];    //! TPC+ITS tracks with cluster in layer 
  TH2F*   fHistCluInLayITSsa[kNspecies];     //! ITSsa tracks with cluster in layer 
  TH2F*   fHistCluInLayITSpureSA[kNspecies]; //! for ITSpureSA tracks with cluster in layer

  TH2F*   fHistOuterLayITSpureSA[kNspecies]; //! outer layer with cluster vs. pt

  TH2F*   fHistPtResid[kNspecies];         //! pt residuals (TPC) in pt bins
  TH2F*   fHistPtRelResid[kNspecies];      //! pt relative residuals (TPC) in pt bins
  TH2F*   fHistInvPtResid[kNspecies];      //! 1/pt residuals (TPC) in pt bins
  TH2F*   fHistInvPtRelResid[kNspecies];   //! 1/pt relative resid. (TPC) in pt bins
  TH2F*   fHistMCPtResid[kNspecies];       //! pt residuals (MC) vs. pt     
  TH2F*   fHistMCPtRelResid[kNspecies];    //! pt relative residuals (MC) vs. pt     
  TH2F*   fHistMCInvPtResid[kNspecies];    //! 1/pt residuals (MC) vs. pt
  TH2F*   fHistMCInvPtRelResid[kNspecies]; //! 1/pt relative residulas (MC) vs. pt

  TH2F*   fHistMCPhiResid; //! phi residuals in pt bins
  TH2F*   fHistPhiResid;   //! phi residuals in pt bins
  TNtuple* fNtupleTracks;  //! output ntuple

  Int_t   fNPtBins;                  // number of Pt bins
  Float_t fPtLimits[kMaxPtBins+1]; // Pt bin limits
  Int_t   fMinITSpts;       // Minimum number of ITS points per track
  Int_t   fMinSPDpts;       // Minimum number of SPD points per track
  Int_t   fMinPtsforPid;    // Minimum number of SDD+SSD points per track
  Int_t   fMinTPCpts;       // Minimum number of TPC points per track
  Float_t fMaxITSChi2Clu;   // Maximum value of ITS chi2 per cluster
  Float_t fMinCentrality;   // Centrality percentile lower lim
  Float_t fMaxCentrality;   // Centrality percentile upper lim
  Bool_t  fRequirePoint[6]; // require point in given layer
  Bool_t  fFillNtuple;      // flag to control fill of ntuple  
  Bool_t  fReadMC;          // flag read/not-read MC truth info
  Bool_t  fUseMCId;         // flag use/not-use MC identity for PID
  Bool_t  fUseCentrality;   // flag use/not-use centrality selection
  Bool_t  fRequireSPD;      // check that SPD are in trigger cluster
  Bool_t  fRequireSDD;      // check that SDD are in trigger cluster
  Bool_t  fRequireSSD;      // check that SSD are in trigger cluster
  AliTriggerConfiguration* fTrigConfig; // trigger configuration object

  ClassDef(AliAnalysisTaskITSsaTracks,5);  
};


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