ClassImp(AliRsnCutPion)
-const char* AliRsnCutPion::fgkCutName[AliRsnCutPion::kNpionCuts]={
- "kQuality_Std2010",
- "kTOFMatch_Std2010",
- "kFastTPCpid_Nsigma",
- "kFastTPCpid_1point5sigma",
- "kFastTPCpid_2sigma",
- "kFastTPCpid_3sigma",
- "kFastTOFpid_Nsigma",
- "kFastTOFpid_1point5sigma",
- "kFastTOFpid_2sigma",
- "kFastTOFpid_3sigma",
- "kTPCTOFpid_DefaultKstarPP2010"
+const char *AliRsnCutPion::fgkCutName[AliRsnCutPion::kNpionCuts]= {
+ "kQuality_Std2010",
+ "kTOFMatch_Std2010",
+ "kFastTPCpid_Nsigma",
+ "kFastTPCpid_1point5sigma",
+ "kFastTPCpid_2sigma",
+ "kFastTPCpid_3sigma",
+ "kFastTOFpid_Nsigma",
+ "kFastTOFpid_1point5sigma",
+ "kFastTOFpid_2sigma",
+ "kFastTOFpid_3sigma",
+ "kTPCTOFpid_DefaultKstarPP2010"
};
//__________________________________________________________________________________________________
AliRsnCutPion::AliRsnCutPion(const char *name, AliRsnCutPion::ERsnPionCut cutID, AliPID::EParticleType pid) :
- AliRsnCut(name, AliRsnTarget::kDaughter),
- fNoPID(kFALSE),
- fPID(pid),
- fCutQuality(Form("%sQuality", name)),
- fAppliedCutID(cutID),
- fNsigmaCutTPC(1E6),
- fNsigmaCutTOF(1E6)
+ AliRsnCut(name, AliRsnTarget::kDaughter),
+ fNoPID(kFALSE),
+ fPID(pid),
+ fCutQuality(Form("%sQuality", name)),
+ fAppliedCutID(cutID),
+ fNsigmaCutTPC(1E6),
+ fNsigmaCutTOF(1E6)
{
- //
- // Constructor
- // Initialize track quality cuts to 2010 defaults
- //
- fCutQuality.SetPtRange(0.15, 1E+20);
- fCutQuality.SetEtaRange(-0.8, 0.8);
- fCutQuality.SetDCARPtFormula("0.0182+0.0350/pt^1.01");
- fCutQuality.SetDCAZmax(2.0);
- fCutQuality.SetSPDminNClusters(1);
- fCutQuality.SetITSminNClusters(0);
- fCutQuality.SetITSmaxChi2(1E+20);
- fCutQuality.SetTPCminNClusters(70);
- fCutQuality.SetTPCmaxChi2(4.0);
- fCutQuality.SetRejectKinkDaughters();
- fCutQuality.SetAODTestFilterBit(5);
- AliInfo(Form("Applied cut on pion candidate: %s", AliRsnCutPion::fgkCutName[fAppliedCutID]));
+ //
+ // Constructor
+ // Initialize track quality cuts to 2010 defaults
+ //
+ fCutQuality.SetPtRange(0.15, 1E+20);
+ fCutQuality.SetEtaRange(-0.8, 0.8);
+ fCutQuality.SetDCARPtFormula("0.0182+0.0350/pt^1.01");
+ fCutQuality.SetDCAZmax(2.0);
+ fCutQuality.SetSPDminNClusters(1);
+ fCutQuality.SetITSminNClusters(0);
+ fCutQuality.SetITSmaxChi2(1E+20);
+ fCutQuality.SetTPCminNClusters(70);
+ fCutQuality.SetTPCmaxChi2(4.0);
+ fCutQuality.SetRejectKinkDaughters();
+ fCutQuality.SetAODTestFilterBit(5);
+ AliInfo(Form("Applied cut on pion candidate: %s", AliRsnCutPion::fgkCutName[fAppliedCutID]));
}
//__________________________________________________________________________________________________
//
// coherence check
if (!TargetOK(obj)) return kFALSE;
-
+
// check track
- AliVTrack *track = dynamic_cast<AliVTrack*>(fDaughter->GetRef());
+ AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
if (!track) return kFALSE;
-
+
Bool_t isSelected=kFALSE;
switch (fAppliedCutID)
- {
- case AliRsnCutPion::kQualityStd2010:
- isSelected=IsSelectedByQualityStd2010(obj, 1, 1, 1);
- break;
-
- case AliRsnCutPion::kTOFMatchStd2010:
- isSelected=IsSelectedByTOFMatchStd2010(obj);
- break;
-
- case AliRsnCutPion::kFastTPCpidNsigma:
- isSelected=IsSelectedByFastTPCpidNsigma(obj,fNsigmaCutTPC);
- break;
-
- case AliRsnCutPion::kFastTPCpid1point5sigma:
- isSelected=IsSelectedByFastTPCpid1point5sigma(obj);
- break;
-
- case AliRsnCutPion::kFastTPCpid2sigma:
- isSelected=IsSelectedByFastTPCpid2sigma(obj);
- break;
-
- case AliRsnCutPion::kFastTPCpid3sigma:
- isSelected=IsSelectedByFastTPCpid3sigma(obj);
- break;
-
- case AliRsnCutPion::kFastTOFpidNsigma:
- isSelected=IsSelectedByFastTOFpidNsigma(obj,fNsigmaCutTOF);
- break;
-
- case AliRsnCutPion::kFastTOFpid1point5sigma:
- isSelected=IsSelectedByFastTOFpid1point5sigma(obj);
- break;
-
- case AliRsnCutPion::kFastTOFpid2sigma:
- isSelected=IsSelectedByFastTOFpid2sigma(obj);
- break;
-
- case AliRsnCutPion::kFastTOFpid3sigma:
- isSelected=IsSelectedByFastTOFpid3sigma(obj);
- break;
-
- case AliRsnCutPion::kTPCTOFpidDefaultKstarPP2010:
- isSelected=IsSelectedByTPCTOFpidDefaultKstarPP2010(obj);
- break;
-
- default :
- break;
- }
-
+ {
+ case AliRsnCutPion::kQualityStd2010:
+ isSelected=IsSelectedByQualityStd2010(obj, 1, 1, 1);
+ break;
+
+ case AliRsnCutPion::kTOFMatchStd2010:
+ isSelected=IsSelectedByTOFMatchStd2010(obj);
+ break;
+
+ case AliRsnCutPion::kFastTPCpidNsigma:
+ isSelected=IsSelectedByFastTPCpidNsigma(obj,fNsigmaCutTPC);
+ break;
+
+ case AliRsnCutPion::kFastTPCpid1point5sigma:
+ isSelected=IsSelectedByFastTPCpid1point5sigma(obj);
+ break;
+
+ case AliRsnCutPion::kFastTPCpid2sigma:
+ isSelected=IsSelectedByFastTPCpid2sigma(obj);
+ break;
+
+ case AliRsnCutPion::kFastTPCpid3sigma:
+ isSelected=IsSelectedByFastTPCpid3sigma(obj);
+ break;
+
+ case AliRsnCutPion::kFastTOFpidNsigma:
+ isSelected=IsSelectedByFastTOFpidNsigma(obj,fNsigmaCutTOF);
+ break;
+
+ case AliRsnCutPion::kFastTOFpid1point5sigma:
+ isSelected=IsSelectedByFastTOFpid1point5sigma(obj);
+ break;
+
+ case AliRsnCutPion::kFastTOFpid2sigma:
+ isSelected=IsSelectedByFastTOFpid2sigma(obj);
+ break;
+
+ case AliRsnCutPion::kFastTOFpid3sigma:
+ isSelected=IsSelectedByFastTOFpid3sigma(obj);
+ break;
+
+ case AliRsnCutPion::kTPCTOFpidDefaultKstarPP2010:
+ isSelected=IsSelectedByTPCTOFpidDefaultKstarPP2010(obj);
+ break;
+
+ default :
+ break;
+ }
+
return isSelected;
}
//-----------------------------------------------------------
Bool_t AliRsnCutPion::IsSelectedByQualityStd2010(TObject *obj, Bool_t requireTPCin=kTRUE, Bool_t requireTPCrefit=kTRUE, Bool_t requireITSrefit=kTRUE)
{
- //Checks if track passes the standard quality cuts
- //defined for analysis in 2010 pp and PbPb data
-
- if (!obj) {
- AliError("Invalid track object passed to function. Please check!");
- return kFALSE;
- }
-
- fAppliedCutID=AliRsnCutPion::kQualityStd2010;
- AliVTrack *track = dynamic_cast<AliVTrack*>(fDaughter->GetRef());
- if (!track) return kFALSE;
-
- //optionally check refit flags (to be used for Phi and kStar analysis)
- if (requireTPCin && ((track->GetStatus() & AliESDtrack::kTPCin) == 0) ) return kFALSE;
- if (requireTPCrefit && ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) ) return kFALSE;
- if (requireITSrefit && ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) ) return kFALSE;
-
- // quality
- if (!fCutQuality.IsSelected(obj)) return kFALSE;
- return kTRUE;
+ //Checks if track passes the standard quality cuts
+ //defined for analysis in 2010 pp and PbPb data
+
+ if (!obj) {
+ AliError("Invalid track object passed to function. Please check!");
+ return kFALSE;
+ }
+
+ fAppliedCutID=AliRsnCutPion::kQualityStd2010;
+ AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
+ if (!track) return kFALSE;
+
+ //optionally check refit flags (to be used for Phi and kStar analysis)
+ if (requireTPCin && ((track->GetStatus() & AliESDtrack::kTPCin) == 0) ) return kFALSE;
+ if (requireTPCrefit && ((track->GetStatus() & AliESDtrack::kTPCrefit) == 0) ) return kFALSE;
+ if (requireITSrefit && ((track->GetStatus() & AliESDtrack::kITSrefit) == 0) ) return kFALSE;
+
+ // quality
+ if (!fCutQuality.IsSelected(obj)) return kFALSE;
+ return kTRUE;
}
//-----------------------------------------------------------
Bool_t AliRsnCutPion::IsSelectedByTOFMatchStd2010(TObject *obj)
{
- /*
- fbellini@cern.ch, 05.dec.2011
- definition of TOF match: quality cuts 2010 + kTOFout + kTIME
- (optionally) L > 350. cm cut can be added
- */
+ /*
+ fbellini@cern.ch, 05.dec.2011
+ definition of TOF match: quality cuts 2010 + kTOFout + kTIME
+ (optionally) L > 350. cm cut can be added
+ */
if (!obj) {
- AliError("Invalid track object passed to function. Please check!");
- return kFALSE;
+ AliError("Invalid track object passed to function. Please check!");
+ return kFALSE;
}
fAppliedCutID=AliRsnCutPion::kTOFMatchStd2010;
-
+
if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE))
- return kFALSE;
-
- AliVTrack *track = dynamic_cast<AliVTrack*>(fDaughter->GetRef());
+ return kFALSE;
+
+ AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
if (!track) return kFALSE;
return MatchTOF(track);
}
//-----------------------------------------------------------
Bool_t AliRsnCutPion::IsSelectedByFastTPCpidNsigma(TObject *obj,Float_t nSigmaCut=10.)
{
- /*
- fbellini@cern.ch, 05.dec.2011 Double_t pTPC = track->GetTPCmomentum();
- definition of fast TPC pid N-sigma: quality cuts 2010 + sigma cut on dE/dx without p dependence
- */
- if (!obj) {
- AliError("Invalid track object passed to function. Please check!");
- return kFALSE;
- }
- fAppliedCutID=AliRsnCutPion::kFastTPCpidNsigma;
-
- // check initialization of PID object
- AliPIDResponse *pid = fEvent->GetPIDResponse();
- if (!pid) {
- AliFatal("NULL PID response");
- return kFALSE;
- }
-
- if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE))
- return kFALSE;
-
- AliVTrack *track = dynamic_cast<AliVTrack*>(fDaughter->GetRef());
- if (!track) return kFALSE;
-
- Double_t nsTPC = TMath::Abs(pid->NumberOfSigmasTPC(track,fPID));
- return (nsTPC <= nSigmaCut);
+ /*
+ fbellini@cern.ch, 05.dec.2011 Double_t pTPC = track->GetTPCmomentum();
+ definition of fast TPC pid N-sigma: quality cuts 2010 + sigma cut on dE/dx without p dependence
+ */
+ if (!obj) {
+ AliError("Invalid track object passed to function. Please check!");
+ return kFALSE;
+ }
+ fAppliedCutID=AliRsnCutPion::kFastTPCpidNsigma;
+
+ // check initialization of PID object
+ AliPIDResponse *pid = fEvent->GetPIDResponse();
+ if (!pid) {
+ AliFatal("NULL PID response");
+ return kFALSE;
+ }
+
+ if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE))
+ return kFALSE;
+
+ AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
+ if (!track) return kFALSE;
+
+ Double_t nsTPC = TMath::Abs(pid->NumberOfSigmasTPC(track,fPID));
+ return (nsTPC <= nSigmaCut);
}
//-----------------------------------------------------------
Bool_t AliRsnCutPion::IsSelectedByFastTOFpidNsigma(TObject *obj,Float_t nSigmaCut=10.)
{
- /*
- fbellini@cern.ch, 05.dec.2011
- definition of fast TOF pid N-sigma: quality cuts 2010 + sigma cut on t-t_0-t_exp without p dependence
- */
- if (!obj) {
- AliError("Invalid track object passed to function. Please check!");
- return kFALSE;
- }
-
- fAppliedCutID=AliRsnCutPion::kFastTOFpidNsigma;
-
- // check initialization of PID object
- AliPIDResponse *pid = fEvent->GetPIDResponse();
- if (!pid) {
- AliFatal("NULL PID response");
- return kFALSE;
- }
-
- if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE))
- return kFALSE;
-
- AliVTrack *track = dynamic_cast<AliVTrack*>(fDaughter->GetRef());
- if (!track) return kFALSE;
- Bool_t isTOF = MatchTOF(track);
- Double_t nsTOF = isTOF ? TMath::Abs(pid->NumberOfSigmasTOF(track, fPID)) : 1E20;
-
- return (nsTOF <= nSigmaCut);
+ /*
+ fbellini@cern.ch, 05.dec.2011
+ definition of fast TOF pid N-sigma: quality cuts 2010 + sigma cut on t-t_0-t_exp without p dependence
+ */
+ if (!obj) {
+ AliError("Invalid track object passed to function. Please check!");
+ return kFALSE;
+ }
+
+ fAppliedCutID=AliRsnCutPion::kFastTOFpidNsigma;
+
+ // check initialization of PID object
+ AliPIDResponse *pid = fEvent->GetPIDResponse();
+ if (!pid) {
+ AliFatal("NULL PID response");
+ return kFALSE;
+ }
+
+ if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE))
+ return kFALSE;
+
+ AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
+ if (!track) return kFALSE;
+ Bool_t isTOF = MatchTOF(track);
+ Double_t nsTOF = isTOF ? TMath::Abs(pid->NumberOfSigmasTOF(track, fPID)) : 1E20;
+
+ return (nsTOF <= nSigmaCut);
}
//-----------------------------------------------------------
Bool_t AliRsnCutPion::IsSelectedByTPCTOFpidDefaultKstarPP2010(TObject *obj)
{
- /*
- fbellini@cern.ch, 05.dec.2011
- definition of TPC-TOF pid for pp phi and Kstar analysis on 2010 data:
- quality cuts 2010 + sigma cut on dE/dx with pTPC dependence + sigma cut on t-t_0-t_exp with p dependence
- */
-
- if (!obj) {
- AliError("Invalid track object passed to function. Please check!");
- return kFALSE;
- }
- fAppliedCutID=AliRsnCutPion::kTPCTOFpidDefaultKstarPP2010;
-
- // check initialization of PID object
- AliPIDResponse *pid = fEvent->GetPIDResponse();
- if (!pid) {
- AliFatal("NULL PID response");
- return kFALSE;
- }
-
- if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE)) //require ITS+TPCrefit and TPCin
- return kFALSE;
-
- AliVTrack *track = dynamic_cast<AliVTrack*>(fDaughter->GetRef());
- if (!track) return kFALSE;
-
- Bool_t isTOF = MatchTOF(track);
- Double_t pTPC = track->GetTPCmomentum();
- Double_t p = track->P();
- Double_t nsTPC = TMath::Abs(pid->NumberOfSigmasTPC(track, fPID));
- Double_t nsTOF = isTOF ? TMath::Abs(pid->NumberOfSigmasTOF(track, fPID)) : 1E20;
- Double_t maxTPC = 1E20;
- Double_t maxTOF = 1E20;
-
- if (isTOF) {
- // TPC: 5sigma cut for all
- if (nsTPC > 5.0) return kFALSE;
- // TOF: 3sigma below 1.5 GeV, 2sigma above
- if (p < 1.5) maxTOF = 3.0; else maxTOF = 2.0;
- return (nsTOF <= maxTOF);
- } else {
- // TPC:
- // all below 350 MeV: 5sigma
- // all between 350 and 500 MeV: 3sigma
- // pions above 500 MeV: 2sigma
- if (pTPC <= 0.35)
- maxTPC = 5.0;
- else
- if (pTPC > 0.35 && pTPC <= 0.5)
- maxTPC = 3.0;
+ /*
+ fbellini@cern.ch, 05.dec.2011
+ definition of TPC-TOF pid for pp phi and Kstar analysis on 2010 data:
+ quality cuts 2010 + sigma cut on dE/dx with pTPC dependence + sigma cut on t-t_0-t_exp with p dependence
+ */
+
+ if (!obj) {
+ AliError("Invalid track object passed to function. Please check!");
+ return kFALSE;
+ }
+ fAppliedCutID=AliRsnCutPion::kTPCTOFpidDefaultKstarPP2010;
+
+ // check initialization of PID object
+ AliPIDResponse *pid = fEvent->GetPIDResponse();
+ if (!pid) {
+ AliFatal("NULL PID response");
+ return kFALSE;
+ }
+
+ if (!IsSelectedByQualityStd2010(obj, kTRUE, kTRUE, kTRUE)) //require ITS+TPCrefit and TPCin
+ return kFALSE;
+
+ AliVTrack *track = dynamic_cast<AliVTrack *>(fDaughter->GetRef());
+ if (!track) return kFALSE;
+
+ Bool_t isTOF = MatchTOF(track);
+ Double_t pTPC = track->GetTPCmomentum();
+ Double_t p = track->P();
+ Double_t nsTPC = TMath::Abs(pid->NumberOfSigmasTPC(track, fPID));
+ Double_t nsTOF = isTOF ? TMath::Abs(pid->NumberOfSigmasTOF(track, fPID)) : 1E20;
+ Double_t maxTPC = 1E20;
+ Double_t maxTOF = 1E20;
+
+ if (isTOF) {
+ // TPC: 5sigma cut for all
+ if (nsTPC > 5.0) return kFALSE;
+ // TOF: 3sigma below 1.5 GeV, 2sigma above
+ if (p < 1.5) maxTOF = 3.0; else maxTOF = 2.0;
+ return (nsTOF <= maxTOF);
+ } else {
+ // TPC:
+ // all below 350 MeV: 5sigma
+ // all between 350 and 500 MeV: 3sigma
+ // pions above 500 MeV: 2sigma
+ if (pTPC <= 0.35)
+ maxTPC = 5.0;
+ else if (pTPC > 0.35 && pTPC <= 0.5)
+ maxTPC = 3.0;
else
- maxTPC = 2.0;
-
- return (nsTPC <= maxTPC);
- }
+ maxTPC = 2.0;
+
+ return (nsTPC <= maxTPC);
+ }
}