Ejemplo n.º 1
0
    def display(self):
        """ Display Electrode in Mayavi """
        f = mlab.figure(figure=mlab.gcf(),
                        bgcolor=(0,0,0),
                        size=(800,600))

        # Call Super Class
        Electrode.display(self)

        # Build electrode contacts
        c0 = find_new_point(self.sphere_center, self.direction, self.contact_height * 3 / 2)
        c1 = find_new_point(self.sphere_center, self.direction, self.contact_height * 7 / 2)
        c2 = find_new_point(self.sphere_center, self.direction, self.contact_height * 11 / 2)
        c3 = find_new_point(self.sphere_center, self.direction, self.contact_height * 15 / 2)

        contactCenters = array([c0, c1, c2, c3])
        contact = []
        for ii in xrange(4):
            topContact = find_new_point(contactCenters[ii,:], self.direction, self.contact_height / 2)
            bottomContact = find_new_point(contactCenters[ii,:], [-1 * ii for ii in self.direction], self.contact_height / 2)
            contact.append([bottomContact, topContact])

        contact_array = array(contact)
        x, y, z = contact_array.T

        activity_array = array([
            [self.contact0, self.contact0],
            [self.contact1, self.contact1],
            [self.contact2, self.contact2],
            [self.contact3, self.contact3]])
        src = pipeline.scalar_scatter(x.T, y.T, z.T, activity_array)
        src.mlab_source.dataset.lines = array([[0, 1], [2, 3], [4, 5], [6, 7]])
        src.name = 'Contacts'

        self.mlab_contacts = pipeline.tube(src,
                                                tube_radius=self.diameter * 1.03 / 2,
                                                tube_sides=40,
                                                name='DBS Contacts',)
        stripper = pipeline.stripper(self.mlab_contacts)
        surface = pipeline.surface(stripper)
        self.mlab_contacts.filter.capping = True
        surface.module_manager.scalar_lut_manager.lut_mode = 'RdBu'
        surface.module_manager.scalar_lut_manager.reverse_lut = True
        #surface.module_manager.scalar_lut_manager.use_default_range = False
        surface.module_manager.scalar_lut_manager.use_default_range = True
        surface.module_manager.scalar_lut_manager.data_range = array([-1., 1.])
    def display(self,
                func,
                segfunc=False,
                scaling=1,
                replace=True,
                clim=None,
                colormap='jet'):
        ''' Display current cell in mayavi
        '''
        #from neuron import h
        from numpy import array, vstack, float_
        from enthought.mayavi import mlab
        from enthought.mayavi.mlab import pipeline
        if replace:
            try:
                self.mlab_cell.parent.parent.parent.parent.parent.parent.remove(
                )
            except AttributeError:
                pass
        ### Turn off vtk warnings # # # # # # # # # # # # # # # # # # # # # # #
        from vtk import vtkObject
        o = vtkObject
        o.GetGlobalWarningDisplay()
        o.SetGlobalWarningDisplay(0)  # Turn it off.

        f = mlab.figure(figure=mlab.gcf(), bgcolor=(1, 1, 1), size=(800, 600))

        self.build_tree(func, segfunc)
        ##        xs = self.xyzdv[:,0]
        ##        ys = self.xyzdv[:,1]
        ##        zs = self.xyzdv[:,2]
        xs = float_(self.xyzdv[:, 0])
        ys = float_(self.xyzdv[:, 1])
        zs = float_(self.xyzdv[:, 2])

        # don't want scaling for soma segments
        ##        diams = self.xyzdv[:,3]
        diams = float_(self.xyzdv[:, 3])
        #nonsoma = (diams < 15) # non-somatic
        nonsoma = ones(shape(diams))
        diams += diams * nonsoma * (scaling - 1)
        #diams = self.xyzdv[:,3] * scaling # larger scaling makes neurons more visible
        ##        data = self.xyzdv[:,4]
        data = float_(self.xyzdv[:, 4])
        edges = self.connections

        # Display in mayavi
        pts = pipeline.scalar_scatter(xs, ys, zs, diams / 2.0, name=str(self))
        dataset = pts.mlab_source.dataset
        dataset.point_data.get_array(0).name = 'diameter'
        dataset.lines = vstack(edges)

        array_id = dataset.point_data.add_array(data.T.ravel())
        dataset.point_data.get_array(array_id).name = 'data'
        dataset.point_data.update()

        #### Create tube with diameter data
        src = pipeline.set_active_attribute(pts, point_scalars='diameter')
        stripper = pipeline.stripper(src)
        tube = pipeline.tube(stripper, tube_sides=8, tube_radius=1)
        tube.filter.capping = True
        tube.filter.use_default_normal = False
        tube.filter.vary_radius = 'vary_radius_by_absolute_scalar'
        #tube.filter.radius_factor = 90.0 # just for making movies
        src2 = pipeline.set_active_attribute(tube, point_scalars='data')

        lines = pipeline.surface(src2, colormap=colormap)
        if clim:
            from numpy import array
            lines.parent.scalar_lut_manager.use_default_range = False
            lines.parent.scalar_lut_manager.data_range = array(clim)
        self.mlab_cell = lines
