diff --git a/meldata.cc b/meldata.cc index 6d6fd082b305be2084b8688be173c7cb2f02cf66..0dc130db0e1665da769bb33fa145bacb425eb82f 100644 --- a/meldata.cc +++ b/meldata.cc @@ -209,7 +209,10 @@ namespace Melodic{ tmpData = process_file(opts.inputfname.value().at(ctr), numfiles); if(opts.debug.value()) save4D(tmpData /numfiles,string("preproc_dat") + num2str(ctr+1)); - alldat += tmpData / numfiles; + if(tmpData.Ncols() == alldat.Ncols() && tmpData.Nrows() == alldat.Nrows()) + alldat += tmpData / numfiles; + else + message("Data dimensions do not match - ignoring "+opts.inputfname.value().at(ctr) << endl); } //update mask diff --git a/melica.cc b/melica.cc index d264066e075e05059b8aa421d1e3727909c5348d..b5d9b7c8e02105fd7c9553c9c65fd545aafa5281 100644 --- a/melica.cc +++ b/melica.cc @@ -114,13 +114,13 @@ namespace Melodic{ Matrix temp(melodat.get_dewhite() * redUMM); temp = melodat.expand_dimred(temp); temp = krapprox(temp,int(temp.Nrows()/melodat.get_numfiles())); - minAbsSin2 = 1 - diag(corrcoef(temp,rank1_old)).Minimum(); + minAbsSin2 = 1 - diag(abs(corrcoef(temp,rank1_old))).Minimum(); rank1_old = temp; temp = melodat.reduce_dimred(temp); redUMM = melodat.get_white() * temp; message(" change : " << abs(minAbsSin2) << endl); - if(abs(minAbsSin2) < 0.01 && abs(minAbsSin) < opts.epsilon.value()){ break;} + if(abs(minAbsSin2) < opts.epsilonS.value() && abs(minAbsSin) < opts.epsilon.value()){ break;} } } while( (itt_ctr2 < newmaxitts/opts.maxNumItt.value()) && diff --git a/meloptions.h b/meloptions.h index a49c9e17c760ed533b15deefc8b19d249618fa59..bc9cda62dd159dfe4e78c2399120aa9b6bc174fb 100644 --- a/meloptions.h +++ b/meloptions.h @@ -65,6 +65,7 @@ class MelodicOptions { Option<string> segment; Option<bool> tsmooth; Option<float> epsilon; + Option<float> epsilonS; Option<int> maxNumItt; Option<int> maxRestart; Option<int> rank1interval; @@ -212,6 +213,9 @@ class MelodicOptions { epsilon(string("--eps,--epsilon"), 0.0005, string("minimum error change"), false, requires_argument), + epsilonS(string("--epsS,--epsilonS"), 0.03, + string("minimum error change for rank-1 approximation in TICA"), + false, requires_argument), maxNumItt(string("--maxit"), 500, string("\tmaximum number of iterations before restart"), false, requires_argument), @@ -376,6 +380,7 @@ class MelodicOptions { options.add(segment); options.add(tsmooth); options.add(epsilon); + options.add(epsilonS); options.add(maxNumItt); options.add(maxRestart); options.add(rank1interval);