Skip to content

Commit

Permalink
truncated tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Rich Apodaca committed Jul 18, 2009
1 parent 4bf4b4d commit e3d0d82
Show file tree
Hide file tree
Showing 5 changed files with 461 additions and 228 deletions.
95 changes: 78 additions & 17 deletions src/com/metamolecular/mx/fingerprint/PathFingerprinter.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,21 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

package com.metamolecular.mx.fingerprint;

import com.metamolecular.mx.model.Atom;
import com.metamolecular.mx.model.Molecule;
import com.metamolecular.mx.query.AromaticAtomFilter;
import com.metamolecular.mx.ring.HanserRingFinder;
import com.metamolecular.mx.ring.RingFilter;
import com.metamolecular.mx.ring.RingFinder;
import com.metamolecular.mx.walk.DefaultWalker;
import com.metamolecular.mx.walk.PathWriter;
import com.metamolecular.mx.walk.Walker;
import java.util.BitSet;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
Expand All @@ -48,6 +50,8 @@ public class PathFingerprinter implements Fingerprinter
private Walker walker;
private RingFilter filter;
private Set<Atom> aromatics;
private RingFinder ringFinder;
private int ringBitCount;

public PathFingerprinter()
{
Expand All @@ -56,15 +60,33 @@ public PathFingerprinter()

public PathFingerprinter(RingFilter filter)
{
this.bloomFilter = new BloomFilter(1024);
this.bloomFilter = new BloomFilter(1004);
this.writer = new PathWriter(bloomFilter);
this.walker = new DefaultWalker();
this.filter = filter;
this.aromatics = new HashSet();

this.ringFinder = new HanserRingFinder();
this.ringBitCount = 20;

walker.setMaximumDepth(7);
}

public int getRingBitCount()
{
return ringBitCount;
}

public void reserveRingBits(int count)
{
if (count > bloomFilter.getBitArraySize())
{
throw new IllegalStateException("Attempting to set more ring bits than total bits.");
}

this.bloomFilter = new BloomFilter(getFingerprintLength() - count);
this.ringBitCount = count;
}

public RingFilter getRingFilter()
{
return filter;
Expand All @@ -87,39 +109,78 @@ public int getMaximumPathDepth()

public void setFingerprintLength(int length)
{
this.bloomFilter = new BloomFilter(length);
if (length < ringBitCount)
{
throw new IllegalStateException("Attempting to set fingerprint length below reserved ring bit count " + ringBitCount);
}

this.bloomFilter = new BloomFilter(length - ringBitCount);
}

public int getFingerprintLength()
{
return bloomFilter.getBitArraySize();
return bloomFilter.getBitArraySize() + ringBitCount;
}

public BitSet getFingerprint(Molecule molecule)
{
bloomFilter.clear();
findAromatics(molecule);
Collection<List<Atom>> rings = ringFinder.findRings(molecule);
findAromatics(molecule, rings);

recordWalk(molecule);

BitSet walkBits = bloomFilter.toBitSet();
BitSet result = new BitSet(getFingerprintLength());

result.or(walkBits);
// writeRingBits(result, rings);

return bloomFilter.toBitSet();
}

private void writeRingBits(BitSet bitset, Collection<List<Atom>> rings)
{
for (List<Atom> ring : rings)
{
// System.out.println("ring: " + (ring.size() - 1));
if (ring.size() < ringBitCount)
{
int index = bloomFilter.getBitArraySize() + (ring.size() - 4);

if (index < getFingerprintLength())
{
bitset.set(index);
}
}
}
}

private void recordWalk(Molecule molecule)
{
for (int i = 0; i < molecule.countAtoms(); i++)
{
Atom atom = molecule.getAtom(i);

walker.walk(atom, writer);
}

return bloomFilter.toBitSet();
}

private void findAromatics(Molecule molecule)
private void findAromatics(Molecule molecule, Collection<List<Atom>> rings)
{
aromatics.clear();
filter.filterAtoms(molecule, aromatics);

for (Atom atom : aromatics)
{
aromatics.add(atom);
}

filter.filterAtoms(molecule.countAtoms(), rings, aromatics);
writer.setAromatics(aromatics);
}
}// private void findAromatics(Molecule molecule)
// {
// aromatics.clear();
// filter.filterAtoms(molecule, aromatics);
//
// for (Atom atom : aromatics)
// {
// aromatics.add(atom);
// }
//
// writer.setAromatics(aromatics);
// }
}
16 changes: 16 additions & 0 deletions src/com/metamolecular/mx/ring/RingFilter.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,22 @@ public RingFilter(AtomMatcher filter, RingFinder finder)
comparator = new RingSizeComparator();
this.filter = filter;
}

