Skip to content

Commit 58f108c

Browse files
committed
Fix symmetry axes position bug
Wrong order of matrix multiplication (a.mul(b) = a*b in vecmath)
1 parent eef9765 commit 58f108c

2 files changed

Lines changed: 9 additions & 9 deletions

File tree

biojava-structure/src/main/java/org/biojava/nbio/structure/symmetry/internal/SymmetryAxes.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -480,24 +480,24 @@ private void getSymmetryAxes(List<Axis> symmAxes, Matrix4d prior, int level, int
480480
// elementary maps B -> A
481481
// prior maps I -> A and J -> B
482482
// want J -> I = J -> B -> A <- I= inv(prior) * elementary * prior
483-
Matrix4d invPrior = new Matrix4d(prior);
484-
invPrior.invert();
485483
Matrix4d currAxisOp = new Matrix4d(prior);
484+
currAxisOp.invert();
486485
currAxisOp.mul(elemOp);
487-
Matrix4d newPrior = new Matrix4d(currAxisOp);//save intermediate for later
488-
currAxisOp.mul(invPrior);
486+
currAxisOp.mul(prior);
489487
Axis currAxis = new Axis(currAxisOp,elem.getOrder(),elem.getSymmType());
490488
currAxis.setLevel(level);
491489
currAxis.setFirstRepeat(firstRepeat);
492490
symmAxes.add(currAxis);
493491

494-
//New prior is elementary^d*prior
495492
//Remember that all degrees are at least 2
496493
getSymmetryAxes(symmAxes,prior,level+1,0);
494+
//New prior is elementary^d*prior
495+
Matrix4d newPrior = new Matrix4d(elemOp);
496+
newPrior.mul(prior);
497497
int childSize = getNumRepeats(level+1);
498498
getSymmetryAxes(symmAxes,newPrior,level+1,childSize);
499499
for(int d=2;d<elem.getOrder();d++) {
500-
newPrior.mul(elemOp);
500+
newPrior.mul(elemOp,newPrior);
501501
getSymmetryAxes(symmAxes,newPrior,level+1,childSize*d);
502502
}
503503
}

biojava-structure/src/test/java/org/biojava/nbio/structure/symmetry/internal/TestSymmetryAxes.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public void testClosedCase() {
3535
assertEquals(2,axes.getElementaryAxes().size());
3636

3737
Matrix4d expectedEven = new Matrix4d();
38-
expectedEven.set(1);
38+
expectedEven.setIdentity();
3939
Matrix4d expectedOdd = new Matrix4d(r180);
4040
assertEquals(expectedEven, axes.getRepeatTransform(0));
4141
assertEquals(expectedOdd, axes.getRepeatTransform(1));
@@ -186,7 +186,7 @@ public void testOpenCase() {
186186
assertEquals(2,axes.getElementaryAxes().size());
187187

188188
Matrix4d expectedEven = new Matrix4d();
189-
expectedEven.set(1);
189+
expectedEven.setIdentity();
190190
Matrix4d expectedOdd = new Matrix4d(r180);
191191
assertEquals(expectedEven, axes.getRepeatTransform(0));
192192
assertEquals(expectedOdd, axes.getRepeatTransform(1));
@@ -334,7 +334,7 @@ public void testOpenCaseOld() {
334334
assertEquals(2,axes.getElementaryAxes().size());
335335

336336
Matrix4d expectedEven = new Matrix4d();
337-
expectedEven.set(1);
337+
expectedEven.setIdentity();
338338
Matrix4d expectedOdd = new Matrix4d(r180);
339339
assertEquals(expectedEven, axes.getRepeatTransform(0));
340340
assertEquals(expectedOdd, axes.getRepeatTransform(1));

0 commit comments

Comments
 (0)