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);
Timeframe settings Average distance in cm of events merged into Randomize distance around average distance of merged events Simulate correct bunch interactions instead of placing only the average number of events A value[n] sets TFlen for[n] collisions in Number of bunches per trainsort Number of bunch trains Instantaneous interaction rate Do not simulate border Total number of collisions to be placed in the interior of all time Do not select random but walk over array of events in stride steps h Event generator settings h configStandalone Use CPU for GPU Force usage of the specified GPU device no CPU fallback Continue processing after an error First event to process
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)
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...