def test_match_mz_multiple_matches_mode_reduce(): tolerance = 2 mz1 = np.array([50, 75, 100, 125, 150], dtype=float) mz2 = np.array([49, 51, 78, 99, 100, 101, 126, 150, 151], dtype=float) sp2 = np.array([100] * mz2.size, dtype=float) # expected values for match/no match indices # in closest mode, argmin is used to select the closest value. If more # than one value has the same difference, the first one in the array is # going to be selected. mz1_match_index = np.array([0, 2, 3, 4], dtype=int) mz2_match_index = np.array([0, 1, 3, 4, 5, 6, 7, 8], dtype=int) mz2_no_match_index = np.array([2], dtype=int) expected_mz2_match = [50.0, 100.0, 126.0, 150.5] expected_sp2_match = [200, 300, 100, 200] mode = "reduce" test_mz1_index, mz2_match, sp2_match, mz2_no_match, sp2_no_match = \ lcms._match_mz(mz1, mz2, sp2, tolerance, mode, np.mean, np.sum) # test match index assert np.array_equal(mz1_match_index, test_mz1_index) # test match mz and sp values assert np.allclose(mz2_match, expected_mz2_match) assert np.allclose(sp2_match, expected_sp2_match) # test no match mz and sp values assert np.array_equal(mz2[mz2_no_match_index], mz2_no_match) assert np.array_equal(sp2[mz2_no_match_index], sp2_no_match)
def test_match_mz_invalid_mode(): tolerance = 2 mz1 = np.array([50, 75, 100, 125, 150]) mz2 = np.array([49, 51, 78, 99, 100, 101, 126, 150, 151]) sp2 = np.array([100] * mz2.size) # expected values for match/no match indices # in closest mode, argmin is used to select the closest value. If more # than one value has the same difference, the first one in the array is # going to be selected. mz1_match_index = np.array([0, 2, 3, 4], dtype=int) mz2_match_index = np.array([0, 4, 6, 7], dtype=int) mz2_no_match_index = np.array([1, 2, 3, 5, 8], dtype=int) mode = "invalid-mode" with pytest.raises(ValueError): test_mz1_index, mz2_match, sp2_match, mz2_no_match, sp2_no_match = \ lcms._match_mz(mz1, mz2, sp2, tolerance, mode, np.mean, np.mean)
def test_match_mz_all_match(): tolerance = 2 mz1 = np.array([50, 75, 100, 125, 150]) mz2 = np.array([51, 77, 99, 126, 150]) sp2 = np.array([100] * mz2.size) # expected values for match/no match indices mz1_match_index = np.array([0, 1, 2, 3, 4], dtype=int) mz2_match_index = np.array([0, 1, 2, 3, 4], dtype=int) mz2_no_match_index = np.array([], dtype=int) mode = "closest" test_mz1_index, mz2_match, sp2_match, mz2_no_match, sp2_no_match = \ lcms._match_mz(mz1, mz2, sp2, tolerance, mode, np.mean, np.mean) # test match index assert np.array_equal(mz1_match_index, test_mz1_index) # test match mz and sp values assert np.array_equal(mz2[mz2_match_index], mz2_match) assert np.array_equal(sp2[mz2_match_index], sp2_match) # test no match mz and sp values assert np.array_equal(mz2[mz2_no_match_index], mz2_no_match) assert np.array_equal(sp2[mz2_no_match_index], sp2_no_match)
def test_match_mz_multiple_matches_mode_closest(): tolerance = 2 mz1 = np.array([50, 75, 100, 125, 150]) mz2 = np.array([49, 51, 78, 99, 100, 101, 126, 150, 151]) sp2 = np.array([100] * mz2.size) # expected values for match/no match indices # in closest mode, argmin is used to select the closest value. If more # than one value has the same difference, the first one in the array is # going to be selected. mz1_match_index = np.array([0, 2, 3, 4], dtype=int) mz2_match_index = np.array([0, 4, 6, 7], dtype=int) mz2_no_match_index = np.array([1, 2, 3, 5, 8], dtype=int) mode = "closest" test_mz1_index, mz2_match, sp2_match, mz2_no_match, sp2_no_match = \ lcms._match_mz(mz1, mz2, sp2, tolerance, mode, np.mean, np.mean) # test match index assert np.array_equal(mz1_match_index, test_mz1_index) # test match mz and sp values assert np.array_equal(mz2[mz2_match_index], mz2_match) assert np.array_equal(sp2[mz2_match_index], sp2_match) # test no match mz and sp values assert np.array_equal(mz2[mz2_no_match_index], mz2_no_match) assert np.array_equal(sp2[mz2_no_match_index], sp2_no_match)