Skip to content

Commit b4babb9

Browse files
authored
Add MC process functions
1 parent 31b623e commit b4babb9

File tree

1 file changed

+114
-12
lines changed

1 file changed

+114
-12
lines changed

PWGCF/TwoParticleCorrelations/Tasks/longrangecorrDerived.cxx

Lines changed: 114 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ struct LongrangecorrDerived {
6060
Configurable<int> cfgV0Mask{"cfgV0Mask", 0, "Selection bitmask for the V0 particle"};
6161
Configurable<float> cfgVtxCut{"cfgVtxCut", 10.0f, "Vertex Z range to consider"};
6262
Configurable<bool> isUseCentEst{"isUseCentEst", false, "Centrality based classification"};
63+
Configurable<int> isUseDataLikeMult{"isUseDataLikeMult", 0, "Data like mult/cent classification"};
6364

6465
Configurable<float> cfgFv0Cut{"cfgFv0Cut", 50.0f, "FV0A threshold"};
6566
Configurable<float> cfgFt0aCut{"cfgFt0aCut", 100.0f, "FT0A threshold"};
@@ -100,6 +101,12 @@ struct LongrangecorrDerived {
100101
using MftbestTrksTable = aod::LRMftBestTracks;
101102
using V0TrksTable = aod::LRV0Tracks;
102103

104+
using McCollsTable = aod::LRMcCollisions;
105+
using McTrksTable = aod::LRMidMcTracks;
106+
using McMftTrksTable = aod::LRMftMcTracks;
107+
using McFt0aTrksTable = aod::LRFt0aMcTracks;
108+
using McFt0cTrksTable = aod::LRFt0cMcTracks;
109+
103110
using UpcCollsTable = soa::Join<aod::UpcLRCollisions, aod::UpcSgLRCollisions, aod::LRZdcs>;
104111
using TrksUpcTable = aod::UpcLRMidTracks;
105112
using MftTrksUpcTable = aod::UpcLRMftTracks;
@@ -122,6 +129,11 @@ struct LongrangecorrDerived {
122129
Preslice<Ft0cTrksUpcTable> perUpcColFt0c = aod::lrcorrtrktable::upcLRCollisionId;
123130
Preslice<V0TrksUpcTable> perUpcColV0 = aod::lrcorrtrktable::upcLRCollisionId;
124131

132+
Preslice<McTrksTable> perMcColTpc = aod::lrcorrmctrktable::lrMcCollisionId;
133+
Preslice<McMftTrksTable> perMcColMft = aod::lrcorrmctrktable::lrMcCollisionId;
134+
Preslice<McFt0aTrksTable> perMcColFt0a = aod::lrcorrmctrktable::lrMcCollisionId;
135+
Preslice<McFt0cTrksTable> perMcColFt0c = aod::lrcorrmctrktable::lrMcCollisionId;
136+
125137
void init(InitContext const&)
126138
{
127139
std::vector<AxisSpec> corrAxis = {{axisVtxZ, "z-vtx (cm)"},
@@ -170,7 +182,7 @@ struct LongrangecorrDerived {
170182
if constexpr (std::experimental::is_detected<HasCent, TCollision>::value) {
171183
histos.fill(HIST("hCentrality"), col.centrality());
172184
}
173-
histos.fill(HIST("hVertexZ"), col.zvtx());
185+
histos.fill(HIST("hVertexZ"), col.posZ());
174186
}
175187

176188
template <typename TTrack>
@@ -273,7 +285,7 @@ struct LongrangecorrDerived {
273285
template <typename TCollision, typename TTriggers, typename TAssocs>
274286
void processSame(TCollision const& col, TTriggers const& triggers, TAssocs const& assocs)
275287
{
276-
if (std::abs(col.zvtx()) >= cfgVtxCut) {
288+
if (std::abs(col.posZ()) >= cfgVtxCut) {
277289
return;
278290
}
279291
fillCollQA(col);
@@ -286,7 +298,7 @@ struct LongrangecorrDerived {
286298
} else {
287299
multiplicity = col.multiplicity();
288300
}
289-
fillCorrHist<CorrelationContainer::kCFStepReconstructed>(same, triggers, assocs, false, col.zvtx(), multiplicity, 1.0);
301+
fillCorrHist<CorrelationContainer::kCFStepReconstructed>(same, triggers, assocs, false, col.posZ(), multiplicity, 1.0);
290302
} // process same
291303

292304
template <typename TCollision, typename... TrackTypes>
@@ -311,7 +323,7 @@ struct LongrangecorrDerived {
311323
}
312324
return multiplicity;
313325
};
314-
using MixedBinning = FlexibleBinningPolicy<std::tuple<decltype(getMultiplicity)>, aod::lrcorrcolltable::Zvtx, decltype(getMultiplicity)>;
326+
using MixedBinning = FlexibleBinningPolicy<std::tuple<decltype(getMultiplicity)>, aod::collision::PosZ, decltype(getMultiplicity)>;
315327
MixedBinning binningOnVtxAndMult{{getMultiplicity}, {axisVtxZME, axisMultME}, true};
316328
auto tracksTuple = std::make_tuple(std::forward<TrackTypes>(tracks)...);
317329
using TupleAtrack = std::tuple_element<0, decltype(tracksTuple)>::type;
@@ -325,18 +337,60 @@ struct LongrangecorrDerived {
325337
}
326338
}
327339
float eventweight = 1.0f / it.currentWindowNeighbours();
328-
auto multiplicity = 1.0f;
329-
if constexpr (std::experimental::is_detected<HasCent, TCollision>::value) {
340+
auto multiplicity = getMultiplicity(col1);
341+
fillCorrHist<CorrelationContainer::kCFStepReconstructed>(mixed, tracks1, tracks2, true, col1.posZ(), multiplicity, eventweight);
342+
} // pair loop
343+
} // process mixed
344+
345+
template <typename TTriggers, typename TAssocs>
346+
void processMcSame(McCollsTable::iterator const& mccollision, soa::SmallGroups<aod::LRCollisionsWithLabel> const& collisions, TTriggers const& triggers, TAssocs const& assocs)
347+
{
348+
if (std::abs(mccollision.posZ()) >= cfgVtxCut) {
349+
return;
350+
}
351+
fillCollQA(mccollision);
352+
auto multiplicity = mccollision.multiplicity();
353+
if (isUseDataLikeMult > 0) {
354+
for (const auto& collision : collisions) {
330355
if (isUseCentEst)
331-
multiplicity = col1.centrality();
356+
multiplicity = collision.centrality();
332357
else
333-
multiplicity = col1.multiplicity();
334-
} else {
335-
multiplicity = col1.multiplicity();
358+
multiplicity = collision.multiplicity();
336359
}
337-
fillCorrHist<CorrelationContainer::kCFStepReconstructed>(mixed, tracks1, tracks2, true, col1.zvtx(), multiplicity, eventweight);
360+
}
361+
fillCorrHist<CorrelationContainer::kCFStepAll>(same, triggers, assocs, false, mccollision.posZ(), multiplicity, 1.0);
362+
} // process MC same
363+
364+
template <typename... TrackTypes>
365+
void processMcMixed(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, TrackTypes&&... tracks)
366+
{
367+
bool useMCMultiplicity = (isUseDataLikeMult == 0);
368+
auto getMultiplicity =
369+
[&collisions, &useMCMultiplicity, this](auto& col) {
370+
if (useMCMultiplicity)
371+
return col.multiplicity();
372+
auto groupedCollisions = collisions.sliceByCached(aod::lrcorrcolltable::lrMcCollisionId, col.globalIndex(), this->cache);
373+
if (groupedCollisions.size() == 0)
374+
return -1.0f;
375+
if (isUseCentEst)
376+
return groupedCollisions.begin().centrality();
377+
else
378+
return groupedCollisions.begin().multiplicity();
379+
};
380+
381+
using MixedBinning = FlexibleBinningPolicy<std::tuple<decltype(getMultiplicity)>, aod::mccollision::PosZ, decltype(getMultiplicity)>;
382+
MixedBinning binningOnVtxAndMult{{getMultiplicity}, {axisVtxZME, axisMultME}, true};
383+
auto tracksTuple = std::make_tuple(std::forward<TrackTypes>(tracks)...);
384+
using TupleAtrack = std::tuple_element<0, decltype(tracksTuple)>::type;
385+
using TupleBtrack = std::tuple_element<std::tuple_size_v<decltype(tracksTuple)> - 1, decltype(tracksTuple)>::type;
386+
Pair<McCollsTable, TupleAtrack, TupleBtrack, MixedBinning> pairs{binningOnVtxAndMult, cfgNmixedevent, -1, mccollisions, tracksTuple, &cache};
387+
for (auto it = pairs.begin(); it != pairs.end(); it++) {
388+
auto& [col1, tracks1, col2, tracks2] = *it;
389+
float eventweight = 1.0f / it.currentWindowNeighbours();
390+
auto multiplicity = getMultiplicity(col1);
391+
fillCorrHist<CorrelationContainer::kCFStepAll>(mixed, tracks1, tracks2, true, col1.posZ(), multiplicity, eventweight);
338392
} // pair loop
339-
} // process mixed
393+
} // process MC mixed
340394

341395
void processTpcft0aSE(CollsTable::iterator const& col, TrksTable const& tracks, Ft0aTrksTable const& ft0as)
342396
{
@@ -545,6 +599,46 @@ struct LongrangecorrDerived {
545599
processMixed(cols, tracks, mfts);
546600
}
547601

602+
void processMcTpcft0aSE(McCollsTable::iterator const& mccollision, soa::SmallGroups<aod::LRCollisionsWithLabel> const& collisions, McTrksTable const& tracks, McFt0aTrksTable const& ft0as)
603+
{
604+
processMcSame(mccollision, collisions, tracks, ft0as);
605+
}
606+
607+
void processMcTpcft0cSE(McCollsTable::iterator const& mccollision, soa::SmallGroups<aod::LRCollisionsWithLabel> const& collisions, McTrksTable const& tracks, McFt0cTrksTable const& ft0cs)
608+
{
609+
processMcSame(mccollision, collisions, tracks, ft0cs);
610+
}
611+
612+
void processMcTpcmftSE(McCollsTable::iterator const& mccollision, soa::SmallGroups<aod::LRCollisionsWithLabel> const& collisions, McTrksTable const& tracks, McMftTrksTable const& mfts)
613+
{
614+
processMcSame(mccollision, collisions, tracks, mfts);
615+
}
616+
617+
void processMcMftft0aSE(McCollsTable::iterator const& mccollision, soa::SmallGroups<aod::LRCollisionsWithLabel> const& collisions, McMftTrksTable const& mfts, McFt0aTrksTable const& ft0as)
618+
{
619+
processMcSame(mccollision, collisions, mfts, ft0as);
620+
}
621+
622+
void processMcTpcft0aME(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, McTrksTable const& tracks, McFt0aTrksTable const& ft0as)
623+
{
624+
processMcMixed(mccollisions, collisions, tracks, ft0as);
625+
}
626+
627+
void processMcTpcft0cME(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, McTrksTable const& tracks, McFt0cTrksTable const& ft0cs)
628+
{
629+
processMcMixed(mccollisions, collisions, tracks, ft0cs);
630+
}
631+
632+
void processMcTpcmftME(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, McTrksTable const& tracks, McMftTrksTable const& mfts)
633+
{
634+
processMcMixed(mccollisions, collisions, tracks, mfts);
635+
}
636+
637+
void processMcMftft0aME(McCollsTable const& mccollisions, aod::LRCollisionsWithLabel const& collisions, McMftTrksTable const& mfts, McFt0aTrksTable const& ft0as)
638+
{
639+
processMcMixed(mccollisions, collisions, mfts, ft0as);
640+
}
641+
548642
PROCESS_SWITCH(LongrangecorrDerived, processTpcft0aSE, "same event TPC vs FT0A", false);
549643
PROCESS_SWITCH(LongrangecorrDerived, processTpcft0aME, "mixed event TPC vs FT0A", false);
550644
PROCESS_SWITCH(LongrangecorrDerived, processTpcft0cSE, "same event TPC vs FT0C", false);
@@ -581,6 +675,14 @@ struct LongrangecorrDerived {
581675
PROCESS_SWITCH(LongrangecorrDerived, processUpcMftbestft0aME, "mixed UPC event best MFT vs FT0A", false);
582676
PROCESS_SWITCH(LongrangecorrDerived, processUpcV0mftbestSE, "same UPC event V0 vs best MFT", false);
583677
PROCESS_SWITCH(LongrangecorrDerived, processUpcV0mftbestME, "mixed UPC event V0 vs best MFT", false);
678+
PROCESS_SWITCH(LongrangecorrDerived, processMcTpcft0aSE, "same MC event TPC vs FT0A", false);
679+
PROCESS_SWITCH(LongrangecorrDerived, processMcTpcft0aME, "mixed MC event TPC vs FT0A", false);
680+
PROCESS_SWITCH(LongrangecorrDerived, processMcTpcft0cSE, "same MC event TPC vs FT0C", false);
681+
PROCESS_SWITCH(LongrangecorrDerived, processMcTpcft0cME, "mixed MC event TPC vs FT0C", false);
682+
PROCESS_SWITCH(LongrangecorrDerived, processMcTpcmftSE, "same MC event TPC vs MFT", false);
683+
PROCESS_SWITCH(LongrangecorrDerived, processMcTpcmftME, "mixed MC event TPC vs MFT", false);
684+
PROCESS_SWITCH(LongrangecorrDerived, processMcMftft0aSE, "same MC event MFT vs FT0A", false);
685+
PROCESS_SWITCH(LongrangecorrDerived, processMcMftft0aME, "mixed MC event MFT vs FT0A", false);
584686
};
585687

586688
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)