ROOT logo
#ifndef ALIPERFORMANCEPTCALIBMC_H
#define ALIPERFORMANCEPTCALIBMC_H
//----------------------------------------------------------------------------------------------------
// Class to study systematic shifts in pt and charge/pt respectively. Furthermore a comparison between
// either ESD or TPC and MC track momenta is included.
// Track cuts and a user defined shift in 1/pt can be switched on and off by user.
//
// Analysis with class AliPerfAnalyzeInvPt via AliPerformancePtCalibMC::Analyse().:
// Projection of 1/pt vs theta and vs phi resp. Histograms will be fitted with either
// polynomial or gaussian fit function to extract minimum position of 1/pt.
// Fit options and theta, phi bins can be set by user.
// Attention: use the Set* functions of AliPerformancePtCalibMC when running AliPerformancePtCalibMC::Analyse().
//
// Author: S. Schuchmann 11/13/2009 
//----------------------------------------------------------------------------------------------------

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

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

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

class AliPerformancePtCalibMC : public AliPerformanceObject {
public:
  AliPerformancePtCalibMC(const char *name= "AliPerformancePtCalibMC", const char *title="AliPerformancePtCalibMC");
   virtual ~AliPerformancePtCalibMC() ;

   // 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;}

   // Options for track cuts
   
   void SetReadTPCTracks(const Bool_t readTPC)        {fOptTPC   = readTPC;}//read only ESD tracks
   void SetEtaRange(const Double_t eta)               {fEtaAcceptance =  eta ;}//sets eta window
   
   void SetAliESDtrackCuts( AliESDtrackCuts* esdTrackCuts) { fESDTrackCuts = esdTrackCuts;fESDcuts=kTRUE;}//esd track cuts
   // only pions
   void SetAnalysePions(const Bool_t anaPions) {fPions = anaPions;}
   //user defined shift in charge/pt
   void SetPtShift(const Double_t shiftVal); //sets user defined shift in charge/pt
   
