From 657b42a8c0eb048743ba8a3da06f33dddbb5814c Mon Sep 17 00:00:00 2001
From: Giovanni Bussi <giovanni.bussi@gmail.com>
Date: Wed, 16 Jan 2013 17:51:43 +0100
Subject: [PATCH] Some better check for input errors

---
 src/colvar/PathMSDBase.cpp | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/colvar/PathMSDBase.cpp b/src/colvar/PathMSDBase.cpp
index 945f40b11..6a3f23198 100644
--- a/src/colvar/PathMSDBase.cpp
+++ b/src/colvar/PathMSDBase.cpp
@@ -56,6 +56,8 @@ nframes(0)
 
   // open the file
   FILE* fp=fopen(reference.c_str(),"r");
+  unsigned nat=0;
+  std::vector<AtomNumber> aaa;
   if (fp!=NULL)
   {
     log<<"Opening reference file "<<reference.c_str()<<"\n";
@@ -66,6 +68,11 @@ nframes(0)
          do_read=mypdb.readFromFilepointer(fp,plumed.getAtoms().usingNaturalUnits(),0.1/atoms.getUnits().getLength());
          if(do_read){
             nframes++;
+            if(mypdb.getAtomNumbers().size()==0) error("number of atoms in a frame should be more than zero");
+            if(nat==0) nat=mypdb.getAtomNumbers().size();
+            if(nat!=mypdb.getAtomNumbers().size()) error("frames should have the same number of atoms");
+            if(aaa.empty()) aaa=mypdb.getAtomNumbers();
+            if(aaa!=mypdb.getAtomNumbers()) error("frames should contain same atoms in same order");
             log<<"Found PDB: "<<nframes<<" containing  "<<mypdb.getAtomNumbers().size()<<" atoms\n"; 
 	    pdbv.push_back(mypdb); 
 //            requestAtoms(mypdb.getAtomNumbers()); // is done in non base classes 
@@ -78,6 +85,7 @@ nframes(0)
     }
     fclose (fp);
     log<<"Found TOTAL "<<nframes<< " PDB in the file "<<reference.c_str()<<" \n"; 
+    if(nframes==0) error("at least one frame expected");
   } 
   if(neigh_stride>0. || neigh_size>0){
            if(neigh_size>nframes){
-- 
GitLab