World Ocean Simulation System (WOSS) library
ac-toolbox-shd-reader.h
Go to the documentation of this file.
1/* WOSS - World Ocean Simulation System -
2 *
3 * Copyright (C) 2009 2025 Federico Guerra
4 * and regents of the SIGNET lab, University of Padova
5 *
6 * Author: Federico Guerra - WOSS@guerra-tlc.com
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 as
10 * published by the Free Software Foundation;
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22
33#ifndef AC_TOOLBOX_RES_READER_DEFINITIONS_H
34#define AC_TOOLBOX_RES_READER_DEFINITIONS_H
35
36
37#include <fstream>
38#include <memory>
41#include "res-reader.h"
42
43
44namespace woss {
45
46
52 class ShdData {
53
54 public:
55
56 ShdData() = default;
57
58 ~ShdData() = default;
59
63 int32_t record_length = 0;
64
68 std::unique_ptr<char[]> plot_type = nullptr;
69
73 float frequency = 0.0;
74
78 int32_t Ntheta = 0;
79
83 std::unique_ptr<float[]> theta = nullptr;
84
88 int32_t Nsd;
89
93 std::unique_ptr<float[]> tx_depths = nullptr;
94
98 int32_t Nrd = 0;
99
103 std::unique_ptr<float[]> rx_depths = nullptr;
104
108 int32_t Nrr = 0;
109
113 std::unique_ptr<float[]> rx_ranges = nullptr;
114
118 int32_t Nrx_per_range = 0;
119
123 std::unique_ptr< std::complex<double>[] > press_values = nullptr;
124
128 void initialize() { plot_type.reset(); Ntheta = 0; theta.reset(); Nrx_per_range = 0; record_length = 0; tx_depths.reset();
129 rx_depths.reset(); rx_ranges.reset(); Nrr = 0; Nrd = 0; Nsd = 0; press_values.reset(); frequency = 0.0; }
130
139 int getPressureIndex( double tx_depth, double rx_depth, double rx_range, double theta = 0.0 ) const;
140
148 int getIndex( float value, float array[], int32_t array_size ) const;
149
150 };
151
158
159 public:
160
161 ShdData_v1() = default;
162
163 ~ShdData_v1() = default;
164
168 int32_t record_length = 0;
169
173 std::unique_ptr< char[] > plot_type = nullptr;
174
178 double frequency = 0.0;
179
180 int32_t Nfreq = 0;
181
182 std::unique_ptr< double[] > frequencies = nullptr;
183
187 int32_t Ntheta = 0;
188
192 std::unique_ptr< double[] > theta = nullptr;
193
197 int32_t Nsd = 0;
198
202 std::unique_ptr< float[] > tx_depths = nullptr;
203
207 int32_t Nrd = 0;
208
212 std::unique_ptr< float[] > rx_depths = nullptr;
213
217 int32_t Nrr = 0;
218
222 std::unique_ptr<double[]> rx_ranges = nullptr;
223
227 int32_t Nrx_per_range = 0;
228
229
230 double stabil_atten = 0.0;
231
235 std::unique_ptr< std::complex<double>[] > press_values = nullptr;
236
240 void initialize() { plot_type.reset(); frequency = 0.0; Nfreq = 0; frequencies.reset(); Ntheta = 0;
241 theta.reset(); Nrx_per_range = 0; record_length = 0; tx_depths.reset(); stabil_atten = 0.0;
242 rx_depths.reset(); rx_ranges.reset(); Nrr = 0; Nrd = 0; Nsd = 0; press_values.reset(); }
243
253 int getPressureIndex( double tx_freq, double tx_depth, double rx_depth, double rx_range, double theta = 0.0 ) const;
254
262 int getIndex( float value, float array[], int32_t array_size ) const;
263
271 int getIndex( double value, double array[], int32_t array_size ) const;
272 };
273
280 class ShdResReader : public ResReader {
281
282 public:
283
288 ShdResReader( const Woss& woss );
289
290 virtual ~ShdResReader() override = default;
291
296 virtual bool initialize() override;
297
308 virtual std::unique_ptr<Pressure> readAvgPressure( double frequency, double tx_depth, double start_rx_depth, double start_rx_range, double end_rx_depth, double end_rx_range ) override;
309
318 virtual std::unique_ptr<Pressure> readPressure( double frequency, double tx_depth, double rx_depth, double rx_range ) const override;
319
320
330 virtual std::unique_ptr<TimeArr> readTimeArr( double frequency, double tx_depth, double rx_depth, double rx_range ) const override;
331
332 protected:
333
338
343
347 std::ifstream file_reader;
348
353
358
360
362
364
366
368
369 std::complex<double> last_ret_value;
370
382 std::complex<double> readMapAvgPressure(double frequency, double tx_depth, double start_rx_depth, double start_rx_range, double end_rx_depth, double end_rx_range, double theta = 0.0 );
383
393 std::complex<double> accessMap(double frequency, double tx_depth, double rx_depth, double rx_range, double theta = 0.0 ) const;
394
399 bool getShdFile();
400
405 bool getShdHeader();
406
407 };
408
409}
410
411#endif /* AC_TOOLBOX_RES_READER_DEFINITIONS_H */
412
Abstract class for channel simulator result files processing.
Definition res-reader.h:52
class for storing data of any acoustic toolbox SHD file
Definition ac-toolbox-shd-reader.h:157
std::unique_ptr< double[]> rx_ranges
Definition ac-toolbox-shd-reader.h:222
double frequency
Definition ac-toolbox-shd-reader.h:178
std::unique_ptr< char[] > plot_type
Definition ac-toolbox-shd-reader.h:173
int32_t Nfreq
Definition ac-toolbox-shd-reader.h:180
std::unique_ptr< float[] > tx_depths
Definition ac-toolbox-shd-reader.h:202
int32_t Ntheta
Definition ac-toolbox-shd-reader.h:187
int32_t Nrx_per_range
Definition ac-toolbox-shd-reader.h:227
std::unique_ptr< double[] > frequencies
Definition ac-toolbox-shd-reader.h:182
ShdData_v1()=default
int32_t Nrr
Definition ac-toolbox-shd-reader.h:217
int32_t Nrd
Definition ac-toolbox-shd-reader.h:207
std::unique_ptr< double[] > theta
Definition ac-toolbox-shd-reader.h:192
int getPressureIndex(double tx_freq, double tx_depth, double rx_depth, double rx_range, double theta=0.0) const
Definition ac-toolbox-shd-reader.cpp:110
double stabil_atten
Definition ac-toolbox-shd-reader.h:230
int getIndex(float value, float array[], int32_t array_size) const
Definition ac-toolbox-shd-reader.cpp:76
std::unique_ptr< float[] > rx_depths
Definition ac-toolbox-shd-reader.h:212
int32_t record_length
Definition ac-toolbox-shd-reader.h:168
int32_t Nsd
Definition ac-toolbox-shd-reader.h:197
std::unique_ptr< std::complex< double >[] > press_values
Definition ac-toolbox-shd-reader.h:235
void initialize()
Definition ac-toolbox-shd-reader.h:240
~ShdData_v1()=default
class for storing data of any acoustic toolbox SHD file
Definition ac-toolbox-shd-reader.h:52
int32_t Nrd
Definition ac-toolbox-shd-reader.h:98
int getPressureIndex(double tx_depth, double rx_depth, double rx_range, double theta=0.0) const
Definition ac-toolbox-shd-reader.cpp:66
int32_t Nrx_per_range
Definition ac-toolbox-shd-reader.h:118
std::unique_ptr< float[]> rx_ranges
Definition ac-toolbox-shd-reader.h:113
std::unique_ptr< float[]> rx_depths
Definition ac-toolbox-shd-reader.h:103
std::unique_ptr< char[]> plot_type
Definition ac-toolbox-shd-reader.h:68
int getIndex(float value, float array[], int32_t array_size) const
Definition ac-toolbox-shd-reader.cpp:49
int32_t Nsd
Definition ac-toolbox-shd-reader.h:88
float frequency
Definition ac-toolbox-shd-reader.h:73
int32_t record_length
Definition ac-toolbox-shd-reader.h:63
int32_t Ntheta
Definition ac-toolbox-shd-reader.h:78
void initialize()
Definition ac-toolbox-shd-reader.h:128
int32_t Nrr
Definition ac-toolbox-shd-reader.h:108
ShdData()=default
std::unique_ptr< float[]> theta
Definition ac-toolbox-shd-reader.h:83
std::unique_ptr< std::complex< double >[] > press_values
Definition ac-toolbox-shd-reader.h:123
~ShdData()=default
std::unique_ptr< float[]> tx_depths
Definition ac-toolbox-shd-reader.h:93
Class for reading and manipulating results provided by any acoustic toolbox SHD file.
Definition ac-toolbox-shd-reader.h:280
virtual bool initialize() override
Definition ac-toolbox-shd-reader.cpp:142
double last_end_rx_depth
Definition ac-toolbox-shd-reader.h:365
ShdData shd_file
Definition ac-toolbox-shd-reader.h:352
virtual ~ShdResReader() override=default
virtual std::unique_ptr< Pressure > readAvgPressure(double frequency, double tx_depth, double start_rx_depth, double start_rx_range, double end_rx_depth, double end_rx_range) override
Definition ac-toolbox-shd-reader.cpp:451
double last_end_rx_range
Definition ac-toolbox-shd-reader.h:367
double last_start_rx_depth
Definition ac-toolbox-shd-reader.h:361
std::complex< double > last_ret_value
Definition ac-toolbox-shd-reader.h:369
double last_tx_depth
Definition ac-toolbox-shd-reader.h:359
std::ifstream file_reader
Definition ac-toolbox-shd-reader.h:347
virtual std::unique_ptr< Pressure > readPressure(double frequency, double tx_depth, double rx_depth, double rx_range) const override
Definition ac-toolbox-shd-reader.cpp:458
bool shd_header_collected
Definition ac-toolbox-shd-reader.h:337
virtual std::unique_ptr< TimeArr > readTimeArr(double frequency, double tx_depth, double rx_depth, double rx_range) const override
Definition ac-toolbox-shd-reader.cpp:465
std::complex< double > accessMap(double frequency, double tx_depth, double rx_depth, double rx_range, double theta=0.0) const
Definition ac-toolbox-shd-reader.cpp:472
bool getShdHeader()
Definition ac-toolbox-shd-reader.cpp:149
double last_start_rx_range
Definition ac-toolbox-shd-reader.h:363
bool shd_file_collected
Definition ac-toolbox-shd-reader.h:342
bool getShdFile()
Definition ac-toolbox-shd-reader.cpp:329
std::complex< double > readMapAvgPressure(double frequency, double tx_depth, double start_rx_depth, double start_rx_range, double end_rx_depth, double end_rx_range, double theta=0.0)
Definition ac-toolbox-shd-reader.cpp:488
ShdData_v1 shd_file_v1
Definition ac-toolbox-shd-reader.h:357
Abstract class that provides the interface for initializing and running a channel simulator.
Definition woss.h:76
Definition ac-toolbox-arr-asc-reader.h:44
Definitions and library for woss::Pressure class.
Provides the interface for woss::ResReader class.
Definitions and library for woss::TimeArr class.