Skip to content

Commit 2e75aaf

Browse files
committed
Add test for perf event mixing
1 parent e85f7b0 commit 2e75aaf

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed

Framework/Core/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ add_executable(o2-test-framework-core
220220
test/test_DeviceStateHelpers.cxx
221221
test/test_Expressions.cxx
222222
test/test_ExternalFairMQDeviceProxy.cxx
223+
test/test_EventMixing.cxx
223224
test/test_FairMQOptionsRetriever.cxx
224225
test/test_FairMQResizableBuffer.cxx
225226
test/test_FairMQ.cxx
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
12+
#include "Framework/ASoAHelpers.h"
13+
#include "Framework/GroupedCombinations.h"
14+
#include "Framework/TableBuilder.h"
15+
#include "Framework/AnalysisDataModel.h"
16+
#include <catch_amalgamated.hpp>
17+
#include <random>
18+
#include <vector>
19+
#include <list>
20+
#include <iostream>
21+
22+
using namespace o2::framework;
23+
using namespace o2::soa;
24+
25+
constexpr uint64_t testSize = 4194304;
26+
constexpr int numEventsToMix = 5;
27+
28+
TEST_CASE("EventMixingNaiveCollisionsPairsSameCategories")
29+
{
30+
// Seed with a real random value, if available
31+
std::default_random_engine e1(1234567891);
32+
std::uniform_real_distribution<float> uniform_dist(0.f, 1.f);
33+
std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
34+
std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
35+
std::uniform_int_distribution<int> uniform_dist_int(0, 5);
36+
37+
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
38+
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
39+
using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
40+
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
41+
42+
TableBuilder colBuilder;
43+
auto rowWriterCol = colBuilder.cursor<o2::aod::Collisions>();
44+
for (auto i = 0; i < testSize; ++i) {
45+
float x = uniform_dist_x(e1);
46+
float y = uniform_dist_y(e1);
47+
rowWriterCol(0, uniform_dist_int(e1),
48+
x, y, uniform_dist(e1),
49+
uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
50+
uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
51+
uniform_dist_int(e1), uniform_dist(e1),
52+
uniform_dist_int(e1),
53+
uniform_dist(e1), uniform_dist(e1));
54+
}
55+
auto tableCol = colBuilder.finalize();
56+
o2::aod::Collisions collisions{tableCol};
57+
58+
int64_t colCount = 0;
59+
int nBinsTot = (xBins.size() - 2) * (yBins.size() - 2);
60+
61+
colCount = 0;
62+
std::vector<std::list<o2::aod::Collisions::iterator>> mixingBufferVector;
63+
for (int i = 0; i < nBinsTot; i++) {
64+
mixingBufferVector.push_back(std::list<o2::aod::Collisions::iterator>());
65+
}
66+
for (auto& col1 : collisions) {
67+
int bin = binningOnPositions.getBin({col1.posX(), col1.posY()});
68+
if (bin == -1) {
69+
continue;
70+
}
71+
auto& mixingBuffer = mixingBufferVector[bin];
72+
if (mixingBuffer.size() > 0) {
73+
for (auto& col2 : mixingBuffer) {
74+
colCount++;
75+
}
76+
if (mixingBuffer.size() >= numEventsToMix - 1) {
77+
mixingBuffer.pop_back();
78+
}
79+
}
80+
mixingBuffer.push_front(col1);
81+
}
82+
}
83+
84+
TEST_CASE("EventMixingCombGenCollisionsPairsSameCategories")
85+
{
86+
std::cout << "Start EventMixingCombGenCollisionsPairsSameCategories" << std::endl;
87+
// Seed with a real random value, if available
88+
std::default_random_engine e1(1234567891);
89+
std::uniform_real_distribution<float> uniform_dist(0.f, 1.f);
90+
std::uniform_real_distribution<float> uniform_dist_x(-0.065f, 0.073f);
91+
std::uniform_real_distribution<float> uniform_dist_y(-0.320f, 0.360f);
92+
std::uniform_int_distribution<int> uniform_dist_int(0, 5);
93+
94+
std::vector<double> xBins{VARIABLE_WIDTH, -0.064, -0.062, -0.060, 0.066, 0.068, 0.070, 0.072};
95+
std::vector<double> yBins{VARIABLE_WIDTH, -0.320, -0.301, -0.300, 0.330, 0.340, 0.350, 0.360};
96+
using BinningType = ColumnBinningPolicy<o2::aod::collision::PosX, o2::aod::collision::PosY>;
97+
BinningType binningOnPositions{{xBins, yBins}, true}; // true is for 'ignore overflows' (true by default)
98+
99+
TableBuilder colBuilder;
100+
auto rowWriterCol = colBuilder.cursor<o2::aod::Collisions>();
101+
for (auto i = 0; i < testSize; ++i) {
102+
float x = uniform_dist_x(e1);
103+
float y = uniform_dist_y(e1);
104+
rowWriterCol(0, uniform_dist_int(e1),
105+
x, y, uniform_dist(e1),
106+
uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
107+
uniform_dist(e1), uniform_dist(e1), uniform_dist(e1),
108+
uniform_dist_int(e1), uniform_dist(e1),
109+
uniform_dist_int(e1),
110+
uniform_dist(e1), uniform_dist(e1));
111+
}
112+
auto tableCol = colBuilder.finalize();
113+
o2::aod::Collisions collisions{tableCol};
114+
115+
int64_t colCount = 0;
116+
117+
colCount = 0;
118+
for (auto& [c1, c2] : combinations(CombinationsBlockStrictlyUpperSameIndexPolicy(binningOnPositions, numEventsToMix - 1, -1, collisions, collisions))) {
119+
colCount++;
120+
int bin = binningOnPositions.getBin({c1.posX(), c1.posY()});
121+
}
122+
std::cout << "End EventMixingCombGenCollisionsPairsSameCategories" << std::endl;
123+
}

0 commit comments

Comments
 (0)