00001 #ifndef CMTSTATION_H
00002 #define CMTSTATION_H
00003
00004 #include "CGeneralData.h"
00005 #include "CMTTensor.h"
00006 #include "CMagneticTF.h"
00007 #include "types.h"
00008 #include <string>
00009 #include <boost/function.hpp>
00010
00011
00012
00013 class CMTStation: public CGeneralData{
00014 public:
00015 enum tmtdataformat {unknown, mtt, j, edi, pek};
00016 private:
00017
00018 double latitude;
00019
00020 double longitude;
00021
00022 double elevation;
00023
00024 std::string name;
00025
00026 double azimuth;
00027
00028 std::vector<CMTTensor> MTData;
00029
00030 std::vector<CMagneticTF> TFData;
00031 void DoRotate(const int i, const double angle);
00032
00033 void InitialSetup();
00034
00035 tmtdataformat dataformat;
00036
00037 void WriteMtt(const std::string filename);
00038
00039 void ReadEdi(const std::string filename);
00040
00041 void ReadJ(const std::string filename);
00042
00043 void ReadMtt(const std::string filename);
00044
00045 void ReadPek1D(const std::string filename);
00046
00047 void WriteJBlock(boost::function<std::complex<double> (const CMTTensor*)> Comp,
00048 boost::function<double (const CMTTensor*)> Err, std::ofstream &outfile, const double convfactor);
00049 protected:
00050
00051 void Update();
00052
00053
00054 void Assign(const int nfreq);
00055 public:
00056
00057 void AssignAll(const int nfreq);
00058
00059
00060 void Rotate(const double rotangle);
00061
00062 void Rotate(void);
00063
00064 trealdata GetFrequencies() const;
00065
00066 void SetFrequencies(const trealdata &freqs);
00067
00068 double GetLatitude()const{return latitude;}
00069 void SetLatitude(double lat){latitude = lat;}
00070 double GetLongitude()const{return longitude;}
00071 void SetLongitude(double lon){longitude = lon;}
00072 double GetElevation()const{return elevation;}
00073 std::string GetName(){return name;}
00074 double GetAzimuth()const{return azimuth;};
00075
00076 const CMTTensor &at(const unsigned int i) const{return MTData.at(i);}
00077
00078 const std::vector<CMTTensor> &GetMTData() const{return MTData;}
00079
00080 std::vector<CMTTensor> &SetMTData() {return MTData;}
00081
00082 virtual CMTStation *clone() const{return new CMTStation(*this);}
00083 CMTStation();
00084 CMTStation(const CMTStation &old);
00085 CMTStation(const int size);
00086 CMTStation(const std::string filename);
00087 virtual ~CMTStation();
00088
00089 virtual void GetData(const std::string filename);
00090 virtual void GetData(){};
00091
00092 virtual void WriteData(const std::string filename);
00093 friend class C1DMTSynthData;
00094
00095 void WriteAsMtt(const std::string filename);
00096
00097 void WriteAsEdi(const std::string filename);
00098
00099 void WriteAsJ(const std::string filename);
00100
00101 void WriteBack();
00102 CMTStation& operator= (const CMTStation& source);
00103 };
00104
00105 #endif // CMTSTATION_H