示例#1
0
def test_hp_task_creation():
    "test fit to hp dataframe"
    task = FitToHairpinTask(
        sequence = utpath("hairpins.fasta"),
        oligos   = "ctgc",
        fit      = ChiSquareFit(),
    )
    assert isinstance(task.fit.pop(None), ChiSquareFit)
    assert set(task.fit) == {'015', *(f"GF{i}" for i in range(1, 5))}
    assert all(isinstance(i, ChiSquareFit) for i in task.fit.values())
    assert_equal(task.fit['GF4'].peaks, [153, 205, 407, 496, 715, 845])
    assert all(isinstance(i, ChiSquareFit) for i in task.fit.values())

    task = FitToHairpinTask(
        sequence = utpath("hairpins.fasta"),
        oligos   = "ctgc",
        fit      = PeakGridFit(),
    )
    assert isinstance(task.fit.pop(None), PeakGridFit)
    assert set(task.fit) == {'015', *(f"GF{i}" for i in range(1, 5))}
    assert all(isinstance(i, PeakGridFit) for i in task.fit.values())

    for i in PeakGridFit(), ChiSquareFit():
        task = FitToHairpinTask(
            sequence = "doesnotexist.fasta",
            oligos   = "ctgc",
            fit      = i
        )
        assert isinstance(task.fit.pop(None), type(i))
        assert not task.fit
示例#2
0
def test_rescale():
    "test rescale"
    rng = Range(1, 1, 1)
    obj = rng.rescale("bias", 5)
    assert rng is not obj
    assert all(abs(5.-i) < 1e-5 for i in obj)

    obj = rng.rescale("stretch", .2)
    assert rng is not obj
    assert all(abs(5.-i) < 1e-5 for i in obj)

    rng = Range(None, 1, 1)
    obj = rng.rescale("bias", 5)
    assert rng is not obj
    assert obj[0] is None
    assert all(abs(5.-i) < 1e-5 for i in obj[1:])

    obj = rng.rescale("stretch", .2)
    assert rng is not obj
    assert obj[0] is None
    assert all(abs(5.-i) < 1e-5 for i in obj[1:])

    dist = DistanceConstraint("hp", {"stretch": Range(1, 1, 1), "bias": Range(1, 1, 1)})
    obj  = dist.rescale(5.)

    assert dist is not obj
    assert obj[0] == "hp"
    assert all(abs(5.-i) < 1e-5 for i in obj[1]['bias'])
    assert all(abs(.2-i) < 1e-5 for i in obj[1]['stretch'])

    task = FitToHairpinTask()
    assert task.rescale(5.) is not task
示例#3
0
def readconstraints(idtask: FitToHairpinTask,
                    idpath: Union[Path, str, None],
                    useparams: bool = True,
                    constraints: Dict[str, Range] = None) -> FitToHairpinTask:
    "adds constraints to an identification task"
    cstrs: Constraints = {}
    idtask.constraints = cstrs
    if idpath is None or not Path(idpath).exists():
        return idtask

    deflt = dict(FitToHairpinTask.DEFAULT_CONSTRAINTS)
    deflt.update(constraints if constraints else {})
    for item in readparams(cast(str, idpath)):
        cstrs[item[0]] = DistanceConstraint(item[1], {})
        if len(item) == 2 or not useparams:
            continue

        if item[2] is not None:
            cstrs[item[0]].constraints['stretch'] = Range(
                item[2], *deflt['stretch'][1:3])

        if item[3] is not None:
            cstrs[item[0]].constraints['bias'] = Range(item[3],
                                                       *deflt['bias'][1:3])
    return idtask
示例#4
0
def test_beadsplot_info_simple(diskcaching):
    "test the view"
    # pylint: disable=protected-access
    beads, mdl = _Fig.create()

    # testing for when there is nothing to plot
    for cls in _PeaksPlot, _HairpinPlot:
        assert (
            dict(cls(beads, mdl.tasks.processors)._reset())['x_range']['factors']
            == [('track1', '0')]
        )

    def _change(tpe, **kwa):
        mdl.theme.__dict__.update(**kwa)
        cls = _PeaksPlot if tpe else _HairpinPlot
        return dict(cls(beads, mdl.tasks.processors)._reset())

    mdl.tasks.jobs.launch(list(mdl.tasks.processors.values()))

    cache = _change(True)
    assert cache['x_range']['factors'] == list(zip(
        repeat(''), repeat(''),
        [
            '0', '1', '2', '3', '4', '7', '8', '12', '13', '14', '17', '18', '23',
            '24', '25', '27', '33', '34', '35', '37'
        ]
    ))

    next(iter(mdl.tasks.tasks.tasks.tasks.values())).add(
        FitToHairpinTask(
            sequence = utpath("hairpins.fasta"),
            oligos   = "4mer",
        ),
        mdl.tasks.tasks.state.processors[FitToHairpinTask]
    )
    mdl.tasks.jobs.launch(list(mdl.tasks.processors.values()))

    cache = _change(False)
    assert cache['x_range']['factors'] == [
        ('GF1', '', '14'), ('GF1', '', '33'), ('GF1', '', '1'), ('GF1', '', '7'),
        ('GF1', '', '25'), ('GF1', '', '35'), ('GF1', '', '12'), ('GF3', '', '27'),
        ('GF3', '', '13'), ('GF3', '', '3'), ('GF3', '', '17'), ('GF3', '', '37'),
        ('GF3', '', '23'), ('GF3', '', '18'), ('GF4', '', '34'), ('GF4', '', '0'),
        ('GF4', '', '4'), ('GF4', '', '24'), ('GF2', '', '2')
    ]

    mdl.display.hairpins = {'015', 'GF2', 'GF3', 'GF4'}
    cache = _change(False)
    assert cache['x_range']['factors'] == [
        ('GF1', '', '14'), ('GF1', '', '33'), ('GF1', '', '1'), ('GF1', '', '7'),
        ('GF1', '', '25'), ('GF1', '', '35'), ('GF1', '', '12')
    ]

    mdl.theme.sorting = {}
    cache = _change(False)
    assert cache['x_range']['factors'] == [
        ('GF1', '', '1'),  ('GF1', '', '7'), ('GF1', '', '12'), ('GF1', '', '14'),
        ('GF1', '', '25'), ('GF1', '', '33'), ('GF1', '', '35')
    ]
