/// <summary>
        /// This method calculate the ATS Autocorrelation descriptor.
        /// </summary>
        public Result Calculate(IAtomContainer container, int count = DefaultSize)
        {
            container = AtomContainerManipulator.RemoveHydrogens(container);

            var w              = ListConvertion(container);
            var natom          = container.Atoms.Count;
            var distancematrix = TopologicalMatrix.GetMatrix(container);
            var masSum         = new double[count];

            for (int k = 0; k < count; k++)
            {
                for (int i = 0; i < natom; i++)
                {
                    for (int j = 0; j < natom; j++)
                    {
                        if (distancematrix[i][j] == k)
                        {
                            masSum[k] += w[i] * w[j];
                        }
                        else
                        {
                            masSum[k] += 0;
                        }
                    }
                }
                if (k > 0)
                {
                    masSum[k] = masSum[k] / 2;
                }
            }

            return(new Result(masSum));
        }
Example #2
0
        public Result Calculate(IAtomContainer container, int count = DefaultSize)
        {
            container = (IAtomContainer)container.Clone();
            container = AtomContainerManipulator.RemoveHydrogens(container);

            try
            {
                var w              = Listcharges(container);
                var natom          = container.Atoms.Count;
                var distancematrix = TopologicalMatrix.GetMatrix(container);

                var chargeSum = new double[count];

                for (int k = 0; k < count; k++)
                {
                    for (int i = 0; i < natom; i++)
                    {
                        for (int j = 0; j < natom; j++)
                        {
                            if (distancematrix[i][j] == k)
                            {
                                chargeSum[k] += w[i] * w[j];
                            }
                            else
                            {
                                chargeSum[k] += 0;
                            }
                        }
                    }
                    if (k > 0)
                    {
                        chargeSum[k] = chargeSum[k] / 2;
                    }
                }

                return(new Result(chargeSum));
            }
            catch (CDKException e)
            {
                return(new Result(e));
            }
        }