RTC Toolkit 6.0.0
Loading...
Searching...
No Matches
fitsDataRecorder.hpp
Go to the documentation of this file.
1
11#ifndef RTCTK_COMPONENTFRAMEWORK_FITSDATARECORDER_HPP
12#define RTCTK_COMPONENTFRAMEWORK_FITSDATARECORDER_HPP
13
16
17#include <filesystem>
18#include <fitsio2.h>
19#include <functional>
20#include <gsl/span>
21#include <map>
22#include <memory>
23#include <string_view>
24
26
28public:
30 explicit FitsDataRecorderFitsError(const std::string& error)
31 : RtctkException("FITS error: " + error) {
32 }
33};
34
35struct FitsColumn {
36 std::string_view name;
37 std::string_view unit;
38
39 constexpr FitsColumn(std::string_view new_name, std::string_view new_unit)
40 : name(new_name), unit(new_unit) {
41 }
42};
43
69template <class... T>
70class FitsRecorder : public DataRecorder<T...> {
71public:
72 using typename DataRecorder<T...>::ColumnDescription;
73
81 explicit FitsRecorder(const ColumnDescription& columns,
82 const std::array<bool, sizeof...(T)>& disable = {},
83 const std::string& extension_name = "recording");
84 ~FitsRecorder() override = default;
85 void Open(const std::filesystem::path& file) override;
86 void Write(const std::tuple<T...>& data) override;
87 void Close() override;
98 void SetColumnLength(size_t column, size_t length);
99 void SetColumnLength(const std::tuple<T...>& data);
100
101 std::string DefaultFileExtension() override {
102 return std::string{".fits"};
103 }
104
105private:
106 static void CloseFits(fitsfile* pointer);
110 std::unique_ptr<fitsfile, decltype(&CloseFits)> m_fits_handle;
114 std::string m_extension_name;
118 long int m_row_index{0};
122 std::array<std::optional<size_t>, sizeof...(T)> m_column_length;
123};
124
125} // namespace rtctk::componentFramework
126
128
129#endif // RTCTK_COMPONENTFRAMEWORK_FITSDATARECORDER_HPP
const std::array< ColumnMetaData, sizeof...(T)> ColumnDescription
Definition dataRecorder.hpp:48
DataRecorder(const ColumnDescription &columns, const DisabledFields &disable={})
Definition dataRecorder.hpp:56
RtctkException() noexcept
Definition exceptions.cpp:112
FitsDataRecorderFitsError(const std::string &error)
Definition fitsDataRecorder.hpp:30
FitsRecorder(const ColumnDescription &columns, const std::array< bool, sizeof...(T)> &disable={}, const std::string &extension_name="recording")
create a new recorder
Definition fitsDataRecorder.ipp:163
void Open(const std::filesystem::path &file) override
Open a file.
Definition fitsDataRecorder.ipp:177
std::string DefaultFileExtension() override
Default filename extension for the recorder.
Definition fitsDataRecorder.hpp:101
void SetColumnLength(size_t column, size_t length)
Set the exact length of a column.
Definition fitsDataRecorder.ipp:238
void Write(const std::tuple< T... > &data) override
Write a single row of data.
Definition fitsDataRecorder.ipp:282
void SetColumnLength(const std::tuple< T... > &data)
Definition fitsDataRecorder.ipp:253
void Close() override
Close the currently open file.
Definition fitsDataRecorder.ipp:367
RtctkException() noexcept
Definition exceptions.cpp:112
Provides an abstract DataRecorder class as the output stage for a recording unit.
Provides macros and utilities for exception handling.
FitsRecorder allows to write ColumnData to into fits files in a specified directory.
Definition commandReplier.cpp:21
constexpr FitsColumn(std::string_view new_name, std::string_view new_unit)
Definition fitsDataRecorder.hpp:39
std::string_view name
Definition fitsDataRecorder.hpp:36
std::string_view unit
Definition fitsDataRecorder.hpp:37