示例#5
0
def test_hp_dataframe(record):
    "test fit to hp dataframe"
    pair = next(iter(create(
        TrackReaderTask(path = utpath("big_legacy")),
        EventDetectionTask(),
        PeakSelectorTask(),
        FitToHairpinTask(
            sequence = utpath("hairpins.fasta"),
            oligos   = "4mer",
            fit      = ChiSquareFit()
        ),
        DataFrameTask(merge = True, measures = dict(
            peaks = dict(missing = True, peakhfsigma = True)
        )),
    ).run()))
    assert pair.shape == (102, 29)
    assert 'falseneg' in pair.peaks[1].status.unique()
    assert pair.index.names == ['hpin', 'track', 'bead']
    assert isinstance(pair.peaks.values[0], pd.DataFrame)
    assert 'modification' in pair.columns
    assert hasattr(pair, 'tasklist')
    assert record["withmissing"].approx(
        pair.drop(columns = ['peaks', 'cost', 'modification']).iloc[:5],
        atol = 5e-4
    )
    assert record["peakswithmissing"].approx(
        pair.peaks[1].iloc[:5], atol = 5e-4
    )

    pair = next(iter(create(
        TrackReaderTask(path = utpath("big_legacy")),
        EventDetectionTask(),
        PeakSelectorTask(),
        FitToHairpinTask(
            sequence = utpath("hairpins.fasta"),
            oligos   = "4mer",
            fit      = ChiSquareFit()
        ),
        DataFrameTask(merge = True),
    ).run()))
    assert pair.shape == (102, 26)
    assert pair.index.names == ['hpin', 'track', 'bead']
    assert 'modification' in pair.columns
    assert hasattr(pair, 'tasklist')
示例#6
0
def fittohairpintask(seqpath: Union[Path, str],
                     oligos: Union[Sequence[str], str],
                     idpath: Union[None, Path, str] = None,
                     useparams: bool = True,
                     constraints: Dict[str, Range] = None,
                     **kwa) -> FitToHairpinTask:
    "creates and identification task from paths"
    task = FitToHairpinTask.read(seqpath, oligos, **kwa)
    if len(task.fit) == 0:
        raise IOError("Could not find any sequence in " + str(seqpath))
    return readconstraints(task, idpath, useparams, constraints)
示例#7
0
 def addhp(server, rendered = _EVT, **kwa):
     "add the hairpin"
     from   peakcalling.processor    import FitToHairpinTask
     kwa.setdefault('sequences', utpath("hairpins.fasta"))
     kwa.setdefault('oligos',    "kmer")
     server.cmd(
         lambda: server.ctrl.tasks.addtask(
             next(next(server.ctrl.tasks.tasklist(...))),
             FitToHairpinTask(**kwa)
         ),
         rendered = rendered
     )
示例#8
0
def test_beadsplot_info_filter(diskcaching):
    "test the view"
    # pylint: disable=protected-access
    beads, mdl = _Fig.create()
    next(iter(mdl.tasks.tasks.tasks.tasks.values())).add(
        FitToHairpinTask(
            sequence = utpath("hairpins.fasta"),
            oligos   = "4mer",
        ),
        mdl.tasks.tasks.state.processors[FitToHairpinTask]
    )
    mdl.tasks.jobs.launch(list(mdl.tasks.processors.values()))

    cache = dict(_HairpinPlot(beads, mdl.tasks.processors)._reset())
    arr = cache['_expdata']['data']['closest']
    arr = np.unique(arr[np.isfinite(arr)])
    assert_equal(
        arr,
        [
            38.,  46., 151., 157., 222., 258., 274., 294., 347., 357., 379., 393., 503.,
            540., 569., 576., 631., 659., 704., 738., 754., 784., 791., 795., 800.
        ]
    )

    arr = np.unique(
        next(j for i,j in cache.items() if isinstance(i, _Fig._CData))
        ['data']['bindingposition']
    )
    assert_equal(
        arr,
        [
            38.,  46., 151., 157., 222., 258., 274., 294., 347., 357., 379., 393., 503.,
            540., 569., 576., 631., 659., 704., 738., 754., 784., 791., 795., 800.
        ]
    )

    mdl.display.ranges[('peaks', 'baseposition')] = Slice(100, 400)
    cache = dict(_HairpinPlot(beads, mdl.tasks.processors)._reset())
    arr = cache['_expdata']['data']['closest']
    arr = np.unique(arr[np.isfinite(arr)])
    assert_equal(arr, [151., 157., 222., 258., 274., 294., 347., 357., 379., 393.])

    arr = np.unique(
        next(j for i,j in cache.items() if isinstance(i, _Fig._CData))
        ['data']['bindingposition']
    )
    assert_equal(arr, [151., 157., 222., 258., 274., 294., 347., 357., 379., 393.])