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