00001
#ifndef __DATAFUNC_H
00002
#define __DATAFUNC_H
00003
00004
#include <vector>
00005
#include <selforg/matrix.h>
00006
00007
00008
00009 typedef matrix::Matrix (*
DataFunc)(
const std::vector<matrix::Matrix>& data,
int time);
00010
00011 matrix::Matrix tm12(
const std::vector<matrix::Matrix>& data,
int time){
00012 assert(time>1);
00013
return data[time-1].above(data[time-2]);
00014 }
00015
00016 matrix::Matrix tm123(
const std::vector<matrix::Matrix>& data,
int time){
00017 assert(time>2);
00018
return data[time-1].above(data[time-2].above(data[time-3]));
00019 }
00020
00021 matrix::Matrix tm125(
const std::vector<matrix::Matrix>& data,
int time){
00022 assert(time>4);
00023
return data[time-1].above(data[time-2].above(data[time-5]));
00024 }
00025
00026
00027 matrix::Matrix tm12345(
const std::vector<matrix::Matrix>& data,
int time){
00028 assert(time>4);
00029
return data[time-1].above(data[time-2].above(data[time-3].above(data[time-4].above(data[time-5]))));
00030 }
00031
00032 matrix::Matrix tm12358(
const std::vector<matrix::Matrix>& data,
int time){
00033 assert(time>7);
00034
return data[time-1].above(data[time-2].above(data[time-3].above(data[time-5].above(data[time-8]))));
00035 }
00036
00037 matrix::Matrix tm125_10_20(
const std::vector<matrix::Matrix>& data,
int time){
00038 assert(time>19);
00039
return data[time-1].above(data[time-2].above(data[time-5].above(data[time-10].above(data[time-20]))));
00040 }
00041
00042 matrix::Matrix tm1_to_20(
const std::vector<matrix::Matrix>& data,
int time){
00043 assert(time>19);
00044
matrix::Matrix rv=data[time-1];
00045
for(
int i=2; i<=20; i++){
00046 rv = rv.
above(data[time-i]);
00047 }
00048
return rv;
00049 }
00050
00051 matrix::Matrix t_01m1_to_10(
const std::vector<matrix::Matrix>& data,
int time){
00052 assert(time>9);
00053
matrix::Matrix rv=data[time].rows(0,1);
00054
for(
int i=1; i<=10; i++){
00055 rv = rv.
above(data[time-i]);
00056 }
00057
return rv;
00058 }
00059
00060 matrix::Matrix tm0_to_10_01(
const std::vector<matrix::Matrix>& data,
int time){
00061 assert(time>9);
00062
matrix::Matrix rv=data[time].rows(0,1);
00063
for(
int i=1; i<=10; i++){
00064 rv = rv.
above(data[time-i].rows(0,1));
00065 }
00066
return rv;
00067 }
00068
00069
00070 matrix::Matrix t(
const std::vector<matrix::Matrix>& data,
int time){
00071 assert(time>=0);
00072
return data[time];
00073 }
00074
00075 matrix::Matrix t_01(
const std::vector<matrix::Matrix>& data,
int time){
00076 assert(time>=0);
00077
return data[time].rows(0,1);
00078 }
00079
00080 matrix::Matrix t_012(
const std::vector<matrix::Matrix>& data,
int time){
00081 assert(time>=0);
00082
return data[time].rows(0,2);
00083 }
00084
00085 matrix::Matrix t_23(
const std::vector<matrix::Matrix>& data,
int time){
00086 assert(time>=0);
00087
return data[time].rows(2,3);
00088 }
00089
00090 DataFunc datafunctions(
const std::string& name){
00091
if(name==
"tm12")
return &
tm12;
00092
if(name==
"tm123")
return &
tm123;
00093
if(name==
"tm125")
return &
tm125;
00094
if(name==
"tm12345")
return &
tm12345;
00095
if(name==
"tm12358")
return &
tm12358;
00096
if(name==
"tm125_10_20")
return &
tm125_10_20;
00097
if(name==
"tm1-20")
return &
tm1_to_20;
00098
if(name==
"t_01m1-10")
return &
t_01m1_to_10;
00099
if(name==
"tm0-10_01")
return &
tm0_to_10_01;
00100
if(name==
"t")
return &
t;
00101
if(name==
"t_01")
return &
t_01;
00102
if(name==
"t_012")
return &
t_012;
00103
if(name==
"t_23")
return &
t_23;
00104 std::cerr <<
"Unknown Data-function: " << name << std::endl;
00105 exit(1);
00106
return 0;
00107 }
00108
00109
#endif