Skip to content
Snippets Groups Projects
Commit acdaa3b4 authored by Michele Ceriotti's avatar Michele Ceriotti
Browse files

Fixed bug in outputting analysis colvar files in some cases

parent 32daf83a
No related branches found
No related tags found
No related merge requests found
......@@ -21,6 +21,8 @@
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */
#include "AnalysisBase.h"
#include "ReadAnalysisFrames.h"
#include "reference/ReferenceConfiguration.h"
#include "reference/MetricRegister.h"
#include "core/PlumedMain.h"
#include "core/ActionSet.h"
#include "core/ActionRegister.h"
......@@ -41,12 +43,14 @@ namespace analysis {
class ReadDissimilarityMatrix : public AnalysisBase {
private:
unsigned nnodes;
ReferenceConfiguration* fake_data;
std::string fname, wfile;
Matrix<double> dissimilarities;
std::vector<double> weights;
public:
static void registerKeywords( Keywords& keys );
ReadDissimilarityMatrix( const ActionOptions& ao );
~ReadDissimilarityMatrix();
unsigned getNumberOfDataPoints() const ;
/// This gives an error as if we read in the matrix we dont have the coordinates
ReferenceConfiguration* getReferenceConfiguration( const unsigned& idata, const bool& calcdist );
......@@ -80,13 +84,16 @@ void ReadDissimilarityMatrix::registerKeywords( Keywords& keys ){
ReadDissimilarityMatrix::ReadDissimilarityMatrix( const ActionOptions& ao ):
Action(ao),
AnalysisBase(ao),
nnodes(1)
nnodes(1),
fake_data(NULL)
{
std::string mytraj; parse("FRAMES",mytraj);
if( mytraj.length()>0 ){
ReadAnalysisFrames* mtraj = plumed.getActionSet().selectWithLabel<ReadAnalysisFrames*>( mytraj );
if( !mtraj ) error(mytraj + " is not the label of a READ_ANALYSIS_FRAMES object");
mydata = dynamic_cast<AnalysisBase*>( mtraj ); mydata->use_all_data=true;
} else {
fake_data=metricRegister().create<ReferenceConfiguration>( "OPTIMAL" );
}
if( mytraj.length()>0 && plumed.getActionSet().size()!=1 ) error("should only be this action and the READ_ANALYSIS_FRAMES command in the input file");
......@@ -104,6 +111,10 @@ nnodes(1)
use_all_data=true; freq=1; setStride(1);
}
ReadDissimilarityMatrix::~ReadDissimilarityMatrix(){
if( fake_data ) delete fake_data;
}
void ReadDissimilarityMatrix::update(){ if(!mydata) plumed.stop(); }
void ReadDissimilarityMatrix::performAnalysis(){
......@@ -147,8 +158,9 @@ double ReadDissimilarityMatrix::getDissimilarity( const unsigned& iframe, const
}
ReferenceConfiguration* ReadDissimilarityMatrix::getReferenceConfiguration( const unsigned& idata, const bool& calcdist ){
plumed_massert( !calcdist, "cannot calc dist as this data was read in from input");
if( mydata ) return AnalysisBase::getReferenceConfiguration( idata, calcdist );
plumed_merror("cannot get reference configurations from read in dissimilarity matrix");
return fake_data;
return NULL;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment