Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
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')
Beispiel #4
0
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)
Beispiel #7
0
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)
Beispiel #8
0
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')
Beispiel #9
0
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
Beispiel #11
0
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)
Beispiel #12
0
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]
Beispiel #13
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 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)
Beispiel #15
0
 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)
Beispiel #16
0
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)
Beispiel #19
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
Beispiel #20
0
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)
Beispiel #22
0
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
Beispiel #26
0
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
Beispiel #27
0
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
Beispiel #29
0
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
Beispiel #30
0
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
Beispiel #34
0
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)
Beispiel #35
0
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)
Beispiel #36
0
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
Beispiel #38
0
    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
Beispiel #39
0
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
Beispiel #40
0
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
Beispiel #41
0
  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
Beispiel #42
0
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
Beispiel #43
0
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)
Beispiel #45
0
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 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)
Beispiel #48
0
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)
Beispiel #49
0
	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)
Beispiel #50
0
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)
Beispiel #51
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)
Beispiel #52
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))
Beispiel #53
0
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()
Beispiel #54
0
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