- #ifndef TB_TRACKING_H
- #define TB_TRACKING_H 1
-
- // Root
- #include "TH1.h"
- #include "TH2.h"
-
- // Tb/TbKernel
- #include "TbKernel/ITbTrackFit.h"
- #include "TbKernel/TbAlgorithm.h"
-
- // Tb/TbEvent
- #include "Event/TbCluster.h"
- #include "Event/TbTrack.h"
- // Kalman classes in TbEvent
- #include "Event/TbKalmanTrack.h"
- #include "Event/TbKalmanNode.h"
- #include "Event/TbKalmanPixelMeasurement.h"
-
- // Local
- #include "TbClusterFinder.h"
- #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;
-
- /// Track fit tool
- ITbTrackFit *m_trackFit;
- /// Tool to find particular clusters.
- TbClusterFinder *m_clusterFinder;
-
- // Tracking specific options.
- /// TES location of cluster containers.
- std::string m_clusterLocation;
- /// Flag to fill (or not) monitoring histograms.
- bool m_monitoring;
- /// Time width (in ns) of TbTrackVolumes.
- 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;
- double m_vol_radiusY;
- /// Spatial shape parameter.
- double m_vol_theta;
- double m_vol_thetaY;
- /// Chi2 cut.
- double m_ChiSqRedCut;
- /// Upper cut on the number of cominations to try in a TbTrackVolume.
- /// Useful for speed, and rarely used; set O(100).
- int m_nComboCut;
- /// Search algorithm used to fill TbTrackVolumes - {"seq", "adap_seq"}.
- /// "adap_seq" recommeneded.
- 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;
-
- void performTracking();
- void fillATrackVolume(TbTrackVolume *);
- void evaluateTrackVolume(TbTrackVolume *);
- void timeOrderTracks();
- void poorMansEvaluation(TbTrackVolume *);
-
- // Errors for Kalman fit
- double m_hiterror2;
- double m_scat2;
-
- // Histo functions
- void setup_hists();
- void fill_khists(std::vector<LHCb::TbKalmanTrack*>&);
-
- float lowR, highR, binsR, lowS, highS;
-
-
- // Kalman filter histos
- //---------------------------------------------------
-
- // Track parameters
- TH1D* m_Kfit_chi2;
- TH1D* m_Kfit_prob;
-
- // unbiased residuals
- std::vector<TH1D*> m_XunresKfit;
- std::vector<TH1D*> m_YunresKfit;
- // biased residuals
- std::vector<TH1D*> m_XresKfit;
- std::vector<TH1D*> m_YresKfit;
- // biased residuals on X,Y
- std::vector<TH2D*> m_XresKfitOnX;
- std::vector<TH2D*> m_XresKfitOnY;
-
- std::vector<TH2D*> m_YresKfitOnY;
- std::vector<TH2D*> m_YresKfitOnX;
-
- // biased residuals on X,Y slopes
- std::vector<TH2D*> m_XresKfitOnTX;
- std::vector<TH2D*> m_XresKfitOnTY;
-
- std::vector<TH2D*> m_YresKfitOnTY;
- std::vector<TH2D*> m_YresKfitOnTX;
-
- // biased residuals errors
- std::vector<TH1D*> m_XreserrKfit;
- std::vector<TH1D*> m_YreserrKfit;
-
- // residual pulls
- std::vector<TH1D*> m_XrespullKfit;
- std::vector<TH1D*> m_YrespullKfit;
-
- // quality biased residuals
- std::vector<TH1D*> m_qXresKfit;
- std::vector<TH1D*> m_qYresKfit;
-
- // quality residual pulls
- std::vector<TH1D*> m_qXrespullKfit;
- std::vector<TH1D*> m_qYrespullKfit;
-
-
- // TbKalmanTrack container
- std::vector<LHCb::TbKalmanTrack*> ktracks_vec;
- //---------------------------------------------------
-
- };
- #endif