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 "AliAODEvent.h"
29 ClassImp(AliConversionTrackCuts)
32 const char* AliConversionTrackCuts::fgkCutNames[AliConversionTrackCuts::kNCuts] = {
45 //________________________________________________________________________
46 AliConversionTrackCuts::AliConversionTrackCuts() :
50 fRejectKinkDaughters(kTRUE),
62 fTPCClusOverFindable(0.0),
64 fAODTestFilterBit(-1),
65 fRequireTPCRefit(kFALSE),
76 fEta[0] = -0.8; fEta[1] = 0.8;
77 fPt[0] = 1.0; fPt[1] = 999.9;
80 //________________________________________________________________________
81 AliConversionTrackCuts::AliConversionTrackCuts(TString name, TString title = "title") :
82 AliAnalysisCuts(name, title),
85 fRejectKinkDaughters(kTRUE),
97 fTPCClusOverFindable(0.0),
99 fAODTestFilterBit(-1),
100 fRequireTPCRefit(kFALSE),
111 fEta[0] = -0.8; fEta[1] = 0.8;
112 fPt[0] = 1.0; fPt[1] = 999.9;
116 //________________________________________________________________________________
117 AliConversionTrackCuts::~AliConversionTrackCuts() {
120 // delete fHistograms;
121 // fHistograms = NULL;
125 TList * AliConversionTrackCuts::CreateHistograms() {
126 //Create the histograms
127 if(!fHistograms) fHistograms = new TList();
129 fHistograms->SetOwner(kTRUE);
130 fHistograms->SetName("trackCuts");
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]);
138 fHistograms->Add(fhPhi);
142 fhPt = new TH2F("pt", "pt", kNCuts+2, kPreCut -0.5, kNCuts + 0.5,
144 xax = fhPt->GetXaxis();
145 for(Int_t i = 0; i < kNCuts; i++){
146 xax->SetBinLabel(xax->FindFixBin(i), fgkCutNames[i]);
148 fHistograms->Add(fhPt);
150 fhPhiPt = new TH2F("phipt", "phipt", 100, 0, 100, 64, 0, TMath::TwoPi());
151 fHistograms->Add(fhPhiPt);
153 fhdcaxyPt = new TH2F("dcaxypt", "dcaxypt", 100, 0, 100, 100, 0, 100);
154 fHistograms->Add(fhdcaxyPt);
156 fhdcazPt = new TH2F("dcazpt", "dcazpt", 100, 0, 100, 100, 0, 100);
157 fHistograms->Add(fhdcazPt);
159 fhnclpt = new TH2F("nclstpcvspt", "nclstpcvspt", 100, 0, 100, 100, 0, 100);
160 fHistograms->Add(fhnclpt);
162 fhnclsfpt = new TH2F("nclsfpt", "nclsfpt", 100, 0, 100, 100, 0, 1.2);
163 fHistograms->Add(fhnclsfpt);
169 void AliConversionTrackCuts::FillHistograms(Int_t cutIndex, AliVTrack * track, Bool_t passed = kFALSE) {
171 fhPhi->Fill(cutIndex, track->Phi());
172 fhPt->Fill(cutIndex, track->Pt());
173 if(passed) fhPhiPt->Fill(track->Pt(), track->Phi());
177 Bool_t AliConversionTrackCuts::AcceptTrack(AliAODTrack * track) {
182 fhdcaxyPt->Fill(track->Pt(), TMath::Sqrt(track->XAtDCA()*track->XAtDCA() + track->YAtDCA()*track->YAtDCA()));
183 fhdcazPt->Fill(track->Pt(), TMath::Abs(track->ZAtDCA()));
185 fhnclpt->Fill(track->Pt(), track->GetTPCNcls());
186 if(track->GetTPCNclsF() > 0) fhnclsfpt->Fill(track->Pt(), ((Double_t) track->GetTPCNcls())/track->GetTPCNclsF());
189 FillHistograms(kPreCut, track);
191 if(! track->TestFilterBit(128)) return kFALSE;
196 // if (track->GetTPCNcls() < fTPCminNClusters) return kFALSE;
197 // FillHistograms(kCutNcls, track);
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);
204 // if (track->Chi2perNDF() > fTPCmaxChi2) return kFALSE;
205 // FillHistograms(kCutNDF, track);
207 // AliAODVertex *vertex = track->GetProdVertex();
208 // if (vertex && fRejectKinkDaughters) {
209 // if (vertex->GetType() == AliAODVertex::kKink) {
213 // FillHistograms(kCutKinc, track);
215 // if(TMath::Abs(track->ZAtDCA()) > fDCAZmax) {
218 // FillHistograms(kCutDCAZ, track);
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");
228 // FillHistograms(kCutDCAXY, track);
230 // ULong_t status = track->GetStatus();
231 // if (fRequireTPCRefit && (status&AliESDtrack::kTPCrefit) == 0) {
232 // AliDebug(AliLog::kDebug + 2, "Kink daughter. Rejected");
235 // FillHistograms(kCutTPCRefit, track);
237 FillHistograms(kNCuts, track, kTRUE);
241 // void AliConversionTrackCuts::SetUpAxes() {
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]);
248 // for(Int_t i = 0, i < kNCuts; i++) {
253 //_________________________________________________________________________________________________
254 void AliConversionTrackCuts::Print(const Option_t *) const
257 // Print information on this cut
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);