- #pragma once
-
-
- // Gaudi
- #include "GaudiAlg/GaudiHistoTool.h"
-
- // Tb/TbKernel
- #include "TbKernel/ITbGeometrySvc.h"
- #include "TbKernel/TbAlignmentTrack.h"
- #include "TbKernel/TbModule.h"
- #include "TbKernel/ITbTrackFit.h"
-
- static const InterfaceID IID_TbAlignmentBase("TbAlignmentBase", 1, 0);
-
- class TbAlignmentBase : public GaudiHistoTool {
-
- public:
- /// Return the interface ID
- static const InterfaceID& interfaceID() { return IID_TbAlignmentBase; }
- /// Constructor
- TbAlignmentBase(const std::string& type, const std::string& name,
- const IInterface* parent);
- /// Destructor
- ~TbAlignmentBase() {}
-
- virtual StatusCode initialize();
-
- /// Store tracks/clusters to be used for the alignment (called each event).
- virtual StatusCode execute(std::vector<TbAlignmentTrack*>& alignmentTracks);
- /// Alignment function (called after enough tracks have been collected).
- virtual void align(std::vector<TbAlignmentTrack*>& alignmentTracks) = 0;
-
- bool clearTracks() const { return m_clearTracks; }
- /// Fill monitoring histograms.
- void plotResiduals(std::vector<TbAlignmentTrack*>& tracks,
- const std::string& tag);
-
- protected:
- /// TES location of tracks.
- std::string m_trackLocation;
- /// Chi2 cut on tracks to be used for alignment
- double m_maxChi2;
- /// Degrees of freedom
- std::vector<bool> m_dofs;
- /// Default degrees of freedom
- std::vector<bool> m_dofsDefault;
- /// List of masked planes
- std::vector<unsigned int> m_maskedPlanes;
- /// Flags whether a plane is masked or not.
- std::vector<bool> m_masked;
- /// Flag to produce monitoring histograms.
- bool m_monitoring;
- /// Flag to reset the track store before collecting alignment tracks.
- bool m_clearTracks;
-
- std::vector<TbModule*> m_modules;
- unsigned int m_nPlanes;
- /// Track fit tool
- ITbTrackFit* m_trackFit;
-
- bool masked(const unsigned int plane) const {
- return plane < m_masked.size() ? m_masked[plane] : false;
- }
-
- /// Pointer to the geometry service.
- mutable ITbGeometrySvc* m_geomSvc;
- /// On-demand access to the geometry service.
- ITbGeometrySvc* geomSvc() const {
- if (!m_geomSvc) m_geomSvc = svc<ITbGeometrySvc>("TbGeometrySvc", true);
- return m_geomSvc;
- }
- /// Determine whether a track passes the edge region of a plane.
- bool isEdge(const LHCb::TbTrack* track) {
- for (auto cluster : track->clusters()) {
- if (isEdge(cluster)) return true;
- }
- return false;
- }
- /// Determine whether a cluster is close to the edge region of a plane.
- bool isEdge(const LHCb::TbCluster* cluster) {
- return cluster->xloc() < 0.5 ||
- cluster->xloc() > 13.5 ||
- cluster->yloc() < 0.5 ||
- cluster->yloc() > 13.5 ;
- }
-
-
- };