Exemple #1
0
        /// <summary>
        /// Test the WeightedConditioner class which is responsible for "conditioning"
        /// the A and b matrices in the equation Ax=b when solving for x.  b contains
        /// transition intensity values to be deconvolved, A encodes the precursor isolation
        /// window scheme used.  The conditioner weights the entries in the center rows of each
        /// matrix higher than those on the edges.
        /// </summary>
        private static void TestWeightedMatrixPrepare()
        {
            // If the matrices have less than 5 rows, the conditioner should have
            // no effect.
            DeconvBlock dbSmall = new DeconvBlock(5, 5, 4);

            double[] mask = { 1.0, 1.0, 1.0, 1.0, 0.0 };
            double[] data = { 2.0, 2.0, 2.0, 2.0 };
            for (int i = 0; i < 4; ++i)
            {
                dbSmall.Add(mask, data);
            }
            var conditioner = new WeightedConditioner();

            conditioner.Condition(dbSmall);
            var conditionedMasks = dbSmall.Masks;
            var conditionedData  = dbSmall.BinnedData;

            for (int i = 0; i < 4; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData        = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(mask, conditionedMask);
                AssertEx.AreEqualDeep(data, condData);
            }

            // If the matrices have more than 5 rows, check that the weighting
            // is applied correctly.
            DeconvBlock dbLarge = new DeconvBlock(5, 11, 4);

            for (int i = 0; i < 11; ++i)
            {
                dbLarge.Add(mask, data);
            }
            conditioner.Condition(dbLarge);
            conditionedMasks = dbLarge.Masks;
            conditionedData  = dbLarge.BinnedData;
            var expectedMask = new[] { -0.086, -0.086, -0.086, -0.086, 0.0 };
            var expectedData = new[] { 2 * -0.086, 2 * -0.086, 2 * -0.086, 2 * -0.086 };

            for (int i = 0; i < 2; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData        = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }
            expectedMask = new[] { 0.343, 0.343, 0.343, 0.343, 0.0 };
            expectedData = new[] { 2 * 0.343, 2 * 0.343, 2 * 0.343, 2 * 0.343 };
            for (int i = 2; i < 4; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData        = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }

            expectedMask = new[] { 0.486, 0.486, 0.486, 0.486, 0.0 };
            expectedData = new[] { 2 * 0.486, 2 * 0.486, 2 * 0.486, 2 * 0.486 };
            for (int i = 4; i < 6; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData        = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }

            expectedMask = new[] { 0.343, 0.343, 0.343, 0.343, 0.0 };
            expectedData = new[] { 2 * 0.343, 2 * 0.343, 2 * 0.343, 2 * 0.343 };
            for (int i = 6; i < 8; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData        = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }

            expectedMask = new[] { -0.086, -0.086, -0.086, -0.086, 0.0 };
            expectedData = new[] { 2 * -0.086, 2 * -0.086, 2 * -0.086, 2 * -0.086 };
            for (int i = 8; i < 11; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData        = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }
        }
        /// <summary>
        /// Test the WeightedConditioner class which is responsible for "conditioning"
        /// the A and b matrices in the equation Ax=b when solving for x.  b contains
        /// transition intensity values to be deconvolved, A encodes the precursor isolation
        /// window scheme used.  The conditioner weights the entries in the center rows of each
        /// matrix higher than those on the edges.
        /// </summary>
        private static void TestWeightedMatrixPrepare()
        {
            // If the matrices have less than 5 rows, the conditioner should have
            // no effect.
            DeconvBlock dbSmall = new DeconvBlock(5,5,4);
            double[] mask = {1.0,1.0,1.0,1.0, 0.0};
            double[] data = {2.0,2.0,2.0,2.0};
            for (int i = 0; i<4; ++i)
            {
                dbSmall.Add(mask, data);
            }
            var conditioner = new WeightedConditioner();
            conditioner.Condition(dbSmall);
            var conditionedMasks = dbSmall.Masks;
            var conditionedData = dbSmall.BinnedData;
            for (int i = 0; i<4; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(mask, conditionedMask);
                AssertEx.AreEqualDeep(data, condData);
            }

            // If the matrices have more than 5 rows, check that the weighting
            // is applied correctly.
            DeconvBlock dbLarge = new DeconvBlock(5, 11, 4);
            for (int i = 0; i<11; ++i)
            {
                dbLarge.Add(mask, data);
            }
            conditioner.Condition(dbLarge);
            conditionedMasks = dbLarge.Masks;
            conditionedData = dbLarge.BinnedData;
            var expectedMask = new[] {-0.086, -0.086, -0.086, -0.086, 0.0};
            var expectedData = new[] {2*-0.086, 2*-0.086, 2*-0.086, 2*-0.086};
            for (int i = 0; i<2; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }
            expectedMask = new[] {0.343, 0.343, 0.343, 0.343, 0.0};
            expectedData = new[] {2*0.343, 2*0.343, 2*0.343, 2*0.343};
            for (int i = 2; i<4; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }

            expectedMask = new[] {0.486, 0.486, 0.486, 0.486, 0.0};
            expectedData = new[] {2*0.486, 2*0.486, 2*0.486, 2*0.486};
            for (int i = 4; i<6; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }

            expectedMask = new[] {0.343, 0.343, 0.343, 0.343, 0.0};
            expectedData = new[] {2*0.343, 2*0.343, 2*0.343, 2*0.343};
            for (int i = 6; i<8; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }

            expectedMask = new[] {-0.086, -0.086, -0.086, -0.086, 0.0};
            expectedData = new[] {2*-0.086, 2*-0.086, 2*-0.086, 2*-0.086};
            for (int i = 8; i<11; ++i)
            {
                var conditionedMask = conditionedMasks.Matrix.Row(i, 0, 5).ToArray();
                var condData = conditionedData.Matrix.Row(i, 0, 4).ToArray();
                AssertEx.AreEqualDeep(expectedMask, conditionedMask);
                AssertEx.AreEqualDeep(expectedData, condData);
            }
        }