Пример #1
0
    def test_remove(self):
        mzs = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]).reshape(-1, 1)
        ones = np.ones_like(mzs)
        peaks = np.hstack((mzs, ones))
        spectra = [
            Spectrum(peaks, 0.0, 1, "0"),
            Spectrum(peaks, 1.0, 1, "0"),
            Spectrum(peaks, 1.5, 2, "0"),
            Spectrum(peaks, 2.0, 1, "0")
        ]

        pm = PeakMap(spectra)

        pmt = copy.deepcopy(pm)
        pmt.remove(0.0, 10.0, 0.0, 2.0)
        assert len(pmt) == 1
        assert pmt.spectra[0] == Spectrum(peaks, 1.5, 2, "0")

        pmt = copy.deepcopy(pm)
        pmt.remove(1.0, 3.2, 1.0, 2.0)
        assert len(pmt) == 4
        assert np.all(pmt.spectra[0].peaks == peaks)
        assert np.all(
            pmt.spectra[1].peaks.flatten() == [0., 1.0, 4.0, 1.0, 5.0, 1.0])
        assert np.all(pmt.spectra[2].peaks == peaks)
        assert np.all(
            pmt.spectra[3].peaks.flatten() == [0., 1.0, 4.0, 1.0, 5.0, 1.0])
Пример #2
0
    def testFilterIntensity(self, regtest):
        data = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]).reshape(-1, 1)
        intensities = np.array([10.0, 11.0, 12.0, 13.0, 14.0,
                                15.0]).reshape(-1, 1)
        peaks = np.hstack((data, intensities))
        assert peaks.shape == (6, 2)
        spec1 = Spectrum(peaks, 0.0, 1, "0")
        spec2 = Spectrum(peaks, 0.0, 2, "0")

        assert spec1.maxIntensity() == 15.0

        pm = PeakMap([spec1, spec2])

        pm_x = pm.extract(mslevelmin=1)
        assert len(pm_x) == 2
        pm_x = pm.extract(mslevelmin=2)
        assert len(pm_x) == 1
        pm_x = pm.extract(mslevelmin=3)
        assert len(pm_x) == 0

        pm_x = pm.extract(mslevelmax=1, imin=10.0, imax=15.0)
        assert len(pm_x) == 1
        assert pm_x[0].peaks.shape == (6, 2)
        for spec in pm_x:
            print >> regtest, spec.peaks

        pm_x = pm.extract(mslevelmax=1, imin=10.0)
        assert len(pm_x) == 1
        assert pm_x[0].peaks.shape == (6, 2)
        for spec in pm_x:
            print >> regtest, spec.peaks

        pm_x = pm.extract(mslevelmax=1, imax=15.0)
        assert len(pm_x) == 1
        assert pm_x[0].peaks.shape == (6, 2)
        for spec in pm_x:
            print >> regtest, spec.peaks

        pm_x = pm.extract(mslevelmax=1, imin=10.0)
        assert len(pm_x) == 1
        assert pm_x[0].peaks.shape == (6, 2)
        for spec in pm_x:
            print >> regtest, spec.peaks

        pm_x = pm.extract(mslevelmax=1, imin=11.0)
        assert len(pm_x) == 1
        assert pm_x[0].peaks.shape == (5, 2)
        for spec in pm_x:
            print >> regtest, spec.peaks

        pm_x = pm.extract(mslevelmax=1, imin=11.0, imax=13.5)
        assert len(pm_x) == 1
        assert pm_x[0].peaks.shape == (3, 2)
        for spec in pm_x:
            print >> regtest, spec.peaks
Пример #3
0
def _final_spectrum(peaks, spectra):
    rt = np.mean([s.rt for s in spectra])
    msLevel = 2
    polarity = spectra[0].polarity

    precursors = [p for spec in spectra for p in spec.precursors]
    return Spectrum(np.vstack(peaks), rt, msLevel, polarity, precursors)
