17#include "benchmark/benchmark.h"
28 for (
auto& currColumn : patterns) {
29 if (currColumn.columnId == icolumn) {
35 return patterns.back();
41 uint16_t currStrip = (1 << strip);
45 column.
addStrip(strip, cathode, line);
52 std::vector<o2::mid::Mapping::MpStripIndex> neighbours = midMapping.
getNeighbours(stripIndex, cathode, deId);
53 for (
auto& neigh : neighbours) {
55 if (!
addStrip(column, cathode, neigh.line, neigh.strip)) {
59 if (nAdded >= maxAdded) {
62 addNeighbour(patterns, neigh, cathode, deId, midMapping, nAdded, maxAdded);
63 if (nAdded >= maxAdded) {
74 std::uniform_int_distribution<int> distColumn(firstColumnInDE, 6);
76 std::random_device
rd;
77 std::mt19937 mt(
rd());
79 std::vector<o2::mid::ColumnData> patterns;
81 std::vector<o2::mid::Mapping::MpStripIndex> neighbours;
83 for (
int icl = 0; icl <
nClusters; ++icl) {
84 int icolumn = distColumn(mt);
85 for (
int cathode = 0; cathode < 2; ++cathode) {
86 int iline = (cathode == 1) ? 0 : midMapping.
getFirstBoardBP(icolumn, deId);
87 int nStrips = (cathode == 0) ? 16 : midMapping.
getNStripsNBP(icolumn, deId);
88 std::uniform_int_distribution<int> distStrip(0, nStrips - 1);
89 stripIndex.
column = icolumn;
90 stripIndex.
line = iline;
91 stripIndex.
strip = distStrip(mt);
119 int deId =
state.range(0);
129 state.ResumeTiming();
131 gsl::span<const o2::mid::PreCluster> preClusters(preClusterizer.getPreClusters().data(), preClusterizer.getPreClusters().size());
132 clusterizer.process(preClusters);
136 state.counters[
"num"] = benchmark::Counter(
num, benchmark::Counter::kIsRate);
139static void CustomArguments(benchmark::internal::Benchmark* bench)
141 std::vector<int> deIdList = {63, 66, 67, 68, 69};
142 for (
auto& deId : deIdList) {
144 for (
int clustSize = 1; clustSize < 4; ++clustSize) {
145 bench->Args({deId,
nClusters, clustSize});
Strip pattern (aka digits)
Pre-cluster structure for MID.
Cluster reconstruction algorithm for MID.
Pre-cluster reconstruction algorithm for MID.
std::vector< o2::mid::ColumnData > inputData
void addNeighbour(std::vector< o2::mid::ColumnData > &patterns, o2::mid::Mapping::MpStripIndex stripIndex, int cathode, int deId, const o2::mid::Mapping &midMapping, int &nAdded, int maxAdded)
std::vector< o2::mid::ColumnData > generateTestData(int deId, int nClusters, int clusterSize, const o2::mid::Mapping &midMapping)
bool addStrip(o2::mid::ColumnData &column, int cathode, int line, int strip)
BENCHMARK_REGISTER_F(BenchClustering, clustering) -> Apply(CustomArguments) ->Unit(benchmark::kNanosecond)
o2::mid::ColumnData & getColumn(std::vector< o2::mid::ColumnData > &patterns, uint8_t icolumn, uint8_t deId)
o2::mid::PreClusterizer preClusterizer
o2::mid::Clusterizer clusterizer
o2::mid::Mapping midMapping
Clusterizing algorithm for MID.
bool init(std::function< void(size_t, size_t)> func=[](size_t, size_t) {})
int getNStripsNBP(int column, int deId) const
int getFirstColumn(int deId) const
int getFirstBoardBP(int column, int deId) const
std::vector< MpStripIndex > getNeighbours(const Mapping::MpStripIndex &stripIndex, int cathode, int deId) const
Pre-clustering algorithm for MID.
Column data structure for MID.
void addStrip(int strip, int cathode, int line)
uint16_t getPattern(int cathode, int line) const
Indexes required to define a strip in the detection element.
int strip
Line of the local board in the column.
int line
Column in the DE.
std::array< uint16_t, 5 > pattern