00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "Reassign.h"
00020 #include <cfloat>
00021
00022 using namespace std;
00023 using namespace Marsyas;
00024
00025 Reassign::Reassign(mrs_string name):MarSystem("Reassign",name)
00026 {
00027
00028
00029 }
00030
00031
00032 Reassign::~Reassign()
00033 {
00034 }
00035
00036
00037 MarSystem*
00038 Reassign::clone() const
00039 {
00040 return new Reassign(*this);
00041 }
00042
00043 void
00044 Reassign::myUpdate(MarControlPtr sender)
00045 {
00046 MRSDIAG("Reassign.cpp - Reassign:myUpdate");
00047
00048
00049
00050
00051 MarSystem::myUpdate(sender);
00052
00053 flag_.create(getctrl("mrs_natural/inSamples")->to<mrs_natural>());
00054
00055 setctrl("mrs_string/onObsNames", getctrl("mrs_string/inObsNames"));
00056 }
00057
00058 void
00059 Reassign::myProcess(realvec& in, realvec& out)
00060 {
00061 mrs_natural o,t,c;
00062 mrs_real mx = DBL_MIN;
00063 mrs_natural tmx = 0;
00064 flag_.setval(0.0);
00065
00066
00067 for (c=0; c < 5; ++c)
00068 {
00069
00070 for (o=0; o < inObservations_; o++)
00071 for (t = 0; t < inSamples_/2; t++)
00072 {
00073 if ((in(o,t) > mx)&&(flag_(t) == 0.0))
00074 {
00075 mx = in(o,t);
00076 tmx = t;
00077 }
00078 }
00079
00080
00081 flag_(tmx) = 1.0;
00082 mx = DBL_MIN;
00083 out(0,tmx) = in(0,tmx);
00084
00085
00086 if ((tmx-1 > 0) && (tmx-1 < inSamples_))
00087 {
00088 out(0, tmx) += in(0,tmx-1);
00089 out(0,tmx-1) = 0.0;
00090 flag_(tmx-1) = 1.0;
00091 }
00092
00093
00094 if ((tmx+1 > 0) && (tmx+1 < inSamples_))
00095 {
00096 out(0, tmx) += in(0, tmx+1);
00097 out(0,tmx+1) = 0.0;
00098 flag_(tmx+1) = 1.0;
00099 }
00100
00101 if ((tmx-2 > 0) && (tmx-2 < inSamples_))
00102 {
00103 out(0, tmx) += in(0, tmx-2);
00104 out(0,tmx-2) = 0.0;
00105 flag_(tmx-2) = 1.0;
00106 }
00107
00108
00109 if ((tmx+2 > 0) && (tmx+2 < inSamples_))
00110 {
00111 out(0, tmx) += in(0, tmx+2);
00112 out(0,tmx+2) = 0.0;
00113 flag_(tmx+2) = 1.0;
00114 }
00115
00116
00117 if ((tmx-3 > 0) && (tmx-3 < inSamples_))
00118 {
00119 out(0, tmx) += in(0, tmx-3);
00120 out(0,tmx-3) = 0.0;
00121 flag_(tmx-3) = 1.0;
00122 }
00123
00124
00125 if ((tmx+3 > 0) && (tmx+3 < inSamples_))
00126 {
00127 out(0, tmx) += in(0, tmx+3);
00128 out(0,tmx+3) = 0.0;
00129 flag_(tmx+3) = 1.0;
00130 }
00131
00132
00133 if ((tmx-4 > 0) && (tmx-4 < inSamples_))
00134 {
00135 out(0, tmx) += in(0, tmx-4);
00136 out(0,tmx-4) = 0.0;
00137 flag_(tmx-4) = 1.0;
00138 }
00139
00140
00141 if ((tmx+4 > 0) && (tmx+4 < inSamples_))
00142 {
00143 out(0, tmx) += in(0, tmx+4);
00144 out(0,tmx+4) = 0.0;
00145 flag_(tmx+4) = 1.0;
00146 }
00147
00148
00149 if ((tmx-5 > 0) && (tmx-5 < inSamples_))
00150 {
00151 out(0, tmx) += in(0, tmx-5);
00152 out(0,tmx-5) = 0.0;
00153 flag_(tmx-5) = 1.0;
00154 }
00155
00156
00157 if ((tmx+5 > 0) && (tmx+5 < inSamples_))
00158 {
00159 out(0, tmx) += in(0, tmx+5);
00160 out(0,tmx+5) = 0.0;
00161 flag_(tmx+5) = 1.0;
00162 }
00163
00164
00165 }
00166
00167
00168 flag_.setval(0.0);
00169
00170
00171 for (c=0; c < 4; ++c)
00172 {
00173
00174 for (o=0; o < inObservations_; o++)
00175 for (t = inSamples_/2; t < inSamples_; t++)
00176 {
00177 if ((in(o,t) > mx)&&(flag_(t) == 0.0))
00178 {
00179 mx = in(o,t);
00180 tmx = t;
00181 }
00182 }
00183
00184
00185 flag_(tmx) = 1.0;
00186 mx = DBL_MIN;
00187 out(0,tmx) = in(0,tmx);
00188
00189
00190 if ((tmx-1 > 0) && (tmx-1 < inSamples_))
00191 {
00192 out(0, tmx) += in(0,tmx-1);
00193 out(0,tmx-1) = 0.0;
00194 flag_(tmx-1) = 1.0;
00195 }
00196
00197
00198 if ((tmx+1 > 0) && (tmx+1 < inSamples_))
00199 {
00200 out(0, tmx) += in(0, tmx+1);
00201 out(0,tmx+1) = 0.0;
00202 flag_(tmx+1) = 1.0;
00203 }
00204
00205 if ((tmx-2 > 0) && (tmx-2 < inSamples_))
00206 {
00207 out(0, tmx) += in(0, tmx-2);
00208 out(0,tmx-2) = 0.0;
00209 flag_(tmx-2) = 1.0;
00210 }
00211
00212
00213 if ((tmx+2 > 0) && (tmx+2 < inSamples_))
00214 {
00215 out(0, tmx) += in(0, tmx+2);
00216 out(0,tmx+2) = 0.0;
00217 flag_(tmx+2) = 1.0;
00218 }
00219
00220
00221 if ((tmx-3 > 0) && (tmx-3 < inSamples_))
00222 {
00223 out(0, tmx) += in(0, tmx-3);
00224 out(0,tmx-3) = 0.0;
00225 flag_(tmx-3) = 1.0;
00226 }
00227
00228
00229 if ((tmx+3 > 0) && (tmx+3 < inSamples_))
00230 {
00231 out(0, tmx) += in(0, tmx+3);
00232 out(0,tmx+3) = 0.0;
00233 flag_(tmx+3) = 1.0;
00234 }
00235
00236
00237 if ((tmx-4 > 0) && (tmx-4 < inSamples_))
00238 {
00239 out(0, tmx) += in(0, tmx-4);
00240 out(0,tmx-4) = 0.0;
00241 flag_(tmx-4) = 1.0;
00242 }
00243
00244
00245 if ((tmx+4 > 0) && (tmx+4 < inSamples_))
00246 {
00247 out(0, tmx) += in(0, tmx+4);
00248 out(0,tmx+4) = 0.0;
00249 flag_(tmx+4) = 1.0;
00250 }
00251
00252
00253 if ((tmx-5 > 0) && (tmx-5 < inSamples_))
00254 {
00255 out(0, tmx) += in(0, tmx-5);
00256 out(0,tmx-5) = 0.0;
00257 flag_(tmx-5) = 1.0;
00258 }
00259
00260
00261 if ((tmx+5 > 0) && (tmx+5 < inSamples_))
00262 {
00263 out(0, tmx) += in(0, tmx+5);
00264 out(0,tmx+5) = 0.0;
00265 flag_(tmx+5) = 1.0;
00266 }
00267
00268
00269 }
00270
00271
00272
00273
00274
00275 }
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285