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