ddt  0.1
imageBuffer.hpp
Go to the documentation of this file.
1 // @copyright
2 // (c) Copyright ESO 2020
3 // All Rights Reserved
4 // ESO (eso.org) is an Intergovernmental Organization, and therefore special
5 // legal conditions apply.
6 //
7 // @file imageBuffer.hpp
8 // @brief Image Buffer class, handles internal CPL image.
9 //
10 // This file is part of the DDT Image Handling Library and
11 // provides a class that handles the internal CPL image.
12 //
13 // @author Christoph Bortlisz, CGI
14 // @since 2020/10/01
15 //
16 
17 #ifndef IMAGEBUFFER_HPP
18 #define IMAGEBUFFER_HPP
19 
20 #include <cpl.h>
21 #include <sys/stat.h>
22 
23 #include <algorithm>
24 #include <cctype>
25 #undef I
26 #undef arg
27 
29 #include "ddt/dataAcquisition.hpp"
30 #include "ddt/dataFile.hpp"
31 #include "ddt/ddtEncDecBiDim.hpp"
33 #include "ddt/ddtLogger.hpp"
34 #include "ddt/imageColor.hpp"
35 #include "ddt/imageCoords.hpp"
36 #include "ddt/imageError.hpp"
37 #include "ddt/imageIO.hpp"
38 #include "ddt/imageProc.hpp"
39 #include "ddt/imageStats.hpp"
40 
41 namespace ddt {
42 
50 class ImageBuffer {
51  public:
56  ImageBuffer();
57 
61  virtual ~ImageBuffer();
62 
68 
78  bool LoadFile(const std::string& file_name, int position = 0);
79 
86  bool LoadImageExtensionsAsOne(const std::string& file_name);
87 
93  bool LoadCPLImage(cpl_image* image);
94 
101  bool LoadActualConfigurationMap(std::string configuration_map_name);
102 
107  bool LoadConfigurationMaps(std::string configuration_map_source);
108 
112  void* get_ImageData();
113 
117  cpl_image* get_Image();
118 
122  cpl_table* get_BinaryTable();
123 
130  FitsExtension* get_FitsExtensionInfo(const int extension_number);
131 
137 
141  int get_ImageWidth();
142 
146  int get_ImageHeight();
147 
151  int get_NumberPlanes();
152 
156  int get_NumberExtensions();
157 
161  int get_NumberAxis();
162 
167  cpl_wcs* get_Wcs();
168 
173  cpl_propertylist* get_PropertyList();
174 
180  cpl_apertures* get_CircularObjects(double sigma);
181 
189  double get_PixelValue(int x_image, int y_image, int* is_rejected);
190 
196  bool get_AttachedToStream();
197 
203  bool get_LastSegment();
204 
211 
216  void AttachDataStream(std::string data_stream_id);
217 
222  void DetachDataStream(std::string data_stream_id);
223 
228 
229  protected:
234 
235  private:
239  void initialize();
240 
245  bool loadFileData();
246 
251  bool loadFileDataVector();
252 
259  bool loadFileDataImage(int plane_number);
260 
265  bool loadImageExtensionsAsOne();
266 
271  bool loadWCS();
272 
277  bool loadPropertyList();
278 
282  boost::signals2::connection connect(
283  const signal_t::slot_type& event_listener);
284 
288  void dataAvailable();
289 
295  void handleMultiLayer(ddt::DataSample* data_sample);
296 
302  void handleMultiDim(ddt::DataSample* data_sample);
303 
309  void handleBiDim(ddt::DataSample* data_sample);
310 
324  void handleSingleDim(ddt::DataSample* data_sample, int bytes_per_value,
325  std::string description, std::string dimension,
326  uint32_t data_type);
327 
332  void deleteCplImage(cpl_image** image);
333 
341  void applyConfigMap(ddt::DataSample* data_sample, cpl_image* config_map,
342  uint32_t data_type, int dataDim);
343 
347  ddt::DataAcquisition* data_acquisition;
348 
352  ddt::DataFile* data_file;
353 
357  ddt::ConfigurationMaps* configuration_maps;
358 
362  boost::signals2::connection connection;
363 
368  signal_t image_data_available;
369 
373  cpl_image* internal_image[2];
374  int current_index;
375  int next_index;
376 
380  cpl_vector* internal_vector;
381 
385  cpl_table* internal_binary_table;
386 
390  int actual_plane[2];
391 
395  cpl_wcs* wcs[2];
396 
400  int number_axis[2];
401 
405  int number_planes[2];
406 
410  int number_extensions[2];
411 
415  int image_width[2];
416 
420  int image_height[2];
421 
425  std::list<std::string> config_maps;
426 
430  cpl_image* actual_configuration_map;
431 
435  int actual_image_id;
436 
441  bool last_segment;
442 
451  bool first_segment_received;
452 
456  cpl_propertylist* property_list[2];
457 
461  std::mutex mtx;
462 };
463 
464 } // namespace ddt
465 
466 #endif /* IMAGEBUFFER_HPP */
imageProc.hpp
signal_t
boost::signals2::signal< void()> signal_t
Definition: ddtMemoryAccessor.hpp:79
ddt::ImageBuffer::LoadActualConfigurationMap
bool LoadActualConfigurationMap(std::string configuration_map_name)
Definition: imageBuffer.cpp:554
ddt::ImageBuffer::~ImageBuffer
virtual ~ImageBuffer()
Definition: imageBuffer.cpp:35
ddt::ImageBuffer::get_PropertyList
cpl_propertylist * get_PropertyList()
Definition: imageBuffer.cpp:771
ddt::DdtLogger
Definition: ddtLogger.hpp:71
ddt
Definition: ddtClient.hpp:36
ddt::ImageBuffer::logger
ddt::DdtLogger * logger
Definition: imageBuffer.hpp:233
ddt::ImageBuffer::LoadFile
bool LoadFile(const std::string &file_name, int position=0)
Definition: imageBuffer.cpp:588
ddt::FitsExtension
Definition: dataFile.hpp:41
ddt::ImageBuffer::LoadConfigurationMaps
bool LoadConfigurationMaps(std::string configuration_map_source)
Definition: imageBuffer.cpp:576
ddt::ImageBuffer::get_Wcs
cpl_wcs * get_Wcs()
Definition: imageBuffer.cpp:769
ddt::ImageBuffer::get_ImageWidth
int get_ImageWidth()
Definition: imageBuffer.cpp:996
ddt::ImageBuffer::get_LastSegment
bool get_LastSegment()
Definition: imageBuffer.cpp:1008
imageIO.hpp
imageColor.hpp
ddt::DataAcquisition
Definition: dataAcquisition.hpp:50
ddtEncDecBiDim.hpp
ddt::ImageBuffer::get_Image
cpl_image * get_Image()
Definition: imageBuffer.cpp:992
ddt::DataSample
Definition: ddtMemoryAccessor.hpp:174
imageError.hpp
ddt::ImageBuffer::LoadCPLImage
bool LoadCPLImage(cpl_image *image)
Definition: imageBuffer.cpp:719
ddt::ImageBuffer::set_logger
void set_logger(ddt::DdtLogger *logger)
Definition: imageBuffer.cpp:88
ddt::ImageBuffer::get_ImageData
void * get_ImageData()
ddt::ImageBuffer::get_AttachedToStream
bool get_AttachedToStream()
Definition: imageBuffer.cpp:947
ddt::ImageBuffer::get_NumberExtensions
int get_NumberExtensions()
Definition: imageBuffer.cpp:1002
dataAcquisition.hpp
ddt::ImageBuffer::get_BinaryTable
cpl_table * get_BinaryTable()
Definition: imageBuffer.cpp:994
ddt::ImageBuffer::get_PrimaryHDUInfo
FitsExtension get_PrimaryHDUInfo() const
Definition: imageBuffer.cpp:715
ddt::ImageBuffer::get_CircularObjects
cpl_apertures * get_CircularObjects(double sigma)
Definition: imageBuffer.cpp:775
ddt::DataFile
Definition: dataFile.hpp:76
imageStats.hpp
ddt::ImageBuffer
Definition: imageBuffer.hpp:50
ddt::ImageBuffer::ImageBuffer
ImageBuffer()
Definition: imageBuffer.cpp:33
ddt::ImageBuffer::get_PixelValue
double get_PixelValue(int x_image, int y_image, int *is_rejected)
Definition: imageBuffer.cpp:788
ddt::ImageBuffer::AttachDataStream
void AttachDataStream(std::string data_stream_id)
Definition: imageBuffer.cpp:922
configurationMaps.hpp
ddt::ImageBuffer::ImageDataAvailableSignal
signal_t * ImageDataAvailableSignal()
Definition: imageBuffer.cpp:918
ddtLogger.hpp
ddt::ImageBuffer::get_FirstSegmentReceived
bool get_FirstSegmentReceived()
Definition: imageBuffer.cpp:1010
ddtEncDecMultiDim.hpp
ddt::ConfigurationMaps
Definition: configurationMaps.hpp:37
dataFile.hpp
imageCoords.hpp
ddt::ImageBuffer::get_ImageHeight
int get_ImageHeight()
Definition: imageBuffer.cpp:998
ddt::ImageBuffer::LoadImageExtensionsAsOne
bool LoadImageExtensionsAsOne(const std::string &file_name)
Definition: imageBuffer.cpp:652
ddt::ImageBuffer::get_NumberPlanes
int get_NumberPlanes()
Definition: imageBuffer.cpp:1000
ddt::ImageBuffer::DetachDataStream
void DetachDataStream(std::string data_stream_id)
Definition: imageBuffer.cpp:943
ddt::ImageBuffer::get_NumberAxis
int get_NumberAxis()
Definition: imageBuffer.cpp:1006
ddt::ImageBuffer::get_FitsExtensionInfo
FitsExtension * get_FitsExtensionInfo(const int extension_number)
Definition: imageBuffer.cpp:711