ROOT logo
#ifndef ALIANALYSISTRACKINGUNCERTAINTIES_H
#define ALIANALYSISTRACKINGUNCERTAINTIES_H

//////////////////////////////////////////////////////////////////////////////
//                                                                          //
// Analysis task for the systematic study of the uncertainties related to   //
// the tracking and ITS-TPC matching efficiency for different particle      //
// species.                                                                 //
//                                                                          //
//////////////////////////////////////////////////////////////////////////////

class TList;
class AliESDEvent;
class AliMCEvent;
class AliESDtrack;
class AliESDtrackCuts;
class AliESDpid;


#include "AliAnalysisTaskSE.h"
#include "AliAnalysisUtils.h"
#include "THn.h"

// ITS->TPC matching constants
const int kMaxMatch=5;
const double kMaxChi2 = 200;


class AliAnalysisTrackingUncertainties : public AliAnalysisTaskSE {
 public:
  AliAnalysisTrackingUncertainties(const char *name);
  AliAnalysisTrackingUncertainties();
  virtual ~AliAnalysisTrackingUncertainties() {}
  //
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(Option_t *);
  //
  void           ProcessTrackCutVariation();
  void           ProcessItsTpcMatching();
  void           Match(const AliESDtrack* tr0, const AliESDtrack* tr1, Int_t& nmatch, Bool_t excludeMom = kFALSE, Double_t rotate=0);

  //
  void           SetESDtrackCuts(AliESDtrackCuts * trackCuts){fESDtrackCuts = trackCuts;};
  void           InitializeTrackCutHistograms();
  //
  void           ExcludeMomFromChi2ITSTPC(Bool_t ex = kTRUE) { fExcludeMomFromChi2ITSTPC = ex; }


 private:
  enum ESpecies_t{
      kSpecElectron = 0,
      kSpecPion = 1,
      kSpecKaon = 2,
      kSpecProton = 3,
      kUndef = 4,
      kAll = 5
  };
  //
  void   BinLogAxis(const THn *h, Int_t axisNumber);
  Bool_t IsVertexAccepted(AliESDEvent * esd, Float_t &vertexZ);
  ESpecies_t GetPid(const AliESDtrack * const tr, Bool_t useTPCTOF = kFALSE) const;
  Bool_t IsElectron(const AliESDtrack * const tr, Bool_t useTPCTOF = kFALSE) const;
  Bool_t IsPion(const AliESDtrack * const tr, Bool_t useTPCTOF = kFALSE) const;
  Bool_t IsKaon(const AliESDtrack * const tr, Bool_t useTPCTOF = kFALSE) const;
  Bool_t IsProton(const AliESDtrack * const tr, Bool_t useTPCTOF = kFALSE) const;
  //
  Bool_t IsConsistentWithPid(Int_t type, const AliESDtrack * const tr);
  //
  //
  //
  AliESDEvent * fESD;               //! ESD object
  AliESDpid   * fESDpid;            //! basic pid object
  AliAnalysisUtils * fUtils;        //! vertex and event selection classes
  Bool_t        fMCtrue;            // flag if real data or MC is processed
  //
  //
  TList           * fListHist;      //! output list for histograms
  AliESDtrackCuts * fESDtrackCuts;  // cut set which is under study
  //
  // helper variables for ITS->TPC matching
  //
  const AliESDtrack * fMatchTr[kMaxMatch];
  Double_t fMatchChi[kMaxMatch];
  Bool_t fExcludeMomFromChi2ITSTPC; // ITS->TPC : exclude momentum from matching chi2 calculation  

  //
  //
  AliAnalysisTrackingUncertainties(const AliAnalysisTrackingUncertainties&); 
  AliAnalysisTrackingUncertainties& operator=(const AliAnalysisTrackingUncertainties&); 

  ClassDef(AliAnalysisTrackingUncertainties, 1); 
};

