Skip to content

Commit a82b9b1

Browse files
authored
Event mixing: Update binning policy, add example for binning with lambda (#973)
1 parent e6a6ace commit a82b9b1

6 files changed

Lines changed: 57 additions & 18 deletions

File tree

PWGCF/FemtoDream/femtoDreamPairTaskTrackTrack.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ struct femtoDreamPairTaskTrackTrack {
9494
ConfigurableAxis CfgMultBins{"CfgMultBins", {VARIABLE_WIDTH, 0.0f, 20.0f, 40.0f, 60.0f, 80.0f, 100.0f, 200.0f, 99999.f}, "Mixing bins - multiplicity"};
9595
ConfigurableAxis CfgVtxBins{"CfgVtxBins", {VARIABLE_WIDTH, -10.0f, -8.f, -6.f, -4.f, -2.f, 0.f, 2.f, 4.f, 6.f, 8.f, 10.f}, "Mixing bins - z-vertex"};
9696

97-
BinningPolicy<aod::collision::PosZ, aod::femtodreamcollision::MultV0M> colBinning{{CfgVtxBins, CfgMultBins}, true};
97+
ColumnBinningPolicy<aod::collision::PosZ, aod::femtodreamcollision::MultV0M> colBinning{{CfgVtxBins, CfgMultBins}, true};
9898

9999
ConfigurableAxis CfgkstarBins{"CfgkstarBins", {1500, 0., 6.}, "binning kstar"};
100100
ConfigurableAxis CfgkTBins{"CfgkTBins", {150, 0., 9.}, "binning kT"};

PWGCF/FemtoDream/femtoDreamPairTaskTrackV0.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ struct femtoDreamPairTaskTrackV0 {
186186
void processMixedEvent(o2::aod::FemtoDreamCollisions& cols,
187187
o2::aod::FemtoDreamParticles& parts)
188188
{
189-
BinningPolicy<aod::collision::PosZ, aod::femtodreamcollision::MultV0M> colBinning{{CfgVtxBins, CfgMultBins}, true};
189+
ColumnBinningPolicy<aod::collision::PosZ, aod::femtodreamcollision::MultV0M> colBinning{{CfgVtxBins, CfgMultBins}, true};
190190

191191
for (auto& [collision1, collision2] : soa::selfCombinations(colBinning, 5, -1, cols, cols)) {
192192

PWGCF/Tasks/correlations.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ struct CorrelationTask {
115115

116116
using aodCollisions = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>>;
117117
using derivedCollisions = soa::Filtered<aod::CFCollisions>;
118-
using BinningType = BinningPolicy<aod::collision::PosZ, aod::cent::CentRun2V0M>;
118+
using BinningType = ColumnBinningPolicy<aod::collision::PosZ, aod::cent::CentRun2V0M>;
119119

120120
void init(o2::framework::InitContext&)
121121
{

Tutorials/src/eventMixing.cxx

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ DECLARE_SOA_TABLE(Hashes, "AOD", "HASH", hash::Bin);
3838
struct MixedEvents {
3939
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
4040
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
41-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
41+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
4242
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
4343
SameKindPair<aod::Collisions, aod::Tracks, BinningType> pair{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
4444

@@ -68,7 +68,7 @@ struct MixedEvents {
6868
struct MixedEventsInsideProcess {
6969
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
7070
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
71-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
71+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
7272
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
7373

7474
void process(aod::Collisions& collisions, aod::Tracks& tracks)
@@ -103,7 +103,7 @@ struct MixedEventsFilteredTracks {
103103

104104
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
105105
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
106-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
106+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
107107
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
108108
SameKindPair<aod::Collisions, myTracks, BinningType> pair{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
109109

@@ -134,7 +134,7 @@ struct MixedEventsJoinedCollisions {
134134
using aodCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>;
135135
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
136136
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
137-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
137+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
138138
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
139139
SameKindPair<aodCollisions, aod::Tracks, BinningType> pair{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
140140

@@ -165,7 +165,7 @@ struct MixedEventsDynamicColumns {
165165
using aodCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::Mults>;
166166
std::vector<double> zBins{7, -7, 7};
167167
std::vector<double> multBins{VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 100.1};
168-
using BinningType = BinningPolicy<aod::collision::PosZ, aod::mult::MultFV0M<aod::mult::MultFV0A, aod::mult::MultFV0C>>;
168+
using BinningType = ColumnBinningPolicy<aod::collision::PosZ, aod::mult::MultFV0M<aod::mult::MultFV0A, aod::mult::MultFV0C>>;
169169
BinningType corrBinning{{zBins, multBins}, true}; // true is for 'ignore overflows' (true by default)
170170
SameKindPair<aodCollisions, aod::Tracks, BinningType> pair{corrBinning, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
171171

@@ -195,7 +195,7 @@ struct MixedEventsDynamicColumns {
195195
struct MixedEventsVariousKinds {
196196
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
197197
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
198-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
198+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
199199
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
200200
Pair<aod::Collisions, aod::Tracks, aod::V0s, BinningType> pair{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
201201

@@ -228,7 +228,7 @@ struct MixedEventsTriple {
228228
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
229229
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
230230
std::vector<double> zBins{7, -7, 7};
231-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY, aod::collision::PosZ>;
231+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY, aod::collision::PosZ>;
232232
BinningType binningOnPositions{{xBins, yBins, zBins}, true}; // true is for 'ignore overflows' (true by default)
233233
SameKindTriple<aod::Collisions, aod::Tracks, BinningType> triple{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
234234

@@ -259,7 +259,7 @@ struct MixedEventsTripleVariousKinds {
259259
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
260260
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
261261
std::vector<double> zBins{7, -7, 7};
262-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY, aod::collision::PosZ>;
262+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY, aod::collision::PosZ>;
263263
BinningType binningOnPositions{{xBins, yBins, zBins}, true}; // true is for 'ignore overflows' (true by default)
264264
Triple<aod::Collisions, aod::Tracks, aod::V0s, aod::Tracks, BinningType> triple{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
265265

@@ -356,7 +356,6 @@ struct MixedEventsWithHashTask {
356356
};
357357

358358
struct MixedEventsPartitionedTracks {
359-
360359
Filter trackFilter = (aod::track::x > -0.8f) && (aod::track::x < 0.8f) && (aod::track::y > 1.0f);
361360
using myTracks = soa::Filtered<aod::Tracks>;
362361

@@ -365,7 +364,7 @@ struct MixedEventsPartitionedTracks {
365364

366365
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
367366
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
368-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
367+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
369368
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
370369
SameKindPair<aod::Collisions, myTracks, BinningType> pair{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
371370

@@ -400,6 +399,45 @@ struct MixedEventsPartitionedTracks {
400399
}
401400
};
402401

402+
struct MixedEventsLambdaBinning {
403+
ConfigurableAxis axisVertex{"axisVertex", {14, -7, 7}, "vertex axis for histograms"};
404+
ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0.0, 2.750, 5.250, 7.750, 12.750, 17.750, 22.750, 27.750, 32.750, 37.750, 42.750, 47.750, 52.750, 57.750, 62.750, 67.750, 72.750, 77.750, 82.750, 87.750, 92.750, 97.750, 250.1}, "multiplicity axis for histograms"};
405+
406+
void process(aod::Collisions& collisions, aod::Tracks& tracks)
407+
{
408+
LOGF(info, "Input data Collisions %d, Tracks %d ", collisions.size(), tracks.size());
409+
410+
auto getTracksSize =
411+
[&tracks](aod::Collision const& col) {
412+
auto associatedTracks = tracks.sliceByCached(o2::aod::track::collisionId, col.globalIndex()); // it's cached, so slicing/grouping happens only once
413+
return associatedTracks.size();
414+
};
415+
416+
using BinningType = FlexibleBinningPolicy<std::tuple<decltype(getTracksSize)>, aod::collision::PosZ, decltype(getTracksSize)>;
417+
BinningType binningWithLambda{{getTracksSize}, {axisVertex, axisMultiplicity}, true};
418+
419+
auto tracksTuple = std::make_tuple(tracks);
420+
SameKindPair<aod::Collisions, aod::Tracks, BinningType> pair{binningWithLambda, 5, -1, collisions, tracksTuple}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
421+
422+
int count = 0;
423+
for (auto& [c1, tracks1, c2, tracks2] : pair) {
424+
LOGF(info, "Mixed event collisions: (%d, %d) z: (%.3f, %.3f), tracks size (%d, %d)", c1.globalIndex(), c2.globalIndex(), c1.posZ(), c2.posZ(), tracks1.size(), tracks2.size());
425+
count++;
426+
if (count == 100)
427+
break;
428+
429+
// Example of using tracks from mixed events -- iterate over all track pairs from the two collisions
430+
int trackCount = 0;
431+
for (auto& [t1, t2] : combinations(CombinationsFullIndexPolicy(tracks1, tracks2))) {
432+
LOGF(info, "Mixed event tracks pair: (%d, %d) from events (%d, %d), track event: (%d, %d)", t1.index(), t2.index(), c1.index(), c2.index(), t1.collision().index(), t2.collision().index());
433+
trackCount++;
434+
if (trackCount == 10)
435+
break;
436+
}
437+
}
438+
}
439+
};
440+
403441
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
404442
{
405443
return WorkflowSpec{
@@ -414,5 +452,6 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
414452
adaptAnalysisTask<HashTask>(cfgc),
415453
adaptAnalysisTask<MixedEventsWithHashTask>(cfgc),
416454
adaptAnalysisTask<MixedEventsPartitionedTracks>(cfgc),
455+
adaptAnalysisTask<MixedEventsLambdaBinning>(cfgc),
417456
};
418457
}

Tutorials/src/eventMixingValidation.cxx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ struct MixedEventsEmptyTables {
3232

3333
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
3434
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
35-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
35+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
3636
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
3737
SameKindPair<aod::Collisions, myTracks, BinningType> pair{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
3838

@@ -62,7 +62,7 @@ struct MixedEventsEmptyTables {
6262
struct MixedEventsJoinedTracks {
6363
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
6464
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
65-
using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
65+
using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
6666
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
6767
SameKindPair<aod::Collisions, aod::FullTracks, BinningType> pair{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
6868

@@ -93,7 +93,7 @@ struct MixedEventsJoinedTracks {
9393
// struct MixedEventsBadSubscription {
9494
// std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
9595
// std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
96-
// using BinningType = BinningPolicy<aod::collision::PosX, aod::collision::PosY>;
96+
// using BinningType = ColumnBinningPolicy<aod::collision::PosX, aod::collision::PosY>;
9797
// BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
9898
// SameKindPair<aod::Collisions, aod::Cascades, BinningType> pair{binningOnPositions, 5, -1}; // indicates that 5 events should be mixed and under/overflow (-1) to be ignored
9999
//

Tutorials/src/tracksCombinations.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ struct TrackCombinations {
5151
struct BinnedTrackCombinations {
5252
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
5353
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
54-
BinningPolicy<aod::track::X, aod::track::Y> trackBinning{{xBins, yBins}, true};
54+
ColumnBinningPolicy<aod::track::X, aod::track::Y> trackBinning{{xBins, yBins}, true};
5555

5656
void process(aod::Tracks const& tracks)
5757
{
@@ -73,7 +73,7 @@ struct ConfigurableBinnedCollisionCombinations {
7373

7474
void process(soa::Join<aod::Collisions, aod::Mults> const& collisions)
7575
{
76-
using BinningType = BinningPolicy<aod::collision::PosZ, aod::mult::MultFV0M<aod::mult::MultFV0A, aod::mult::MultFV0C>>;
76+
using BinningType = ColumnBinningPolicy<aod::collision::PosZ, aod::mult::MultFV0M<aod::mult::MultFV0A, aod::mult::MultFV0C>>;
7777
BinningType colBinning{{axisVertex, axisMultiplicity}, true};
7878

7979
int count = 0;

0 commit comments

Comments
 (0)