def apply_transform(self, xf): # Apply transform to models. from chimera import viewer, openModels as om, Point oslist = list(set([m.openState for m in om.list()])) # Activate inactive models in fly mode or all models mode. ialist = [] if self.fly_mode or self.all_models: ialist = [os for os in set([m.openState for m in om.list()]) if not os.active] for os in ialist: os.active = True if self.fly_mode: m, c = om.cofrMethod, om.cofr om.cofrMethod = om.Fixed view = 0 # TODO: use center between eyes for stereo e = Point(*viewer.camera.eyePos(view)) om.cofr = e # Rotate about eye position om.applyXform(xf.inverse()) om.cofr = c # Restore center of rotation om.cofrMethod = m else: om.applyXform(xf) for os in ialist: os.active = False
def apply_transform(self, xf): # Apply transform to models. from chimera import viewer, openModels as om, Point oslist = list(set([m.openState for m in om.list()])) # Activate inactive models in fly mode or all models mode. ialist = [] if self.fly_mode or self.all_models: ialist = [ os for os in set([m.openState for m in om.list()]) if not os.active ] for os in ialist: os.active = True if self.fly_mode: m, c = om.cofrMethod, om.cofr om.cofrMethod = om.Fixed view = 0 # TODO: use center between eyes for stereo e = Point(*viewer.camera.eyePos(view)) om.cofr = e # Rotate about eye position om.applyXform(xf.inverse()) om.cofr = c # Restore center of rotation om.cofrMethod = m else: om.applyXform(xf) for os in ialist: os.active = False
def activateAllCmd(): """Activate all models. Restore previous activities if called again.""" global _prevActivities if _prevActivities: for m in openModels.list(): if _prevActivities.has_key(m.openState): m.openState.active = _prevActivities[ m.openState] _prevActivities = None if _mp: if 'activate all' in _mp.frequentButtons: actionButtons = _mp.freqActionButtons else: actionButtons = _mp.infreqActionButtons actionButtons.component('activate all').config( text='activate all') else: _prevActivities = {} for m in openModels.list(): if _prevActivities.has_key(m.openState): continue _prevActivities[m.openState] = m.openState.active m.openState.active = 1 if _mp: if 'activate all' in _mp.frequentButtons: actionButtons = _mp.freqActionButtons else: actionButtons = _mp.infreqActionButtons actionButtons.component('activate all').config( text='restore activities')
def clip_selected_models(): 'Toggle per-model clipping for selected models' from chimera import selection, openModels mlist = [m for m in selection.currentGraphs() if m.display] if len(mlist) == 0: mlist = [m for m in openModels.list() if m.display and m.useClipPlane] if len(mlist) == 0: mlist = [m for m in openModels.list() if m.display] if len(mlist) == 0: return from chimera import tkgui for m in mlist: if m.useClipPlane: m.useClipPlane = False elif m.bbox()[0]: tkgui.setClipModel(m) # Set initial clip plane placement. # Turn off clip adjust mouse mode. cm = tkgui.getClipModel() if cm is None or not cm.useClipPlane: from chimera import dialogs import ModelClip cd = dialogs.find(ModelClip.ClipDialog.name) if cd: cd.stopMouseClip()
def activateAllCmd(): """Activate all models. Restore previous activities if called again.""" global _prevActivities if _prevActivities: for m in openModels.list(): if _prevActivities.has_key(m.openState): m.openState.active = _prevActivities[m.openState] _prevActivities = None if _mp: if 'activate all' in _mp.frequentButtons: actionButtons = _mp.freqActionButtons else: actionButtons = _mp.infreqActionButtons actionButtons.component('activate all').config(text='activate all') else: _prevActivities = {} for m in openModels.list(): if _prevActivities.has_key(m.openState): continue _prevActivities[m.openState] = m.openState.active m.openState.active = 1 if _mp: if 'activate all' in _mp.frequentButtons: actionButtons = _mp.freqActionButtons else: actionButtons = _mp.infreqActionButtons actionButtons.component('activate all').config( text='restore activities')
def write_grasp_surface_file(): from chimera import openModels from _surface import SurfaceModel mlist = openModels.list(modelTypes = [SurfaceModel]) if len(mlist) == 0: from chimera import replyobj replyobj.status('No displayed surfaces') return varray, tarray, narray = surface_geometry(mlist) if len(tarray) == 0: from chimera import replyobj replyobj.status('No displayed triangles') return def save_geometry(okay, d, varray=varray, tarray=tarray, narray=narray): if not okay: return # User canceled action. path = d.getPaths()[0] f = grasp_surface_file(varray, tarray, narray) file = open(path, 'wb') file.write(f) file.close() from OpenSave import SaveModeless SaveModeless(title = "Save Surface", filters = [('GRASP surface', ['*.srf'], '.srf')], command = save_geometry)
def setModelFieldOnly(models, field, onVal=1, offVal=0, openState=0): # turn off first, then on, so that models not in the models list # that nonetheless have shared openStates get the 'on' value for m in openModels.list(): _setAttr(m, field, offVal, openState) for m in models: _setAttr(m, field, onVal, openState)
def save_surface_state(file): slist = [] from chimera import openModels as om from _surface import SurfaceModel for s in om.list(modelTypes = [SurfaceModel]): plist = [p for p in s.surfacePieces if hasattr(p, 'save_in_session') and p.save_in_session] if plist: slist.append((s,plist)) if len(slist) == 0: return smslist = [] for s,plist in slist: sms = Surface_Model_State() sms.state_from_surface_model(s,plist) smslist.append(sms) from SessionUtil import objecttree t = objecttree.instance_tree_to_basic_tree(smslist) file.write('\n') file.write('def restore_surfaces():\n') file.write(' surface_state = \\\n') objecttree.write_basic_tree(t, file, indent = ' ') file.write('\n') file.write(' from Surface import session\n') file.write(' session.restore_surface_state(surface_state)\n') file.write('\n') file.write('try:\n') file.write(' restore_surfaces()\n') file.write('except:\n') file.write(" reportRestoreError('Error restoring surfaces')\n") file.write('\n')
def color_sphere(radius=1, pattern='circle'): from chimera import openModels as om from _surface import SurfaceModel cs = [ m for m in om.list(modelTypes=[SurfaceModel]) if m.name == 'Direction colors' ] if cs: p = cs[0].surfacePieces[0] else: from Shape.shapecmd import sphere_shape p = sphere_shape(radius=radius, modelName='Direction colors') v, t = p.geometry #vmask = [1 if z >= 0 else 0 for x,y,z in v] #p.triangleAndEdgeMask = None #p.setTriangleMaskFromVertexMask(vmask) from numpy import empty, float32 c = empty((p.vertexCount, 4), float32) for i, axis in enumerate(v): c[i, :] = direction_color(axis, pattern) p.vertexColors = c p.useLighting = False # f = s.addPiece(c[:,:3], t, (0.5,0.5,0.5,1)) # f.displayStyle = f.Mesh # f.setTriangleMaskFromVertexMask(vmask) return p
def cal_SASA(input_pdb, output_prefix): print "pdb inputs = " + input_pdb print "output prefix = " + output_prefix model = openModels.open(input_pdb) runCommand("surf :all") out = open(output_prefix + "sasa.txt", "w") x = '---------------------------------------------------------------------------------\n' print "list " + str(list(model)) for m in openModels.list(modelTypes=[Molecule]): msas = 0 for r in m.residues: try: sas = r.areaSAS except AttributeError: continue msas = msas + sas out.write('%s,%f\n' % (r, sas)) out.write(x) out.write('%s,%f\n' % (m, msas)) out.write('\n') out.close() runCommand("del") print msas return msas
def write_grasp_surface_file(): from chimera import openModels from _surface import SurfaceModel mlist = openModels.list(modelTypes=[SurfaceModel]) if len(mlist) == 0: from chimera import replyobj replyobj.status('No displayed surfaces') return varray, tarray, narray = surface_geometry(mlist) if len(tarray) == 0: from chimera import replyobj replyobj.status('No displayed triangles') return def save_geometry(okay, d, varray=varray, tarray=tarray, narray=narray): if not okay: return # User canceled action. path = d.getPaths()[0] f = grasp_surface_file(varray, tarray, narray) file = open(path, 'wb') file.write(f) file.close() from OpenSave import SaveModeless SaveModeless(title="Save Surface", filters=[('GRASP surface', ['*.srf'], '.srf')], command=save_geometry)
def parse_surface_id(sid, cmdname): if sid[:1] == '#': sid = sid[1:] fields = sid.split('.') if len(fields) == 1: fields.append('0') try: id, subid = int(fields[0]), int(fields[1]) except ValueError: from Midas.midas_text import error error('%s: Bad model specifier %s' % (cmdname, sid)) return None from chimera import openModels from _surface import SurfaceModel mlist = openModels.list(id = id, subid = subid, modelTypes = [SurfaceModel]) if len(mlist) == 0: from Midas.midas_text import error error('%s: No surface with id %d.%d' % (cmdname, id, subid)) return None return mlist[0]
def fit_object_models(): from VolumeViewer import Volume from chimera import openModels as om, Molecule mlist = om.list(modelTypes=[Molecule, Volume]) folist = ['selected atoms'] + mlist return folist
def close_current_models(self): self.selected_neurons = OrderedDict([]) self.colors = [] current_models = set(openModels.list()) models_to_close = current_models - self.init_models openModels.close(models_to_close) update.checkForChanges() # to avoid memory leaks (see: http://www.cgl.ucsf.edu/chimera/docs/ProgrammersGuide/faq.html)
def aniso(targets=None, color=None, smoothing=3, scale=1.0, showEllipsoid=True, transparency=None, axisFactor=None, axisColor=None, axisThickness=0.01, ellipseFactor=None, ellipseColor=None, ellipseThickness=0.02): from Midas import MidasError if targets is None: targets = openModels.list(modelTypes=[Molecule]) if smoothing < 1: raise MidasError("'smoothing' must be at least 1") if transparency is not None: try: transparency /= 100.0 if transparency < 0.0 or transparency > 1.0: raise TypeError("out of range") except TypeError: raise MidasError( "transparency must be a number between zero and one") numShown = mgr().showAniso(targets, color=color, smoothing=smoothing, scale=scale, showEllipsoid=showEllipsoid, ellipsoidTransparency=transparency, axisFactor=axisFactor, axisColor=axisColor, axisThickness=axisThickness, ellipseColor=ellipseColor, ellipseFactor=ellipseFactor, ellipseThickness=ellipseThickness) if not numShown: raise MidasError("No atoms chosen or none had anisotropic" " information")
def setZoom(self): self.writeMessageToLog("Setting zoom") surf = self.surfaces[0] rc = Radial_Color() try: rmin, rmax = rc.value_range(surf.surfacePieces[0]) except: self.writeMessageToLog("using old Chimera radial method") #keep for older version of chimera, e.g. v1.2509 vertices, triangles = surf.surfacePieces[0].geometry rmin, rmax = rc.value_range(vertices, vertex_xform=None) while rmax is None: self.writeMessageToLog("Contour %.2f is too big, no surface is shown"%(self.contour)) self.contour *= 0.9 self.voldata.set_parameters(surface_levels = [self.contour]) self.voldata.show('surface') self.surfaces = openModels.list(modelTypes=[SurfaceModel]) surf = self.surfaces[0] try: rmin, rmax = rc.value_range(surf.surfacePieces[0]) except: #keep for older version of chimera, e.g. v1.2509 vertices, triangles = surf.surfacePieces[0].geometry rmin, rmax = rc.value_range(vertices, vertex_xform=None) self.writeMessageToLog("found r_max value of %.3f"%(rmax)) ## ten percent bigger to ensure that entire particle is in frame viewsize = 1.1*rmax/self.zoom chimera.viewer.viewSize = viewsize #self.runChimCommand('scale %.3f' % self.zoom) self.writeMessageToLog("set view size to %.3f"%(viewsize))
def split_molecules(cmdname, args): fields = args.split() from chimera import openModels, Molecule if len(fields) >= 1: from chimera import specifier sel = specifier.evalSpec(fields[0]) mlist = sel.molecules() else: mlist = openModels.list(modelTypes=[Molecule]) if len(mlist) == 0: from Midas.midas_text import error error('%s: No molecules to split.' % cmdname) return slist = [] for m in mlist: clist = split_molecule(m) if clist: openModels.add(clist, baseId=m.id, noprefs=True) for c in clist: c.openState.xform = m.openState.xform slist.append(m) from chimera import makeLongBondsDashed, makePseudoBondsToMetals makePseudoBondsToMetals(clist) makeLongBondsDashed(clist) openModels.close(slist)
def fit_object_models(): from VolumeViewer import Volume from chimera import openModels as om, Molecule mlist = om.list(modelTypes = [Molecule, Volume]) folist = ['selected atoms'] + mlist return folist
def model(trgt, tmpl8, od): # open target sequence rc('open ' + trgt) # open template structure, and generate sequence rc('open ' + tmpl8) rc('sequence #0') # MAV objects fmav = findMAVs() target, template = fmav tar_seq = target.seqs[0] temp_seq = copy(template.seqs[0]) seq_name = tmpl8.split('/')[-1] # align sequences # get template secondary structure matrix nb = Pmw.NoteBook() structPage = nb.add("From Structure") ssParams = SSParams(structPage, template.prefs) kw = {'ssMatrix': ssParams.getMatrix()} # generalize these vars later. tired of hacking rn. # match target fasta sequence to template pdb sequence target.alignSeq(temp_seq, displayName=seq_name, matrix=template.prefs[MATRIX], gapOpenStrand=-18.0, scoreGap=-1, scoreGapOpen=-12, gapOpenHelix=-18.0, gapOpenOther=-6.0, gapChar='.', guideSeqs=None, ssFraction=0.3, **kw) # run modeller on alignment kw = {'licenseKey': 'MODELIRANJE'} ModellerBase.model(target, tar_seq, openModels.list(modelTypes=[Molecule]), '5', 1, 1, 0, veryFast=0, **kw)
def unclip_command(cmdname, args): if len(args) == 0: from chimera import openModels as om unclip_models(om.list()) else: from Midas.midas_text import doExtensionFunc doExtensionFunc(unclip_models, args)
def remove_sphere_key(): from chimera import openModels as om from _surface import SurfaceModel om.close([ m for m in om.list(modelTypes=[SurfaceModel]) if m.name == 'Direction colors' ])
def mainchain(): import re from chimera import openModels, Molecule mainChain = re.compile("^(N|CA|C)$", re.I) for m in openModels.list(modelTypes=[Molecule]): for a in m.atoms: a.display = mainChain.match(a.name) != None
def find_molecule_by_name(name): from chimera import openModels, Molecule mlist = openModels.list(modelTypes=[Molecule]) for m in mlist: if m.name == name: return m return None
def all_atoms(): from chimera import openModels, Molecule mlist = openModels.list(modelTypes = [Molecule]) atoms = [] for m in mlist: atoms.extend(m.atoms) return atoms
def find_molecule_by_name(name): from chimera import openModels, Molecule mlist = openModels.list(modelTypes = [Molecule]) for m in mlist: if m.name == name: return m return None
def selected_surface_pieces(self): plist = Surface.selected_surface_pieces() if len(plist) > 0: return plist plist = [] for m in openModels.list(modelTypes = [SurfaceModel]): plist.extend(m.surfacePieces) return plist
def marker_sets(): from chimera import openModels as om, Molecule msets = [ m.marker_set for m in om.list(modelTypes=[Molecule]) if hasattr(m, 'marker_set') ] return msets
def colorable_surface_models(): from chimera import openModels from _surface import SurfaceModel mlist = openModels.list(modelTypes = [SurfaceModel]) from SurfaceCap import is_surface_cap mlist = [m for m in mlist if not is_surface_cap(m)] return mlist
def surface_models(): from chimera import openModels from _surface import SurfaceModel mlist = openModels.list(modelTypes=[SurfaceModel]) from SurfaceCap import is_surface_cap mlist = filter(lambda m: not is_surface_cap(m), mlist) return mlist
def colorable_surface_models(): from chimera import openModels from _surface import SurfaceModel mlist = openModels.list(modelTypes=[SurfaceModel]) from SurfaceCap import is_surface_cap mlist = [m for m in mlist if not is_surface_cap(m)] return mlist
def activate_models(self, active): from chimera import openModels for m in openModels.list(): m.openState.active = active m = self.box_model.model() if m: m.openState.active = True
def undo_symmetry_copies(molecules = None): mlist = molecules if mlist is None: from chimera import openModels as om, Molecule mlist = om.list(modelTypes = [Molecule]) mlist = [m for m in mlist if hasattr(m, 'symmetry_copies')] for mol in mlist: remove_symmetry_copies(mol)
def undo_symmetry_copies(molecules=None): mlist = molecules if mlist is None: from chimera import openModels as om, Molecule mlist = om.list(modelTypes=[Molecule]) mlist = [m for m in mlist if hasattr(m, 'symmetry_copies')] for mol in mlist: remove_symmetry_copies(mol)
def colorBB(): red = getColorByName('red') yellow = getColorByName('yellow') # return a list of opened molecules for mol in openModels.list(modelTypes=[Molecule]): mol.color = red # change model color to be red atoms = mol.atoms for atom in atoms: if atom.name == 'CA': atom.color = yellow
def parse_model_spec(mspec): if mspec.lower() == 'all': from chimera import openModels as om mlist = om.list() else: from chimera.specifier import evalSpec try: mlist = evalSpec(mspec).models() except: mlist = [] return mlist
def chosen_atoms(self): m = self.molecule_menu.getvalue() from chimera import Molecule, openModels, selection if isinstance(m, Molecule): return [m], False elif m == 'selected atoms': mlist = list(set([a.molecule for a in selection.currentAtoms()])) return mlist, True elif m == 'all molecules': mlist = openModels.list(modelTypes=[Molecule]) return mlist, False return [], False
def default_molecule(): from chimera import openModels, Molecule mlist = openModels.list(modelTypes = [Molecule]) mlist = [m for m in mlist if not hasattr(m, 'symmetry_xform')] if len(mlist) == 0: from Midas import MidasError raise MidasError, 'No molecules are opened' elif len(mlist) > 1: from Midas import MidasError raise MidasError, 'Multiple molecules opened, must specify one' mol = mlist[0] return mol
def default_molecule(): from chimera import openModels, Molecule mlist = openModels.list(modelTypes=[Molecule]) mlist = [m for m in mlist if not hasattr(m, 'symmetry_xform')] if len(mlist) == 0: from Midas import MidasError raise MidasError, 'No molecules are opened' elif len(mlist) > 1: from Midas import MidasError raise MidasError, 'Multiple molecules opened, must specify one' mol = mlist[0] return mol
def chosen_atoms(self): m = self.molecule_menu.getvalue() from chimera import Molecule, openModels, selection if isinstance(m, Molecule): return [m], False elif m == 'selected atoms': mlist = list(set([a.molecule for a in selection.currentAtoms()])) return mlist, True elif m == 'all molecules': mlist = openModels.list(modelTypes = [Molecule]) return mlist, False return [], False
def getChains(): """Get the chain names in a protein molecule""" #TODO, check if there is a quick method to get the list of chains mols = openModels.list(modelTypes=[Molecule]) chains = [] m = mols[0] # get the first model for residue in m.residues: if residue.id.chainId not in chains: chains.append(str(residue.id.chainId)) chains = sorted(chains) return chains
def alignModels(preexistingModels): """Transform session models so model with lowest id has the same transform as the preexisting model with lowest id.""" from chimera import openModels pset = set(preexistingModels) newModels = [m for m in openModels.list() if not m in pset] pxf = lowestIdXform(preexistingModels) nxf = lowestIdXform(newModels) if pxf is None or nxf is None: return xf = nxf.inverse() xf.premultiply(pxf) for os in set([m.openState for m in newModels]): os.globalXform(xf)
def selection_surface_distance(): from chimera import selection alist = selection.currentAtoms() if len(alist) == 0: from chimera.replyobj import status status('No atoms or markers selected') return from chimera import openModels from _surface import SurfaceModel smlist = openModels.list(modelTypes = [SurfaceModel]) write_surface_distances(alist, smlist)
def find_surface_model(model_id): from chimera import openModels as om if model_id is None or model_id == (om.Default, om.Default): return from _surface import SurfaceModel id, subid = model_id slist = om.list(id = id, subid = subid, modelTypes = [SurfaceModel]) if len(slist) > 1: raise CommandError, 'multiple surfaces with model id %d' % model_id if len(slist) == 1: return slist[0] return None
def all_surface_pieces(include_outline_boxes=True): from _surface import SurfacePiece, SurfaceModel from chimera import openModels as om slist = om.list(modelTypes=[SurfaceModel]) plist = [] if include_outline_boxes: for s in slist: plist.extend(s.surfacePieces) else: for s in slist: plist.extend( [p for p in s.surfacePieces if not hasattr(p, 'outline_box')]) return plist
def model(tmpl8, loops): # open template structure, and generate sequence rc('open ' + tmpl8) rc('sequence #0; wait') # MAV objects fmav = findMAVs() template = fmav[0] temp_seq = template.seqs[0] seq_name = tmpl8.split('/')[-1] # run modeller on alignment kw = {'licenseKey': 'MODELIRANJE'} ModellerBase.model(template, temp_seq, openModels.list(modelTypes=[Molecule]), '10', 1, 1, 0, veryFast=0, loopInfo=('', loops), **kw)
def destroy(self): if self.cavities: cav1 = self.cavities[0] atoms = (cav1.mouthInfo["atoms"].atoms() or cav1.pocketInfo["atoms"].atoms()) if atoms: # close surface too... from chimera import openModels mol = atoms[0].molecule openModels.close(openModels.list( id=mol.id, subid=mol.subid)) for chk in [self.doSelect, self.doColor, self.doSurface, self.doZoom, self.excludeMouth]: chk.destroy() chimera.extension.manager.deregisterInstance(self) ModelessDialog.destroy(self)
def beginRestore(): # temporarily make these names available in the SimpleSession module import SimpleSession from SimpleSession import BEGIN_RESTORE_SESSION chimera.triggers.activateTrigger(BEGIN_RESTORE_SESSION, None) SimpleSession.registerAfterModelsCB = registerAfterModelsCB SimpleSession.reportRestoreError = reportRestoreError SimpleSession.findFile = findFile SimpleSession.getColor = getColor SimpleSession.idLookup = idLookup SimpleSession.modelMap = {} from SimpleSession.versions import highestOpenID SimpleSession.modelOffset = highestOpenID() + 1 from chimera import openModels SimpleSession.preexistingModels = openModels.list() SimpleSession.mergedSession = (len(SimpleSession.preexistingModels) > 0)
def beginRestore(): # temporarily make these names available in the SimpleSession module import SimpleSession SimpleSession.updateOSLmap = updateOSLmap SimpleSession.registerAfterModelsCB = registerAfterModelsCB SimpleSession.oslMap = oslMap SimpleSession.reportRestoreError = reportRestoreError SimpleSession.findFile = findFile SimpleSession.oslLookup = oslLookup SimpleSession.getColor = getColor SimpleSession.weedOSLlist = weedOSLlist SimpleSession.weedOSLdict = weedOSLdict from SimpleSession.versions import highestOpenID SimpleSession.modelOffset = highestOpenID() + 1 from chimera import openModels SimpleSession.preexistingModels = openModels.list() SimpleSession.mergedSession = (len(SimpleSession.preexistingModels) > 0)
def __init__(self, movie): self.movie = movie self.data = numpy.load('gtm.dat') self.k = self.data['k'] # number of cells of the map self.nx = self.data['nx'] # Number of cells of the map for dimension x self.ny = self.data['ny'] # Number of cells of the map for dimension y self.logR = self.data['logR'] R = numpy.exp(self.logR) mask = (R.sum(axis=1).reshape(self.nx, self.ny) ==0) self.matrix = -self.data['log_density'] self.matrix[mask] = numpy.nan self.min_value = numpy.nanmin(self.matrix) PlotDialog.__init__(self, self.min_value, numpy.nanmax(self.matrix)) self.master = self._master self.displayed_matrix = self.matrix self.selection_mode = 'Cell' self.bmus = numpy.asarray([numpy.unravel_index(e, (self.nx,self.ny)) for e in range(self.k)]) self.selected_neurons = OrderedDict([]) self.colors = [] # colors of the dot in the map self.subplot = self.add_subplot(1, 1, 1) self.colorbar = None self.cluster_map = None self.highlighted_cluster = None self._displayData() movie.triggers.addHandler(self.movie.NEW_FRAME_NUMBER, self.update_bmu, None) self.registerPickHandler(self.onPick) self.figureCanvas.mpl_connect("key_press_event", self.onKey) self.figureCanvas.mpl_connect("key_release_event", self.offKey) self.keep_selection = False self.init_models = set(openModels.list()) self.movie_id = movie.model.id self.i, self.j = None, None # current neuron self.rmsd_list = None self.rep_rmsd = None self.experimental_data_filename = None self.data_driven_clusters = None self.ctrl_pressed = False self.motion_notify_event = None self.slice_id = 0 # slice of the matrix to display for high dimensional data self.plot1D = None # 1D plot for multidimensional features self.clustermode = (1,'Frames') # to display either Density map or ensemble of frames self.rep_map = numpy.zeros((self.nx, self.ny)) for i in range(self.nx): for j in range(self.ny): self.rep_map[i,j] = numpy.ravel_multi_index((i,j), (self.nx, self.ny))
def focusCmd(models): from chimera import openModels, viewer, update shown = {} for m in openModels.list(): shown[m] = m.display if m in models: m.display = 1 else: m.display = 0 update.checkForChanges() viewer.viewAll() if chimera.openModels.cofrMethod != chimera.OpenModels.Independent: openModels.cofrMethod = openModels.CenterOfView viewer.clipping = True for m,disp in shown.items(): m.display = disp update.checkForChanges()
def create_volume_plane_surface(volume, height, interpolate = 'cubic', mesh = 'isotropic', colormap = 'rainbow', smoothing_factor = 0.3, smoothing_iterations = 0, color = (.7, .7, .7, 1), replace = True): m = volume.matrix() axes = [a for a in range(3) if m.shape[2-a] == 1] if len(axes) != 1: from chimera.replyobj import warning warning('Volume %s has more than one plane shown (%d,%d,%d)' % ((volume.name,) + tuple(reversed(m.shape)))) return axis = axes[0] m = m.squeeze() # Convert 3d array to 2d tf = volume.matrix_indices_to_xyz_transform() perm = {0: ((0,0,1,0),(1,0,0,0),(0,1,0,0)), # 2d matrix xyh -> 3d yzx 1: ((1,0,0,0),(0,0,1,0),(0,1,0,0)), # 2d matrix xyh -> 3d xzy 2: ((1,0,0,0),(0,1,0,0),(0,0,1,0))}[axis] from Matrix import multiply_matrices tf = multiply_matrices(tf, perm) s = create_surface(m, height, tf, color, interpolate, mesh, smoothing_factor, smoothing_iterations) s.name = volume.name + ' height' if colormap == 'rainbow': invert = not height is None and height < 0 tf = volume.data.ijk_to_xyz_transform normal = [tf[i][axis] for i in range(3)] colormap_surface(s, normal, rainbow_colormap(invert)) from chimera import openModels if replace: openModels.close([m for m in openModels.list() if getattr(m, 'topography_volume', None) == volume]) openModels.add([s]) s.openState.xform = volume.model_transform() s.topography_volume = volume return s