Ejemplo n.º 3
0
    def display(self, var='v', scaling=1):
        ''' Display current cell in mayavi'''
        from neuron import h
        from numpy import array, vstack
        from enthought.mayavi import mlab
        from enthought.mayavi.mlab import pipeline
        try:
            self.mlab_cell.parent.parent.parent.parent.parent.parent.remove()
        except:
            pass
        f = mlab.figure(figure=mlab.gcf(),
                        bgcolor=(0,0,0),
                        size=(800,600))

        ### Turn off vtk warnings # # # # # # # # # # # # # # # # # # # # # # #
        from vtk import vtkObject
        o = vtkObject
        o.GetGlobalWarningDisplay()
        o.SetGlobalWarningDisplay(0) # Turn it off.

        self.var = var
        self.build_tree()
        xs = self.xyzdv[:,0]
        ys = self.xyzdv[:,1]
        zs = self.xyzdv[:,2]
        diams = self.xyzdv[:,3] * scaling # larger scaling makes neurons more visible
        data = self.xyzdv[:,4]
        edges = self.connections

        # Display in mayavi
        #Create Scalar scatter with diameter data and edges
        #pts = pipeline.scalar_scatter(xs, ys, zs, diams)

        # Display in mayavi
        pts = pipeline.scalar_scatter(xs, ys, zs, diams/2.0,
                                      name=self.name)
        dataset = pts.mlab_source.dataset
        dataset.point_data.get_array(0).name = 'diameter'
        dataset.lines = vstack(edges)

        array_id = dataset.point_data.add_array(data.T.ravel())
        dataset.point_data.get_array(array_id).name = 'data'
        dataset.point_data.update()

        #### Create tube with diameter data
        src = pipeline.set_active_attribute(pts,
                                            point_scalars='diameter')
        stripper = pipeline.stripper(src)
        tube = pipeline.tube(stripper,
                             tube_sides = 8,
                             tube_radius = 1)
        tube.filter.capping = True
        tube.filter.use_default_normal = False
        tube.filter.vary_radius = 'vary_radius_by_absolute_scalar'
        #tube.filter.radius_factor = 90.0 # just for making movies
        src2 = pipeline.set_active_attribute(tube, point_scalars='data')

        lines = pipeline.surface(src2)
        self.mlab_cell = lines

        if self.var is 'v':
            self.mlab_cell.module_manager.scalar_lut_manager.use_default_range=False
            self.mlab_cell.module_manager.scalar_lut_manager.data_range = array([-70, 0])
        mlab.view(azimuth = 133.48567814586244,
                  elevation = 72.824281412546014,
                  distance = 409.81131636077509,
                  focalpoint = array([-4502.1515611 ,  5031.21983918, -2293.53156414]))