def test_measure_alignment(): "align on 1 phase or another as needed" track = randtrack(driftargs=None, baselineargs=(.1, .05, 'rand'), seed=0) for i in range(3): ini = track.cycles.withphases(PHASE.initial)[0, i] ini += (track.cycles.withphases(PHASE.pull)[0, i].mean() - ini.mean()) * .5 for i in range(5): ini = track.cycles.withphases(PHASE.measure)[0, i] ini += (track.cycles.withphases(PHASE.pull)[0, i].mean() - ini.mean()) * .5 bead = ExtremumAlignmentProcessor.apply(track.beads, phase=AlignmentTactic.measure) inipos = [ i.mean() for i in # type: ignore track.beads[0, ...].withphases(PHASE.pull).values() ] corrpos = [ i.mean() for i in # type: ignore bead[0, ...].withphases(PHASE.pull).values() ] assert np.std(inipos[3:]) > 10 * np.std(corrpos[3:]) assert all(i > .95 for i in corrpos[:3])
def test_pull_alignment(): "align on 1 phase or another as needed" track = randtrack(driftargs=None, baselineargs=(.1, .05, 'rand')) for i in range(3): ini = track.cycles.withphases(PHASE.initial)[0, i] ini -= ini.mean() pull = track.cycles.withphases(PHASE.pull)[0, i] pull += .2 - pull.mean() meas = track.cycles.withphases(PHASE.measure)[0, i] meas[:] = 0. pull = track.cycles.withphases(PHASE.pull)[0, 3].mean() meas = track.cycles.withphases(PHASE.measure)[0, 3] meas[:] = pull.mean() - .2 pull = track.cycles.withphases(PHASE.pull)[0, 4].mean() meas = track.cycles.withphases(PHASE.initial)[0, 4] meas[:] = pull.mean() - .2 bead = ExtremumAlignmentProcessor.apply(track.beads, phase=AlignmentTactic.pull) inipos = [ i.mean() for i in track.beads[0, ...].withphases(PHASE.pull).values() ] corrpos = [i.mean() for i in bead[0, ...].withphases(PHASE.pull).values()] assert np.std(inipos[3:]) > 20 * np.std(corrpos[3:]) assert all(i < .6 for i in corrpos[:3])
def _create(phase): track = randtrack(driftargs=None, baselineargs=(.1, .05, 'rand')) ini = track.cycles.withphases(PHASE.initial)[0, 0] ini += (track.cycles.withphases(PHASE.pull)[0, 0].mean() - ini.mean()) * .5 bead = ExtremumAlignmentProcessor.apply(track.beads, phase=phase) return [ i.mean() for i in bead[0, ...].withphases(PHASE.initial).values() ]
def test_processor(): "test processor" # pylint: disable=expression-not-assigned cache = {} # type: ignore trk = randtrack().beads DataCleaningProcessor.apply(trk, cache=cache, maxsaturation=100)[0] assert list(cache) == [0] tmp = cache[0] DataCleaningProcessor.apply(trk, cache=cache, maxsaturation=100)[0] assert tmp is cache[0]
def test_edgeminmaxprocessor(): "align on min/max value" track = randtrack(driftargs=None, baselineargs=(.1, None, 'rand')) inipos = [ i.mean() for i in track.cycles.withphases(PHASE.initial).values() ] bead = ExtremumAlignmentProcessor.apply(track.beads, phase=AlignmentTactic.onlyinitial, edge='right') corrpos = [ i.mean() for i in bead[0, ...].withphases(PHASE.initial).values() ] assert np.std(inipos) > .015 assert np.std(corrpos) < .001
def test_precision(): "tests that peaks can be found with a given precision" track = randtrack(durations=[15, 30, 15, 60, 60, 200, 15, 100], drift=None, baseline=None, poisson=dict(rates=[.05, .05, .1, .1, .2, .2], sizes=[20, 10, 20, 10, 20, 10], peaks=[0.1, 0.2, 0.3, 0.4, 0.5, 0.6], store=['sizes']), seed=0, nbeads=1, ncycles=100) data = track.beads.new(Events) found = np.array([len(i) for _, i in data[0, ...]], dtype='i4') sizes = getattr(track, 'simulator')[0]['sizes'] sim = np.sum(sizes >= data.events.select.minduration, 1) assert list(np.nonzero(found - sim - 1)[0]) == []