Skip to content

Commit 8e59519

Browse files
abmodakalibuild
andauthored
[PWGLF] Add event and signal loss corrections (#12669)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 55810ad commit 8e59519

File tree

1 file changed

+83
-8
lines changed

1 file changed

+83
-8
lines changed

PWGLF/Tasks/GlobalEventProperties/heavyionMultiplicity.cxx

Lines changed: 83 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ struct HeavyionMultiplicity {
147147
ConfigurableAxis centralityBinning{"centralityBinning", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}, ""};
148148
ConfigurableAxis occupancyBin{"occupancyBin", {VARIABLE_WIDTH, 0, 500, 1000, 2000, 5000, 10000}, ""};
149149
ConfigurableAxis centBinGen{"centBinGen", {VARIABLE_WIDTH, 0, 500, 1000, 2000, 5000, 10000}, ""};
150+
ConfigurableAxis binsImpactPar{"binsImpactPar", {VARIABLE_WIDTH, 0.0, 3.00065, 4.28798, 6.14552, 7.6196, 8.90942, 10.0897, 11.2002, 12.2709, 13.3167, 14.4173, 23.2518}, "Binning of the impact parameter axis"};
150151

151152
Configurable<bool> isApplySameBunchPileup{"isApplySameBunchPileup", true, "Enable SameBunchPileup cut"};
152153
Configurable<bool> isApplyGoodZvtxFT0vsPV{"isApplyGoodZvtxFT0vsPV", true, "Enable GoodZvtxFT0vsPV cut"};
@@ -178,6 +179,7 @@ struct HeavyionMultiplicity {
178179
AxisSpec axisPt = {ptHistBin, "pT", "pTAxis"};
179180
AxisSpec axisOccupancy = {occupancyBin, "occupancy", "OccupancyAxis"};
180181
AxisSpec axisCentBinGen = {centBinGen, "GenCentrality", "CentGenAxis"};
182+
AxisSpec impactParAxis = {binsImpactPar, "Impact Parameter"};
181183

182184
histos.add("EventHist", "EventHist", kTH1D, {axisEvent}, false);
183185
histos.add("VtxZHist", "VtxZHist", kTH1D, {axisVtxZ}, false);
@@ -269,6 +271,21 @@ struct HeavyionMultiplicity {
269271
histos.add("mult10_vs_FT0C", "mult10_vs_FT0C", kTH2F, {axisMult, axisCentBinGen}, true);
270272
histos.add("mult10_vs_FT0A", "mult10_vs_FT0A", kTH2F, {axisMult, axisCentBinGen}, true);
271273
}
274+
275+
if (doprocessEvtLossSigLossMC) {
276+
histos.add("MCEventHist", "MCEventHist", kTH1F, {axisEvent}, false);
277+
auto hstat = histos.get<TH1>(HIST("MCEventHist"));
278+
auto* x = hstat->GetXaxis();
279+
x->SetBinLabel(1, "All MC events");
280+
x->SetBinLabel(2, "MC events with atleast one reco event");
281+
histos.add("hImpactParameterGen", "Impact parameter of generated MC events", kTH1F, {impactParAxis});
282+
histos.add("hImpactParameterRec", "Impact parameter of selected MC events", kTH1F, {impactParAxis});
283+
histos.add("hImpactParvsCentrRec", "Impact parameter of selected MC events vs centrality", kTH2F, {axisCent, impactParAxis});
284+
histos.add("hgendndetaBeforeEvtSel", "Eta of all generated particles", kTH1F, {axisEta});
285+
histos.add("hgendndetaAfterEvtSel", "Eta of generated particles after EvtSel", kTH1F, {axisEta});
286+
histos.add("hgendndetaVscentBeforeEvtSel", "hgendndetaBeforeEvtSel vs centrality", kTH2F, {axisEta, impactParAxis});
287+
histos.add("hgendndetaVscentAfterEvtSel", "hgendndetaAfterEvtSel vs centrality", kTH2F, {axisEta, impactParAxis});
288+
}
272289
}
273290

274291
template <typename CheckCol>
@@ -416,7 +433,6 @@ struct HeavyionMultiplicity {
416433
}
417434
}
418435
}
419-
PROCESS_SWITCH(HeavyionMultiplicity, processData, "process data CentFT0C", false);
420436

