ifw-ccf  3.0.0-pre2
pubFits.hpp
Go to the documentation of this file.
1 
5 #ifndef CCF_STDPUB_PUB_FITS_HPP_H_
6 #define CCF_STDPUB_PUB_FITS_HPP_H_
7 
8 #define BOOST_BIND_NO_PLACEHOLDERS
9 
10 #include <fitsio.h>
11 #include <CCfits/CCfits.h>
12 #include <CCfits/FITS.h>
13 #include <CCfits/PHDU.h>
14 
15 #include <core/dit/fits/fits.hpp>
16 
17 #include <ccf/common/pubBase.hpp>
18 
19 namespace ccf::stdpub {
20 
22  class PubFits: public ccf::common::PubBase {
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 
33  enum class Format {
34  SINGLE = 1,
35  CUBE,
36  MEF
37  };
38 
39  const std::string FORMAT_SINGLE = "Single";
40  const std::string FORMAT_CUBE = "Cube";
41  const std::string FORMAT_MEF = "MEF";
42 
43  enum class RecordingMode {
44  ALL = 1,
45  INTERVAL,
46  PERIODIC
47  };
48 
49  const std::string RECORDING_MODE_ALL = "ALL";
50  const std::string RECORDING_MODE_INTERVAL = "INTERVAL";
51  const std::string RECORDING_MODE_PERIODIC = "PERIODIC";
52 
53  PubFits(const std::string& proc_thread_name,
54  const std::string& pub_thread_name);
55 
56  PubFits();
57 
58  virtual ~PubFits();
59 
60  virtual void InitialiseUser();
61 
62  virtual void PublishUser(ccf::common::DataFrame& frame);
63 
64  virtual void CheckForDeactivationUser();
65 
66  virtual void ActivateUser();
67 
68  virtual void DeactivateUser();
69 
70  virtual void CreateObjectUser(const std::string& proc_thread_name,
71  const std::string& pub_thread_name,
72  PubBase** new_object);
73 
74  virtual void EstimateExecutionUser(double& duration,
75  int64_t& nb_of_frames);
76 
77  Format FormatToNb(const std::string& format);
78 
79  std::string FormatToStr(const Format format);
80 
81  void DecodeRecMode(const std::string& rec_mode_specifier);
82 
83  std::string RecordingModeToStr(const RecordingMode mode);
84 
85  protected:
86 
87  private:
88  void StoreImage_(ccf::common::DataFrame& frame);
89  void AddStdKeys_(ccf::common::DataFrame& frame);
90 
91  // Setup parameters.
92  std::string m_setup_file_basename;
93  int32_t m_setup_max_size;
94  int32_t m_setup_nb_of_frames;
95  Format m_setup_format;
96  bool m_setup_overwrite;
97  RecordingMode m_setup_rec_mode;
98  int32_t m_setup_frame_interval;
99  double m_setup_frame_period;
100  ccf::ExpoMode m_setup_expo_mode;
101  int32_t m_setup_expo_nb;
102 
103  std::string m_stat_cur_filename;
104  std::string m_stat_prev_filename;
105 
106  int32_t m_stat_frames_stored;
107  double m_stat_last_frame_storage_time;
108  int32_t m_stat_size_frames_stored;
109 
110  // Total number of frames made available to this Data Publisher.
111  uint32_t m_stat_frame_count;
112 
113  std::shared_ptr<CCfits::FITS> m_fits_handle;
114 
115  // Fix metadata values.
116  std::string m_det_system;
117  std::string m_det_cam_name;
118  std::string m_det_cam_id;
119  std::string m_det_cam_model;
120  std::string m_det_cam_chip_model;
121  std::string m_det_cam_type;
122  };
123 
124 }
125 
126 #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:17
Class for implementing CCF Data Publishers.
Definition: pubBase.hpp:114
PubBase()
Definition: pubBase.cpp:390
Standard FITS Publisher.
Definition: pubFits.hpp:22
const std::string FORMAT_MEF
Definition: pubFits.hpp:41
const std::string SETUP_KEY_NB_OF_FRAMES
Definition: pubFits.hpp:29
const std::string RECORDING_MODE_ALL
Definition: pubFits.hpp:49
PubFits()
Definition: pubFits.cpp:52
Format
Definition: pubFits.hpp:33
const std::string FORMAT_SINGLE
Definition: pubFits.hpp:39
const std::string SETUP_KEY_REC_MODE
Definition: pubFits.hpp:31
virtual void DeactivateUser()
Definition: pubFits.cpp:160
static char s_padding_bytes[2880]
Definition: pubFits.hpp:26
const std::string FORMAT_CUBE
Definition: pubFits.hpp:40
void DecodeRecMode(const std::string &rec_mode_specifier)
Definition: pubFits.cpp:194
virtual void InitialiseUser()
Definition: pubFits.cpp:61
virtual void EstimateExecutionUser(double &duration, int64_t &nb_of_frames)
Definition: pubFits.cpp:470
const std::string RECORDING_MODE_PERIODIC
Definition: pubFits.hpp:51
virtual void CreateObjectUser(const std::string &proc_thread_name, const std::string &pub_thread_name, PubBase **new_object)
Definition: pubFits.cpp:165
const std::string RECORDING_MODE_INTERVAL
Definition: pubFits.hpp:50
std::string FormatToStr(const Format format)
Definition: pubFits.cpp:185
virtual void CheckForDeactivationUser()
Definition: pubFits.cpp:441
Format FormatToNb(const std::string &format)
Definition: pubFits.cpp:172
RecordingMode
Definition: pubFits.hpp:43
const std::string SETUP_KEY_OVERWRITE
Definition: pubFits.hpp:30
virtual ~PubFits()
Definition: pubFits.cpp:57
virtual void PublishUser(ccf::common::DataFrame &frame)
Definition: pubFits.cpp:122
std::string RecordingModeToStr(const RecordingMode mode)
Definition: pubFits.cpp:220
virtual void ActivateUser()
Definition: pubFits.cpp:149
static bool s_initialised
Definition: pubFits.hpp:25
MudpiCreator source file.
Definition: mudpiCreator.hpp:22
ExpoMode
Exposure modes.
Definition: base.hpp:299