00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "Median.h"
00020
00021
00022
00023
00024
00025 using std::ostringstream;
00026 using namespace Marsyas;
00027
00028 Median::Median(mrs_string name):MarSystem("Median", name)
00029 {
00030 addControls();
00031 }
00032
00033 Median::Median(const Median& a) : MarSystem(a)
00034 {
00035 }
00036
00037
00038 Median::~Median()
00039 {
00040 }
00041
00042 MarSystem*
00043 Median::clone() const
00044 {
00045 return new Median(*this);
00046 }
00047
00048 void
00049 Median::addControls()
00050 {
00051 }
00052
00053 void
00054 Median::myUpdate(MarControlPtr sender)
00055 {
00056 (void) sender;
00057 MRSDIAG("Median.cpp - Median:myUpdate");
00058
00059 ctrl_onSamples_->setValue((mrs_natural)1, NOUPDATE);
00060 ctrl_onObservations_->setValue(ctrl_inObservations_, NOUPDATE);
00061 ctrl_osrate_->setValue(ctrl_israte_, NOUPDATE);
00062
00063 obsrow_.create(ctrl_inSamples_->to<mrs_natural>());
00064
00065
00066 inObservations_ = ctrl_inObservations_->to<mrs_natural>();
00067
00068 ostringstream oss;
00069 mrs_string inObsNames = ctrl_inObsNames_->to<mrs_string>();
00070 for (int i = 0; i < inObservations_; ++i)
00071 {
00072 mrs_string inObsName;
00073 mrs_string temp;
00074 inObsName = inObsNames.substr(0, inObsNames.find(","));
00075 temp = inObsNames.substr(inObsNames.find(",")+1, inObsNames.length());
00076 inObsNames = temp;
00077 oss << "Median" << "_" << inObsName << ",";
00078 }
00079 ctrl_onObsNames_->setValue(oss.str(),NOUPDATE);
00080 }
00081
00082 void
00083 Median::myProcess(realvec& in, realvec& out)
00084 {
00085 mrs_natural t,o;
00086 out.setval(0.0);
00087 for (o=0; o < inObservations_; o++) {
00088 for (t = 0; t < inSamples_; t++) {
00089 obsrow_(t) = in(o,t);
00090 }
00091 out(o,0) = obsrow_.median();
00092 }
00093
00094 }