ifw-ccf 6.0.0
 
Loading...
Searching...
No Matches
pubFits.hpp
Go to the documentation of this file.
1
6
7#ifndef CCF_STDPUB_PUB_FITS_HPP_H_
8#define CCF_STDPUB_PUB_FITS_HPP_H_
9
10#include <fitsio.h>
11#include <CCfits/CCfits.h>
12#include <CCfits/FITS.h>
13#include <CCfits/PHDU.h>
14
15#include <ifw/core/dit/fits/fits.hpp>
16
18
19namespace ifw::ccf::stdpub {
20
23 public:
24
25 static bool s_initialised;
26 static char s_padding_bytes[2880];
27
28 // Setup keys.
29 const std::string SETUP_KEY_NB_OF_FRAMES = "nb_of_frames";
30 const std::string SETUP_KEY_OVERWRITE = "overwrite";
31 const std::string SETUP_KEY_REC_MODE = "rec_mode";
32 const std::string SETUP_KEY_NB_REC_HDR_BLOCKS = "nb_of_hdr_blocks";
33 const std::string SETUP_KEY_ADD_TIMESTAMPS_TBL = "add_timestamps_tbl";
34
35 enum class Format {
36 SINGLE = 1,
39 // Same per-frame logic as CUBE (one growing 3-D image with
40 // NAXIS3 incremented per frame) but the cube lives in the
41 // first image extension instead of the Primary HDU; the
42 // Primary HDU is empty (NAXIS=0).
44 };
45
46 const std::string FORMAT_SINGLE = "Single";
47 const std::string FORMAT_CUBE = "Cube";
48 const std::string FORMAT_MEF = "MEF";
49 const std::string FORMAT_CUBE_X = "CubeX";
50
51 enum class RecordingMode {
52 ALL = 1,
55 };
56
57 const std::string RECORDING_MODE_ALL = "ALL";
58 const std::string RECORDING_MODE_INTERVAL = "INTERVAL";
59 const std::string RECORDING_MODE_PERIODIC = "PERIODIC";
60
61 enum class TimestampTableType {
62 NONE = 0,
65 };
66
67 const std::string TIMESTAMP_TBL_NONE = "None";
68 const std::string TIMESTAMP_TBL_BINARY = "Binary";
69 const std::string TIMESTAMP_TBL_ASCII = "ASCII";
70
71 PubFits(const std::string& proc_thread_name,
72 const std::string& pub_thread_name);
73
74 PubFits();
75
76 virtual ~PubFits();
77
78 virtual void InitialiseUser();
79
80 virtual void PublishUser(ifw::ccf::common::DataFrame& frame);
81
82 virtual void CheckForDeactivationUser();
83
84 virtual void ActivateUser();
85
86 virtual void DeactivateUser();
87
88 virtual void CreateObjectUser(const std::string& proc_thread_name,
89 const std::string& pub_thread_name,
90 PubBase** new_object);
91
92 virtual void EstimateExecutionUser(double& duration,
93 int64_t& nb_of_frames);
94
95 Format FormatToNb(const std::string& format);
96
97 std::string FormatToStr(const Format format);
98
99 void DecodeRecMode(const std::string& rec_mode_specifier);
100
101 std::string RecordingModeToStr(const RecordingMode mode);
102
103 TimestampTableType TimestampTblTypeToNb(const std::string& type);
104
105 std::string TimestampTblTypeToStr(const TimestampTableType type);
106
107 protected:
108
109 private:
110 void StoreImage_(ifw::ccf::common::DataFrame& frame);
111 void AddStdKeys_(ifw::ccf::common::DataFrame& frame);
112 void WriteTimestampTable_();
113
114 // Setup parameters.
115 std::string m_setup_file_basename;
116 int32_t m_setup_max_size;
117 int32_t m_setup_nb_of_frames;
118 Format m_setup_format;
119 bool m_setup_overwrite;
120 RecordingMode m_setup_rec_mode;
121 int32_t m_setup_frame_interval;
122 double m_setup_frame_period;
123 ifw::ccf::ExpoMode m_setup_expo_mode;
124 int32_t m_setup_expo_nb;
125 int16_t m_nb_of_hdr_blocks;
126 bool m_store_telemetry_in_dps{false};
127 TimestampTableType m_setup_timestamps_tbl{TimestampTableType::NONE};
128
129 std::string m_stat_cur_filename;
130 std::string m_stat_prev_filename;
131
132 int32_t m_stat_frames_stored;
133 double m_stat_last_frame_storage_time;
134 double m_stat_size_frames_stored_mb;
135
136 // Total number of frames made available to this Data Publisher.
137 uint32_t m_stat_frame_count;
138
139 std::shared_ptr<CCfits::FITS> m_fits_handle;
140
141 // Frame timestamp data for FRAMES_TIMESTAMPS table.
142 // Columns: fits_pub_count, cam_frame_count, int_frame_count, timestamp
143 std::vector<int32_t> m_ts_fits_pub_count;
144 std::vector<int64_t> m_ts_cam_frame_count;
145 std::vector<int64_t> m_ts_int_frame_count;
146 std::vector<double> m_ts_timestamps;
147
148 // Fix metadata values.
149 std::string m_det_system;
150 std::string m_det_cam_name;
151 std::string m_det_cam_id;
152 std::string m_det_cam_model;
153 std::string m_det_cam_chip_model;
154 std::string m_det_cam_type;
155 };
156
157}
158
159#endif // CCF_STDPUB_PUB_FITS_HPP_H_
Frame class used to store the data and metadata for one frames received from the camera.
Definition dataFrame.hpp:20
Class for implementing CCF Data Publishers.
Definition pubBase.hpp:117
PubBase(const std::string &proc_thread_name, const std::string &pub_thread_name)
Definition pubBase.cpp:374
RecordingMode
Definition pubFits.hpp:51
@ INTERVAL
Definition pubFits.hpp:53
@ ALL
Definition pubFits.hpp:52
@ PERIODIC
Definition pubFits.hpp:54
PubFits()
Definition pubFits.cpp:57
const std::string TIMESTAMP_TBL_NONE
Definition pubFits.hpp:67
virtual ~PubFits()
Definition pubFits.cpp:62
const std::string RECORDING_MODE_ALL
Definition pubFits.hpp:57
const std::string FORMAT_CUBE_X
Definition pubFits.hpp:49
const std::string FORMAT_CUBE
Definition pubFits.hpp:47
PubFits(const std::string &proc_thread_name, const std::string &pub_thread_name)
Definition pubFits.cpp:28
const std::string FORMAT_MEF
Definition pubFits.hpp:48
const std::string SETUP_KEY_ADD_TIMESTAMPS_TBL
Definition pubFits.hpp:33
const std::string RECORDING_MODE_INTERVAL
Definition pubFits.hpp:58
Format
Definition pubFits.hpp:35
@ SINGLE
Definition pubFits.hpp:36
@ CUBE_X
Definition pubFits.hpp:43
@ MEF
Definition pubFits.hpp:38
@ CUBE
Definition pubFits.hpp:37
void DecodeRecMode(const std::string &rec_mode_specifier)
Definition pubFits.cpp:237
virtual void DeactivateUser()
Definition pubFits.cpp:201
Format FormatToNb(const std::string &format)
Definition pubFits.cpp:213
const std::string SETUP_KEY_NB_REC_HDR_BLOCKS
Definition pubFits.hpp:32
const std::string SETUP_KEY_REC_MODE
Definition pubFits.hpp:31
std::string TimestampTblTypeToStr(const TimestampTableType type)
Definition pubFits.cpp:285
TimestampTableType
Definition pubFits.hpp:61
static bool s_initialised
Definition pubFits.hpp:25
const std::string FORMAT_SINGLE
Definition pubFits.hpp:46
virtual void EstimateExecutionUser(double &duration, int64_t &nb_of_frames)
Definition pubFits.cpp:686
std::string FormatToStr(const Format format)
Definition pubFits.cpp:227
static char s_padding_bytes[2880]
Definition pubFits.hpp:26
std::string RecordingModeToStr(const RecordingMode mode)
Definition pubFits.cpp:263
const std::string RECORDING_MODE_PERIODIC
Definition pubFits.hpp:59
virtual void InitialiseUser()
Definition pubFits.cpp:66
TimestampTableType TimestampTblTypeToNb(const std::string &type)
Definition pubFits.cpp:272
virtual void ActivateUser()
Definition pubFits.cpp:183
virtual void CheckForDeactivationUser()
Definition pubFits.cpp:576
virtual void PublishUser(ifw::ccf::common::DataFrame &frame)
Definition pubFits.cpp:147
const std::string TIMESTAMP_TBL_ASCII
Definition pubFits.hpp:69
const std::string SETUP_KEY_OVERWRITE
Definition pubFits.hpp:30
const std::string TIMESTAMP_TBL_BINARY
Definition pubFits.hpp:68
const std::string SETUP_KEY_NB_OF_FRAMES
Definition pubFits.hpp:29
virtual void CreateObjectUser(const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **new_object)
Definition pubFits.cpp:206
Definition mudpiCreator.hpp:21
ExpoMode
Exposure modes.
Definition base.hpp:208