Пример #4
0
    def testCompress(self):
        t = toTable("a", [])
        import numpy
        t.compressPeakMaps()

        s = Spectrum(
            numpy.arange(12, dtype="float64").reshape(-1, 2), 1.0, 1, "+")
        pm = PeakMap([s])
        s = Spectrum(
            numpy.arange(12, dtype="float64").reshape(-1, 2), 1.0, 1, "+")
        pm2 = PeakMap([s])

        t = toTable("pm", [pm, pm2])
        assert len(set(map(id, t.pm.values))) == 2
        t.compressPeakMaps()
        assert len(set(map(id, t.pm.values))) == 1
Пример #5
0
    def test_proxies(self):
        mzs = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]).reshape(-1, 1)
        ones = np.ones_like(mzs)
        peaks = np.hstack((mzs, ones))
        spec = Spectrum(peaks, 0.0, 1, "0")
        spec.peaks[:, 0] += 1.0
        assert np.linalg.norm(spec.peaks[:, 0] - mzs.flatten(), 1) == 6.0

        def check(fun, spec=spec):
            before = spec.uniqueId()
            exec(fun, dict(spec=spec))
            assert "unique_id" not in spec.meta
            after = spec.uniqueId()
            assert before != after

        check("spec.peaks[:, 0] += 1")
        check("spec.peaks += 1")
        check("spec.peaks -= 1")
        check("spec.peaks /= 2.1")
        check("spec.peaks //= 2.1")
        check("spec.peaks *= 2")
        check("spec.peaks %= 1.1")
        check("spec.peaks **= 2")

        check("spec.rt += 1")
        check("spec.msLevel += 1")
        check("spec.precursors = [(1, 1, 0)]")
        check("spec.polarity = '+'")

        pm = PeakMap([spec])
        before = pm.uniqueId()
        pm.spectra[0].rt += 2
        after = spec.uniqueId()
        assert before != after

        from cPickle import loads, dumps

        back = loads(dumps(pm))
        back.meta.pop("unique_id", None)
        pm.meta.pop("unique_id", None)
        assert back.uniqueId() == pm.uniqueId()

        # this was broken after pickling, the callback was not pickled and calling
        # it whein operatin on peaks rose an excepion
        for s in back:
            s.peaks += 1

        # this was broken because it creates a view which is not continous:
        s.peaks = s.peaks[1:-1:2]
        assert s.uniqueId()

        spec_new = loads(dumps(spec))
        assert spec_new.scan_number == spec.scan_number
        assert spec_new.rt == spec.rt
        assert spec_new.msLevel == spec.msLevel
        assert spec_new.precursors == spec.precursors
        assert spec_new.polarity == spec.polarity
        assert np.linalg.norm(spec_new.peaks - spec.peaks) == 0.0
Пример #6
0
def _final_spectrum(peaks, spectra):
    rt = np.mean([s.rt for s in spectra])
    msLevel = 2
    polarity = spectra[0].polarity

    # precursor_mz = np.mean([mz for s in spectra for (mz, ii) in s.precursors])
    # precursor_ii = np.mean([ii for s in spectra for (mz, ii) in s.precursors])
    # precursors = [(precursor_mz, precursor_ii)]
    precursors = [p for spec in spectra for p in spec.precursors]
    return Spectrum(np.vstack(peaks), rt, msLevel, polarity, precursors)
