コード例 #1
0
    @log_call
    def selected_data(self):
        if self.index_cursor in range(-self.n_data, self.n_data):
            debug("retriving data at index=%s" %self.index_cursor)
            return self.parent.request_data(Hdf5DataSpec, index=self.index_cursor)
        else:
            warning('Index cursor is set to wrong value.')
        return None

    def request_data(self, spec, **kwargs):
        if spec is Hdf5DataSpec:
            return self.selected_data
        return None


register_pipeline_node(SequentialHdf5SelectorNode)


class SequentialHdf5SelectorInspector(InspectorPage):
    """Sequential hdf5 selector inspector.
    """
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
        InspectorPage.__init__(self, *args, **kwargs)
        n_data_label = wx.StaticText(self, -1, 'Number of data')
        n_data = wx.TextCtrl(self, -1, "%s" %self.target.n_data, style=wx.TE_READONLY)
        cursor_label = wx.StaticText(self, -1, 'Current Index')
        cursor_spin = wx.SpinCtrl(self, -1, min=0, max=self.target.n_data, initial=self.target.index_cursor)
        self.Bind(wx.EVT_SPINCTRL, self.OnCursorSpin)
        data_label = wx.StaticText(self, -1, 'Selected data')
コード例 #2
0
            return None
        species_section = self.hdf5_data.get('/species', None)
        if species_section is None:
            return None
        return dict((id, dict(name=name, radius=radius, D=D))
                    for id, name, radius, D in species_section.value)

    @property
    def world_size(self):
        """Property getter for world size.
        """
        if self.data_section is None:
            return None
        attrs = self.data_section.attrs
        if bool(attrs) == False:
            return None
        return attrs.get('world_size', None)

    def request_data(spec, **kwargs):
        """Provides data for children.
        """
        if spec is ParticlesSpec:
            return self.particles
        elif spec is SpeciesTableSpec:
            return self.species_table
        elif spec is WorldSizeSpec:
            return self.world_size


