Lemma is an Electromagnetics API
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AEMSurvey.h 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /* This file is part of Lemma, a geophysical modelling and inversion API.
  2. * More information is available at http://lemmasoftware.org
  3. */
  4. /* This Source Code Form is subject to the terms of the Mozilla Public
  5. * License, v. 2.0. If a copy of the MPL was not distributed with this
  6. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  7. */
  8. /**
  9. * @file
  10. * @date 09/24/2013 04:06:42 PM
  11. * @version $Id$
  12. * @author Trevor Irons (ti)
  13. * @email Trevor.Irons@lemmasoftware.org
  14. * @copyright Copyright (c) 2013, XRI Geophysics, LLC
  15. * @copyright Copyright (c) 2013,2018 Trevor Irons
  16. */
  17. #ifndef AEMSURVEY_INC
  18. #define AEMSURVEY_INC
  19. #include "LemmaObject.h"
  20. #include "DipoleSource.h"
  21. namespace Lemma {
  22. /**
  23. \ingroup FDEM1D
  24. \brief Contains pertinant information about an AEM survey
  25. \details All important details about an AEM survey are stored here, but
  26. nothing about the underlying earth model.
  27. */
  28. class AEMSurvey : public LemmaObject {
  29. friend std::ostream &operator<<(std::ostream &stream,
  30. const AEMSurvey &ob);
  31. /// AEMSurveyReader currently provides the only concrete way to use this class.
  32. /// @todo consider making this an abstract class, that can only then exist through
  33. /// the reader. That is if you will not allow users to build their own.
  34. friend class AEMSurveyReader;
  35. public:
  36. // ==================== LIFECYCLE =======================
  37. /**
  38. * @copybrief LemmaObject::New()
  39. * @copydetails LemmaObject::New()
  40. */
  41. static std::shared_ptr<AEMSurvey> NewSP();
  42. /** Default protected constructor, use New */
  43. AEMSurvey (const ctor_key&);
  44. /** Default protected destructor, use Delete */
  45. ~AEMSurvey ();
  46. // ==================== OPERATORS =======================
  47. // ==================== OPERATIONS =======================
  48. // ==================== ACCESS =======================
  49. /** Returns a particular EM source. For now only dipole sources are supported,
  50. * general loops int the new future.
  51. * @param[in] isource is the source fiducial to return
  52. */
  53. std::shared_ptr<DipoleSource> GetSource(const int& isource);
  54. /** @return the total number of sources
  55. */
  56. int GetNumberOfSources();
  57. /** Returns vector of all frequencies used in the survey
  58. * @return a vector of the unique frequencies
  59. */
  60. VectorXr GetFrequencies();
  61. // ==================== INQUIRY =======================
  62. /** Returns the name of the underlying class, similiar to Python's type */
  63. virtual std::string GetName() const {
  64. return this->CName;
  65. }
  66. protected:
  67. // ==================== LIFECYCLE =======================
  68. private:
  69. // ==================== DATA MEMBERS =========================
  70. std::vector< std::shared_ptr<DipoleSource> > Sources;
  71. VectorXr Freqs;
  72. static constexpr auto CName = "AEMSurvey";
  73. }; // ----- end of class AEMSurvey -----
  74. } // ----- end of Lemma name -----
  75. #endif // ----- #ifndef AEMSURVEY_INC -----