mirror of
https://github.com/rdkit/rdkit.git
synced 2026-06-04 21:54:27 +08:00
Added fingerprints to GeneralizedSubstruct search and extended SWIG wrappers (#6991)
* Added fingerprints to GeneralizedSubstruct search * Small change to fire tests * Edits from code review * Updated swig - newobject not required for GeneralizedSubstruct fingerprint methods * GeneralizedSubstruct only supports unique_ptr in SWIG4.1
This commit is contained in:
@@ -1,10 +1,21 @@
|
||||
|
||||
|
||||
#if SWIG_VERSION >= 0x040101
|
||||
%include <std_unique_ptr.i>
|
||||
%unique_ptr(ExplicitBitVect)
|
||||
#endif
|
||||
|
||||
%{
|
||||
#include <GraphMol/GeneralizedSubstruct/XQMol.h>
|
||||
%}
|
||||
// %include "std_unique_ptr.i"
|
||||
// %unique_ptr(ExtendedQueryMol)
|
||||
|
||||
#if SWIG_VERSION < 0x040101
|
||||
%ignore patternFingerprintTargetMol(const ROMol &mol, unsigned int fpSize = 2048U);
|
||||
%ignore patternFingerprintQuery(unsigned int fpSize = 2048U) const;
|
||||
#endif
|
||||
|
||||
%ignore ExtendedQueryMol(std::unique_ptr<RWMol> mol);
|
||||
%ignore ExtendedQueryMol(std::unique_ptr<MolBundle> mol);
|
||||
%ignore ExtendedQueryMol(std::unique_ptr<TautomerQuery> mol);
|
||||
@@ -14,3 +25,9 @@
|
||||
|
||||
%include "GraphMol/GeneralizedSubstruct/XQMol.h";
|
||||
|
||||
%extend RDKit::GeneralizedSubstruct::ExtendedQueryMol {
|
||||
std::vector< std::vector<std::pair<int, int> > > getSubstructMatches(RDKit::ROMol &target,RDKit::SubstructMatchParameters ps = RDKit::SubstructMatchParameters()){
|
||||
std::vector<RDKit::MatchVectType> mvs = SubstructMatch(target, *($self),ps);
|
||||
return mvs;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -245,6 +245,7 @@ typedef unsigned long long int uintmax_t;
|
||||
%include "../MolHash.i"
|
||||
%include "../Abbreviations.i"
|
||||
%include "../Streams.i"
|
||||
%include "../GeneralizedSubstruct.i"
|
||||
|
||||
|
||||
// Create a class to throw various sorts of errors for testing. Required for unit tests in ErrorHandlingTests.java
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
using GraphMolWrap;
|
||||
using Xunit;
|
||||
|
||||
namespace RdkitTests
|
||||
{
|
||||
public class GeneralizedSubstructTest
|
||||
{
|
||||
private bool FingerprintsMatch(ExtendedQueryMol queryMol, RWMol target)
|
||||
{
|
||||
var queryFingerprint = queryMol.patternFingerprintQuery();
|
||||
var targetFingerprint = RDKFuncs.patternFingerprintTargetMol(target);
|
||||
Assert.True(queryFingerprint.getNumOnBits() > 0);
|
||||
Assert.True(targetFingerprint.getNumOnBits() > 0);
|
||||
var match = RDKFuncs.AllProbeBitsMatch(queryFingerprint, targetFingerprint);
|
||||
return match;
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void TestControlSteps()
|
||||
{
|
||||
var queryMol = RWMol.MolFromSmiles("COCC1OC(N)=N1 |LN:1:1.3|");
|
||||
var xqm1 = RDKFuncs.createExtendedQueryMol(queryMol);
|
||||
var xqm2 = RDKFuncs.createExtendedQueryMol(queryMol, false);
|
||||
var xqm3 = RDKFuncs.createExtendedQueryMol(queryMol, true, false);
|
||||
var xqm4 = RDKFuncs.createExtendedQueryMol(queryMol, false, false);
|
||||
|
||||
var mol1 = RWMol.MolFromSmiles("COCC1OC(N)=N1");
|
||||
Assert.Equal(1, xqm1.getSubstructMatches(mol1).Count);
|
||||
Assert.Equal(1, xqm2.getSubstructMatches(mol1).Count);
|
||||
Assert.Equal(1, xqm3.getSubstructMatches(mol1).Count);
|
||||
Assert.Equal(1, xqm4.getSubstructMatches(mol1).Count);
|
||||
Assert.True(FingerprintsMatch(xqm1, mol1));
|
||||
Assert.True(FingerprintsMatch(xqm2, mol1));
|
||||
Assert.True(FingerprintsMatch(xqm3, mol1));
|
||||
Assert.True(FingerprintsMatch(xqm4, mol1));
|
||||
|
||||
var mol2 = RWMol.MolFromSmiles("COCC1OC(=N)N1");
|
||||
Assert.Equal(1, xqm1.getSubstructMatches(mol2).Count);
|
||||
Assert.Equal(1, xqm2.getSubstructMatches(mol2).Count);
|
||||
Assert.Equal(0, xqm3.getSubstructMatches(mol2).Count);
|
||||
Assert.Equal(0, xqm4.getSubstructMatches(mol2).Count);
|
||||
Assert.True(FingerprintsMatch(xqm1, mol2));
|
||||
Assert.True(FingerprintsMatch(xqm2, mol2));
|
||||
Assert.False(FingerprintsMatch(xqm3, mol2));
|
||||
Assert.False(FingerprintsMatch(xqm4, mol2));
|
||||
|
||||
var mol3 = RWMol.MolFromSmiles("COOCC1OC(N)=N1");
|
||||
Assert.Equal(1, xqm1.getSubstructMatches(mol3).Count);
|
||||
Assert.Equal(0, xqm2.getSubstructMatches(mol3).Count);
|
||||
Assert.Equal(1, xqm3.getSubstructMatches(mol3).Count);
|
||||
Assert.Equal(0, xqm4.getSubstructMatches(mol3).Count);
|
||||
Assert.True(FingerprintsMatch(xqm1, mol3));
|
||||
Assert.True(FingerprintsMatch(xqm3, mol3));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user