Skip to content

Commit 36ae9c4

Browse files
ilikmetaalibuild
andauthored
[PWGCF] Add ZDC amplitudes. (#9718)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 484cfee commit 36ae9c4

File tree

1 file changed

+103
-20
lines changed

1 file changed

+103
-20
lines changed

PWGCF/Flow/Tasks/flowGfwTask.cxx

Lines changed: 103 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ struct FlowGfwTask {
7979
O2_DEFINE_CONFIGURABLE(cfgNoSameBunchPileup, bool, false, "kNoSameBunchPileup");
8080
O2_DEFINE_CONFIGURABLE(cfgIsGoodZvtxFT0vsPV, bool, false, "kIsGoodZvtxFT0vsPV");
8181
O2_DEFINE_CONFIGURABLE(cfgNoCollInTimeRangeStandard, bool, false, "kNoCollInTimeRangeStandard");
82+
O2_DEFINE_CONFIGURABLE(cfgEvSelkIsGoodITSLayersAll, bool, false, "kIsGoodITSLayersAll")
8283
O2_DEFINE_CONFIGURABLE(cfgOccupancy, bool, false, "Bool for event selection on detector occupancy");
8384
O2_DEFINE_CONFIGURABLE(cfgMultCut, bool, false, "Use additional event cut on mult correlations");
8485
O2_DEFINE_CONFIGURABLE(FineBinning, bool, false, "Manually change to fine binning")
@@ -96,13 +97,22 @@ struct FlowGfwTask {
9697
ConfigurableAxis axisCentForQA{"axisCentForQA", {100, 0, 100}, "centrality for QA"};
9798
ConfigurableAxis axisT0C{"axisT0C", {70, 0, 70000}, "N_{ch} (T0C)"};
9899
ConfigurableAxis axisT0A{"axisT0A", {200, 0, 200000}, "N_{ch} (T0A)"};
100+
ConfigurableAxis axisT0M{"axisT0M", {70, 0, 70000}, "N_{ch} (T0M)"};
99101
ConfigurableAxis axisFT0CAmp{"axisFT0CAmp", {5000, 0, 5000}, "axisFT0CAmp"};
100102
ConfigurableAxis axisFT0AAmp{"axisFT0AAmp", {5000, 0, 5000}, "axisFT0AAmp"};
101103
ConfigurableAxis axisFT0MAmp{"axisFT0MAmp", {10000, 0, 10000}, "axisFT0MAmp"};
102104
ConfigurableAxis axisNchPV{"axisNchPV", {4000, 0, 4000}, "N_{ch} (PV)"};
103105
ConfigurableAxis axisDCAz{"axisDCAz", {200, -2, 2}, "DCA_{z} (cm)"};
104106
ConfigurableAxis axisDCAxy{"axisDCAxy", {200, -1, 1}, "DCA_{xy} (cm)"};
105107

108+
// Configurables for ZDC
109+
Configurable<int> nBinsAmp{"nBinsAmp", 1025, "nbinsAmp"};
110+
Configurable<float> maxZN{"maxZN", 4099.5, "Max ZN signal"};
111+
Configurable<float> maxZP{"maxZP", 3099.5, "Max ZP signal"};
112+
Configurable<float> maxZEM{"maxZEM", 3099.5, "Max ZEM signal"};
113+
Configurable<int> nBinsFit{"nBinsFit", 1000, "nbinsFit"};
114+
Configurable<float> maxMultFT0{"maxMultFT0", 3000, "Max FT0 signal"};
115+
106116
// Corrections
107117
TH1D* mEfficiency = nullptr;
108118
GFWWeights* mAcceptance = nullptr;
@@ -167,6 +177,7 @@ struct FlowGfwTask {
167177
kNOPSAMEBUNCHPILEUP,
168178
kISGOODZVTXFT0VSPV,
169179
kNOCOLLINTIMERANGESTANDART,
180+
kISGOODITSLAYERSALL,
170181
kAFTERMULTCUTS,
171182
kCENTRALITY,
172183
kNOOFEVENTSTEPS
@@ -201,6 +212,7 @@ struct FlowGfwTask {
201212
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kNOPSAMEBUNCHPILEUP + 1, "kNoSameBunchPileup");
202213
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kISGOODZVTXFT0VSPV + 1, "kIsGoodZvtxFT0vsPV");
203214
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kNOCOLLINTIMERANGESTANDART + 1, "kNoCollInTimeRangeStandard");
215+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kISGOODITSLAYERSALL + 1, "kIsGoodITSLayersAll");
204216
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kAFTERMULTCUTS + 1, "After Mult cuts");
205217
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(kCENTRALITY + 1, "Centrality");
206218
registry.add("hPhi", "#phi distribution", {HistType::kTH1D, {axisPhi}});
@@ -219,6 +231,8 @@ struct FlowGfwTask {
219231
registry.add("BeforeCut_globalTracks_multV0A", "before cut;mulplicity V0A;mulplicity global tracks", {HistType::kTH2D, {axisT0A, axisNch}});
220232
registry.add("BeforeCut_multV0A_multT0A", "before cut;mulplicity T0A;mulplicity V0A", {HistType::kTH2D, {axisT0A, axisT0A}});
221233
registry.add("BeforeCut_multT0C_centT0C", "before cut;Centrality T0C;mulplicity T0C", {HistType::kTH2D, {axisCentForQA, axisT0C}});
234+
registry.add("BeforeCut_multT0A_centT0A", "before cut;Centrality T0C;mulplicity T0A", {HistType::kTH2D, {axisCentForQA, axisT0A}});
235+
registry.add("BeforeCut_multFT0M_centFT0M", "before cut;Centrality FT0M;mulplicity FT0M", {HistType::kTH2D, {axisCentForQA, axisT0M}});
222236

223237
// After cuts
224238
registry.add("globalTracks_centT0C_Aft", "after cut;Centrality T0C;mulplicity global tracks", {HistType::kTH2D, {axisCentForQA, axisNch}});
@@ -228,12 +242,30 @@ struct FlowGfwTask {
228242
registry.add("globalTracks_multV0A_Aft", "after cut;mulplicity V0A;mulplicity global tracks", {HistType::kTH2D, {axisT0A, axisNch}});
229243
registry.add("multV0A_multT0A_Aft", "after cut;mulplicity T0A;mulplicity V0A", {HistType::kTH2D, {axisT0A, axisT0A}});
230244
registry.add("multT0C_centT0C_Aft", "after cut;Centrality T0C;mulplicity T0C", {HistType::kTH2D, {axisCentForQA, axisT0C}});
245+
registry.add("multT0A_centT0A_Aft", "after cut;Centrality T0A;mulplicity T0A", {HistType::kTH2D, {axisCentForQA, axisT0A}});
246+
registry.add("multFT0M_centFT0M_Aft", "after cut;Centrality FT0M;mulplicity FT0M", {HistType::kTH2D, {axisCentForQA, axisT0M}});
231247

232248
// FT0 plots
233249
registry.add("FT0CAmp", ";FT0C amplitude;Events", kTH1F, {axisFT0CAmp});
234250
registry.add("FT0AAmp", ";FT0A amplitude;Events", kTH1F, {axisFT0AAmp});
235251
registry.add("FT0MAmp", ";FT0M amplitude;Events", kTH1F, {axisFT0MAmp});
236252

253+
// ZDC plots
254+
const AxisSpec axisEvent{3, 0., +3.0, ""};
255+
registry.add("hEventCounterForZDC", "Event counter", kTH1F, {axisEvent});
256+
registry.add("ZNAcoll", "ZNAcoll; ZNA amplitude; Entries", {HistType::kTH1F, {{nBinsAmp, -0.5, maxZN}}});
257+
registry.add("ZPAcoll", "ZPAcoll; ZPA amplitude; Entries", {HistType::kTH1F, {{nBinsAmp, -0.5, maxZP}}});
258+
registry.add("ZNCcoll", "ZNCcoll; ZNC amplitude; Entries", {HistType::kTH1F, {{nBinsAmp, -0.5, maxZN}}});
259+
registry.add("ZPCcoll", "ZPCcoll; ZPC amplitude; Entries", {HistType::kTH1F, {{nBinsAmp, -0.5, maxZP}}});
260+
registry.add("ZNvsFT0correl", "ZNvsFT0correl", {HistType::kTH2F, {{{nBinsFit, 0., maxMultFT0}, {nBinsAmp, -0.5, 2. * maxZN}}}});
261+
registry.add("ZDCAmp", "ZDC Amplitude; ZDC Amplitude; Events", {HistType::kTH1F, {{nBinsAmp, -0.5, maxZP}}});
262+
registry.add("ZNvsZEMcoll", "ZNvsZEMcoll; ZEM; ZNA+ZNC", {HistType::kTH2F, {{{nBinsAmp, -0.5, maxZEM}, {nBinsAmp, -0.5, 2. * maxZN}}}});
263+
registry.add("ZNvsZEMcoll05", "ZNvsZEMcoll; ZEM; ZNA+ZNC", {HistType::kTH2F, {{{nBinsAmp, -0.5, maxZEM}, {nBinsAmp, -0.5, 2. * maxZN}}}});
264+
registry.add("ZNvsZEMcoll510", "ZNvsZEMcoll; ZEM; ZNA+ZNC", {HistType::kTH2F, {{{nBinsAmp, -0.5, maxZEM}, {nBinsAmp, -0.5, 2. * maxZN}}}});
265+
registry.add("ZNvsZEMcoll1020", "ZNvsZEMcoll; ZEM; ZNA+ZNC", {HistType::kTH2F, {{{nBinsAmp, -0.5, maxZEM}, {nBinsAmp, -0.5, 2. * maxZN}}}});
266+
registry.add("ZNvsZEMcoll2030", "ZNvsZEMcoll; ZEM; ZNA+ZNC", {HistType::kTH2F, {{{nBinsAmp, -0.5, maxZEM}, {nBinsAmp, -0.5, 2. * maxZN}}}});
267+
registry.add("ZNvsZEMcollrest", "ZNvsZEMcoll; ZEM; ZNA+ZNC", {HistType::kTH2F, {{{nBinsAmp, -0.5, maxZEM}, {nBinsAmp, -0.5, 2. * maxZN}}}});
268+
237269
// Track plots
238270
registry.add("Events_per_Centrality_Bin", "Events_per_Centrality_Bin;Centrality FT0C;No. of Events", kTH1F, {axisCentrality});
239271
registry.add("Global_Tracks_Nch_vs_Cent", "Global Tracks;Centrality (%); M (|#eta| < 0.8);", {HistType::kTH2D, {axisCentrality, axisNch}});
@@ -532,6 +564,13 @@ struct FlowGfwTask {
532564
}
533565
registry.fill(HIST("hEventCount"), kNOCOLLINTIMERANGESTANDART);
534566
}
567+
if (cfgEvSelkIsGoodITSLayersAll) {
568+
if (cfgEvSelkIsGoodITSLayersAll && !collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll)) {
569+
// no other collisions in this Readout Frame with per-collision multiplicity above threshold
570+
return false;
571+
}
572+
registry.fill(HIST("hEventCount"), kISGOODITSLAYERSALL);
573+
}
535574

