00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "common.h"
00021
00022 #include "PlotSink.h"
00023 #include <iomanip>
00024
00025
00026 using std::ostringstream;
00027 using std::cout;
00028 using std::endl;
00029 using std::setw;
00030 using std::setfill;
00031
00032 using namespace Marsyas;
00033
00034 PlotSink::PlotSink(mrs_string name):MarSystem("PlotSink",name)
00035 {
00036 counter_ = 0;
00037 addControls();
00038 }
00039
00040 PlotSink::PlotSink(const PlotSink& a):MarSystem(a)
00041 {
00042 ctrl_messages_ = getctrl("mrs_bool/messages");
00043 ctrl_separator_ = getctrl("mrs_string/separator");
00044 ctrl_sequence_ = getctrl("mrs_bool/sequence");
00045 ctrl_filename_ = getctrl("mrs_string/filename");
00046 ctrl_matlab_ = getctrl("mrs_bool/matlab");
00047 ctrl_matlabCommand_ = getctrl("mrs_string/matlabCommand");
00048 }
00049
00050 PlotSink::~PlotSink()
00051 {
00052 }
00053
00054 MarSystem*
00055 PlotSink::clone() const
00056 {
00057 return new PlotSink(*this);
00058 }
00059
00060 void
00061 PlotSink::addControls()
00062 {
00063 addctrl("mrs_bool/messages", false, ctrl_messages_);
00064 addctrl("mrs_string/separator", ",", ctrl_separator_);
00065 addctrl("mrs_bool/sequence", true, ctrl_sequence_);
00066 addctrl("mrs_string/filename", "defaultfile", ctrl_filename_);
00067 addctrl("mrs_bool/matlab", false, ctrl_matlab_);
00068 addctrl("mrs_string/matlabCommand",
00069 "plot("+type_+"_"+name_+"_indata);", ctrl_matlabCommand_);
00070 }
00071
00072 void
00073 PlotSink::myProcess(realvec& in, realvec& out)
00074 {
00075 out = in;
00076 mrs_natural t,o;
00077
00078
00079 #ifdef MARSYAS_MATLAB
00080 if(ctrl_matlab_->isTrue())
00081 {
00082 MATLAB_PUT(in, type_+"_"+name_+"_indata")
00083 MATLAB_EVAL(ctrl_matlabCommand_->to<mrs_string>());
00084 }
00085 #endif
00086
00087 counter_++;
00088
00089 if (ctrl_sequence_->isTrue())
00090 {
00091
00092 ostringstream oss;
00093 oss << ctrl_filename_->to<mrs_string>() <<
00094 setfill('0') << setw(4) << counter_ << ".plot";
00095 cout << "name = " << name_ << " " << oss.str() << endl;
00096
00097 MRSMSG("Writing " << oss.str() << endl);
00098 in.write(oss.str());
00099 }
00100
00101 if(ctrl_messages_->isTrue())
00102 {
00103 mrs_string sep =ctrl_separator_->to<mrs_string>();
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 for (o=0; o < inObservations_; o++)
00125 {
00126 ostringstream oss;
00127 for (t = 0; t < inSamples_; t++)
00128 {
00129 if (t < inSamples_ - 1)
00130 {
00131 oss << out(o,t) << sep;
00132 }
00133 else
00134 {
00135 oss << out(o,t);
00136 }
00137 }
00138 mrs_string s = oss.str();
00139 MRSMSG(s << endl);
00140 }
00141 }
00142 }