ddt  1.0.0
imageBuffer.hpp
Go to the documentation of this file.
1 
20 #ifndef IMAGEBUFFER_HPP
21 #define IMAGEBUFFER_HPP
22 
23 #include <cpl.h>
24 #include <sys/stat.h>
25 
26 #include <algorithm>
27 #include <cctype>
28 #undef I
29 #undef arg
30 
32 #include "ddt/dataAcquisition.hpp"
33 #include "ddt/dataFile.hpp"
35 #include "ddt/ddtEncDecImage2D.hpp"
36 #include "ddt/ddtEncDecImage3D.hpp"
37 #include "ddt/ddtLogger.hpp"
38 #include "ddt/imageColor.hpp"
39 #include "ddt/imageCoords.hpp"
40 #include "ddt/imageError.hpp"
41 #include "ddt/imageIO.hpp"
42 #include "ddt/imageProc.hpp"
43 #include "ddt/imageStats.hpp"
44 #include "ddt/informationMaps.hpp"
45 
46 namespace ddt {
47 
54 class ImageBuffer {
55  public:
59  ImageBuffer();
60 
64  virtual ~ImageBuffer();
65 
70  void set_logger(ddt::DdtLogger* const in_logger);
71 
81  bool LoadFile(const std::string& file_name, const int position = 0);
82 
91  bool LoadFilePlane(const std::string& file_name, const int position = 0,
92  const int plane = 0);
93 
100  bool LoadImageExtensionsAsOne(const std::string& file_name);
101 
107  bool LoadCPLImage(cpl_image* const image);
108 
115  bool LoadActualConfigurationMap(const std::string configuration_map_name);
116 
121  bool LoadConfigurationMaps(const std::string configuration_map_source);
122 
127  bool LoadInformationMaps(const std::string information_map_source);
128 
132  void* get_ImageData();
133 
137  std::shared_ptr<DdtEncDec> get_MetadataSample();
138 
142  cpl_image* get_Image();
143 
147  std::string LastTimestampFromBuffer() const;
148 
152  cpl_table* get_BinaryTable();
153 
160  FitsExtension* get_FitsExtensionInfo(const int extension_number);
161 
167 
171  int get_ImageWidth() const;
172 
176  int get_ImageHeight() const;
177 
181  int get_NumberPlanes() const;
182 
187  int get_CurrentPlane() const;
188 
193  void set_CurrentPlane(const int plane);
194 
198  int get_NumberExtensions();
199 
203  int get_NumberAxis() const;
204 
209  cpl_wcs* get_Wcs();
210 
215  cpl_propertylist* get_PropertyList();
216 
222  cpl_apertures* get_CircularObjects(const double sigma);
223 
232  double get_PixelValue(const int x_image, const int y_image,
233  int* const is_rejected);
234 
240  bool get_AttachedToStream() const;
241 
247  bool get_LastSegment() const;
248 
254  bool get_FirstSegmentReceived() const;
255 
265  bool get_ConfigurationMap_Value(const double x, const double y,
266  double* const value) const;
267 
275  std::list<std::string> get_TextInformation(const double x,
276  const double y) const;
277 
282  std::vector<int> get_invalid_image_hdus() const;
283 
288  void AttachDataStream(const std::string data_stream_id);
289 
294  void DetachDataStream(const std::string data_stream_id);
295 
300 
301  void FreeResources();
302 
303  // Add meta data items related to the WCS (World Coordinate System)
304  // information to the actual property list
305  static void AddWCSItemsToPropList(cpl_propertylist* const prop_list,
306  const std::shared_ptr<DdtEncDec> enc_dec);
307 
308  // Determine the number of bits per pixel from the data type
309  static int32_t BitsPerPixelFromDataType(const uint32_t data_type);
310 
311  protected:
316 
317  private:
321  void Initialize();
322 
327  bool LoadFileData();
328 
333  bool LoadFileDataVector();
334 
341  bool LoadFileDataImage(const int plane_number);
342 
347  bool LoadImageExtensionsAsOne();
348 
353  bool LoadWCS();
354 
359  bool LoadPropertyList();
360 
361  bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecImage2D> enc_dec_2d);
362 
363  bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecImage3D> enc_dec_3d);
364 
365  bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecBinaryxD> enc_dec_xd);
366 
367  bool AssignPropListAndWcs(cpl_propertylist* const prop_list);
368 
372  boost::signals2::connection connect(const SignalT::slot_type& event_listener);
373 
377  void DataAvailable();
378 
386  void CheckByteOrder(const int topic_id, ddt::DataSample* const data_sample,
387  const std::vector<uint8_t> tmp_data);
388 
401  void ChangeByteOrder(ddt::DataSample* const data_sample,
402  const int bytes_per_pixel,
403  const uint32_t data_type) const;
404 
410  void HandleMultiLayer(ddt::DataSample* const data_sample);
411 
417  void HandleMultiDim(ddt::DataSample* const data_sample);
418 
424  void HandleBiDim(ddt::DataSample* const data_sample);
425 
435  void HandleSingleDim(ddt::DataSample* const data_sample,
436  const std::string config_map_name,
437  const std::string dimension, const uint32_t data_type);
438 
443  void DeleteCplImage(cpl_image** const image, const bool only_unwrap) const;
444 
452  void ApplyConfigMap(ddt::DataSample* const data_sample,
453  const cpl_image* const config_map,
454  const uint32_t data_type, const int data_dim);
455 
462  std::list<std::string> get_TextInformationForValue(const double value) const;
463 
471  void CreateAndInitNewImage(const uint32_t complete_pixels_x,
472  const uint32_t complete_pixels_y,
473  const uint32_t data_type);
474 
484  cpl_image* CreateNewImageFromDataSample(ddt::DataSample* const data_sample,
485  const int bytes_per_pixel,
486  const int number_pixels_x,
487  const int number_pixels_y,
488  const uint32_t data_type,
489  bool* const only_unwrap);
490 
497  cpl_image* CreateNewImageFromLastImage(const uint32_t complete_pixels_y,
498  const int number_pixels_x,
499  const int number_pixels_y);
500 
510  void CopySegmentToImage(const cpl_image* const tmp_image,
511  const uint32_t first_pixel_x,
512  const uint32_t first_pixel_y,
513  const uint32_t complete_pixels_y,
514  const int number_pixels_y);
515 
525  void FreeAndCreateNew(const uint32_t complete_pixels_x,
526  const uint32_t complete_pixels_y,
527  const uint32_t data_type, const uint32_t image_id,
528  const bool complete_flag);
529 
530  void LogMetaDataBase(const std::shared_ptr<DdtEncDec> enc_dec);
531 
535  void LogMetaDataImage2D(const std::shared_ptr<DdtEncDecImage2D> enc_dec_2d);
536 
540  void LogMetaDataImage3D(const std::shared_ptr<DdtEncDecImage3D> enc_dec_3d);
541 
545  void LogMetaDataBinaryxD(const std::shared_ptr<DdtEncDecBinaryxD> enc_dec_xd);
546 
550  ddt::DataAcquisition* data_acquisition;
551 
555  ddt::DataFile* data_file;
556 
561  ddt::ConfigurationMaps* configuration_maps;
562 
566  ddt::InformationMaps* information_maps;
567 
571  boost::signals2::connection connection;
572 
577  SignalT image_data_available;
578 
582  cpl_image* internal_image[2];
583  int current_index;
584  int next_index;
585 
589  cpl_vector* internal_vector;
590 
594  cpl_table* internal_binary_table;
595 
599  int actual_plane[2];
600 
604  cpl_wcs* wcs[2];
605 
609  int number_axis[2];
610 
614  int number_planes[2];
615 
619  int current_plane;
620 
624  int number_extensions[2];
625 
629  int image_width[2];
630 
634  int image_height[2];
635 
636  bool unwrap_only[2];
637 
641  std::list<std::string> config_maps;
642 
646  cpl_image* actual_configuration_map;
647 
651  std::string actual_configuration;
652 
656  boost::property_tree::ptree* actual_information_map;
657 
661  std::string actual_configuration_map_source;
662 
666  std::string actual_information_map_source;
667 
671  int actual_image_id;
672 
676  std::string last_timestamp;
677 
682  bool last_segment;
683 
692  bool first_segment_received;
693 
694  /*
695  * Flag indicating if a new image cycle has started
696  */
697  bool new_image_cycle;
698 
703  bool copy_last_segment;
704 
708  uint32_t last_first_pixel_x;
709 
713  uint32_t last_first_pixel_y;
714 
718  cpl_propertylist* property_list[2];
719 
723  std::shared_ptr<DdtEncDec> encdec_image_data;
724 
728  std::mutex mtx;
729  std::mutex mtx2;
730 };
731 
732 } // namespace ddt
733 
734 #endif /* IMAGEBUFFER_HPP */
735 
Definition: configurationMaps.hpp:39
Definition: dataAcquisition.hpp:52
Definition: dataFile.hpp:78
Definition: ddtLogger.hpp:51
Definition: imageBuffer.hpp:54
static int32_t BitsPerPixelFromDataType(const uint32_t data_type)
Definition: imageBuffer.cpp:1624
void * get_ImageData()
cpl_apertures * get_CircularObjects(const double sigma)
Definition: imageBuffer.cpp:1233
cpl_propertylist * get_PropertyList()
Definition: imageBuffer.cpp:1228
int get_ImageWidth() const
Definition: imageBuffer.cpp:1825
void AttachDataStream(const std::string data_stream_id)
Definition: imageBuffer.cpp:1720
bool LoadFile(const std::string &file_name, const int position=0)
Definition: imageBuffer.cpp:1022
bool LoadInformationMaps(const std::string information_map_source)
Definition: imageBuffer.cpp:998
ddt::DdtLogger * logger
Definition: imageBuffer.hpp:315
void set_logger(ddt::DdtLogger *const in_logger)
Definition: imageBuffer.cpp:152
double get_PixelValue(const int x_image, const int y_image, int *const is_rejected)
Definition: imageBuffer.cpp:1248
void set_CurrentPlane(const int plane)
Definition: imageBuffer.cpp:1839
bool LoadConfigurationMaps(const std::string configuration_map_source)
Definition: imageBuffer.cpp:983
FitsExtension * get_FitsExtensionInfo(const int extension_number)
Definition: imageBuffer.cpp:1163
int get_NumberExtensions()
Definition: imageBuffer.cpp:1842
SignalT * ImageDataAvailableSignal()
Definition: imageBuffer.cpp:1715
int get_CurrentPlane() const
Definition: imageBuffer.cpp:1836
bool LoadImageExtensionsAsOne(const std::string &file_name)
Definition: imageBuffer.cpp:1103
bool get_LastSegment() const
Definition: imageBuffer.cpp:1850
std::shared_ptr< DdtEncDec > get_MetadataSample()
Definition: imageBuffer.cpp:1816
void FreeResources()
Definition: imageBuffer.cpp:928
bool LoadFilePlane(const std::string &file_name, const int position=0, const int plane=0)
Definition: imageBuffer.cpp:1014
ImageBuffer()
Definition: imageBuffer.cpp:79
bool get_ConfigurationMap_Value(const double x, const double y, double *const value) const
Definition: imageBuffer.cpp:1264
bool LoadCPLImage(cpl_image *const image)
Definition: imageBuffer.cpp:1172
cpl_wcs * get_Wcs()
Definition: imageBuffer.cpp:1225
int get_NumberAxis() const
Definition: imageBuffer.cpp:1847
static void AddWCSItemsToPropList(cpl_propertylist *const prop_list, const std::shared_ptr< DdtEncDec > enc_dec)
Definition: imageBuffer.cpp:1594
std::string LastTimestampFromBuffer() const
Definition: imageBuffer.cpp:488
int get_NumberPlanes() const
Definition: imageBuffer.cpp:1831
virtual ~ImageBuffer()
Definition: imageBuffer.cpp:81
bool LoadActualConfigurationMap(const std::string configuration_map_name)
Definition: imageBuffer.cpp:959
std::vector< int > get_invalid_image_hdus() const
Definition: imageBuffer.cpp:1345
cpl_image * get_Image()
Definition: imageBuffer.cpp:1819
FitsExtension get_PrimaryHDUInfo() const
Definition: imageBuffer.cpp:1167
cpl_table * get_BinaryTable()
Definition: imageBuffer.cpp:1822
bool get_AttachedToStream() const
Definition: imageBuffer.cpp:1754
std::list< std::string > get_TextInformation(const double x, const double y) const
Definition: imageBuffer.cpp:1283
int get_ImageHeight() const
Definition: imageBuffer.cpp:1828
void DetachDataStream(const std::string data_stream_id)
Definition: imageBuffer.cpp:1749
bool get_FirstSegmentReceived() const
Definition: imageBuffer.cpp:1853
Definition: informationMaps.hpp:38
Configuration Maps class, offers an interface to configuration map access classes....
Data acquisition class, offers access to data stream acquisition functions. This file is part of the ...
Data file class, offers access to FITS file functions. This file is part of the DDT Image Handling Li...
DDT EncDecMultiDim. Class to encode / decode multi-dimensional array data samples....
DDT EncDecImage2D. Class to encode / decode 2-dimensional data samples containing image data....
DDT EncDecMultiLayer. Class to encode / decode multi-layer image data samples. Class to encode / deco...
Class to wrap the usage of log4cplus as logging utility. This file provides a wrapper class for the u...
boost::signals2::signal< void()> SignalT
Definition: ddtMemoryAccessor.hpp:82
Image Color class, offers access to color map related functions. This file is part of the DDT Image H...
Image Handling class, offers access to coordinate conversion functions. This file is part of the DDT ...
Image error handling function declaration. This file is part of the DDT Image Handling Library and pr...
Image IO function declaration. This file is part of the DDT Image Handling Library and provides funct...
Image processing function declaration. This file is part of the DDT Image Handling Library and provid...
Image analysis and statistic function declaration. This file is part of the DDT Image Handling Librar...
Information Maps class, offers an interface to information map access classes. This file is part of t...
Definition: ddtClient.hpp:39
Definition: ddtMemoryAccessor.hpp:184
Definition: dataFile.hpp:39