Skip to content

1.5.3 release notes

John May edited this page Aug 5, 2013 · 19 revisions

A sizeable release, primarily consisting of bug fixes and test refactoring. The module dependencies and test locations have a been refactored in preparation for using a modular build system (Maven/Gradle) which will likely be in place by 1.5.4. This release also starts using a new numbering for development versions where by the current version 1.5.4.git indicates it is the development snapshot of a 1.5.4 release.

Improved/Additional Features

for (IAtomContainer m : ms)
   m = AtomContainerManipulator.removeNonChiralHydrogens(m);
  • Cumulative double bond / extended tetrahedral (Allene/Cumulene like) stereo encoding in hash code using 2D and 3D coordinates.
MoleculeHashGenerator mhg = new HashGeneratorMaker().depth(8)
                                                    .elemental()
                                                    .chiral() 
                                                    .molecular();
for (IAtomContainer m : ms)
    long hashCode = mhg.generate(m);
  • Unspecified stereo now supported when generating InChIs (missed the release)
  • Improved handling of aromatic ring nitrogens - e.g. [nH] and [n-]
  • Efficient perception of short cycles. These methods provide efficient perception and 'int[]' vertex paths instead of rings. Much of the functionality replaces that currently available through the existing SSSRFinder.
    • InitialCycles - superset of short cycles used internally
    • RelevantCycles - union of all minimum cycle bases
    • MinimumCycleBasis - a minimum cycle basis
    • EssentialCycles - intersect of all minimum cycle bases
// currently molecules need to be converted to an abstract graph representations
IAtomContainer m = ...;
int[][]        g = GraphUtil.toAdjList(m);

// use RingSearch to partition into fused cycles (optional) - all isolated cycles
// belong to every cyclic set and skipping these and acyclic vertices improves
// performance
RingSearch rs = new RingSearch(m, g);
for (int[] fused : rs.fused()) {
    int[][] h = GraphUtil.subgraph(g, fused);

    // cyclic sets
    RelevantCycles    rc  = new RelevantCycles(h);
    MinimumCycleBasis mcb = new MinimumCycleBasis(h);
    EssentialCycles   ec  = new EssentialCycles(h);
}
  • Improved rendering of radicals
  • MurckoFragment optimised for larger molecules
  • IOFormats and QSAR DescriptorEngine now loaded using Java SPI. Custom descriptors can now be added to the engine by exporting a implementation list. For example to add a molecular descriptor simple create a file called META-INF/services/org.openscience.cdk.qsar.IMolecularDescriptor and add you implementation class name (e.g. my.qsar.SimpleDescriptorImpl). The engine will then automatically pick it up from the classpath.
// create for qsar-molecular descriptors
new DescriptorEngine(IMolecularDescriptor.class,
                     SilentChemObjectBuilder.getInstance());

// create for qsar-atomic descriptors
new DescriptorEngine(IAtomicDescriptor.class,
                     SilentChemObjectBuilder.getInstance());
  • AllCycles - efficient perception of all simple cycles (see blogpost AllRingsFinder, Sport Edition)
  • AllRingsFinder now uses AllCycles and a threshold instead of a timeout. Currently the thresholds were calculated on PubChem-Compound - information on the thresholds in summarised in the documentation (AllRingsFinder.Threshold).
AllRingsFinder arf   = new AllRingsFinder();
IAtomContainer m     = ...;
IRingSet       rings = arf.findAllRings(m);

// if arf reached the threshold we need to initialise it with a larger one
arf = AllRingsFinder.usingThreshold(Threshold.PubChem_992); 
  • Choose which properties are written to SDF.
// write all properties
sdf = new SDFWriter(out);
for (IAtomContainer m : ms)
  sdf.write(m);

// write no properties
sdf = new SDFWriter(out, Collections.<String>emptySet());
for (IAtomContainer m : ms)
  sdf.write(m);

// write only the title
sdf = new SDFWriter(out, Collections.singleton(CDKConstants.TITLE));
for (IAtomContainer m : ms)
  sdf.write(m);
  • Flerovium and Livermorium added to Elements enumeration
  • Improved IsotopeFactory to provide all isotopes and to find isotopes within a range of a given exact mass.
IChemObjectBuilder builder  = SilentChemObjectBuilder.getInstance();
IsotopeFactory     isotopes = IsotopeFactory.getInstance(builder);

// get all isotopes within 0.45 difference of an exact mass of '12'
IIsotope           subset   = isotopes.getIsotopes(12, 0.45);

