Skip to content

Commit 49b3ecd

Browse files
ilikmetaalibuild
andauthored
[PWGCF] Change to Global+ITS tracks and add centrality estimators. (#9976)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent eb0c9f3 commit 49b3ecd

File tree

1 file changed

+129
-12
lines changed

1 file changed

+129
-12
lines changed

PWGCF/Flow/Tasks/flowGfwTask.cxx

Lines changed: 129 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,11 @@ struct FlowGfwTask {
6363
O2_DEFINE_CONFIGURABLE(cfgCutITSclu, float, 5.0f, "minimum ITS clusters")
6464
O2_DEFINE_CONFIGURABLE(cfgMinCentFT0C, float, 0.0f, "Minimum FT0C Centrality")
6565
O2_DEFINE_CONFIGURABLE(cfgMaxCentFT0C, float, 100.0f, "Maximum FT0C Centrality")
66+
O2_DEFINE_CONFIGURABLE(cfgcentEstFt0c, bool, false, "Centrality estimator based on FT0C signal")
67+
O2_DEFINE_CONFIGURABLE(cfgcentEstFt0a, bool, false, "Centrality estimator based on FT0A signal")
68+
O2_DEFINE_CONFIGURABLE(cfgcentEstFt0m, bool, false, " A centrality estimator based on FT0A+FT0C signals.")
69+
O2_DEFINE_CONFIGURABLE(cfgcentEstFv0a, bool, false, "Centrality estimator based on FV0A signal")
70+
O2_DEFINE_CONFIGURABLE(cfgcentEstFt0cVariant1, bool, false, "A variant of FT0C")
6671
O2_DEFINE_CONFIGURABLE(cfgUseAdditionalEventCut, bool, false, "Use additional event cut on mult correlations")
6772
O2_DEFINE_CONFIGURABLE(cfgUseAdditionalTrackCut, bool, false, "Use additional track cut on phi")
6873
O2_DEFINE_CONFIGURABLE(cfgUseNch, bool, false, "Use Nch for flow observables")
@@ -83,7 +88,10 @@ struct FlowGfwTask {
8388
O2_DEFINE_CONFIGURABLE(cfgEvSelkIsGoodITSLayersAll, bool, false, "kIsGoodITSLayersAll")
8489
O2_DEFINE_CONFIGURABLE(cfgOccupancy, bool, false, "Bool for event selection on detector occupancy");
8590
O2_DEFINE_CONFIGURABLE(cfgMultCut, bool, false, "Use additional event cut on mult correlations");
86-
O2_DEFINE_CONFIGURABLE(FineBinning, bool, false, "Manually change to fine binning")
91+
O2_DEFINE_CONFIGURABLE(cfgGlobalplusITS, bool, false, "Global and ITS tracks")
92+
O2_DEFINE_CONFIGURABLE(cfgGlobalonly, bool, false, "Global only tracks")
93+
O2_DEFINE_CONFIGURABLE(cfgITSonly, bool, false, "ITS only tracks")
94+
O2_DEFINE_CONFIGURABLE(cfgFineBinning, bool, false, "Manually change to fine binning")
8795
O2_DEFINE_CONFIGURABLE(cfgTrackSelRun3ITSMatch, bool, false, "System check: Run3ITSMatch")
8896
O2_DEFINE_CONFIGURABLE(cfgTrackSel, bool, false, "System check: track selection")
8997

@@ -183,6 +191,28 @@ struct FlowGfwTask {
183191
kNOOFEVENTSTEPS
184192
};
185193

194+
enum CentEstimators {
195+
kCentFT0C,
196+
kCentFT0A,
197+
kCentFT0M,
198+
kCentFV0A,
199+
kCentFT0CVariant1,
200+
kNoCentEstimators
201+
};
202+
203+
// Contruct Global+ITS sample
204+
static constexpr TrackSelectionFlags::flagtype TrackSelectionITS =
205+
TrackSelectionFlags::kITSNCls | TrackSelectionFlags::kITSChi2NDF |
206+
TrackSelectionFlags::kITSHits;
207+
static constexpr TrackSelectionFlags::flagtype TrackSelectionTPC =
208+
TrackSelectionFlags::kTPCNCls |
209+
TrackSelectionFlags::kTPCCrossedRowsOverNCls |
210+
TrackSelectionFlags::kTPCChi2NDF;
211+
static constexpr TrackSelectionFlags::flagtype TrackSelectionDCA =
212+
TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy;
213+
static constexpr TrackSelectionFlags::flagtype TrackSelectionDCAXYonly =
214+
TrackSelectionFlags::kDCAxy;
215+
186216
// Additional Event selection cuts - Copy from flowGenericFramework.cxx
187217
TrackSelection myTrackSel;
188218
TF1* fPhiCutLow = nullptr;
@@ -222,6 +252,19 @@ struct FlowGfwTask {
222252
registry.add("hCent", "Centrality distribution", {HistType::kTH1D, {{90, 0, 90}}});
223253
registry.add("cent_vs_Nch", ";Centrality (%); M (|#eta| < 0.8);", {HistType::kTH2D, {axisCentrality, axisNch}});
224254

255+
// Centrality estimators
256+
registry.add("hCentEstimators", "Number of Unfiltered Events;; No. of Events", {HistType::kTH1D, {{kNoCentEstimators, -0.5, static_cast<int>(kNoCentEstimators) - 0.5}}});
257+
registry.get<TH1>(HIST("hCentEstimators"))->GetXaxis()->SetBinLabel(kCentFT0C + 1, "FT0C");
258+
registry.get<TH1>(HIST("hCentEstimators"))->GetXaxis()->SetBinLabel(kCentFT0A + 1, "FT0A");
259+
registry.get<TH1>(HIST("hCentEstimators"))->GetXaxis()->SetBinLabel(kCentFT0M + 1, "FT0M");
260+
registry.get<TH1>(HIST("hCentEstimators"))->GetXaxis()->SetBinLabel(kCentFV0A + 1, "FV0A");
261+
registry.get<TH1>(HIST("hCentEstimators"))->GetXaxis()->SetBinLabel(kCentFT0CVariant1 + 1, "FT0CVar1");
262+
registry.add("hCentFT0C", "FT0C Unfiltered;Centrality FT0C ;Events", kTH1F, {axisCentrality});
263+
registry.add("hCentFT0A", "FT0A Unfiltered;Centrality FT0A ;Events", kTH1F, {axisCentrality});
264+
registry.add("hCentFT0M", "FT0M Unfiltered;Centrality FT0M ;Events", kTH1F, {axisCentrality});
265+
registry.add("hCentFV0A", "FV0A Unfiltered;Centrality FV0A ;Events", kTH1F, {axisCentrality});
266+
registry.add("hCentFT0CVariant1", "FT0CVariant1 Unfiltered;Centrality FT0CVariant1 ;Events", kTH1F, {axisCentrality});
267+
225268
// Before cuts
226269
registry.add("BeforeCut_globalTracks_centT0C", "before cut;Centrality T0C;mulplicity global tracks", {HistType::kTH2D, {axisCentForQA, axisNch}});
227270
registry.add("BeforeCut_PVTracks_centT0C", "before cut;Centrality T0C;mulplicity PV tracks", {HistType::kTH2D, {axisCentForQA, axisNchPV}});
@@ -268,9 +311,17 @@ struct FlowGfwTask {
268311
registry.add("ZNvsZEMcollrest", "ZNvsZEMcoll; ZEM; ZDC energy (GeV)", {HistType::kTH2F, {{{nBinsAmp, -0.5, maxZEM}, {nBinsAmp, -0.5, 2. * maxZN}}}});
269312

270313
// Track plots
271-
registry.add("Nch", "N_{ch 0-5%} vs #Events of;N_{ch 0-5%};No. of Events", {HistType::kTH1D, {axisNch}});
314+
registry.add("Nch", "N_{ch 0-5%} vs #Events;N_{ch 0-5%};No. of Events", {HistType::kTH1D, {axisNch}});
272315
registry.add("Events_per_Centrality_Bin", "Events_per_Centrality_Bin;Centrality FT0C;No. of Events", kTH1F, {axisCentrality});
273-
registry.add("Global_Tracks_Nch_vs_Cent", "Global Tracks;Centrality (%); M (|#eta| < 0.8);", {HistType::kTH2D, {axisCentrality, axisNch}});
316+
registry.add("pt_Cen_GlobalOnly", "pt_Cen_Global;Centrality (%); p_{T} (GeV/c);", {HistType::kTH2D, {axisCentrality, axisPt}});
317+
registry.add("phi_Cen_GlobalOnly", "phi_Cen_Global;Centrality (%); #phi;", {HistType::kTH2D, {axisCentrality, axisPhi}});
318+
registry.add("pt_Cen_ITSOnly", "pt_Cen_ITS;Centrality (%); p_{T} (GeV/c);", {HistType::kTH2D, {axisCentrality, axisPt}});
319+
registry.add("phi_Cen_ITSOnly", "phi_Cen_ITS;Centrality (%); #phi;", {HistType::kTH2D, {axisCentrality, axisPhi}});
320+
321+
// Track types
322+
registry.add("GlobalplusITS", "Global plus ITS;Centrality FT0C;Nch", kTH1F, {axisCentrality});
323+
registry.add("Globalonly", "Global only;Centrality FT0C;Nch", kTH1F, {axisCentrality});
324+
registry.add("ITSonly", "ITS only;Centrality FT0C;Nch", kTH1F, {axisCentrality});
274325

275326
// Track QA
276327
registry.add("hPt", "p_{T} distribution before cut", {HistType::kTH1D, {axisPtHist}});
@@ -646,9 +697,15 @@ struct FlowGfwTask {
646697

647698
// Apply process filters
648699
Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex && (aod::cent::centFT0C > cfgMinCentFT0C) && (aod::cent::centFT0C < cfgMaxCentFT0C);
649-
Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPtMin) && (aod::track::pt < cfgCutPtMax) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t) true)) && (aod::track::tpcChi2NCl < cfgCutChi2prTPCcls) && (nabs(aod::track::dcaZ) < cfgCutDCAz) && (nabs(aod::track::dcaXY) < cfgCutDCAxy);
650-
651-
using Colls = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0As, aod::CentFT0Ms>>; // collisions filter
700+
Filter trackFilter = ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::ITS) &&
701+
ncheckbit(aod::track::trackCutFlag, TrackSelectionITS) &&
702+
ifnode(ncheckbit(aod::track::v001::detectorMap, (uint8_t)o2::aod::track::TPC),
703+
ncheckbit(aod::track::trackCutFlag, TrackSelectionTPC), true) &&
704+
ifnode(dcaZ > 0.f, nabs(aod::track::dcaZ) <= dcaZ && ncheckbit(aod::track::trackCutFlag, TrackSelectionDCAXYonly),
705+
ncheckbit(aod::track::trackCutFlag, TrackSelectionDCA)) &&
706+
(nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPtMin) && (aod::track::pt < cfgCutPtMax) && (aod::track::tpcChi2NCl < cfgCutChi2prTPCcls);
707+
708+
using Colls = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0As, aod::CentFT0Ms, aod::CentFV0As, aod::CentFT0CVariant1s>>; // collisions filter
652709
using AodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksDCA, aod::TracksExtra>>; // tracks filter
653710

654711
using BCsRun3 = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
@@ -663,7 +720,31 @@ struct FlowGfwTask {
663720
if (nTotal < 1)
664721
return;
665722

666-
const auto centrality = collision.centFT0C();
723+
// Choose centrality estimator -- Only one can be true
724+
float centrality = 0;
725+
if (cfgcentEstFt0c) {
726+
const auto centrality = collision.centFT0C();
727+
registry.fill(HIST("hCentEstimators"), kCentFT0C);
728+
registry.fill(HIST("hCentFT0C"), centrality);
729+
} else if (cfgcentEstFt0a) {
730+
const auto centrality = collision.centFT0A();
731+
registry.fill(HIST("hCentEstimators"), kCentFT0A);
732+
registry.fill(HIST("hCentFT0A"), centrality);
733+
} else if (cfgcentEstFt0m) {
734+
const auto centrality = collision.centFT0M();
735+
registry.fill(HIST("hCentEstimators"), kCentFT0M);
736+
registry.fill(HIST("hCentFT0M"), centrality);
737+
} else if (cfgcentEstFv0a) {
738+
const auto centrality = collision.centFV0A();
739+
registry.fill(HIST("hCentEstimators"), kCentFV0A);
740+
registry.fill(HIST("hCentFV0A"), centrality);
741+
} else if (cfgcentEstFt0cVariant1) {
742+
const auto centrality = collision.centFT0CVariant1();
743+
registry.fill(HIST("hCentEstimators"), kCentFT0CVariant1);
744+
registry.fill(HIST("hCentFT0CVariant1"), centrality);
745+
} else {
746+
return;
747+
}
667748

668749
// fill event QA before cuts
669750
registry.fill(HIST("BeforeCut_globalTracks_centT0C"), collision.centFT0C(), tracks.size());
@@ -785,6 +866,9 @@ struct FlowGfwTask {
785866

786867
// track loop
787868
int globalTracksNch = 0;
869+
int globalPlusitsNch = 0;
870+
int gloabalOnlyNch = 0;
871+
int itsOnlyNch = 0;
788872

789873
for (const auto& track : tracks) {
790874
if (!trackSelected(track))
@@ -814,18 +898,51 @@ struct FlowGfwTask {
814898
registry.fill(HIST("hDCAxy"), track.dcaXY(), track.pt());
815899
}
816900

817-
globalTracksNch++;
901+
globalPlusitsNch++;
818902

819-
if (withinPtRef)
820-
fGFW->Fill(track.eta(), 1, track.phi(), wacc * weff, 1);
903+
registry.fill(HIST("GlobalplusITS"), centrality);
821904

822-
if (FineBinning == true)
905+
if (cfgGlobalplusITS) {
906+
if (withinPtRef) {
907+
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
908+
}
909+
}
910+
911+
if (track.hasTPC()) {
912+
if (cfgGlobalonly) {
913+
if (withinPtRef) {
914+
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
915+
gloabalOnlyNch++;
916+
registry.fill(HIST("Globalonly"), centrality);
917+
registry.fill(HIST("pt_Cen_ITSOnly"), centrality, track.pt());
918+
registry.fill(HIST("phi_Cen_GlobalOnly"), centrality, track.pt());
919+
}
920+
}
921+
} else {
922+
if (cfgITSonly) {
923+
if (withinPtRef) {
924+
fGFW->Fill(track.eta(), fPtAxis->FindBin(track.pt()) - 1, track.phi(), wacc * weff, 1);
925+
itsOnlyNch++;
926+
registry.fill(HIST("ITSonly"), centrality);
927+
registry.fill(HIST("pt_Cen_ITSOnly"), centrality, track.pt());
928+
registry.fill(HIST("phi_Cen_ITSOnly"), centrality, track.pt());
929+
}
930+
}
931+
}
932+
933+
if (cfgFineBinning)
823934
fGFW->Fill(track.eta(), 1, track.phi(), wacc * weff, 1);
824935

825936
} // End of track loop
826937

938+
globalTracksNch = globalPlusitsNch;
939+
globalTracksNch = gloabalOnlyNch;
940+
globalTracksNch = itsOnlyNch;
941+
827942
registry.fill(HIST("Events_per_Centrality_Bin"), centrality);
828-
registry.fill(HIST("Global_Tracks_Nch_vs_Cent"), centrality, globalTracksNch);
943+
registry.fill(HIST("GlobalplusITS"), centrality, globalPlusitsNch);
944+
registry.fill(HIST("Globalonly"), centrality, gloabalOnlyNch);
945+
registry.fill(HIST("ITSonly"), centrality, itsOnlyNch);
829946

830947
// Filling c22 with ROOT TProfile
831948
fillProfile(corrconfigs.at(0), HIST("c22"), centrality);

0 commit comments

Comments
 (0)