ROOT logo
#ifndef ALITPCPIDETATREE_H
#define ALITPCPIDETATREE_H

/*
This task determines the eta dependence of the TPC signal.
For this purpose, only tracks fulfilling some standard quality cuts are taken into account.
The obtained data can be used to derive the functional behaviour of the eta dependence.
Such a function can be plugged into this task to correct for the eta dependence and to see
if there is then really no eta dependence left.

Class written by Benjamin Hess.
Contact: bhess@cern.ch
*/

class TTree;
class TObjArray;
class THnSparse;
class TH2I;

#include "AliTPCPIDBase.h"

class AliTPCPIDEtaTree : public AliTPCPIDBase {
 public:
  enum PIDtype { kMCid = 0, kTPCid = 1, kV0idNoTOF = 2, kTPCandTOFid = 3, kV0idPlusTOFaccepted = 4, kV0idPlusTOFrejected = 5 };
  
  AliTPCPIDEtaTree();
  AliTPCPIDEtaTree(const char *name);
  virtual ~AliTPCPIDEtaTree();
  
  virtual void   UserCreateOutputObjects();
  virtual void   UserExec(Option_t *option);
  virtual void   Terminate(const Option_t*);
  
  Bool_t GetCorrectdEdxEtaDependence() const { return fCorrectdEdxEtaDependence; };
  void SetCorrectdEdxEtaDependence(Bool_t flag) { fCorrectdEdxEtaDependence = flag; };
  
  Bool_t GetCorrectdEdxMultiplicityDependence() const { return fCorrectdEdxMultiplicityDependence; };
  void SetCorrectdEdxMultiplicityDependence(Bool_t flag) { fCorrectdEdxMultiplicityDependence = flag; };
  
  Bool_t GetDoAdditionalQA() const { return fDoAdditionalQA; };
  void SetDoAdditionalQA(Bool_t doAdditionalQA = kTRUE) { fDoAdditionalQA = doAdditionalQA; };
  
  Bool_t GetStoreMultiplicity() const  { return fStoreMultiplicity; };
  void SetStoreMultiplicity(Bool_t storeMultiplicity = kTRUE) { fStoreMultiplicity = storeMultiplicity; };
  
  Bool_t GetStoreNumOfSubthresholdclusters() const  { return fStoreNumOfSubthresholdclusters; };
  void SetStoreNumOfSubthresholdclusters(Bool_t storeNumOfSubthresholdclusters = kTRUE)
    { fStoreNumOfSubthresholdclusters = storeNumOfSubthresholdclusters; };
    
  Bool_t GetStoreNumClustersInActiveVolume() const  { return fStoreNumClustersInActiveVolume; };
  void SetStoreNumClustersInActiveVolume(Bool_t storeNumClustersInActiveVolume = kTRUE)
    { fStoreNumClustersInActiveVolume = storeNumClustersInActiveVolume; };
  
  Double_t GetPtpcPionCut() const { return fPtpcPionCut; };
  void SetPtpcPionCut(Double_t pTPCpionCut) { fPtpcPionCut = pTPCpionCut; };
  
 private:
  Short_t fNumEtaCorrReqErrorsIssued;  // Number of times the error about eta correction issues have been displayed
  Short_t fNumMultCorrReqErrorsIssued; // Number of times the error about multiplicity correction issues have been displayed
  
  Bool_t fStoreMultiplicity; // Store multiplicity in tree?
  Bool_t fStoreNumOfSubthresholdclusters; // Store number of subthreshold clusters in tree?
  Bool_t fStoreNumClustersInActiveVolume; // Store number of clusters in active volume in tree?
  Bool_t fDoAdditionalQA; // Save output for additional QA, like TOF QA?
  Double_t fPtpcPionCut; // Cut on pions with lower tpc momentum
  
  Double_t fPtpc; // TPC momentum
  Double_t fPt; // Transverse momentum
  Double_t fDeDx; // Measured dE/dx
  Double_t fDeDxExpected; // Expected dE/dx according to parametrisation
  Double_t fTanTheta; // Tangens of (local) theta at TPC inner wall
  //Double_t fSinAlpha; // Sine of (local) phi at TPC inner wall
  //Double_t fY; // Local Y at TPC inner wall
  Double_t fPhiPrime; // Phi prime
  UShort_t fTPCsignalN; // Number of TPC clusters for PID
  UShort_t fTPCsignalNsubthreshold; // Number of TPC subthreshold clusters for PID
  Double_t fNumTPCClustersInActiveVolume; // Number of TPC clusters in active volume
  UChar_t  fPIDtype; // Type of identification (TPC dEdx, V0, ...)
  
  // In case of PbpB
  Int_t fMultiplicity; // Multiplicity in case of PbPb
  
  Bool_t fCorrectdEdxEtaDependence;    // Correct eta dependence for dEdxExpected
  Bool_t fCorrectdEdxMultiplicityDependence;    // Correct multiplicity dependence for dEdxExpected
  
  TTree* fTree; //! data tree
  TTree* fTreePions; //! data tree pions
  
  TObjArray* fOutputContainer; //! Output data container for TOF qa
  THnSparseI* fhTOFqa; //! THnSparse with TOF qa data
  TH2I* fhMultiplicityQA; //! QA histo for multiplicity
  
  AliTPCPIDEtaTree(const AliTPCPIDEtaTree&); // not implemented
  AliTPCPIDEtaTree& operator=(const AliTPCPIDEtaTree&); // not implemented
  
  ClassDef(AliTPCPIDEtaTree, 3); 
};

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