* Fix for RGD dummy atom bug
* Also fix labelling issues in the R group containing input dummy atom
* minor tweaks to the proposed fix
Co-authored-by: greg landrum <greg.landrum@gmail.com>
* MolDraw2D refactoring
- rename setupMoleculeDraw->initMoleculeDraw
- track whether or not initDrawing() has been called
- centralize calls to initDrawing() and clearDrawing() into initMoleculeDraw()
- update svg hashes in tests
* update some expected test results
* support changing font scale and default scale
add reaction test
* does not work... this is hard
* all tests pass
* do something about legends
* docs
* more tests
* more docs
* cleanup
* going around in circles...
hopefully converging
* cleanup
* Single bond skeleton works.
* Simple bond drawing seems to be working.
* Initial addition of atom symbols.
* Stash of not-quite-working atom symbols prior to major surgery.
* Atom symbols seem to be working. Major surgery not required, just inverted Y coords at the outset.
* Add classes to atom labels.
* Renamed AtomLabel AtomSymbol.
* Add highlights.
* Fix bug from PR4839.
* Molecule note.
* Added atom notes.
* Added bond notes.
* Extract radicals.
* Annotation via new DrawAnnotation class.
* Add brackets.
* Add linknodes.
* Add close contacts.
* Add attachment points. Fix wavy lines.
* Draw molecules in grid.
* Tidy.
* Fix radicals when font has hit maxFontSize.
Make getDrawCoords work.
* Draw primitives take atom or draw coords.
* Fix legends.
* More fixing for tests. DrawMol::setScale now takes font scale as well.
* tidy debug writes
* Variable fraction of panel for legend.
* Better legend positioning.
* Fix sub- and super-script spacing.
Added spaces to Freetype strings.
* Basic reaction drawing.
* Reaction highlighting.
* Minor tweak to reacctions.
* Tweaked reaction DrawMol widths.
* Fix atomTags.
* Fix catch tests except contours.
* Contouring working in catch_tests.cpp.
* Fix catch tests.
* AtomSymbol and DrawAnnotation into MolDraw2D_detail.
* DrawMol and DrawShape into MolDraw2D_detail.
* DrawText inot MolDraw2D_detail.
* Machete out.
* DrawText goes private.
* Move some stuff about, such as StringRect to its own header.
* Python wrapper compiles (but crashes when Draw imported).
* More tidying. Python DrawArrow failing.
* Linux changes.
* Fixed error in DrawShapeArrow spotted by valgrind.
Fixed some warnings from gcc.
* Maybe fixed DrawArrow.
* Added basic argparse interface.
* Added newlines.
* Changes in response to review.
Non-const args in move constructors and operator=.
Added missing classes to MolDraw2D_detail.
Deleted move operator= where it had been forgotten.
Fixed copyright dates.
* Deleted all default c'tors in derived classes.
* Changes in response to review:
Wedge widths now a proportion of mean bond length in draw coords..
Add padding below legend when positioning it.
* Fix tests.
* Fix the private/protected mess of the new classes.
* Moved doesLineIntersect etc.
* Reinstate original alignString for non-FT drawings.
* More faffing about with reaction layouts.
* Fix font sizes in testGitHub3391.
* Fix atom notes fitting inside fat wedges.
* Fix molecule annotation font size.
* More fixes of rectangle/triangle collision detection.
* Test for highlight linewidth multiplier.
* Use push_back not emplace_back.
* Attempt at better Freetype char spacing.
* Option to turn off TEST_ASSERT. Currently off.
* Fixed embarrassing maths to do with wedge fatness.
* More tidying post-review.
* Document highlight_linewidth_multipliers.
* Expose baseFontSize to Python.
* Changes in response to review.
* Allow DrawMolecules molecules to be drawn to different scales.
* Fix bond sneaking between C:8 in, for example, reactions.
* Fix bad re-factoring.
* Fix globbing.
* Changes in response to review.
* Add invariant check.
* Add draw option to fix font size.
* suggested changes
* Update catch test results.
* Fix expected freetype results.
* Fix non-freetype drawers.
* Fin non-freetype test results.
* get the Qt drawer working too
* Fix disappearing reaction highlights.
* Changes as result of review.
* Fixed non-FreeType hash codes for reaction SVGs. Extra comment in catch_tests.
* reactant highlighting was clearning properties
* Fix for failing contour python test.
* fix a non-freetype problem
* swig wrappers working
* Bump timeouts in test.
Co-authored-by: greg landrum <greg.landrum@gmail.com>
Co-authored-by: David Cosgrove <david@cozchemix.co.uk>
* Later cores with more R-groups should only be chosen when they are structurally related, i.e. when they are superstructures of earlier cores
* Update Code/GraphMol/RGroupDecomposition/testRGroupDecomp.cpp
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Update Code/GraphMol/RGroupDecomposition/testRGroupDecomp.cpp
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
Co-authored-by: Tosco, Paolo <paolo.tosco@novartis.com>
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Support wildcard in input structures
* Fix typos
* Handle R groups containing a single wildcard and wildcards with group numbers
* Reorder tests
* Use propety instead of isotope to mark input dummy
* fix the windows DLL builds
* Added constexpr for dummy input atom property
* Omitted to replace one instance of string 'INPUT_DUMMY'
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* speed up scoring of permutations by clever caching of already settled
matches rather than recomputing scores for all matches every time
process() is called
* changes in response to review
* changes in response to review
Co-authored-by: Paolo Tosco <paolo.tosco@novartis.com>
* - fix non-threaded *nix builds that currently fail because
boost flyweight introduces a dependency on pthreads
- make sure that mutexes and futures are only used when
RDK_BUILD_THREADSAFE_SSS is ON
- fix SubstructMatch failing test when RDK_BUILD_THREADSAFE_SSS is OFF
due to misplaced #ifdef's
- rename RDK_TEST_MULTITHREADED to RDK_THREADSAFE_SSS in inchi.cpp
(which is not a test)
* - the limitexternal Linux build is now single-threaded so we make
sure single-threaded builds do not break in the future
(suggestion from Greg)
* reverted unnecessary change to Code/GraphMol/FileParsers/testMultithreadedMolSupplier.cpp
Co-authored-by: Paolo Tosco <paolo.tosco@novartis.com>
* Most tests working
* All tests working
* Fixed tests after merge with master
* Create header and implementations for RCore
* Updated comments
* Removed old code
* DLL export for MolMatchFinalCheckFunctor
* Information line for failing Mac test
* Log replace core behaviour
* Ordering fix for OSX
* Possible fuzzer fix
* Removed debug output
* Fix unmatched user R group bug
* Code review changes
* Bug fix and ChemTransforms test
* - do not add unncessary R-labels
- use a boost::dynamic_bitset rather than a std::set for lookups
* - R group labels can be >0 or <0, not 0, so no need to check for >=0 when looking for user labels
- as soon as a core is found that requires no additional labels to accommodate a molecule, bail out from the loop as no better core can be found
- add a test to better describe the use case for this change
- remove a signed/unsigned warning
* - added an entry to Release Notes to describe the impact of #3969
* avoid French expressions in Release Notes
Co-authored-by: Paolo Tosco <paolo.tosco@novartis.com>
* Make sure that added R-groups have non-zero coordinates
* - renamed setHydrogenCoords to setTerminalAtomCoords (and parameters accordingly)
- switched from ROMol* to RoMol& to remove a PRECONDITION
- documented the newly exposed C++ function
- added a Python wrapper
- added C++ and Python tests
* fixed conflicts and added a test
* Update Code/GraphMol/RGroupDecomposition/testRGroupDecomp.cpp
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Update Code/GraphMol/RGroupDecomposition/testRGroupDecomp.cpp
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Update Code/GraphMol/MolOps.h
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Update Code/GraphMol/Wrap/MolOps.cpp
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* changes in response to review
Co-authored-by: Paolo Tosco <paolo.tosco@novartis.com>
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Fixes#3924
The scoring function was not taking into account empty rgroups which biased certain
arrangements of rgroups that didn't have an rgroup at every position.
* Change in response to review
* Rigger the no_rgroup into EMPTY_RGROUP
* Remove Fix Me label from the geminal rgroup test
* add testUserMatchTypesDefaultScore to test default score on user types
* Fix scoring RGroups with split attachments [*:1]O.[*:1]N.
* Test both scoring functions for testMutipleCoreRelabellingIssues and testUnprocessedMapping
* Update testRGroupInternals.cpp
remove a couple obsolete comments as suggested in review
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* Tests for default function failures
* Revert tests
* Fix linker matches in the case that they span multiple rgroups
* Change to test required by linker fix
* Update based on Brian's changes
* get windows dll builds working
Co-authored-by: Brian Kelley <fustigator@gmail.com>
Co-authored-by: Greg Landrum <greg.landrum@gmail.com>
* make sure that unlabelled R-groups on aromatic nitrogens have correct valence and formal charge to avoid kekulization failures
* change in response to review
Co-authored-by: Paolo Tosco <paolo.tosco@novartis.com>
* RGD modifications for any atom and index labels
* Continued development
* All tests working
* Added comment
* CR changes suggested by PTosco
* Fix catch_rgd for autocrlf
* Core dummy matches on output. RGroups on heavy atom. Dummy atoms User rgroups only when they are degree 1.
* Start work on test fixes
* testRGroupDecomp test working
* CPP and Python tests working
* Removed options for matching core query atoms on sidechains
* Windows build fix
* R groups off ring. User group matches single heavy substituent. Remove extraneous hydrogens
* Updated fingerprint variance score and tie selection
* Refactor fingerprint variance score functions to class
* Removed fingerprint distance score
* Boost::trim fix
* Updated RGD test notebook
* Fixed AddHs.cpp
* - fixes the kekulization issue
- avoids that empty R-group labels are included in cores
- makes sure that SMILES cores are always canonical
- adds a few missing const declarations and avoids unintentional copying
* Support for allowNonTerminalRGroups parameter. Remove R groups that contain H or Nothing. Ignore R group labels on non-dummy atoms
* Fixed tests for Paolo's changes. Rebuilt test notebook. Increased weighting of rgroup penalty in fingerprint variance score
* remove some debug output
Co-authored-by: Brian Kelley <fustigator@gmail.com>
Co-authored-by: greg landrum <greg.landrum@gmail.com>
* cleanup a bunch of g++ warnings
* make it work with clang
* remove some additional warnings based on CI builds
* fix that version number
* stop being verbose when building
* Improve consistency in R-group tables involviing symmetric groups
* applied clang-format
* much simpler fix
* use equivalent but simpler regex
* changes in response to review
Co-authored-by: Tosco, Paolo <paolo.tosco@novartis.com>
* Exploration
* Initial work on GA fro Rgroup Symmetry
* GA for rgroup decomp and fingerprint rgroup symmetry scoring
* Continuing development
* Exploration
* Initial work on GA fro Rgroup Symmetry
* GA for rgroup decomp and fingerprint rgroup symmetry scoring
* Continuing development
* Further development
* Continued tweaks
* Function rename
* Continued tweaks
* Bug fix for variance calculation
* Copyright notices. Remove Eigen dependency. RdKit logging. Clock fix.
* Changes to fix build failures
* Fixes for Windows dynamic DLL build
* Included GA export.h file
* Fixed RGroupDecomp CMakeLists.txt
* Notebooks working, GGroup labelling bug fixed
* Fix windows build. More options for example GA program
* More bugs found and tests adjusted
* Fixed Python rgroup test
* Trivial change to trigger CI
* OSX java and windows build fixes
* Windows DLL fix
* Fix segmentation error
* proposed change
* Possible fix for segmentation fault
* CR fixes
* CR fixes
* CR fixes
* Recreates molecules from rgroups where possible
Co-authored-by: greg landrum <greg.landrum@gmail.com>
Co-authored-by: Brian Kelley <fustigator@gmail.com>
* - replaced set with vector for SMILES-based R-group equivalence
- the first GreedyChunk is constituted by chunkSize+1 mols
- labeled R-groups may not be extracted when onlyMatchAtRGroups==false
- labeled geminal R-groups are incorrectly scored
- my attempt to introduce consistency in R-group labeling was buggy
- added a DEBUG pre-processor directive to the tests to make debugging easier
- added a unit test
- fixed unit test results which were inconsistent with the expected behavior
* changes in response to review
* - Fixes three bugs in the R-group decomposition code
* - delete iterator properly during loop so the Mac does not complain
* added more tests
Co-authored-by: user173873 <user173873@FF026.local>
* - removes an unnecessary O(n) complexity in setting the constant core_atoms_with_user_labels set
- provides a better and more general fix to github #1705
- makes sure that the best R group permutation is chosen based on a stable sorting criterion
* - changes in response to review
* reverted from compute_heavy_rgroup_counts() to compute_num_added_rgroups()
* Suppress warning in removeHs due to having a lot of dummy atoms
Co-authored-by: Brian Kelley <fustigator@gmail.com>
* stop returning local memory in exceptions
* remove a couple unnecessary copies in loops
* fix a bug in the way the default MMFF aromatic parameters are constructed
* remove a bunch of loop-variable warnings
* remove a bunch of clang warnings
* disable clang warnings in python wrappers
* remove some warnings when building the python wrappers
* refactor RGroupDecompositionParameters to directly initialize data members
add params getter for the RGroupDecomposition object
* initial implementation of timeout
* refactor the timeout check
We could move the function that checks and throws the exception somewhere else
* re-enable the tests I stupidly left disabled
* Fixes#3224
add option to skip symmetrization entirely
* test #3224
* stupid mistake
* run clang-tidy with modernize-use-default-member-init
* results from modernize-use-emplace
* one uniform initialization per line
otherwise SWIG is unhappy
Co-authored-by: Brian Kelley <fustigator@gmail.com>
* run clang-tidy with readability-braces-around-statements
clang-format the results
clean up all the parts that clang-tidy-8 broke
* fix problem on windows
* Better resolve ties in rgroup matches
* Break ties by choosing the permutation that adds the fewest rgroups
* Update aligned cores after tie breaking\nI think this results is more optimal
* Remove unused code
* Replace count with UsedLabels
* Remove whitespace
* Remove whitespace
* Remove redundant code and error message
* Revert test
* remove debug prints
* Remove out_1 and out_2, only need for directed graphs.
* Variable renaming, no other changes.
* Fix a couple things that were forgotten during the rename
* Only one of these counts is updated now.
* Add ifdef to enable/disable VF2Pruning
* Add degree bound check, could be pushed down to the generic VertexCheck predicate.
* The stack knows at each point what was added, by passing these into the Backtrack call the clone allocation can be removed.
* Indent and rename added_node1 to node1.
* Now the clone is removed we can add a member function to handle the recursion cleanly.
* Also make for MatchAll a member function.
* Set lim=0 to mean infinity.
* VF2Plus optimisation, when candidate is in the terminal set select from a mapped neighbours adjacency list.
* Optimisation hint.
* Use a struct for the Pair removing the need for double pointer and heap alloc/delete of the iterators.
* disable pruning by default (it's a bit quicker to not do this)
* update expected test results
The updated VF2 code can return symmetric results in a different order
than we were getting previously. The results are still correct, but they
change some of the downstream things that don't do symmetrization
* update expected java results
* Fix core labelling and multi-core hydrogen removals
* Add comment that explains confusing bit about indexlabels for multicores
* Multi core fixes: hydrogens properly removed, fixed labelling
* clang-format
* update version of japanese docs
* Remove external labels from cores
* Fix syntax errors
* Add better autodetection of labels, add dummyatom label, don't fall back to indexes when onlyMatchAtRgroups are set
* Add better autodetection of labels, add dummyatom label, don't fall back to indexes when onlyMatchAtRgroups are set
* Move autodetection before alignment, fix final core labelling
* Fix stupid bit twiddling mistake
* None of the original mol's should actually match the cores with onlyMatchAtRgroups
* Convert PRECONDITION to CHECK_INVARIANT
* Run clang-format
* use nullptr instead of 0 for pointers
* Handle cases where molecules don't have anything for an R-group properly.
Here's the python demo of the bug:
```
In [14]: scaffold2 = Chem.MolFromSmiles('c1c([*:1])cncn1')
In [15]: scaffold = Chem.MolFromSmiles('c1c([*:1])cccn1')
In [19]: mols2 = [Chem.MolFromSmiles(smi) for smi in 'c1c(F)cc(O)cn1 c1c(F)cncn1 c1c(Cl)cc(O)cn1'.split()]
In [20]: print(rdRGroupDecomposition.RGroupDecompose([scaffold,scaffold2],mols2,asSmiles=True,asRows=False))
({'Core': ['c1ncc([*:2])cc1[*:1]', 'c1ncc([*:1])cn1', 'c1ncc([*:2])cc1[*:1]'], 'R1': ['F[*:1]', 'F[*:1]', 'Cl[*:1]'], 'R2': ['[H]O[*:2]', '[H]O[*:2]', '']}, [])
```
* Fixes#2471
* do not use new on loggers
* del pointers in testDistGeom
* Update Dict hasNonPOD status on bulk update
* delete new Dicts in memtest1.cpp
* fixes in MolSuppliers and testFMCS
* PeriodicTable singleton as unique_ptr
* fix EEM_arrays leak
* fix leaks in testPBF
* fix ParamCollection leak in test UFF
* fix leaks in MMFF
* clear prop dict before read in in pickler
* fix leaks in testFreeSASA
* fix leaks in test3D
* modernize Dict.h & SmilesParse.cpp
* fix leaks in testQuery
* fix leaks in testCrystalFF
* fix leaks in cxsmilesTest
* fix leaks in Catalog & mol cat test
* fix leaks in ShapeUtils & tests
* fix leaks in testSubgraphs1
* fix leaks testFingerprintGenerators
* fix leaks in Catalog/FilterCatalog
* fix leaks in graphmolqueryTest
* these changes reduce bison parse leaks
* fixed leaks in testChirality.cpp
* fix leaks + 2 tests in testMolWriter
* fix 4m leaks in substructLibraryTest
* small improvements to molTautomerTest; still leaks
* fix leaks in testRGroupDecomp
* fix leaks in test; parser still leaks
* fix leaks in itertest
* fix 4m leaks in testDepictor
* fixes in smatest; still leaking due to parser
* fixes in testSLNParse; still leaking due to parser
* flex/bison: always add atoms with ownership; smarts error cleanup
* fix leaks in testReaction
* fix leaks in testSubstructMatch
* fix leaks in resMolSupplierTest
* fix leaks in testChemTransforms + bug in ChemTransforms
* fix leaks in testPickler
* fix leaks in testMolTransform
* fix leaks in testFragCatalog
* fix leak in testSLNParse. Still leaks due to Smiles
* fixed most leaks in testMolSupplier
* pre bison fix
* fix some atom & bond parse problems; others still fail
* bison smiles & smarts, atoms & bonds more or less fixed
* fix leaks in molopstest.cpp
* fix leaks in testFingerprints, MACCS.cpp & AtomPairs.cpp
* fix leaks in moldraw2Dtest1
* fix leaks in testDescriptors
* fix leaks in testInchi
* fix leaks in testUFFForceFieldHelpers
* fix leaks in hanoiTest & new_canon.h
* fix leaks in testMMFFForceField
* fix leaks in graphmolTest1
* fix leaks in testMMFFForceFieldHelpers
* fix leaks in testDistGeomHelpers
* fix leaks in testMolAlign
* initialize occupancy & temp facto with default values
* fix leak in TautomerTransform
* updated suppressions
* fix testStructChecker
* fix logging & py tests
* fix TautomerTransform class/struct issue
* remove misplaced delete in testSLNParse
* deinit in testAvalonLib1
* fix Avalon-triggered(?) bug in StructChecker/Pattern.cpp
* fix random testMolWriter/Supplier fails
- diversify output file names to avoid clashing.
- unify Writers close/destruct behavior.
- flushing/closing in tests.
* use reset in FFs Params.cpp
* comments on testMMFFForceField
* unrequired 'if's added to mol suppliers
* correct cast in FilterCatalog.h
* use unique_ptr in MACCS Patterns
* remove unrequred if in new_canon
* update & move suppressions
* Tweak the scoring function to penalize non h matches considerably. Only full H rgroups get a one. Might need to tweak int the future
* Scale the hydrogens as 1/# mols unless they are a full group
* handle the heavy-atom degree queries differently
* Fixes#1563
* add a test for the heavy atom degree option
* Support (and test) adjustHeavyDegree in the cartridge too.
* test results
* Adds RGroupDecomp free function and python wrapper
* Fixes subtle bug, adds new RGroupDecomp API
* Updates results for the subtle bug fix. Verified results were correct.
* Removes smilesCaching.
* Changes RGroupDecompose ordering, adds docstrings and more tests