#ifndef TBTIMINGSVC_H #define TBTIMINGSVC_H 1 // Gaudi #include "GaudiKernel/Service.h" #include "GaudiKernel/Bootstrap.h" // Local #include "TbKernel/ITbTimingSvc.h" #include "TbKernel/ITbGeometrySvc.h" template <class TYPE> class SvcFactory; /** @class TbTimingSvc TbTimingSvc.h * * Implementation of the testbeam timing service. * */ class TbTimingSvc : public extends1<Service, ITbTimingSvc> { public: /// Constructor TbTimingSvc(const std::string& name, ISvcLocator* svc); /// Destructor virtual ~TbTimingSvc(); virtual StatusCode initialize(); virtual StatusCode finalize(); virtual uint64_t localToGlobal(const double& htime); virtual double globalToLocal(const uint64_t& time); virtual void setEventDefinition(const uint64_t& evtMinTime, const uint64_t& evtMaxTime) { m_evtMinTime = evtMinTime; m_evtMaxTime = evtMaxTime; } virtual void eventDefinition(uint64_t& evtMinTime, uint64_t& evtMaxTime) const { evtMinTime = m_evtMinTime; evtMaxTime = m_evtMaxTime; } virtual void setOverlap(const uint64_t& overlap) { m_overlap = overlap; } virtual bool inEvent(const uint64_t& time) const { return time > m_evtMinTime && time < m_evtMaxTime; } virtual bool inOverlap(const uint64_t& time) const { return time > m_evtMaxTime - m_overlap && time < m_evtMaxTime; } virtual bool beforeOverlap(const uint64_t& time) const { return time < m_evtMaxTime - m_overlap; } private: /// Allow SvcFactory to instantiate the service. friend class SvcFactory<TbTimingSvc>; /// Lower limit of the current event (in global time units) uint64_t m_evtMinTime; /// Upper limit of the current event (in global time units) uint64_t m_evtMaxTime; /// Overlap with the next event (in global time units) uint64_t m_overlap; /// Pointer to message stream mutable MsgStream* m_msg; /// On-demand access to message stream MsgStream& msg() const { if (!m_msg) m_msg = new MsgStream(msgSvc(), name()); return *m_msg; } }; #endif