register_pipeline_node(ParticleConstructorNode)
コード例 #3
0
        """
        # examine cache
        if self._particle_data:
            pass
        else: # self._particle_data is None
            uri = self.parent.request_data(UriSpec)
            if isinstance(uri, str):
                parsed = urlparse(uri)
                fullpath = parsed.netloc+parsed.path
                if os.path.exists(fullpath):
                    pass #TBDDDDDDD
        # self._particle_data is left None if something wrong in loading data.
        return self._particle_data
        
    def request_data(self, spec, **params):
        """Provides particle data.
        """
        if spec is ParticleDataSpec:
            return self.particle_data # this may be None if datasource is not valid.
        return None

# Finally, register node to registry.
register_pipeline_node(SimpleParticleLoaderNode)


# You may write doctests, which runs on executing this module.
if __name__=='__main__':
    # TBD
    from doctest import testmod, ELLIPSIS
    testmod(optionflags=ELLIPSIS)
コード例 #4
0
                warning('Failed to open %s: %s', fullpath, str(e))
                pass

        # self._particle_space is left None if something wrong in loading data.
        return self._particle_space

    @log_call
    def request_data(self, spec, **kwargs):
        """Provides particle data.
        """
        if spec == NumberOfItemsSpec:
            debug('Serving NumberOfItemsSpec')
            if self.fetch_particle_space(**kwargs) is None:
                return 0
            else:
                return 1
        elif spec == ParticleSpaceSpec:
            debug('Serving ParticleSpaceSpec')
            # this may be None if datasource is not valid.
            return self.fetch_particle_space(**kwargs) 
        return None
            

register_pipeline_node(ParticleCSVLoaderNode)


if __name__=='__main__':
    # TBD
    from doctest import testmod, ELLIPSIS
    testmod(optionflags = ELLIPSIS)
コード例 #5
0
                return
        # otherwise: reset node cursor
        self.node_cursor = '/'
        debug('%s' % self.hdf5_data)

    @property
    @log_call
    def hdf5_data(self):
        """Property getter for had5_data
        """
        if self.parent:
            return self.parent.request_data(Hdf5DataSpec)
        debug('No parent.')


register_pipeline_node(SimpleHdf5TreeVisualizerNode)


class Hdf5TreeCtrl(TreeCtrlPlus):
    """Tree ctrl for simple hdf5 tree visualizer.
    """
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
        style = kwargs.pop(
            'style',
            0) | wx.TR_NO_BUTTONS | wx.TR_HAS_BUTTONS | wx.SUNKEN_BORDER
        kwargs['style'] = style
        self.selection_callback = kwargs.pop('selection_callback', None)
        TreeCtrlPlus.__init__(self, *args, **kwargs)
        self._hdf5_file = None
コード例 #6
0
            if self.hdf5_data.get(self.node_cursor):
                return
        # otherwise: reset node cursor
        self.node_cursor = '/'
        debug('%s' %self.hdf5_data)

    @property
    @log_call
    def hdf5_data(self):
        """Property getter for had5_data
        """
        if self.parent:
            return self.parent.request_data(Hdf5DataSpec)
        debug('No parent.')
            
register_pipeline_node(SimpleHdf5TreeVisualizerNode)


class Hdf5TreeCtrl(TreeCtrlPlus):
    """Tree ctrl for simple hdf5 tree visualizer.
    """
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
        style = kwargs.pop('style', 0)|wx.TR_NO_BUTTONS|wx.TR_HAS_BUTTONS|wx.SUNKEN_BORDER
        kwargs['style'] = style
        self.selection_callback = kwargs.pop('selection_callback', None)
        TreeCtrlPlus.__init__(self, *args, **kwargs)
        self._hdf5_file = None

    def get_hdf5_file(self):
コード例 #7
0
            if particle_space is not None:
                self.sid_list = particle_space.species

    @log_call
    def request_data(self, spec, **kwargs):
        """Provides particle data.
        """
        if spec == NumberOfItemsSpec:
            debug('Serving NumberOfItemsSpec')
            return self.parent.request_data(NumberOfItemsSpec, **kwargs)
        elif spec == ParticleSpaceSpec:
            debug('Serving ParticleSpaceSpec')
            return self.fetch_particle_space(**kwargs)
        return None

register_pipeline_node(ParticleSpaceFilterNode)

class ParticleSpaceFilterInspector(InspectorPage):
    """Inspector page for ParticleSpaceFilter.
    """
    # PROP_NAMES = ['filename', 'mode', 'driver', 'libver', 'userblock_size',
    #               'name', 'id', 'ref', 'attrs']
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
        InspectorPage.__init__(self, *args, **kwargs)

        widgets = []

        self.max_num_entry = wx.TextCtrl(
            self, wx.ID_ANY, "10000", style=wx.TE_PROCESS_ENTER)
コード例 #8
0
                warning('Invalid timestamp/particles')
            species_section = chunk.get('/species')
            if species_section == None:
                warning('No species table for index=%d' % (i))
                continue
            # iterate for species...
            for id, name, radius, dvalue in species_section:
                # count number of particles
                n_particles = sum(particles['species_id'] == id)
                bin_ = populations.setdefault(name, [])
                bin_.append((ts, n_particles))
        print populations
        return populations


register_pipeline_node(TimecourseVisualizerNode)


class TimecourseVisualizer(VisualizerPage):
    """Simple timecourse visualizer.
    """
    def __init__(self, *args, **kwargs):
        """
        """
        VisualizerPage.__init__(self, *args, **kwargs)
        figure = Figure()
        figure.add_subplot('111')
        canvas = FigureCanvasWxAgg(self, -1, figure)
        self.sizer.Add(canvas, 1, wx.ALL | wx.EXPAND, 5)
        self.figure = figure
        self.canvas = canvas
コード例 #9
0
            if uri is None:
                return
            debug('hdf5 data uri=%s' % uri)
            try:
                parsed = urlparse(uri)
                fullpath = parsed.netloc + parsed.path
                if os.path.exists(fullpath):
                    self._hdf5_data = File(fullpath)
            except IOError, e:
                warning('Failed to open %s: %s', fullpath, str(e))
                pass
        # self._hdf5_data is left None if something wrong in loading data.
        return self._hdf5_data

    @log_call
    def request_data(self, spec, **kwargs):
        """Provides particle data.
        """
        if spec == Hdf5DataSpec:
            debug('Serving Hdf5DataSpec')
            return self.hdf5_data  # this may be None if datasource is not valid.
        return None


register_pipeline_node(SimpleHdf5LoaderNode)

if __name__ == '__main__':
    # TBD
    from doctest import testmod, ELLIPSIS
    testmod(optionflags=ELLIPSIS)
コード例 #10
0
        elif spec == Hdf5DataSpec:
            index = kwargs.get('index', 0)
            data = self.cache.get(index, None)
            if data is None:
                path = self.bundle.get_path_at(index)
                if not (path is None):
                    try:
                        data = File(path, mode='r')
                        self.cache[index] = data
                    except IOError:
                        pass
            return data
        return None


register_pipeline_node(Hdf5BundleLoaderNode)


class Hdf5BundleLoaderInspector(InspectorPage):
    """Sequential hdf5 selector inspector.
    """
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
        InspectorPage.__init__(self, *args, **kwargs)
        glob_pattern_label = wx.StaticText(self, -1, 'Glob pattern')
        glob_pattern = wx.TextCtrl(self, -1, "%s" % self.target.glob_pattern)
        self.Bind(wx.EVT_TEXT, self.OnGlobPatternText, glob_pattern)
        self.sizer.Add(glob_pattern_label, 0, wx.ALL | wx.EXPAND, 5)
        self.sizer.Add(glob_pattern, 0, wx.ALL | wx.EXPAND, 5)
        self.glob_pattern = glob_pattern
コード例 #11
0
    def selected_data(self):
        if self.index_cursor in range(-self.n_data, self.n_data):
            debug("retriving data at index=%s" % self.index_cursor)
            return self.parent.request_data(Hdf5DataSpec,
                                            index=self.index_cursor)
        else:
            warning('Index cursor is set to wrong value.')
        return None

    def request_data(self, spec, **kwargs):
        if spec is Hdf5DataSpec:
            return self.selected_data
        return None


register_pipeline_node(SequentialHdf5SelectorNode)


class SequentialHdf5SelectorInspector(InspectorPage):
    """Sequential hdf5 selector inspector.
    """
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
        InspectorPage.__init__(self, *args, **kwargs)
        n_data_label = wx.StaticText(self, -1, 'Number of data')
        n_data = wx.TextCtrl(self,
                             -1,
                             "%s" % self.target.n_data,
                             style=wx.TE_READONLY)
        cursor_label = wx.StaticText(self, -1, 'Current Index')
コード例 #12
0
                return
            debug('hdf5 data uri=%s' % uri)
            try:
                parsed = urlparse(uri)
                fullpath = parsed.netloc+parsed.path
                if os.path.exists(fullpath):
                    self._hdf5_data = File(fullpath)
            except IOError, e:
                warning('Failed to open %s: %s', fullpath, str(e))
                pass
        # self._hdf5_data is left None if something wrong in loading data.
        return self._hdf5_data

    @log_call
    def request_data(self, spec, **kwargs):
        """Provides particle data.
        """
        if spec==Hdf5DataSpec:
            debug('Serving Hdf5DataSpec')
            return self.hdf5_data # this may be None if datasource is not valid.
        return None
            

register_pipeline_node(SimpleHdf5LoaderNode)


if __name__=='__main__':
    # TBD
    from doctest import testmod, ELLIPSIS
    testmod(optionflags=ELLIPSIS)
コード例 #13
0
            except IOError, e:
                warning('Failed to open %s: %s', fullpath, str(e))
                pass

        # self._particle_space is left None if something wrong in loading data.
        return self._particle_space

    @log_call
    def request_data(self, spec, **kwargs):
        """Provides particle data.
        """
        if spec == NumberOfItemsSpec:
            debug('Serving NumberOfItemsSpec')
            if self.fetch_particle_space(**kwargs) is None:
                return 0
            else:
                return 1
        elif spec == ParticleSpaceSpec:
            debug('Serving ParticleSpaceSpec')
            # this may be None if datasource is not valid.
            return self.fetch_particle_space(**kwargs)
        return None


register_pipeline_node(ParticleCSVLoaderNode)

if __name__ == '__main__':
    # TBD
    from doctest import testmod, ELLIPSIS
    testmod(optionflags=ELLIPSIS)
コード例 #14
0
                pass

        # self._particle_space is left None if something wrong in loading data.
        return self._particle_space

    @log_call
    def request_data(self, spec, **kwargs):
        """Provides particle data.
        """
        if spec == NumberOfItemsSpec:
            debug('Serving NumberOfItemsSpec')
            ps = self.fetch_particle_space(**kwargs)
            if ps is None:
                return 0
            else:
                return ps.getNumberOfItems()
        elif spec == ParticleSpaceSpec:
            debug('Serving ParticleSpaceSpec')
            # this may be None if datasource is not valid.
            ps = self.fetch_particle_space(**kwargs)
            return ps
        return None


register_pipeline_node(ParticleSpatiocyteLoaderNode)

if __name__ == '__main__':
    # TBD
    from doctest import testmod, ELLIPSIS
    testmod(optionflags=ELLIPSIS)
コード例 #15
0
                warning("Invalid timestamp/particles")
            species_section = chunk.get("/species")
            if species_section == None:
                warning("No species table for index=%d" % (i))
                continue
            # iterate for species...
            for id, name, radius, dvalue in species_section:
                # count number of particles
                n_particles = sum(particles["species_id"] == id)
                bin_ = populations.setdefault(name, [])
                bin_.append((ts, n_particles))
        print populations
        return populations


register_pipeline_node(TimecourseVisualizerNode)


class TimecourseVisualizer(VisualizerPage):
    """Simple timecourse visualizer.
    """

    def __init__(self, *args, **kwargs):
        """
        """
        VisualizerPage.__init__(self, *args, **kwargs)
        figure = Figure()
        figure.add_subplot("111")
        canvas = FigureCanvasWxAgg(self, -1, figure)
        self.sizer.Add(canvas, 1, wx.ALL | wx.EXPAND, 5)
        self.figure = figure
コード例 #16
0
        species_section = self.hdf5_data.get('/species', None)
        if species_section is None:
            return None
        return dict(
            (id, dict(name=name, radius=radius, D=D))
            for id, name, radius, D in species_section.value)

    @property
    def world_size(self):
        """Property getter for world size.
        """
        if self.data_section is None:
            return None
        attrs = self.data_section.attrs
        if bool(attrs)==False:
            return None
        return attrs.get('world_size', None)

    def request_data(spec, **kwargs):
        """Provides data for children.
        """
        if spec is ParticlesSpec:
            return self.particles
        elif spec is SpeciesTableSpec:
            return self.species_table
        elif spec is WorldSizeSpec:
            return self.world_size


register_pipeline_node(ParticleConstructorNode)
コード例 #17
0
        # self._particle_space is left None if something wrong in loading data.
        return self._particle_space

    @log_call
    def request_data(self, spec, **kwargs):
        """Provides particle data.
        """
        if spec == NumberOfItemsSpec:
            debug('Serving NumberOfItemsSpec')
            ps = self.fetch_particle_space(**kwargs)
            if ps is None:
                return 0
            else:
                return ps.getNumberOfItems()
        elif spec == ParticleSpaceSpec:
            debug('Serving ParticleSpaceSpec')
            # this may be None if datasource is not valid.
            ps = self.fetch_particle_space(**kwargs)
            return ps
        return None


register_pipeline_node(ParticleSpatiocyteLoaderNode)


if __name__=='__main__':
    # TBD
    from doctest import testmod, ELLIPSIS
    testmod(optionflags = ELLIPSIS)
コード例 #18
0
        """
        # examine cache
        if self._particle_data:
            pass
        else:  # self._particle_data is None
            uri = self.parent.request_data(UriSpec)
            if isinstance(uri, str):
                parsed = urlparse(uri)
                fullpath = parsed.netloc + parsed.path
                if os.path.exists(fullpath):
                    pass  #TBDDDDDDD
        # self._particle_data is left None if something wrong in loading data.
        return self._particle_data

    def request_data(self, spec, **params):
        """Provides particle data.
        """
        if spec is ParticleDataSpec:
            return self.particle_data  # this may be None if datasource is not valid.
        return None


