mtura.cpp
Go to the documentation of this file.00001 #include <iostream>
00002 #include <fstream>
00003 #include <string>
00004 #include <numeric>
00005 #include "Util.h"
00006 #include "TimeSeriesData.h"
00007 #include "miscfunc.h"
00008 #include "WFunc.h"
00009 #include "statutils.h"
00010 #include <boost/bind.hpp>
00011
00012 using namespace std;
00013 using namespace gplib;
00014
00015 string version = "$Id: mtura.cpp 1816 2009-09-07 11:28:35Z mmoorkamp $";
00016
00017
00018
00019
00020
00021
00022
00023
00024 int main(int argc, char *argv[])
00025 {
00026 string infilename;
00027 cout << "This is mtura: Calculate a running average of MT time series"
00028 << endl << endl;
00029 cout << " Usage: mtura infilename " << endl;
00030 cout << " Ending '.ra' will be automatically assigned to outfilename"
00031 << endl << endl;
00032 cout << " This is Version: " << version << endl << endl;
00033 if (argc == 2)
00034 {
00035 infilename = argv[1];
00036 }
00037 else
00038 {
00039
00040 infilename = AskFilename(" Mtu-Filename: ");
00041 }
00042
00043 TimeSeriesData Data;
00044 Data.GetData(infilename);
00045
00046
00047 size_t windowlength;
00048 cout << "Window length: ";
00049 cin >> windowlength;
00050
00051
00052 const size_t tslength = Data.GetData().GetEx().GetData().size();
00053 TimeSeriesComponent WindowTS;
00054
00055 WindowTS.GetData().assign(tslength, 0.0);
00056 const size_t windowstart = 0;
00057
00058 fill_n(WindowTS.GetData().begin() + windowstart, windowlength, 1.0);
00059
00060 ApplyWindow(WindowTS.GetData().begin() + windowstart,
00061 WindowTS.GetData().begin() + windowstart + windowlength,
00062 WindowTS.GetData().begin() + windowstart, Hanning());
00063
00064
00065 transform(WindowTS.GetData().begin() + windowstart,
00066 WindowTS.GetData().begin() + windowstart + windowlength,
00067 WindowTS.GetData().begin() + windowstart, boost::bind(
00068 multiplies<double> (), _1, 1. / double(windowlength)));
00069
00070
00071 SubMean(Data.GetData().GetEx().GetData().begin(),
00072 Data.GetData().GetEx().GetData().end());
00073 SubMean(Data.GetData().GetEy().GetData().begin(),
00074 Data.GetData().GetEy().GetData().end());
00075 SubMean(Data.GetData().GetHx().GetData().begin(),
00076 Data.GetData().GetHx().GetData().end());
00077 SubMean(Data.GetData().GetHy().GetData().begin(),
00078 Data.GetData().GetHy().GetData().end());
00079 SubMean(Data.GetData().GetHz().GetData().begin(),
00080 Data.GetData().GetHz().GetData().end());
00081
00082
00083 Convolve(Data.GetData().GetEx().GetData(), WindowTS.GetData(),
00084 Data.GetData().GetEx().GetData());
00085 Convolve(Data.GetData().GetEy().GetData(), WindowTS.GetData(),
00086 Data.GetData().GetEy().GetData());
00087 Convolve(Data.GetData().GetHx().GetData(), WindowTS.GetData(),
00088 Data.GetData().GetHx().GetData());
00089 Convolve(Data.GetData().GetHy().GetData(), WindowTS.GetData(),
00090 Data.GetData().GetHy().GetData());
00091 Convolve(Data.GetData().GetHz().GetData(), WindowTS.GetData(),
00092 Data.GetData().GetHz().GetData());
00093
00094
00095 rotate(Data.GetData().GetEx().GetData().begin(),
00096 Data.GetData().GetEx().GetData().begin() + windowlength / 2,
00097 Data.GetData().GetEx().GetData().end());
00098 rotate(Data.GetData().GetEy().GetData().begin(),
00099 Data.GetData().GetEy().GetData().begin() + windowlength / 2,
00100 Data.GetData().GetEy().GetData().end());
00101 rotate(Data.GetData().GetHx().GetData().begin(),
00102 Data.GetData().GetHx().GetData().begin() + windowlength / 2,
00103 Data.GetData().GetHx().GetData().end());
00104 rotate(Data.GetData().GetHy().GetData().begin(),
00105 Data.GetData().GetHy().GetData().begin() + windowlength / 2,
00106 Data.GetData().GetHy().GetData().end());
00107 rotate(Data.GetData().GetHz().GetData().begin(),
00108 Data.GetData().GetHz().GetData().begin() + windowlength / 2,
00109 Data.GetData().GetHz().GetData().end());
00110 Data.WriteBack(infilename + ".ra");
00111 }
00112