421437
void processCorrelation(CollisionDataTable::iterator const& cols, FilTrackDataTable const& tracks)
422438
{
@@ -441,7 +457,6 @@ struct HeavyionMultiplicity {
441457
histos.fill(HIST("GlobalMult_vs_FV0A"), nchTracks, cols.multFV0A());
442458
histos.fill(HIST("NPVtracks_vs_GlobalMult"), cols.multNTracksPV(), nchTracks);
443459
}
444-
PROCESS_SWITCH(HeavyionMultiplicity, processCorrelation, "do correlation study in data", false);
445460

446461
void processMonteCarlo(CollisionMCTrueTable::iterator const&, CollisionMCRecTable const& RecCols, TrackMCTrueTable const& GenParticles, FilTrackMCRecTable const& RecTracks)
447462
{
@@ -541,7 +556,6 @@ struct HeavyionMultiplicity {
541556
} // track (mcgen) loop
542557
} // collision loop
543558
}
544-
PROCESS_SWITCH(HeavyionMultiplicity, processMonteCarlo, "process MC CentFT0C", false);
545559

546560
void processMCpTefficiency(CollisionMCTrueTable::iterator const&, CollisionMCRecTable const& RecCols, TrackMCTrueTable const& GenParticles, FilTrackMCRecTable const& RecTracks)
547561
{
@@ -589,7 +603,6 @@ struct HeavyionMultiplicity {
589603
}
590604
}
591605
}
592-
PROCESS_SWITCH(HeavyionMultiplicity, processMCpTefficiency, "process MC pTefficiency", false);
593606

594607
void processMCcheckFakeTracks(CollisionMCTrueTable::iterator const&, CollisionMCRecTable const& RecCols, FilTrackMCRecTable const& RecTracks)
595608
{
@@ -628,7 +641,6 @@ struct HeavyionMultiplicity {
628641
}
629642
}
630643
}
631-
PROCESS_SWITCH(HeavyionMultiplicity, processMCcheckFakeTracks, "Check Fake tracks", false);
632644

633645
void processStrangeYield(CollisionDataTable::iterator const& cols, V0TrackCandidates const&, aod::V0Datas const& v0data)
634646
{
@@ -671,7 +683,6 @@ struct HeavyionMultiplicity {
671683
histos.fill(HIST("AntiLambdaCentEtaMass"), selColCent(cols), v0track.eta(), v0track.mAntiLambda());
672684
}
673685
}
674-
PROCESS_SWITCH(HeavyionMultiplicity, processStrangeYield, "Strange particle yield", false);
675686

676687
void processppData(ColDataTablepp::iterator const& cols, FilTrackDataTable const& tracks)
677688
{
@@ -696,7 +707,6 @@ struct HeavyionMultiplicity {
696707
}
697708
} // track loop
698709
}
699-
PROCESS_SWITCH(HeavyionMultiplicity, processppData, "process pp data", false);
700710

701711
void processppMonteCarlo(CollisionMCTrueTable::iterator const&, ColMCRecTablepp const& RecCols, TrackMCTrueTable const& GenParticles, FilTrackMCRecTable const& RecTracks)
702712
{
@@ -796,7 +806,6 @@ struct HeavyionMultiplicity {
796806
} // track (mcgen) loop
797807
} // collision loop
798808
}
799-
PROCESS_SWITCH(HeavyionMultiplicity, processppMonteCarlo, "process pp MC", false);
800809

