From a135a9b598d84cf166735b0671078123e3df2b78 Mon Sep 17 00:00:00 2001 From: sandipde <1sandipde@gmail.com> Date: Mon, 22 Aug 2016 17:40:31 +0200 Subject: [PATCH] Made read dissimilarity matrix able to read rectangular matrices --- src/analysis/ReadDissimilarityMatrix.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/analysis/ReadDissimilarityMatrix.cpp b/src/analysis/ReadDissimilarityMatrix.cpp index e52b3f6f0..f886d8beb 100644 --- a/src/analysis/ReadDissimilarityMatrix.cpp +++ b/src/analysis/ReadDissimilarityMatrix.cpp @@ -46,7 +46,8 @@ private: unsigned nnodes; ReferenceConfiguration* fake_data; std::string fname, wfile; - Matrix<double> dissimilarities; +// Matrix<double> dissimilarities; + std::vector<std::vector<double> > dissimilarities; std::vector<double> weights; public: static void registerKeywords( Keywords& keys ); @@ -127,16 +128,19 @@ void ReadDissimilarityMatrix::performAnalysis(){ Tools::getParsedLine( mfile, words ); nnodes=words.size(); } - dissimilarities.resize( nnodes, nnodes ); - for(unsigned j=0;j<nnodes;++j) Tools::convert( words[j], dissimilarities(0,j) ); + if( mydata && nnodes!=getNumberOfDataPoints() ) error("mismatch between number of data points in trajectory and the dimensions of the dissimilarity matrix"); + + std::vector<double> tmpdis( nnodes ); + for(unsigned j=0;j<nnodes;++j) Tools::convert( words[j], tmpdis[j] ); + dissimilarities.push_back( tmpdis ); - for(unsigned i=1;i<nnodes;++i){ - Tools::getParsedLine( mfile, words ); - if( words.size()!=nnodes ) error("bad formatting in matrix file"); - for(unsigned j=0;j<nnodes;++j) Tools::convert( words[j], dissimilarities(i,j) ); + while( Tools::getParsedLine( mfile, words ) ){ + if( words.size()!=nnodes ) error("bad formatting in matrix file"); + for(unsigned j=0;j<nnodes;++j) Tools::convert( words[j], tmpdis[j] ); + dissimilarities.push_back( tmpdis ); } mfile.close(); - if( mydata && nnodes!=getNumberOfDataPoints() ) error("mismatch between number of data points in trajectory and the dimensions of the dissimilarity matrix"); + if( dissimilarities.size()>nnodes ) error("number of rows in input matrix should be less than or equal to the number of columns"); weights.resize( nnodes ); if( wfile.length()>0 ){ @@ -156,7 +160,7 @@ unsigned ReadDissimilarityMatrix::getNumberOfDataPoints() const { } double ReadDissimilarityMatrix::getDissimilarity( const unsigned& iframe, const unsigned& jframe ){ - return dissimilarities( iframe, jframe )*dissimilarities( iframe, jframe ); + return dissimilarities[iframe][jframe]*dissimilarities[iframe][jframe]; } ReferenceConfiguration* ReadDissimilarityMatrix::getReferenceConfiguration( const unsigned& idata, const bool& calcdist ){ -- GitLab