def testTrapezIntegrationSimple():

    p0 = np.array((1.0, 1.0, 2.0, 2.0)).reshape(-1,2)
    p1 = np.array((2.0, 2.0, 3.0, 3.0)).reshape(-1,2)
    p2 = np.array((1.0, 1.0, 2.0, 2.0, 3.0, 3.0)).reshape(-1,2)
    p3 = np.array((3.0, 3.0)).reshape(-1,2)

    s0 = Spectrum(p0, 0.0, 1, '0')
    s1 = Spectrum(p1, 1.0, 1, '0')
    s2 = Spectrum(p2, 2.0, 1, '0')
    s3 = Spectrum(p3, 3.0, 1, '0')

    pm = PeakMap([s0,s1,s2,s3])

    integrator = dict(emzed._algorithm_configs.peakIntegrators)["trapez"]
    integrator.setPeakMap(pm)

    assert integrator.integrate(1.4, 2.5, 0, 3)["area"] == 5.0
    assert integrator.integrate(1.4, 2.5, 0, 2)["area"] == 4.0

    assert integrator.integrate(0.4, 2.5, 0, 3)["area"] == 6.5
    assert integrator.integrate(0.4, 2.5, 0, 2)["area"] == 5.0

    assert integrator.integrate(0.4, 3.0, 0, 3)["area"] == 14


    # one level 2 spec:
    s1 = Spectrum(p1, 1.0, 2, '0')
    pm = PeakMap([s0,s1,s2,s3])
    integrator.setPeakMap(pm)

    assert integrator.integrate(1.4, 2.5, 0, 3, msLevel=1)["area"] == 5.0
    assert integrator.integrate(1.4, 2.5, 0, 2, msLevel=1)["area"] == 4.0

    assert integrator.integrate(0.4, 2.5, 0, 3, msLevel=1)["area"] == 7.5
    assert integrator.integrate(0.4, 2.5, 0, 2, msLevel=1)["area"] == 6.0

    assert integrator.integrate(0.4, 3.0, 0, 3, msLevel=1)["area"] == 13.5

    # multiple levels shall rise exception:
    ex(lambda: integrator.integrate(0.4, 3.0, 0, 3))
Пример #8
0
 def testIntensityInRange(self):
     data = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]).reshape(-1, 1)
     ones = np.ones_like(data)
     peaks = np.hstack((data, ones))
     assert peaks.shape == (6, 2)
     spec = Spectrum(peaks, 0.0, 1, "0")
     assert spec.intensityInRange(0.0, 5.0) == 6.0
     assert spec.intensityInRange(0.1, 5.0) == 5.0
     assert spec.intensityInRange(0.0, 4.5) == 5.0
     assert spec.intensityInRange(0.5, 4.5) == 4.0
     assert spec.intensityInRange(2.0, 2.0) == 1.0
     assert spec.intensityInRange(2.1, 2.0) == 0.0
     assert spec.maxIntensity() == 1.0
Пример #9
0
    def test_proxies(self):
        mzs = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]).reshape(-1, 1)
        ones = np.ones_like(mzs)
        peaks = np.hstack((mzs, ones))
        spec = Spectrum(peaks, 0.0, 1, "0")
        spec.peaks[:, 0] += 1.0
        assert np.linalg.norm(spec.peaks[:, 0] - mzs.flatten(), 1) == 6.0

        def check(fun, spec=spec):
            before = spec.uniqueId()
            exec(fun, dict(spec=spec))
            assert "unique_id" not in spec.meta
            after = spec.uniqueId()
            assert before != after

        check("spec.peaks[:, 0] += 1")
        check("spec.peaks += 1")
        check("spec.peaks -= 1")
        check("spec.peaks /= 2.1")
        check("spec.peaks //= 2.1")
        check("spec.peaks *= 2")
        check("spec.peaks %= 1.1")
        check("spec.peaks **= 2")

        check("spec.rt += 1")
        check("spec.msLevel += 1")
        check("spec.precursors = [(1, 1)]")
        check("spec.polarity = '+'")

        pm = PeakMap([spec])
        before = pm.uniqueId()
        pm.spectra[0].rt += 2
        after = spec.uniqueId()
        assert before != after

        from cPickle import loads, dumps

        back = loads(dumps(pm))
        back.meta.pop("unique_id", None)
        pm.meta.pop("unique_id", None)
        assert back.uniqueId() == pm.uniqueId()
