ddt 1.2.1
Loading...
Searching...
No Matches
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
33#include "ddt/dataFile.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"
45
46namespace ddt {
47
55 public:
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 template <typename TPOINTER>
92 bool LoadPointer(TPOINTER* new_image_data, int nx, int ny);
93
102 bool LoadFilePlane(const std::string& file_name, const int position = 0,
103 const int plane = 0);
104
111 bool LoadImageExtensionsAsOne(const std::string& file_name);
112
118 bool LoadCPLImage(cpl_image* const image);
119
126 bool LoadActualConfigurationMap(const std::string configuration_map_name);
127
132 bool LoadConfigurationMaps(const std::string configuration_map_source);
133
138 bool LoadInformationMaps(const std::string information_map_source);
139
144
148 std::shared_ptr<DdtEncDec> get_MetadataSample();
149
153 cpl_image* get_Image();
154
158 std::string LastTimestampFromBuffer() const;
159
163 cpl_table* get_BinaryTable();
164
171 FitsExtension* get_FitsExtensionInfo(const int extension_number);
172
178
182 int get_ImageWidth() const;
183
187 int get_ImageHeight() const;
188
192 int get_NumberPlanes() const;
193
198 int get_CurrentPlane() const;
199
204 void set_CurrentPlane(const int plane);
205
210
214 int get_NumberAxis() const;
215
220 cpl_wcs* get_Wcs();
221
226 cpl_propertylist* get_PropertyList();
227
233 cpl_apertures* get_CircularObjects(const double sigma);
234
243 double get_PixelValue(const int x_image, const int y_image,
244 int* const is_rejected);
245
251 bool get_AttachedToStream() const;
252
258 bool get_LastSegment() const;
259
265 bool get_FirstSegmentReceived() const;
266
276 bool get_ConfigurationMap_Value(const double x, const double y,
277 double* const value) const;
278
286 std::list<std::string> get_TextInformation(const double x,
287 const double y) const;
288
293 std::vector<int> get_invalid_image_hdus() const;
294
299 void AttachDataStream(const std::string data_stream_id);
300
305 void DetachDataStream(const std::string data_stream_id);
306
312
317 void set_RetrieveStatsFlag(bool value);
318
323
324 void FreeResources();
325
326 // Add meta data items related to the WCS (World Coordinate System)
327 // information to the actual property list
328 static void AddWCSItemsToPropList(cpl_propertylist* const prop_list,
329 const std::shared_ptr<DdtEncDec> enc_dec);
330
331 // Determine the number of bits per pixel from the data type
332 static int32_t BitsPerPixelFromDataType(const uint32_t data_type);
333
334 protected:
339
340 private:
344 void Initialize();
345
350 bool LoadFileData();
351
356 bool LoadFileDataVector();
357
364 bool LoadFileDataImage(const int plane_number);
365
370 bool LoadImageExtensionsAsOne();
371
376 bool LoadWCS();
377
382 bool LoadPropertyList();
383
384 bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecImage2D> enc_dec_2d);
385
386 bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecImage3D> enc_dec_3d);
387
388 bool LoadWCSFromMetadata(const std::shared_ptr<DdtEncDecBinaryxD> enc_dec_xd);
389
390 bool AssignPropListAndWcs(cpl_propertylist* const prop_list);
391
395 boost::signals2::connection connect(const SignalT::slot_type& event_listener);
396
400 void DataAvailable();
401
409 void CheckByteOrder(const int topic_id, ddt::DataSample* const data_sample,
410 const std::vector<uint8_t> tmp_data);
411
424 void ChangeByteOrder(ddt::DataSample* const data_sample,
425 const int bytes_per_pixel,
426 const uint32_t data_type) const;
427
433 void HandleMultiLayer(ddt::DataSample* const data_sample);
434
440 void HandleMultiDim(ddt::DataSample* const data_sample);
441
447 void HandleBiDim(ddt::DataSample* const data_sample);
448
458 void HandleSingleDim(ddt::DataSample* const data_sample,
459 const std::string config_map_name,
460 const std::string dimension, const uint32_t data_type);
461
466 void DeleteCplImage(cpl_image** const image, const bool only_unwrap) const;
467
475 void ApplyConfigMap(ddt::DataSample* const data_sample,
476 const cpl_image* const config_map,
477 const uint32_t data_type, const int data_dim);
478
485 std::list<std::string> get_TextInformationForValue(const double value) const;
486
494 void CreateAndInitNewImage(const uint32_t complete_pixels_x,
495 const uint32_t complete_pixels_y,
496 const uint32_t data_type);
497
507 cpl_image* CreateNewImageFromDataSample(ddt::DataSample* const data_sample,
508 const int bytes_per_pixel,
509 const int number_pixels_x,
510 const int number_pixels_y,
511 const uint32_t data_type,
512 bool* const only_unwrap);
513
519 cpl_image* CreateNewImageFromLastImage(const int number_pixels_x,
520 const int number_pixels_y);
521
529 void CopySegmentToImage(const cpl_image* const tmp_image,
530 const uint32_t first_pixel_x,
531 const uint32_t first_pixel_y);
532
542 void FreeAndCreateNew(const uint32_t complete_pixels_x,
543 const uint32_t complete_pixels_y,
544 const uint32_t data_type, const uint32_t image_id,
545 const bool complete_flag);
546
547 void LogMetaDataBase(const std::shared_ptr<DdtEncDec> enc_dec);
548
552 void LogMetaDataImage2D(const std::shared_ptr<DdtEncDecImage2D> enc_dec_2d);
553
557 void LogMetaDataImage3D(const std::shared_ptr<DdtEncDecImage3D> enc_dec_3d);
558
562 void LogMetaDataBinaryxD(const std::shared_ptr<DdtEncDecBinaryxD> enc_dec_xd);
563
567 ddt::DataAcquisition* data_acquisition;
568
572 ddt::DataFile* data_file;
573
578 ddt::ConfigurationMaps* configuration_maps;
579
583 ddt::InformationMaps* information_maps;
584
588 boost::signals2::connection connection;
589
594 SignalT image_data_available;
595
599 cpl_image* internal_image[2];
600 int current_index;
601 int next_index;
602
606 cpl_vector* internal_vector;
607
611 cpl_table* internal_binary_table;
612
616 int actual_plane[2];
617
621 cpl_wcs* wcs[2];
622
626 int number_axis[2];
627
631 int number_planes[2];
632
636 int current_plane;
637
641 int number_extensions[2];
642
646 int image_width[2];
647
651 int image_height[2];
652
653 bool unwrap_only[2];
654
658 std::list<std::string> config_maps;
659
663 cpl_image* actual_configuration_map;
664
668 std::string actual_configuration;
669
673 boost::property_tree::ptree* actual_information_map;
674
678 std::string actual_configuration_map_source;
679
683 std::string actual_information_map_source;
684
688 int actual_image_id;
689
693 std::string last_timestamp;
694
699 bool last_segment;
700
709 bool first_segment_received;
710
711 /*
712 * Flag indicating if a new image cycle has started
713 */
714 bool new_image_cycle;
715
720 bool copy_last_segment;
721
725 uint32_t last_first_pixel_x;
726
730 uint32_t last_first_pixel_y;
731
735 cpl_propertylist* property_list[2];
736
740 std::shared_ptr<DdtEncDec> encdec_image_data;
741
745 std::mutex mtx;
746 std::mutex mtx2;
747};
748
749} // namespace ddt
750
751#endif /* IMAGEBUFFER_HPP */
752
Definition configurationMaps.hpp:39
Definition dataAcquisition.hpp:52
Definition dataFile.hpp:78
Definition ddtLogger.hpp:51
Definition imageBuffer.hpp:54
void * get_ImageData()
static int32_t BitsPerPixelFromDataType(const uint32_t data_type)
Definition imageBuffer.cpp:1688
cpl_apertures * get_CircularObjects(const double sigma)
Definition imageBuffer.cpp:1297
cpl_propertylist * get_PropertyList()
Definition imageBuffer.cpp:1292
int get_ImageWidth() const
Definition imageBuffer.cpp:1880
void AttachDataStream(const std::string data_stream_id)
Definition imageBuffer.cpp:1766
bool LoadFile(const std::string &file_name, const int position=0)
Definition imageBuffer.cpp:1016
bool LoadInformationMaps(const std::string information_map_source)
Definition imageBuffer.cpp:992
ddt::DdtLogger * logger
Definition imageBuffer.hpp:338
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:1312
void set_CurrentPlane(const int plane)
Definition imageBuffer.cpp:1894
bool LoadConfigurationMaps(const std::string configuration_map_source)
Definition imageBuffer.cpp:977
FitsExtension * get_FitsExtensionInfo(const int extension_number)
Definition imageBuffer.cpp:1227
int get_NumberExtensions()
Definition imageBuffer.cpp:1897
SignalT * ImageDataAvailableSignal()
Definition imageBuffer.cpp:1761
int get_CurrentPlane() const
Definition imageBuffer.cpp:1891
ddt::DdtStatistics * get_DataStatistics()
Definition imageBuffer.cpp:1805
bool LoadImageExtensionsAsOne(const std::string &file_name)
Definition imageBuffer.cpp:1167
bool get_LastSegment() const
Definition imageBuffer.cpp:1905
std::shared_ptr< DdtEncDec > get_MetadataSample()
Definition imageBuffer.cpp:1871
void FreeResources()
Definition imageBuffer.cpp:922
bool LoadFilePlane(const std::string &file_name, const int position=0, const int plane=0)
Definition imageBuffer.cpp:1008
ImageBuffer()
Definition imageBuffer.cpp:79
bool get_ConfigurationMap_Value(const double x, const double y, double *const value) const
Definition imageBuffer.cpp:1328
bool LoadCPLImage(cpl_image *const image)
Definition imageBuffer.cpp:1236
cpl_wcs * get_Wcs()
Definition imageBuffer.cpp:1289
bool LoadPointer(TPOINTER *new_image_data, int nx, int ny)
Definition imageBuffer.cpp:1096
int get_NumberAxis() const
Definition imageBuffer.cpp:1902
static void AddWCSItemsToPropList(cpl_propertylist *const prop_list, const std::shared_ptr< DdtEncDec > enc_dec)
Definition imageBuffer.cpp:1658
std::string LastTimestampFromBuffer() const
Definition imageBuffer.cpp:488
int get_NumberPlanes() const
Definition imageBuffer.cpp:1886
virtual ~ImageBuffer()
Definition imageBuffer.cpp:81
bool LoadActualConfigurationMap(const std::string configuration_map_name)
Definition imageBuffer.cpp:953
std::vector< int > get_invalid_image_hdus() const
Definition imageBuffer.cpp:1409
cpl_image * get_Image()
Definition imageBuffer.cpp:1874
FitsExtension get_PrimaryHDUInfo() const
Definition imageBuffer.cpp:1231
cpl_table * get_BinaryTable()
Definition imageBuffer.cpp:1877
bool get_AttachedToStream() const
Definition imageBuffer.cpp:1800
std::list< std::string > get_TextInformation(const double x, const double y) const
Definition imageBuffer.cpp:1347
int get_ImageHeight() const
Definition imageBuffer.cpp:1883
void DetachDataStream(const std::string data_stream_id)
Definition imageBuffer.cpp:1795
bool get_FirstSegmentReceived() const
Definition imageBuffer.cpp:1908
void set_RetrieveStatsFlag(bool value)
Definition imageBuffer.cpp:1809
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 ddtStatistics.hpp:27
Definition dataFile.hpp:39