# Finally, register node to registry.
register_pipeline_node(SimpleParticleLoaderNode)

# You may write doctests, which runs on executing this module.
if __name__ == '__main__':
    # TBD
    from doctest import testmod, ELLIPSIS
    testmod(optionflags=ELLIPSIS)
コード例 #19
0
        return ps

    @log_call
    def update_list(self, **kwargs):
        ps = self.parent.request_data(ParticleSpaceSpec, **kwargs)
        if ps is None:
            return

        if self.sid_color_map is None:
            self.sid_color_map = {}

        for sp in ps.species:
            if sp not in self.sid_color_map.keys():
                self.sid_color_map[sp] = get_new_color(len(self.sid_color_map))

register_pipeline_node(ParticleSpaceVisualizerNode)

class ParticleSpaceVisualizer(Vtk3dVisualizerPage):

    @log_call
    def update(self):
        self.render()

register_visualizer_page('ParticleSpaceVisualizerNode', ParticleSpaceVisualizer)

class ParticleSpaceVisualizerInspector(InspectorPage):
    """Inspector page for ParticleSpaceVisualizer.
    """
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
コード例 #20
0
                self.sid_list = particle_space.species

    @log_call
    def request_data(self, spec, **kwargs):
        """Provides particle data.
        """
        if spec == NumberOfItemsSpec:
            debug('Serving NumberOfItemsSpec')
            return self.parent.request_data(NumberOfItemsSpec, **kwargs)
        elif spec == ParticleSpaceSpec:
            debug('Serving ParticleSpaceSpec')
            return self.fetch_particle_space(**kwargs)
        return None


