Skip to content

Commit 58849f6

Browse files
committed
Correct MDL V3000 reading, CFG=2 should be wavy bond. Also ensure passing null to setStereo doesn't cause an error.
1 parent 761f020 commit 58849f6

File tree

4 files changed

+53
-36
lines changed

4 files changed

+53
-36
lines changed

base/data/src/main/java/org/openscience/cdk/Bond.java

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -409,24 +409,27 @@ public IBond.Stereo getStereo() {
409409
*/
410410
@Override
411411
public void setStereo(IBond.Stereo stereo) {
412-
this.stereo = stereo;
413-
switch (stereo) {
414-
case UP:
415-
display = Display.WedgeBegin;
416-
break;
417-
case DOWN:
418-
display = Display.WedgedHashBegin;
419-
break;
420-
case UP_INVERTED:
421-
display = Display.WedgeEnd;
422-
break;
423-
case DOWN_INVERTED:
424-
display = Display.WedgedHashEnd;
425-
break;
426-
case UP_OR_DOWN:
427-
case UP_OR_DOWN_INVERTED:
428-
display = Display.Wavy;
429-
break;
412+
if (stereo == null) {
413+
this.display = Display.Solid;
414+
} else {
415+
switch (stereo) {
416+
case UP:
417+
display = Display.WedgeBegin;
418+
break;
419+
case DOWN:
420+
display = Display.WedgedHashBegin;
421+
break;
422+
case UP_INVERTED:
423+
display = Display.WedgeEnd;
424+
break;
425+
case DOWN_INVERTED:
426+
display = Display.WedgedHashEnd;
427+
break;
428+
case UP_OR_DOWN:
429+
case UP_OR_DOWN_INVERTED:
430+
display = Display.Wavy;
431+
break;
432+
}
430433
}
431434
notifyChanged();
432435
}

base/silent/src/main/java/org/openscience/cdk/silent/Bond.java

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -404,23 +404,27 @@ public IBond.Stereo getStereo() {
404404
@Override
405405
public void setStereo(IBond.Stereo stereo) {
406406
this.stereo = stereo;
407-
switch (stereo) {
408-
case UP:
409-
display = Display.WedgeBegin;
410-
break;
411-
case DOWN:
412-
display = Display.WedgedHashBegin;
413-
break;
414-
case UP_INVERTED:
415-
display = Display.WedgeEnd;
416-
break;
417-
case DOWN_INVERTED:
418-
display = Display.WedgedHashEnd;
419-
break;
420-
case UP_OR_DOWN:
421-
case UP_OR_DOWN_INVERTED:
422-
display = Display.Wavy;
423-
break;
407+
if (stereo == null) {
408+
this.display = Display.Solid;
409+
} else {
410+
switch (stereo) {
411+
case UP:
412+
display = Display.WedgeBegin;
413+
break;
414+
case DOWN:
415+
display = Display.WedgedHashBegin;
416+
break;
417+
case UP_INVERTED:
418+
display = Display.WedgeEnd;
419+
break;
420+
case DOWN_INVERTED:
421+
display = Display.WedgedHashEnd;
422+
break;
423+
case UP_OR_DOWN:
424+
case UP_OR_DOWN_INVERTED:
425+
display = Display.Wavy;
426+
break;
427+
}
424428
}
425429
}
426430

storage/ctab/src/main/java/org/openscience/cdk/io/MDLV3000Reader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,7 @@ public void readBondBlock(IAtomContainer readData) throws CDKException {
469469
} else if (configuration == 1) {
470470
bond.setStereo(IBond.Stereo.UP);
471471
} else if (configuration == 2) {
472-
bond.setStereo((IBond.Stereo) CDKConstants.UNSET);
472+
bond.setStereo(IBond.Stereo.UP_OR_DOWN);
473473
} else if (configuration == 3) {
474474
bond.setStereo(IBond.Stereo.DOWN);
475475
}

storage/ctab/src/test/java/org/openscience/cdk/io/MDLV3000ReaderTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
* */
2323
package org.openscience.cdk.io;
2424

25+
import org.hamcrest.CoreMatchers;
2526
import org.junit.Assert;
2627
import org.junit.BeforeClass;
2728
import org.junit.Test;
@@ -30,10 +31,12 @@
3031
import org.openscience.cdk.exception.CDKException;
3132
import org.openscience.cdk.interfaces.IAtom;
3233
import org.openscience.cdk.interfaces.IAtomContainer;
34+
import org.openscience.cdk.io.iterator.IteratingSDFReader;
3335
import org.openscience.cdk.sgroup.Sgroup;
3436
import org.openscience.cdk.sgroup.SgroupType;
3537
import org.openscience.cdk.silent.AtomContainer;
3638
import org.openscience.cdk.interfaces.IPseudoAtom;
39+
import org.openscience.cdk.silent.SilentChemObjectBuilder;
3740
import org.openscience.cdk.tools.ILoggingTool;
3841
import org.openscience.cdk.tools.LoggingToolFactory;
3942

@@ -144,4 +147,11 @@ public void testPseudoAtomLabels() throws Exception {
144147
assertThat(container.getAtom(0).getImplicitHydrogenCount(), is(3));
145148
}
146149
}
150+
151+
@Test public void issue602() throws Exception {
152+
try (MDLV3000Reader reader = new MDLV3000Reader(getClass().getResourceAsStream("issue602.mol"))) {
153+
IAtomContainer mol = reader.read(SilentChemObjectBuilder.getInstance().newAtomContainer());
154+
assertThat(mol.getAtomCount(), CoreMatchers.is(31));
155+
}
156+
}
147157
}

0 commit comments

Comments
 (0)