Authors

   134  John May
    39  Egon Willighagen
     6  Rajarshi Guha
     2  Arvid Berg
     1  Joos Kiener
     1  Stephan Beisken
     1  Gilleain Torrance
     1  Sambit Gaan

Reviewers

 133  Egon Willighagen 
  36  John May 
   3  Rajarshi Guha

Full Change Log

  • Bumping version number for release. 9b2938b
  • Correcting test assertion. This reaction type generates two products (as there are two rings in the conjugated ring system). The new ring perception code perceives the two six member rings (used by the reaction) in a different order and so the output order of the products was switched. To avoid this happening again the matching was modified to check both combinations. f934255
  • Moving assertion to make it clearer what is going to change. c072851
  • Convenience method for matching in test 9436b8e
  • Revert "Fixing test regression that depended on the molecule having the same kekule form - i.e. order dependant. When the ring perception changed the order may not be exactly the same but nothing should rely on that fact. Setting the aromaticity fixes the test failure.". This was actually a true failure, the pi-bonding movement tests for different kekule forms and the failure was correct. 854389e
  • The input header 'Marvin 07140515482D' is 2 characters longer than the output header 'CDK 0803131301'. This shifts the index by two characters. 60e22fe
  • Adding back in test which were moved to SignatureTanimotoTest during module rearrangement. 312035b
  • Adding assertions to non-test and removing stdout. 074a97f
  • hamcrest-all for eclipse users 1743627
  • Using 'hamcrest-all' for additional matchers. 22c67dd
  • Providing required delta for comparing floating points. fd2a0d8
  • Two convenience methods to make dealing with BODR data a lot easier 5ccd354
  • Added Lv and Fl names and two missing elements (Uup and Uut) used in Elements.java 7970f6d
  • Fixed the import, matching the cdkdeps and adapting for master 3ff8582
  • Any bond order is fine, but the IBond must exist (fixes #1305) a63a708
  • Added a positive unit test too d88944d
  • Basic unit test for bug 1305: null should not match AnyOrderQueryBond 84a691f
  • Fixed the group for Ds (fixes #1282) 778b6d2
  • Removing output from unit tests. e1192e3
  • Unit tests for optional property writing. 5e43363
  • white-listing for export properties c9e2495
  • Removed publicate pdbcml 28b3675
  • Changed order to fix compile errors; one of the other jars seems to pick up a different hamcrest version :( 2aeb2eb
  • Support modern Ant/JUnit which also reports on skipped unit tests 1cdfb97
  • Added Guava to the Eclipse classpath 26d8041
  • Fixing test regression that depended on the molecule having the same kekule form - i.e. order dependant. When the ring perception changed the order may not be exactly the same but nothing should rely on that fact. Setting the aromaticity fixes the test failure. fdfbf5e
  • Can't wait for dependency inheritance in maven... 8a6c524
  • API documentation updated 1eaecee
  • Copyright update and removal of old implementation, Path is now replaced by PathEdge. a204beb
  • Correcting ring assembly - test changes showed that we forgot to put the atoms/bonds in the ring. Also the isolated rings can reach 'to' the ring size inclusive. 84ed416
  • Modify assertions to confirm output - the ring flags are already set by SMILES and to really test we need to unset. 534cd79
  • Using the newer RingSearch to partition rings and only process fused systems. ac9e599
  • Adjusting timeout/threshold for bigRingSystem() c648001
  • Ignoring timeout tests (threshold tests to be added in later) and including guava. 9a27d66
  • Using new method for finding all rings of an isolated system. 31b4219
  • Allowing construction of AllRingsFinder using the new threshold values. 9f2ec99
  • Added threshold parameters enumeration. aa9eeb9
  • Removing old timeout (to be replaced with threshold) and deprecating methods modifying it. If a user attempts to set a timeout it will print to standard error prompt to use the non-deprecated method. 617e556
  • Efficient conversion from int[] paths to rings. 5840727
  • Convert molecules to graphs and keeping track of bonds. 70ab581
  • Helper class to allow us to quickly convert back to CDK 'Ring' objects - probably won't be needed in future and is private. 17299ad
  • Formatting AllRingsFinder to make changes more obvious. 99e1311
  • Store cyclic walks the same start/end vertex - required converting a lot of the tests.. 5f0d0c6
  • When putting vertices in a cycle - start and end vertices are now the same. c87a58d
  • Tool to compute all simple cycles using the new path graph implementations. 29b1335
  • Efficient path graph (P-graph) implementation to assist in finding all cycles. f1d7d7d
  • Replacing the deprecated 'junit.framework' with the newer 'org.junit'. dd46cca
  • Correcting typo in exception 9cd9ce4
  • Removing descriptors which can not be run by DesriptorEngineTest. These descriptors are in qsarionpot and qsarprotein, as the DesriptorEngineTest is in qsarmolecular they can not be loaded. Additional SPI files can be added to those modules (not in the current build system), or perhaps their classes should be merged into the other qsar modules. 5e3469f
  • Using service provider interface (SPI) to load tsar descriptors. This simplifies the loading process, doesn't depend on jar locations and removes the magic constants (int parameters) being used to decide which descriptors to load. e14e80e
  • Adding descriptor initialisation for those which require it. 284f1ef
  • Adding abstract super class to all molecular descriptors. a097d37
  • Ensure atom pair descriptors extend the abstract super class. 76d9f48
  • Introducing new abstract super class to allow default implementations - mirrors the preexisting abstract classes for atom/bond descriptors. 6bd8a83
  • Ensuring all atom descriptor extend the abstract superclass. d138673
  • Ensuring all bond descriptor extend the abstract superclass. 839f87f
  • Define qsar descriptor implementations for service provider interface (SPI). 97fb6ad
  • Fix failing unit test which expected a file to be in a certain location. The test now reads the data from the classpath and writes it to a temporary file which can then be opened for random access. 9cf76f8
  • Add the implicit hydrogen count to the explicit bond count value. This ensure the result is not different between implicit/explicit hydrogens and fixes the superclass test, testTakeIntoAccountImplicitHydrogens. b62b258
  • Correcting test assertion values, these values were changed in 851f899 but calculating by hand they are correct. It is likely the fragmenter was not working correctly in 851f899 and gave different frameworks. fcac769
  • Returning an empty array instead of null, fixes test failure. a594663
  • Setting descriptor class so the super call can run appropriate tests. a4bceaa
  • Including fragment complexity descriptor in qsar-molecular tests. 3e1b810
  • Making abstract test, abstract. a4496ee
  • Cleaning up SMSD unit test, removing all prototype tests, ensuring abstract classes are actually abstract and that test methods are public. b12ce75
  • Removing 'cdk-formula' dependence on 'cdk-smiles' - required changing a single unit test. The test in questions was checking that when isotope information has not been configured the correct mass is returned (i.e. auto-configured). cb0cf7f
  • Removed 'test-smiles' dependence on 'sdg'. 9ce594f
  • Removing redundant hydrogen, these are not needed for the tests to be correct. Even without hydrogens the chiral smiles should be different and they are. 5978d9e
  • Recoordinated coordinates and add hydrogens without hydrogen placer. The coordinates were changed as hydrogens were being adding with Double.NaN coordinates. This test still passes however the cis/trans ring configuration is not valid smiles, and incorrect. One can see that two down bonds (hatch) are written as 'trans' configuration. The reason is the previous code had an inverted bond (fat end of wedge/hatch pointing towards chiral centre). Due the numerous issues, the functionality will likely be removed in future. 5323c8c
  • Inlining of hydrogen addition, to remove use of hydrogen placer. ba1698e
  • Correcting reference comparisons in tests. 6694842
  • Remove structure diagram generation from unit test. The test assets the chiral smiles are correctly created and are not different. It should depend on diagram generation. 8bbfa75
  • Removing unused dependencies from smiles module tests. 6234b9d
  • Removing structure diagram generation from SmilesParser test. This code was likely included for debugging. 064a673
  • Move AbstractFingerprinterTest from 'cdk-test-standard' to 'cdk-test' e38b1de
  • Removing unnecessary dependence on 'cdk-sdg'. 7a8eb85
  • Replacing MoleculeFactory with TestMoleculeFactory and removing dependence on 'cdk-extra'. f11e3bc
  • Removed 'cdk-data' from 'cdk-diff' dependencies requiring that two tests are ignored. Both of these tests were testing the serialisation of the domain object (e.g. data.Atom) opposed to the actual class under test. 5f5fa85
  • Mocking unit tests for 'cdk-diff' 1e18a64
  • Separated test-libiocml's dependance on test-qsar* by creating 'test-qsarcml' - this now tests the preexisting module 'qsarcml' 8e2dfd5
  • Separating out cdk-extra from the cdk-io modules 513d2b6
  • Moving tests for MDCustomizer from libiocml to the existing MDMoleculeTest. 355258d
  • Separated cdk-pdbcml from cdk-libiocml and created module suite for cdk-test-pdbcml. caac9da
  • Moved the tests for readers in 'cdk-extra' from 'cdk-test-io' to 'cdk-test-extra'. a0b8dcf
  • Moved all tests with smiles from cdk-test-io to cdk-test-smiles 1479cad
  • Separating out reader factory tests 5cc687d
  • Separating cdk-test-libiocml and cdk-test-io tests 17b02f0
  • Moved PDBWriter and it's test class from cdk-io to cdk-pdb to mirror PDBReader. 9a7d02e
  • Using ServiceLoader in FormatFactory, formats is now non-static (and thread safe) ffd62d9
  • Equality testing of IChemFormatMatchers, now different instances can be created they should implement hashcode and equals. 18d5e2a
  • Allowing IOFormats to be created with a public constructor. This allows us to use the inbuilt service loader (next commit) and there is little benefit from these being singletons. 69a4c0d
  • Removing cdk-test-formula's dependence on cdk-extra. e5b507a
  • Seperated fingerprint and signature tests of tanimoto distance. 25dee5d
  • Copied MoleculeFactory (cdk-extra) to TestMolecularFactory (cdk-test-data), this will allow test-modules which depend on cdk-extra for the molecule creation to no longer depend on 'cdk-extra'. 4ea29bf
  • Moved qsar atom descriptor PartialTChargeMMFF94Descriptor from 'cdk-builder3d' to 'cdk-qsaratomic' module. 44ed59f
  • Moved ILoggingTool to cdk-interfaces and AbstractLoggingToolTest to cdk-test. This allows us to remove dependency of cdk-log4j on cdk-core. b4a1757
  • Removing non-module from dependencies e96034b
  • Including missing dependencies d998ef4
  • Using guava for the cycle perception code - note some tests changed as the initial cycles are now always returned in lexicography order. 09d1a67
  • Adding guava library 88ab6b4
  • Dependency required by fragment. 4efb2ff
  • Made the method threadsafe by removing static field Avoided repeated calls to spanning tree by manually flagging ring bonds before starting search 1fdbe38
  • Made the method threadsafe by removing static field 67ad0b7
  • Added inchi for macrocycle test case Went back to use of spanning tree in check for zero atom linker Added Javadoc annotation to indicate the class is not threadsafe f47e5c0
  • Added dependency of frag module on hash module 65a1c12
  • Updated to allow user specified molecule hash generator and included the orbital information in default molecular hash generator Removed reset method, no need for it Ensured that we output SMILES rather than fragment hashes Updated check for zero atom linkers to avoid redoing cycle detection. 5x speedup for large symmetric/branched structures Keep molecule hash as Long rather than String 376177a
  • Updated murcko fragmenter to speed up preprocessing and avoid processing duplicate fragments in recursive calls. 091a7b2
  • Do not output isotope info in PDB-CML files (fixing the last roundtripping inconsistency e239231
  • Output the monomers in a sorted manner, to make the CML output more reproducible d3e7f10
  • Do not output empty properties e7a8dd2
  • Factored out the test for PDB atom customization; also fixed the test to register the customizer (but there is more wrong) eb7e2b9
  • Use interfaces instead of implementations 2c48981
  • Links from the JavaDoc 5285e01
  • Test if the monomer ID is read 8f3a853
  • Changed the layout of radicals to have a smaller gap between them. a30b2cc
  • Scale AtomRadius in RadicalGenerator bc1e6e6
  • Invert test assertion - the molecule is now automatically configured and the structures are the same. ccb445d
  • Fixing up previous commit, s/Molecule/IAtomContainer/ f7e6926
  • Tidy up of HydrogenPlacer including test annotations and additional assertions about placed/unplaced atoms. cbfd883
  • Resolution for bug1269 - stop the hydrogen placer attempting to place hydrogens on null atoms. 85bf3fe
  • When ring membership is specified without a number, match any ring atom. Resolves bug 1168. 7270984
  • Resolvers review comments - also ensure correct copyright. 98f9678
  • Updating documentation of MCB 98b1b5f
  • The essential cycles of a graph. dadba32
  • Using the new matrix utility and added a method to access the basis size directly. 9fd6b06
  • Utility methods for creating the BitMatrix from cycle collections. 0d05ea2
  • Small tweaks to the BitMatrix, elimination now returns the rank of the matrix directly. ec8c24c
  • Minimum Cycle Basis implementation reusing the set of initial cycles 90b4a79
  • Including new test classes in the module suite 7a85294
  • Concise algorithm for relevant cycles 42205cc
  • Extraction of a cycle basis using a greedy algorithm 3de8e6b
  • A tool to discover the set of initial cycles. This super-set can then be used to extract the minimum cycle basis and relevant cycles 15849b2
  • Allowing internal uses to specify an ordering for the ShortestPaths tool d92f4b8
  • Removing toAdjList from ShortestPaths and RingSearch the new utility class is now used b335f89
  • Allow null containers in the ShortestPaths tool 31ad98b
  • Utility class for manipulating int[][] adjacency list graphs 4597f69
  • A bit matrix which will help in minimisation when constructing cycle bases 12d83b0
  • More cleanup and minimising visibility of the hash stereo classes. 217ccad
  • Moving hash stereo classes to a single package and minimising the scope. f13ae29
  • moving stereo factories 556d84a
  • move equivalent class resolution classes and minimise scope de51403
  • moving equivalent class resolution and restricting visbility daa79e7
  • fixup 7c9dd9f
  • move seed packages and minimise scope 059cf29
  • minimise scope in org.openscience.cdk.hash f652188
  • Correct addition of atoms to a list. Unlike Vector, a List does not let you use set(int, Obj) unless that index already has an item. 939f03f
  • Yeah, Ant 1.9.x is fine too 14219a7
  • Fixed generation of SMILES with non-charged nitrogen rings with an implicit hydrogen (bug #1300) 4e6a80a
  • Unit test that checks that implicit hydrogens on ring nitrogens are only added when they are negatively charged (bug #1300) 77bff39
  • Determine earlier if the nitrogen needs an explicit implicit hydrogen (you know, like [nH], solving the double bracket problem fdd3112
  • Added a unit test for the double brackets SMILES bug 8abc4a0
  • Removing old @cdk.builddepends tag. 3f48463
  • Removes old @cdk.depends tag from javadoc. b814860
  • Added Magda Oprian to AUTHORS babf400
  • Batch of missing JavaDoc @inherits 2abcb5d
  • Added hamcrest dependency lines 9da5dac
  • junit version update in build 1be63e6
  • Updated JUnit from 4.10 to 4.11, adding Hamcrest 1.3 as dependency ec02755
  • Fixed incorrect casting to a specific Atom implementation ed3ce72
  • Fixed the unit test to see if atom types were tested that are not defined. 75c5b97
  • Updated the testing framework to force testing the coverage of the atom typing testing by using @AfterClass 4d042e0
  • Added missing @cdk.githash tags c31d6b9
  • Added missing JavaDoc 8287030
  • Be absolutely sure we compare ints 4576b74
  • Correct boolean comparison 352f1d5
  • Now properly tests the right class (fixes #3553754) 5753c24
  • Removed couple of commented code 2ce292f
  • Added missing @cdk.githash tags for core and standard 529914a
  • JavaDoc fixes for the interfaces module 0e2caa6
  • Typed Lists etc e2d004f
  • fixing failing unit tests 21d24ca
  • removing stateless check, this isn't possible to guarantee 69d0d3c
  • Encoding of 2D and 3D cumulative double bond configurations. eb9536a
  • correctly clearing atom/bond data for MDMoleculeConvention 42c2259
  • Revert "resolving failing unit test in MDMoleculeTest, the MDMoleculeCustomizer invokes storeAtomData() on it's own which however the core module also invokes this method via (storeData) at the end. This resolution simply cleans up the existing data once the atoms or bonds have been stored. Invoking the method again does not store the atoms twice." b6f1500
  • eleminated linkedlist queue from ShortestPaths - small performance boost 258f737
  • Added 'stereo-sensitive' hydrogen remove method to the AtomContainerManipulator. 6692b95
  • Revert "automatically set atomic number when given an element symbol, fixes bug/1296" 94f02e5
  • corrected assertion - the C02M atom type has 3 formal neighbors (line 23, mmff94.prm) e29adca
  • resolves two NullPointerExcetions in cdk-forcefield dd08309
  • updated DebugChemObjectBuilder to use the new DynamicFactory 73d2ce2
  • automatically set atomic number when given an element symbol, fixes bug/1296 2d80a80
  • Updated the signatures library to version 1.1 with one new method and corresponding test case 8fa55bc
  • Correcting development version number 457aab7
  • Open for changes add259e