Skip to content

Commit bf07702

Browse files
johnmayegonw
authored andcommitted
Rename and make options consistent between V2000/V3000 reader. We also add a new option allow us to turn on/off 0d stereo perception.
1 parent 153c2c7 commit bf07702

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,10 @@ public class MDLV2000Reader extends DefaultChemObjectReader {
127127
BufferedReader input = null;
128128
private static ILoggingTool logger = LoggingToolFactory.createLoggingTool(MDLV2000Reader.class);
129129

130-
private BooleanIOSetting forceReadAs3DCoords;
131-
private BooleanIOSetting interpretHydrogenIsotopes;
132-
private BooleanIOSetting addStereoElements;
130+
private BooleanIOSetting optForce3d;
131+
private BooleanIOSetting optHydIso;
132+
private BooleanIOSetting optStereoPerc;
133+
private BooleanIOSetting optStereo0d;
133134

134135
// Pattern to remove trailing space (String.trim() will remove leading space, which we don't want)
135136
private static final Pattern TRAILING_SPACE = Pattern.compile("\\s+$");
@@ -412,7 +413,7 @@ private IAtomContainer readAtomContainer(IAtomContainer molecule) throws CDKExce
412413
// 0123456789012345678901
413414
if (is3Dfile(program)) {
414415
hasZ = true;
415-
} else if (!forceReadAs3DCoords.isSet()) {
416+
} else if (!optForce3d.isSet()) {
416417
for (IAtom atomToUpdate : atoms) {
417418
Point3d p3d = atomToUpdate.getPoint3d();
418419
if (p3d != null) {
@@ -455,7 +456,7 @@ private IAtomContainer readAtomContainer(IAtomContainer molecule) throws CDKExce
455456
}
456457

457458
// create 0D stereochemistry
458-
if (addStereoElements.isSet()) {
459+
if (optStereoPerc.isSet() && optStereo0d.isSet()) {
459460
Parities:
460461
for (Map.Entry<IAtom, Integer> e : parities.entrySet()) {
461462
int parity = e.getValue();
@@ -516,7 +517,7 @@ private IAtomContainer readAtomContainer(IAtomContainer molecule) throws CDKExce
516517
// don't have a hydrogen count for atoms and stereo perception isn't
517518
// currently possible
518519
if (!(outputContainer instanceof IQueryAtomContainer) && !isQuery &&
519-
addStereoElements.isSet() && hasX && hasY) {
520+
optStereoPerc.isSet() && hasX && hasY) {
520521
//ALS property could have changed an atom into a QueryAtom
521522
for(IAtom atom : outputContainer.atoms()){
522523
if (AtomRef.deref(atom) instanceof QueryAtom) {
@@ -528,7 +529,7 @@ private IAtomContainer readAtomContainer(IAtomContainer molecule) throws CDKExce
528529
if (hasZ) { // has 3D coordinates
529530
outputContainer.setStereoElements(StereoElementFactory.using3DCoordinates(outputContainer)
530531
.createAll());
531-
} else if (!forceReadAs3DCoords.isSet()) { // has 2D coordinates (set as 2D coordinates)
532+
} else if (!optForce3d.isSet()) { // has 2D coordinates (set as 2D coordinates)
532533
outputContainer.setStereoElements(StereoElementFactory.using2DCoordinates(outputContainer)
533534
.createAll());
534535
}
@@ -625,12 +626,14 @@ public void close() throws IOException {
625626
}
626627

627628
private void initIOSettings() {
628-
forceReadAs3DCoords = addSetting(new BooleanIOSetting("ForceReadAs3DCoordinates", IOSetting.Importance.LOW,
629+
optForce3d = addSetting(new BooleanIOSetting("ForceReadAs3DCoordinates", IOSetting.Importance.LOW,
629630
"Should coordinates always be read as 3D?", "false"));
630-
interpretHydrogenIsotopes = addSetting(new BooleanIOSetting("InterpretHydrogenIsotopes",
631+
optHydIso = addSetting(new BooleanIOSetting("InterpretHydrogenIsotopes",
631632
IOSetting.Importance.LOW, "Should D and T be interpreted as hydrogen isotopes?", "true"));
632-
addStereoElements = addSetting(new BooleanIOSetting("AddStereoElements", IOSetting.Importance.LOW,
633+
optStereoPerc = addSetting(new BooleanIOSetting("AddStereoElements", IOSetting.Importance.LOW,
633634
"Detect and create IStereoElements for the input.", "true"));
635+
optStereo0d = addSetting(new BooleanIOSetting("AddStereo0d", IOSetting.Importance.LOW,
636+
"Allow stereo created from parity value when no coordinates", "true"));
634637
}
635638

636639
public void customizeJob() {
@@ -1520,13 +1523,13 @@ private IAtom createAtom(String symbol, IChemObjectBuilder builder, int lineNum)
15201523
atom.setAtomicNumber(elem.number());
15211524
return atom;
15221525
}
1523-
if (symbol.equals("D") && interpretHydrogenIsotopes.isSet()) {
1526+
if (symbol.equals("D") && optHydIso.isSet()) {
15241527
handleError("invalid symbol: " + symbol, lineNum, 31, 33);
15251528
IAtom atom = builder.newInstance(IAtom.class, "H");
15261529
atom.setMassNumber(2);
15271530
return atom;
15281531
}
1529-
if (symbol.equals("T") && interpretHydrogenIsotopes.isSet()) {
1532+
if (symbol.equals("T") && optHydIso.isSet()) {
15301533
handleError("invalid symbol: " + symbol, lineNum, 31, 33);
15311534
IAtom atom = builder.newInstance(IAtom.class, "H");
15321535
atom.setMassNumber(3);

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import org.openscience.cdk.interfaces.IStereoElement;
3333
import org.openscience.cdk.io.formats.IResourceFormat;
3434
import org.openscience.cdk.io.formats.MDLV3000Format;
35+
import org.openscience.cdk.io.setting.BooleanIOSetting;
36+
import org.openscience.cdk.io.setting.IOSetting;
3537
import org.openscience.cdk.isomorphism.matchers.IQueryAtomContainer;
3638
import org.openscience.cdk.isomorphism.matchers.IQueryBond;
3739
import org.openscience.cdk.sgroup.Sgroup;
@@ -73,6 +75,11 @@
7375
*/
7476
public class MDLV3000Reader extends DefaultChemObjectReader {
7577

78+
private BooleanIOSetting optForce3d;
79+
private BooleanIOSetting optHydIso;
80+
private BooleanIOSetting optStereoPerc;
81+
private BooleanIOSetting optStereo0d;
82+
7683
BufferedReader input = null;
7784
private static ILoggingTool logger = LoggingToolFactory.createLoggingTool(MDLV3000Reader.class);
7885

@@ -484,7 +491,8 @@ public void readAtomBlock(IAtomContainer readData) throws CDKException {
484491
int numElectons = spinMultiplicity.getSingleElectrons();
485492
atom.setProperty(CDKConstants.SPIN_MULTIPLICITY, spinMultiplicity);
486493
while (numElectons-- > 0) {
487-
readData.addSingleElectron(readData.getBuilder().newInstance(ISingleElectron.class, atom));
494+
readData.addSingleElectron(readData.getBuilder()
495+
.newInstance(ISingleElectron.class, atom));
488496
}
489497
break;
490498
case "VAL":
@@ -829,6 +837,15 @@ public void close() throws IOException {
829837
}
830838

831839
private void initIOSettings() {
840+
optForce3d = addSetting(new BooleanIOSetting("ForceReadAs3DCoordinates", IOSetting.Importance.LOW,
841+
"Should coordinates always be read as 3D?", "false"));
842+
optHydIso = addSetting(new BooleanIOSetting("InterpretHydrogenIsotopes",
843+
IOSetting.Importance.LOW, "Should D and T be interpreted as hydrogen isotopes?", "true"));
844+
optStereoPerc = addSetting(new BooleanIOSetting("AddStereoElements", IOSetting.Importance.LOW,
845+
"Detect and create IStereoElements for the input.", "true"));
846+
optStereo0d = addSetting(new BooleanIOSetting("AddStereo0d", IOSetting.Importance.LOW,
847+
"Allow stereo created from parity value when no coordinates", "true"));
848+
832849
}
833850

834851
/**

0 commit comments

Comments
 (0)