ROOT logo
#ifndef ALIPERFORMANCERES_H
#define ALIPERFORMANCERES_H

//------------------------------------------------------------------------------
// Class to keep information from comparison of 
// reconstructed and MC particle tracks (TPC resolution).   
// 
// Author: J.Otwinowski 04/02/2008 
//------------------------------------------------------------------------------

class TString;
class TNamed;
class TCanvas;
class TH1F;
class TH2F;

class AliESDVertex;
class AliESDtrack;
class AliMCEvent;
class AliStack;
class AliTrackReference;
class AliESDEvent; 
class AliESDfriend; 
class AliESDfriendTrack; 
class AliMCEvent;
class AliMCParticle;
class AliMCInfoCuts;
class AliRecInfoCuts;

#include "THnSparse.h"
#include "AliPerformanceObject.h"

class AliPerformanceRes : public AliPerformanceObject {
public :
  AliPerformanceRes(const Char_t* name="AliPerformanceRes", const Char_t* title="AliPerformanceRes",Int_t analysisMode=0,Bool_t hptGenerator=kFALSE);
  virtual ~AliPerformanceRes();

  // Init data members
  virtual void  Init();

  // Execute analysis
  virtual void  Exec(AliMCEvent* const mcEvent, AliESDEvent *const esdEvent, AliESDfriend *const esdFriend, const Bool_t bUseMC, const Bool_t bUseESDfriend);

  // Merge output objects (needed by PROOF) 
  virtual Long64_t Merge(TCollection* const list);

  // Analyse output histograms
  virtual void Analyse();

  // Get analysis folder
  virtual TFolder* GetAnalysisFolder() const {return fAnalysisFolder;}

  // Process events
  void ProcessConstrained(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent );
  void ProcessTPC(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent);
  void ProcessTPCITS(AliStack* const stack, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent);
  void ProcessInnerTPC(AliMCEvent *const mcEvent, AliESDtrack *const esdTrack, AliESDEvent* const esdEvent);
  void ProcessOuterTPC(AliMCEvent *const mcEvent, AliESDtrack *const esdTrack, AliESDfriendTrack *const friendTrack, AliESDEvent* const esdEvent);

  AliTrackReference *GetFirstTPCTrackRef(AliMCParticle *mcParticle); 
  AliTrackReference *GetLastTPCTrackRef(AliMCParticle *mcParticle); 

  // Create folder for analysed histograms
  TFolder *CreateFolder(TString folder = "folderRes",TString title = "Analysed Resolution histograms");

  // Export objects to folder
  TFolder *ExportToFolder(TObjArray * array=0);

  // Selection cuts
  void SetAliRecInfoCuts(AliRecInfoCuts* const cuts=0) {fCutsRC = cuts;}   
  void SetAliMCInfoCuts(AliMCInfoCuts* const cuts=0) {fCutsMC = cuts;}  
   
  AliRecInfoCuts*  GetAliRecInfoCuts() const {return fCutsRC;}  
  AliMCInfoCuts*   GetAliMCInfoCuts()  const {return fCutsMC;}  

  TH1F*  MakeResol(TH2F * his, Int_t integ=0, Bool_t type=kFALSE, Int_t cut=0); 

  // getters
  //
  THnSparse *GetResolHisto() const  { return fResolHisto; }
  THnSparse *GetPullHisto()  const  { return fPullHisto; }
  static void SetMergeEntriesCut(Double_t entriesCut){fgkMergeEntriesCut = entriesCut;}

private:
  //
  // Control histograms
  // 5 track parameters (details in STEER/AliExternalTrackParam.h)
  //

  // resolution histogram
  THnSparseF *fResolHisto; //-> res_y:res_z:res_phi:res_lambda:res_pt:y:z:phi:eta:pt

  // pull histogram
  //THnSparseF *fPullHisto;  //-> pull_y:pull_z:pull_phi:pull_lambda:pull_1pt:y:z:eta:phi:pt
  THnSparseF *fPullHisto;  //-> pull_y:pull_z:pull_snp:pull_tgl:pull_1pt:y:z:snp:tgl:1pt

  // Global cuts objects
  AliRecInfoCuts*  fCutsRC;      // selection cuts for reconstructed tracks
  AliMCInfoCuts*  fCutsMC;       // selection cuts for MC tracks

  // analysis folder 
  TFolder *fAnalysisFolder; // folder for analysed histograms

  AliPerformanceRes(const AliPerformanceRes&); // not implemented
  AliPerformanceRes& operator=(const AliPerformanceRes&); // not implemented
  static Double_t            fgkMergeEntriesCut;  //maximal number of entries for merging  -can be modified via setter

  ClassDef(AliPerformanceRes,1);
};

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