seispca.cpp

Go to the documentation of this file.
00001 #include "PCA.h"
00002 #include "statutils.h"
00003 #include "CUniformRNG.h"
00004 #include "VecMat.h"
00005 #include "SeismicDataComp.h"
00006 #include <iostream>
00007 #include <fstream>
00008 #include <vector>
00009 
00010 using namespace gplib;
00011 
00012 int main()
00013   {
00014     SeismicDataComp Radial, Tangential, Vertical;
00015     std::string radname, tangname, vername;
00016 
00017     std::cout << "Radial Component: ";
00018     std::cin >> radname;
00019     std::cout << "Tangential Component: ";
00020     std::cin >> tangname;
00021     std::cout << "Vertical Component: ";
00022     std::cin >> vername;
00023 
00024     Radial.ReadData(radname);
00025     Tangential.ReadData(tangname);
00026     Vertical.ReadData(vername);
00027 
00028     const size_t nobs = Radial.GetData().size();
00029     const size_t nchan = 3;
00030     gplib::rmat input(nchan, nobs);
00031     gplib::cmat evec(nchan, nchan);
00032     gplib::cvec eval(nchan);
00033 
00034     for (int i = 0; i < nobs; ++i)
00035       {
00036         input(0, i) = Radial.GetData().at(i);
00037         input(1, i) = Tangential.GetData().at(i);
00038         input(2, i) = Vertical.GetData().at(i);
00039       }
00040 
00041     PCA(input, evec, eval);
00042 
00043     gplib::cmat wmat(WhiteMat(evec, eval));
00044     std::cout << "pca evec: " << evec << std::endl;
00045     std::cout << "pca eval: " << eval << std::endl;
00046     std::cout << "pca WhM: " << wmat << std::endl;
00047     std::cout << "pca DeWhM: " << DeWhiteMat(evec, eval) << std::endl;
00048 
00049     gplib::cmat output(nchan, nobs);
00050     axpy_prod(wmat, input, output);
00051     SeismicDataComp RadOut(Radial), TangOut(Tangential), VerOut(Vertical);
00052     for (int i = 0; i < nobs; ++i)
00053       {
00054         RadOut.GetData().at(i) = output(0, i).real();
00055         TangOut.GetData().at(i) = output(1, i).real();
00056         VerOut.GetData().at(i) = output(2, i).real();
00057       }
00058     RadOut.WriteAsSac("pc1.out");
00059     TangOut.WriteAsSac("pc2.out");
00060     VerOut.WriteAsSac("pc3.out");
00061 
00062   }

Generated on Tue May 4 16:52:15 2010 for GPLIB++ by  doxygen 1.5.8