From bc9011a2d048ed0a40e44ff4cecd82796ac01eae Mon Sep 17 00:00:00 2001 From: Jose Manuel Duarte Date: Thu, 7 Dec 2017 15:09:16 -0800 Subject: [PATCH 1/4] Fix and unit test for #715 --- .../java/org/biojava/nbio/structure/Calc.java | 5 ++ .../org/biojava/nbio/structure/TestCalc.java | 47 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java b/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java index 1e5f6c17c6..8d8df53284 100644 --- a/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java +++ b/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java @@ -579,6 +579,11 @@ public static final void transform(Chain chain, Matrix4d m) { for (Atom atom : g.getAtoms()) { transform(atom, m); } + for (Group altG : g.getAltLocs()) { + for (Atom atom : altG.getAtoms()) { + transform(atom, m); + } + } } } diff --git a/biojava-structure/src/test/java/org/biojava/nbio/structure/TestCalc.java b/biojava-structure/src/test/java/org/biojava/nbio/structure/TestCalc.java index 3b48a402d8..2b85fff020 100644 --- a/biojava-structure/src/test/java/org/biojava/nbio/structure/TestCalc.java +++ b/biojava-structure/src/test/java/org/biojava/nbio/structure/TestCalc.java @@ -157,6 +157,53 @@ public void testVecmathTransformation() { assertEquals(expected, actual); } + + /** + * Issue https://github.com/biojava/biojava/issues/715 + */ + @Test + public void testChainTransform() { + Group g = new AminoAcidImpl(); + Atom a = new AtomImpl(); + a.setName("CA"); + a.setX(1); + a.setY(1); + a.setZ(1); + g.addAtom(a); + Group altLocG = new AminoAcidImpl(); + Atom a2 = new AtomImpl(); + a2.setName("CA"); + a2.setX(2); + a2.setY(2); + a2.setZ(2); + altLocG.addAtom(a2); + + g.addAltLoc(altLocG); + + Chain c = new ChainImpl(); + c.addGroup(g); + + Matrix4d m = new Matrix4d(1,0,0,1, 0,1,0,0, 0,0,1,0, 0,0,0,1); // shift of 1 in x axis + Calc.transform(c, m); + + Group thegroup = c.getAtomGroup(0); + Group thealtlocgroup = thegroup.getAltLocs().get(0); + + Atom atom1 = thegroup.getAtom("CA"); + Atom atom2 = thealtlocgroup.getAtom("CA"); + + // x should be shitfted by 1 + assertEquals(2, atom1.getX(), 0.00001); + assertEquals(1, atom1.getY(), 0.00001); + assertEquals(1, atom1.getZ(), 0.00001); + + // x should be shitfted by 1 + assertEquals(3, atom2.getX(), 0.00001); + assertEquals(2, atom2.getY(), 0.00001); + assertEquals(2, atom2.getZ(), 0.00001); + + + } private static Atom getAtom(double x, double y, double z) { Atom a = new AtomImpl(); From 3a1ad26c6d0df71508e58a52a114978b940b9022 Mon Sep 17 00:00:00 2001 From: Jose Manuel Duarte Date: Thu, 7 Dec 2017 17:16:09 -0800 Subject: [PATCH 2/4] Fixing also Calc.transform(Structure,Matrix4d) --- .../java/org/biojava/nbio/structure/Calc.java | 30 +++--- .../org/biojava/nbio/structure/TestCalc.java | 95 ++++++++++++++++--- 2 files changed, 95 insertions(+), 30 deletions(-) diff --git a/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java b/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java index 8d8df53284..70ef988e93 100644 --- a/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java +++ b/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java @@ -538,12 +538,13 @@ public static final void transform(Atom atom, Matrix4d m) { * @param m */ public static final void transform(Group group, Matrix4d m) { - AtomIterator iter = new AtomIterator(group); - - while (iter.hasNext()) { - Atom atom = iter.next(); + for (Atom atom : group.getAtoms()) { transform(atom, m); - + } + for (Group altG : group.getAltLocs()) { + for (Atom atom : altG.getAtoms()) { + transform(atom, m); + } } } @@ -556,12 +557,10 @@ public static final void transform(Group group, Matrix4d m) { * @param m */ public static final void transform(Structure structure, Matrix4d m) { - AtomIterator iter = new AtomIterator(structure); - - while (iter.hasNext()) { - Atom atom = iter.next(); - transform(atom, m); - + for (int n=0; n Date: Thu, 7 Dec 2017 17:55:51 -0800 Subject: [PATCH 3/4] Fixes for translate functions, similar to #715 --- .../java/org/biojava/nbio/structure/Calc.java | 25 ++- .../org/biojava/nbio/structure/TestCalc.java | 160 +++++++++++++----- 2 files changed, 131 insertions(+), 54 deletions(-) diff --git a/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java b/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java index 70ef988e93..ce294db288 100644 --- a/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java +++ b/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java @@ -601,12 +601,14 @@ public static final void translate(Atom atom, Vector3d v) { * @param v */ public static final void translate(Group group, Vector3d v) { - AtomIterator iter = new AtomIterator(group); - while (iter.hasNext()) { - Atom atom = iter.next(); + for (Atom atom : group.getAtoms()) { translate(atom, v); - + } + for (Group altG : group.getAltLocs()) { + for (Atom atom : altG.getAtoms()) { + translate(atom, v); + } } } @@ -620,9 +622,7 @@ public static final void translate(Group group, Vector3d v) { public static final void translate(Chain chain, Vector3d v) { for (Group g : chain.getAtomGroups()) { - for (Atom atom : g.getAtoms()) { - translate(atom, v); - } + translate(g, v); } } @@ -634,12 +634,11 @@ public static final void translate(Chain chain, Vector3d v) { * @param v */ public static final void translate(Structure structure, Vector3d v) { - AtomIterator iter = new AtomIterator(structure); - - while (iter.hasNext()) { - Atom atom = iter.next(); - translate(atom, v); - + + for (int n=0; n Date: Sat, 9 Dec 2017 07:51:52 -0800 Subject: [PATCH 4/4] Recursive transform for group --- .../src/main/java/org/biojava/nbio/structure/Calc.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java b/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java index ce294db288..f68a4b8ed9 100644 --- a/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java +++ b/biojava-structure/src/main/java/org/biojava/nbio/structure/Calc.java @@ -542,9 +542,7 @@ public static final void transform(Group group, Matrix4d m) { transform(atom, m); } for (Group altG : group.getAltLocs()) { - for (Atom atom : altG.getAtoms()) { - transform(atom, m); - } + transform(altG, m); } } @@ -606,9 +604,7 @@ public static final void translate(Group group, Vector3d v) { translate(atom, v); } for (Group altG : group.getAltLocs()) { - for (Atom atom : altG.getAtoms()) { - translate(atom, v); - } + translate(altG, v); } }