HLCC Documentation 3.0.1
Loading...
Searching...
No Matches
dataContext.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2020-2025 European Southern Observatory (ESO)
2//
3// SPDX-License-Identifier: LGPL-3.0-only
4
13#ifndef HLCC_TRKSIM_DATACONTEXT_HPP
14#define HLCC_TRKSIM_DATACONTEXT_HPP
15
16#include <mutex>
17#include <memory>
18
19#include <ptk/posastro.hpp>
20#include <taiclock/taiClock.hpp>
21#include <rad/dataContext.hpp>
22#include "mal/utility/shared_vector.hpp"
23#include "Ccsinsif.hpp"
24#include "Ccsinsdetif.hpp"
25#include <Msif.hpp>
26
28
29#include "trksim/config.hpp"
31#include "trksim/monitoring.hpp"
32
33
34namespace hlcc::trksim {
35
36
45 std::optional<ptk::Radians> alt;
46 std::optional<ptk::Radians> az;
47};
48
53class DataContext : public rad::DataContext {
54 public:
62 DataContext(std::shared_ptr<OldbInterface> oldb_interface = nullptr);
63
67 virtual ~DataContext();
68
69
73 void ReloadConfig() override;
74
78 Config& GetConfig() override;
79
84 const Config& GetConfigConst() const;
85
90 void UpdateDb() override;
91
96
97
103 void EnablePublishing(bool enabled);
104
108 bool IsPublishingEnabled() const;
109
110
112
119 std::shared_ptr<const ::ccscommonif::TargetData> GetPresetData() const;
120
125 void SetTargetData(std::shared_ptr<const ::ccscommonif::TargetData> preset_args);
126
135 ptk::EquatorialPosition GetTargetRaDec() const;
136
141 ptk::EquatorialPosition GetTargetRaDecCirs() const;
142
146 void SetTargetRaDecCirs(const ptk::EquatorialPosition& pos_cirs);
147
153 bool GetTargetRaDecValidity() const;
154
160 void SetTargetRaDecValidity(bool is_valid);
161
166 void AddSkyOffset(ptk::Radians delta_ra, ptk::Radians delta_dec);
167
168
170
195 std::optional<ptk::HorizonPositionEsoTimestamped> GetTargetAltAz(
196 ::taiclock::TaiClock::time_point time_tai = ::taiclock::TaiClock::time_point{}) const;
197
218 const ptk::HorizonPositionEsoTimestamped& alt_az, ElapsedTimeStats& stats);
219
227
247 ptk::HorizonPositionEsoTimestamped MergeTargetAltAz(const AltAzOptional& alt_az,
248 ElapsedTimeStats& stats, ::taiclock::TaiClock::time_point time_tai = ptk::NextTimeEvent());
249
255 bool GetTargetAltAzValidity() const;
256
263 void SetTargetAltAzValidity(bool is_valid);
264
265
267
274 ptk::HorizonPositionEsoTimestamped GetCurrentAltAz() const;
275
282 void SetCurrentAltAz(const ptk::HorizonPositionEsoTimestamped& alt_az);
283
284
286
323
337
342
344
347 ptk::PositionOnEarth GetSitePosition() const;
348
349// /**
350// * Writes the site info from configuration to the OLDB.
351// * It uses the defined periodicity for the writes. This means that it is not guaranteed
352// * that it will publish every time this method is called, but we should call the method
353// * frequently to ensure the period is constant.
354// *
355// * TODO: Rename this method to "PublishSiteInfo" because it does not modify any data
356// * in DataContext. It is not 'const' only because it uses flags "m_site_info_published"
357// * and "m_site_info_first_iteration", which could also be changed to become static
358// * local variables inside SetSiteInfo impl.
359// */
360// void SetSiteInfo(ElapsedTimeStats& stats);
361
362
364
368
369
371 DataContext(const DataContext&) = delete;
373
374 private:
379 Config m_config;
380
381 std::shared_ptr<OldbInterface> m_oldb_interface;
382
383 bool m_is_publishing_enabled;
384
392 std::shared_ptr<const ::ccscommonif::TargetData> m_preset_args;
393
402 ptk::EquatorialPosition m_ra_dec_target;
403
409 ptk::EquatorialPosition m_ra_dec_target_cirs;
410
421 bool m_ra_dec_target_is_valid;
422
438 std::map<::taiclock::TaiClock::time_point, ptk::HorizonPositionEsoTimestamped> m_alt_az_target_map;
439
446 bool m_alt_az_target_is_valid;
447
453 ptk::HorizonPositionEsoTimestamped alt_az_current;
454
459
464
472 bool m_site_info_published;
473 bool m_site_info_first_iteration;
474
483 mutable std::recursive_mutex m_mutex;
484
489 std::atomic<bool> is_initialized;
490};
491
492
496constexpr const char* EstimatedStateToString(DataContext::EstimatedState state);
497
501std::ostream& operator<<(std::ostream& os, DataContext::EstimatedState state);
502
503
504} // namespace hlcc::trksim
505
506#endif // HLCC_TRKSIM_DATACONTEXT_HPP
AmbientData class header file.
Definition ambientData.hpp:48
Definition config.hpp:254
EstimatedState GetEstimatedState() const
Definition dataContext.cpp:532
virtual ~DataContext()
Definition dataContext.cpp:53
bool IsPublishingEnabled() const
Definition dataContext.cpp:101
bool GetTargetAltAzValidity() const
Definition dataContext.cpp:481
Config & GetConfig() override
Definition dataContext.cpp:108
const Config & GetConfigConst() const
Definition dataContext.cpp:114
std::shared_ptr< const ::ccscommonif::TargetData > GetPresetData() const
Definition dataContext.cpp:152
void SetTargetRaDecValidity(bool is_valid)
Definition dataContext.cpp:228
void AddSkyOffset(ptk::Radians delta_ra, ptk::Radians delta_dec)
Definition dataContext.cpp:245
void SetTargetAltAz(const ptk::HorizonPositionEsoTimestamped &alt_az, ElapsedTimeStats &stats)
DataContext(std::shared_ptr< OldbInterface > oldb_interface=nullptr)
Definition dataContext.cpp:34
EstimatedState
Definition dataContext.hpp:293
@ UNDEFINED
Definition dataContext.hpp:300
@ STANDING_STILL
Definition dataContext.hpp:308
@ PRESETTING
Definition dataContext.hpp:312
@ TRACKING
Definition dataContext.hpp:316
@ MOVING
Definition dataContext.hpp:321
void ReloadConfig() override
Definition dataContext.cpp:120
std::optional< ptk::HorizonPositionEsoTimestamped > GetTargetAltAz(::taiclock::TaiClock::time_point time_tai=::taiclock::TaiClock::time_point{}) const
Definition dataContext.cpp:312
hlcc::ambientdataclient::AmbientData & GetAmbientData()
Definition dataContext.cpp:144
void SetCurrentAltAz(const ptk::HorizonPositionEsoTimestamped &alt_az)
DataContext(const DataContext &)=delete
ptk::EquatorialPosition GetTargetRaDecCirs() const
Definition dataContext.cpp:194
void UpdateDb() override
Definition dataContext.cpp:61
void EnablePublishing(bool enabled)
Definition dataContext.cpp:95
void SetTargetData(std::shared_ptr< const ::ccscommonif::TargetData > preset_args)
Definition dataContext.cpp:169
void SetTargetRaDecCirs(const ptk::EquatorialPosition &pos_cirs)
Definition dataContext.cpp:202
OldbInterface & GetOldbInterface() override
Definition dataContext.cpp:90
void SetTargetAltAzToCurrent(ElapsedTimeStats &stats)
Definition dataContext.cpp:425
ptk::EquatorialPosition GetTargetRaDec() const
Definition dataContext.cpp:160
ptk::HorizonPositionEsoTimestamped GetCurrentAltAz() const
Definition dataContext.cpp:495
ptk::HorizonPositionEsoTimestamped MergeTargetAltAz(const AltAzOptional &alt_az, ElapsedTimeStats &stats, ::taiclock::TaiClock::time_point time_tai=ptk::NextTimeEvent())
Definition dataContext.cpp:434
bool GetTargetRaDecValidity() const
Definition dataContext.cpp:222
DataContext & operator=(const DataContext &)=delete
Disable copy constructor.
ptk::PositionOnEarth GetSitePosition() const
Definition dataContext.cpp:133
void SetTargetAltAzValidity(bool is_valid)
Definition dataContext.cpp:487
void SetEstimatedState(EstimatedState state)
Definition dataContext.cpp:520
Definition monitoring.hpp:31
Definition oldbInterface.hpp:95
Definition actionMgr.cpp:35
constexpr const char * EstimatedStateToString(DataContext::EstimatedState state)
Definition dataContext.cpp:539
std::ostream & operator<<(std::ostream &os, DataContext::EstimatedState state)
Definition dataContext.cpp:551
Definition dataContext.hpp:44
std::optional< ptk::Radians > az
Definition dataContext.hpp:46
std::optional< ptk::Radians > alt
Definition dataContext.hpp:45
Config class header file.
Performance and other monitoring.
OldbInterface class header file.