#endif
 AliAnalysisTrackingUncertainties.h:1
 AliAnalysisTrackingUncertainties.h:2
 AliAnalysisTrackingUncertainties.h:3
 AliAnalysisTrackingUncertainties.h:4
 AliAnalysisTrackingUncertainties.h:5
 AliAnalysisTrackingUncertainties.h:6
 AliAnalysisTrackingUncertainties.h:7
 AliAnalysisTrackingUncertainties.h:8
 AliAnalysisTrackingUncertainties.h:9
 AliAnalysisTrackingUncertainties.h:10
 AliAnalysisTrackingUncertainties.h:11
 AliAnalysisTrackingUncertainties.h:12
 AliAnalysisTrackingUncertainties.h:13
 AliAnalysisTrackingUncertainties.h:14
 AliAnalysisTrackingUncertainties.h:15
 AliAnalysisTrackingUncertainties.h:16
 AliAnalysisTrackingUncertainties.h:17
 AliAnalysisTrackingUncertainties.h:18
 AliAnalysisTrackingUncertainties.h:19
 AliAnalysisTrackingUncertainties.h:20
 AliAnalysisTrackingUncertainties.h:21
 AliAnalysisTrackingUncertainties.h:22
 AliAnalysisTrackingUncertainties.h:23
 AliAnalysisTrackingUncertainties.h:24
 AliAnalysisTrackingUncertainties.h:25
 AliAnalysisTrackingUncertainties.h:26
 AliAnalysisTrackingUncertainties.h:27
 AliAnalysisTrackingUncertainties.h:28
 AliAnalysisTrackingUncertainties.h:29
 AliAnalysisTrackingUncertainties.h:30
 AliAnalysisTrackingUncertainties.h:31
 AliAnalysisTrackingUncertainties.h:32
 AliAnalysisTrackingUncertainties.h:33
 AliAnalysisTrackingUncertainties.h:34
 AliAnalysisTrackingUncertainties.h:35
 AliAnalysisTrackingUncertainties.h:36
 AliAnalysisTrackingUncertainties.h:37
 AliAnalysisTrackingUncertainties.h:38
 AliAnalysisTrackingUncertainties.h:39
 AliAnalysisTrackingUncertainties.h:40
 AliAnalysisTrackingUncertainties.h:41
 AliAnalysisTrackingUncertainties.h:42
 AliAnalysisTrackingUncertainties.h:43
 AliAnalysisTrackingUncertainties.h:44
 AliAnalysisTrackingUncertainties.h:45
 AliAnalysisTrackingUncertainties.h:46
 AliAnalysisTrackingUncertainties.h:47
 AliAnalysisTrackingUncertainties.h:48
 AliAnalysisTrackingUncertainties.h:49
 AliAnalysisTrackingUncertainties.h:50
 AliAnalysisTrackingUncertainties.h:51
 AliAnalysisTrackingUncertainties.h:52
 AliAnalysisTrackingUncertainties.h:53
 AliAnalysisTrackingUncertainties.h:54
 AliAnalysisTrackingUncertainties.h:55
 AliAnalysisTrackingUncertainties.h:56
 AliAnalysisTrackingUncertainties.h:57
 AliAnalysisTrackingUncertainties.h:58
 AliAnalysisTrackingUncertainties.h:59
 AliAnalysisTrackingUncertainties.h:60
 AliAnalysisTrackingUncertainties.h:61
 AliAnalysisTrackingUncertainties.h:62
 AliAnalysisTrackingUncertainties.h:63
 AliAnalysisTrackingUncertainties.h:64
 AliAnalysisTrackingUncertainties.h:65
 AliAnalysisTrackingUncertainties.h:66
 AliAnalysisTrackingUncertainties.h:67
 AliAnalysisTrackingUncertainties.h:68
 AliAnalysisTrackingUncertainties.h:69
 AliAnalysisTrackingUncertainties.h:70
 AliAnalysisTrackingUncertainties.h:71
 AliAnalysisTrackingUncertainties.h:72
 AliAnalysisTrackingUncertainties.h:73
 AliAnalysisTrackingUncertainties.h:74
 AliAnalysisTrackingUncertainties.h:75
 AliAnalysisTrackingUncertainties.h:76
 AliAnalysisTrackingUncertainties.h:77
 AliAnalysisTrackingUncertainties.h:78
 AliAnalysisTrackingUncertainties.h:79
 AliAnalysisTrackingUncertainties.h:80
 AliAnalysisTrackingUncertainties.h:81
 AliAnalysisTrackingUncertainties.h:82
 AliAnalysisTrackingUncertainties.h:83
 AliAnalysisTrackingUncertainties.h:84
 AliAnalysisTrackingUncertainties.h:85
 AliAnalysisTrackingUncertainties.h:86
 AliAnalysisTrackingUncertainties.h:87
 AliAnalysisTrackingUncertainties.h:88
 AliAnalysisTrackingUncertainties.h:89
 AliAnalysisTrackingUncertainties.h:90
 AliAnalysisTrackingUncertainties.h:91
 AliAnalysisTrackingUncertainties.h:92
 AliAnalysisTrackingUncertainties.h:93
 AliAnalysisTrackingUncertainties.h:94
 AliAnalysisTrackingUncertainties.h:95