def display_folds(folds_file, labels, weights, white_file=None, interactive=True, snap=False, animate=False, outdir=None, name="folds", actor_ang=(0., 0., 0.)): """ Display the folds computed by morphologist. The scene supports one feature activated via the keystroke: * 'p': Pick the data at the current mouse point. This will pop-up a window with information on the current pick (ie. the fold name). Parameters ---------- folds_file: str( mandatory) the folds '.gii' file. labels: dict (mandatory) a mapping between a mesh id and its label. weights: dict (mandatory) a mapping between a mesh label and its wheight in [0, 1]. white_file: str (optional, default None) if specified the white surface will be displayed. interactive: bool (optional, default True) if True display the renderer. snap: bool (optional, default False) if True create a snap of the scene: need a valid outdir. animate: bool (optional, default False) if True create a gif 360 degrees animation of the scene: need a valid outdir. outdir: str (optional, default None) an existing directory. name: str (optional, default 'folds') the basename of the generated files. actor_ang: 3-uplet (optinal, default (0, 0, 0)) the actors x, y, z position (in degrees). """ # Load the folds file image = gio.read(folds_file) nb_of_surfs = len(image.darrays) if nb_of_surfs % 2 != 0: raise ValueError("Need an odd number of arrays (vertices, triangles).") # Create an actor for each fold ren = pvtk.ren() ren.SetBackground(1, 1, 1) for vertindex in range(0, nb_of_surfs, 2): vectices = image.darrays[vertindex].data triangles = image.darrays[vertindex + 1].data labelindex = image.darrays[vertindex].get_metadata()["Timestep"] if labelindex != image.darrays[vertindex + 1].get_metadata()[ "Timestep"]: raise ValueError("Gifti arrays '{0}' and '{1}' do not share the " "same label.".format(vertindex, vertindex + 1)) labelindex = int(labelindex) if labelindex in labels: label = labels[labelindex] if label in weights: weight = weights[label] * 256. else: weight = 0 else: label = "NC" weight = 0 surf = TriSurface(vectices, triangles, labels=None) actor = pvtk.surface(surf.vertices, surf.triangles, surf.labels + weight) actor.label = label actor.RotateX(actor_ang[0]) actor.RotateY(actor_ang[1]) actor.RotateZ(actor_ang[2]) pvtk.add(ren, actor) # Add the white surface if specified if white_file is not None: image = gio.read(white_file) nb_of_surfs = len(image.darrays) if nb_of_surfs != 2: raise ValueError("'{0}' does not a contain a valid white " "mesh.".format(white_file)) vectices = image.darrays[0].data triangles = image.darrays[1].data surf = TriSurface(vectices, triangles, labels=None) actor = pvtk.surface(surf.vertices, surf.triangles, surf.labels, opacity=1, set_lut=False) actor.label = "white" actor.RotateX(actor_ang[0]) actor.RotateY(actor_ang[1]) actor.RotateZ(actor_ang[2]) pvtk.add(ren, actor) # Show the renderer if interactive: actor = pvtk.text("!!!!", font_size=15, position=(10, 10), is_visible=False) pvtk.add(ren, actor) obs = LabelsOnPick(actor, static_position=True, to_keep_actors=["white"]) pvtk.show(ren, title="morphologist folds", observers=[obs]) # Create a snap if snap: if not os.path.isdir(outdir): raise ValueError("'{0}' is not a valid directory.".format(outdir)) pvtk.record(ren, outdir, name, n_frames=1) # Create an animation if animate: if not os.path.isdir(outdir): raise ValueError("'{0}' is not a valid directory.".format(outdir)) pvtk.record(ren, outdir, name, n_frames=36, az_ang=10, animate=True, delay=25)
track_filtered_file, as_generator=False, points_space="voxel") fibers = [track_item[0] for track_item in trackvis_fibers] if use_vtk: ren = pvtk.ren() colors = line_colors(fibers) actor = pvtk.tubes(fibers, colors) actor.RotateX(actor_ang[0]) actor.RotateY(actor_ang[1]) actor.RotateZ(actor_ang[2]) pvtk.add(ren, actor) ren.SetBackground(1, 1, 1) pvtk.record(ren, qcdir, "fibers", az_ang=45, n_frames=2) pvtk.record(ren, qcdir, "fibers", n_frames=36, az_ang=10, animate=True, delay=25) pvtk.show(ren) pvtk.clear(ren) """ Fiber clustering ---------------- Based on an agglomerative clustering, and a geometric distance. """ clustering_outdir = os.path.join(outdir, "clustering") cluster_file = os.path.join(clustering_outdir, "clusters.json") if not os.path.isdir(clustering_outdir): os.mkdir(clustering_outdir) if not os.path.isfile(cluster_file):
def display_folds(folds_file, labels, weights, white_file=None, interactive=True, snap=False, animate=False, outdir=None, name="folds", actor_ang=(0., 0., 0.)): """ Display the folds computed by morphologist. The scene supports one feature activated via the keystroke: * 'p': Pick the data at the current mouse point. This will pop-up a window with information on the current pick (ie. the fold name). Parameters ---------- folds_file: str( mandatory) the folds '.gii' file. labels: dict (mandatory) a mapping between a mesh id and its label. weights: dict (mandatory) a mapping between a mesh label and its wheight in [0, 1]. white_file: str (optional, default None) if specified the white surface will be displayed. interactive: bool (optional, default True) if True display the renderer. snap: bool (optional, default False) if True create a snap of the scene: need a valid outdir. animate: bool (optional, default False) if True create a gif 360 degrees animation of the scene: need a valid outdir. outdir: str (optional, default None) an existing directory. name: str (optional, default 'folds') the basename of the generated files. actor_ang: 3-uplet (optinal, default (0, 0, 0)) the actors x, y, z position (in degrees). """ # Load the folds file image = gio.read(folds_file) nb_of_surfs = len(image.darrays) if nb_of_surfs % 2 != 0: raise ValueError("Need an odd number of arrays (vertices, triangles).") # Create an actor for each fold ren = pvtk.ren() ren.SetBackground(1, 1, 1) for vertindex in range(0, nb_of_surfs, 2): vectices = image.darrays[vertindex].data triangles = image.darrays[vertindex + 1].data labelindex = image.darrays[vertindex].get_metadata()["Timestep"] if labelindex != image.darrays[vertindex + 1].get_metadata()["Timestep"]: raise ValueError("Gifti arrays '{0}' and '{1}' do not share the " "same label.".format(vertindex, vertindex + 1)) labelindex = int(labelindex) if labelindex in labels: label = labels[labelindex] if label in weights: weight = weights[label] * 256. else: weight = 0 else: label = "NC" weight = 0 surf = TriSurface(vectices, triangles, labels=None) actor = pvtk.surface(surf.vertices, surf.triangles, surf.labels + weight) actor.label = label actor.RotateX(actor_ang[0]) actor.RotateY(actor_ang[1]) actor.RotateZ(actor_ang[2]) pvtk.add(ren, actor) # Add the white surface if specified if white_file is not None: image = gio.read(white_file) nb_of_surfs = len(image.darrays) if nb_of_surfs != 2: raise ValueError("'{0}' does not a contain a valid white " "mesh.".format(white_file)) vectices = image.darrays[0].data triangles = image.darrays[1].data surf = TriSurface(vectices, triangles, labels=None) actor = pvtk.surface(surf.vertices, surf.triangles, surf.labels, opacity=1, set_lut=False) actor.label = "white" actor.RotateX(actor_ang[0]) actor.RotateY(actor_ang[1]) actor.RotateZ(actor_ang[2]) pvtk.add(ren, actor) # Show the renderer if interactive: actor = pvtk.text("!!!!", font_size=15, position=(10, 10), is_visible=False) pvtk.add(ren, actor) obs = LabelsOnPick(actor, static_position=True, to_keep_actors=["white"]) pvtk.show(ren, title="morphologist folds", observers=[obs]) # Create a snap if snap: if not os.path.isdir(outdir): raise ValueError("'{0}' is not a valid directory.".format(outdir)) pvtk.record(ren, outdir, name, n_frames=1) # Create an animation if animate: if not os.path.isdir(outdir): raise ValueError("'{0}' is not a valid directory.".format(outdir)) pvtk.record(ren, outdir, name, n_frames=36, az_ang=10, animate=True, delay=25)
bvecfile = os.path.join(output_directory, "dwi.bvec") bvalfile = os.path.join(output_directory, "dwi.bval") dwi_image.to_filename(dfile) numpy.savetxt(bvecfile, g) numpy.savetxt(bvalfile, b.T) gdtifile = generalized_tensor_estimation(dfile, bvalfile, bvecfile, order, maskfile=None, number_of_workers=1, odf=False, output_directory=output_directory) dti_params = nibabel.load(gdtifile).get_data() print "Tensor:" for index, params in enumerate(dti_params[0, 0]): print "nnls:", index print_tensor(params, order) for tensor in dti6to33(dti_params)[0, 0]: vals, vecs = numpy.linalg.eigh(tensor) print vals print vecs # Plot ren = pvtk.ren() for index, params in enumerate(dti_params[0, 0]): actor = pvtk.tensor(params, order, position=(index, 0, 0)) pvtk.add(ren, actor) pvtk.show(ren)