801810
void processGen(aod::McCollisions::iterator const&, aod::McParticles const& GenParticles)
802811
{
@@ -836,7 +845,73 @@ struct HeavyionMultiplicity {
836845
histos.fill(HIST("dndeta10_vs_FT0C"), particle.eta(), multFT0C);
837846
}
838847
}
848+
849+
void processEvtLossSigLossMC(soa::Join<CollisionMCTrueTable, aod::MultMCExtras>::iterator const& mcCollision, CollisionMCRecTable const& RecCols, TrackMCTrueTable const& GenParticles)
850+
{
851+
if (isApplyInelgt0 && !mcCollision.isInelGt0()) {
852+
return;
853+
}
854+
if (std::abs(mcCollision.posZ()) >= vtxRange) {
855+
return;
856+
}
857+
// All generated events
858+
histos.fill(HIST("MCEventHist"), 1);
859+
histos.fill(HIST("hImpactParameterGen"), mcCollision.impactParameter());
860+
861+
bool atLeastOne = false;
862+
auto centrality = -999.;
863+
auto numcontributors = -999;
864+
for (const auto& RecCol : RecCols) {
865+
if (!isEventSelected(RecCol)) {
866+
continue;
867+
}
868+
if (std::abs(RecCol.posZ()) >= vtxRange) {
869+
continue;
870+
}
871+
if (RecCol.numContrib() <= numcontributors) {
872+
continue;
873+
} else {
874+
numcontributors = RecCol.numContrib();
875+
}
876+
centrality = selColCent(RecCol);
877+
atLeastOne = true;
878+
}
879+
880+
// Generated events with at least one reconstructed collision (event loss estimation)
881+
if (atLeastOne) {
882+
histos.fill(HIST("MCEventHist"), 2);
883+
histos.fill(HIST("hImpactParameterRec"), mcCollision.impactParameter());
884+
histos.fill(HIST("hImpactParvsCentrRec"), centrality, mcCollision.impactParameter());
885+
}
886+
887+
for (const auto& particle : GenParticles) {
888+
889+
if (!isGenTrackSelected(particle)) {
890+
continue;
891+
}
892+
893+
// All generated particles
894+
histos.fill(HIST("hgendndetaBeforeEvtSel"), particle.eta());
895+
histos.fill(HIST("hgendndetaVscentBeforeEvtSel"), particle.eta(), mcCollision.impactParameter());
896+
897+
if (atLeastOne) {
898+
// All generated particles with at least one reconstructed collision (signal loss estimation)
899+
histos.fill(HIST("hgendndetaAfterEvtSel"), particle.eta());
900+
histos.fill(HIST("hgendndetaVscentAfterEvtSel"), particle.eta(), mcCollision.impactParameter());
901+
}
902+
}
903+
}
904+
905+
PROCESS_SWITCH(HeavyionMultiplicity, processData, "process data CentFT0C", false);
906+
PROCESS_SWITCH(HeavyionMultiplicity, processCorrelation, "do correlation study in data", false);
907+
PROCESS_SWITCH(HeavyionMultiplicity, processMonteCarlo, "process MC CentFT0C", false);
908+
PROCESS_SWITCH(HeavyionMultiplicity, processMCpTefficiency, "process MC pTefficiency", false);
909+
PROCESS_SWITCH(HeavyionMultiplicity, processMCcheckFakeTracks, "Check Fake tracks", false);
910+
PROCESS_SWITCH(HeavyionMultiplicity, processStrangeYield, "Strange particle yield", false);
911+
PROCESS_SWITCH(HeavyionMultiplicity, processppData, "process pp data", false);
912+
PROCESS_SWITCH(HeavyionMultiplicity, processppMonteCarlo, "process pp MC", false);
839913
PROCESS_SWITCH(HeavyionMultiplicity, processGen, "process pure MC gen", false);
914+
PROCESS_SWITCH(HeavyionMultiplicity, processEvtLossSigLossMC, "process Signal Loss, Event Loss", false);
840915
};
841916

842917
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)