/// <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()); } }
/// <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); }
/// <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); }
/// <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)); } }
/// <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); } }