Skip to content

Commit 16dee8f

Browse files
ilikmetaalibuild
andauthored
[PWGCF] Fix ITS track selection (#10273)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent efba710 commit 16dee8f

File tree

1 file changed

+62
-41
lines changed

1 file changed

+62
-41
lines changed

PWGCF/Flow/Tasks/flowGfwTask.cxx

Lines changed: 62 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ struct FlowGfwTask {
6161
O2_DEFINE_CONFIGURABLE(cfgCutChi2prTPCcls, float, 2.5, "Chi2 per TPC clusters")
6262
O2_DEFINE_CONFIGURABLE(cfgCutTPCclu, float, 70.0f, "minimum TPC clusters")
6363
O2_DEFINE_CONFIGURABLE(cfgCutITSclu, float, 5.0f, "minimum ITS clusters")
64+
O2_DEFINE_CONFIGURABLE(cfgTrackSel, bool, false, "ITS and TPC cluster selection")
6465
O2_DEFINE_CONFIGURABLE(cfgMinCentFT0C, float, 0.0f, "Minimum FT0C Centrality")
6566
O2_DEFINE_CONFIGURABLE(cfgMaxCentFT0C, float, 100.0f, "Maximum FT0C Centrality")
6667
O2_DEFINE_CONFIGURABLE(cfgcentEstFt0c, bool, false, "Centrality estimator based on FT0C signal")
@@ -70,6 +71,7 @@ struct FlowGfwTask {
7071
O2_DEFINE_CONFIGURABLE(cfgcentEstFt0cVariant1, bool, false, "A variant of FT0C")
7172
O2_DEFINE_CONFIGURABLE(cfgUseAdditionalEventCut, bool, false, "Use additional event cut on mult correlations")
7273
O2_DEFINE_CONFIGURABLE(cfgUseAdditionalTrackCut, bool, false, "Use additional track cut on phi")
74+
O2_DEFINE_CONFIGURABLE(cfgTrackSelRun3ITSMatch, bool, false, "Track selection for ITS matches")
7375
O2_DEFINE_CONFIGURABLE(cfgUseNch, bool, false, "Use Nch for flow observables")
7476
O2_DEFINE_CONFIGURABLE(cfgNbootstrap, int, 10, "Number of subsamples")
7577
O2_DEFINE_CONFIGURABLE(cfgOutputNUAWeights, bool, false, "Fill and output NUA weights")
@@ -80,20 +82,21 @@ struct FlowGfwTask {
8082
O2_DEFINE_CONFIGURABLE(cfgCutOccupancyLow, int, 0, "Low cut on TPC occupancy")
8183
O2_DEFINE_CONFIGURABLE(cfgCutDCAz, float, 2, "Custom DCA Z cut")
8284
O2_DEFINE_CONFIGURABLE(cfgCutDCAxy, float, 0.2f, "Custom DCA XY cut")
85+
O2_DEFINE_CONFIGURABLE(cfgDCAzPt, bool, false, "switch for DCAz pt dependent")
8386
O2_DEFINE_CONFIGURABLE(cfgNoTimeFrameBorder, bool, false, "kNoTimeFrameBorder");
8487
O2_DEFINE_CONFIGURABLE(cfgNoITSROFrameBorder, bool, false, "kNoITSROFrameBorder");
8588
O2_DEFINE_CONFIGURABLE(cfgNoSameBunchPileup, bool, false, "kNoSameBunchPileup");
8689
O2_DEFINE_CONFIGURABLE(cfgIsGoodZvtxFT0vsPV, bool, false, "kIsGoodZvtxFT0vsPV");
90+
O2_DEFINE_CONFIGURABLE(cfgIsVertexITSTPC, bool, false, "kIsVertexITSTPC");
8791
O2_DEFINE_CONFIGURABLE(cfgNoCollInTimeRangeStandard, bool, false, "kNoCollInTimeRangeStandard");
8892
O2_DEFINE_CONFIGURABLE(cfgEvSelkIsGoodITSLayersAll, bool, false, "kIsGoodITSLayersAll")
8993
O2_DEFINE_CONFIGURABLE(cfgOccupancy, bool, false, "Bool for event selection on detector occupancy");
9094
O2_DEFINE_CONFIGURABLE(cfgMultCut, bool, false, "Use additional event cut on mult correlations");
95+
O2_DEFINE_CONFIGURABLE(cfgV0AT0A5Sigma, bool, true, "V0A T0A 5 sigma cut")
9196
O2_DEFINE_CONFIGURABLE(cfgGlobalplusITS, bool, false, "Global and ITS tracks")
9297
O2_DEFINE_CONFIGURABLE(cfgGlobalonly, bool, false, "Global only tracks")
9398
O2_DEFINE_CONFIGURABLE(cfgITSonly, bool, false, "ITS only tracks")
9499
O2_DEFINE_CONFIGURABLE(cfgFineBinning, bool, false, "Manually change to fine binning")
95-
O2_DEFINE_CONFIGURABLE(cfgTrackSelRun3ITSMatch, bool, false, "System check: Run3ITSMatch")
96-
O2_DEFINE_CONFIGURABLE(cfgTrackSel, bool, false, "System check: track selection")
97100

98101
ConfigurableAxis axisVertex{"axisVertex", {20, -10, 10}, "vertex axis for histograms"};
99102
ConfigurableAxis axisPhi{"axisPhi", {60, 0.0, constants::math::TwoPI}, "phi axis for histograms"};
@@ -184,6 +187,7 @@ struct FlowGfwTask {
184187
kNOITSROFRAMEBORDER,
185188
kNOPSAMEBUNCHPILEUP,
186189
kISGOODZVTXFT0VSPV,
190+
kISVERTEXITSTPC,
187191
kNOCOLLINTIMERANGESTANDART,
188192
kISGOODITSLAYERSALL,
189193
kAFTERMULTCUTS,
@@ -240,6 +244,7 @@ struct FlowGfwTask {
240244
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kNOITSROFRAMEBORDER + 1, "kNoITSROFrameBorder");
241245
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kNOPSAMEBUNCHPILEUP + 1, "kNoSameBunchPileup");
242246
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kISGOODZVTXFT0VSPV + 1, "kIsGoodZvtxFT0vsPV");
247+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kISVERTEXITSTPC + 1, "kIsVertexITSTPC");
243248
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kNOCOLLINTIMERANGESTANDART + 1, "kNoCollInTimeRangeStandard");
244249
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kISGOODITSLAYERSALL + 1, "kIsGoodITSLayersAll");
245250
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kAFTERMULTCUTS + 1, "After Mult cuts");
@@ -604,49 +609,57 @@ struct FlowGfwTask {
604609
}
605610
registry.fill(HIST("hEventCount"), kISGOODZVTXFT0VSPV);
606611
}
607-
if (cfgNoCollInTimeRangeStandard) {
608-
if (!collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
609-
// no collisions in specified time range
612+
if (cfgIsVertexITSTPC) {
613+
if (!collision.selection_bit(o2::aod::evsel::kIsVertexITSTPC)) {
614+
// removes collisions without vertex match between ITS-TPC
610615
return false;
611616
}
612-
registry.fill(HIST("hEventCount"), kNOCOLLINTIMERANGESTANDART);
613-
}
614-
if (cfgEvSelkIsGoodITSLayersAll) {
615-
if (cfgEvSelkIsGoodITSLayersAll && !collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) {
616-
// removes dead staves of ITS
617-
return false;
617+
registry.fill(HIST("hEventCount"), kISVERTEXITSTPC);
618+
if (cfgNoCollInTimeRangeStandard) {
619+
if (!collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard)) {
620+
// no collisions in specified time range
621+
return false;
622+
}
623+
registry.fill(HIST("hEventCount"), kNOCOLLINTIMERANGESTANDART);
624+
}
625+
if (cfgEvSelkIsGoodITSLayersAll) {
626+
if (cfgEvSelkIsGoodITSLayersAll && !collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) {
627+
// removes dead staves of ITS
628+
return false;
629+
}
630+
registry.fill(HIST("hEventCount"), kISGOODITSLAYERSALL);
618631
}
619-
registry.fill(HIST("hEventCount"), kISGOODITSLAYERSALL);
620-
}
621-
622-
float vtxz = -999;
623-
if (collision.numContrib() > 1) {
624-
vtxz = collision.posZ();
625-
float zRes = std::sqrt(collision.covZZ());
626-
if (zRes > 0.25 && collision.numContrib() < 20)
627-
vtxz = -999;
628-
}
629632

630-
auto multNTracksPV = collision.multNTracksPV();
633+
float vtxz = -999;
634+
if (collision.numContrib() > 1) {
635+
vtxz = collision.posZ();
636+
float zRes = std::sqrt(collision.covZZ());
637+
if (zRes > 0.25 && collision.numContrib() < 20)
638+
vtxz = -999;
639+
}
631640

632-
if (std::abs(vtxz) > cfgCutVertex)
633-
return false;
641+
auto multNTracksPV = collision.multNTracksPV();
634642

635-
if (cfgMultCut) {
636-
if (multNTracksPV < fMultPVCutLow->Eval(centrality))
637-
return false;
638-
if (multNTracksPV > fMultPVCutHigh->Eval(centrality))
639-
return false;
640-
if (multTrk < fMultCutLow->Eval(centrality))
641-
return false;
642-
if (multTrk > fMultCutHigh->Eval(centrality))
643+
if (std::abs(vtxz) > cfgCutVertex)
643644
return false;
644-
registry.fill(HIST("hEventCount"), kAFTERMULTCUTS);
645-
}
646645

647-
// V0A T0A 5 sigma cut
648-
if (std::abs(collision.multFV0A() - fT0AV0AMean->Eval(collision.multFT0A())) > 5 * fT0AV0ASigma->Eval(collision.multFT0A()))
649-
return false;
646+
if (cfgMultCut) {
647+
if (multNTracksPV < fMultPVCutLow->Eval(centrality))
648+
return false;
649+
if (multNTracksPV > fMultPVCutHigh->Eval(centrality))
650+
return false;
651+
if (multTrk < fMultCutLow->Eval(centrality))
652+
return false;
653+
if (multTrk > fMultCutHigh->Eval(centrality))
654+
return false;
655+
registry.fill(HIST("hEventCount"), kAFTERMULTCUTS);
656+
}
657+
658+
// V0A T0A 5 sigma cut
659+
if (cfgV0AT0A5Sigma)
660+
if (std::abs(collision.multFV0A() - fT0AV0AMean->Eval(collision.multFT0A())) > 5 * fT0AV0ASigma->Eval(collision.multFT0A()))
661+
return false;
662+
}
650663

651664
return true;
652665
}
@@ -688,11 +701,19 @@ struct FlowGfwTask {
688701
template <typename TTrack>
689702
bool trackSelected(TTrack track)
690703
{
704+
if (cfgDCAzPt && (std::fabs(track.dcaZ()) > (0.004f + 0.013f / track.pt())))
705+
return false;
691706

692707
if (cfgTrackSel) {
693708
return myTrackSel.IsSelected(track);
709+
} else if (cfgGlobalplusITS) {
710+
return ((track.tpcNClsFound() >= cfgCutTPCclu) && (track.itsNCls() >= cfgCutITSclu));
711+
} else if (cfgGlobalonly) {
712+
return ((track.tpcNClsFound() >= cfgCutTPCclu));
713+
} else if (cfgITSonly) {
714+
return ((track.itsNCls() >= cfgCutITSclu));
694715
} else {
695-
return (track.tpcNClsFound() >= cfgCutTPCclu);
716+
return false;
696717
}
697718
}
698719

@@ -900,30 +921,30 @@ struct FlowGfwTask {
900921

901922
if (cfgGlobalplusITS) {
902923
if (withinPtRef) {
903-
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
904924
globalTracksNch++;
905925
registry.fill(HIST("GlobalplusITS"), centrality, globalTracksNch);
926+
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
906927
}
907928
}
908929

909930
if (track.hasTPC()) {
910931
if (cfgGlobalonly) {
911932
if (withinPtRef) {
912-
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
913933
globalTracksNch++;
914934
registry.fill(HIST("Globalonly"), centrality, globalTracksNch);
915935
registry.fill(HIST("pt_Cen_GlobalOnly"), centrality, track.pt());
916936
registry.fill(HIST("phi_Cen_GlobalOnly"), centrality, track.phi());
937+
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
917938
}
918939
}
919940
} else {
920941
if (cfgITSonly) {
921942
if (withinPtRef) {
922-
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
923943
globalTracksNch++;
924944
registry.fill(HIST("ITSonly"), centrality, globalTracksNch);
925945
registry.fill(HIST("pt_Cen_ITSOnly"), centrality, track.pt());
926946
registry.fill(HIST("phi_Cen_ITSOnly"), centrality, track.phi());
947+
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
927948
}
928949
}
929950
}

0 commit comments

Comments
 (0)