.. _program_listing_file_devices_clock.h: Program Listing for File clock.h ================================ |exhale_lsh| :ref:`Return to documentation for file ` (``devices/clock.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include "lupnt/core/definitions.h" #include "lupnt/devices/device.h" #include "lupnt/dynamics/clock_dynamics.h" #include "lupnt/states/state.h" namespace lupnt { enum class ClockModel { OCXO, USO, CSAC, MINI_RAFS, RAFS, DSAC, UNDEFINED }; class Clock : public Device { private: Real time_ = 0.0; // [s] ClockState3 state_; ClockModel model_ = ClockModel::UNDEFINED; ClockBiasUnit bias_unit_ = ClockBiasUnit::SECONDS; bool use_relativity_ = false; bool relativity_center_body_set_ = false; BodyId relativity_center_body_ = BodyId::EARTH; UnitSystem relativity_units_ = SI_UNITS; Ptr dynamics_; void ApplyClockStateUnits(); ClockRelativityContext BuildRelativityContext(Real t0, Real tf) const; public: Clock(); Clock(Config& config); Real Read(Real t); void Step(Real t) override; void Setup() override; void SetModel(ClockModel model); ClockModel GetModel() const { return model_; } void SetState(const ClockState3& state) { state_ = state; ApplyClockStateUnits(); } ClockState3 GetState() const { return state_; } void SetTime(Real time) { time_ = time; } Real GetTime() const { return time_; } void SetClockBiasUnit(ClockBiasUnit unit); ClockBiasUnit GetClockBiasUnit() const { return bias_unit_; } void SetUseRelativity(bool use_relativity) { use_relativity_ = use_relativity; } bool GetUseRelativity() const { return use_relativity_; } void SetRelativityCenterBody(BodyId center_body) { relativity_center_body_ = center_body; relativity_center_body_set_ = true; } BodyId GetRelativityCenterBody() const { return relativity_center_body_; } bool HasRelativityCenterBody() const { return relativity_center_body_set_; } void ClearRelativityCenterBody() { relativity_center_body_set_ = false; } void SetRelativityUnits(const UnitSystem& units) { relativity_units_ = units; } UnitSystem GetRelativityUnits() const { return relativity_units_; } void SetDynamics(Ptr dynamics); ClockDynamics* GetDynamics() const { return dynamics_.get(); } Ptr GetDynamicsSharedPtr() const { return dynamics_; } virtual void Log(Real time) override; }; } // namespace lupnt