   // setters for analysis with AliPerformancePtCalibMC::Analyse()
   void SetProjBinsPhi(const Double_t *pBins,const Int_t sizep,const Double_t minTheta, const Double_t maxTheta);// set phi bins for projection and theta range selection (rad)
   void SetProjBinsTheta(const Double_t *tBins, const Int_t sizet,const Double_t minPhi, const Double_t maxPhi);// set theta bins for projection and phi range selection (rad)
   void SetMakeFitOption(const Bool_t setGausFit, const Double_t exclusionR,const Double_t fitR );// set fit options
   void SetDoRebin(const Int_t rebin){if(rebin) {fDoRebin = kTRUE; fRebin = rebin;}}
   void SetAnaMCOff() {fAnaMC = kFALSE;} // switch analysis of MC true tracks off
   const TList *GetHistoList() {return fList;} // get list of histograms
   
 
   // Create folder for analysed histograms
   TFolder *CreateFolder(TString folder = "folderPtCalib",TString title = "Analysed PtCalib 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;}

protected:
   // variables for fitting in Analyse() function
   Double_t fThetaBins[100];// array of theta bins for projection of charge/pt vs theta
   Double_t fPhiBins[100]; // array of phi bins for projection of charge/pt vs theta

   Int_t fNThetaBins;// sets number of theta bins
   Int_t fNPhiBins ;// sets number of phi bins
   Double_t fMaxPhi;// max phi for 2D projection on theta and charge/pt axis
   Double_t fMinPhi;// min phi for 2D projection on theta and charge/pt axis
   Double_t fMaxTheta;// max theta for 2D projection on phi and charge/pt axis
   Double_t fMinTheta;// min theta for 2D projection on phi and charge/pt axis
   Double_t fRange;// sets fit range
   Double_t fExclRange ;// sets range of rejection of points around 0
   Bool_t fFitGaus ;// flag for usage of gaussian fit function
   Bool_t fDoRebin;// flag for rebin 1D histos before fitting
   Int_t fRebin;// number of bins for rebin
   Bool_t  fAnaMC;// flag for analysis of MC tracks
   
    
private:
   // option for user defined shift in charge/pt
   Bool_t fShift;//flag for shift in charge/pt
   Double_t fDeltaInvP;// shift value of charge/pt
   
   //options for cuts
   Bool_t fOptTPC;// flag for reading of TPC tracks in Exec
   Bool_t fESDcuts;//flag for usage of esd track cuts
   Bool_t fPions;// flag for analzsing pions instead of all charged particles
    
   //ESD track cut values
   Double_t fEtaAcceptance;//sets value of eta window
   AliRecInfoCuts* fCutsRC;     // selection cuts for reconstructed tracks
   AliMCInfoCuts*  fCutsMC;     // selection cuts for MC tracks

   
   TList       *fList;// list of histograms
   
   // histograms and THnSparse
   THnSparseF  *fHistInvPtPtThetaPhi;// is filled with charge/pt, pt, theta, phi for ESD or TPC

   TH1F        *fHistPtShift0;//if shift in charge/pt is set by user, this histogram shows pt wihtout shift
   TH1F        *fHistPrimaryVertexPosX;// primary vertex position x          
   TH1F        *fHistPrimaryVertexPosY;// primary vertex position y        
   TH1F        *fHistPrimaryVertexPosZ;// primary vertex position z        
   TH1F        *fHistTrackMultiplicity; // track multiplicity         
   TH1F        *fHistTrackMultiplicityCuts;//track multiplicity after all cuts are applied

   TH2F        *fHistTPCMomentaPosP;//TPC p vs global esd track p for positive tracks
   TH2F        *fHistTPCMomentaNegP;//TPC p vs global esd track p for negative tracks
   TH2F        *fHistTPCMomentaPosPt;//TPC pt vs global esd track p positive tracks
   TH2F        *fHistTPCMomentaNegPt;//TPC pt vs global esd track p for negative tracks

   THnSparseF *fHistInvPtPtThetaPhiMC;// is filled with charge/pt, pt, theta, phi for MC true

   TH2F        *fHistInvPtMCESD;// charge/pt of ESD vs MC
   TH2F        *fHistInvPtMCTPC;// charge/pt of TPC vs MC
   TH2F        *fHistPtMCESD;//pt of ESD vs MC
   TH2F        *fHistPtMCTPC;//pt of TPC vs MC
   TH2F        *fHistMomresMCESD;   //(pt ESD - pt MC)/ptMC vs pt MC
   TH2F        *fHistMomresMCTPC;   //(pt TPC - pt MC)/ptMC vs pt MC
   TH2F        *fHistTPCMomentaPosInvPtMC;//TPC-MC of 1/pt vs global ESD-MC of charge/pt of positive tracks
   TH2F        *fHistTPCMomentaNegInvPtMC;//TPC-MC of 1/pt vs global ESD-MC of charge/pt of negative tracks
   TH2F        *fHistTPCMomentaPosPtMC;//TPC-MC of pt vs global ESD-MC of pt of positive tracks
   TH2F        *fHistTPCMomentaNegPtMC;//TPC-MC of pt vs global ESD-MC of pt of negative tracks
  
   TH1F        *fHistESDMomentaPosInvPtMC;//ESD-MC of charge/pt of positive tracks
   TH1F        *fHistESDMomentaNegInvPtMC;//ESD-MC of charge/pt of negative tracks
   TH1F        *fHistESDMomentaPosPtMC;//ESD-MC of pt of positive tracks
   TH1F        *fHistESDMomentaNegPtMC;//ESD-MC of pt of negative tracks
   
   TH1F        *fHistUserPtShift;// shows the shift value if set by user
   TH2F        *fHistdedxPions;// dEdx vs cahrge*pt
   
   AliESDtrackCuts* fESDTrackCuts;// esd track cuts
 
   // analysis folder 
   TFolder *fAnalysisFolder; // folder for analysed histograms

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

   ClassDef(AliPerformancePtCalibMC, 1); 
};

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