ifw-ccf  1.0.0
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 #include <fitsio.h>
9 #include <CCfits/CCfits.h>
10 #include <CCfits/FITS.h>
11 #include <CCfits/PHDU.h>
12 
13 #include <dit/fits/fits.hpp>
14 
15 #include "ccf/common/pubBase.hpp"
16 
17 namespace ccf::stdpub {
18 
20  class PubFits: public ccf::common::PubBase {
21  public:
22 
23  static bool s_initialised;
24  static char s_padding_bytes[2880];
25 
26  // Setup keys.
27  const std::string SETUP_KEY_BASENAME = "proc%d.pub%d.basename";
28  const std::string SETUP_KEY_MAX_SIZE = "proc%d.pub%d.max_size";
29  const std::string SETUP_KEY_NB_OF_FRAMES = "proc%d.pub%d.nb_of_frames";
30  const std::string SETUP_KEY_FORMAT = "proc%d.pub%d.format";
31  const std::string SETUP_KEY_OVERWRITE = "proc%d.pub%d.overwrite";
32  const std::string SETUP_KEY_REC_MODE = "proc%d.pub%d.rec_mode";
33 
34  enum class Format {
35  SINGLE = 1,
36  CUBE,
37  MEF
38  };
39 
40  const std::string FORMAT_SINGLE = "Single";
41  const std::string FORMAT_CUBE = "Cube";
42  const std::string FORMAT_MEF = "MEF";
43 
44  enum class RecordingMode {
45  ALL = 1,
46  INTERVAL,
47  PERIODIC
48  };
49 
50  const std::string RECORDING_MODE_ALL = "ALL";
51  const std::string RECORDING_MODE_INTERVAL = "INTERVAL";
52  const std::string RECORDING_MODE_PERIODIC = "PERIODIC";
53 
54  PubFits(const uint16_t proc_thread_nb,
55  const uint16_t pub_thread_nb,
56  const std::string& pub_name);
57 
58  PubFits();
59 
60  virtual ~PubFits();
61 
62  virtual void InitialiseUser();
63 
64  virtual void PublishUser(ccf::common::DataFrame& frame);
65 
66  virtual void CheckForDeactivationUser();
67 
68  virtual void ActivateUser();
69 
70  virtual void DeactivateUser();
71 
72  virtual void CreateObjectUser(const uint16_t proc_thread_nb,
73  const uint16_t pub_thread_nb,
74  const std::string& pub_name,
75  ccf::common::PubBase** new_object);
76 
77  virtual void EstimateExecutionUser(double& duration,
78  int64_t& nb_of_frames);
79 
80  Format FormatToNb(const std::string& format);
81 
82  std::string FormatToStr(const Format format);
83 
84  void DecodeRecMode(const std::string& rec_mode_specifier);
85 
86  std::string RecordingModeToStr(const RecordingMode mode);
87 
88  protected:
89 
90  private:
91  void StoreImage_(ccf::common::DataFrame& frame);
92  void AddStdKeys_(ccf::common::DataFrame& frame);
93 
94  // Setup parameters.
95  std::string m_setup_file_basename;
96  int32_t m_setup_max_size;
97  int32_t m_setup_nb_of_frames;
98  Format m_setup_format;
99  bool m_setup_overwrite;
100  RecordingMode m_setup_rec_mode;
101  int32_t m_setup_frame_interval;
102  double m_setup_frame_period;
103  ccf::common::ExpoMode m_setup_expo_mode;
104  int32_t m_setup_expo_nb;
105 
106  std::string m_stat_cur_filename;
107  std::string m_stat_prev_filename;
108 
109  int32_t m_stat_frames_stored;
110  double m_stat_last_frame_storage_time;
111  int32_t m_stat_size_frames_stored;
112 
113  // Total number of frames made available to this Data Publisher.
114  uint32_t m_stat_frame_count;
115 
116  std::shared_ptr<CCfits::FITS> m_fits_handle;
117 
118  // Fix metadata values.
119  std::string m_det_system;
120  std::string m_det_cam_name;
121  std::string m_det_cam_id;
122  std::string m_det_cam_model;
123  std::string m_det_cam_chip_model;
124  std::string m_det_cam_type;
125  };
126 
127 }
128 
129 #endif // CCF_STDPUB_PUB_FITS_HPP_H_
ccf::stdpub::PubFits::PublishUser
virtual void PublishUser(ccf::common::DataFrame &frame)
Definition: pubFits.cpp:93
ccf::stdpub::PubFits::SETUP_KEY_NB_OF_FRAMES
const std::string SETUP_KEY_NB_OF_FRAMES
Definition: pubFits.hpp:29
ccf::stdpub::PubFits::s_initialised
static bool s_initialised
Definition: pubFits.hpp:23
ccf::stdpub::PubFits::s_padding_bytes
static char s_padding_bytes[2880]
Definition: pubFits.hpp:24
ccf::stdpub::PubFits::ActivateUser
virtual void ActivateUser()
Definition: pubFits.cpp:118
ccf::stdpub::PubFits::SETUP_KEY_REC_MODE
const std::string SETUP_KEY_REC_MODE
Definition: pubFits.hpp:32
ccf::stdpub::PubFits::CreateObjectUser
virtual void CreateObjectUser(const uint16_t proc_thread_nb, const uint16_t pub_thread_nb, const std::string &pub_name, ccf::common::PubBase **new_object)
Definition: pubFits.cpp:134
ccf::stdpub::PubFits::RECORDING_MODE_ALL
const std::string RECORDING_MODE_ALL
Definition: pubFits.hpp:50
ccf::stdpub::PubFits::DeactivateUser
virtual void DeactivateUser()
Definition: pubFits.cpp:129
ccf::common::ExpoMode
ExpoMode
Exposure modes.
Definition: base.hpp:201
ccf::stdpub::PubFits::RecordingMode::ALL
@ ALL
ccf::stdpub::PubFits::CheckForDeactivationUser
virtual void CheckForDeactivationUser()
Definition: pubFits.cpp:378
ccf::stdpub::PubFits
Standard FITS Publisher.
Definition: pubFits.hpp:20
ccf::stdpub::PubFits::RECORDING_MODE_INTERVAL
const std::string RECORDING_MODE_INTERVAL
Definition: pubFits.hpp:51
ccf::stdpub::PubFits::FORMAT_MEF
const std::string FORMAT_MEF
Definition: pubFits.hpp:42
ccf::stdpub::PubFits::Format::CUBE
@ CUBE
ccf::stdpub::PubFits::Format::SINGLE
@ SINGLE
ccf::stdpub::PubFits::EstimateExecutionUser
virtual void EstimateExecutionUser(double &duration, int64_t &nb_of_frames)
Definition: pubFits.cpp:421
ccf::stdpub::PubFits::RecordingMode
RecordingMode
Definition: pubFits.hpp:44
pubBase.hpp
ccf::stdpub::PubFits::FormatToStr
std::string FormatToStr(const Format format)
Definition: pubFits.cpp:158
ccf::stdpub::PubFits::SETUP_KEY_BASENAME
const std::string SETUP_KEY_BASENAME
Definition: pubFits.hpp:27
ccf::stdpub::PubFits::RECORDING_MODE_PERIODIC
const std::string RECORDING_MODE_PERIODIC
Definition: pubFits.hpp:52
ccf::stdpub::PubFits::SETUP_KEY_FORMAT
const std::string SETUP_KEY_FORMAT
Definition: pubFits.hpp:30
ccf::stdpub::PubFits::RecordingModeToStr
std::string RecordingModeToStr(const RecordingMode mode)
Definition: pubFits.cpp:190
ccf::stdpub::PubFits::Format::MEF
@ MEF
ccf::stdpub::PubFits::SETUP_KEY_MAX_SIZE
const std::string SETUP_KEY_MAX_SIZE
Definition: pubFits.hpp:28
ccf::stdpub::PubFits::InitialiseUser
virtual void InitialiseUser()
Definition: pubFits.cpp:60
ccf::stdpub::PubFits::RecordingMode::INTERVAL
@ INTERVAL
ccf::stdpub::PubFits::Format
Format
Definition: pubFits.hpp:34
ccf::common::PubBase
Class for implementing CCF Data Publishers.
Definition: pubBase.hpp:119
ccf::stdpub::PubFits::PubFits
PubFits()
Definition: pubFits.cpp:51
ccf::stdpub::PubFits::SETUP_KEY_OVERWRITE
const std::string SETUP_KEY_OVERWRITE
Definition: pubFits.hpp:31
ccf::stdpub::PubFits::FormatToNb
Format FormatToNb(const std::string &format)
Definition: pubFits.cpp:145
ccf::stdpub::PubFits::FORMAT_CUBE
const std::string FORMAT_CUBE
Definition: pubFits.hpp:41
ccf::stdpub::PubFits::~PubFits
virtual ~PubFits()
Definition: pubFits.cpp:56
ccf::stdpub::PubFits::FORMAT_SINGLE
const std::string FORMAT_SINGLE
Definition: pubFits.hpp:40
ccf::stdpub::PubFits::DecodeRecMode
void DecodeRecMode(const std::string &rec_mode_specifier)
Definition: pubFits.cpp:167
ccf::stdpub::PubFits::RecordingMode::PERIODIC
@ PERIODIC
ccf::stdpub
Definition: pubDdt.hpp:18
ccf::common::DataFrame
Frame class used to store the data and metadata for one frames received from the camera.
Definition: dataFrame.hpp:15