From e155f2684ffa8cf2e801c78eb80abdc253c6fb16 Mon Sep 17 00:00:00 2001
From: Ansgar Philippsen <ansgar.philippsen@gmail.com>
Date: Wed, 5 Sep 2012 13:16:58 -0400
Subject: [PATCH] fixed residue sorting in mae importer

---
 modules/io/src/mol/entity_io_mae_handler.cc | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/modules/io/src/mol/entity_io_mae_handler.cc b/modules/io/src/mol/entity_io_mae_handler.cc
index 6a5306b05..f52a9b6b8 100644
--- a/modules/io/src/mol/entity_io_mae_handler.cc
+++ b/modules/io/src/mol/entity_io_mae_handler.cc
@@ -297,7 +297,23 @@ void MAEReader::parse_and_add_atom(mol::EntityHandle ent,
 
   if(update_residue) {
     if (!(curr_residue_=curr_chain_.FindResidue(rnum))) {
-      curr_residue_=editor.AppendResidue(curr_chain_, rkey, rnum);
+      if(curr_chain_.GetResidueCount()>0) {
+        int loc=curr_chain_.GetResidueCount()-1;
+        for(;loc>=0;--loc) {
+          if(curr_chain_.GetResidueByIndex(loc).GetNumber()<rnum) break;
+        }
+        if(loc<0) {
+          curr_residue_=editor.InsertResidueBefore(curr_chain_,0,rnum,rkey);
+        } else {
+          curr_residue_=editor.InsertResidueAfter(curr_chain_,loc,rnum,rkey);
+        }
+        if(!curr_residue_) {
+          // this should not happen...
+          curr_residue_=editor.AppendResidue(curr_chain_, rkey, rnum);
+        }
+      } else {
+        curr_residue_=editor.AppendResidue(curr_chain_, rkey, rnum);
+      }
       assert(curr_residue_.IsValid());
       LOG_TRACE(" new residue " << curr_residue_);
       ++residue_count_;
-- 
GitLab