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