diff --git a/src/casekit/nmr/analysis/HOSECodeShiftStatistics.java b/src/casekit/nmr/analysis/HOSECodeShiftStatistics.java index a8c6a1a..6b7e144 100644 --- a/src/casekit/nmr/analysis/HOSECodeShiftStatistics.java +++ b/src/casekit/nmr/analysis/HOSECodeShiftStatistics.java @@ -17,6 +17,7 @@ import org.bson.Document; import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IBond; import org.openscience.cdk.layout.StructureDiagramGenerator; import org.openscience.nmrshiftdb.util.AtomUtils; import org.openscience.nmrshiftdb.util.ExtendedHOSECodeGenerator; @@ -28,6 +29,8 @@ public class HOSECodeShiftStatistics { private final static Gson GSON = new GsonBuilder().setLenient() .create(); + private final static StructureDiagramGenerator structureDiagramGenerator = new StructureDiagramGenerator(); + private final static ExtendedHOSECodeGenerator extendedHOSECodeGenerator = new ExtendedHOSECodeGenerator(); public static Map>> collectHOSECodeShifts(final List dataSetList, final Integer maxSphere, @@ -60,8 +63,6 @@ public static Map>> collectHOSECodeShifts(final public static boolean insert(final DataSet dataSet, final Integer maxSphere, final boolean use3D, final boolean withExplicitH, final Map>> hoseCodeShifts) { - final StructureDiagramGenerator structureDiagramGenerator = new StructureDiagramGenerator(); - final ExtendedHOSECodeGenerator extendedHOSECodeGenerator = new ExtendedHOSECodeGenerator(); final IAtomContainer structure; Signal signal; String hoseCode; @@ -101,6 +102,14 @@ public static boolean insert(final DataSet dataSet, final Integer maxSphere, fin if (use3D) { try { + // store wedge bond information + final int[] ordinals = new int[structure.getBondCount()]; + int k = 0; + for (final IBond bond : structure.bonds()) { + ordinals[k] = bond.getStereo() + .ordinal(); + k++; + } // set 2D coordinates structureDiagramGenerator.setMolecule(structure); structureDiagramGenerator.generateCoordinates(structure); @@ -108,6 +117,17 @@ public static boolean insert(final DataSet dataSet, final Integer maxSphere, fin Utils.convertExplicitToImplicitHydrogens(structure); /* add explicit H atoms */ AtomUtils.addAndPlaceHydrogens(structure); + // restore wedge bond information + k = 0; + for (final IBond bond : structure.bonds()) { + bond.setStereo(IBond.Stereo.values()[ordinals[k]]); + + k++; + if (k + >= ordinals.length) { + break; + } + } } catch (final CDKException | IOException | ClassNotFoundException e) { e.printStackTrace(); } diff --git a/src/casekit/nmr/model/StructureCompact.java b/src/casekit/nmr/model/StructureCompact.java index 18421d2..01f6fac 100644 --- a/src/casekit/nmr/model/StructureCompact.java +++ b/src/casekit/nmr/model/StructureCompact.java @@ -39,7 +39,7 @@ @Setter public class StructureCompact { - private int[][][] bondProperties; // connected atom index, bond order, bond is in ring, bond is aromatic + private int[][][] bondProperties; // connected atom index, bond order, bond is in ring, bond is aromatic, bond stereo configuration private Integer[][] atomProperties; // element symbol, hybridization, implicitHydrogenCount, valency, formalCharge, isInRingAtom, isAromaticAtom public StructureCompact(final IAtomContainer ac) { @@ -61,7 +61,8 @@ public StructureCompact(final IAtomContainer ac) { ? 1 : 0, bond.isAromatic() ? 1 - : 0}); + : 0, + bond.getStereo().ordinal()}); } } temp = new int[connectedAtomsList.size()][]; @@ -147,6 +148,7 @@ public IAtomContainer toAtomContainer() { == 1); bond.setIsAromatic(this.bondProperties[i][k][3] == 1); + bond.setStereo(IBond.Stereo.values()[this.bondProperties[i][k][4]]); ac.addBond(bond); } } diff --git a/src/casekit/nmr/utils/Utils.java b/src/casekit/nmr/utils/Utils.java index 67ccc76..ee98352 100644 --- a/src/casekit/nmr/utils/Utils.java +++ b/src/casekit/nmr/utils/Utils.java @@ -579,7 +579,7 @@ public static Float getBondOrderSum(final IAtomContainer ac, final int atomIndex * @throws CDKException */ public static DataSet atomContainerToDataSet(final IAtomContainer structure) throws CDKException { - return atomContainerToDataSet(structure, true); + return atomContainerToDataSet(structure, false); } /**