Esempio n. 1
0
        /// <summary>
        /// Internal - load the SMARTS patterns for each atom type from MMFFSYMB.sma.
        /// </summary>
        /// <param name="smaIn">input stream of MMFFSYMB.sma</param>
        /// <returns>array of patterns</returns>
        /// <exception cref="IOException"></exception>
        internal static AtomTypePattern[] LoadPatterns(Stream smaIn)
        {
            var matchers = new List <AtomTypePattern>();

            using (var br = new StreamReader(smaIn))
            {
                string line = null;
                while ((line = br.ReadLine()) != null)
                {
                    if (SkipLine(line))
                    {
                        continue;
                    }
                    var cols = Strings.Tokenize(line, ' ');
                    var sma  = cols[0];
                    var symb = cols[1];

                    try
                    {
                        matchers.Add(new AtomTypePattern(SmartsPattern.Create(sma).SetPrepare(false), symb));
                    }
                    catch (ArgumentException ex)
                    {
                        throw new IOException(ex.Message);
                    }
                }

                return(matchers.ToArray());
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Create a pattern for the provided SMARTS - if the SMARTS is '?' a pattern
        /// is not created.
        /// </summary>
        /// <param name="smarts">a smarts pattern</param>
        /// <param name="builder">chem object builder</param>
        /// <returns>the pattern to match</returns>
        private static Pattern CreatePattern(string smarts, IChemObjectBuilder builder)
        {
            var ptrn = SmartsPattern.Create(smarts, builder);

            ptrn.SetPrepare(false); // avoid redoing aromaticity etc
            return(ptrn);
        }
Esempio n. 3
0
        /// <summary>
        /// Create a pattern for the provided SMARTS - if the SMARTS is '?' a pattern
        /// is not created.
        /// </summary>
        /// <param name="smarts">a smarts pattern</param>
        /// <returns>the pattern to match</returns>
        private static Pattern CreatePattern(string smarts)
        {
            var ptrn = SmartsPattern.Create(smarts);

            ptrn.SetPrepare(false); // avoid redoing aromaticity etc
            return(ptrn);
        }
Esempio n. 4
0
 /// <summary>
 /// Set the SMARTS patterns.
 /// </summary>
 /// <param name="smarts">the SMARTS</param>
 private void SetSmarts(IEnumerable <string> smarts)
 {
     keys.Clear();
     foreach (var key in smarts)
     {
         var qmol = new QueryAtomContainer();
         var ptrn = SmartsPattern.Create(key);
         ptrn.SetPrepare(false); // prepare is done once
         keys.Add(new Key(key, ptrn));
     }
 }
Esempio n. 5
0
        /// <summary>
        /// Creat a new query pharmacophore group
        /// </summary>
        /// <param name="symbol">The symbol for the group</param>
        /// <param name="smarts">The SMARTS pattern to be used for matching</param>
        public PharmacophoreQueryAtom(string symbol, string smarts)
        {
            this.Symbol = symbol;
            this.Smarts = smarts;
            // Note that we allow a special form of SMARTS where the | operator
            // represents logical or of multi-atom groups (as opposed to ','
            // which is for single atom matches)
            var subSmarts = Strings.Tokenize(smarts, '|');

            CompiledSmarts = new SmartsPattern[subSmarts.Count];
            for (int i = 0; i < CompiledSmarts.Length; i++)
            {
                CompiledSmarts[i] = SmartsPattern.Create(subSmarts[i]).SetPrepare(false);
            }
        }