changes from gsi. Using mult if no centrality. testfilterbit 128
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliConversionTrackCuts.cxx
1 /**************************************************************************
2  * This file is property of and copyright by the ALICE HLT Project        *
3  * ALICE Experiment at CERN, All rights reserved.                         *
4  *                                                                        *
5  * Primary Author: Svein Lindal <slindal@fys.uio.no>                      *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /// @file   AliConversionTrackCuts.cxx
17 /// @author Svein Lindal
18 /// @brief  Base class for aod track cuts. An adapted copy of Alirsntrackcuts
19
20
21 #include "AliConversionTrackCuts.h"
22 //#include "AliAODTrack.h"
23 #include "AliAODEvent.h"
24 #include <TFormula.h>
25 #include <iostream>
26 #include "TH2F.h"
27
28
29 using namespace std;
30 ClassImp(AliConversionTrackCuts)
31
32
33 const char* AliConversionTrackCuts::fgkCutNames[AliConversionTrackCuts::kNCuts] = {
34   "nClusTPC", 
35   "FoundFindable", 
36   "Chi2PerNDF", 
37   "Kink", 
38   "DCA_Z", 
39   "DCA_XY", 
40   "TPCRefit"
41   "kAccTracks"
42 };
43
44
45
46 //________________________________________________________________________
47 AliConversionTrackCuts::AliConversionTrackCuts() : 
48   AliAnalysisCuts(),
49   fFlagsOn(0x0),
50   fFlagsOff(0x0),
51   fRejectKinkDaughters(kTRUE),
52   fDCARfixed(kTRUE),
53   fDCARptFormula(""),
54   fDCARmax(1E20),
55   fDCAZfixed(kTRUE),
56   fDCAZptFormula(""),
57   fDCAZmax(1E20),
58   fDCAXYmax(1E20),
59   fSPDminNClusters(0),
60   fITSminNClusters(0),
61   fITSmaxChi2(1E20),
62   fTPCminNClusters(0),
63   fTPCClusOverFindable(0.0),
64   fTPCmaxChi2(1E20),
65   fAODTestFilterBit(-1),
66   fRequireTPCRefit(kFALSE),
67   fhPhi(NULL),
68   fhPt(NULL),
69   fhPhiPt(NULL),
70   fhdcaxyPt(NULL),
71   fhdcazPt(NULL), 
72   fhnclpt(NULL),
73   fhnclsfpt(NULL),
74   fHistograms(NULL)
75 {
76   //Constructor
77   fEta[0] = -0.8; fEta[1] = 0.8;
78   fPt[0] = 1.0; fPt[1] = 999.9;
79   
80 }
81 //________________________________________________________________________
82 AliConversionTrackCuts::AliConversionTrackCuts(TString name, TString title = "title") : 
83   AliAnalysisCuts(name, title),
84   fFlagsOn(0x0),
85   fFlagsOff(0x0),
86   fRejectKinkDaughters(kTRUE),
87   fDCARfixed(kTRUE),
88   fDCARptFormula(""),
89   fDCARmax(1E20),
90   fDCAZfixed(kTRUE),
91   fDCAZptFormula(""),
92   fDCAZmax(1E20),
93   fDCAXYmax(1E20),
94   fSPDminNClusters(0),
95   fITSminNClusters(0),
96   fITSmaxChi2(1E20),
97   fTPCminNClusters(0),
98   fTPCClusOverFindable(0.0),
99   fTPCmaxChi2(1E20),
100   fAODTestFilterBit(-1),
101   fRequireTPCRefit(kFALSE),
102   fhPhi(NULL),  
103   fhPt(NULL),
104   fhPhiPt(NULL),
105   fhdcaxyPt(NULL),
106   fhdcazPt(NULL), 
107   fhnclpt(NULL),
108   fhnclsfpt(NULL),
109   fHistograms(NULL)
110 {
111   //Constructor
112   fEta[0] = -0.8; fEta[1] = 0.8;
113   fPt[0] = 1.0; fPt[1] = 999.9;
114 }
115
116
117 //________________________________________________________________________________
118  AliConversionTrackCuts::~AliConversionTrackCuts() {
119    ///destructor
120    // if(fHistograms)
121    //    delete fHistograms;
122    // fHistograms = NULL;
123
124 }
125
126 TList * AliConversionTrackCuts::CreateHistograms() {
127   //Create the histograms
128   if(!fHistograms) fHistograms = new TList();
129
130   fHistograms->SetOwner(kTRUE);
131   fHistograms->SetName("trackCuts");
132
133   fhPhi = new TH2F("phi", "phi", kNCuts+2, kPreCut -0.5, kNCuts + 0.5, 
134                                    128, 0, TMath::TwoPi());
135   TAxis * xax = fhPhi->GetXaxis();
136   for(Int_t i = 0; i < kNCuts; i++){
137         xax->SetBinLabel(xax->FindFixBin(i), fgkCutNames[i]);
138   }
139   fHistograms->Add(fhPhi);
140   
141
142
143   fhPt = new TH2F("pt", "pt", kNCuts+2, kPreCut -0.5, kNCuts + 0.5, 
144                                   100, 0., 100.);
145   xax = fhPt->GetXaxis();
146   for(Int_t i = 0; i < kNCuts; i++){
147         xax->SetBinLabel(xax->FindFixBin(i), fgkCutNames[i]);
148   }
149   fHistograms->Add(fhPt);
150
151   fhPhiPt = new TH2F("phipt", "phipt", 100, 0, 100, 64, 0, TMath::TwoPi());
152   fHistograms->Add(fhPhiPt);
153
154   fhdcaxyPt = new TH2F("dcaxypt", "dcaxypt", 100, 0, 100, 100, 0, 100);
155   fHistograms->Add(fhdcaxyPt);
156
157   fhdcazPt = new TH2F("dcazpt", "dcazpt", 100, 0, 100, 100, 0, 100);
158   fHistograms->Add(fhdcazPt);
159
160   fhnclpt = new TH2F("nclstpcvspt", "nclstpcvspt", 100, 0, 100, 100, 0, 100);
161   fHistograms->Add(fhnclpt);
162
163   fhnclsfpt = new TH2F("nclsfpt", "nclsfpt", 100, 0, 100, 100, 0, 1.2);
164   fHistograms->Add(fhnclsfpt);
165   
166   return fHistograms;
167 }
168
169
170 void AliConversionTrackCuts::FillHistograms(Int_t cutIndex, AliVTrack * track, Bool_t passed = kFALSE) {
171   //Fill histograms
172   fhPhi->Fill(cutIndex, track->Phi());
173   fhPt->Fill(cutIndex, track->Pt());
174   if(passed) fhPhiPt->Fill(track->Pt(), track->Phi());
175
176 }
177
178 Bool_t AliConversionTrackCuts::AcceptTrack(AliAODTrack * track) {
179   //Check aod track
180
181
182
183   fhdcaxyPt->Fill(track->Pt(), TMath::Sqrt(track->XAtDCA()*track->XAtDCA() + track->YAtDCA()*track->YAtDCA()));
184   fhdcazPt->Fill(track->Pt(), TMath::Abs(track->ZAtDCA())); 
185   
186   fhnclpt->Fill(track->Pt(), track->GetTPCNcls());
187   if(track->GetTPCNclsF() > 0) fhnclsfpt->Fill(track->Pt(), ((Double_t) track->GetTPCNcls())/track->GetTPCNclsF());
188
189   
190   FillHistograms(kPreCut, track);
191
192   if(! track->TestFilterBit(128)) return kFALSE;
193
194   
195
196
197 //   if (track->GetTPCNcls() < fTPCminNClusters) return kFALSE;
198 //   FillHistograms(kCutNcls, track);
199
200 //   Double_t foundclusters = 0.0001;
201 //   if(track->GetTPCNclsF() > 0) foundclusters = ( (Double_t) track->GetTPCNcls() )/track->GetTPCNclsF();
202 //   if (foundclusters < fTPCClusOverFindable) return kFALSE;
203 //   FillHistograms(kCutNclsFrac, track);
204
205 //   if (track->Chi2perNDF() > fTPCmaxChi2) return kFALSE;
206 //   FillHistograms(kCutNDF, track);
207
208 //   AliAODVertex *vertex = track->GetProdVertex();
209 //   if (vertex && fRejectKinkDaughters) {
210 //      if (vertex->GetType() == AliAODVertex::kKink) {
211 //        return kFALSE;
212 //      }
213 //   }
214 //   FillHistograms(kCutKinc, track);
215
216 //   if(TMath::Abs(track->ZAtDCA()) > fDCAZmax) {
217 //      return kFALSE;
218 //   }
219 //   FillHistograms(kCutDCAZ, track);
220
221
222 //   Float_t xatdca = track->XAtDCA();
223 //   Float_t yatdca = track->YAtDCA();
224 //   Float_t xy = xatdca*xatdca + yatdca*yatdca;
225 //   if(xy > fDCAXYmax) {
226 //      AliDebug(AliLog::kDebug + 2, "Kink daughter. Rejected");
227 //      return kFALSE;
228 //   }
229 //   FillHistograms(kCutDCAXY, track);
230
231 //   ULong_t status = track->GetStatus();
232 //   if (fRequireTPCRefit && (status&AliESDtrack::kTPCrefit) == 0) {
233 //      AliDebug(AliLog::kDebug + 2, "Kink daughter. Rejected");
234 //      return kFALSE;
235 //   }
236 //   FillHistograms(kCutTPCRefit, track);
237   
238    FillHistograms(kNCuts, track, kTRUE);
239    return kTRUE;
240 }
241
242 // void AliConversionTrackCuts::SetUpAxes() {
243 //   //
244 //   fCutAxis.Set(kNCuts + 1, -1.5, kNCuts -0.5);
245 //   fCutAxis.SetAxisLabel(-1, "track in");
246 //   for (Int_t i = 0; i < kNCuts; i++) {
247 //      fCutAxis.SetAxisLabel(i, fgkCutNames[i]);
248 //   }
249 //   for(Int_t i = 0, i < kNCuts; i++) {
250 //   }
251 // }
252
253
254 //_________________________________________________________________________________________________
255 void AliConversionTrackCuts::Print(const Option_t *) const
256 {
257 //
258 // Print information on this cut
259 //
260
261   printf("Cut name                : %s \n", GetName());
262   printf("Kink daughters are      : %s \n", (fRejectKinkDaughters ? "rejected" : "accepted"));
263   printf("TPC requirements        : clusters/findable %f, min. cluster = %d, max chi2 = %f, %s require refit\n", fTPCClusOverFindable, fTPCminNClusters, fTPCmaxChi2, (fRequireTPCRefit) ? "" : "Don't");
264   printf("ITS requirements        : min. cluster = %d (all), %d (SPD), max chi2 = %f \n", fITSminNClusters, fSPDminNClusters, fITSmaxChi2);
265   printf("DCA z cut               : fixed to %f cm \n", fDCAZmax);
266   printf("DCA xy cut              : fixed to %f cm \n", fDCAXYmax);
267   
268 }
269
270
271
272
273
274