00001 #include "MTSampleGenerator.h"
00002 #include <algorithm>
00003 #include <ctime>
00004
00005 using namespace std;
00006 namespace gplib
00007 {
00008
00009 MTSampleGenerator::MTSampleGenerator(boost::function<
00010 double(const MTTensor*)> f, const MTTensor &Z, const double errorlevel) :
00011 generator(static_cast<unsigned int> (std::time(0))), Zxxr_dist(
00012 Z.GetZxx().real(), max(Z.GetdZxx(), Z.GetZxx().real() * errorlevel)),
00013 Zxxi_dist(Z.GetZxx().imag(), max(Z.GetdZxx(), Z.GetZxx().imag()
00014 * errorlevel)), Zxyr_dist(Z.GetZxy().real(), max(Z.GetdZxy(),
00015 Z.GetZxy().real() * errorlevel)), Zxyi_dist(Z.GetZxy().imag(),
00016 max(Z.GetdZxy(), Z.GetZxy().imag() * errorlevel)), Zyxr_dist(
00017 Z.GetZyx().real(), max(Z.GetdZyx(), Z.GetZyx().real()
00018 * errorlevel)), Zyxi_dist(Z.GetZyx().imag(), max(Z.GetdZyx(),
00019 Z.GetZyx().imag() * errorlevel)), Zyyr_dist(Z.GetZyy().real(),
00020 max(Z.GetdZyy(), Z.GetZyy().real() * errorlevel)), Zyyi_dist(
00021 Z.GetZyy().imag(), max(Z.GetdZyy(), Z.GetZyy().imag()
00022 * errorlevel)), Zxxr(generator, Zxxr_dist), Zxxi(generator,
00023 Zxxi_dist), Zxyr(generator, Zxyr_dist),
00024 Zxyi(generator, Zxyi_dist), Zyxr(generator, Zyxr_dist), Zyxi(
00025 generator, Zyxi_dist), Zyyr(generator, Zyyr_dist), Zyyi(
00026 generator, Zyyi_dist), func(f), Data(Z)
00027 {
00028 }
00029
00030 MTSampleGenerator::~MTSampleGenerator()
00031 {
00032 }
00033
00034 double MTSampleGenerator::operator()()
00035 {
00036 MTTensor Point(std::complex<double>(Zxxr(), Zxxi()), std::complex<
00037 double>(Zxyr(), Zxyi()), std::complex<double>(Zyxr(), Zyxi()),
00038 std::complex<double>(Zyyr(), Zyyi()), Data.GetFrequency());
00039 return func(&Point);
00040 }
00041 }