예제 #1
0
        public void TestBug2819557()
        {
            IAtomContainer butane      = MakeButane();
            IAtomContainer propylAmine = MakePropylAmine();

            Fingerprinter fp = new Fingerprinter();
            BitArray      b1 = fp.GetBitFingerprint(butane).AsBitSet();
            BitArray      b2 = fp.GetBitFingerprint(propylAmine).AsBitSet();

            Assert.IsFalse(FingerprinterTool.IsSubset(b2, b1), "butane should not be a substructure of propylamine");
        }
예제 #2
0
        public void TestIsSubSet_BitSet_BitSet()
        {
            Fingerprinter fingerprinter = new Fingerprinter();

            IAtomContainer mol   = TestMoleculeFactory.MakeIndole();
            BitArray       bs    = fingerprinter.GetBitFingerprint(mol).AsBitSet();
            IAtomContainer frag1 = TestMoleculeFactory.MakePyrrole();
            BitArray       bs1   = fingerprinter.GetBitFingerprint(frag1).AsBitSet();

            Assert.IsTrue(FingerprinterTool.IsSubset(bs, bs1));
        }
예제 #3
0
        public void TestAtomPermutation2()
        {
            IAtomContainer  pamine = TestMoleculeFactory.MakeCyclopentane();
            Fingerprinter   fp     = new Fingerprinter();
            IBitFingerprint bs1    = fp.GetBitFingerprint(pamine);

            AtomContainerAtomPermutor acp = new AtomContainerAtomPermutor(pamine);

            while (acp.MoveNext())
            {
                IAtomContainer  container = acp.Current;
                IBitFingerprint bs2       = fp.GetBitFingerprint(container);
                Assert.IsTrue(bs1.Equals(bs2));
            }
        }
예제 #4
0
        public void TestAtomPermutation()
        {
            var pamine = MakePropylAmine();
            var fp     = new Fingerprinter();
            var bs1    = fp.GetBitFingerprint(pamine);

            var acp = new AtomContainerAtomPermutor(pamine);

            while (acp.MoveNext())
            {
                var container = acp.Current;
                var bs2       = fp.GetBitFingerprint(container);
                Assert.IsTrue(bs1.Equals(bs2));
            }
        }
예제 #5
0
 public void Main()
 {
     {
         #region IsSubset
         var mol           = TestMoleculeFactory.MakeIndole();
         var fingerprinter = new Fingerprinter();
         var bs            = fingerprinter.GetBitFingerprint(mol);
         var frag1         = TestMoleculeFactory.MakePyrrole();
         var bs1           = fingerprinter.GetBitFingerprint(frag1);
         if (FingerprinterTool.IsSubset(bs.AsBitSet(), bs1.AsBitSet()))
         {
             Console.Out.WriteLine("Pyrrole is subset of Indole.");
         }
         #endregion
     }
 }
예제 #6
0
        public void TestRegression()
        {
            IAtomContainer  mol1          = TestMoleculeFactory.MakeIndole();
            IAtomContainer  mol2          = TestMoleculeFactory.MakePyrrole();
            Fingerprinter   fingerprinter = new Fingerprinter(1024, 8);
            IBitFingerprint bs1           = fingerprinter.GetBitFingerprint(mol1);

            Assert.AreEqual(
                33, bs1.Cardinality,
                "Seems the fingerprint code has changed. This will cause a number of other tests to fail too!");
            IBitFingerprint bs2 = fingerprinter.GetBitFingerprint(mol2);

            Assert.AreEqual(
                13, bs2.Cardinality,
                "Seems the fingerprint code has changed. This will cause a number of other tests to fail too!");
        }
예제 #7
0
        public void TestgetBitFingerprint_IAtomContainer()
        {
            Fingerprinter fingerprinter = new Fingerprinter();

            var             mol = TestMoleculeFactory.MakeIndole();
            IBitFingerprint bs  = fingerprinter.GetBitFingerprint(mol);

            Assert.IsNotNull(bs);
            Assert.AreEqual(fingerprinter.Length, bs.Length);
        }
예제 #8
0
        public void TestBug1851202()
        {
            string filename1 = "NCDK.Data.MDL.0002.stg01.rxn";

            Trace.TraceInformation("Testing: " + filename1);
            var ins1 = ResourceLoader.GetAsStream(filename1);
            MDLRXNV2000Reader reader   = new MDLRXNV2000Reader(ins1, ChemObjectReaderMode.Strict);
            IReaction         reaction = (IReaction)reader.Read(builder.NewReaction());

            Assert.IsNotNull(reaction);

            IAtomContainer reactant = reaction.Reactants[0];
            IAtomContainer product  = reaction.Products[0];

            Fingerprinter fingerprinter = new Fingerprinter(64 * 26, 8);

            Assert.IsNotNull(fingerprinter.GetBitFingerprint(reactant));
            Assert.IsNotNull(fingerprinter.GetBitFingerprint(product));
        }
