ddt  1.0.0
ddtPublisherSimulator.hpp
Go to the documentation of this file.
1 
20 #ifndef DDTPUBLISHERSIMULATOR_HPP_
21 #define DDTPUBLISHERSIMULATOR_HPP_
22 
23 #include <cpl.h>
24 
25 #include <boost/bind/bind.hpp>
26 #include <boost/filesystem.hpp>
27 #include <boost/signals2/signal.hpp>
28 #include <random>
29 
31 #include "ddt/ddtDataPublisher.hpp"
35 #include "ddt/ddtEncDecImage2D.hpp"
36 #include "ddt/ddtEncDecImage3D.hpp"
37 #include "ddt/ddtLogger.hpp"
38 
39 namespace datatransfer = ::elt::ddt::datatransfer;
40 
41 using namespace ddt;
42 using namespace boost::filesystem;
43 
44 namespace ddt {
45 
52  MULTIDIM = 3,
56  UNSIGNEDINT32 = 7
57 };
58 
63  public:
68 
72  ~DdtPublisherSimulator() final;
73 
78  int Run();
79 
83  bool Init(const int argc, char** argv);
84 
89  int RunImageTransfer();
90 
95  int RunOscilloscopeTransfer();
96 
101  int RunMultiDimensionalArrayTransfer();
102 
107  int RunNumericalSampleArrayTransfer();
108 
113  int RunSegmentedImageTransfer();
114 
120  int RunUnsignedIntegerTransfer(const unsigned int numBits);
121 
122  private:
123  DdtLogger* logger;
124  CommandLineParserBuilder* builder;
125 
126  std::string broker_uri;
127  std::string data_stream_identifier;
128  int publishing_interval;
129  int num_samples_in_buffer;
130  std::string image_folder;
131  int mode;
132  bool checksum;
133 
134  const int LATENCY = 10000;
135  const int DEADLINE = 10;
136 
142  bool CheckBytesPerPixel(std::vector<std::string>& file_list);
143 
144  void DetermineBytesPerPixelAndDataType(
145  const cpl_propertylist* const property_list, const cpl_image* const image,
146  int* const bytes_per_pixel, uint32_t* const data_type,
147  cpl_type* const cplImageType);
148 
149  bool GetSimulationData(std::vector<std::string>& file_list,
150  std::vector<cpl_image*>& images);
151 
152  void FillDataVectors(std::vector<std::vector<uint8_t>>& datavecs,
153  int& max_sample_size, std::vector<cpl_image*>& images,
154  const int num_images, const cpl_type cplImageType,
155  const int bytes_per_pixel) const;
156 
157  void FillDataVectorInt(std::vector<std::vector<uint8_t>>& datavecs,
158  cpl_image* const image, const int vec_elems,
159  const int bytes_per_pixel) const;
160 
161  void FillDataVectorFloat(std::vector<std::vector<uint8_t>>& datavecs,
162  cpl_image* const image, const int vec_elems,
163  const int bytes_per_pixel) const;
164 
165  void FillDataVectorDouble(std::vector<std::vector<uint8_t>>& datavecs,
166  cpl_image* const image, const int vec_elems,
167  const int bytes_per_pixel) const;
168 
169  void FillMetaDataWCSItems(const cpl_propertylist* const property_list,
170  MetaDataElementsImage3D& meta_data_img_3d);
171 
172  void FillMetadataBase(MetaDataElementsImage3D& meta_data_img_3d,
173  const int bytes_per_pixel,
174  const uint32_t number_dimensions,
175  const bool complete_flag, const bool last_segment,
176  const bool byte_order_little_endian,
177  const uint32_t data_type) const;
178 
179  void FillMetadataBase(MetaDataElementsImage2D& meta_data_img_2d,
180  const int bytes_per_pixel,
181  const uint32_t number_dimensions,
182  const bool complete_flag,
183  const bool byte_order_little_endian,
184  const uint32_t data_type) const;
185 
186  void FillMetadataSpecific(MetaDataElementsImage3D& meta_data_img_3d,
187  const uint32_t number_pixels_x,
188  const uint32_t number_pixels_y,
189  const int32_t binning_factor_x,
190  const int32_t binning_factor_y,
191  const uint32_t number_layers,
192  const uint32_t item_size) const;
193 
194  void FillMetadataSpecific(MetaDataElementsImage2D& meta_data_img_2d,
195  const uint32_t number_pixels_x,
196  const uint32_t number_pixels_y,
197  const int32_t binning_factor_x,
198  const int32_t binning_factor_y,
199  const uint32_t number_chunks_x,
200  const uint32_t number_chunks_y) const;
201 
202  void CompleteMetadataSpecific(MetaDataElementsImage2D& meta_data_img_2d,
203  const uint32_t first_pixel_x,
204  const uint32_t first_pixel_y,
205  const bool last_segment,
206  const int32_t image_id) const;
207 
208  void PublishDataImageTransfer(std::vector<cpl_image*>& images,
209  const int bytes_per_pixel,
210  const uint32_t data_type, const int num_images,
211  const int max_sample_size,
212  MetaDataElementsImage3D& meta_data_img_3d,
213  std::vector<std::vector<uint8_t>>& datavecs);
214 
215  void PublishDataSegmentedImageTransfer(const int bytes_per_pixel,
216  const uint32_t number_pixels_x,
217  const uint32_t number_pixels_y,
218  const int vec_elems);
219 
220  void PublishDataMultiDimension(const uint32_t bytes_per_value,
221  const int number_dimensions,
222  const uint32_t data_type,
223  const std::string array_dimensions,
224  const int vec_elems,
225  const std::vector<uint8_t>& datavec,
226  std::vector<std::string>& descriptions);
227 
228  void PublishDataUnsignedIntegerTransfer(
229  const uint32_t bytes_per_value, const int dim1, const int dim2,
230  const int number_dimensions, const uint32_t data_type,
231  const int vec_elems, const std::vector<uint8_t>& datavec,
232  std::vector<std::string>& descriptions);
233 
234  cpl_propertylist* LoadPropertyList(const std::string file_name);
235 
236  void LogNoSimDataFolder();
237  void LogNoDirectory();
238  void LogNoSimDataFiles();
239 
240  int CreateAndRegPublisher(const int vec_elems);
241  void TransferData(DdtEncDecBinaryxD* const enc_dec_binary_xd,
242  const MetaDataElementsBinaryxD& meta_data_binary_xd,
243  const std::vector<uint8_t>& datavec,
244  const int32_t sample_id);
245  void InitMetaDataBinaryXD(MetaDataElementsBinaryxD* const meta_data_binary_xd,
246  const uint32_t bytes_per_pixel,
247  const uint32_t number_dimensions,
248  const bool byte_order_little_endian,
249  const bool complete_flag, const bool last_segment,
250  const uint32_t data_type,
251  const std::string array_dimensions) const;
252 
253  std::vector<uint8_t> GetDataVectorOscilloscope(const int dim1);
254  std::vector<uint8_t> GetDataVectorMultiDimension(const int dim1,
255  const int dim2,
256  const int dim3,
257  const int dim4);
258  void FillDataVectorNumericalSample(const int dim1, const int cnt,
259  std::vector<uint8_t>& datavec);
260  void FillDataVectorSegmentedImage(const uint32_t number_pixels_x,
261  const uint32_t number_pixels_y,
262  const int chunk_cnt_x,
263  const int chunk_cnt_y,
264  const uint32_t number_chunks_x,
265  std::vector<uint8_t>& datavec) const;
266 
267  std::unique_ptr<DdtDataPublisher> publisher;
268 };
269 
270 } // namespace ddt
271 
272 #endif /* DDTPUBLISHERSIMULATOR_HPP_ */
273 
Definition: ddtEncDecBinaryxD.hpp:48
Definition: commandLineParserBuilder.hpp:28
Definition: ddtDataPublisherApplication.hpp:28
Definition: ddtDataPublisher.hpp:38
Definition: ddtLogger.hpp:51
Definition: ddtPublisherSimulator.hpp:62
Builder for the command line parser.
Simulator for sending data. This is a base class for data publisher applications.
Data Publisher. This class provides the functionality for publisher applications to register / unregi...
Factory for DdtDataPublishers and DdtDataSubscribers. This class provides factory methods for creatin...
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...
Definition: ddtClient.hpp:39
@ OSCILLOSCOPE
Definition: ddtPublisherSimulator.hpp:51
@ MULTIDIM
Definition: ddtPublisherSimulator.hpp:52
@ SEGMENTEDIMAGE
Definition: ddtPublisherSimulator.hpp:54
@ CONFIGURATIONMAP
Definition: ddtPublisherSimulator.hpp:53
@ IMAGETRANSFER
Definition: ddtPublisherSimulator.hpp:50
PublisherModes
Definition: ddtPublisherSimulator.hpp:49
@ UNSIGNEDINT32
Definition: ddtPublisherSimulator.hpp:56
@ UNSIGNEDINT16
Definition: ddtPublisherSimulator.hpp:55
Definition: ddtEncDecBinaryxD.hpp:32
Definition: ddtEncDecImage2D.hpp:33
Definition: ddtEncDecImage3D.hpp:33