00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "Centroid.h"
00021
00022 using std::ostringstream;
00023 using namespace Marsyas;
00024
00025 Centroid::Centroid(mrs_string name):MarSystem("Centroid", name)
00026 {
00027 m0_ = 0.0;
00028 m1_ = 0.0;
00029 }
00030
00031 Centroid::~Centroid()
00032 {
00033 }
00034
00035 MarSystem*
00036 Centroid::clone() const
00037 {
00038 return new Centroid(*this);
00039 }
00040
00041 void
00042 Centroid::myUpdate(MarControlPtr sender)
00043 {
00044 (void) sender;
00045
00046 MRSDIAG("Centroid.cpp - Centroid:myUpdate");
00047 ctrl_onSamples_->setValue(ctrl_inSamples_, NOUPDATE);
00048 ctrl_onObservations_->setValue((mrs_natural)1, NOUPDATE);
00049 ctrl_osrate_->setValue(ctrl_israte_, NOUPDATE);
00050 ctrl_onObsNames_->setValue("Centroid_" + ctrl_inObsNames_->to<mrs_string>() , NOUPDATE);
00051 }
00052
00053 void
00054 Centroid::myProcess(realvec& in, realvec& out)
00055 {
00056 mrs_natural o,t;
00057
00058
00059 for (t = 0; t < inSamples_; t++)
00060 {
00061 m0_ = 0.0;
00062 m1_ = 0.0;
00063 for (o=0; o < inObservations_; o++)
00064 {
00065 m1_ += o * in(o,t);
00066 m0_ += in(o,t);
00067 }
00068 if (m0_ != 0.0)
00069 out(0,t) = (m1_ / m0_) / inObservations_;
00070 else
00071 out(0,t) = 0.5;
00072 }
00073
00074 }