00001 #ifndef ANISOSURFACEWAVEOBJECTIVE_H_ 00002 #define ANISOSURFACEWAVEOBJECTIVE_H_ 00003 00004 #include "PlottableObjective.h" 00005 #include "ParkSurfaceWaveData.h" 00006 #include "AnisoSurfaceWaveSynthetic.h" 00007 #include <string> 00008 00009 namespace gplib 00010 { 00011 /** \addtogroup seistools Seismic data analysis and modeling */ 00012 /* @{ */ 00013 //! This class calculates the misfit for anisotropic surface wave dispersion data 00014 class AnisoSurfaceWaveObjective: public PlottableObjective 00015 { 00016 private: 00017 ParkSurfaceWaveData MeasuredData; 00018 ParkSurfaceWaveData SynthData; 00019 AnisoSurfaceWaveSynthetic Synthetic; 00020 double errorlevel; 00021 double poisson; 00022 double backazimuth; 00023 double avelratio; 00024 public: 00025 //! Write the current model to ascii file for calculations 00026 virtual void WriteModel(const std::string &filename) 00027 { 00028 Synthetic.WriteModel(filename); 00029 } 00030 //! Write the current model to ascii file for plotting 00031 virtual void WritePlot(const std::string &filename) 00032 { 00033 Synthetic.WritePlot(filename); 00034 } 00035 //! Write synthetic data as ascii file 00036 virtual void WriteData(const std::string &filename) 00037 { 00038 SynthData.WriteAscii(filename); 00039 } 00040 //! Provide read only access to the synthetic data 00041 const ParkSurfaceWaveData &GetSynthetic() const 00042 { 00043 return SynthData; 00044 } 00045 00046 AnisoSurfaceWaveObjective(const AnisoSurfaceWaveObjective &Old); 00047 AnisoSurfaceWaveObjective& operator=( 00048 const AnisoSurfaceWaveObjective& source); 00049 AnisoSurfaceWaveObjective(const ParkSurfaceWaveData &Data, 00050 const double ba); 00051 virtual ~AnisoSurfaceWaveObjective(); 00052 //! We need clone and create for building an array of derived objects, see FAQ lite 20.8, the return type depends on the derived class 00053 virtual AnisoSurfaceWaveObjective *clone() const 00054 { 00055 return new AnisoSurfaceWaveObjective(*this); 00056 } 00057 //! Some operations cannot be done in parallel, these are done before 00058 virtual void PreParallel(const ttranscribed &member); 00059 //! Some operations cannot be done in parallel, these are done after, returns the misfit value 00060 virtual double PostParallel(const ttranscribed &member); 00061 //! The core performance calculation, has to be safe to be done in parallel 00062 virtual void SafeParallel(const ttranscribed &member); 00063 }; 00064 /* @} */ 00065 } 00066 #endif /*ANISOSURFACEWAVEOBJECTIVE_H_*/
1.5.8