]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGHF/correlationHF/AliHFAssociatedTrackCuts.h
Keep track of used tracks also when adding normal tracks, not only secondaries
[u/mrichter/AliRoot.git] / PWGHF / correlationHF / AliHFAssociatedTrackCuts.h
1 #ifndef AliHFAssociatedTrackCuts_H\r
2 #define AliHFAssociatedTrackCuts_H\r
3 /**************************************************************************\r
4  * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *\r
5  *                                                                        *\r
6  * Author: The ALICE Off-line Project.                                    *\r
7  * Contributors are mentioned in the code where appropriate.              *\r
8  *                                                                        *\r
9  * Permission to use, copy, modify and distribute this software and its   *\r
10  * documentation strictly for non-commercial purposes is hereby granted   *\r
11  * without fee, provided that the above copyright notice appears in all   *\r
12  * copies and that both the copyright notice and this permission notice   *\r
13  * appear in the supporting documentation. The authors make no claims     *\r
14  * about the suitability of this software for any purpose. It is          *\r
15  * provided "as is" without express or implied warranty.                  *\r
16  **************************************************************************/\r
17 \r
18 /* $Id$ */\r
19 \r
20 ////////////////////////////////////////////////////////////////////////\r
21 //\r
22 // Base class for cuts on Associated tracks for HF Correlation analysis\r
23 //\r
24 // Author: S.Bjelogrlic (Utrecht) sandro.bjelogrlic@cern.ch\r
25 ////////////////////////////////////////////////////////////////////////\r
26 \r
27 #include <TString.h>\r
28 #include "AliAnalysisCuts.h"\r
29 #include "AliESDtrackCuts.h"\r
30 #include "AliESDVertex.h"\r
31 #include "AliAODPidHF.h"\r
32 #include "AliAODEvent.h"\r
33 #include "AliAODRecoDecayHF2Prong.h"\r
34 #include <TClonesArray.h>\r
35 #include <TH3D.h>\r
36 \r
37 \r
38 class AliAODTrack;\r
39 class AliAODEvent;\r
40 \r
41 \r
42 //\r
43 class AliHFAssociatedTrackCuts : public AliAnalysisCuts\r
44 {\r
45         public: \r
46         AliHFAssociatedTrackCuts();\r
47         AliHFAssociatedTrackCuts(const char* name, const char* title);\r
48         \r
49         \r
50         AliHFAssociatedTrackCuts(const AliHFAssociatedTrackCuts& source);\r
51         AliHFAssociatedTrackCuts& operator=(const AliHFAssociatedTrackCuts& source);\r
52         \r
53         virtual ~AliHFAssociatedTrackCuts(); // destructor\r
54         Bool_t IsSelected(TList*  list) {if(list) return kTRUE; return kFALSE;};\r
55         Bool_t IsSelected(TObject*  obj) {if(obj) return kTRUE; return kFALSE;};\r
56         Bool_t IsInAcceptance();\r
57         Bool_t IsHadronSelected(AliAODTrack * track,const AliESDVertex *primary=0x0,const Double_t magfield=0);\r
58         Bool_t CheckHadronKinematic(Double_t pt, Double_t d0); \r
59         Bool_t Charge(Short_t charge, AliAODTrack* track);\r
60         Bool_t CheckKaonCompatibility(AliAODTrack * track, Bool_t useMc, TClonesArray* mcArray, Int_t method=1);\r
61         Bool_t IsKZeroSelected(AliAODv0 *vzero, AliAODVertex *vtx1);\r
62         Bool_t *IsMCpartFromHF(Int_t label, TClonesArray*mcArray);\r
63         Bool_t InvMassDstarRejection(AliAODRecoDecayHF2Prong* d, AliAODTrack *track, Int_t hypD0) const;\r
64         void SetPidAssociated();        \r
65         \r
66         // getters\r
67         AliESDtrackCuts * GetESDTrackCuts() const {return fESDTrackCuts;}\r
68         AliAODPidHF * GetPIDObject() const {return fPidObj;}\r
69         TH3D * GetEfficiencyWeight() const {return fEffWeights;}\r
70         \r
71         Int_t GetMaxNEventsInPool() const {return fPoolMaxNEvents;}\r
72         Int_t GetMinNTracksInPool() const {return fPoolMinNTracks;}\r
73         Int_t GetMinEventsToMix() const {return fMinEventsToMix;}\r
74         Int_t GetNZvtxPoolBins() const {return fNzVtxBins;}\r
75         Double_t *GetZvtxPoolBins() const {return fZvtxBins;}\r
76         Int_t GetNCentPoolBins() const {return fNCentBins;}\r
77         Double_t *GetCentPoolBins() const {return fCentBins;}\r
78         \r
79         Int_t GetNofMCEventType() const {return fNofMCEventType;}\r
80         Int_t *GetMCEventType() const {return fMCEventType;}\r
81     Int_t GetPoolBin(Double_t multorcent, Double_t zVtx) const;\r
82         \r
83         Int_t GetNTrackCuts() const {return fNTrackCuts;}\r
84         Float_t* GetAODTrackCuts() const {return fAODTrackCuts;}\r
85         TString * GetTrackCutNames() const {return fTrackCutsNames;}\r
86         Int_t GetNvZeroCuts() const {return fNvZeroCuts;}\r
87         Float_t * GetAODvZeroCuts() const {return fAODvZeroCuts;}\r
88         TString * GetvZeroCutNames() const {return fvZeroCutsNames;}\r
89         Int_t GetFilterBit() const {return fBit;}\r
90         Short_t GetCharge() const {return fCharge;}\r
91         TString GetDescription() const {return fDescription;}\r
92     \r
93 \r
94         \r
95         \r
96         \r
97         void AddTrackCuts(const AliESDtrackCuts *cuts) {\r
98                 delete fESDTrackCuts; \r
99                 fESDTrackCuts=new AliESDtrackCuts(*cuts); \r
100                 return;\r
101         }\r
102         \r
103         void AddDescription(TString description){fDescription=description;}\r
104         \r
105         //setters\r
106         //event pool settings\r
107         void SetMaxNEventsInPool(Int_t events){fPoolMaxNEvents=events;}\r
108         void SetMinNTracksInPool(Int_t tracks){fPoolMinNTracks=tracks;}\r
109         void SetMinEventsToMix(Int_t events){fMinEventsToMix=events;}\r
110         \r
111         void SetNofPoolBins(Int_t Nzvtxbins, Int_t Ncentbins){\r
112                 fNzVtxBins=Nzvtxbins;\r
113                 fNzVtxBinsDim=Nzvtxbins+1;\r
114                 \r
115             fNCentBins=Ncentbins;\r
116                 fNCentBinsDim=Ncentbins+1;\r
117         }\r
118         \r
119         void SetPoolBins(Double_t *ZvtxBins, Double_t* CentBins){\r
120                 fZvtxBins=ZvtxBins; \r
121                 fCentBins=CentBins;\r
122         }\r
123         \r
124         // set MC events to process\r
125         \r
126         void SetNofMCEventTypes(Int_t k) {fNofMCEventType=k;}\r
127         void SetMCEventTypes(Int_t *MCEventTypeArray);\r
128         \r
129         //cut settings\r
130         void SetAODTrackCuts(Float_t *cutsarray);\r
131         void SetTrackCutsNames(/*TString *namearray*/);\r
132         void SetAODvZeroCuts(Float_t *cutsarray);\r
133         void SetvZeroCutsNames(/*TString *namearray*/);\r
134         void SetPidHF(AliAODPidHF* pid) {fPidObj = pid; return;}\r
135         void SetCharge(Short_t charge) {fCharge = charge;}\r
136         void SetFilterBit(Int_t bit) {fBit = bit;}\r
137         void SetEfficiencyWeightMap(TH3D *hMap){if(fEffWeights)delete fEffWeights;fEffWeights=(TH3D*)hMap->Clone();}\r
138     \r
139     void SetTriggerEffWeightMapvspt(TH1D* hTrigMap) {if(fTrigEffWeightsvspt) delete fTrigEffWeightsvspt; fTrigEffWeightsvspt=(TH1D*)hTrigMap->Clone();}\r
140         void SetTriggerEffWeightMapvsptB(TH1D* hTrigMapB) {if(fTrigEffWeightsvsptB) delete fTrigEffWeightsvsptB; fTrigEffWeightsvsptB=(TH1D*)hTrigMapB->Clone();}\r
141     \r
142     void SetTriggerEffWeightMap(TH2D* hTrigMap) {if(fTrigEffWeights) delete fTrigEffWeights; fTrigEffWeights=(TH2D*)hTrigMap->Clone();}\r
143         void SetTriggerEffWeightMapB(TH2D* hTrigMapB) {if(fTrigEffWeightsB) delete fTrigEffWeightsB; fTrigEffWeightsB=(TH2D*)hTrigMapB->Clone();}\r
144     \r
145     \r
146         Double_t GetTrackWeight(Double_t pt, Double_t eta,Double_t zvtx);\r
147     Double_t GetTrigWeight(Double_t pt, Double_t mult=0);\r
148         Double_t GetTrigWeightB(Double_t pt, Double_t mult=0);\r
149     \r
150     Bool_t IsTrackEffMap(){if(fEffWeights) return kTRUE; else return kFALSE;}\r
151     Bool_t IsTrigEffMap1D(){ if(fTrigEffWeightsvspt) return kTRUE; else return kFALSE;}\r
152     Bool_t IsTrigEffMap1DB(){ if(fTrigEffWeightsvsptB) return kTRUE; else return kFALSE;}\r
153     Bool_t IsTrigEffMap2D(){ if(fTrigEffWeights) return kTRUE; else return kFALSE;}\r
154     Bool_t IsTrigEffMap2DB(){ if(fTrigEffWeightsB) return kTRUE; else return kFALSE;}\r
155     \r
156     \r
157         void Print(Option_t *option) const;\r
158         virtual void PrintAll() const;\r
159         virtual void PrintPoolParameters() const;\r
160         virtual void PrintSelectedMCevents() const;\r
161 \r
162         \r
163         \r
164         \r
165         void SetNVarsTrack(Int_t nVars){fNTrackCuts=nVars;}\r
166         void SetNVarsVzero(Int_t nVars){fNvZeroCuts=nVars;}\r
167         \r
168         \r
169         \r
170 private:\r
171         AliESDtrackCuts *fESDTrackCuts; // track cut object\r
172         AliAODPidHF * fPidObj;     /// PID object\r
173         TH3D *fEffWeights;     // weight map (pt,eta,zvtx) to account for single track efficiency\r
174     TH1D *fTrigEffWeightsvspt;     // weight map (pt,mult) to account for trigger efficiency (on data, from c)\r
175         TH1D *fTrigEffWeightsvsptB;     // weight map (pt,mult) to account for trigger efficiency (from b)\r
176     TH2D *fTrigEffWeights;     // weight map (pt,mult) to account for trigger efficiency (on data, from c)\r
177         TH2D *fTrigEffWeightsB;     // weight map (pt,mult) to account for trigger efficiency (from b)\r
178         Int_t fPoolMaxNEvents; // set maximum number of events in the pool\r
179         Int_t fPoolMinNTracks; // se minimum number of tracks in the pool\r
180         Int_t fMinEventsToMix; // set the minimum number of events you wanna mix\r
181         \r
182         Int_t fNzVtxBins; // number of z vrtx bins\r
183         Int_t fNzVtxBinsDim; // number of z vrtx bins +1 : necessary to initialize correctly the array\r
184         Double_t* fZvtxBins; // [fNzVtxBinsDim]\r
185         \r
186         \r
187         Int_t fNCentBins; //number of centrality bins\r
188         Int_t fNCentBinsDim; //number of centrality bins bins +1 : necessary to initialize correctly the array\r
189         Double_t* fCentBins; // [fNCentBinsDim]\r
190         \r
191         Int_t fNofMCEventType;// number of event types to be selected in MC simultaneously;\r
192         Int_t *fMCEventType;//[fNofMCEventType]\r
193         \r
194         Int_t fNTrackCuts;     // array dimension\r
195         Float_t* fAODTrackCuts;//[fNTrackCuts]\r
196         TString * fTrackCutsNames;//[fNTrackCuts]\r
197         Int_t fNvZeroCuts;// array dimension\r
198         Float_t *fAODvZeroCuts;//[fNvZeroCuts]\r
199         TString * fvZeroCutsNames;//[fNvZeroCuts]\r
200         Int_t fBit; // filterBit\r
201         Short_t fCharge; // charge (+1 or -1)\r
202         TString fDescription; // additional description to the cuts\r
203         \r
204         \r
205         ClassDef(AliHFAssociatedTrackCuts,6);\r
206 };\r
207 \r
208 \r
209 #endif\r