IFullwave.hpp
1 #ifndef OPALS_IFULLWAVE_HPP_INCLUDED
2 #define OPALS_IFULLWAVE_HPP_INCLUDED
3 
4 #include <opals/IModuleBase.hpp>
5 
6 #if !defined(OPALS_EXPORTS) && !defined(OPALS_MODULE_EXPORTS)
7  #if defined _DEBUG && !defined OPALS_NO_DEBUG
8  #pragma comment(lib, "opalsFullwave_d.lib")
9  #else
10  #pragma comment(lib, "opalsFullwave.lib")
11  #endif
12 #endif
13 
14 #include <opals/Path.hpp>
15 #include <opals/Vector.hpp>
16 #include <opals/FullwaveAlgorithm.hpp>
17 #include <opals/Array.hpp>
18 
20 
21 namespace opals {
22 
23  namespace opts
24  {
25  namespace Fullwave
26  {
27  /// Options of \ref ModuleFullwave
28  typedef IGroup< Names::_, false, Cons<
29  ILeaf< Names::inFile, false, opals::Path >, Cons<
30  ILeaf< Names::outFile, false, opals::Path >, Cons<
31  ILeaf< Names::oFormat, false, opals::String >, Cons<
32  ILeaf< Names::fullWaveAlg, false, opals::FullwaveAlgorithm::Type >, Cons<
33  ILeaf< Names::detectThrLow, false, int >, Cons<
34  ILeaf< Names::mtaZone, false, int >, Cons<
35  ILeaf< Names::timeRange, false, ArrayD2 >, Cons<
36  ILeaf< Names::filter, false, opals::String >
37  > > > > > > > > > Options;
38  }
39  }
40 
41  /// Performs decomposition of the full waveform signal and provides 3D coordinates (scanner system) and additional attributes for each return.
42  /** The module provides echo extraction from raw full waveform data.
43  Together with the 3D coordinates of these echoes, additional attributes
44  such as amplitude and echo width are derived.
45 
46  As there are scanners allowing for multiple laser pulses in air (multiple-time around, MTA)
47  an MTA zone can be provided (parameter mtaZone, 1-..) or detected and adapted automatically (0).
48 
49  The output is stored in the scanner's own coordinate system (SOCS).
50  For proper georeferencing, opalsDirectGeoref is intended to be used after fullwave echo extraction. */
51  /// \see \ref ModuleFullwave
52  class OPALS_API IFullwave : virtual public IModuleBase
53  {
54 
55  public:
56  static IFullwave* New();
57  static IFullwave* New( IControlObject &controlObject );
58  static IFullwave* New( const IModuleBase &parent );
59  static IFullwave* New( const IModuleBase &parent, IControlObject &controlObject );
60 
61  virtual ~IFullwave() {}
62 
63  /// \name Access to module-specific options.
64  ///@{
66  virtual Options& opts() = 0;
67  virtual const Options& opts() const = 0;
68  ///}@
69 
70  };
71 
72 };
73 
74 #endif