Пример #10
0
def test_0():

    ii = np.linspace(1000.0, 2000.0, 21)
    mzs = np.linspace(100.0, 1100.0, 21)

    peaks = np.vstack((mzs, ii)).T
    spec = Spectrum(peaks, rt=100.0, msLevel=1, polarity="+")
    assert (1.0 - 1e-3) <= spec.cosine_distance(spec, 0.001) <= 1.0 + 1e-3

    # enforce only 10 matches
    mzs[10:] = 0.0
    peaks = np.vstack((mzs, ii)).T
    other = Spectrum(peaks, rt=100.0, msLevel=1, polarity="+")
    assert (1.0 - 1e-3) <= spec.cosine_distance(other, 0.001) <= 1.0 + 1e-3

    # enforce only 5 matches
    mzs[5:] = 0.0
    peaks = np.vstack((mzs, ii)).T
    other = Spectrum(peaks, rt=100.0, msLevel=1, polarity="+")
    assert (0.0 - 1e-3) <= spec.cosine_distance(other, 0.001,
                                                min_matches=10) <= 0.0 + 1e-3

    ii = np.linspace(1000.0, 2000.0, 21)
    mzs = np.linspace(100.0, 1100.0, 21) + 800.0
    peaks = np.vstack((mzs, ii)).T
    other = Spectrum(peaks, rt=100.0, msLevel=1, polarity="+")
    assert (0.99963 - 1e-3) <= spec.cosine_distance(
        other, 0.001, min_matches=5) <= 0.99963 + 1e-3

    ii = np.linspace(1000.0, 2000.0, 21)
    mzs = np.linspace(100.0, 1100.0, 21) + 200
    peaks = np.vstack((mzs, ii)).T
    s1 = Spectrum(peaks,
                  rt=1.0,
                  msLevel=2,
                  polarity="+",
                  precursors=[(10.0, 1000)])
    s2 = Spectrum(peaks,
                  rt=1.0,
                  msLevel=2,
                  polarity="+",
                  precursors=[(210.0, 1000)])

    assert abs(
        s1.cosine_distance(s2, 0.001, consider_precursor_shift=True) -
        0.99986) < 1e-3
Пример #11
0
def testActions():

    t = buildTable()
    n = len(t)
    recorder = RecordingObject()
    model = TableModel(t, recorder)
    t_orig = t.copy()

    action = DeleteRowsAction(model, [0], [0])
    action.do()
    assert len(model.table) == len(t_orig) - 1
    assert model.table.rows[0] == t_orig.rows[1]
    action.undo()
    assert len(model.table) == len(t_orig)
    assert model.table.rows[0] == t_orig.rows[0]

    action = CloneRowAction(model, 0, 0)
    action.do()
    assert model.table.rows[0] == t_orig.rows[0]
    assert model.table.rows[1] == t_orig.rows[0]
    assert model.table.rows[2] == t_orig.rows[1]
    assert len(model.table) == n + 1
    action.undo()
    assert len(model.table) == n
    assert model.table.rows[0] == t_orig.rows[0]
    assert model.table.rows[1] == t_orig.rows[1]

    action = SortTableAction(model, [("mz", True)])
    action.do()
    assert model.table.mz.values == (None, 1.0, 2.0)
    action.undo()
    assert model.table.mz.values == t_orig.mz.values

    action = SortTableAction(model, [("mz", False)])
    action.do()
    assert model.table.mz.values == (2.0, 1.0, None)
    action.undo()
    assert model.table.mz.values == t_orig.mz.values

    class Index(object):
        def row(self):
            return 0

        def column(self):
            return 0

    action = ChangeValueAction(model, Index(), 0, 0, 3.0)
    action.do()
    assert model.table.rows[0][0] == 3.0
    action.undo()
    assert model.table.rows[0][0] == 1.0

    t = buildTable()
    import numpy
    peak = numpy.array(((1.0, 100.0), ))
    specs = [Spectrum(peak, rt, 1, "+") for rt in range(9, 15)]
    pm = PeakMap(specs)

    t.replaceColumn("peakmap", pm)

    model.table = emzed.utils.integrate(t, "no_integration")

    action = IntegrateAction(model, 0, "", "trapez", 0, 100, {0: 0})
    action.do()
    assert model.table.area.values[0] == 500.0
    action.undo()

    assert model.table.area.values[0] == None