/// <summary> /// Set substructure search query molecule /// </summary> /// <param name="cs"></param> public void SetSSSQueryMolecule( MoleculeMx cs) { QueryMol = cs.Clone(); SSSQueryMol = CdkMolFactory.NewCdkMol(cs); CdkMolUtil.SetSSSQueryMolecule(SSSQueryMol); return; }
/// <summary> /// Set full structure search query molecule /// </summary> /// <param name="cs"></param> public void SetFSSQueryMolecule( MoleculeMx cs) { if (cs.IsBiopolymerFormat) // fix later { QueryMol = cs; return; } QueryMol = cs.Clone(); FSSQueryMol = CdkMolFactory.NewCdkMol(cs); CdkMolUtil.SetFSSQueryMolecule(FSSQueryMol); return; }
/// <summary> /// Do a similarity match /// </summary> /// <param name="query"></param> /// <param name="target"></param> /// <returns></returns> public bool FullStructureMatch( MoleculeMx query, MoleculeMx target, string switches) { bool newQuery = (QueryMol == null || QueryMol.PrimaryValue != query.PrimaryValue); if (newQuery) { QueryMol = query.Clone(); SSSQueryMol = CdkMolFactory.NewCdkMol(query); } SSSTargetMol = CdkMolFactory.NewCdkMol(target); bool b = CdkMolUtil.FullStructureMatch(SSSQueryMol, SSSTargetMol, switches); return(b); }
/// <summary> /// Calculate similarity score /// </summary> /// <param name="query"></param> /// <param name="target"></param> /// <returns></returns> public double Molsim( MoleculeMx query, MoleculeMx target, SimilaritySearchType type) { FingerprintType fpType = FingerprintType.Undefined; if (type == SimilaritySearchType.Normal) { fpType = FingerprintType.MACCS; } else if (type == SimilaritySearchType.ECFP4) { fpType = FingerprintType.Circular; } else { throw new Exception("Similarity type not supported in this context: " + type); } bool newQuery = (QueryMol == null || QueryMol.PrimaryValue != query.PrimaryValue); if (newQuery) // recalc query keys if query has changed { QueryMol = query.Clone(); QueryFingerprint = query.BuildBitSetFingerprint(fpType); } object targetFingerprint = target.BuildBitSetFingerprint(fpType); double score = MoleculeMx.CalculateBitSetFingerprintSimilarity(QueryFingerprint, targetFingerprint); return(score); }