Пример #1
0
def _test_applyCommandLine(panel, overlayList, displayCtx):

    displayCtx = panel.displayCtx
    panel.sceneOpts.layout = 'horizontal'

    with tempdir():
        img = fslimage.Image(np.random.randint(1, 255, (20, 20, 20)))
        img.save('image.nii.gz')

        applycommandline.applyCommandLineArgs(
            overlayList,
            panel.displayCtx,
            ['-lo', 'vertical',
             'image.nii.gz', '-b', '75', '-c', '25', '-g', '-0.5'],
            panel=panel,
            blocking=True)

        # scene args are applied asynchronously
        waitUntilIdle()

        assert len(overlayList) == 1
        assert np.all(overlayList[0][:] == img[:])
        img = overlayList[0]
        assert displayCtx.getDisplay(img).brightness ==  75
        assert displayCtx.getDisplay(img).contrast   ==  25
        assert displayCtx.getOpts(   img).gamma      == -0.5
        assert panel.sceneOpts.layout == 'vertical'
Пример #2
0
def _test_complex_image(panel, overlayList, displayCtx):

    with tempdir.tempdir():

        data =      np.random.randint(1, 255, (10, 10, 10)) + \
               1j * np.random.randint(1, 255, (10, 10, 10))
        data = np.array(data, dtype=np.complex64)
        img  = fslimage.Image(data, xform=np.eye(4))
        img.save('complex.nii')

        args = ['complex.nii', '-cmr', '25', '-g', '0.5']

        applycommandline.applyCommandLineArgs(
            overlayList,
            displayCtx,
            args)

        realYield(50)

        assert len(overlayList) == 2

        real, imag = overlayList

        # make sure CLI args were applied to both overlays
        assert displayCtx.getOpts(real).cmapResolution == 25
        assert displayCtx.getOpts(imag).cmapResolution == 25
        assert displayCtx.getOpts(real).gamma          == 0.5
        assert displayCtx.getOpts(imag).gamma          == 0.5

        assert np.all(real[:] == np.real(img[:]))
        assert np.all(imag[:] == np.imag(img[:]))
Пример #3
0
def _test_applyCommandLine_baseDir(panel, overlayList, displayCtx):

    displayCtx = panel.displayCtx

    with tempdir():
        basedir = op.join(*'sub/dir/to/test/base/dir/'.split('/'))
        os.makedirs(basedir)

        img = fslimage.Image(np.random.randint(1, 255, (20, 20, 20)))
        img.save(op.join(basedir, 'image.nii.gz'))

        applycommandline.applyCommandLineArgs(
            overlayList,
            panel.displayCtx, [
                '-lo', 'vertical', 'image.nii.gz', '-b', '75', '-c', '25',
                '-g', '-0.5'
            ],
            baseDir=basedir,
            panel=panel,
            blocking=True)

        # scene args are applied asynchronously
        waitUntilIdle()

        assert len(overlayList) == 1
        assert np.all(overlayList[0][:] == img[:])
        img = overlayList[0]
        assert displayCtx.getDisplay(img).brightness == 75
        assert displayCtx.getDisplay(img).contrast == 25
        assert displayCtx.getOpts(img).gamma == -0.5
        assert panel.sceneOpts.layout == 'vertical'
Пример #4
0
    def callback(line):

        # first arg is the directory that
        # the client was executed from,
        # which is used by applyCLIArgs
        # in case overlays were specified
        # with relative paths
        args = shlex.split(line)
        baseDir = args[0]
        args = args[1:]

        applycli.applyCommandLineArgs(overlayList,
                                      displayCtx,
                                      args,
                                      baseDir=baseDir)
Пример #5
0
    def MacOpenURL(self, url):
        """On OSX, support opening files via a ``fsleyes://`` url. """

        if self.__overlayList is None:
            return

        import fsleyes_widgets.utils.status as status
        import fsleyes.strings as strings
        import fsleyes.parseargs as parseargs
        import fsleyes.actions.applycommandline as applycommandline

        errTitle = strings.titles[self, 'openURLError']
        errMsg = strings.messages[self, 'openURLError']

        with status.reportIfError(errTitle, errMsg):
            applycommandline.applyCommandLineArgs(
                self.__overlayList, self.__displayCtx,
                parseargs.fsleyesUrlToArgs(url))
Пример #6
0
def setState(frame, state):
    """Set the state of FSLeyes from the given ``state`` string.

    .. warning:: This function will remove all view panels, and remove all
                 overlays, before loading the new state.

    :arg frame: The :class:`.FSLeyesFrame`
    :arg state: A FSLeyes state string, generated by :func:`getState`.
    """

    displayCtx = frame.displayCtx
    overlayList = frame.overlayList

    bits = state.split(SEP)
    layout = bits[0]
    cli = bits[1:]
    cli = [c.split(CLISEP) for c in cli]

    # First clear the current state
    frame.removeAllViewPanels()
    overlayList.clear()

    # Then load all new overlays
    applycommandline.applyCommandLineArgs(overlayList,
                                          displayCtx,
                                          cli[0],
                                          blocking=True)

    # After overlays have been loaded,
    # apply the new layout, and apply
    # view-specific overlay arguments.
    layouts.applyLayout(frame, 'state', layout)

    panels = [
        p for p in frame.viewPanels if isinstance(p, canvaspanel.CanvasPanel)
    ]
    for i, panel in enumerate(panels, 1):
        applycommandline.applyCommandLineArgs(overlayList,
                                              panel.displayCtx,
                                              cli[i],
                                              panel,
                                              loadOverlays=False)
Пример #7
0
def _test_applyCommandLine_sceneOnly(panel, overlayList, displayCtx):

    panel.sceneOpts.layout = 'horizontal'

    with tempdir():
        img = fslimage.Image(np.random.randint(1, 255, (20, 20, 20)))
        img.save('image.nii.gz')

        applycommandline.applyCommandLineArgs(
            overlayList,
            panel.displayCtx,
            ['-lo', 'vertical',
             'image.nii.gz', '-b', '75', '-c', '25', '-g', '-0.5'],
            panel=panel,
            applyOverlayArgs=False)

        # scene args are applied asynchronously
        waitUntilIdle()

        assert len(overlayList) == 0
        assert panel.sceneOpts.layout == 'vertical'
Пример #8
0
def _test_melodic_IC(frame, overlayList, displayCtx):

    loaded = [False]

    def onLoad(*_):
        loaded[0] = True

    with tempdir():

        mdir = op.abspath(create_melodic_dir())
        mean = op.join(mdir, 'mean.nii.gz')
        mic = op.join(mdir, 'melodic_IC.nii.gz')

        applyCommandLineArgs(overlayList,
                             displayCtx, ['-ad', mdir],
                             onLoad=onLoad)

        while not loaded[0]:
            realYield()

        assert len(overlayList) == 2
        assert overlayList[0].dataSource == mean
        assert overlayList[1].dataSource == mic
        assert displayCtx.getSelectedOverlay() is overlayList[1]