- #pragma once
-
- // Gaudi
- #include "GaudiAlg/GaudiTool.h"
-
- // Local
- #include "TbKernel/ITbClusterFinder.h"
-
- /** @class TbClusterFinder TbClusterFinder.h
- *
- * This small class is used to find a particular cluster (on a particular
- * chip) nearest a particular time. This is done using a variety of funky
- * algorithms and conditions - specifically, using the condition that during
- * this object's lifetime, whenever asked to retrieve clusters for particular
- * time, these times are always increasing. (ALWAYS). Otherwise, expect O(N)
- * performance.
- *
- * @author Dan Saunders
- */
-
- class TbClusterFinder : public GaudiTool, virtual public ITbClusterFinder {
- public:
- typedef LHCb::TbClusters::const_iterator Iterator;
- enum SearchMethod {
- Seq = 1,
- AdapSeq = 2
- };
-
- /// Standard constructor
- TbClusterFinder(const std::string& type, const std::string& name,
- const IInterface* parent);
- /// Destructor
- virtual ~TbClusterFinder() {}
-
- virtual StatusCode initialize();
-
- /// Find iterator to first cluster on a given plane above a given time.
- virtual Iterator getIterator(const double& t, const unsigned int& plane);
- /// (Re)set the stored iterators for a given plane.
- virtual void setClusters(LHCb::TbClusters* clusters,
- const unsigned int& plane);
- /// Set the search algorithm to be used.
- virtual void setSearchAlgorithm(const std::string& alg);
-
- virtual Iterator first(const unsigned int& plane) const {
- return m_first[plane];
- }
- virtual Iterator end(const unsigned int& plane) const { return m_end[plane]; }
- virtual bool empty(const unsigned int& plane) const { return m_empty[plane]; }
-
- private:
- unsigned int m_searchAlgo;
-
- std::vector<Iterator> m_first;
- std::vector<Iterator> m_last;
- std::vector<Iterator> m_end;
- std::vector<unsigned int> m_nClusters;
- std::vector<bool> m_empty;
- std::vector<double> m_prev_ts;
- std::vector<Iterator> m_prev;
-
- /// Sequential search method
- Iterator seq_search(const double& t, const unsigned int& plane);
- /// Adaptive sequential search method
- Iterator adap_seq_search(const double& t, const unsigned int& plane);
- };