536575
float vtxz = -999;
537576
if (collision.numContrib() > 1) {
@@ -614,10 +653,12 @@ struct FlowGfwTask {
614653
Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
615654
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);
616655

617-
using Colls = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs>>; // collisions filter
656+
using Colls = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0As, aod::CentFT0Ms>>; // collisions filter
618657
using AodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksDCA, aod::TracksExtra>>; // tracks filter
619658

620-
void processData(Colls::iterator const& collision, aod::BCsWithTimestamps const&, AodTracks const& tracks, aod::FT0s const&)
659+
using BCsRun3 = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
660+
661+
void processData(Colls::iterator const& collision, aod::BCsWithTimestamps const&, AodTracks const& tracks, aod::FT0s const&, aod::Zdcs const&, BCsRun3 const&)
621662
{
622663
registry.fill(HIST("hEventCount"), kFILTERED);
623664
if (!collision.sel8())
@@ -635,6 +676,8 @@ struct FlowGfwTask {
635676
registry.fill(HIST("BeforeCut_globalTracks_multV0A"), collision.multFV0A(), tracks.size());
636677
registry.fill(HIST("BeforeCut_multV0A_multT0A"), collision.multFT0A(), collision.multFV0A());
637678
registry.fill(HIST("BeforeCut_multT0C_centT0C"), collision.centFT0C(), collision.multFT0C());
679+
registry.fill(HIST("BeforeCut_multT0A_centT0A"), collision.centFT0A(), collision.multFT0A());
680+
registry.fill(HIST("BeforeCut_multFT0M_centFT0M"), collision.centFT0M(), collision.multFT0M());
638681
registry.fill(HIST("hEventCount"), kSEL8);
639682

640683
const auto centrality = collision.centFT0C();
@@ -662,7 +705,7 @@ struct FlowGfwTask {
662705

663706
fGFW->Clear();
664707

665-
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
708+
auto bc = collision.bc_as<BCsRun3>();
666709
loadCorrections(bc.timestamp());
667710
registry.fill(HIST("hEventCount"), kCENTRALITY);
668711

@@ -674,26 +717,67 @@ struct FlowGfwTask {
674717
registry.fill(HIST("globalTracks_multV0A_Aft"), collision.multFV0A(), tracks.size());
675718
registry.fill(HIST("multV0A_multT0A_Aft"), collision.multFT0A(), collision.multFV0A());
676719
registry.fill(HIST("multT0C_centT0C_Aft"), collision.centFT0C(), collision.multFT0C());
720+
registry.fill(HIST("multT0A_centT0A_Aft"), collision.centFT0A(), collision.multFT0A());
721+
registry.fill(HIST("multFT0M_centFT0M_Aft"), collision.centFT0M(), collision.multFT0M());
677722

678-
// FT0 amplitude to use in fine binning
679-
double ft0aAmp = 0;
680-
double ft0cAmp = 0;
723+
const auto& foundBC = collision.foundBC_as<BCsRun3>();
724+
if (foundBC.has_zdc()) {
725+
registry.fill(HIST("hEventCounterForZDC"), 1);
681726

682-
if (collision.has_foundFT0()) {
683-
auto ft0 = collision.foundFT0();
684-
for (const auto& amplitude : ft0.amplitudeA()) {
685-
ft0aAmp += amplitude;
686-
}
687-
for (const auto& amplitude : ft0.amplitudeC()) {
688-
ft0cAmp += amplitude;
689-
}
690-
}
727+
// FT0 amplitude to use in fine binning
728+
double ft0aAmp = 0;
729+
double ft0cAmp = 0;
691730

692-
registry.fill(HIST("FT0AAmp"), ft0aAmp);
693-
registry.fill(HIST("FT0CAmp"), ft0cAmp);
731+
if (collision.has_foundFT0()) {
732+
auto ft0 = collision.foundFT0();
733+
for (const auto& amplitude : ft0.amplitudeA()) {
734+
ft0aAmp += amplitude;
735+
}
736+
for (const auto& amplitude : ft0.amplitudeC()) {
737+
ft0cAmp += amplitude;
738+
}
739+
} else {
740+
ft0aAmp = ft0cAmp = -999;
741+
}
694742

695-
double ft0mAmp = ft0aAmp + ft0cAmp;
696-
registry.fill(HIST("FT0MAmp"), ft0mAmp);
743+
registry.fill(HIST("FT0AAmp"), ft0aAmp);
744+
registry.fill(HIST("FT0CAmp"), ft0cAmp);
745+
746+
double ft0mAmp = ft0aAmp + ft0cAmp;
747+
registry.fill(HIST("FT0MAmp"), ft0mAmp);
748+
749+
// ZDC amplitude to use in fine binning
750+
const auto& zdcread = foundBC.zdc();
751+
auto aZNA = zdcread.amplitudeZNA();
752+
auto aZNC = zdcread.amplitudeZNC();
753+
auto aZPA = zdcread.amplitudeZPA();
754+
auto aZPC = zdcread.amplitudeZPC();
755+
auto aZEM1 = zdcread.amplitudeZEM1();
756+
auto aZEM2 = zdcread.amplitudeZEM2();
757+
758+
registry.fill(HIST("ZNAcoll"), aZNA);
759+
registry.fill(HIST("ZNCcoll"), aZNC);
760+
registry.fill(HIST("ZPAcoll"), aZPA);
761+
registry.fill(HIST("ZPCcoll"), aZPC);
762+
763+
double aZDC = aZNC + aZNA + aZPA + aZPC;
764+
registry.fill(HIST("ZNvsFT0correl"), (ft0aAmp + ft0aAmp) / 100., aZNC + aZNA);
765+
registry.fill(HIST("ZDCAmp"), aZDC);
766+
767+
registry.fill(HIST("ZNvsZEMcoll"), aZEM1 + aZEM2, aZNA + aZNC);
768+
769+
if (centrality >= 0 && centrality <= 5) {
770+
registry.fill(HIST("ZNvsZEMcoll05"), aZEM1 + aZEM2, aZNA + aZNC);
771+
} else if (centrality > 5 && centrality <= 10) {
772+
registry.fill(HIST("ZNvsZEMcoll510"), aZEM1 + aZEM2, aZNA + aZNC);
773+
} else if (centrality > 10 && centrality <= 20) {
774+
registry.fill(HIST("ZNvsZEMcoll1020"), aZEM1 + aZEM2, aZNA + aZNC);
775+
} else if (centrality > 20 && centrality <= 30) {
776+
registry.fill(HIST("ZNvsZEMcoll2030"), aZEM1 + aZEM2, aZNA + aZNC);
777+
} else {
778+
registry.fill(HIST("ZNvsZEMcollrest"), aZEM1 + aZEM2, aZNA + aZNC);
779+
}
780+
} // End of ZDC
697781

698782
// track weights
699783
float weff = 1, wacc = 1;
@@ -708,7 +792,6 @@ struct FlowGfwTask {
708792
int globalTracksNch = 0;
709793

710794
for (const auto& track : tracks) {
711-
712795
if (!trackSelected(track))
713796
continue;
714797

0 commit comments

Comments
 (0)