World Ocean Simulation System (WOSS) library
transducer-definitions.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 WOSS_TRANSDUCER_DEFINITIONS_H
34#define WOSS_TRANSDUCER_DEFINITIONS_H
35
36
37#include <string>
38#include <iostream>
39#include <complex>
40#include <map>
41#include <cmath>
42#include <memory>
44
45
46namespace woss {
47
48 class CoordZ;
49
50 static constexpr inline double BEAM_PATTERN_CUSTOM_BEAM_PRECISION = (1.0);
51
52 static constexpr inline double CONDUCTANCE_CUSTOM_FREQUENCY_PRECISION = (1.0);
53
54 static constexpr inline double TVR_CUSTOM_FREQUENCY_PRECISION = (1.0);
55
56 static constexpr inline double OCV_CUSTOM_FREQUENCY_PRECISION = (1.0);
57
58 static constexpr inline double TRANSDUCER_NOT_SET = (-1000);
59
65 class Transducer {
66
67 protected:
68
72 using BeamPowerMap = std::map< PDouble, double >;
73 using BPMIter = BeamPowerMap::iterator;
74 using BPMRIter = BeamPowerMap::reverse_iterator;
75 using BPMCIter = BeamPowerMap::const_iterator;
76 using BPMCRIter = BeamPowerMap::const_reverse_iterator;
77
81 using ConductanceMap = std::map< PDouble, double >;
82 using CMIter = ConductanceMap::iterator;
83 using CMRIter = ConductanceMap::reverse_iterator;
84 using CMCIter = ConductanceMap::const_iterator;
85 using CMCRIter = ConductanceMap::const_reverse_iterator;
86
90 using TVRMap = std::map< PDouble, double >;
91 using TVRMIter = TVRMap::iterator;
92 using TVRMRIter = TVRMap::reverse_iterator;
93 using TVRMCIter = TVRMap::const_iterator;
94 using TVRMCRIter = TVRMap::const_reverse_iterator;
95
99 using OCVMap = std::map< PDouble, double >;
100 using OCVMIter = OCVMap::iterator;
101 using OCVMRIter = OCVMap::reverse_iterator;
102 using OCVMCIter = OCVMap::const_iterator;
103 using OCVMCRIter = OCVMap::const_reverse_iterator;
104
105 public:
106
114 Transducer( long double beam_precision = BEAM_PATTERN_CUSTOM_BEAM_PRECISION, long double conduct_precison = CONDUCTANCE_CUSTOM_FREQUENCY_PRECISION,
115 long double tvr_precision = TVR_CUSTOM_FREQUENCY_PRECISION, long double ocv_precision = OCV_CUSTOM_FREQUENCY_PRECISION );
116
117 Transducer( const Transducer& copy ) = default;
118
119 Transducer( Transducer&& tmp ) = default;
120
133
134 virtual ~Transducer() = default;
135
148 virtual std::unique_ptr<Transducer> create( long double beam_precision = BEAM_PATTERN_CUSTOM_BEAM_PRECISION, long double conduct_precison = CONDUCTANCE_CUSTOM_FREQUENCY_PRECISION,
149 long double tvr_precision = TVR_CUSTOM_FREQUENCY_PRECISION, long double ocv_precision = OCV_CUSTOM_FREQUENCY_PRECISION ) const;
150
151
164 virtual std::unique_ptr<Transducer> create( BeamPowerMap& beam_map, ConductanceMap& conductance_map, TVRMap& tvr_map, OCVMap& ocv_map ) const;
165
170 virtual std::unique_ptr<Transducer> clone() const;
171
176 virtual bool isValid() const;
177
178
184 Transducer& beampattern_rotate( double angle );
185
191 Transducer& beampattern_sum( double value );
192
198 Transducer& beampattern_multiply( double value );
199
206 virtual double getSPL( double frequency, double power ) const;
207
213 double getMaxSPL( double frequency ) const;
214
221 virtual double getPowerFromSPL( double frequency, double spl ) const;
222
229 bool beampattern_insert( double angle, double power );
230
237 Transducer& beampattern_replace( double angle, double power );
238
244 BPMCIter beampattern_find( double angle ) const;
245
251 Transducer& beampattern_erase( double angle );
252
257 int beampattern_size() const;
258
263 bool beampattern_empty() const;
264
270
276
282
288
294
300 BPMCIter beampattern_lower_bound( double angle ) const;
301
307 BPMCIter beampattern_upper_bound( double angle ) const;
308
315 bool conductance_insert( double frequency, double conductance );
316
323 bool conductance_insert( double frequency, const std::complex<double>& impedance );
324
331 Transducer& conductance_replace( double frequency, double conductance );
332
339 Transducer& conductance_replace( double frequency, const std::complex<double>& impedance );
340
346 CMCIter conductance_find( double frequency ) const;
347
353 Transducer& conductance_erase( double frequency );
354
359 int conductance_size() const;
360
365 bool conductance_empty() const;
366
372
378
383 CMCIter conductance_end() const;
384
390
396
402 CMCIter conductance_lower_bound( double frequency ) const;
403
409 CMCIter conductance_upper_bound( double frequency ) const;
410
417 bool tvr_insert( double frequency, double tvr );
418
425 Transducer& tvr_replace( double frequency, double tvr );
426
432 TVRMCIter tvr_find( double frequency ) const;
433
439 Transducer& tvr_erase( double frequency );
440
445 int tvr_size() const;
446
451 bool tvr_empty() const;
452
458
463 TVRMCIter tvr_begin() const;
464
469 TVRMCIter tvr_end() const;
470
475 TVRMCRIter tvr_rbegin() const;
476
481 TVRMCRIter tvr_rend() const;
482
488 TVRMCIter tvr_lower_bound( double frequency ) const;
489
495 TVRMCIter tvr_upper_bound( double frequency ) const;
496
503 bool ocv_insert( double frequency, double ocv );
504
511 Transducer& ocv_replace( double frequency, double ocv );
512
518 OCVMCIter ocv_find( double frequency ) const;
519
525 Transducer& ocv_erase( double frequency );
526
531 int ocv_size() const;
532
537 bool ocv_empty() const;
538
544
549 OCVMCIter ocv_begin() const;
550
555 OCVMCIter ocv_end() const;
556
561 OCVMCRIter ocv_rbegin() const;
562
567 OCVMCRIter ocv_rend() const;
568
574 OCVMCIter ocv_lower_bound( double frequency ) const;
575
581 OCVMCIter ocv_upper_bound( double frequency ) const;
582
588
594 virtual bool import( std::istream& stream_in );
595
601 virtual bool importBinary( std::fstream& stream_in );
602
611 bool writeVertBeamPattern( std::ostream& stream_out, const CoordZ& tx, const CoordZ& rx, double init_bearing, double vert_rot = 0, double horiz_rot = 0, double mult_costant = 1, double add_costant = 0 ) const;
612
618 bool writeSPL( std::ostream& stream_out, double frequency_step, double power ) const;
619
625 virtual bool write( std::ostream& stream_out ) const;
626
632 virtual bool writeBinary( std::fstream& file_out ) const;
633
639 Transducer& setMaxPower( double power );
640
646 Transducer& setDutyCycle( double cycle );
647
653 Transducer& setResonanceFrequency( double frequency );
654
660 Transducer& setBandwith3dB( double frequency );
661
667 Transducer& setTypeName( const std::string& name );
668
674 virtual Transducer& setBeamPrecision( long double prec );
675
681 virtual Transducer& setTVRPrecision( long double prec );
682
688 virtual Transducer& setOCVPrecision( long double prec );
689
695 virtual Transducer& setConductancePrecision( long double prec );
696
701 bool hasToroidalSymmetry() const;
702
707 bool hasConicalSymmetry() const;
708
713 double getMaxPower() const;
714
719 double getDutyCycle() const;
720
725 double getResonanceFrequency() const;
726
731 double getBandwith3dB() const;
732
737 std::string getTypeName() const;
738
743 long double getBeamPrecision() const;
744
749 long double getTVRPrecision() const;
750
755 long double getOCVPrecision() const;
756
761 long double getConductancePrecision() const;
762
763 Transducer& operator=( const Transducer& copy ) = default;
764
765 Transducer& operator=( Transducer&& tmp ) = default;
766
773 friend bool operator==( const Transducer& left, const Transducer& right );
774
781 friend bool operator!=( const Transducer& left, const Transducer& right );
782
789 friend std::ostream& operator<<( std::ostream& os, const Transducer& instance );
790
797 friend std::ostream& operator>>( std::istream& is, const Transducer& instance );
798
803 static void setDebug( bool flag ) { debug = flag; }
804
805 protected:
806
807 static const std::string conical_string;
808
809 static const std::string toroidal_string;
810
814 static bool debug;
815
820
825
830
834 double max_power;
835
840
844 long double beam_precision;
845
850
854 long double tvr_precision;
855
859 long double ocv_precision;
860
864 std::string type_name;
865
870
875
880
885
891 virtual double normalizeAngle( double angle ) const;
892
900 virtual double getValue( double frequency, const std::map< PDouble, double >& map, long double precision, bool use_linear = false, double costant = 20.0 ) const;
901
906 virtual void beampattern_sum( double value, BeamPowerMap& map );
907
912 virtual void beampattern_multiply( double value, BeamPowerMap& map );
913
918 virtual void beampattern_rotate( double angle, BeamPowerMap& map );
919
920
929 virtual bool import( std::istream& stream_in, std::map< PDouble, double >& map, long double precision, bool is_angle = false );
930
939 virtual bool importBinary( std::fstream& file_in, std::map< PDouble, double >& map, long double precision, bool is_angle = false );
940
947 virtual bool write( std::ostream& stream_out, const std::map< PDouble, double >& map ) const;
948
955 virtual bool writeBinary( std::fstream& file_out, const std::map< PDouble, double >& map ) const;
956
957 virtual const std::string& getSymmetryString() const;
958
959 };
960
961
963 //inline functions
964 inline Transducer& Transducer::setMaxPower( double power ) {
965 max_power = power;
966 return *this;
967 }
968
969 inline Transducer& Transducer::setDutyCycle( double cycle ) {
970 duty_cycle = cycle;
971 return *this;
972 }
973
974 inline Transducer& Transducer::setResonanceFrequency( double frequency ) {
975 resonance_frequency = frequency;
976 return *this;
977 }
978
980 bandwith_3db = bw;
981 return *this;
982 }
983
984 inline Transducer& Transducer::setTypeName( const std::string& name ) {
985 type_name = name;
986 return *this;
987 }
988
990 return !has_conical_symmetry;
991 }
992
993
994 inline bool Transducer::hasConicalSymmetry() const {
996 }
997
998 inline double Transducer::getMaxPower() const {
999 return max_power;
1000 }
1001
1002 inline double Transducer::getDutyCycle() const {
1003 return duty_cycle;
1004 }
1005
1007 return resonance_frequency;
1008 }
1009
1010 inline double Transducer::getBandwith3dB() const {
1011 return bandwith_3db;
1012 }
1013
1014 inline std::string Transducer::getTypeName() const {
1015 return type_name;
1016 }
1017
1018 inline double Transducer::getMaxSPL( double frequency ) const {
1019 return getSPL( frequency, max_power );
1020 }
1021
1024 return *this;
1025 }
1026
1027 inline Transducer& Transducer::beampattern_sum( double value ) {
1029 return *this;
1030 }
1031
1034 return *this;
1035 }
1036
1037 inline bool Transducer::beampattern_insert( double angle, double power ) {
1038 return beam_power_map.emplace( std::make_pair( PDouble( normalizeAngle(angle), beam_precision), power ) ).second;
1039 }
1040
1041 inline Transducer& Transducer::beampattern_replace( double angle, double power ) {
1042 normalizeAngle(angle);
1043 beam_power_map[PDouble(angle, beam_precision)] = power;
1044 return *this;
1045 }
1046
1048 return beam_power_map.find(angle);
1049 }
1050
1052 beam_power_map.erase(angle);
1053 return *this;
1054 }
1055
1056 inline int Transducer::beampattern_size() const {
1057 return beam_power_map.size();
1058 }
1059
1060 inline bool Transducer::beampattern_empty() const {
1061 return beam_power_map.empty();
1062 }
1063
1065 beam_power_map.clear();
1066 return *this;
1067 }
1068
1070 return beam_power_map.begin();
1071 }
1072
1074 return beam_power_map.end();
1075 }
1076
1078 return beam_power_map.rbegin();
1079 }
1080
1082 return beam_power_map.rend();
1083 }
1084
1086 return beam_power_map.lower_bound(PDouble(angle, beam_precision));
1087 }
1088
1090 return beam_power_map.upper_bound(PDouble(angle, beam_precision));
1091 }
1092
1093 inline bool Transducer::conductance_insert( double frequency, double conductance ) {
1094 return conductance_map.emplace( std::make_pair( PDouble( frequency, conductance_precision ), conductance ) ).second;
1095 }
1096
1097 inline bool Transducer::conductance_insert( double frequency, const std::complex< double >& impedance ) {
1098 return conductance_map.emplace( std::make_pair( PDouble( frequency, conductance_precision ), impedance.real()
1099 / ( std::pow( std::abs(impedance), 2.0 ) ) ) ).second;
1100 }
1101
1102 inline Transducer& Transducer::conductance_replace( double frequency, double conductance ) {
1103 conductance_map[PDouble(frequency, conductance_precision)] = conductance;
1104 return *this;
1105 }
1106
1107 inline Transducer& Transducer::conductance_replace( double frequency, const std::complex< double >& impedance ) {
1108 conductance_map[PDouble(frequency, conductance_precision)] = impedance.real()
1109 / ( std::pow( std::abs(impedance), 2.0 ) ) ;
1110 return *this;
1111 }
1112
1113 inline Transducer::CMCIter Transducer::conductance_find( double frequency ) const {
1114 return conductance_map.find(frequency);
1115 }
1116
1117 inline Transducer& Transducer::conductance_erase( double frequency ) {
1118 conductance_map.erase(frequency);
1119 return *this;
1120 }
1121
1122 inline int Transducer::conductance_size() const {
1123 return conductance_map.size();
1124 }
1125
1126 inline bool Transducer::conductance_empty() const {
1127 return conductance_map.empty();
1128 }
1129
1131 conductance_map.clear();
1132 return *this;
1133 }
1134
1136 return conductance_map.begin();
1137 }
1138
1140 return conductance_map.end();
1141 }
1142
1144 return conductance_map.rbegin();
1145 }
1146
1148 return conductance_map.rend();
1149 }
1150
1152 return conductance_map.lower_bound(PDouble(frequency, conductance_precision));
1153 }
1154
1156 return conductance_map.upper_bound(PDouble(frequency, conductance_precision));
1157 }
1158
1159 inline bool Transducer::tvr_insert( double frequency, double tvr ) {
1160 return tvr_map.emplace( std::make_pair( PDouble( frequency, tvr_precision ), tvr ) ).second;
1161 }
1162
1163 inline Transducer& Transducer::tvr_replace( double frequency, double tvr ) {
1164 tvr_map[PDouble(frequency, tvr_precision)] = tvr;
1165 return *this;
1166 }
1167
1168 inline Transducer::CMCIter Transducer::tvr_find( double frequency ) const {
1169 return tvr_map.find(frequency);
1170 }
1171
1172 inline Transducer& Transducer::tvr_erase( double frequency ) {
1173 tvr_map.erase(frequency);
1174 return *this;
1175 }
1176
1177 inline int Transducer::tvr_size() const {
1178 return tvr_map.size();
1179 }
1180
1181 inline bool Transducer::tvr_empty() const {
1182 return tvr_map.empty();
1183 }
1184
1186 tvr_map.clear();
1187 return *this;
1188 }
1189
1191 return tvr_map.begin();
1192 }
1193
1195 return tvr_map.end();
1196 }
1197
1199 return tvr_map.rbegin();
1200 }
1201
1203 return tvr_map.rend();
1204 }
1205
1206 inline Transducer::CMCIter Transducer::tvr_lower_bound( double frequency ) const {
1207 return tvr_map.lower_bound(PDouble(frequency, tvr_precision));
1208 }
1209
1210 inline Transducer::CMCIter Transducer::tvr_upper_bound( double frequency ) const {
1211 return tvr_map.upper_bound(PDouble(frequency, tvr_precision));
1212 }
1213
1214 inline bool Transducer::ocv_insert( double frequency, double ocv ) {
1215 return ocv_map.emplace( std::make_pair( PDouble( frequency, ocv_precision ), ocv ) ).second;
1216 }
1217
1218 inline Transducer& Transducer::ocv_replace( double frequency, double ocv ) {
1219 ocv_map[PDouble(frequency, ocv_precision)] = ocv;
1220 return *this;
1221 }
1222
1223 inline Transducer::CMCIter Transducer::ocv_find( double frequency ) const {
1224 return ocv_map.find(frequency);
1225 }
1226
1227 inline Transducer& Transducer::ocv_erase( double frequency ) {
1228 ocv_map.erase(frequency);
1229 return *this;
1230 }
1231
1232 inline int Transducer::ocv_size() const {
1233 return ocv_map.size();
1234 }
1235
1236 inline bool Transducer::ocv_empty() const {
1237 return ocv_map.empty();
1238 }
1239
1241 ocv_map.clear();
1242 return *this;
1243 }
1244
1246 return ocv_map.begin();
1247 }
1248
1250 return ocv_map.end();
1251 }
1252
1254 return ocv_map.rbegin();
1255 }
1256
1258 return ocv_map.rend();
1259 }
1260
1261 inline Transducer::CMCIter Transducer::ocv_lower_bound( double frequency ) const {
1262 return ocv_map.lower_bound(PDouble(frequency, ocv_precision));
1263 }
1264
1265 inline Transducer::CMCIter Transducer::ocv_upper_bound( double frequency ) const {
1266 return ocv_map.upper_bound(PDouble(frequency, ocv_precision));
1267 }
1268
1270 beam_power_map.clear();
1271 ocv_map.clear();
1272 tvr_map.clear();
1273 conductance_map.clear();
1274 return *this;
1275 }
1276
1277 inline long double Transducer::getBeamPrecision() const {
1278 return beam_precision;
1279 }
1280
1281 inline long double Transducer::getConductancePrecision() const {
1282 return conductance_precision;
1283 }
1284
1285 inline long double Transducer::getTVRPrecision() const {
1286 return tvr_precision;
1287 }
1288
1289 inline long double Transducer::getOCVPrecision() const {
1290 return ocv_precision;
1291 }
1292
1293 inline bool operator==( const Transducer& left, const Transducer& right ) {
1294 if ( &left == &right )
1295 return true;
1296 return( left.beam_power_map == right.beam_power_map && left.conductance_map == right.conductance_map
1297 && left.tvr_map == right.tvr_map && left.ocv_map == right.ocv_map );
1298 }
1299
1300 inline bool operator!=( const Transducer& left, const Transducer& right ) {
1301 if ( &left == &right )
1302 return false;
1303 return( left.beam_power_map != right.beam_power_map || left.conductance_map != right.conductance_map
1304 || left.tvr_map != right.tvr_map || left.ocv_map != right.ocv_map );
1305 }
1306
1307 inline std::ostream& operator<<( std::ostream& os, const Transducer& instance ) {
1308 if ( !instance.write( os ) ) os.setstate( std::ios_base::failbit );
1309 return os;
1310 }
1311
1312 inline std::istream& operator>>( std::istream& is, Transducer& instance ) {
1313 if ( !instance.import( is ) ) is.setstate( std::ios_base::failbit );
1314 return is;
1315 }
1316
1317}
1318
1319#endif // WOSS_TRANSDUCER_DEFINITIONS_H
1320
3D-Coordinates (lat, long, depth) class definitions and functions library
Definition coordinates-definitions.h:384
Custom precision long double class.
Definition custom-precision-double.h:58
Transducer class.
Definition transducer-definitions.h:65
Transducer & operator=(Transducer &&tmp)=default
virtual Transducer & setBeamPrecision(long double prec)
Definition transducer-definitions.cpp:127
Transducer & beampattern_sum(double value)
Definition transducer-definitions.h:1027
double getDutyCycle() const
Definition transducer-definitions.h:1002
Transducer & ocv_clear()
Definition transducer-definitions.h:1240
Transducer & beampattern_clear()
Definition transducer-definitions.h:1064
TVRMCRIter tvr_rbegin() const
Definition transducer-definitions.h:1198
double getMaxSPL(double frequency) const
Definition transducer-definitions.h:1018
BPMCIter beampattern_begin() const
Definition transducer-definitions.h:1069
virtual const std::string & getSymmetryString() const
Definition transducer-definitions.cpp:183
virtual double getPowerFromSPL(double frequency, double spl) const
Definition transducer-definitions.cpp:330
Transducer(Transducer &&tmp)=default
double max_power
Definition transducer-definitions.h:834
int conductance_size() const
Definition transducer-definitions.h:1122
BeamPowerMap::const_iterator BPMCIter
Definition transducer-definitions.h:75
Transducer & beampattern_erase(double angle)
Definition transducer-definitions.h:1051
friend bool operator==(const Transducer &left, const Transducer &right)
Definition transducer-definitions.h:1293
virtual double normalizeAngle(double angle) const
Definition transducer-definitions.cpp:886
friend std::ostream & operator<<(std::ostream &os, const Transducer &instance)
Definition transducer-definitions.h:1307
ConductanceMap::const_reverse_iterator CMCRIter
Definition transducer-definitions.h:85
double duty_cycle
Definition transducer-definitions.h:839
long double getBeamPrecision() const
Definition transducer-definitions.h:1277
TVRMCIter tvr_begin() const
Definition transducer-definitions.h:1190
bool writeSPL(std::ostream &stream_out, double frequency_step, double power) const
Definition transducer-definitions.cpp:633
TVRMCIter tvr_lower_bound(double frequency) const
Definition transducer-definitions.h:1206
Transducer & ocv_erase(double frequency)
Definition transducer-definitions.h:1227
virtual bool importBinary(std::fstream &stream_in)
Definition transducer-definitions.cpp:392
TVRMCIter tvr_upper_bound(double frequency) const
Definition transducer-definitions.h:1210
BPMCRIter beampattern_rbegin() const
Definition transducer-definitions.h:1077
virtual std::unique_ptr< Transducer > clone() const
Definition transducer-definitions.cpp:115
bool ocv_empty() const
Definition transducer-definitions.h:1236
Transducer & conductance_clear()
Definition transducer-definitions.h:1130
virtual Transducer & setTVRPrecision(long double prec)
Definition transducer-definitions.cpp:169
OCVMCRIter ocv_rbegin() const
Definition transducer-definitions.h:1253
BPMCRIter beampattern_rend() const
Definition transducer-definitions.h:1081
Transducer & conductance_replace(double frequency, double conductance)
Definition transducer-definitions.h:1102
ConductanceMap::iterator CMIter
Definition transducer-definitions.h:82
Transducer & setResonanceFrequency(double frequency)
Definition transducer-definitions.h:974
Transducer(const Transducer &copy)=default
ConductanceMap::const_iterator CMCIter
Definition transducer-definitions.h:84
BPMCIter beampattern_lower_bound(double angle) const
Definition transducer-definitions.h:1085
double getMaxPower() const
Definition transducer-definitions.h:998
std::map< PDouble, double > BeamPowerMap
Definition transducer-definitions.h:72
OCVMap::reverse_iterator OCVMRIter
Definition transducer-definitions.h:101
CMCIter conductance_upper_bound(double frequency) const
Definition transducer-definitions.h:1155
TVRMap::const_iterator TVRMCIter
Definition transducer-definitions.h:93
long double beam_precision
Definition transducer-definitions.h:844
virtual ~Transducer()=default
virtual bool isValid() const
Definition transducer-definitions.cpp:120
ConductanceMap::reverse_iterator CMRIter
Definition transducer-definitions.h:83
Transducer & clearAll()
Definition transducer-definitions.h:1269
double resonance_frequency
Definition transducer-definitions.h:824
bool has_conical_symmetry
Definition transducer-definitions.h:819
bool hasToroidalSymmetry() const
Definition transducer-definitions.h:989
long double conductance_precision
Definition transducer-definitions.h:849
virtual bool import(std::istream &stream_in)
Definition transducer-definitions.cpp:346
virtual Transducer & setConductancePrecision(long double prec)
Definition transducer-definitions.cpp:155
OCVMCIter ocv_upper_bound(double frequency) const
Definition transducer-definitions.h:1265
ConductanceMap conductance_map
Definition transducer-definitions.h:874
Transducer & setTypeName(const std::string &name)
Definition transducer-definitions.h:984
BeamPowerMap::iterator BPMIter
Definition transducer-definitions.h:73
Transducer & setBandwith3dB(double frequency)
Definition transducer-definitions.h:979
Transducer & beampattern_rotate(double angle)
Definition transducer-definitions.h:1022
CMCRIter conductance_rend() const
Definition transducer-definitions.h:1147
TVRMCRIter tvr_rend() const
Definition transducer-definitions.h:1202
bool conductance_insert(double frequency, double conductance)
Definition transducer-definitions.h:1093
friend std::ostream & operator>>(std::istream &is, const Transducer &instance)
virtual double getSPL(double frequency, double power) const
Definition transducer-definitions.cpp:314
std::map< PDouble, double > ConductanceMap
Definition transducer-definitions.h:81
virtual std::unique_ptr< Transducer > create(long double beam_precision=BEAM_PATTERN_CUSTOM_BEAM_PRECISION, long double conduct_precison=CONDUCTANCE_CUSTOM_FREQUENCY_PRECISION, long double tvr_precision=TVR_CUSTOM_FREQUENCY_PRECISION, long double ocv_precision=OCV_CUSTOM_FREQUENCY_PRECISION) const
Definition transducer-definitions.cpp:105
CMCIter conductance_lower_bound(double frequency) const
Definition transducer-definitions.h:1151
Transducer & ocv_replace(double frequency, double ocv)
Definition transducer-definitions.h:1218
CMCIter conductance_find(double frequency) const
Definition transducer-definitions.h:1113
BPMCIter beampattern_find(double angle) const
Definition transducer-definitions.h:1047
BeamPowerMap::reverse_iterator BPMRIter
Definition transducer-definitions.h:74
OCVMCRIter ocv_rend() const
Definition transducer-definitions.h:1257
BPMCIter beampattern_upper_bound(double angle) const
Definition transducer-definitions.h:1089
TVRMCIter tvr_end() const
Definition transducer-definitions.h:1194
BeamPowerMap::const_reverse_iterator BPMCRIter
Definition transducer-definitions.h:76
TVRMap::const_reverse_iterator TVRMCRIter
Definition transducer-definitions.h:94
bool writeVertBeamPattern(std::ostream &stream_out, const CoordZ &tx, const CoordZ &rx, double init_bearing, double vert_rot=0, double horiz_rot=0, double mult_costant=1, double add_costant=0) const
Definition transducer-definitions.cpp:654
TVRMap::reverse_iterator TVRMRIter
Definition transducer-definitions.h:92
int ocv_size() const
Definition transducer-definitions.h:1232
double getResonanceFrequency() const
Definition transducer-definitions.h:1006
Transducer & conductance_erase(double frequency)
Definition transducer-definitions.h:1117
OCVMap::iterator OCVMIter
Definition transducer-definitions.h:100
TVRMap::iterator TVRMIter
Definition transducer-definitions.h:91
OCVMap ocv_map
Definition transducer-definitions.h:884
int beampattern_size() const
Definition transducer-definitions.h:1056
bool ocv_insert(double frequency, double ocv)
Definition transducer-definitions.h:1214
virtual bool writeBinary(std::fstream &file_out) const
Definition transducer-definitions.cpp:489
long double getConductancePrecision() const
Definition transducer-definitions.h:1281
bool beampattern_empty() const
Definition transducer-definitions.h:1060
OCVMap::const_reverse_iterator OCVMCRIter
Definition transducer-definitions.h:103
Transducer & operator=(const Transducer &copy)=default
OCVMCIter ocv_end() const
Definition transducer-definitions.h:1249
int tvr_size() const
Definition transducer-definitions.h:1177
virtual double getValue(double frequency, const std::map< PDouble, double > &map, long double precision, bool use_linear=false, double costant=20.0) const
Definition transducer-definitions.cpp:256
OCVMCIter ocv_begin() const
Definition transducer-definitions.h:1245
CMCIter conductance_begin() const
Definition transducer-definitions.h:1135
OCVMCIter ocv_lower_bound(double frequency) const
Definition transducer-definitions.h:1261
Transducer & tvr_replace(double frequency, double tvr)
Definition transducer-definitions.h:1163
Transducer & setDutyCycle(double cycle)
Definition transducer-definitions.h:969
Transducer & tvr_clear()
Definition transducer-definitions.h:1185
double bandwith_3db
Definition transducer-definitions.h:829
long double ocv_precision
Definition transducer-definitions.h:859
OCVMap::const_iterator OCVMCIter
Definition transducer-definitions.h:102
long double getTVRPrecision() const
Definition transducer-definitions.h:1285
CMCIter conductance_end() const
Definition transducer-definitions.h:1139
std::map< PDouble, double > OCVMap
Definition transducer-definitions.h:99
virtual bool write(std::ostream &stream_out) const
Definition transducer-definitions.cpp:454
static void setDebug(bool flag)
Definition transducer-definitions.h:803
Transducer & setMaxPower(double power)
Definition transducer-definitions.h:964
friend bool operator!=(const Transducer &left, const Transducer &right)
Definition transducer-definitions.h:1300
long double getOCVPrecision() const
Definition transducer-definitions.h:1289
BPMCIter beampattern_end() const
Definition transducer-definitions.h:1073
bool tvr_empty() const
Definition transducer-definitions.h:1181
TVRMap tvr_map
Definition transducer-definitions.h:879
double getBandwith3dB() const
Definition transducer-definitions.h:1010
bool beampattern_insert(double angle, double power)
Definition transducer-definitions.h:1037
CMCRIter conductance_rbegin() const
Definition transducer-definitions.h:1143
bool hasConicalSymmetry() const
Definition transducer-definitions.h:994
static bool debug
Definition transducer-definitions.h:814
TVRMCIter tvr_find(double frequency) const
Definition transducer-definitions.h:1168
Transducer & beampattern_replace(double angle, double power)
Definition transducer-definitions.h:1041
virtual Transducer & setOCVPrecision(long double prec)
Definition transducer-definitions.cpp:141
std::map< PDouble, double > TVRMap
Definition transducer-definitions.h:90
std::string getTypeName() const
Definition transducer-definitions.h:1014
BeamPowerMap beam_power_map
Definition transducer-definitions.h:869
long double tvr_precision
Definition transducer-definitions.h:854
bool tvr_insert(double frequency, double tvr)
Definition transducer-definitions.h:1159
Transducer & beampattern_multiply(double value)
Definition transducer-definitions.h:1032
static const std::string toroidal_string
Definition transducer-definitions.h:809
bool conductance_empty() const
Definition transducer-definitions.h:1126
Transducer & tvr_erase(double frequency)
Definition transducer-definitions.h:1172
static const std::string conical_string
Definition transducer-definitions.h:807
std::string type_name
Definition transducer-definitions.h:864
OCVMCIter ocv_find(double frequency) const
Definition transducer-definitions.h:1223
Provides the interface for the woss::PDouble class.
Definition ac-toolbox-arr-asc-reader.h:44
bool operator!=(const Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.h:833
std::ostream & operator<<(std::ostream &os, const Altimetry &instance)
Definition altimetry-definitions.h:812
bool operator==(const Altimetry &left, const Altimetry &right)
Definition altimetry-definitions.h:826
std::istream & operator>>(std::istream &is, PDouble &instance)
Definition custom-precision-double.h:426