コード例 #1
0
        /// <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;
        }
コード例 #2
0
        /// <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;
        }
コード例 #3
0
        /// <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);
        }
コード例 #4
0
        /// <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);
        }