예제 #9
0
 public void Main()
 {
     {
         #region
         var molecule      = new AtomContainer();
         var fingerprinter = new Fingerprinter();
         var fingerprint   = fingerprinter.GetBitFingerprint(molecule);
         Console.WriteLine(fingerprint.Length); // returns 1024 by default
         #endregion
     }
 }
예제 #10
0
        public void TestFingerprinterBitSetSize()
        {
            Fingerprinter fingerprinter = new Fingerprinter(1024, 7);

            Assert.IsNotNull(fingerprinter);
            var      mol = TestMoleculeFactory.MakeIndole();
            BitArray bs  = fingerprinter.GetBitFingerprint(mol).AsBitSet();

            Assert.AreEqual(994, BitArrays.GetLength(bs)); // highest set bit
            Assert.AreEqual(1024, bs.Count);               // actual bit set size
        }
예제 #11
0
        public void Testbug2917084()
        {
            string filename1 = "NCDK.Data.MDL.boronBuckyBall.mol";

            Trace.TraceInformation("Testing: " + filename1);
            var ins1     = ResourceLoader.GetAsStream(filename1);
            var reader   = new MDLV2000Reader(ins1, ChemObjectReaderMode.Strict);
            var chemFile = reader.Read(builder.NewChemFile());

            Assert.IsNotNull(chemFile);
            var mol = ChemFileManipulator.GetAllAtomContainers(chemFile).First();

            Fingerprinter fingerprinter = new Fingerprinter(1024, 8);

            Assert.IsNotNull(fingerprinter.GetBitFingerprint(mol));
        }
예제 #12
0
        /// <summary>
        /// Generates a fingerprint of the default size for the given
        /// AtomContainer, using path and ring metrics. It contains the
        /// informations from <see cref="Fingerprinter.GetBitFingerprint(IAtomContainer)"/> and bits which tell if the structure
        /// has 0 rings, 1 or less rings, 2 or less rings ... 10 or less rings and
        /// bits which tell if there is a fused ring system with 1,2...8 or more
        /// rings in it. The RingSet used is passed via rs parameter. This must be
        /// a smallesSetOfSmallestRings. The List must be a list of all ring
        /// systems in the molecule.
        /// </summary>
        /// <param name="atomContainer">The AtomContainer for which a Fingerprint is generated</param>
        /// <param name="ringSet">An SSSR RingSet of ac (if not available, use <see cref="GetBitFingerprint(IAtomContainer)"/>, which does the calculation)</param>
        /// <param name="rslist">A list of all ring systems in ac</param>
        /// <exception cref="CDKException">for example if input can not be cloned.</exception>
        /// <returns>a BitArray representing the fingerprint</returns>
        public IBitFingerprint GetBitFingerprint(IAtomContainer atomContainer, IRingSet ringSet, IEnumerable <IRingSet> rslist)
        {
            var container = (IAtomContainer)atomContainer.Clone();

            var fingerprint = fingerprinter.GetBitFingerprint(container);
            var size        = this.Length;
            var weight      = MolecularFormulaManipulator.GetTotalNaturalAbundance(MolecularFormulaManipulator.GetMolecularFormula(container));

            for (int i = 1; i < 11; i++)
            {
                if (weight > (100 * i))
                {
                    fingerprint.Set(size - 26 + i); // 26 := RESERVED_BITS+1
                }
            }
            if (ringSet == null)
            {
                ringSet = Cycles.FindSSSR(container).ToRingSet();
                rslist  = RingPartitioner.PartitionRings(ringSet);
            }
            for (int i = 0; i < 7; i++)
            {
                if (ringSet.Count > i)
                {
                    fingerprint.Set(size - 15 + i); // 15 := RESERVED_BITS+1+10 mass bits
                }
            }
            int maximumringsystemsize = 0;

            foreach (var rs in rslist)
            {
                if (rs.Count > maximumringsystemsize)
                {
                    maximumringsystemsize = rs.Count;
                }
            }
            for (int i = 0; i < maximumringsystemsize && i < 9; i++)
            {
                fingerprint.Set(size - 8 + i - 3);
            }
            return(fingerprint);
        }