+void AliESDtrackCuts::SetMinNClustersTPCPtDep(TFormula *f1, Float_t ptmax)
+{
+ //
+ // Sets the pT dependent NClustersTPC cut
+ //
+
+ if(f1){
+ delete f1CutMinNClustersTPCPtDep;
+ f1CutMinNClustersTPCPtDep = (TFormula*)f1->Clone("f1CutMinNClustersTPCPtDep");
+ }
+ fCutMaxPtDepNClustersTPC=ptmax;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardTPCOnlyTrackCuts()
+{
+ // creates an AliESDtrackCuts object and fills it with standard (pre data-taking) values for TPC-only cuts
+
+ AliInfoClass("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;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS-TPC cuts for pp 2009 data
+
+ AliInfoClass("Creating track cuts for ITS+TPC (2009 definition).");
+
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+
+ // TPC
+ esdTrackCuts->SetRequireTPCStandAlone(kTRUE); // to get chi2 and ncls of kTPCin
+ esdTrackCuts->SetMinNClustersTPC(70);
+ esdTrackCuts->SetMaxChi2PerClusterTPC(4);
+ esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+ esdTrackCuts->SetRequireTPCRefit(kTRUE);
+ // ITS
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kAny);
+ if(selPrimaries) {
+ // 7*(0.0050+0.0060/pt^0.9)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0350+0.0420/pt^0.9");
+ esdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
+ }
+ esdTrackCuts->SetMaxDCAToVertexZ(1.e6);
+ esdTrackCuts->SetDCAToVertex2D(kFALSE);
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+ //esdTrackCuts->SetEtaRange(-0.8,+0.8);
+
+ esdTrackCuts->SetMaxChi2PerClusterITS(36);
+
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(Bool_t selPrimaries, Int_t clusterCut)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS-TPC cuts for pp 2011 data
+ // if clusterCut = 1, the cut on the number of clusters is replaced by
+ // a cut on the number of crossed rows and on the ration crossed
+ // rows/findable clusters
+
+ AliInfoClass("Creating track cuts for ITS+TPC (2011 definition).");
+
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+
+ // TPC
+ if(clusterCut == 0) esdTrackCuts->SetMinNClustersTPC(50);
+ else if (clusterCut == 1) {
+ esdTrackCuts->SetMinNCrossedRowsTPC(70);
+ esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
+ }
+ else {
+ AliWarningClass(Form("Wrong value of the clusterCut parameter (%d), using cut on Nclusters",clusterCut));
+ esdTrackCuts->SetMinNClustersTPC(50);
+ }
+ esdTrackCuts->SetMaxChi2PerClusterTPC(4);
+ esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+ esdTrackCuts->SetRequireTPCRefit(kTRUE);
+ // ITS
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kAny);
+ if(selPrimaries) {
+ // 7*(0.0015+0.0050/pt^1.1)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0105+0.0350/pt^1.1");
+ esdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
+ }
+ esdTrackCuts->SetMaxDCAToVertexZ(2);
+ esdTrackCuts->SetDCAToVertex2D(kFALSE);
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+
+ esdTrackCuts->SetMaxChi2PerClusterITS(36);
+
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(Bool_t selPrimaries,Int_t clusterCut)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS-TPC cuts for pp 2010 data
+ // if clusterCut = 1, the cut on the number of clusters is replaced by
+ // a cut on the number of crossed rows and on the ration crossed
+ // rows/findable clusters
+
+ AliInfoClass("Creating track cuts for ITS+TPC (2010 definition).");
+
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+
+ // TPC
+ if(clusterCut == 0) esdTrackCuts->SetMinNClustersTPC(70);
+ else if (clusterCut == 1) {
+ esdTrackCuts->SetMinNCrossedRowsTPC(70);
+ esdTrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
+ }
+ else {
+ AliWarningClass(Form("Wrong value of the clusterCut parameter (%d), using cut on Nclusters",clusterCut));
+ esdTrackCuts->SetMinNClustersTPC(70);
+ }
+ esdTrackCuts->SetMaxChi2PerClusterTPC(4);
+ esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+ esdTrackCuts->SetRequireTPCRefit(kTRUE);
+ // ITS
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kAny);
+ if(selPrimaries) {
+ // 7*(0.0026+0.0050/pt^1.01)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+ esdTrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
+ }
+ esdTrackCuts->SetMaxDCAToVertexZ(2);
+ esdTrackCuts->SetDCAToVertex2D(kFALSE);
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+
+ esdTrackCuts->SetMaxChi2PerClusterITS(36);
+
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSPureSATrackCuts2009(Bool_t selPrimaries, Bool_t useForPid)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS pure SA tracks
+
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+ esdTrackCuts->SetRequireITSPureStandAlone(kTRUE);
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetMinNClustersITS(4);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kAny);
+ esdTrackCuts->SetMaxChi2PerClusterITS(1.);
+
+ if(selPrimaries) {
+ // 7*(0.0085+0.0026/pt^1.55)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0595+0.0182/pt^1.55");
+ }
+ if(useForPid){
+ esdTrackCuts->SetRequireITSPid(kTRUE);
+ }
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSPureSATrackCuts2010(Bool_t selPrimaries, Bool_t useForPid)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS pure SA tracks - pp 2010
+
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+ esdTrackCuts->SetRequireITSPureStandAlone(kTRUE);
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetMinNClustersITS(4);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kAny);
+ esdTrackCuts->SetMaxChi2PerClusterITS(2.5);
+
+ if(selPrimaries) {
+ // 7*(0.0033+0.0045/pt^1.3)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0231+0.0315/pt^1.3");
+ }
+ if(useForPid){
+ esdTrackCuts->SetRequireITSPid(kTRUE);
+ }
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSSATrackCuts2009(Bool_t selPrimaries, Bool_t useForPid)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS pure SA tracks
+
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+ esdTrackCuts->SetRequireITSStandAlone(kTRUE);
+ esdTrackCuts->SetRequireITSPureStandAlone(kFALSE);
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetMinNClustersITS(4);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kAny);
+ esdTrackCuts->SetMaxChi2PerClusterITS(1.);
+
+ if(selPrimaries) {
+ // 7*(0.0085+0.0026/pt^1.55)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0595+0.0182/pt^1.55");
+ }
+ if(useForPid){
+ esdTrackCuts->SetRequireITSPid(kTRUE);
+ }
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSSATrackCuts2010(Bool_t selPrimaries, Bool_t useForPid)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS pure SA tracks --pp 2010
+
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+ esdTrackCuts->SetRequireITSStandAlone(kTRUE);
+ esdTrackCuts->SetRequireITSPureStandAlone(kFALSE);
+ esdTrackCuts->SetRequireITSRefit(kTRUE);
+ esdTrackCuts->SetMinNClustersITS(4);
+ esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+ AliESDtrackCuts::kAny);
+ esdTrackCuts->SetMaxChi2PerClusterITS(2.5);
+
+ if(selPrimaries) {
+ // 7*(0.0033+0.0045/pt^1.3)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0231+0.0315/pt^1.3");
+ }
+ if(useForPid){
+ esdTrackCuts->SetRequireITSPid(kTRUE);
+ }
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSSATrackCutsPbPb2010(Bool_t selPrimaries, Bool_t useForPid)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS pure SA tracks -- PbPb 2010
+
+ AliESDtrackCuts* esdTrackCuts = GetStandardITSSATrackCuts2010(selPrimaries, useForPid);
+ esdTrackCuts->SetMaxNOfMissingITSPoints(1);
+
+ return esdTrackCuts;
+}
+//____________________________________________________________________
+
+AliESDtrackCuts* AliESDtrackCuts::GetStandardV0DaughterCuts()
+{
+ // creates a AliESDtrackCuts object and fills it with standard cuts for V0 daughters
+ AliESDtrackCuts* esdTrackCuts = new AliESDtrackCuts;
+ esdTrackCuts->SetRequireTPCRefit(kTRUE);
+ esdTrackCuts->SetMinNClustersTPC(70);
+ esdTrackCuts->SetAcceptKinkDaughters(kFALSE);
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+Int_t AliESDtrackCuts::GetReferenceMultiplicity(const 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
+ //
+ // DEPRECATED Use GetReferenceMultiplicity with the enum as second argument instead
+
+ if (!tpcOnly)
+ {
+ AliErrorClass("Not implemented for global tracks!");
+ return -1;
+ }
+
+ static AliESDtrackCuts* esdTrackCuts = 0;
+ if (!esdTrackCuts)
+ {
+ esdTrackCuts = GetStandardTPCOnlyTrackCuts();
+ esdTrackCuts->SetEtaRange(-0.8, 0.8);
+ esdTrackCuts->SetPtRange(0.15);
+ }
+
+ Int_t nTracks = esdTrackCuts->CountAcceptedTracks(esd);
+
+ return nTracks;
+}