+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardTPCOnlyTrackCuts()
+{
+ // creates an AliESDtrackCuts object and fills it with standard (pre data-taking) values for TPC-only cuts
+
+ 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;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2009(Bool_t selPrimaries)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS-TPC cuts for pp 2009 data
+
+ Printf("AliESDtrackCuts::GetStandardITSTPCTrackCuts: Creating track cuts for ITS+TPC.");
+
+ 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->SetMaxDCAToVertexZ(1.e6);
+ esdTrackCuts->SetDCAToVertex2D(kFALSE);
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+ //esdTrackCuts->SetEtaRange(-0.8,+0.8);
+
+ return esdTrackCuts;
+}
+
+//____________________________________________________________________
+AliESDtrackCuts* AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(Bool_t selPrimaries)
+{
+ // creates an AliESDtrackCuts object and fills it with standard values for ITS-TPC cuts for pp 2010 data
+
+ Printf("AliESDtrackCuts::GetStandardITSTPCTrackCuts: Creating track cuts for ITS+TPC.");
+
+ 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.0026+0.0050/pt^1.01)
+ esdTrackCuts->SetMaxDCAToVertexXYPtDep("0.0182+0.0350/pt^1.01");
+ }
+ esdTrackCuts->SetMaxDCAToVertexZ(2);
+ esdTrackCuts->SetDCAToVertex2D(kFALSE);
+ esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+ //esdTrackCuts->SetEtaRange(-0.8,+0.8);
+
+ 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::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;
+}
+
+
+//____________________________________________________________________
+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;
+}