Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 28 additions & 3 deletions PWGLF/TableProducer/hStrangeCorrelationFilter.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ struct hstrangecorrelationfilter {
fOmegaWidth->SetParameters(omegaWidthAngular, omegaWidthLinear);
}

void process(soa::Join<aod::Collisions, aod::EvSels, aod::Mults>::iterator const& collision, DauTracks const& tracks, soa::Filtered<aod::V0Datas> const& V0s, soa::Filtered<aod::CascDatas> const& Cascades, aod::V0sLinked const&)
void processTriggers(soa::Join<aod::Collisions, aod::EvSels, aod::Mults>::iterator const& collision, DauTracks const& tracks)
{
// Perform basic event selection
if (!collision.sel8()) {
Expand Down Expand Up @@ -190,9 +190,20 @@ struct hstrangecorrelationfilter {
registry.fill(HIST("hTrackSign"), track.sign());
registry.fill(HIST("hID"), track.collisionId());
}
}

void processV0s(soa::Join<aod::Collisions, aod::EvSels, aod::Mults>::iterator const& collision, DauTracks const& tracks, soa::Filtered<aod::V0Datas> const& V0s, aod::V0sLinked const&)
{
// Perform basic event selection
if (!collision.sel8()) {
return;
}
// No need to correlate stuff that's in far collisions
if (TMath::Abs(collision.posZ()) > 10.0) {
return;
}
/// _________________________________________________
/// Step 2: Populate table with associated V0s
/// Populate table with associated V0s
for (auto const& v0 : V0s) {
if (v0.v0radius() < v0RadiusMin || v0.v0radius() > v0RadiusMax || v0.eta() > assocEtaMax || v0.eta() < assocEtaMin || v0.v0cosPA(collision.posX(), collision.posY(), collision.posZ()) < v0Cospa) {
continue;
Expand Down Expand Up @@ -282,7 +293,17 @@ struct hstrangecorrelationfilter {
}
assocV0(v0.collisionId(), v0.globalIndex(), compatibleK0Short, compatibleLambda, compatibleAntiLambda, massRegK0Short, massRegLambda, massRegAntiLambda);
}

}
void processCascades(soa::Join<aod::Collisions, aod::EvSels, aod::Mults>::iterator const& collision, DauTracks const& tracks, soa::Filtered<aod::V0Datas> const& V0s, soa::Filtered<aod::CascDatas> const& Cascades, aod::V0sLinked const&)
{
// Perform basic event selection
if (!collision.sel8()) {
return;
}
// No need to correlate stuff that's in far collisions
if (TMath::Abs(collision.posZ()) > 10.0) {
return;
}
/// _________________________________________________
/// Step 3: Populate table with associated Cascades
for (auto const& casc : Cascades) {
Expand Down Expand Up @@ -362,6 +383,10 @@ struct hstrangecorrelationfilter {
assocCascades(casc.collisionId(), casc.globalIndex(), compatibleXiMinus, compatibleXiPlus, compatibleOmegaMinus, compatibleOmegaPlus, massRegXi, massRegOmega);
}
}

PROCESS_SWITCH(hstrangecorrelationfilter, processTriggers, "Produce trigger tables", true);
PROCESS_SWITCH(hstrangecorrelationfilter, processV0s, "Produce associated V0 tables", true);
PROCESS_SWITCH(hstrangecorrelationfilter, processCascades, "Produce associated cascade tables", true);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down
94 changes: 71 additions & 23 deletions PWGLF/Tasks/hStrangeCorrelation.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ struct correlateStrangeness {
histos.addClone("sameEvent/Signal/", "sameEvent/RightBg/");

// mixed-event correlation functions
if (doprocessSameEvent) {
if (doprocessMixedEventHV0s || doprocessMixedEventHCascades) {
histos.addClone("sameEvent/", "mixedEvent/");
}

Expand Down Expand Up @@ -261,9 +261,9 @@ struct correlateStrangeness {
histos.add("EventQA/hPvz", ";pvz;Entries", kTH1F, {{30, -15, 15}});
}
BinningType colBinning{{ConfVtxBins, ConfMultBins}, true}; // true is for 'ignore overflows' (true by default). Underflows and overflows will have bin -1.
void processSameEvent(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const& collision,
aod::AssocV0s const& associatedV0s, aod::AssocCascades const& associatedCascades, aod::TriggerTracks const& triggerTracks,
aod::V0Datas const&, aod::V0sLinked const&, aod::CascDatas const&, TracksComplete const&)
void processSameEventHV0s(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const& collision,
aod::AssocV0s const& associatedV0s, aod::TriggerTracks const& triggerTracks,
aod::V0Datas const&, aod::V0sLinked const&, TracksComplete const&)
{
// ________________________________________________
// Perform basic event selection
Expand All @@ -274,9 +274,11 @@ struct correlateStrangeness {
return;
}
// ________________________________________________
histos.fill(HIST("MixingQA/hSECollisionBins"), colBinning.getBin({collision.posZ(), collision.centFT0M()}));
histos.fill(HIST("EventQA/hMult"), collision.centFT0M());
histos.fill(HIST("EventQA/hPvz"), collision.posZ());
if (!doprocessSameEventHCascades) {
histos.fill(HIST("MixingQA/hSECollisionBins"), colBinning.getBin({collision.posZ(), collision.centFT0M()}));
histos.fill(HIST("EventQA/hMult"), collision.centFT0M());
histos.fill(HIST("EventQA/hPvz"), collision.posZ());
}
// Do basic QA
for (auto const& v0 : associatedV0s) {
auto v0Data = v0.v0Data();
Expand All @@ -287,6 +289,34 @@ struct correlateStrangeness {
histos.fill(HIST("h2dMass") + HIST(v0names[index]), v0Data.pt(), v0Data.m(index));
});
}
if (!doprocessSameEventHCascades) {
for (auto const& triggerTrack : triggerTracks) {
auto track = triggerTrack.track_as<TracksComplete>();
histos.fill(HIST("hTrackEtaVsPt"), track.pt(), track.eta());
}
}

// ________________________________________________
// Do hadron - V0 correlations
fillCorrelationsV0(triggerTracks, associatedV0s, false, collision.posZ(), collision.centFT0M());
}
void processSameEventHCascades(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>::iterator const& collision,
aod::AssocV0s const& associatedV0s, aod::AssocCascades const& associatedCascades, aod::TriggerTracks const& triggerTracks,
aod::V0Datas const&, aod::V0sLinked const&, aod::CascDatas const&, TracksComplete const&)
{
// ________________________________________________
// Perform basic event selection
if (!collision.sel8()) {
return;
}
if (TMath::Abs(collision.posZ()) > zVertexCut) {
return;
}
// ________________________________________________
histos.fill(HIST("MixingQA/hSECollisionBins"), colBinning.getBin({collision.posZ(), collision.centFT0M()}));
histos.fill(HIST("EventQA/hMult"), collision.centFT0M());
histos.fill(HIST("EventQA/hPvz"), collision.posZ());
// Do basic QA
for (auto const& casc : associatedCascades) {
auto cascData = casc.cascData();
histos.fill(HIST("hCascEtaVsPt"), cascData.pt(), cascData.eta());
Expand All @@ -301,19 +331,39 @@ struct correlateStrangeness {
histos.fill(HIST("hTrackEtaVsPt"), track.pt(), track.eta());
}

// ________________________________________________
// Do hadron - V0 correlations
fillCorrelationsV0(triggerTracks, associatedV0s, false, collision.posZ(), collision.centFT0M());

// ________________________________________________
// Do hadron - cascade correlations
fillCorrelationsCascade(triggerTracks, associatedCascades, false, collision.posZ(), collision.centFT0M());
}
PROCESS_SWITCH(correlateStrangeness, processSameEvent, "Process same events", true);

void processMixedEvent(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms> const& collisions,
aod::AssocV0s const& associatedV0s, aod::AssocCascades const& associatedCascades, aod::TriggerTracks const& triggerTracks,
aod::V0Datas const&, aod::V0sLinked const&, aod::CascDatas const&, TracksComplete const&)
void processMixedEventHV0s(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms> const& collisions,
aod::AssocV0s const& associatedV0s, aod::TriggerTracks const& triggerTracks,
aod::V0Datas const&, aod::V0sLinked const&, TracksComplete const&)
{
for (auto& [collision1, collision2] : soa::selfCombinations(colBinning, 5, -1, collisions, collisions)) {
// ________________________________________________
// Perform basic event selection on both collisions
if (!collision1.sel8() || !collision2.sel8())
continue;
if (!doprocessMixedEventHCascades) {
if (collision1.globalIndex() == collision2.globalIndex()) {
histos.fill(HIST("MixingQA/hMixingQA"), 0.0f); // same-collision pair counting
}
histos.fill(HIST("MixingQA/hMEpvz1"), collision1.posZ());
histos.fill(HIST("MixingQA/hMEpvz2"), collision2.posZ());
histos.fill(HIST("MixingQA/hMECollisionBins"), colBinning.getBin({collision1.posZ(), collision1.centFT0M()}));
}
// ________________________________________________
// Do slicing
auto slicedTriggerTracks = triggerTracks.sliceBy(collisionSliceTracks, collision1.globalIndex());
auto slicedAssocV0s = associatedV0s.sliceBy(collisionSliceV0s, collision2.globalIndex());
// ________________________________________________
// Do hadron - V0 correlations
fillCorrelationsV0(slicedTriggerTracks, slicedAssocV0s, true, collision1.posZ(), collision1.centFT0M());
}
}
void processMixedEventHCascades(soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms> const& collisions,
aod::AssocV0s const& associatedV0s, aod::AssocCascades const& associatedCascades, aod::TriggerTracks const& triggerTracks,
aod::V0Datas const&, aod::V0sLinked const&, aod::CascDatas const&, TracksComplete const&)
{
for (auto& [collision1, collision2] : soa::selfCombinations(colBinning, 5, -1, collisions, collisions)) {
// ________________________________________________
Expand All @@ -331,19 +381,17 @@ struct correlateStrangeness {
// ________________________________________________
// Do slicing
auto slicedTriggerTracks = triggerTracks.sliceBy(collisionSliceTracks, collision1.globalIndex());
auto slicedAssocV0s = associatedV0s.sliceBy(collisionSliceV0s, collision2.globalIndex());
auto slicedAssocCascades = associatedCascades.sliceBy(collisionSliceCascades, collision2.globalIndex());

// ________________________________________________
// Do hadron - V0 correlations
fillCorrelationsV0(slicedTriggerTracks, slicedAssocV0s, true, collision1.posZ(), collision1.centFT0M());

// ________________________________________________
// Do hadron - cascade correlations
fillCorrelationsCascade(slicedTriggerTracks, slicedAssocCascades, true, collision1.posZ(), collision1.centFT0M());
}
}
PROCESS_SWITCH(correlateStrangeness, processMixedEvent, "Process mixed events", true);

PROCESS_SWITCH(correlateStrangeness, processSameEventHV0s, "Process same events, h-V0s", true);
PROCESS_SWITCH(correlateStrangeness, processSameEventHCascades, "Process same events, h-Cascades", true);
PROCESS_SWITCH(correlateStrangeness, processMixedEventHV0s, "Process mixed events, h-V0s", true);
PROCESS_SWITCH(correlateStrangeness, processMixedEventHCascades, "Process mixed events, h-Cascades", true);
};

WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
Expand Down