- #ifndef TB_CLUSTERING_H
- #define TB_CLUSTERING_H 1
-
- // Tb/TbEvent
- #include "Event/TbHit.h"
- #include "Event/TbCluster.h"
-
- // Tb/TbKernel
- #include "TbKernel/TbAlgorithm.h"
-
- /** @class TbClustering TbClustering.h
- *
- * Algorithm to group together touching Timepix3 pixel hits.
- *
- * @author Dan Saunders
- */
-
- class TbClustering : public TbAlgorithm {
- public:
- /// Constructor
- TbClustering(const std::string& name, ISvcLocator* pSvcLocator);
- /// Destructor
- virtual ~TbClustering() {}
-
- virtual StatusCode initialize(); ///< Algorithm initialization
- virtual StatusCode execute(); ///< Algorithm execution
-
- private:
- /// TES location prefix of hits
- std::string m_hitLocation;
- /// TES location prefix of clusters
- std::string m_clusterLocation;
- /// Time window (in ns)
- double m_twindow;
- /// Max. distance between two pixels to be grouped together
- int m_searchDist;
- /// Cluster error calculation (0 for constant, 1 for COG error propagation
- int m_clusterErrorMethod;
- /// Eta-correction parameterisation.
- struct EtaCorrection {
- double xmin, xmax;
- std::vector<double> coefficients;
- };
- /// Set of eta-correction parameters per plane, direction, and cluster width.
- std::vector<std::array<std::vector<std::vector<EtaCorrection> >, 2> > m_eta;
-
- /// Add pixels to a given seed pixel.
- void addNeighbouringHits(std::vector<const LHCb::TbHit*>& pixels,
- LHCb::TbHits::const_iterator begin,
- LHCb::TbHits::const_iterator end,
- std::vector<bool>& used);
- /// Check if a hit touches any of the pixels in a given cluster.
- bool hitTouchesCluster(const int scol, const int row,
- const std::vector<const LHCb::TbHit*>& pixels) const {
-
- bool result = false;
- for (auto it = pixels.cbegin(), end = pixels.cend(); it != end; ++it) {
- if ((abs(int((*it)->scol()) - scol) <= m_searchDist) &&
- (abs(int((*it)->row()) - row) <= m_searchDist)) {
- result = true;
- break;
- }
- }
- return result;
- }
-
- /// Set cluster attributes (position, time, ADC).
- void completeCluster(const unsigned int plane,
- const std::vector<const LHCb::TbHit*>& pixels,
- LHCb::TbClusters* clusters);
- /// Calculate the cluster errors.
- void setClusterError(LHCb::TbCluster* cluster) const;
- /// Calculate the eta-correction.
- void etaCorrection(double& xLocal, double& yLocal,
- const unsigned int nCols, const unsigned int nRows,
- const unsigned int plane) const;
- void readEta(const std::string& filename);
-
- };
- #endif