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_TELIF_ELTPK_DATACONTEXT_HPP
14#define HLCC_TELIF_ELTPK_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
27
28#include "eltpk/config.hpp"
30#include "eltpk/monitoring.hpp"
31
32
33
34
35namespace hlcc::eltpk {
36
37
46 std::optional<ptk::Radians> alt;
47 std::optional<ptk::Radians> az;
48};
49
50
51// msc (ETCS-765): Idea: reuse ICD structs in the app, not just for comm.
52// ----------------------------------------------------------------------------
53// Spare the boilerplate-code of defining fields already defined in the ICD.
54// The icd-gen could generate such (middleware-independent) class definitions.
55// To try out this approach, I'm implementing such a class here manually.
57
58private:
59 double time_tai = 0;
60 double time_dut1 = 0;
61 double target_observed_alt = 0;
62 double target_observed_az = 0;
63 double north_angle = 0;
64 double pupil_angle = 0;
65 double elevation_direction_angle = 0;
66 double parallactic_angle = 0;
67 double ra_at_xy_from_guide_stars = 0;
68 double dec_at_xy_from_guide_stars = 0;
69
70public:
71
72 double getTime_tai() const {return time_tai;};
73 void setTime_tai(double x) { time_tai = x;};
74
75 double getTime_dut1() const {return time_dut1;};
76 void setTime_dut1(double x) { time_dut1 = x;};
77
78 double getTarget_observed_alt() const {return target_observed_alt;};
79 void setTarget_observed_alt(double x) {target_observed_alt = x;};
80
81 double getTarget_observed_az() const {return target_observed_az;};
82 void setTarget_observed_az(double x) {target_observed_az = x;};
83
84 double getNorth_angle() const { return north_angle;};
85 void setNorth_angle(double x) { north_angle = x; };
86
87 double getPupil_angle() const { return pupil_angle;};
88 void setPupil_angle(double x) { pupil_angle = x;};
89
90 double getElevation_direction_angle() const { return elevation_direction_angle; };
91 void setElevation_direction_angle(double x) { elevation_direction_angle = x;};
92
93 double getParallactic_angle() const { return parallactic_angle; };
94 void setParallactic_angle(double x) { parallactic_angle = x;};
95
96 double getRa_at_xy_from_guide_stars() const { return ra_at_xy_from_guide_stars; };
97 void setRa_at_xy_from_guide_stars(double x) { ra_at_xy_from_guide_stars = x;};
98
99 double getDec_at_xy_from_guide_stars() const { return dec_at_xy_from_guide_stars; };
100 void setDec_at_xy_from_guide_stars(double x) { dec_at_xy_from_guide_stars = x;};
101}; // -----------------------------------------------------------------------
102
103
108class DataContext : public rad::DataContext {
109 public:
117 DataContext(std::shared_ptr<OldbInterface> oldb_interface = nullptr);
118
122 virtual ~DataContext();
123
124
128 void ReloadConfig() override;
129
133 Config& GetConfig() override;
134
139 const Config& GetConfigConst() const;
140
145 void UpdateDb() override;
146
151
152
158 void EnablePublishing(bool enabled);
159
163 bool IsPublishingEnabled() const;
164
166
170 std::shared_ptr<const ::ccsinsif::PresetData> GetPresetData();
171
173
180 void SetPresetArgs(std::shared_ptr<const ::ccsinsif::PresetArgs> preset_args);
181
190 ptk::EquatorialPosition GetTargetRaDec() const;
191
199 void SetTargetRaDec(ptk::EquatorialPosition pos);
200
205 ptk::EquatorialPosition GetTargetRaDecCirs() const;
206
210 void SetTargetRaDecCirs(const ptk::EquatorialPosition& pos_cirs);
211
217 bool GetTargetRaDecValidity() const;
218
224 void SetTargetRaDecValidity(bool is_valid);
225
226
228
253 std::optional<ptk::HorizonPositionEsoTimestamped> GetTargetAltAz(
254 ::taiclock::TaiClock::time_point time_tai = ::taiclock::TaiClock::time_point{}) const;
255
276 const ptk::HorizonPositionEsoTimestamped& alt_az, ElapsedTimeStats& stats);
277
285
305 ptk::HorizonPositionEsoTimestamped MergeTargetAltAz(const AltAzOptional& alt_az,
306 ElapsedTimeStats& stats, ::taiclock::TaiClock::time_point time_tai = ptk::NextTimeEvent());
307
313 bool GetTargetAltAzValidity() const;
314
321 void SetTargetAltAzValidity(bool is_valid);
322
323
325
332 ptk::HorizonPositionEsoTimestamped GetCurrentAltAz() const;
333
340 void SetCurrentAltAz(const ptk::HorizonPositionEsoTimestamped& alt_az);
341
342
344
381
395
400
401
403
407
412
413
415
418 ptk::PositionOnEarth GetSitePosition() const;
419
431 void SetSiteInfo(ElapsedTimeStats& stats);
432
433
435
439
440
441
443 // 2025-07: ETCS-1916 ops-logs for received commands and state-changes
452 void RecordOpsLog (const std::string &name, const std::string &value);
453
454
455
457 DataContext(const DataContext&) = delete;
459
460 private:
465 Config m_config;
466
470 ptk::IcrsCirsConverter m_conv_icrs;
471
472 std::shared_ptr<OldbInterface> m_oldb_interface;
473
474 bool m_is_publishing_enabled;
475
483 std::shared_ptr<const ::ccsinsif::PresetArgs> m_preset_args;
484
497 ptk::EquatorialPosition m_ra_dec_target;
498
504 ptk::EquatorialPosition m_ra_dec_target_cirs;
505
516 bool ra_dec_target_is_valid;
517
533 std::map<::taiclock::TaiClock::time_point, ptk::HorizonPositionEsoTimestamped> m_alt_az_target_map;
534
541 bool m_alt_az_target_is_valid;
542
548 ptk::HorizonPositionEsoTimestamped alt_az_current;
549
554
556 AgnosticPointingKernelPositions pointing_kernel_positions;
557
562
570 bool m_site_info_published;
571 bool m_site_info_first_iteration;
572
581 mutable std::recursive_mutex m_mutex;
582
587 std::atomic<bool> is_initialized;
588};
589
590
594constexpr const char* EstimatedStateToString(DataContext::EstimatedState state);
595
599std::ostream& operator<<(std::ostream& os, DataContext::EstimatedState state);
600
601
602} // namespace hlcc::eltpk
603
604#endif // HLCC_TELIF_ELTPK_DATACONTEXT_HPP
AmbientData class header file.
Config class header file.
Performance and other monitoring.
OldbInterface class header file.
Definition ambientData.hpp:48
void setTime_dut1(double x)
Definition dataContext.hpp:76
void setRa_at_xy_from_guide_stars(double x)
Definition dataContext.hpp:97
double getTarget_observed_az() const
Definition dataContext.hpp:81
double getDec_at_xy_from_guide_stars() const
Definition dataContext.hpp:99
void setTarget_observed_az(double x)
Definition dataContext.hpp:82
double getElevation_direction_angle() const
Definition dataContext.hpp:90
void setPupil_angle(double x)
Definition dataContext.hpp:88
double getTime_tai() const
Definition dataContext.hpp:72
void setNorth_angle(double x)
Definition dataContext.hpp:85
double getRa_at_xy_from_guide_stars() const
Definition dataContext.hpp:96
void setTime_tai(double x)
Definition dataContext.hpp:73
void setTarget_observed_alt(double x)
Definition dataContext.hpp:79
void setParallactic_angle(double x)
Definition dataContext.hpp:94
double getTime_dut1() const
Definition dataContext.hpp:75
void setElevation_direction_angle(double x)
Definition dataContext.hpp:91
double getNorth_angle() const
Definition dataContext.hpp:84
double getPupil_angle() const
Definition dataContext.hpp:87
void setDec_at_xy_from_guide_stars(double x)
Definition dataContext.hpp:100
double getParallactic_angle() const
Definition dataContext.hpp:93
double getTarget_observed_alt() const
Definition dataContext.hpp:78
Definition config.hpp:248
void SetEstimatedState(EstimatedState state)
Definition dataContext.cpp:521
ptk::EquatorialPosition GetTargetRaDec() const
Definition dataContext.cpp:163
void SetSiteInfo(ElapsedTimeStats &stats)
Definition dataContext.cpp:608
std::shared_ptr< const ::ccsinsif::PresetData > GetPresetData()
Definition dataContext.cpp:172
hlcc::ambientdataclient::AmbientData & GetAmbientData()
Definition dataContext.cpp:156
void SetPointingKernelPositions(const AgnosticPointingKernelPositions &x, ElapsedTimeStats &stats)
Definition dataContext.cpp:561
Config & GetConfig() override
Definition dataContext.cpp:120
void SetTargetAltAz(const ptk::HorizonPositionEsoTimestamped &alt_az, ElapsedTimeStats &stats)
EstimatedState
Definition dataContext.hpp:351
@ UNDEFINED
Definition dataContext.hpp:358
@ STANDING_STILL
Definition dataContext.hpp:366
@ PRESETTING
Definition dataContext.hpp:370
@ TRACKING
Definition dataContext.hpp:374
@ MOVING
Definition dataContext.hpp:379
bool GetTargetRaDecValidity() const
Definition dataContext.cpp:257
void SetCurrentAltAz(const ptk::HorizonPositionEsoTimestamped &alt_az)
bool IsPublishingEnabled() const
Definition dataContext.cpp:113
DataContext & operator=(const DataContext &)=delete
Disable copy constructor.
AgnosticPointingKernelPositions GetPointingKernelPositions() const
Definition dataContext.cpp:557
void SetTargetRaDecCirs(const ptk::EquatorialPosition &pos_cirs)
Definition dataContext.cpp:243
OldbInterface & GetOldbInterface() override
Definition dataContext.cpp:102
void RecordOpsLog(const std::string &name, const std::string &value)
Definition dataContext.cpp:652
bool GetTargetAltAzValidity() const
Definition dataContext.cpp:441
void SetTargetRaDec(ptk::EquatorialPosition pos)
Definition dataContext.cpp:205
ptk::HorizonPositionEsoTimestamped GetCurrentAltAz() const
Definition dataContext.cpp:455
DataContext(const DataContext &)=delete
EstimatedState GetEstimatedState() const
Definition dataContext.cpp:533
void SetTargetAltAzToCurrent(ElapsedTimeStats &stats)
Definition dataContext.cpp:385
ptk::EquatorialPosition GetTargetRaDecCirs() const
Definition dataContext.cpp:235
ptk::HorizonPositionEsoTimestamped MergeTargetAltAz(const AltAzOptional &alt_az, ElapsedTimeStats &stats, ::taiclock::TaiClock::time_point time_tai=ptk::NextTimeEvent())
Definition dataContext.cpp:394
void SetTargetAltAzValidity(bool is_valid)
Definition dataContext.cpp:447
virtual ~DataContext()
Definition dataContext.cpp:65
ptk::PositionOnEarth GetSitePosition() const
Definition dataContext.cpp:145
DataContext(std::shared_ptr< OldbInterface > oldb_interface=nullptr)
Definition dataContext.cpp:33
void UpdateDb() override
Definition dataContext.cpp:73
const Config & GetConfigConst() const
Definition dataContext.cpp:126
void EnablePublishing(bool enabled)
Definition dataContext.cpp:107
std::optional< ptk::HorizonPositionEsoTimestamped > GetTargetAltAz(::taiclock::TaiClock::time_point time_tai=::taiclock::TaiClock::time_point{}) const
Definition dataContext.cpp:281
void ReloadConfig() override
Definition dataContext.cpp:132
void SetTargetRaDecValidity(bool is_valid)
Definition dataContext.cpp:263
void SetPresetArgs(std::shared_ptr< const ::ccsinsif::PresetArgs > preset_args)
Definition dataContext.cpp:180
Definition monitoring.hpp:31
Definition oldbInterface.hpp:117
Definition actionMgr.cpp:31
constexpr const char * EstimatedStateToString(DataContext::EstimatedState state)
Definition dataContext.cpp:540
std::ostream & operator<<(std::ostream &os, DataContext::EstimatedState state)
Definition dataContext.cpp:552
Definition dataContext.hpp:45
std::optional< ptk::Radians > az
Definition dataContext.hpp:47
std::optional< ptk::Radians > alt
Definition dataContext.hpp:46