#ifndef TB_TRACKING_H #define TB_TRACKING_H 1 // Tb/TbKernel #include "TbKernel/ITbTrackFit.h" #include "TbKernel/ITbClusterFinder.h" #include "TbKernel/TbAlgorithm.h" // Tb/TbEvent #include "Event/TbCluster.h" #include "Event/TbTrack.h" // Local #include "TbTrackVolume.h" /** @class TbTracking TbTracking.h * * Algorithm for track reconstruction in Timepix3 telescope * * @author Dan Saunders */ class TbTracking : public TbAlgorithm { public: /// Constructor TbTracking(const std::string &name, ISvcLocator *pSvcLocator); /// Destructor virtual ~TbTracking(); virtual StatusCode initialize(); ///< Algorithm initialization virtual StatusCode execute(); ///< Algorithm execution private: /// Track container (to be filled). LHCb::TbTracks *m_tracks; /// Name of the track fit tool std::string m_trackFitTool; /// Track fit tool ITbTrackFit *m_trackFit; /// Tool to find particular clusters. ITbClusterFinder *m_clusterFinder; /// Tool for evaluating seed tracks. TbTrackVolume *m_trackVolume; /// TES location prefix of cluster containers. std::string m_clusterLocation; /// TES location prefix of track containers. std::string m_trackLocation; /// Flag to fill (or not) monitoring histograms. bool m_monitoring; /// Time width (in ns) of search window around seed cluster. double m_twindow; /// Minimum number of clusters to form a track. unsigned int m_MinNClusters; /// Spatial shapes of TbTrackVolumes {cylinder, diabolo}. std::string m_search_3vol; /// Spatial shape parameter. double m_vol_radius; /// Spatial shape parameter. double m_vol_theta; /// Chi2 cut. double m_ChiSqRedCut; /// Upper cut on the number of combinations to try in a TbTrackVolume. /// Useful for speed, and rarely used; set O(100). unsigned int m_nComboCut; /// Search algorithm used to fill TbTrackVolumes - {"seq", "adap_seq"}. /// "adap_seq" recommended. std::string m_ClusterFinderSearchAlgorithm; /// For certain volumes, it's advantageous to use seeds from the center of /// the telescope, so the order of the search can be specified here. std::vector<unsigned int> m_PlaneSearchOrder; /// Max. size of clusters on a track unsigned int m_clusterSizeCut; std::vector<std::vector<bool> > m_volumed; // Viewer options. bool m_viewerOutput; unsigned int m_viewerEvent; unsigned int m_event; bool m_combatRun; void outputViewerData(); void performTracking(); void fillTrackVolume(LHCb::TbCluster *seed, const unsigned int &planeLow, const unsigned int &planeUp); void evaluateTrackVolume(TbTrackVolume *vol); void timeOrderTracks(); void fillTrackVolPlots(TbTrackVolume *vol); }; #endif