testiterdecon.cpp

Go to the documentation of this file.
00001 #include <iostream>
00002 #include <algorithm>
00003 #include <fstream>
00004 #include "miscfunc.h"
00005 #include "IterDecon.h"
00006 #include "convert.h"
00007 #include <boost/numeric/ublas/vector.hpp>
00008 
00009 
00010 namespace ublas=boost::numeric::ublas;
00011 int main()
00012 {
00013         int length = 500; 
00014     double dt = 0;
00015     double b = 0;
00016     
00017         std::ifstream radial("smp.r"), vertical("smp.z");
00018         std::ofstream predictfile,diffile,filterfile("filter");
00019         radial >> length >> dt >> b;
00020         //std::cout << "Length: " << length << " dt: " << dt << " b: " << b << std::endl;
00021         vertical >> length >> dt >> b;
00022         //std::cout << "Length: " << length << " dt: " << dt << " b: " << b << std::endl;
00023         gplib::rvec TimeSeries1(2*length);
00024         gplib::rvec TimeSeries2(2*length);
00025         gplib::rvec Output(2*length);
00026         for (int i = length/2; i < 1.5*length; ++i)
00027         {
00028                 radial >> TimeSeries2(i);
00029                 vertical >> TimeSeries1(i);
00030         }
00031         for (int i= 0; i < length/2; ++i)
00032         {
00033                 TimeSeries1(i) = TimeSeries1(int(floor(i+1.5*length))) = 0;
00034                 TimeSeries2(i) = TimeSeries2(int(floor(i+1.5*length))) = 0;
00035         }
00036         //std::cout << "lenght1: " << TimeSeries1.size() << " length2: " << TimeSeries2.size() << std::endl; 
00037         //double mean1=std::accumulate(TimeSeries1.begin(),TimeSeries1.end(),0.)/length;
00038         //double mean2=std::accumulate(TimeSeries2.begin(),TimeSeries2.end(),0.)/length;
00039         //std::cout << "Mean1: " << mean1 << " Mean2: " << mean2 << std::endl;
00040         //std::transform(TimeSeries2.begin(),TimeSeries2.end(),TimeSeries2.begin(),bind2nd(std::minus<double>(),mean2));
00041         //std::transform(TimeSeries1.begin(),TimeSeries1.end(),TimeSeries1.begin(),bind2nd(std::minus<double>(),mean1));
00042         gplib::rvec Filter(TimeSeries1.size());
00043     double variance = 2;
00044     int shift = 0;
00045     double normfactor = 1./(variance * sqrt(2.* acos(-1.)));
00046     for (unsigned int i = 0; i <= Filter.size()/2; ++i)
00047     {
00048         Filter(i) = normfactor * exp( -pow((i-shift),2)/(2. * variance * variance));
00049         Filter(Filter.size() -i-1) = normfactor * exp( -pow((-i-1-shift),2)/(2. * variance * variance));
00050     }
00051     std::copy(Filter.begin(),Filter.end(),std::ostream_iterator<double>(filterfile,"\n"));
00052         Convolve(TimeSeries1,Filter,TimeSeries1);
00053         Convolve(TimeSeries2,Filter,TimeSeries2);
00054         std::ofstream ts1filt("smpf.z"),ts2filt("smpf.r");
00055         std::copy(TimeSeries1.begin(),TimeSeries1.end(),std::ostream_iterator<double>(ts1filt,"\n"));
00056         std::copy(TimeSeries2.begin(),TimeSeries2.end(),std::ostream_iterator<double>(ts2filt,"\n"));
00057         gplib::rvec Current(TimeSeries2);
00058         IterDecon Decon(TimeSeries1.size());
00059         const double power = ublas::prec_inner_prod(TimeSeries2,TimeSeries2);
00060         double error = power;
00061         double previouserror = 1.;
00062         std::string iter;
00063         std::string name;
00064         for (int i = 0; i < 10; ++i)
00065         {
00066                 std::cout << std::endl << "Iteration: " << i << std::endl;
00067          iter = stringify(i);
00068          Decon.AdaptFilter(TimeSeries1,Current);
00069          Decon.CalcOutput(TimeSeries1,Output);
00070       
00071          gplib::rvec Corr(TimeSeries2);
00072          Correl(TimeSeries1,Current,Corr);
00073             name = "corr"+iter;
00074          predictfile.open(name.c_str());
00075          std::copy(Corr.begin(),Corr.end(),std::ostream_iterator<double>(predictfile,"\n"));
00076         predictfile.close();    
00077       
00078          Current = TimeSeries2-Output;
00079          error = ublas::prec_inner_prod(Current,Current) /power;
00080          std::cout << "Error: " << error *100 << " Improv: " << (previouserror - error)*100 << std::endl;
00081          name = "pred"+iter;
00082          predictfile.open(name.c_str());
00083          name = "diff"+iter;
00084          diffile.open(name.c_str());
00085          std::copy(Current.begin(),Current.end(),std::ostream_iterator<double>(diffile,"\n"));
00086                  std::copy(Output.begin(),Output.end(),std::ostream_iterator<double>(predictfile,"\n"));
00087                  diffile.close();
00088                  predictfile.close();   
00089                  previouserror = error;
00090                  std::ofstream outfile(("out"+iter).c_str());
00091                  Decon.PrintWeights(outfile);
00092         }
00093 }

Generated on Mon Sep 15 12:54:34 2008 for GPLIB++ by  doxygen 1.5.5