HLCC Documentation 2.2.0
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
27#include "trksim/config.hpp"
29#include "trksim/monitoring.hpp"
31
32
33namespace hlcc::trksim {
34
35
44 std::optional<ptk::Radians> alt;
45 std::optional<ptk::Radians> az;
46};
47
52class DataContext : public rad::DataContext {
53 public:
61 DataContext(std::shared_ptr<OldbInterface> oldb_interface = nullptr);
62
66 virtual ~DataContext();
67
68
72 void ReloadConfig() override;
73
77 Config& GetConfig() override;
78
83 const Config& GetConfigConst() const;
84
89 void UpdateDb() override;
90
95
96
102 void EnablePublishing(bool enabled);
103
107 bool IsPublishingEnabled() const;
108
109
111
118 std::shared_ptr<const ::msif::PresetArgs> GetPresetData() const;
119
124 void SetPresetArgs(std::shared_ptr<const ::msif::PresetArgs> preset_args);
125
134 ptk::EquatorialPosition GetTargetRaDec() const;
135
140 ptk::EquatorialPosition GetTargetRaDecApparent() const;
141
145 void SetTargetRaDecApparent(const ptk::EquatorialPosition& pos_apparent);
146
152 bool GetTargetRaDecValidity() const;
153
159 void SetTargetRaDecValidity(bool is_valid);
160
165 void AddSkyOffset(ptk::Radians delta_ra, ptk::Radians delta_dec);
166
167
169
194 std::optional<ptk::HorizonPositionEsoTimestamped> GetTargetAltAz(
195 ::taiclock::TaiClock::time_point time_tai = ::taiclock::TaiClock::time_point{}) const;
196
217 const ptk::HorizonPositionEsoTimestamped& alt_az, ElapsedTimeStats& stats);
218
226
246 ptk::HorizonPositionEsoTimestamped MergeTargetAltAz(const AltAzOptional& alt_az,
247 ElapsedTimeStats& stats, ::taiclock::TaiClock::time_point time_tai = ptk::NextTimeEvent());
248
254 bool GetTargetAltAzValidity() const;
255
262 void SetTargetAltAzValidity(bool is_valid);
263
264
266
273 ptk::HorizonPositionEsoTimestamped GetCurrentAltAz() const;
274
281 void SetCurrentAltAz(const ptk::HorizonPositionEsoTimestamped& alt_az);
282
283
285
292 enum class EstimatedState {
299 UNDEFINED,
315 TRACKING,
320 MOVING
321 };
322
336
341
343
346 ptk::PositionOnEarth GetSitePosition() const;
347
348// /**
349// * Writes the site info from configuration to the OLDB.
350// * It uses the defined periodicity for the writes. This means that it is not guaranteed
351// * that it will publish every time this method is called, but we should call the method
352// * frequently to ensure the period is constant.
353// *
354// * TODO: Rename this method to "PublishSiteInfo" because it does not modify any data
355// * in DataContext. It is not 'const' only because it uses flags "m_site_info_published"
356// * and "m_site_info_first_iteration", which could also be changed to become static
357// * local variables inside SetSiteInfo impl.
358// */
359// void SetSiteInfo(ElapsedTimeStats& stats);
360
361
363
367
368
370 DataContext(const DataContext&) = delete;
372
373 private:
378 Config m_config;
379
380 std::shared_ptr<OldbInterface> m_oldb_interface;
381
382 bool m_is_publishing_enabled;
383
391 std::shared_ptr<const ::msif::PresetArgs> m_preset_args;
392
401 ptk::EquatorialPosition m_ra_dec_target;
402
408 ptk::EquatorialPosition m_ra_dec_target_apparent;
409
420 bool m_ra_dec_target_is_valid;
421
437 std::map<::taiclock::TaiClock::time_point, ptk::HorizonPositionEsoTimestamped> m_alt_az_target_map;
438
445 bool m_alt_az_target_is_valid;
446
452 ptk::HorizonPositionEsoTimestamped alt_az_current;
453
458
462 AmbientData m_ambient_data;
463
471 bool m_site_info_published;
472 bool m_site_info_first_iteration;
473
482 mutable std::recursive_mutex m_mutex;
483
488 std::atomic<bool> is_initialized;
489};
490
491
495constexpr const char* EstimatedStateToString(DataContext::EstimatedState state);
496
500std::ostream& operator<<(std::ostream& os, DataContext::EstimatedState state);
501
502
503} // namespace hlcc::trksim
504
505#endif // HLCC_TRKSIM_DATACONTEXT_HPP
Definition ambientData.hpp:34
Definition config.hpp:253
Definition dataContext.hpp:52
EstimatedState GetEstimatedState() const
Definition dataContext.cpp:519
ptk::EquatorialPosition GetTargetRaDecApparent() const
Definition dataContext.cpp:190
virtual ~DataContext()
Definition dataContext.cpp:52
bool IsPublishingEnabled() const
Definition dataContext.cpp:100
bool GetTargetAltAzValidity() const
Definition dataContext.cpp:468
Config & GetConfig() override
Definition dataContext.cpp:107
std::shared_ptr< const ::msif::PresetArgs > GetPresetData() const
Definition dataContext.cpp:148
const Config & GetConfigConst() const
Definition dataContext.cpp:113
void SetTargetRaDecValidity(bool is_valid)
Definition dataContext.cpp:224
void AddSkyOffset(ptk::Radians delta_ra, ptk::Radians delta_dec)
Definition dataContext.cpp:237
void SetTargetAltAz(const ptk::HorizonPositionEsoTimestamped &alt_az, ElapsedTimeStats &stats)
DataContext(std::shared_ptr< OldbInterface > oldb_interface=nullptr)
Definition dataContext.cpp:33
EstimatedState
Definition dataContext.hpp:292
void ReloadConfig() override
Definition dataContext.cpp:119
AmbientData & GetAmbientData()
Definition dataContext.cpp:143
std::optional< ptk::HorizonPositionEsoTimestamped > GetTargetAltAz(::taiclock::TaiClock::time_point time_tai=::taiclock::TaiClock::time_point{}) const
Definition dataContext.cpp:304
void SetTargetRaDecApparent(const ptk::EquatorialPosition &pos_apparent)
Definition dataContext.cpp:198
void SetCurrentAltAz(const ptk::HorizonPositionEsoTimestamped &alt_az)
DataContext(const DataContext &)=delete
void UpdateDb() override
Definition dataContext.cpp:60
void EnablePublishing(bool enabled)
Definition dataContext.cpp:94
void SetPresetArgs(std::shared_ptr< const ::msif::PresetArgs > preset_args)
Definition dataContext.cpp:165
OldbInterface & GetOldbInterface() override
Definition dataContext.cpp:89
void SetTargetAltAzToCurrent(ElapsedTimeStats &stats)
Definition dataContext.cpp:412
ptk::EquatorialPosition GetTargetRaDec() const
Definition dataContext.cpp:156
ptk::HorizonPositionEsoTimestamped GetCurrentAltAz() const
Definition dataContext.cpp:482
ptk::HorizonPositionEsoTimestamped MergeTargetAltAz(const AltAzOptional &alt_az, ElapsedTimeStats &stats, ::taiclock::TaiClock::time_point time_tai=ptk::NextTimeEvent())
Definition dataContext.cpp:421
bool GetTargetRaDecValidity() const
Definition dataContext.cpp:218
DataContext & operator=(const DataContext &)=delete
Disable copy constructor.
ptk::PositionOnEarth GetSitePosition() const
Definition dataContext.cpp:132
void SetTargetAltAzValidity(bool is_valid)
Definition dataContext.cpp:474
void SetEstimatedState(EstimatedState state)
Definition dataContext.cpp:507
Definition monitoring.hpp:31
Definition oldbInterface.hpp:100
Definition actionMgr.cpp:35
constexpr const char * EstimatedStateToString(DataContext::EstimatedState state)
Definition dataContext.cpp:526
std::ostream & operator<<(std::ostream &os, DataContext::EstimatedState state)
Definition dataContext.cpp:538
Definition dataContext.hpp:43
std::optional< ptk::Radians > az
Definition dataContext.hpp:45
std::optional< ptk::Radians > alt
Definition dataContext.hpp:44
AmbientData class header file.
Config class header file.
Performance and other monitoring.
OldbInterface class header file.