register_pipeline_node(ParticleSpaceFilterNode)


class ParticleSpaceFilterInspector(InspectorPage):
    """Inspector page for ParticleSpaceFilter.
    """

    # PROP_NAMES = ['filename', 'mode', 'driver', 'libver', 'userblock_size',
    #               'name', 'id', 'ref', 'attrs']
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
        InspectorPage.__init__(self, *args, **kwargs)

        widgets = []
コード例 #21
0
        self.renderer.GetActiveCamera().ParallelProjectionOn()
        self.particles_visual = ParticlesVisual(renderer=self.renderer,
                                                name='particles')

    @log_call
    def internal_update(self):
        """Reset cached particles
        """
        self.particles_visual.update(
            dict(world_size=self.parent.world_size,
                 species_table=self.parent.species_table,
                 particles=self.parent.particles))
        self.particles_visual.enable()


register_pipeline_node(ParticleVisualizerNode)


class ParticleVisualizer(Vtk3dVisualizerPage):
    """Visualizer.
    """
    @log_call
    def update(self):
        """Updates content of the rendering window.

        TODO: this method call should be handled in superclass...
        """
        self.render()


register_visualizer_page('ParticleVisualizerNode', ParticleVisualizer)
コード例 #22
0
        elif spec==Hdf5DataSpec:
            index = kwargs.get('index', 0)
            data = self.cache.get(index, None)
            if data is None:
                path = self.bundle.get_path_at(index)
                if not(path is None):
                    try:
                        data = File(path, mode='r')
                        self.cache[index] = data
                    except IOError:
                        pass
            return data
        return None


register_pipeline_node(Hdf5BundleLoaderNode)


class Hdf5BundleLoaderInspector(InspectorPage):
    """Sequential hdf5 selector inspector.
    """
    def __init__(self, *args, **kwargs):
        """Initializer.
        """
        InspectorPage.__init__(self, *args, **kwargs)
        glob_pattern_label = wx.StaticText(self, -1, 'Glob pattern')
        glob_pattern = wx.TextCtrl(self, -1, "%s" %self.target.glob_pattern)
        self.Bind(wx.EVT_TEXT, self.OnGlobPatternText, glob_pattern)
        self.sizer.Add(glob_pattern_label, 0, wx.ALL|wx.EXPAND, 5)
        self.sizer.Add(glob_pattern, 0, wx.ALL|wx.EXPAND, 5)
        self.glob_pattern = glob_pattern