public void filterAtoms(int atomLimit, Collection<List<Atom>> rings, Collection<Atom> atoms)
{
for (List<Atom> ring : rings)
{
if (atoms.size() >= atomLimit)
{
break;
}

if (ringMatches(ring))
{
atoms.addAll(ring);
}
}
}

public void filterAtoms(Molecule molecule, Collection<Atom> atoms)
{
Expand Down
62 changes: 31 additions & 31 deletions src/com/metamolecular/mx/test/MXTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,38 +39,38 @@ public static void main(String[] args)
{
TestSuite suite = new TestSuite();

suite.addTestSuite(MoleculeTest.class);
suite.addTestSuite(AtomTest.class);
suite.addTestSuite(BondTest.class);
suite.addTestSuite(MolfileReaderTest.class);
suite.addTestSuite(VirtualHydrogenCounterTest.class);
suite.addTestSuite(SMILESTokenizerTest.class);
suite.addTestSuite(SMILESReaderTest.class);
suite.addTestSuite(SMILESBuilderTest.class);
suite.addTestSuite(AtomicSystemTest.class);
suite.addTestSuite(MassCalculatorTest.class);
suite.addTestSuite(MoleculeKitTest.class);
suite.addTestSuite(SDFileReaderTest.class);
suite.addTestSuite(SDFileWriterTest.class);
suite.addTestSuite(PathEdgeTest.class);
suite.addTestSuite(PathGraphTest.class);
suite.addTestSuite(HanserRingFinderTest.class);
suite.addTestSuite(DefaultAtomMatcherTest.class);
suite.addTestSuite(QueryTest.class);
suite.addTestSuite(DefaultMapperTest.class);
suite.addTestSuite(DefaultStateTest.class);
suite.addTestSuite(SuperatomTest.class);
suite.addTestSuite(MolfileWriterTest.class);
suite.addTestSuite(ReducerTest.class);
suite.addTestSuite(TemplateCompilerTest.class);
// suite.addTestSuite(MoleculeTest.class);
// suite.addTestSuite(AtomTest.class);
// suite.addTestSuite(BondTest.class);
// suite.addTestSuite(MolfileReaderTest.class);
// suite.addTestSuite(VirtualHydrogenCounterTest.class);
// suite.addTestSuite(SMILESTokenizerTest.class);
// suite.addTestSuite(SMILESReaderTest.class);
// suite.addTestSuite(SMILESBuilderTest.class);
// suite.addTestSuite(AtomicSystemTest.class);
// suite.addTestSuite(MassCalculatorTest.class);
// suite.addTestSuite(MoleculeKitTest.class);
// suite.addTestSuite(SDFileReaderTest.class);
// suite.addTestSuite(SDFileWriterTest.class);
// suite.addTestSuite(PathEdgeTest.class);
// suite.addTestSuite(PathGraphTest.class);
// suite.addTestSuite(HanserRingFinderTest.class);
// suite.addTestSuite(DefaultAtomMatcherTest.class);
// suite.addTestSuite(QueryTest.class);
// suite.addTestSuite(DefaultMapperTest.class);
// suite.addTestSuite(DefaultStateTest.class);
// suite.addTestSuite(SuperatomTest.class);
// suite.addTestSuite(MolfileWriterTest.class);
// suite.addTestSuite(ReducerTest.class);
// suite.addTestSuite(TemplateCompilerTest.class);
suite.addTestSuite(PathFingerprinterTest.class);
suite.addTestSuite(DefaultBondMatcherTest.class);
suite.addTestSuite(RingFilterTest.class);
suite.addTestSuite(AromaticAtomFilterTest.class);
suite.addTestSuite(DefaultWalkerTest.class);
suite.addTestSuite(DefaultStepTest.class);
suite.addTestSuite(BloomFilterTest.class);
suite.addTestSuite(PathWriterTest.class);
// suite.addTestSuite(DefaultBondMatcherTest.class);
// suite.addTestSuite(RingFilterTest.class);
// suite.addTestSuite(AromaticAtomFilterTest.class);
// suite.addTestSuite(DefaultWalkerTest.class);
// suite.addTestSuite(DefaultStepTest.class);
// suite.addTestSuite(BloomFilterTest.class);
// suite.addTestSuite(PathWriterTest.class);

TestRunner.run(suite);
}
Expand Down
Loading

0 comments on commit e3d0d82

Please sign in to comment.