12#include <Math/Vector3D.h>
40 std::vector<std::string> varLabels = {
"omega",
"phi",
"theta"};
61 unsigned short init_ClSize = 0;
62 unsigned short defaultValue = 0;
63 cell_index cell(
m_dim, defaultValue);
64 std::vector<cell_index> C(init_ClSize, cell);
67 void setParams(
unsigned short dim)
80 m_C.push_back(nextEntry);
83 void addHit(
unsigned short hit,
unsigned short weight,
unsigned short orient)
112 std::vector<cell_index>
m_C;
140 void setPlaneShape(std::vector<ushort> planeShape)
142 m_dimSize = planeShape.size();
143 m_planeShape = planeShape;
144 m_valMax = std::vector<ushort>(m_planeShape);
145 for (ushort idim = 0; idim < m_dimSize; idim++) {
148 m_valMax.push_back(1);
155 m_houghVals = &houghmapPlain;
156 m_houghVisit = c3array(m_c3shape);
163 bool hasBefore(cell_index entry, ushort dim);
165 cell_index before(cell_index entry, ushort dim);
167 bool hasAfter(cell_index entry, ushort dim);
169 cell_index after(cell_index entry, ushort dim);
171 void blockcheck(std::vector<cell_index>* neighbors, cell_index elem, ushort dim);
173 std::vector<cell_index> regionQuery(cell_index entry);
175 std::vector<SimpleCluster> dbscan();
177 void expandCluster(std::vector<cell_index>& N,
SimpleCluster& C);
181 std::pair<cell_index, unsigned long> getGlobalMax();
183 void deleteMax(cell_index maxIndex);
185 std::vector<SimpleCluster> makeClusters();
187 std::pair<SimpleCluster, unsigned long> createCluster(cell_index maxIndex);
189 unsigned long checkSurroundings(cell_index maxIndex);
192 std::string printVector(std::vector<T> vecX)
194 std::stringstream result;
196 for (T& elem : vecX) { result << elem <<
" ";}
204 std::string printCells(std::vector<T> vecX)
206 std::stringstream result;
207 for (T& elem : vecX) { result <<
" {" << printVector(elem) <<
"}";}
213 std::vector<ushort> m_planeShape;
214 std::vector<ushort> m_valMax;
216 boost::array<c3index, 3> m_c3shape = {{ 40, 384, 9 }};
217 c3array* m_houghVals{0};
218 c3array m_houghVisit = c3array(m_c3shape);
void setNewPlane(c3array &houghmapPlain)
Next event initialization: set a new hough space for clustering and track finding.
std::vector< cell_index > getCandidates()
clustererParams m_params
Clusterizend.
bool hasBefore(cell_index entry, ushort dim)
Clustering logic.
void addHit(unsigned short hit, unsigned short weight, unsigned short orient)
Relate a hit to the cluster.
std::vector< unsigned short > getHits()
Get ids of related hits (indices of the TS StoreArray)
std::vector< unsigned short > m_hitWeights
Cluster related hits weights.
unsigned short m_dim
Dimension of the track space (3 for omega, phi, theta)
unsigned short m_orientSum
Sum of related hit orientations (== number of related axials)
std::vector< cell_index > m_C
SimpleCluster.
unsigned long getNAxial()
Get number related axial hits.
unsigned long getNStereo()
Get number related stereo hits.
std::vector< unsigned short > m_hits
Cluster related hits ids.
std::vector< cell_index > getEntries()
Get member cells in the cluster.
std::vector< unsigned short > getWeights()
Get weight contribution of each related hit to the cluster.
void append(cell_index nextEntry)
Add a track-space cell to the cluster.
Abstract base class for different kinds of events.
unsigned char iterations
Number of iterations of the cluster searching for each Hough space.
unsigned char minPts
minimum number of neighbours for a cluster core cell
std::vector< bool > varCyclic
Ordering of track parameters and position of cyclic variable (phi)
bool diagonal
Consider diagonal adjacent cells as neighbors.
unsigned short minTotalWeight
Cut on the total weight of all cells in the 3d volume.
unsigned short minWeight
minimum weight for a cluster cell
unsigned char omegaTrim
Number of deleted cells in omega in each direction of the maximum.
unsigned char thetaTrim
Number of deleted cells in theta in each direction of the maximum.
unsigned short minPeakWeight
Cut on the peak cell weight.
unsigned char phiTrim
Number of deleted cells in phi in each direction of the maximum.