From f85e929819b90f0d4f586ce51e423581a9369e07 Mon Sep 17 00:00:00 2001
From: Tobias Schmidt <tobias.schmidt@unibas.ch>
Date: Fri, 1 Jul 2011 15:51:37 +0200
Subject: [PATCH] fixed wrong CHARMM dialect TER field, added test case
 (BZDNG-277)

---
 modules/io/src/mol/pdb_writer.cc              |  2 +-
 modules/io/tests/test_io_pdb.cc               | 22 +++++++++++++++++++
 modules/io/tests/testfiles/pdb/charmm_ter.pdb |  4 ++++
 3 files changed, 27 insertions(+), 1 deletion(-)
 create mode 100644 modules/io/tests/testfiles/pdb/charmm_ter.pdb

diff --git a/modules/io/src/mol/pdb_writer.cc b/modules/io/src/mol/pdb_writer.cc
index 45115e9a7..249aacbb4 100644
--- a/modules/io/src/mol/pdb_writer.cc
+++ b/modules/io/src/mol/pdb_writer.cc
@@ -254,7 +254,7 @@ public:
     line_(0, 6)=StringRef("TER   ", 6);
     line_( 6, 5)=fmt::LPaddedInt(counter_);
     line_(17, 3)=fmt::LPadded(res.GetKey());
-    if (!res.GetChain().GetName().empty()) {
+    if (!res.GetChain().GetName().empty() && !charmm_style_) {
       line_[21]=res.GetChain().GetName()[0];
     }
 
diff --git a/modules/io/tests/test_io_pdb.cc b/modules/io/tests/test_io_pdb.cc
index 4c69702bf..c9ba6bfdb 100644
--- a/modules/io/tests/test_io_pdb.cc
+++ b/modules/io/tests/test_io_pdb.cc
@@ -647,4 +647,26 @@ BOOST_AUTO_TEST_CASE(charmm_longcname)
                             "testfiles/pdb/charmm_longcname-out.pdb"));
 }
 
+BOOST_AUTO_TEST_CASE(write_charmm_ter)
+{
+  {
+    PDBWriter writer(String("testfiles/pdb/charmm_ter-out.pdb"),
+                     IOProfile("CHARMM", true, false, false,
+                               false, false, false));
+
+    mol::EntityHandle ent=mol::CreateEntity();
+    mol::XCSEditor edi=ent.EditXCS();
+    mol::ChainHandle ch=edi.InsertChain("A");
+    mol::ResidueHandle r=edi.AppendResidue(ch, "ALA");
+    mol::AtomHandle a=edi.InsertAtom(r, "N", geom::Vec3(32.0, -128.0, -2.5));
+    mol::ResidueHandle r2=edi.AppendResidue(ch, "GLY");
+    mol::AtomHandle a2=edi.InsertAtom(r2, "N", geom::Vec3(35.0, -99.0, -10.5));
+    conop::Conopology& conop_inst=conop::Conopology::Instance();
+    conop_inst.ConnectAll(conop_inst.GetBuilder(), ent);
+    writer.Write(ent);
+  }
+  BOOST_CHECK(compare_files("testfiles/pdb/charmm_ter.pdb",
+                            "testfiles/pdb/charmm_ter-out.pdb"));
+}
+
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/modules/io/tests/testfiles/pdb/charmm_ter.pdb b/modules/io/tests/testfiles/pdb/charmm_ter.pdb
new file mode 100644
index 000000000..5a940ab62
--- /dev/null
+++ b/modules/io/tests/testfiles/pdb/charmm_ter.pdb
@@ -0,0 +1,4 @@
+ATOM      1  N   ALA     1      32.000-128.000  -2.500  1.00  0.00      A    N  
+ATOM      2  N   GLY     2      35.000 -99.000 -10.500  1.00  0.00      A    N  
+TER       3      GLY     2                                                      
+END   
-- 
GitLab