#include <TTree.h>
#include <TCanvas.h>
#include <TDirectory.h>
+#include <TH2F.h>
+#include <TF1.h>
//____________________________________________________________________
ClassImp(AliESDtrackCuts)
"trk-to-vtx min dca z absolute",
"SPD cluster requirement",
"SDD cluster requirement",
- "SSD cluster requirement"
+ "SSD cluster requirement",
+ "require ITS stand-alone",
+ "rel 1/pt uncertainty"
};
//____________________________________________________________________
fCutMaxC33(0),
fCutMaxC44(0),
fCutMaxC55(0),
+ fCutMaxRel1PtUncertainty(0),
fCutAcceptKinkDaughters(0),
fCutRequireTPCRefit(0),
fCutRequireITSRefit(0),
+ fCutRequireITSStandAlone(0),
fCutNsigmaToVertex(0),
fCutSigmaToVertexRequired(0),
fCutMaxDCAToVertexXY(0),
SetMinNClustersITS();
SetMaxChi2PerClusterTPC();
SetMaxChi2PerClusterITS();
- SetMaxCovDiagonalElements();
+ SetMaxCovDiagonalElements();
+ SetMaxRel1PtUncertainty();
SetRequireTPCRefit();
SetRequireITSRefit();
- SetAcceptKingDaughters();
+ SetRequireITSStandAlone(kFALSE);
+ SetAcceptKinkDaughters();
SetMaxNsigmaToVertex();
SetMaxDCAToVertexXY();
SetMaxDCAToVertexZ();
fCutMaxC33(0),
fCutMaxC44(0),
fCutMaxC55(0),
+ fCutMaxRel1PtUncertainty(0),
fCutAcceptKinkDaughters(0),
fCutRequireTPCRefit(0),
fCutRequireITSRefit(0),
+ fCutRequireITSStandAlone(0),
fCutNsigmaToVertex(0),
fCutSigmaToVertexRequired(0),
fCutMaxDCAToVertexXY(0),
if (fhC44[i])
delete fhC44[i];
if (fhC55[i])
- delete fhC55[i];
+ delete fhC55[i];
+
+ if (fhRel1PtUncertainty[i])
+ delete fhRel1PtUncertainty[i];
if (fhDXY[i])
delete fhDXY[i];
fCutMaxC33 = 0;
fCutMaxC44 = 0;
fCutMaxC55 = 0;
+
+ fCutMaxRel1PtUncertainty = 0;
fCutAcceptKinkDaughters = 0;
fCutRequireTPCRefit = 0;
fCutRequireITSRefit = 0;
+ fCutRequireITSStandAlone = 0;
fCutNsigmaToVertex = 0;
fCutSigmaToVertexRequired = 0;
fhC44[i] = 0;
fhC55[i] = 0;
+ fhRel1PtUncertainty[i] = 0;
+
fhDXY[i] = 0;
fhDZ[i] = 0;
fhDXYDZ[i] = 0;
target.fCutMaxC44 = fCutMaxC44;
target.fCutMaxC55 = fCutMaxC55;
+ target.fCutMaxRel1PtUncertainty = fCutMaxRel1PtUncertainty;
+
target.fCutAcceptKinkDaughters = fCutAcceptKinkDaughters;
target.fCutRequireTPCRefit = fCutRequireTPCRefit;
target.fCutRequireITSRefit = fCutRequireITSRefit;
+ target.fCutRequireITSStandAlone = fCutRequireITSStandAlone;
target.fCutNsigmaToVertex = fCutNsigmaToVertex;
target.fCutSigmaToVertexRequired = fCutSigmaToVertexRequired;
if (fhC44[i]) target.fhC44[i] = (TH1F*) fhC44[i]->Clone();
if (fhC55[i]) target.fhC55[i] = (TH1F*) fhC55[i]->Clone();
+ if (fhRel1PtUncertainty[i]) target.fhRel1PtUncertainty[i] = (TH1F*) fhRel1PtUncertainty[i]->Clone();
+
if (fhDXY[i]) target.fhDXY[i] = (TH1F*) fhDXY[i]->Clone();
if (fhDZ[i]) target.fhDZ[i] = (TH1F*) fhDZ[i]->Clone();
if (fhDXYDZ[i]) target.fhDXYDZ[i] = (TH1F*) fhDXYDZ[i]->Clone();
fhC22[i] ->Add(entry->fhC22[i] );
fhC33[i] ->Add(entry->fhC33[i] );
fhC44[i] ->Add(entry->fhC44[i] );
- fhC55[i] ->Add(entry->fhC55[i] );
+ fhC55[i] ->Add(entry->fhC55[i] );
+
+ fhRel1PtUncertainty[i] ->Add(entry->fhRel1PtUncertainty[i]);
fhDXY[i] ->Add(entry->fhDXY[i] );
fhDZ[i] ->Add(entry->fhDZ[i] );
return count+1;
}
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardTPCOnlyTrackCuts()
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for TPC-only cuts
+ // see ALICE note: ...
+
+ Printf("AliESDtrackCuts::GetStandardTPCOnlyTrackCuts: Creating track cuts for TPC-only.");
+
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+
+ esdTrackCuts->SetMinNClustersTPC(50);
+ esdTrackCuts->SetMaxChi2PerClusterTPC(4);
+ esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+
+ esdTrackCuts->SetMaxDCAToVertexZ(3.2);
+ esdTrackCuts->SetMaxDCAToVertexXY(2.4);
+ esdTrackCuts->SetDCAToVertex2D(kTRUE);
+
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+Int_t AliESDtrackCuts::GetReferenceMultiplicity(AliESDEvent* esd, Bool_t tpcOnly)
+{
+ // Gets reference multiplicity following the standard cuts and a defined fiducial volume
+ // tpcOnly = kTRUE -> consider TPC-only tracks
+ // = kFALSE -> consider global tracks
+
+ if (!tpcOnly)
+ {
+ Printf("AliESDtrackCuts::GetReferenceMultiplicity: Not implemented for global tracks!");
+ return -1;
+ }
+
+ AliESDtrackCuts* esdTrackCuts = GetStandardTPCOnlyTrackCuts();
+ esdTrackCuts->SetEtaRange(-0.8, 0.8);
+ esdTrackCuts->SetPtRange(0.15);
+
+ Int_t nTracks = esdTrackCuts->CountAcceptedTracks(esd);
+
+ delete esdTrackCuts;
+ esdTrackCuts = 0;
+
+ return nTracks;
+}
//____________________________________________________________________
Float_t AliESDtrackCuts::GetSigmaToVertex(AliESDtrack* esdTrack)
// -> Erf(d/Sqrt(2)) for a 1-dim gauss (d = n_sigma)
// -> 1 - Exp(-d**2) for a 2-dim gauss (d*d = dx*dx + dy*dy != n_sigma)
//
- // It means that for a 2-dim gauss: n_sigma(d) = Sqrt(2)*ErfInv(1 - Exp((-x**2)/2)
+ // It means that for a 2-dim gauss: n_sigma(d) = Sqrt(2)*ErfInv(1 - Exp((-d**2)/2)
// Can this be expressed in a different way?
if (bRes[0] == 0 || bRes[1] ==0)
}
//____________________________________________________________________
-Bool_t
-AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack) {
+Bool_t AliESDtrackCuts::AcceptTrack(AliESDtrack* esdTrack)
+{
//
// figure out if the tracks survives all the track cuts defined
//
eta = 0.5*TMath::Log((momentum + p[2])/(momentum - p[2]));
if((energy != TMath::Abs(p[2]))&&(momentum != 0))
y = 0.5*TMath::Log((energy + p[2])/(energy - p[2]));
-
+
+ Float_t relUncertainty1Pt = TMath::Sqrt(extCov[14])*pt;
//########################################################################
// cut the track?
for (Int_t i = 0; i < 3; i++)
cuts[27+i] = !CheckITSClusterRequirement(fCutClusterRequirementITS[i], esdTrack->HasPointOnITSLayer(i*2), esdTrack->HasPointOnITSLayer(i*2+1));
-
+
+ if (fCutRequireITSStandAlone && ((status & AliESDtrack::kITSin) == 0 || (status & AliESDtrack::kTPCin)))
+ cuts[30]=kTRUE;
+
+ if (relUncertainty1Pt > fCutMaxRel1PtUncertainty)
+ cuts[31]=kTRUE;
+
Bool_t cut=kFALSE;
for (Int_t i=0; i<kNCuts; i++)
if (cuts[i]) {cut = kTRUE;}
fhC44[id]->Fill(extCov[9]);
fhC55[id]->Fill(extCov[14]);
+ fhRel1PtUncertainty[id]->Fill(relUncertainty1Pt);
+
fhPt[id]->Fill(pt);
fhEta[id]->Fill(eta);
fhC44[i] = new TH1F("covMatrixDiagonal44","",1000,0,0.1);
fhC55[i] = new TH1F("covMatrixDiagonal55","",1000,0,5);
+ fhRel1PtUncertainty[i] = new TH1F("rel1PtUncertainty","",1000,0,5);
+
fhDXY[i] = new TH1F("dXY" ,"",500,-10,10);
fhDZ[i] = new TH1F("dZ" ,"",500,-10,10);
fhDXYDZ[i] = new TH1F("dXYDZ" ,"",500,0,10);
fhC44[i]->SetTitle("cov 44 : #sigma_{tan(#theta_{dip})}^{2}");
fhC55[i]->SetTitle("cov 55 : #sigma_{1/p_{T}}^{2} [(c/GeV)^2]");
+ fhRel1PtUncertainty[i]->SetTitle("rel. uncertainty of 1/p_{T}");
+
fhDXY[i]->SetXTitle("transverse impact parameter (cm)");
fhDZ[i]->SetXTitle("longitudinal impact parameter (cm)");
fhDXYDZ[i]->SetTitle("absolute impact parameter;sqrt(dXY**2 + dZ**2) (cm)");
fhC44[i]->SetLineColor(color); fhC44[i]->SetLineWidth(2);
fhC55[i]->SetLineColor(color); fhC55[i]->SetLineWidth(2);
+ fhRel1PtUncertainty[i]->SetLineColor(color); fhRel1PtUncertainty[i]->SetLineWidth(2);
+
fhDXY[i]->SetLineColor(color); fhDXY[i]->SetLineWidth(2);
fhDZ[i]->SetLineColor(color); fhDZ[i]->SetLineWidth(2);
fhDXYDZ[i]->SetLineColor(color); fhDXYDZ[i]->SetLineWidth(2);
fhC44[i] = dynamic_cast<TH1F*> (gDirectory->Get("covMatrixDiagonal44"));
fhC55[i] = dynamic_cast<TH1F*> (gDirectory->Get("covMatrixDiagonal55"));
+ fhRel1PtUncertainty[i] = dynamic_cast<TH1F*> (gDirectory->Get("rel1PtUncertainty"));
+
fhDXY[i] = dynamic_cast<TH1F*> (gDirectory->Get("dXY" ));
fhDZ[i] = dynamic_cast<TH1F*> (gDirectory->Get("dZ" ));
fhDXYDZ[i] = dynamic_cast<TH1F*> (gDirectory->Get("dXYDZ"));
fhC44[i] ->Write();
fhC55[i] ->Write();
+ fhRel1PtUncertainty[i] ->Write();
+
fhDXY[i] ->Write();
fhDZ[i] ->Write();
fhDXYDZ[i] ->Write();
gPad->SetLogy();
fhC55[0]->Draw();
+ canvas2->cd(6);
+ fhRel1PtUncertainty[0]->SetStats(kFALSE);
+ gPad->SetLogy();
+ fhRel1PtUncertainty[0]->Draw();
+
canvas2->SaveAs(Form("%s_%s.gif", GetName(), canvas2->GetName()));
TCanvas* canvas3 = new TCanvas(Form("%s_3", GetName()), "Track Quality Results3", 1200, 800);
fhChi2PerClusterTPC[1]->DrawCopy("SAME");*/
}
-Float_t AliESDtrackCuts::GetMinNsigmaToVertex() const
-{
- // deprecated, please use GetMaxNsigmaToVertex
-
- Printf("WARNING: AliESDtrackCuts::GetMinNsigmaToVertex is DEPRECATED and will be removed in the next release. Please use GetMaxNsigmaToVertex instead. Renaming was done to improve code readability.");
-
- return GetMaxNsigmaToVertex();
-}
-
-void AliESDtrackCuts::SetMinNsigmaToVertex(Float_t sigma)
-{
- // deprecated, will be removed in next release
-
- Printf("WARNING: AliESDtrackCuts::SetMinNsigmaToVertex is DEPRECATED and will be removed in the next release. Please use SetMaxNsigmaToVertex instead. Renaming was done to improve code readability.");
-
- SetMaxNsigmaToVertex(sigma);
-}
-
-void AliESDtrackCuts::SetDCAToVertex(Float_t dist)
-{
- // deprecated, will be removed in next release
-
- SetMaxDCAToVertex(dist);
-}
-
-void AliESDtrackCuts::SetMaxDCAToVertex(Float_t dist)
-{
- // deprecated, will be removed in next release
-
- Printf("WARNING: AliESDtrackCuts::SetMaxDCAToVertex is DEPRECATED and will be removed in the next release. Please use SetDCAToVertexXY(dist) and SetDCAToVertexZ(dist) and SetDCAToVertex2D(kTRUE)");
-
- SetDCAToVertexXY(dist);
- SetDCAToVertexZ(dist);
- SetDCAToVertex2D(kTRUE);
-}
-
-void AliESDtrackCuts::SetDCAToVertexXY(Float_t dist)
-{
- // deprecated, will be removed in next release
-
- Printf("WARNING: AliESDtrackCuts::SetDCAToVertexXY is DEPRECATED and will be removed in the next release. Please use SetMaxDCAToVertexXY instead. Renaming was done to improve code readability.");
-
- SetMaxDCAToVertexXY(dist);
-}
-
-void AliESDtrackCuts::SetDCAToVertexZ(Float_t dist)
-{
- // deprecated, will be removed in next release
-
- Printf("WARNING: AliESDtrackCuts::SetDCAToVertexZ is DEPRECATED and will be removed in the next release. Please use SetMaxDCAToVertexZ instead. Renaming was done to improve code readability.");
-
- SetMaxDCAToVertexZ(dist);
-}