Ejemplo n.º 1
0
        /// <summary>
        /// Convert to an identity template library.
        /// </summary>
        /// <returns>identity template library</returns>
        internal IdentityTemplateLibrary ToIdentityTemplateLibrary()
        {
            var lib = IdentityTemplateLibrary.Empty();

            foreach (var mol in templates)
            {
                lib.Add(AtomContainerManipulator.Anonymise(mol));
            }
            return(lib);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Layout a macro cycle (the rest of the ring set is untouched).
        /// </summary>
        /// <param name="macrocycle">the macrocycle</param>
        /// <param name="ringset">the ring set the macrocycle belongs to (may only be it's self)</param>
        /// <returns>layout was successfully, if false caller fall-back to regular polygons</returns>
        public static bool Layout(IRing macrocycle, IRingSet ringset)
        {
            var anon   = RoundUpIfNeeded(AtomContainerManipulator.Anonymise(macrocycle));
            var coords = TEMPLATES.GetCoordinates(anon);

            if (coords.Count == 0)
            {
                return(false);
            }

            var best       = new Vector2[anon.Atoms.Count];
            var bestOffset = SelectCoords(coords, best, macrocycle, ringset);

            for (int i = 0; i < macrocycle.Atoms.Count; i++)
            {
                macrocycle.Atoms[i].Point2D  = best[(bestOffset + i) % macrocycle.Atoms.Count];
                macrocycle.Atoms[i].IsPlaced = true;
                macrocycle.Atoms[i].SetProperty(MACROCYCLE_ATOM_HINT, true);
            }
            macrocycle.IsPlaced = true;

            return(true);
        }
Ejemplo n.º 3
0
        public static IReadOnlyList <IBitFingerprint> MakeFingerprintsFromSdf(bool anyAtom, bool anyAtomAnyBond, Dictionary <string, int> timings, TextReader fin, int limit)
        {
            var fingerPrinter = new HybridizationFingerprinter(HybridizationFingerprinter.DefaultSize, HybridizationFingerprinter.DefaultSearchDepth);

            fingerPrinter.SetHashPseudoAtoms(true);
            IAtomContainer query = null;
            var            data  = new List <IBitFingerprint>();

            try
            {
                Trace.TraceInformation("Read data file in ...");
                using (var imdl = new EnumerableSDFReader(fin, builder))
                {
                    Trace.TraceInformation("ready");

                    int moleculeCounter    = 0;
                    int fingerprintCounter = 0;
                    Trace.TraceInformation($"Generated Fingerprints: {fingerprintCounter}    ");
                    foreach (var m in imdl)
                    {
                        if (!(moleculeCounter < limit || limit == -1))
                        {
                            break;
                        }
                        moleculeCounter++;
                        if (anyAtom && !anyAtomAnyBond)
                        {
                            query = QueryAtomContainerCreator.CreateAnyAtomContainer(m, false);
                        }
                        else
                        {
                            query = AtomContainerManipulator.Anonymise(m);
                        }
                        try
                        {
                            var time = -DateTime.Now.Ticks / 10000;
                            if (anyAtom || anyAtomAnyBond)
                            {
                                data.Add(fingerPrinter.GetBitFingerprint(query));
                                fingerprintCounter = fingerprintCounter + 1;
                            }
                            else
                            {
                                data.Add(fingerPrinter.GetBitFingerprint(query));
                                fingerprintCounter = fingerprintCounter + 1;
                            }
                            time += (DateTime.Now.Ticks / 10000);
                            // store the time
                            var bin = ((int)Math.Floor(time / 10.0)).ToString(NumberFormatInfo.InvariantInfo);
                            if (timings.ContainsKey(bin))
                            {
                                timings[bin] = (timings[bin]) + 1;
                            }
                            else
                            {
                                timings[bin] = 1;
                            }
                        }
                        catch (Exception exc1)
                        {
                            Trace.TraceInformation($"QueryFingerprintError: from molecule:{moleculeCounter} due to:{exc1.Message}");

                            // OK, just adds a fingerprint with all ones, so that any
                            // structure will match this template, and leave it up
                            // to substructure match to figure things out
                            var allOnesFingerprint = new BitSetFingerprint(fingerPrinter.Length);
                            for (int i = 0; i < fingerPrinter.Length; i++)
                            {
                                allOnesFingerprint.Set(i);
                            }
                            data.Add(allOnesFingerprint);
                            fingerprintCounter = fingerprintCounter + 1;
                        }

                        if (fingerprintCounter % 2 == 0)
                        {
                            Trace.TraceInformation("\b" + "/");
                        }
                        else
                        {
                            Trace.TraceInformation("\b" + "\\");
                        }

                        if (fingerprintCounter % 100 == 0)
                        {
                            Trace.TraceInformation("\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
                                                   + "Generated Fingerprints: " + fingerprintCounter + "   \n");
                        }
                    }// while
                    Trace.TraceInformation($"...ready with:{moleculeCounter} molecules\nWrite data...of data vector:{data.Count} fingerprintCounter:{fingerprintCounter}");
                }
            }
            catch (Exception exc)
            {
                Console.Out.WriteLine("Could not read Molecules from file" + " due to: " + exc.Message);
            }
            return(data);
        }