Newer
Older
TB_Chris / TbAlgorithms / src / .svn / text-base / TbTrackVolume.h.svn-base
  1. #ifndef TB_TRACKVOLUME_H
  2. #define TB_TRACKVOLUME_H 1
  3.  
  4. #include <iostream>
  5.  
  6. // Tb/TbEvent
  7. #include "Event/TbCluster.h"
  8. #include "Event/TbTrack.h"
  9.  
  10. /** @class TbTrackVolume TbTrackVolume.h
  11. *
  12. * Container for clusters given a set of spatial and time cuts. Used for
  13. * tracking. Offers easy access to particular formations of tracks.
  14. *
  15. * @author Dan Saunders
  16. */
  17.  
  18. class TbTrackVolume {
  19. public:
  20. enum VolShape {
  21. Cylinder = 1,
  22. Diabolo = 2,
  23. SqDiabolo = 3
  24. };
  25. /// Constructor
  26. TbTrackVolume(const std::string& volshape, const unsigned int& nPlanes,
  27. const double& r, const double& ry, const double& theta,
  28. const double& thetay, const unsigned int& minNClusters);
  29. /// Destructor
  30. ~TbTrackVolume() {}
  31.  
  32. void reset(LHCb::TbCluster* c);
  33. void consider_cluster(LHCb::TbCluster* c);
  34.  
  35. unsigned int nCombos();
  36. void get_track_combo(LHCb::TbTrack* t);
  37. void increment_combo_counters();
  38.  
  39. // Setters and getters ______________________________________________________
  40. LHCb::TbCluster* seed() const { return m_seed_cluster; }
  41.  
  42. /// Overload ostream operator <<
  43. friend std::ostream& operator<<(std::ostream& s, const TbTrackVolume& v) {
  44. s << v.m_theta << " " << v.m_r << " " << v.m_thetaY << " " << v.m_rY << " "
  45. << v.seed()->x() << " " << v.seed()->y() << " " << v.seed()->z() << " ";
  46. return s;
  47. }
  48.  
  49. std::vector<std::vector<LHCb::TbCluster*> > m_clusters;
  50.  
  51. private:
  52. double m_r;
  53. double m_rY;
  54. double m_r2;
  55. double m_theta;
  56. double m_thetaY;
  57.  
  58. LHCb::TbCluster* m_seed_cluster;
  59. unsigned int m_3vol_shape;
  60.  
  61. unsigned int m_nPlanes;
  62. unsigned int m_MinNClusters;
  63. std::vector<unsigned int> m_combo_counters;
  64. unsigned int m_nCombos;
  65. bool m_done;
  66.  
  67. bool consider_cluster_cylinder(const LHCb::TbCluster* cl) const;
  68. bool consider_cluster_diabolo(const LHCb::TbCluster* cl) const;
  69. bool consider_cluster_sqDiabolo(const LHCb::TbCluster* cl) const;
  70. bool notAlreadyConsidered(const LHCb::TbCluster* cl) const;
  71. };
  72. #endif