1 /**************************************************************************
2 * This file is property of and copyright by the ALICE HLT Project *
3 * ALICE Experiment at CERN, All rights reserved. *
5 * Primary Author: Svein Lindal <slindal@fys.uio.no> *
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 **************************************************************************/
16 /// @file AliConversionTrackCuts.cxx
17 /// @author Svein Lindal
18 /// @brief Base class for aod track cuts. An adapted copy of Alirsntrackcuts
21 #include "AliConversionTrackCuts.h"
22 //#include "AliAODTrack.h"
23 #include "AliAODEvent.h"
30 ClassImp(AliConversionTrackCuts)
33 const char* AliConversionTrackCuts::fgkCutNames[AliConversionTrackCuts::kNCuts] = {
46 //________________________________________________________________________
47 AliConversionTrackCuts::AliConversionTrackCuts() :
51 fRejectKinkDaughters(kTRUE),
63 fTPCClusOverFindable(0.0),
65 fAODTestFilterBit(-1),
66 fRequireTPCRefit(kFALSE),
78 //________________________________________________________________________
79 AliConversionTrackCuts::AliConversionTrackCuts(TString name, TString title = "title") :
80 AliAnalysisCuts(name, title),
83 fRejectKinkDaughters(kTRUE),
95 fTPCClusOverFindable(0.0),
97 fAODTestFilterBit(-1),
98 fRequireTPCRefit(kFALSE),
112 //________________________________________________________________________________
113 AliConversionTrackCuts::~AliConversionTrackCuts() {
116 // delete fHistograms;
117 // fHistograms = NULL;
121 TList * AliConversionTrackCuts::CreateHistograms() {
122 //Create the histograms
123 if(!fHistograms) fHistograms = new TList();
125 fHistograms->SetOwner(kTRUE);
126 fHistograms->SetName("trackCuts");
128 fhPhi = new TH2F("phi", "phi", kNCuts+2, kPreCut -0.5, kNCuts + 0.5,
129 128, 0, TMath::TwoPi());
130 TAxis * xax = fhPhi->GetXaxis();
131 for(Int_t i = 0; i < kNCuts; i++){
132 xax->SetBinLabel(xax->FindFixBin(i), fgkCutNames[i]);
134 fHistograms->Add(fhPhi);
138 fhPt = new TH2F("pt", "pt", kNCuts+2, kPreCut -0.5, kNCuts + 0.5,
140 xax = fhPt->GetXaxis();
141 for(Int_t i = 0; i < kNCuts; i++){
142 xax->SetBinLabel(xax->FindFixBin(i), fgkCutNames[i]);
144 fHistograms->Add(fhPt);
146 fhPhiPt = new TH2F("phipt", "phipt", 100, 0, 100, 64, 0, TMath::TwoPi());
147 fHistograms->Add(fhPhiPt);
149 fhdcaxyPt = new TH2F("dcaxypt", "dcaxypt", 100, 0, 100, 100, 0, 100);
150 fHistograms->Add(fhdcaxyPt);
152 fhdcazPt = new TH2F("dcazpt", "dcazpt", 100, 0, 100, 100, 0, 100);
153 fHistograms->Add(fhdcazPt);
155 fhnclpt = new TH2F("nclstpcvspt", "nclstpcvspt", 100, 0, 100, 100, 0, 100);
156 fHistograms->Add(fhnclpt);
158 fhnclsfpt = new TH2F("nclsfpt", "nclsfpt", 100, 0, 100, 100, 0, 1.2);
159 fHistograms->Add(fhnclsfpt);
165 void AliConversionTrackCuts::FillHistograms(Int_t cutIndex, AliVTrack * track, Bool_t passed = kFALSE) {
167 fhPhi->Fill(cutIndex, track->Phi());
168 fhPt->Fill(cutIndex, track->Pt());
169 if(passed) fhPhiPt->Fill(track->Pt(), track->Phi());
173 Bool_t AliConversionTrackCuts::AcceptTrack(AliAODTrack * track) {
176 fhdcaxyPt->Fill(track->Pt(), TMath::Sqrt(track->XAtDCA()*track->XAtDCA() + track->YAtDCA()*track->YAtDCA()));
177 fhdcazPt->Fill(track->Pt(), TMath::Abs(track->ZAtDCA()));
179 fhnclpt->Fill(track->Pt(), track->GetTPCNcls());
180 if(track->GetTPCNclsF() > 0) fhnclsfpt->Fill(track->Pt(), ((Double_t) track->GetTPCNcls())/track->GetTPCNclsF());
183 FillHistograms(kPreCut, track);
185 if (track->GetTPCNcls() < fTPCminNClusters) return kFALSE;
186 FillHistograms(kCutNcls, track);
188 Double_t foundclusters = 0.0001;
189 if(track->GetTPCNclsF() > 0) foundclusters = ( (Double_t) track->GetTPCNcls() )/track->GetTPCNclsF();
190 if (foundclusters < fTPCClusOverFindable) return kFALSE;
191 FillHistograms(kCutNclsFrac, track);
193 if (track->Chi2perNDF() > fTPCmaxChi2) return kFALSE;
194 FillHistograms(kCutNDF, track);
196 AliAODVertex *vertex = track->GetProdVertex();
197 if (vertex && fRejectKinkDaughters) {
198 if (vertex->GetType() == AliAODVertex::kKink) {
202 FillHistograms(kCutKinc, track);
204 if(TMath::Abs(track->ZAtDCA()) > fDCAZmax) {
207 FillHistograms(kCutDCAZ, track);
210 Float_t xatdca = track->XAtDCA();
211 Float_t yatdca = track->YAtDCA();
212 Float_t xy = xatdca*xatdca + yatdca*yatdca;
214 AliDebug(AliLog::kDebug + 2, "Kink daughter. Rejected");
217 FillHistograms(kCutDCAXY, track);
219 ULong_t status = track->GetStatus();
220 if (fRequireTPCRefit && (status&AliESDtrack::kTPCrefit) == 0) {
221 AliDebug(AliLog::kDebug + 2, "Kink daughter. Rejected");
224 FillHistograms(kCutTPCRefit, track);
226 FillHistograms(kNCuts, track, kTRUE);
230 // void AliConversionTrackCuts::SetUpAxes() {
232 // fCutAxis.Set(kNCuts + 1, -1.5, kNCuts -0.5);
233 // fCutAxis.SetAxisLabel(-1, "track in");
234 // for (Int_t i = 0; i < kNCuts; i++) {
235 // fCutAxis.SetAxisLabel(i, fgkCutNames[i]);
237 // for(Int_t i = 0, i < kNCuts; i++) {
242 //_________________________________________________________________________________________________
243 void AliConversionTrackCuts::Print(const Option_t *) const
246 // Print information on this cut
249 printf("Cut name : %s \n", GetName());
250 printf("Kink daughters are : %s \n", (fRejectKinkDaughters ? "rejected" : "accepted"));
251 printf("TPC requirements : clusters/findable %f, min. cluster = %d, max chi2 = %f, %s require refit\n", fTPCClusOverFindable, fTPCminNClusters, fTPCmaxChi2, (fRequireTPCRefit) ? "" : "Don't");
252 printf("ITS requirements : min. cluster = %d (all), %d (SPD), max chi2 = %f \n", fITSminNClusters, fSPDminNClusters, fITSmaxChi2);
253 printf("DCA z cut : fixed to %f cm \n", fDCAZmax);
254 printf("DCA xy cut : fixed to %f cm \n", fDCAXYmax);