Skip to content

Commit

Permalink
SMARTS mass matching semantics, 0 = unspecified. Attempting to update…
Browse files Browse the repository at this point in the history
… the grammar was not successful.
  • Loading branch information
johnmay committed Mar 30, 2017
1 parent dec3e14 commit 5728eea
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
Expand Up @@ -34,14 +34,17 @@
*/
public class MassAtom extends SMARTSAtom {

private final int mass;

/**
* Creates a new instance
*
* @param mass
*/
public MassAtom(int mass, IChemObjectBuilder builder) {
super(builder);
this.setMassNumber(mass);
setMassNumber(mass);
this.mass = mass;
}

/*
Expand All @@ -52,7 +55,10 @@ public MassAtom(int mass, IChemObjectBuilder builder) {
*/
@Override
public boolean matches(IAtom atom) {
return atom.getMassNumber() == this.getMassNumber();
if (mass == 0)
return atom.getMassNumber() == null;
else
return atom.getMassNumber() != null && mass == atom.getMassNumber();
}

/*
Expand All @@ -61,7 +67,7 @@ public boolean matches(IAtom atom) {
*/
@Override
public String toString() {
return ("(MassAtom(" + this.getMassNumber() + ")");
return ("(MassAtom(" + mass + ")");
}

}
Expand Up @@ -86,6 +86,32 @@ public void ringSizeOrNumber_ringSize() throws Exception {
assertTrue(SmartsPattern.ringSizeOrNumber("[r5]"));
}

@Test
public void isotopes() throws Exception {
// FIXME SMARTS Grammar needs fixing/replacing [12] is not considered valid

assertFalse(SmartsPattern.create("[12*]", bldr).matches(smi("C")));
assertFalse(SmartsPattern.create("[12*]", bldr).matches(smi("[CH4]")));
assertTrue(SmartsPattern.create("[12*]", bldr).matches(smi("[12CH4]")));
assertFalse(SmartsPattern.create("[12*]", bldr).matches(smi("[13CH4]")));

assertFalse(SmartsPattern.create("[13*]", bldr).matches(smi("C")));
assertFalse(SmartsPattern.create("[13*]", bldr).matches(smi("[CH4]")));
assertFalse(SmartsPattern.create("[13*]", bldr).matches(smi("[12CH4]")));
assertTrue(SmartsPattern.create("[13*]", bldr).matches(smi("[13CH4]")));

assertTrue(SmartsPattern.create("[0*]", bldr).matches(smi("C")));
assertTrue(SmartsPattern.create("[0*]", bldr).matches(smi("[CH4]")));
assertFalse(SmartsPattern.create("[0*]", bldr).matches(smi("[12CH4]")));
assertFalse(SmartsPattern.create("[0*]", bldr).matches(smi("[13CH4]")));

// Not possible with current grammar
// assertFalse(SmartsPattern.create("[!0*]", bldr).matches(smi("C")));
// assertFalse(SmartsPattern.create("[!0*]", bldr).matches(smi("[CH4]")));
// assertTrue(SmartsPattern.create("[!0*]", bldr).matches(smi("[12CH4]")));
// assertTrue(SmartsPattern.create("[!0*]", bldr).matches(smi("[13CH4]")));
}

@Test
public void components() throws Exception {
assertTrue(SmartsPattern.create("(O).(O)", bldr).matches(smi("O.O")));
Expand Down

0 comments on commit 5728eea

Please sign in to comment.