#ifndef TB_TRACKVOLUME_H #define TB_TRACKVOLUME_H 1 #include <iostream> // Tb/TbEvent #include "Event/TbCluster.h" #include "Event/TbTrack.h" /** @class TbTrackVolume TbTrackVolume.h * * Container for clusters given a set of spatial and time cuts. Used for * tracking. Offers easy access to particular formations of tracks. * * @author Dan Saunders */ class TbTrackVolume { public: enum VolShape { Cylinder = 1, Diabolo = 2, SqDiabolo = 3 }; /// Constructor TbTrackVolume(const std::string& volshape, const unsigned int& nPlanes, const double& r, const double& ry, const double& theta, const double& thetay, const unsigned int& minNClusters); /// Destructor ~TbTrackVolume() {} void reset(LHCb::TbCluster* c); void consider_cluster(LHCb::TbCluster* c); unsigned int nCombos(); void get_track_combo(LHCb::TbTrack* t); void increment_combo_counters(); // Setters and getters ______________________________________________________ LHCb::TbCluster* seed() const { return m_seed_cluster; } /// Overload ostream operator << friend std::ostream& operator<<(std::ostream& s, const TbTrackVolume& v) { s << v.m_theta << " " << v.m_r << " " << v.m_thetaY << " " << v.m_rY << " " << v.seed()->x() << " " << v.seed()->y() << " " << v.seed()->z() << " "; return s; } std::vector<std::vector<LHCb::TbCluster*> > m_clusters; private: double m_r; double m_rY; double m_r2; double m_theta; double m_thetaY; LHCb::TbCluster* m_seed_cluster; unsigned int m_3vol_shape; unsigned int m_nPlanes; unsigned int m_MinNClusters; std::vector<unsigned int> m_combo_counters; unsigned int m_nCombos; bool m_done; bool consider_cluster_cylinder(const LHCb::TbCluster* cl) const; bool consider_cluster_diabolo(const LHCb::TbCluster* cl) const; bool consider_cluster_sqDiabolo(const LHCb::TbCluster* cl) const; bool notAlreadyConsidered(const LHCb::TbCluster* cl) const; }; #endif