33 if (loadPatterns(stripPatterns)) {
35 for (
auto& deId : mActiveDEs) {
37 PatternStruct&
de = mMpDEs[deId];
51 for (
auto& rofRecord : rofRecords) {
52 auto firstEntry = mPreClusters.size();
53 process(stripPatterns.subspan(rofRecord.firstEntry, rofRecord.nEntries),
true);
54 auto nEntries = mPreClusters.size() - firstEntry;
55 mROFRecords.emplace_back(rofRecord, firstEntry, nEntries);
60bool PreClusterizer::loadPatterns(gsl::span<const ColumnData>& stripPatterns)
64 for (
auto&
col : stripPatterns) {
65 auto&
de = mMpDEs[
col.deId];
67 mActiveDEs.emplace(
col.deId);
69 de.firedColumns |= (1 <<
col.columnId);
73 return (stripPatterns.size() > 0);
77void PreClusterizer::preClusterizeNBP(PatternStruct&
de)
79 PreCluster* pc =
nullptr;
80 for (
int icolumn = 0; icolumn < 7; ++icolumn) {
81 if (
de.columns[icolumn].getNonBendPattern() == 0) {
85 for (
int istrip = 0; istrip < nStripsNBP; ++istrip) {
86 if (
de.columns[icolumn].isNBPStripFired(istrip)) {
88 mPreClusters.push_back({
de.deId, 1,
static_cast<uint8_t>(icolumn),
static_cast<uint8_t>(icolumn), 0, 0,
static_cast<uint8_t>(istrip),
static_cast<uint8_t>(istrip)});
89 pc = &mPreClusters.back();
91 pc->lastColumn = icolumn;
92 pc->lastStrip = istrip;
97 de.columns[icolumn].setNonBendPattern(0);
102void PreClusterizer::preClusterizeBP(PatternStruct&
de)
104 for (
int icolumn = mMapping.
getFirstColumn(
de.deId); icolumn < 7; ++icolumn) {
105 if ((
de.firedColumns & (1 << icolumn)) == 0) {
108 PreCluster* pc =
nullptr;
111 for (
int iline = firstLine; iline <= lastLine; ++iline) {
112 if (
de.columns[icolumn].getBendPattern(iline) == 0) {
115 for (
int istrip = 0; istrip < 16; ++istrip) {
116 if (
de.columns[icolumn].isBPStripFired(istrip, iline)) {
118 mPreClusters.push_back({
de.deId, 0,
static_cast<uint8_t>(icolumn),
static_cast<uint8_t>(icolumn),
static_cast<uint8_t>(iline),
static_cast<uint8_t>(iline),
static_cast<uint8_t>(istrip),
static_cast<uint8_t>(istrip)});
119 pc = &mPreClusters.back();
121 pc->lastLine = iline;
122 pc->lastStrip = istrip;
127 de.columns[icolumn].setBendPattern(0, iline);
Pre-cluster reconstruction algorithm for MID.
int getNStripsNBP(int column, int deId) const
int getFirstColumn(int deId) const
int getLastBoardBP(int column, int deId) const
int getFirstBoardBP(int column, int deId) const
void process(gsl::span< const ColumnData > stripPatterns, bool accumulate=false)
uint8_t itsSharedClusterMap uint8_t
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...