fCutQuality(0x0),
fAODTrkCutFilterBit(0),
fCheckOnlyFilterBit(kTRUE),
- fUseCustomQualityCuts(kFALSE)
+ fUseCustomQualityCuts(kFALSE),
+ fIsUse2011stdQualityCuts(kFALSE),
+ fIsUse2011stdQualityCutsHighPt(kFALSE)
{
//
// Default constructor
fCutQuality(new AliRsnCutTrackQuality("CutQuality")),
fAODTrkCutFilterBit(AODfilterBit),
fCheckOnlyFilterBit(kTRUE),
- fUseCustomQualityCuts(kFALSE)
+ fUseCustomQualityCuts(kFALSE),
+ fIsUse2011stdQualityCuts(kFALSE),
+ fIsUse2011stdQualityCutsHighPt(kFALSE)
{
//
// Constructor
fCutQuality(rsnTrackQualityCut),
fAODTrkCutFilterBit(0),
fCheckOnlyFilterBit(kFALSE),
- fUseCustomQualityCuts(kTRUE)
+ fUseCustomQualityCuts(kFALSE),
+ fIsUse2011stdQualityCuts(kFALSE),
+ fIsUse2011stdQualityCutsHighPt(kFALSE)
{
//
// Constructor: uses externally-defined track-quality cut object
fCutQuality(copy.fCutQuality),
fAODTrkCutFilterBit(copy.fAODTrkCutFilterBit),
fCheckOnlyFilterBit(copy.fCheckOnlyFilterBit),
- fUseCustomQualityCuts(copy.fUseCustomQualityCuts)
+ fUseCustomQualityCuts(copy.fUseCustomQualityCuts),
+ fIsUse2011stdQualityCuts(copy.fIsUse2011stdQualityCuts),
+ fIsUse2011stdQualityCutsHighPt(copy.fIsUse2011stdQualityCutsHighPt)
{
//
// copy constructor
fAODTrkCutFilterBit=copy.fAODTrkCutFilterBit;
fCheckOnlyFilterBit=copy.fCheckOnlyFilterBit;
fUseCustomQualityCuts=copy.fUseCustomQualityCuts;
+ fIsUse2011stdQualityCuts=copy.fIsUse2011stdQualityCuts;
+ fIsUse2011stdQualityCutsHighPt=copy.fIsUse2011stdQualityCutsHighPt;
fCutQuality=copy.fCutQuality;
return (*this);
}
break;
case AliRsnCutSetDaughterParticle::kQualityStd2011:
- //fCutQuality->SetAODTestFilterBit(10); //1024
+ AddCut(fCutQuality);
+ SetCutScheme(fCutQuality->GetName());
+ break;
+
+ case AliRsnCutSetDaughterParticle::kQualityStd2011HighPt:
AddCut(fCutQuality);
SetCutScheme(fCutQuality->GetName());
break;
break;
- case AliRsnCutSetDaughterParticle::kTPCpidTOFvetoKStarPPB2011:
+ case AliRsnCutSetDaughterParticle::kTPCTOFtightPidKStarPPB2011:
if (fNsigmaTPC <= 0.0) {
AliWarning(Form("Invalid number of sigmas required for %s. Setting nSigma = 5.0",iCutTPCNSigma->GetName()));
SetNsigmaForFastTPCpid(5.0);
SetCutScheme( Form("%s&%s&%s",fCutQuality->GetName(), iCutTPCNSigma->GetName(),iCutTOFMatch->GetName()) );
break;
- default :
+ case AliRsnCutSetDaughterParticle::kTPCpidTOFveto4s:
+ if (fNsigmaTPC <= 0.0) {
+ AliWarning(Form("Invalid number of sigmas required for %s. Setting nSigma = 5.0",iCutTPCNSigma->GetName()));
+ SetNsigmaForFastTPCpid(5.0);
+ }
+ iCutTPCNSigma->SinglePIDRange(fNsigmaTPC);
+ AddCut(fCutQuality);
+ iCutTOFNSigma->SinglePIDRange(4.0);
+
+ AddCut(iCutTPCNSigma);
+ AddCut(iCutTOFMatch);
+ AddCut(iCutTOFNSigma);
+
+ // scheme:
+ // quality & [ (TPCsigma & !TOFmatch) | (TPCsigma & TOFsigma) ]
+ SetCutScheme( Form("%s&((%s&(!%s))|(%s&%s))",fCutQuality->GetName(), iCutTPCNSigma->GetName(), iCutTOFMatch->GetName(),iCutTOFNSigma->GetName(), iCutTPCNSigma->GetName()) ) ;
+ break;
+
+ case AliRsnCutSetDaughterParticle::kTPCpidTOFveto3s:
+ if (fNsigmaTPC <= 0.0) {
+ AliWarning(Form("Invalid number of sigmas required for %s. Setting nSigma = 5.0",iCutTPCNSigma->GetName()));
+ SetNsigmaForFastTPCpid(5.0);
+ }
+ iCutTPCNSigma->SinglePIDRange(fNsigmaTPC);
+ AddCut(fCutQuality);
+ iCutTOFNSigma->SinglePIDRange(3.0);
+
+ AddCut(iCutTPCNSigma);
+ AddCut(iCutTOFMatch);
+ AddCut(iCutTOFNSigma);
+
+ // scheme:
+ // quality & [ (TPCsigma & !TOFmatch) | (TPCsigma & TOFsigma) ]
+ SetCutScheme( Form("%s&((%s&(!%s))|(%s&%s))",fCutQuality->GetName(), iCutTPCNSigma->GetName(), iCutTOFMatch->GetName(),iCutTOFNSigma->GetName(), iCutTPCNSigma->GetName()) ) ;
+ break;
+
+ case AliRsnCutSetDaughterParticle::kCombinedPidBestPtDep:
+ /* Set TPC PID (if no TOF)*/
+ // all below 500 MeV: 3sigma
+ // all above 500 MeV: 2sigma
+ iCutTPCNSigma->AddPIDRange(3.0, 0.0, 0.5);
+ iCutTPCNSigma->AddPIDRange(2.0, 0.5, 1E20);
+
+ AddCut(fCutQuality);
+ AddCut(iCutTOFMatch);
+ AddCut(iCutTPCNSigma);
+
+ /* set TPC+TOF PID*/
+ // pions if TOF match: TPC 5 sigma & TOF 3 sigma
+ // kaons if TOF match:
+ // below 1.5GeV/c: TPC 5 sigma & TOF 3 sigma
+ // above 1.5GeV/c: TPC 3 sigma & TOF 3 sigma
+
+ if (fPID==AliPID::kPion){
+ iCutTPCTOFNSigma->SinglePIDRange(5.0);
+ }
+
+ if (fPID==AliPID::kKaon){
+ iCutTPCTOFNSigma->AddPIDRange(5.0, 0.0, 1.5);
+ iCutTPCTOFNSigma->AddPIDRange(3.0, 1.5, 1E20);
+ }
+ iCutTOFNSigma->AddPIDRange(3.0, 0.0, 1E20);
+ AddCut(iCutTPCTOFNSigma);
+ AddCut(iCutTOFNSigma);
+
+ // scheme:
+ // quality & [ (TOF & TPCTOF) || (!TOFmatch & TPConly) ]
+ SetCutScheme( Form("%s&((%s&%s)|((!%s)&%s))",fCutQuality->GetName(), iCutTPCTOFNSigma->GetName(), iCutTOFNSigma->GetName(), iCutTOFMatch->GetName(), iCutTPCNSigma->GetName()) ) ;
+ break;
+
+ case AliRsnCutSetDaughterParticle::kTPCPidPtDep:
+ /* Set TPC PID (if no TOF)*/
+ // all below 500 MeV: 3sigma
+ // all above 500 MeV: 2sigma
+ iCutTPCNSigma->AddPIDRange(3.0, 0.0, 0.5);
+ iCutTPCNSigma->AddPIDRange(2.0, 0.5, 1E20);
+
+ AddCut(fCutQuality);
+ AddCut(iCutTPCNSigma);
+ // scheme:
+ // quality & TPConly
+ SetCutScheme( Form("%s&%s",fCutQuality->GetName(), iCutTPCNSigma->GetName()) ) ;
break;
- }
+ case AliRsnCutSetDaughterParticle::kTOFPidPtDep:
+ /* Set TOF PID */
+ // all below 1500 MeV: 3sigma
+ // all above 1500 MeV: 2sigma
+ //TPC 5 sigma always to remove mismatch
+ iCutTPCTOFNSigma->SinglePIDRange(5.0);
+ iCutTOFNSigma->AddPIDRange(3.0, 0.0, 1.5);
+ iCutTOFNSigma->AddPIDRange(2.0, 1.5, 1E20);
+
+ AddCut(fCutQuality);
+ AddCut(iCutTPCTOFNSigma);
+ AddCut(iCutTOFNSigma);
+ // scheme:
+ // quality & TPConly
+ SetCutScheme( Form("%s&%s&%s", fCutQuality->GetName(), iCutTPCTOFNSigma->GetName(), iCutTOFNSigma->GetName()) ) ;
+ break;
+
+ case AliRsnCutSetDaughterParticle::kTPCRejPtDepTOFNsigma:
+ /* Set TOF PID */
+ // TPC mismatch rejection:
+ // below 1.500 GeV: 5sigma
+ // above 1.500 GeV: 3sigma
+ // TOF nsigma PID in full pT
+ iCutTPCTOFNSigma->AddPIDRange(5.0, 0.0, 1.5);
+ iCutTPCTOFNSigma->AddPIDRange(3.0, 1.5, 1E20);
+
+ if (fNsigmaTOF <= 0.0) {
+ AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTOFNSigma->GetName()));
+ SetNsigmaForFastTOFpid(10.0);
+ }
+ iCutTOFNSigma->SinglePIDRange(fNsigmaTOF);
+
+ AddCut(fCutQuality);
+ AddCut(iCutTPCTOFNSigma);
+ AddCut(iCutTOFNSigma);
+ // scheme:
+ // quality & TPConly
+ SetCutScheme( Form("%s&%s&%s", fCutQuality->GetName(), iCutTPCTOFNSigma->GetName(), iCutTOFNSigma->GetName()) ) ;
+ break;
+
+ case AliRsnCutSetDaughterParticle::kTPCNsigmaTOFVetoPtDep:
+ /* Set TPC PID */
+ // TOF veto:
+ // below 1.500 GeV: 5sigma
+ // above 1.500 GeV: 3sigma
+ // TPC nsigma PID in full pT
+ if (fNsigmaTPC <= 0.0) {
+ AliWarning(Form("Invalid number of sigmas required for %s. Setting default nSigma = 10",iCutTPCNSigma->GetName()));
+ SetNsigmaForFastTPCpid(10.0);
+ }
+ iCutTPCNSigma->SinglePIDRange(fNsigmaTPC);
+
+ iCutTOFNSigma->AddPIDRange(3.0, 0.0, 1.5);
+ iCutTOFNSigma->AddPIDRange(4.0, 1.5, 1E20);
+
+ AddCut(fCutQuality);
+ AddCut(iCutTPCNSigma);
+ AddCut(iCutTOFMatch);
+ AddCut(iCutTOFNSigma);
+
+ // scheme:
+ // quality & [ (TPCsigma & !TOFmatch) | (TPCsigma & TOFsigma) ]
+ SetCutScheme( Form("%s&((%s&(!%s))|(%s&%s))",fCutQuality->GetName(), iCutTPCNSigma->GetName(), iCutTOFMatch->GetName(),iCutTOFNSigma->GetName(), iCutTPCNSigma->GetName()) ) ;
+ break;
+
+ default :
+ break;
+ }
+
}
// initialize quality std (if not externally defined) and PID cuts
// init cut sets by setting variable params
//
- Bool_t isUse2011stdQualityCuts = ((fAppliedCutSetID==AliRsnCutSetDaughterParticle::kQualityStd2011) ||
- (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTOFMatchPPB2011) || //pA analysis
- (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCpidKstarPPB2011) ||
- (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011) ||
- (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPPB2011) ||
- (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCpidTOFvetoKStarPPB2011) ||
- (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCpidMatchPPB2011));
- if (isUse2011stdQualityCuts) {
- fCutQuality->SetDefaults2011();//uses filter bit 10 as default
- fCutQuality->SetAODTestFilterBit(fAODTrkCutFilterBit); //changes default filter bit 10 to the chosen filter bit
+ // Bool_t isUse2011stdQualityCutsHighPt = ((fAppliedCutSetID==AliRsnCutSetDaughterParticle::kQualityStd2011HighPt) ||
+ // (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTOFMatchPPB2011) || //pA analysis
+ // (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCpidKstarPPB2011) ||
+ // (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011) ||
+ // (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCTOFpidKstarPPB2011) ||
+ // (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCpidTOFvetoKStarPPB2011) ||
+ // (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kTPCpidMatchPPB2011));
+
+ // Bool_t isUse2011stdQualityCuts = (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kQualityStd2011);
+
+ if (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kQualityStd2011) {
+ fIsUse2011stdQualityCuts = kTRUE;
+ fIsUse2011stdQualityCutsHighPt = kFALSE;
+ }
+ if (fAppliedCutSetID==AliRsnCutSetDaughterParticle::kQualityStd2011HighPt) {
+ fIsUse2011stdQualityCuts = kFALSE;
+ fIsUse2011stdQualityCutsHighPt = kTRUE;
+ }
+
+ if (fIsUse2011stdQualityCuts) {
+ fCutQuality->SetDefaults2011();//uses filter bit 5 as default
} else {
- fCutQuality->SetDefaults2010();
- fCutQuality->SetDCARPtFormula("0.0182+0.0350/pt^1.01");
- fCutQuality->SetDCAZmax(2.0);
- fCutQuality->SetSPDminNClusters(1);
- fCutQuality->SetITSminNClusters(0);
- fCutQuality->SetITSmaxChi2(36);
- fCutQuality->SetTPCminNClusters(70);
- fCutQuality->SetTPCmaxChi2(4.0);
- fCutQuality->SetRejectKinkDaughters();
- fCutQuality->SetAODTestFilterBit(fAODTrkCutFilterBit);
- //fCutQuality->SetITSmaxChi2(36);
- //fCutQuality->SetMaxChi2TPCConstrainedGlobal(36);
+ if (fIsUse2011stdQualityCutsHighPt) {
+ fCutQuality->SetDefaultsHighPt2011();//uses filter bit 5 as default
+ } else {
+ fCutQuality->SetDefaults2010();
+ fCutQuality->SetDCARPtFormula("0.0182+0.0350/pt^1.01");
+ fCutQuality->SetDCAZmax(2.0);
+ fCutQuality->SetSPDminNClusters(1);
+ fCutQuality->SetITSminNClusters(0);
+ fCutQuality->SetITSmaxChi2(36);
+ fCutQuality->SetTPCminNClusters(70);
+ fCutQuality->SetTPCmaxChi2(4.0);
+ fCutQuality->SetRejectKinkDaughters();
+ //fCutQuality->SetITSmaxChi2(36);
+ //fCutQuality->SetMaxChi2TPCConstrainedGlobal(36);
+ }
}
+ fCutQuality->SetAODTestFilterBit(fAODTrkCutFilterBit); //changes default filter bit to the chosen filter bit
//apply pt and eta cuts
fCutQuality->SetPtRange(fPtRange[0], fPtRange[1]);
// Default constructor.
// Initializes all cuts in such a way that all of them are disabled.
//
-
SetPtRange(0.0, 1E20);
SetEtaRange(-1E20, 1E20);
}
cuts.SetRequireSigmaToVertex(kFALSE);
// TPC related cuts for TPC+ITS tracks
- cuts.SetMinNClustersTPC(fTPCminNClusters);
+ if (fIsUseCrossedRowsCut) {
+ cuts.SetMinNCrossedRowsTPC(fTPCminNCrossedRows);
+ cuts.SetMinRatioCrossedRowsOverFindableClustersTPC(fTPCminCrossedRowsOverFindableCls);
+ } else {
+ cuts.SetMinNClustersTPC(fTPCminNClusters);
+ }
cuts.SetMaxChi2PerClusterTPC(fTPCmaxChi2);
cuts.SetAcceptKinkDaughters(!fRejectKinkDaughters);
cuts.SetMaxChi2TPCConstrainedGlobal(fCutMaxChi2TPCConstrainedVsGlobal);
- cuts.SetMinNCrossedRowsTPC(fTPCminNCrossedRows);
- cuts.SetMinRatioCrossedRowsOverFindableClustersTPC(fTPCminCrossedRowsOverFindableCls);
- cuts.SetMinLengthActiveVolumeTPC(fCutMinLengthActiveVolumeTPC);
+
+ if (fIsUseLengthActiveVolumeTPCCut)
+ cuts.SetMinLengthActiveVolumeTPC(fCutMinLengthActiveVolumeTPC);
// ITS related cuts for TPC+ITS tracks
if (fSPDminNClusters > 0)
//step #1: check number of clusters
- if (track->GetTPCNcls() < fTPCminNClusters) {
+ if ((!fIsUseCrossedRowsCut) && (track->GetTPCNcls() < fTPCminNClusters)) {
AliDebug(AliLog::kDebug + 2, "Too few TPC clusters. Rejected");
return kFALSE;
}
+
if (track->GetITSNcls() < fITSminNClusters) {
AliDebug(AliLog::kDebug + 2, "Too few ITS clusters. Rejected");
return kFALSE;
}
//step #2a: check number of crossed rows in TPC
- Float_t nCrossedRowsTPC = track->GetTPCNCrossedRows();
- if (nCrossedRowsTPC < fTPCminNCrossedRows) {
- AliDebug(AliLog::kDebug + 2, "Too few TPC crossed rows. Rejected");
- return kFALSE;
- }
- if (track->GetTPCNclsF()>0) {
- Float_t ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC / track->GetTPCNclsF();
- if (ratioCrossedRowsOverFindableClustersTPC < fTPCminCrossedRowsOverFindableCls){
- AliDebug(AliLog::kDebug + 2, "Too few TPC crossed rows/findable clusters. Rejected");
+ if (fIsUseCrossedRowsCut) {
+ Float_t nCrossedRowsTPC = track->GetTPCNCrossedRows();
+ if (nCrossedRowsTPC < fTPCminNCrossedRows) {
+ AliDebug(AliLog::kDebug + 2, "Too few TPC crossed rows. Rejected");
+ return kFALSE;
+ }
+ if (track->GetTPCNclsF()>0) {
+ Float_t ratioCrossedRowsOverFindableClustersTPC = nCrossedRowsTPC / track->GetTPCNclsF();
+ if (ratioCrossedRowsOverFindableClustersTPC < fTPCminCrossedRowsOverFindableCls){
+ AliDebug(AliLog::kDebug + 2, "Too few TPC crossed rows/findable clusters. Rejected");
+ return kFALSE;
+ }
+ } else {
+ AliDebug(AliLog::kDebug + 2, "Negative value for TPC crossed rows/findable clusters. Rejected");
return kFALSE;
}
- } else {
- AliDebug(AliLog::kDebug + 2, "Negative value for TPC crossed rows/findable clusters. Rejected");
- return kFALSE;
}
//step #2b: check on track length in active volume of TPC implemented only for ESD tracks
-
+ //if (fIsUseLengthActiveVolumeTPCCut) { // not yet implemented in AODs}
+
//step #3: reject kink daughters
AliAODVertex *vertex = track->GetProdVertex();
if (vertex && fRejectKinkDaughters) {
}
//__________________________________________________________________________________________________
-void AliRsnCutTrackQuality::SetDefaults2011()
+void AliRsnCutTrackQuality::SetDefaultsHighPt2011(Bool_t useTPCCrossedRows)
{
//
// Default settings for cuts used in 2011 (for high-pT)
//
- fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE,1);
+ fIsUseCrossedRowsCut=useTPCCrossedRows;
+ fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, useTPCCrossedRows);
fESDtrackCuts->SetMinNCrossedRowsTPC(120); //default is min 70 crossed rows -> use 120 to go to higher pt
- fESDtrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);
- fESDtrackCuts->SetMaxChi2PerClusterITS(36);
fESDtrackCuts->SetMaxFractionSharedTPCClusters(0.4);//default is not set --> use to go to higher pt
- fESDtrackCuts->SetMaxChi2TPCConstrainedGlobal(36);
-
- AddStatusFlag(AliESDtrack::kTPCin , kTRUE);
- AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);
- AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);
+ //fESDtrackCuts->SetMinRatioCrossedRowsOverFindableClustersTPC(0.8);//already in 2011 std
+ //fESDtrackCuts->SetMaxChi2PerClusterITS(36);//already in 2011 std
+ //fESDtrackCuts->SetMaxChi2TPCConstrainedGlobal(36);//already in 2011 std
+ // AddStatusFlag(AliESDtrack::kTPCin , kTRUE); //already in 2011 std
+ // AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);//already in 2011 std
+ // AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);//already in 2011 std
SetPtRange(0.15, 1E+20);
SetEtaRange(-0.8, 0.8);
SetAODTestFilterBit(10);
+ return;
}
+//__________________________________________________________________________________________________
+void AliRsnCutTrackQuality::SetDefaults2011(Bool_t useTPCCrossedRows)
+{
+//
+// Default std cuts 2011 with crossed rows (=70)
+//
+ fIsUseCrossedRowsCut=useTPCCrossedRows;
+ fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE,useTPCCrossedRows);
+ SetPtRange(0.15, 1E+20);
+ SetEtaRange(-0.8, 0.8);
+ SetAODTestFilterBit(5);
+ return;
+}
//__________________________________________________________________________________________________
const char *AliRsnCutTrackQuality::Binary(UInt_t number)
{