Program Listing for File clock.h¶
↰ Return to documentation for file (devices/clock.h)
#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<ClockDynamics> 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<ClockDynamics> dynamics);
ClockDynamics* GetDynamics() const { return dynamics_.get(); }
Ptr<ClockDynamics> GetDynamicsSharedPtr() const { return dynamics_; }
virtual void Log(Real time) override;
};
} // namespace lupnt