ROOT logo
#ifndef ALIPERFORMANCEMC_H
#define ALIPERFORMANCEMC_H

//------------------------------------------------------------------------------
// Class to keep information for MC  tracks 
// to check propagation algorithm, B-field and material budget.   
// 
// Author: J.Otwinowski 09/06/2009 
//------------------------------------------------------------------------------

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

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

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

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

  // 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 ProcessTPC(AliTrackReference* const refIn, TParticle* const particle);
  void ProcessInnerTPC(AliTrackReference* const refIn,  AliTrackReference* const refOut, TParticle* const particle);
  void ProcessOuterTPCExt(TParticle *const  part, TClonesArray * const trefs);
  AliExternalTrackParam * MakeTrack(const AliTrackReference* ref, TParticle *const part);

  // Create folder for analysed histograms
  TFolder *CreateFolder(TString folder = "folderMC", TString title = "Analysed MC 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; }
 
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_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

  AliPerformanceMC(const AliPerformanceMC&); // not implemented
  AliPerformanceMC& operator=(const AliPerformanceMC&); // not implemented

  ClassDef(AliPerformanceMC,1);
};

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