00001 #ifndef MULTIANISOSURFACEWAVEOBJECTIVE_H_ 00002 #define MULTIANISOSURFACEWAVEOBJECTIVE_H_ 00003 00004 #include "GeneralObjective.h" 00005 #include "AnisoSurfaceWaveObjective.h" 00006 #include <vector> 00007 #include <boost/shared_ptr.hpp> 00008 namespace gplib 00009 { 00010 /** \addtogroup seistools Seismic data analysis and modeling */ 00011 /* @{ */ 00012 //! Minimize the misfit for several surface wave dispersion curves simultaneously 00013 class MultiAnisoSurfaceWaveObjective : public GeneralObjective 00014 { 00015 private: 00016 std::vector<boost::shared_ptr<AnisoSurfaceWaveObjective> > IndividualObjectives; 00017 std::vector<double> backazimuths; 00018 public: 00019 virtual MultiAnisoSurfaceWaveObjective *clone() const 00020 { 00021 return new MultiAnisoSurfaceWaveObjective(*this); 00022 } 00023 void AddMeasurement(const ParkSurfaceWaveData &Measured, const double back,const double avel); 00024 //! Some operations cannot be done in parallel, these are done before 00025 virtual void PreParallel(const ttranscribed &member); 00026 //! Some operations cannot be done in parallel, these are done after, returns the misfit value 00027 virtual double PostParallel(const ttranscribed &member); 00028 //! The core performance calculation, has to be safe to be done in parallel 00029 virtual void SafeParallel(const ttranscribed &member); 00030 void WriteData(const std::string &filename); 00031 void WriteModel(const std::string &filename); 00032 void WritePlot(const std::string &filename); 00033 MultiAnisoSurfaceWaveObjective( 00034 const MultiAnisoSurfaceWaveObjective &Old); 00035 MultiAnisoSurfaceWaveObjective& operator=(const MultiAnisoSurfaceWaveObjective& source); 00036 MultiAnisoSurfaceWaveObjective(); 00037 virtual ~MultiAnisoSurfaceWaveObjective(); 00038 }; 00039 /* @} */ 00040 } 00041 #endif /*MULTIANISOSURFACEWAVEOBJECTIVE_H_*/
1.5.8