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 analysation of conversion particle - track correlations
21 #include "AliConversionTrackCuts.h"
22 //#include "AliAODTrack.h"
23 #include "AliAODEvent.h"
27 #include "AliESDtrackCuts.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),
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),
117 //________________________________________________________________________________
118 AliConversionTrackCuts::~AliConversionTrackCuts() {
121 // delete fHistograms;
122 // fHistograms = NULL;
129 TList * AliConversionTrackCuts::CreateHistograms() {
130 //Create the histograms
132 if(!fHistograms) fHistograms = new TList();
134 fHistograms->SetOwner(kTRUE);
135 fHistograms->SetName("trackCuts");
137 fhPhi = new TH2F("phi", "phi", kNCuts+2, kPreCut -0.5, kNCuts + 0.5,
138 32, 0, TMath::TwoPi());
139 TAxis * xax = fhPhi->GetXaxis();
140 for(Int_t i = 0; i < kNCuts; i++){
141 xax->SetBinLabel(xax->FindFixBin(i), fgkCutNames[i]);
143 fHistograms->Add(fhPhi);
147 fhPt = new TH2F("pt", "pt", kNCuts+2, kPreCut -0.5, kNCuts + 0.5,
149 xax = fhPt->GetXaxis();
150 for(Int_t i = 0; i < kNCuts; i++){
151 xax->SetBinLabel(xax->FindFixBin(i), fgkCutNames[i]);
153 fHistograms->Add(fhPt);
155 // fhPhiPt = new TH2F("phipt", "phipt", 100, 0, 100, 64, 0, TMath::TwoPi());
156 //fHistograms->Add(fhPhiPt);
158 fhdcaxyPt = new TH2F("dcaxypt", "dcaxypt", 20, 0, 20, 50, 0, 5);
159 fHistograms->Add(fhdcaxyPt);
161 fhdcazPt = new TH2F("dcazpt", "dcazpt", 20, 0, 20, 50, 0, 5);
162 fHistograms->Add(fhdcazPt);
164 fhdca = new TH2F("dca", "dca", 60, -3, 3, 60, -3, 3);
165 fHistograms->Add(fhdca);
167 fhnclpt = new TH2F("nclstpcvspt", "nclstpcvspt", 20, 0, 20, 50, 0, 100);
168 fHistograms->Add(fhnclpt);
170 fhnclsfpt = new TH2F("nclsfpt", "nclsfpt", 20, 0, 20, 60, 0, 1.2);
171 fHistograms->Add(fhnclsfpt);
177 void AliConversionTrackCuts::FillHistograms(Int_t cutIndex, AliVTrack * track, Bool_t passed = kFALSE) {
180 fhPhi->Fill(cutIndex, track->Phi());
181 fhPt->Fill(cutIndex, track->Pt());
182 //if(passed) fhPhiPt->Fill(track->Pt(), track->Phi());
186 void AliConversionTrackCuts::FillDCAHist(Float_t dcaz, Float_t dcaxy, AliVTrack * track) {
187 fhdcaxyPt->Fill(track->Pt(), dcaxy);
188 fhdcazPt->Fill(track->Pt(), dcaz);
189 fhdca->Fill(dcaz, dcaxy);
193 Bool_t AliConversionTrackCuts::AcceptTrack(AliESDtrack * track) {
196 fESDCuts = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
198 FillHistograms(kPreCut, track);
200 if( !fESDCuts->IsSelected(track)) {
205 fhnclpt->Fill(track->Pt(), track->GetTPCNcls());
206 if(track->GetTPCNclsF() > 0) fhnclsfpt->Fill(track->Pt(), ((Double_t) track->GetTPCNcls())/track->GetTPCNclsF());
207 FillHistograms(kPreCut + 1, track);
209 ///Get impact parameters
211 track->GetExternalCovariance(extCov);
214 track->GetImpactParameters(b,bCov);
215 if (bCov[0]<=0 || bCov[2]<=0) {
216 AliDebug(1, "Estimated b resolution lower or equal zero!");
217 bCov[0]=0; bCov[2]=0;
220 Float_t dcaToVertexXY = b[0];
221 Float_t dcaToVertexZ = b[1];
222 FillDCAHist(dcaToVertexZ, dcaToVertexXY, track);
226 Bool_t AliConversionTrackCuts::AcceptTrack(AliAODTrack * track) {
228 FillHistograms(kPreCut, track);
229 if(!track->TestFilterBit(128)) {
233 if (track->GetTPCNcls() < fTPCminNClusters) return kFALSE;
234 FillHistograms(kCutNcls, track);
236 if (track->Chi2perNDF() > fTPCmaxChi2) return kFALSE;
237 FillHistograms(kCutNDF, track);
239 AliAODVertex *vertex = track->GetProdVertex();
240 if (vertex && fRejectKinkDaughters) {
241 if (vertex->GetType() == AliAODVertex::kKink) {
245 FillHistograms(kCutKinc, track);
247 if(TMath::Abs(track->ZAtDCA()) > fDCAZmax) {
250 FillHistograms(kCutDCAZ, track);
252 Float_t xatdca = track->XAtDCA();
253 Float_t yatdca = track->YAtDCA();
254 Float_t xy = xatdca*xatdca + yatdca*yatdca;
259 FillHistograms(kCutDCAXY, track);
262 fhnclpt->Fill(track->Pt(), track->GetTPCNcls());
263 if(track->GetTPCNclsF() > 0) fhnclsfpt->Fill(track->Pt(), ((Double_t) track->GetTPCNcls())/track->GetTPCNclsF());
264 FillDCAHist(track->ZAtDCA(), TMath::Sqrt(track->XAtDCA()*track->XAtDCA() + track->YAtDCA()*track->YAtDCA()), track);
270 //_________________________________________________________________________________________________
271 void AliConversionTrackCuts::Print(const Option_t *) const
274 // Print information on this cut
277 printf("Cut name : %s \n", GetName());
278 printf("Kink daughters are : %s \n", (fRejectKinkDaughters ? "rejected" : "accepted"));
279 printf("TPC requirements : clusters/findable %f, min. cluster = %d, max chi2 = %f, %s require refit\n", fTPCClusOverFindable, fTPCminNClusters, fTPCmaxChi2, (fRequireTPCRefit) ? "" : "Don't");
280 printf("ITS requirements : min. cluster = %d (all), %d (SPD), max chi2 = %f \n", fITSminNClusters, fSPDminNClusters, fITSmaxChi2);
281 printf("DCA z cut : fixed to %f cm \n", fDCAZmax);
282 printf("DCA xy cut : fixed to %f cm \n", fDCAXYmax);
285 //_________________________________________________________________________________________________
287 Bool_t AliConversionTrackCuts::IsSelected(TObject * object ) {
288 AliAODTrack * aodtrack = dynamic_cast<AliAODTrack*>(object);
290 return AcceptTrack(aodtrack);
292 AliESDtrack * track = dynamic_cast<AliESDtrack*>(object);
294 return AcceptTrack(track);