00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "PeakViewSource.h"
00020 #include "peakView.h"
00021
00022 using std::ostringstream;
00023 using namespace Marsyas;
00024
00025 PeakViewSource::PeakViewSource(mrs_string name):MarSystem("PeakViewSource", name)
00026 {
00027 addControls();
00028 filename_ = "EMPTY_STRING";
00029 frameIdx_ = 0;
00030 numFrames_ = 0;
00031 frameSize_ = 0;
00032 }
00033
00034 PeakViewSource::PeakViewSource(const PeakViewSource& a) : MarSystem(a)
00035 {
00036 ctrl_filename_ = getctrl("mrs_string/filename");
00037 ctrl_pos_= getctrl("mrs_natural/pos");
00038 ctrl_size_ = getctrl("mrs_natural/size");
00039 ctrl_hasData_ = getctrl("mrs_bool/hasData");
00040 ctrl_frameMaxNumPeaks_ = getctrl("mrs_natural/frameMaxNumPeaks");
00041 ctrl_totalNumPeaks_ = getctrl("mrs_natural/totalNumPeaks");
00042 ctrl_nTimes_ = getctrl("mrs_natural/nTimes");
00043 ctrl_ignGroups_ = getctrl("mrs_bool/ignoreGroups");
00044 ctrl_noNegativeGroups_ = getctrl("mrs_bool/discardNegativeGroups");
00045
00046 filename_ = a.filename_;
00047 frameIdx_ = a.frameIdx_;
00048 numFrames_ = a.numFrames_;
00049 frameSize_ = a.frameSize_;
00050 }
00051
00052 PeakViewSource::~PeakViewSource()
00053 {
00054 }
00055
00056 MarSystem*
00057 PeakViewSource::clone() const
00058 {
00059 return new PeakViewSource(*this);
00060 }
00061
00062 void
00063 PeakViewSource::addControls()
00064 {
00065 addctrl("mrs_string/filename", "defaultfile", ctrl_filename_);
00066 setctrlState("mrs_string/filename", true);
00067
00068 addctrl("mrs_natural/frameMaxNumPeaks", 0, ctrl_frameMaxNumPeaks_);
00069 addctrl("mrs_natural/totalNumPeaks", 0, ctrl_totalNumPeaks_);
00070 addctrl("mrs_natural/nTimes", 1, ctrl_nTimes_);
00071
00072 addctrl("mrs_bool/hasData", false, ctrl_hasData_);
00073 addctrl("mrs_natural/size", 0, ctrl_size_);
00074 addctrl("mrs_natural/pos", 0, ctrl_pos_);
00075
00076 addControl("mrs_bool/ignoreGroups", false, ctrl_ignGroups_);
00077 addControl("mrs_bool/discardNegativeGroups", false, ctrl_noNegativeGroups_);
00078
00079 }
00080
00081 void
00082 PeakViewSource::defaultConfig()
00083 {
00084 ctrl_onSamples_->setValue(1, NOUPDATE);
00085 ctrl_onObservations_->setValue(0, NOUPDATE);
00086 ctrl_osrate_->setValue(0.0, NOUPDATE);
00087 ctrl_onObsNames_->setValue(",", NOUPDATE);
00088
00089 ctrl_pos_->setValue(0, NOUPDATE);
00090 ctrl_size_->setValue(0, NOUPDATE);
00091 ctrl_hasData_->setValue(false, NOUPDATE);
00092 peakData_.create(0);
00093 frameIdx_ = 0;
00094 numFrames_ = 0;
00095 }
00096
00097 void
00098 PeakViewSource::myUpdate(MarControlPtr sender)
00099 {
00100 (void) sender;
00101
00102
00103
00104 {
00105
00106 if(ctrl_filename_->to<mrs_string>() == "defaultfile")
00107 {
00108 defaultConfig();
00109 }
00110 else
00111 {
00112
00113 peakView peakDataView(peakData_);
00114 if(peakDataView.peakRead(ctrl_filename_->to<mrs_string>()))
00115 {
00116 numFrames_ = peakDataView.getNumFrames();
00117 frameSize_ = peakDataView.getFrameSize();
00118
00119 ctrl_frameMaxNumPeaks_->setValue (peakDataView.getFrameMaxNumPeaks());
00120
00121
00122 ctrl_onSamples_->setValue(ctrl_nTimes_->to<mrs_natural>(), NOUPDATE);
00123 ctrl_onObservations_->setValue(ctrl_frameMaxNumPeaks_->to<mrs_natural>() * peakView::nbPkParameters, NOUPDATE);
00124 ctrl_osrate_->setValue(peakDataView.getFs(), NOUPDATE);
00125 ostringstream oss;
00126 for(mrs_natural j=0; j< peakView::nbPkParameters; ++j)
00127 {
00128 for (mrs_natural i=0; i < ctrl_frameMaxNumPeaks_->to<mrs_natural>(); ++i)
00129 oss << peakView::getParamName(j) << "_" << i+j*ctrl_frameMaxNumPeaks_->to<mrs_natural>() << ",";
00130 }
00131 ctrl_onObsNames_->setValue(oss.str(), NOUPDATE);
00132
00133 filename_ = ctrl_filename_->to<mrs_string>();
00134 frameIdx_ = 0;
00135 ctrl_size_->setValue(numFrames_*frameSize_, NOUPDATE);
00136 ctrl_pos_->setValue(0, NOUPDATE);
00137 ctrl_hasData_->setValue(true, NOUPDATE);
00138 }
00139 else
00140 {
00141 MRSERR("PeakViewSource::myUpdate() : error opening file: " << filename_);
00142 defaultConfig();
00143 }
00144 }
00145 }
00146
00147
00148
00149
00150 }
00151
00152 void
00153 PeakViewSource::myProcess(realvec& in, realvec& out)
00154 {
00155 (void) in;
00156
00157 mrs_natural totalNumPeaks = 0,
00158 frameMaxNumPeaks = ctrl_frameMaxNumPeaks_->to<mrs_natural>();
00159 mrs_natural nTimes = ctrl_nTimes_->to<mrs_natural>();
00160 mrs_natural numRows = peakData_.getRows();
00161 const mrs_bool ignoreGroups = ctrl_ignGroups_->to<mrs_bool>();
00162
00163
00164 for (mrs_natural f = 0; f < nTimes; f++)
00165 {
00166
00167 if(ctrl_hasData_->isTrue())
00168 {
00169 ctrl_pos_->setValue(frameIdx_*frameSize_);
00170
00171 for(mrs_natural o=0; o < numRows; ++o)
00172 {
00173 mrs_real currData = peakData_(o, frameIdx_);
00174 out(o,f) = currData;
00175 if (o / frameMaxNumPeaks == peakView::pkFrequency)
00176 if (currData != 0)
00177 totalNumPeaks++;
00178 if (ignoreGroups && (o / frameMaxNumPeaks == peakView::pkGroup))
00179 if (currData < 0)
00180 out(o, f) = 0;
00181
00182 }
00183
00184 frameIdx_++;
00185 if(frameIdx_ == numFrames_)
00186 ctrl_hasData_->setValue(false);
00187 }
00188 }
00189 if (ctrl_noNegativeGroups_->to<mrs_bool>())
00190 {
00191 discardNegativeGroups (out);
00192 totalNumPeaks = peakView(out).getTotalNumPeaks ();
00193 }
00194
00195 ctrl_totalNumPeaks_->setValue(totalNumPeaks);
00196 }
00197
00198 void PeakViewSource::discardNegativeGroups (mrs_realvec &output)
00199 {
00200 peakView Out(output);
00201 mrs_natural numFrames = Out.getNumFrames ();
00202 for (mrs_natural f = numFrames-1; f >= 0 ; f--)
00203 {
00204 mrs_natural frameNumPeaks = Out.getFrameNumPeaks ();
00205
00206 for (mrs_natural i = frameNumPeaks-1; i >= 0; i--)
00207 {
00208 if (Out(i,peakView::pkGroup, f) < 0)
00209 Out.removePeak(i, f);
00210 }
00211 }
00212 }