]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/TPC/AliPerformancePtCalibMC.h
bug fix and small changed in the macros
[u/mrichter/AliRoot.git] / PWG1 / TPC / AliPerformancePtCalibMC.h
1 #ifndef ALIPERFORMANCEPTCALIBMC_H
2 #define ALIPERFORMANCEPTCALIBMC_H
3 //----------------------------------------------------------------------------------------------------
4 // Class to study systematic shifts in pt and charge/pt respectively. Furthermore a comparison between
5 // either ESD or TPC and MC track momenta is included.
6 // Track cuts and a user defined shift in 1/pt can be switched on and off by user.
7 //
8 // Analysis with class AliPerfAnalyzeInvPt via AliPerformancePtCalibMC::Analyse().:
9 // Projection of 1/pt vs theta and vs phi resp. Histograms will be fitted with either
10 // polynomial or gaussian fit function to extract minimum position of 1/pt.
11 // Fit options and theta, phi bins can be set by user.
12 // Attention: use the Set* functions of AliPerformancePtCalibMC when running AliPerformancePtCalibMC::Analyse().
13 //
14 // Author: S. Schuchmann 11/13/2009 
15 //----------------------------------------------------------------------------------------------------
16
17 class TString;
18 class TNamed;
19 class TCanvas;
20 class TH1F;
21 class TH2F;
22 class TH3F;
23 class TList;
24
25 class AliESDVertex;
26 class AliESDtrack;
27 class AliMCEvent;
28 class AliStack;
29 class AliTrackReference;
30 class AliESDEvent; 
31 class AliESDfriend; 
32 class AliESDfriendTrack; 
33 class AliMCEvent;
34 class AliMCParticle;
35 class AliMCInfoCuts;
36 class AliRecInfoCuts;
37 class AliESDtrackCuts;
38
39 #include "AliPerformanceObject.h"
40
41 class AliPerformancePtCalibMC : public AliPerformanceObject {
42 public:
43    AliPerformancePtCalibMC();
44    AliPerformancePtCalibMC(const char *name, const char *title);//, Int_t analysisMode, Bool_t hptGenerator);
45    virtual ~AliPerformancePtCalibMC() ;
46
47    // Init data members
48    virtual void  Init();
49
50    // Execute analysis
51    virtual void  Exec(AliMCEvent* const mcEvent, AliESDEvent *const esdEvent, AliESDfriend *const esdFriend, const Bool_t bUseMC, const Bool_t bUseESDfriend);
52
53    // Merge output objects (needed by PROOF) 
54    virtual Long64_t Merge(TCollection* const list);
55
56    // Analyse output histograms
57    virtual void Analyse();
58
59    // Get analysis folder
60    virtual TFolder* GetAnalysisFolder() const {return fAnalysisFolder;}
61
62    // Options for track cuts
63    Bool_t AddTPCcuts(const AliESDtrack *esdTrack);// applies TPC cuts
64    Bool_t AddITScuts(const AliESDtrack *esdTrack);// applies ITS cuts
65    Bool_t AddDCAcuts(const AliESDtrack *esdTrack);// applies DCA cuts
66  
67    void SetReadTPCTracks(const Bool_t readTPC)        {fOptTPC   = readTPC;}//read only ESD tracks
68    void SetTPCRefit(const Bool_t refitTPC)            {fRefitTPC = refitTPC;} //switch TPC refit flag on/off
69    void SetITSRefit(const Bool_t refitITS)            {fRefitITS = refitITS;} //switch ITS refit flag on/off
70    void SetESDCuts(const Bool_t esdCuts)              {fESDcuts  = esdCuts;} //switch ESD track cuts on/off
71    void SetDCACuts(const Bool_t dcaCut)               {fDCAcut   = dcaCut;} //switch DCA cut off
72    void SetAcceptKinkDaughters(const Bool_t kink)     {fAcceptKinkDaughters = kink;} //switch accept kink daughters on/off
73    void SetRequireSigmaToVertex(const Bool_t sigmaTo) {fRequireSigmaToVertex = sigmaTo;}//switch require SigmaToVertex on/off
74    void SetfDCAToVertex2D(const Bool_t dcaTo)         {fDCAToVertex2D = dcaTo;}//switch DCA to vertex2D on/off
75    void SetEtaRange(const Double_t eta)               {fEtaAcceptance =  eta ;}//sets eta window
76    void SetESDcutValues(const Double_t * esdCutValues);// set ESD track cut values as array of size 6 according to:
77    //    fMinPt                = esdCutValues[0]; 
78    //    fMaxPt                = esdCutValues[1];
79    //    fMinNClustersTPC      = esdCutValues[2];
80    //    fMaxChi2PerClusterTPC = esdCutValues[3];
81    //    fMaxDCAtoVertexXY     = esdCutValues[4];
82    //    fMaxDCAtoVertexZ      = esdCutValues[5];
83
84    //user defined shift in charge/pt
85    void SetPtShift(const Double_t shiftVal); //shift in 1/pt
86    
87
88    // for analysis with AliPerformancePtCalibMC::Analyse()
89    void SetProjBinsPhi(const Double_t *pBins,Int_t sizep);// set phi bins and nr of phi bins for projection
90    void SetProjBinsTheta(const Double_t *tBins, Int_t sizet);//  set theta bins and nr of phi bins for projection
91    void SetMakeFitOption(const Bool_t setGausFit, const Double_t exclusionR,const Double_t fitR );// set fit options
92    void SetAnaMCOff() {fAnaMC = kFALSE;} // switch analysis of MC tracks off
93    const TList *GetHistoList() {return fList;} // get list of histograms
94    
95  
96    // Create folder for analysed histograms
97    TFolder *CreateFolder(TString folder = "folderPtCalib",TString title = "Analysed PtCalib histograms");
98
99    // Export objects to folder
100    TFolder *ExportToFolder(TObjArray * array=0);
101
102    // Selection cuts
103    void SetAliRecInfoCuts(AliRecInfoCuts* const cuts=0) {fCutsRC = cuts;}   
104    void SetAliMCInfoCuts(AliMCInfoCuts* const cuts=0) {fCutsMC = cuts;}
105   
106    
107    AliRecInfoCuts*  GetAliRecInfoCuts() const {return fCutsRC;}  
108    AliMCInfoCuts*   GetAliMCInfoCuts()  const {return fCutsMC;}
109
110 protected:
111    
112    Double_t fThetaBins[100];// array of theta bins for projection of 1/pt vs theta
113    Double_t fPhiBins[100]; // array of phi bins for projection of 1/pt vs theta
114    
115    Int_t fNThetaBins;// sets number of theta bins
116    Int_t fNPhiBins ;// sets number of phi bins
117    Double_t fRange;// sets fit range
118    Double_t fExclRange ;// sets range of rejection of points around 0
119    Bool_t fFitGaus ;// flag for usage of gaussian fit function
120    Bool_t  fAnaMC;// flag for analysis of MC tracks
121    
122     
123 private:
124    Bool_t fShift;//flag for shift in charge/pt
125    Double_t fDeltaInvP;// shift value of charge/pt
126    
127    //options for cuts
128    Bool_t fOptTPC;// flag for reading of TPC tracks in Exec
129    Bool_t fESDcuts;//flag for usage of esd track cuts
130    Bool_t fRefitTPC;//flag for TPC refit
131    Bool_t fRefitITS;// flag for ITS refit
132    Bool_t fDCAcut;//flag for usage of DCA cut
133    
134    Double_t fEtaAcceptance;//sets value of eta window
135    Double_t fMinPt;//sets minimum pt for esd track cuts
136    Double_t fMaxPt;//sets maximum pt for esd track cuts
137    Double_t fMinNClustersTPC;// set minimum number of clusters in TPC for esd track cuts
138    Double_t fMaxChi2PerClusterTPC;//set maximum of chi2 per cluster in TPC for esd track cuts
139    Double_t fMaxDCAtoVertexXY;//set maximum of dca to vertex in xy direction for esd track cuts
140    Double_t fMaxDCAtoVertexZ;//set maximum of dca to vertex in z for esd track cuts
141
142    Bool_t fAcceptKinkDaughters;// flag for acception of kink daughters
143    Bool_t fRequireSigmaToVertex;// flag for requirering sigma to vertex
144    Bool_t fDCAToVertex2D;//flag for dca to vertex in 2d cut
145    
146    AliRecInfoCuts* fCutsRC;     // selection cuts for reconstructed tracks
147    AliMCInfoCuts*  fCutsMC;     // selection cuts for MC tracks
148
149    
150    TList       *fList;// list of histograms
151    TH2F        *fHistInvPtTheta;//theta vs charge/pt
152    TH2F        *fHistInvPtPhi;//phi vs charge/pt
153    TH2F        *fHistPtTheta;//theta vs pt
154    TH2F        *fHistPtPhi;//phi vs pt
155
156    TH1F        *fHistPtShift0;//if shift in 1/pt is set by user, this histogram shows pt wihtout shift
157    TH1F        *fHistPrimaryVertexPosX;// primary vertex position x          
158    TH1F        *fHistPrimaryVertexPosY;// primary vertex position y        
159    TH1F        *fHistPrimaryVertexPosZ;// primary vertex position z        
160    TH1F        *fHistTrackMultiplicity; // track multiplicity         
161    TH1F        *fHistTrackMultiplicityCuts;//track multiplicity after all cuts are applied
162
163    TH2F        *fHistTPCMomentaPosP;//TPC p vs global esd track p for positive tracks
164    TH2F        *fHistTPCMomentaNegP;//TPC p vs global esd track p for negative tracks
165    TH2F        *fHistTPCMomentaPosPt;//TPC pt vs global esd track p positive tracks
166    TH2F        *fHistTPCMomentaNegPt;//TPC pt vs global esd track p for negative tracks
167    
168    TH2F        *fHistInvPtThetaMC;//theta vs charge/pt for MC tracks
169    TH2F        *fHistInvPtPhiMC;//phi vs charge/pt for MC tracks
170    TH2F        *fHistPtThetaMC;//theta vs pt for MC tracks
171    TH2F        *fHistPtPhiMC; //phi vs pt for MC tracks
172    TH2F        *fHistInvPtMCESD;// 1/pt of ESD vs MC
173    TH2F        *fHistInvPtMCTPC;// 1/pt of TPC vs MC
174    TH2F        *fHistPtMCESD;//pt of ESD vs MC
175    TH2F        *fHistPtMCTPC;//pt of TPC vs MC
176    TH2F        *fHistMomresMCESD;   //(pt ESD - pt MC)/ptMC vs pt MC
177    TH2F        *fHistMomresMCTPC;   //(pt TPC - pt MC)/ptMC vs pt MC
178    TH2F        *fHistTPCMomentaPosInvPtMC;//TPC-MC of 1/pt vs global ESD-MC of 1/pt of positive tracks
179    TH2F        *fHistTPCMomentaNegInvPtMC;//TPC-MC of 1/pt vs global ESD-MC of 1/pt of negative tracks
180    TH2F        *fHistTPCMomentaPosPtMC;//TPC-MC of pt vs global ESD-MC of pt of positive tracks
181    TH2F        *fHistTPCMomentaNegPtMC;//TPC-MC of pt vs global ESD-MC of pt of negative tracks
182   
183    TH1F        *fHistESDMomentaPosInvPtMC;//ESD-MC of 1/pt of positive tracks
184    TH1F        *fHistESDMomentaNegInvPtMC;//ESD-MC of 1/pt of negative tracks
185    TH1F        *fHistESDMomentaPosPtMC;//ESD-MC of pt of positive tracks
186    TH1F        *fHistESDMomentaNegPtMC;//ESD-MC of pt of negative tracks
187    
188    TH1F        *fHistUserPtShift;// shows the shift value if set by user
189    
190    AliESDtrackCuts* fESDTrackCuts;// esd track cuts
191   
192    // analysis folder 
193    TFolder *fAnalysisFolder; // folder for analysed histograms
194
195    AliPerformancePtCalibMC(const AliPerformancePtCalibMC&);            // not implemented 
196    AliPerformancePtCalibMC& operator=(const AliPerformancePtCalibMC&); // not implemented 
197
198    ClassDef(AliPerformancePtCalibMC, 1); 
199 };
200
201 #endif