ddt 1.4.0
 
Loading...
Searching...
No Matches
imageBuffer.hpp
Go to the documentation of this file.
1
10
11#ifndef IMAGEBUFFER_HPP
12#define IMAGEBUFFER_HPP
13
14#include <cpl.h>
15#include <sys/stat.h>
16
17#include <algorithm>
18#include <cctype>
19#undef I
20#undef arg
21
24#include "ddt/dataFile.hpp"
28#include "ddt/ddtLogger.hpp"
29#include "ddt/imageColor.hpp"
30#include "ddt/imageCoords.hpp"
31#include "ddt/imageError.hpp"
32#include "ddt/imageIO.hpp"
33#include "ddt/imageProc.hpp"
34#include "ddt/imageStats.hpp"
36
37namespace ddt {
38
46 public:
51
55 virtual ~ImageBuffer();
56
61 void set_logger(ddt::DdtLogger* const in_logger);
62
72 bool LoadFile(const std::string& file_name, const int position = 0);
73
82 template <typename TPOINTER>
83 bool LoadPointer(TPOINTER* new_image_data, int nx, int ny);
84
93 bool LoadFilePlane(const std::string& file_name, const int position = 0,
94 const int plane = 0);
95
102 bool LoadImageExtensionsAsOne(const std::string& file_name);
103
109 bool LoadCPLImage(cpl_image* const image);
110
117 bool LoadActualConfigurationMap(const std::string configuration_map_name);
118
123 bool LoadConfigurationMaps(const std::string configuration_map_source);
124
129 bool LoadInformationMaps(const std::string information_map_source);
130
134 std::shared_ptr<DdtEncDec> get_MetadataSample();
135
139 cpl_image* get_Image();
140
144 std::string LastTimestampFromBuffer() const;
145
149 cpl_table* get_BinaryTable();
150
157 FitsExtension* get_FitsExtensionInfo(const int extension_number);
158
164
168 int get_ImageWidth() const;
169
173 int get_ImageHeight() const;
174
178 int get_NumberPlanes() const;
179
184 int get_CurrentPlane() const;
185
190 void set_CurrentPlane(const int plane);
191
196
200 int get_NumberAxis() const;
201
206 cpl_wcs* get_Wcs();
207
212 cpl_propertylist* get_PropertyList();
213
219 cpl_apertures* get_CircularObjects(const double sigma);
220
229 double get_PixelValue(const int x_image, const int y_image,
230 int* const is_rejected);
231
237 bool get_AttachedToStream() const;
238
244 bool get_LastSegment() const;
245
251 bool get_FirstSegmentReceived() const;
252
262 bool get_ConfigurationMap_Value(const double x, const double y,
263 double* const value) const;
264
272 std::list<std::string> get_TextInformation(const double x,
273 const double y) const;
274
279 std::vector<int> get_invalid_image_hdus() const;
280
285 void AttachDataStream(const std::string data_stream_id);
286
291 void DetachDataStream(const std::string data_stream_id);
292
298
303 void set_RetrieveStatsFlag(bool value);
304
309
315
316 void FreeResources();
317
318 // Add meta data items related to the WCS (World Coordinate System)
319 // information to the actual property list
320 static void AddWCSItemsToPropList(cpl_propertylist* const prop_list,
321 const std::shared_ptr<DdtEncDec> enc_dec);
322
323 // Determine the number of bits per pixel from the data type
324 static int32_t BitsPerPixelFromDataType(const uint32_t data_type);
325
326 protected:
331
332 private:
336 static constexpr size_t InternalBufferImageCount = 2;
337
341 void RotateBufferIndexes();
342
346 void ResetBufferIndexes();
347
351 void Initialize();
352
357 bool LoadFileData();
358
363 bool LoadFileDataVector();
364
371 bool LoadFileDataImage(const int plane_number);
372
378
383 bool LoadWCS();
384
389 bool LoadPropertyList();
390
391 bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecImage2D> enc_dec_2d);
392
393 bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecImage3D> enc_dec_3d);
394
395 bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecBinaryxD> enc_dec_xd);
396
397 bool AssignPropListAndWcs(cpl_propertylist* const prop_list);
398
402 boost::signals2::connection connect(const SignalT::slot_type& event_listener);
403
407 void DataAvailable();
408
416 void CheckByteOrder(const int topic_id, ddt::DataSample* const data_sample,
417 const std::vector<uint8_t> tmp_data);
418
431 void ChangeByteOrder(ddt::DataSample* const data_sample,
432 const int bytes_per_pixel,
433 const uint32_t data_type) const;
434
440 void HandleMultiLayer(ddt::DataSample* const data_sample);
441
447 void HandleMultiDim(ddt::DataSample* const data_sample);
448
454 void HandleBiDim(ddt::DataSample* const data_sample);
455
465 void HandleSingleDim(ddt::DataSample* const data_sample,
466 const std::string config_map_name,
467 const std::string dimension, const uint32_t data_type);
468
473 void DeleteCplImage(cpl_image** const image, const bool only_unwrap) const;
474
482 void ApplyConfigMap(ddt::DataSample* const data_sample,
483 const cpl_image* const config_map,
484 const uint32_t data_type, const int data_dim);
485
492 std::list<std::string> get_TextInformationForValue(const double value) const;
493
501 void CreateAndInitNewImage(const uint32_t complete_pixels_x,
502 const uint32_t complete_pixels_y,
503 const uint32_t data_type);
504
514 cpl_image* CreateNewImageFromDataSample(ddt::DataSample* const data_sample,
515 const int bytes_per_pixel,
516 const int number_pixels_x,
517 const int number_pixels_y,
518 const uint32_t data_type,
519 bool* const only_unwrap);
520
526 cpl_image* CreateNewImageFromLastImage(const int number_pixels_x,
527 const int number_pixels_y);
528
536 void CopySegmentToImage(const cpl_image* const tmp_image,
537 const uint32_t first_pixel_x,
538 const uint32_t first_pixel_y);
539
549 void FreeAndCreateNew(const uint32_t complete_pixels_x,
550 const uint32_t complete_pixels_y,
551 const uint32_t data_type, const uint32_t image_id,
552 const bool complete_flag);
553
554 void LogMetaDataBase(const std::shared_ptr<DdtEncDec> enc_dec);
555
559 void LogMetaDataImage2D(const std::shared_ptr<DdtEncDecImage2D> enc_dec_2d);
560
564 void LogMetaDataImage3D(const std::shared_ptr<DdtEncDecImage3D> enc_dec_3d);
565
569 void LogMetaDataBinaryxD(const std::shared_ptr<DdtEncDecBinaryxD> enc_dec_xd);
570
574 std::unique_ptr<ddt::DataAcquisition> data_acquisition;
575
579 std::unique_ptr<ddt::DataFile> data_file;
580
585 std::unique_ptr<ddt::ConfigurationMaps> configuration_maps;
586
590 std::unique_ptr<ddt::InformationMaps> information_maps;
591
595 boost::signals2::connection connection;
596
601 SignalT image_data_available;
602
606 cpl_image* internal_image[InternalBufferImageCount];
607 size_t current_index;
608 size_t next_index;
609
613 cpl_vector* internal_vector;
614
618 cpl_table* internal_binary_table;
619
623 int actual_plane[InternalBufferImageCount];
624
628 cpl_wcs* wcs[InternalBufferImageCount];
629
633 int number_axis[InternalBufferImageCount];
634
638 int number_planes[InternalBufferImageCount];
639
643 int current_plane;
644
648 int number_extensions[InternalBufferImageCount];
649
653 int image_width[InternalBufferImageCount];
654
658 int image_height[InternalBufferImageCount];
659
660 bool unwrap_only[InternalBufferImageCount];
661
665 std::list<std::string> config_maps;
666
670 cpl_image* actual_configuration_map;
671
675 std::string actual_configuration;
676
680 boost::property_tree::ptree* actual_information_map;
681
685 std::string actual_configuration_map_source;
686
690 std::string actual_information_map_source;
691
695 int actual_image_id;
696
700 std::string last_timestamp;
701
706 bool last_segment;
707
716 bool first_segment_received;
717
718 /*
719 * Flag indicating if a new image cycle has started
720 */
721 bool new_image_cycle;
722
727 bool copy_last_segment;
728
732 uint32_t last_first_pixel_x;
733
737 uint32_t last_first_pixel_y;
738
742 cpl_propertylist* property_list[InternalBufferImageCount];
743
747 std::shared_ptr<DdtEncDec> encdec_image_data;
748
752 std::mutex mtx;
753};
754
755} // namespace ddt
756
757#endif /* IMAGEBUFFER_HPP */
boost::signals2::signal< void(ddt::DdtDataTransferLib::ConnectionState)> ConnectionStateSignalT
Definition dataAcquisition.hpp:50
Definition ddtLogger.hpp:43
DataAcquisition::ConnectionStateSignalT * ConnectionStateSignal()
Definition imageBuffer.cpp:1748
static int32_t BitsPerPixelFromDataType(const uint32_t data_type)
Definition imageBuffer.cpp:1673
cpl_apertures * get_CircularObjects(const double sigma)
Definition imageBuffer.cpp:1262
cpl_propertylist * get_PropertyList()
Definition imageBuffer.cpp:1257
int get_ImageWidth() const
Definition imageBuffer.cpp:1868
void AttachDataStream(const std::string data_stream_id)
Definition imageBuffer.cpp:1753
bool LoadFile(const std::string &file_name, const int position=0)
Definition imageBuffer.cpp:990
bool LoadInformationMaps(const std::string information_map_source)
Definition imageBuffer.cpp:966
ddt::DdtLogger * logger
Definition imageBuffer.hpp:330
void set_logger(ddt::DdtLogger *const in_logger)
Definition imageBuffer.cpp:88
double get_PixelValue(const int x_image, const int y_image, int *const is_rejected)
Definition imageBuffer.cpp:1277
void set_CurrentPlane(const int plane)
Definition imageBuffer.cpp:1882
bool LoadConfigurationMaps(const std::string configuration_map_source)
Definition imageBuffer.cpp:951
FitsExtension * get_FitsExtensionInfo(const int extension_number)
Definition imageBuffer.cpp:1190
int get_NumberExtensions()
Definition imageBuffer.cpp:1885
SignalT * ImageDataAvailableSignal()
Definition imageBuffer.cpp:1744
int get_CurrentPlane() const
Definition imageBuffer.cpp:1879
ddt::DdtStatistics * get_DataStatistics()
Definition imageBuffer.cpp:1794
bool LoadImageExtensionsAsOne(const std::string &file_name)
Definition imageBuffer.cpp:1132
bool get_LastSegment() const
Definition imageBuffer.cpp:1894
std::shared_ptr< DdtEncDec > get_MetadataSample()
Definition imageBuffer.cpp:1859
void FreeResources()
Definition imageBuffer.cpp:898
bool LoadFilePlane(const std::string &file_name, const int position=0, const int plane=0)
Definition imageBuffer.cpp:982
ImageBuffer()
Definition imageBuffer.cpp:70
bool get_ConfigurationMap_Value(const double x, const double y, double *const value) const
Definition imageBuffer.cpp:1297
bool LoadCPLImage(cpl_image *const image)
Definition imageBuffer.cpp:1199
cpl_wcs * get_Wcs()
Definition imageBuffer.cpp:1254
bool LoadPointer(TPOINTER *new_image_data, int nx, int ny)
Definition imageBuffer.cpp:1067
int get_NumberAxis() const
Definition imageBuffer.cpp:1891
static void AddWCSItemsToPropList(cpl_propertylist *const prop_list, const std::shared_ptr< DdtEncDec > enc_dec)
Definition imageBuffer.cpp:1643
std::string LastTimestampFromBuffer() const
Definition imageBuffer.cpp:431
int get_NumberPlanes() const
Definition imageBuffer.cpp:1874
virtual ~ImageBuffer()
Definition imageBuffer.cpp:72
bool LoadActualConfigurationMap(const std::string configuration_map_name)
Definition imageBuffer.cpp:927
std::vector< int > get_invalid_image_hdus() const
Definition imageBuffer.cpp:1378
cpl_image * get_Image()
Definition imageBuffer.cpp:1862
FitsExtension get_PrimaryHDUInfo() const
Definition imageBuffer.cpp:1194
cpl_table * get_BinaryTable()
Definition imageBuffer.cpp:1865
bool get_AttachedToStream() const
Definition imageBuffer.cpp:1788
std::list< std::string > get_TextInformation(const double x, const double y) const
Definition imageBuffer.cpp:1316
int get_ImageHeight() const
Definition imageBuffer.cpp:1871
void DetachDataStream(const std::string data_stream_id)
Definition imageBuffer.cpp:1782
bool get_FirstSegmentReceived() const
Definition imageBuffer.cpp:1897
void set_RetrieveStatsFlag(bool value)
Definition imageBuffer.cpp:1799
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:73
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:32
Definition ddtMemoryAccessor.hpp:175
Definition ddtStatistics.hpp:18
Definition dataFile.hpp:30