Esempio n. 1
0
    def select(self, only=False):

        from chimera.selection import setCurrent, addCurrent
        if only:
            setCurrent(self.bond)
        else:
            addCurrent(self.bond)
Esempio n. 2
0
def selUp():
    global _selChangeHandler, _atomChangeHandler
    needHandlers = False
    if not _selInfos[SELATOM:]:
        needHandlers = True
        _selInfos.append(_infoFromSel(selection.copyCurrent()))
    # go up levels until the selection changes
    global _IchangedSel, selLevel
    _IchangedSel = False
    while selLevel < SELALL:
        selLevel += 1
        try:
            nextSel = _selInfos[selLevel][0]
            if selLevel == SELALL \
            and not _topValid:
                raise IndexError, "new models present"
        except IndexError:
            nextSel = _nextSel()
            _selInfos.append(_infoFromSel(nextSel))
        if len(nextSel) != len(_selInfos[selLevel - 1][0]):
            if not needHandlers:
                _IchangedSel = True
            selection.setCurrent(nextSel)
            break
    # delay the handlers until here in case setting the selection
    # causes other things to get selected (e.g. axes/planes)
    if needHandlers:
        _atomChangeHandler = chimera.triggers.addHandler(
            "Atom", _atomChangeCB, None)
        _selChangeHandler = chimera.triggers.addHandler(
            "selection changed", _selChangeCB, None)
Esempio n. 3
0
def select_atoms_outside_map():

    from chimera.replyobj import status, info

    from VolumeViewer import active_volume
    dr = active_volume()
    if dr is None:
        status('No density map opened.')
        return

    if dr.surface_model() == None or not dr.surface_model().display:
        status('No surface shown for map.')
        return

    levels = dr.surface_levels
    if len(levels) == 0:
        status('No surface shown for map.')
        return

    contour_level = min(levels)
    from chimera import selection
    atoms = selection.currentAtoms()
    aolist = atoms_outside_map(atoms, dr, contour_level)

    msg = ('%d of %d selected atoms outside %s at level %.5g' %
           (len(aolist), len(atoms), dr.name, contour_level))
    status(msg)
    info(msg + '\n')

    selection.setCurrent(aolist)
def select_atoms_outside_map():

    from chimera.replyobj import status, info

    from VolumeViewer import active_volume
    dr = active_volume()
    if dr is None:
        status('No density map opened.')
        return

    if dr.surface_model() == None or not dr.surface_model().display:
        status('No surface shown for map.')
        return

    levels = dr.surface_levels
    if len(levels) == 0:
        status('No surface shown for map.')
        return

    contour_level = min(levels)
    from chimera import selection
    atoms = selection.currentAtoms()
    aolist = atoms_outside_map(atoms, dr, contour_level)

    msg = ('%d of %d selected atoms outside %s at level %.5g' %
           (len(aolist), len(atoms), dr.name, contour_level))
    status(msg)
    info(msg + '\n')

    selection.setCurrent(aolist)
Esempio n. 5
0
def select_markers(markers, only=True):

    atoms = [m.atom for m in markers]
    from chimera.selection import setCurrent, addCurrent
    if only:
        setCurrent(atoms)
    else:
        addCurrent(atoms)
Esempio n. 6
0
def restoreSelections(curSelIds, savedSels):
    selection.setCurrent(map(idLookup, curSelIds))

    for selInfo in savedSels:
        selName, ids = selInfo
        sel = selection.ItemizedSelection()
        sel.add(map(idLookup, ids))
        chimera.selection.saveSel(selName, sel)
def restoreSelections(curSelOsls, savedSels):
	selection.setCurrent(weedOSLlist(curSelOsls))

	for selInfo in savedSels:
		selName, osls = selInfo
		sel = selection.ItemizedSelection()
		sel.add(weedOSLlist(osls))
		chimera.selection.saveSel(selName, sel)
Esempio n. 8
0
def restoreSelections(curSelIds, savedSels):
	from chimera import selection
	selection.setCurrent(map(idLookup, curSelIds))

	for selInfo in savedSels:
		selName, ids = selInfo
		sel = selection.ItemizedSelection()
		sel.add(map(idLookup, ids))
		chimera.selection.saveSel(selName, sel)
Esempio n. 9
0
	def _distTableSelCB(self, selDists):
		if self.distSelectsAtomsVar.get():
			select = []
			select.extend(selDists)
			for sd in selDists:
				select.extend(sd.atoms)
			selection.setCurrent(select)
		else:
			selection.removeCurrent(self.distances)
			selection.addCurrent(selDists)
Esempio n. 10
0
	def _angleTableSelCB(self, selAngles):
		if self.angleSelectsComponentsVar.get():
			select = []
			for atoms in selAngles:
				select.extend(atoms)
				atomSet = set(atoms)
				for a in atoms:
					for b in a.bonds:
						if b.otherAtom(a) in atomSet:
							select.append(b)
			selection.setCurrent(select)
Esempio n. 11
0
	def _itemsSelectAtoms(self, items, add=False):
			atoms = set()
			for item in items:
				atoms.update(item.atoms)
			if self.geomSelAtomsVar.get():
				if add:
					selection.addCurrent(atoms)
				else:
					selection.setCurrent(atoms)
			elif set(atoms) == set(selection.currentAtoms()):
				selection.removeCurrent(atoms)
Esempio n. 12
0
def selDown():
    if not _selInfos[SELATOM:]:
        return
    # keep lowering level until selection changes
    global _IchangedSel, selLevel
    _IchangedSel = False
    while selLevel > SELNONE:
        selLevel -= 1
        if len(_selInfos[selLevel][0]) != len(_selInfos[selLevel + 1][0]):
            _IchangedSel = True
            selection.setCurrent(_selInfos[selLevel][0])
            break
def select_atoms_and_chains(atoms, cplist):

    # Don't select chains where atoms are selected.
    rlist = list(set([a.residue for a in atoms]))
    import MultiScale
    ac = set(MultiScale.containing_chain_pieces(cplist, rlist))
    splist = [cp.surface_piece for cp in cplist
              if not cp in ac and cp.surface_piece != None]
    
    from chimera import selection
    sel = selection.ItemizedSelection()
    sel.add(atoms + splist)
    sel.addImplied(vertices = False, edges = True)      # Select bonds
    selection.setCurrent(sel)
Esempio n. 14
0
def select_connected():
    'Select atoms and bonds connected to currently selected atoms and bnods'
    from chimera import selection, Atom
    atoms_and_bonds = selection.currentAtoms() + selection.currentBonds()
    reached = set(atoms_and_bonds)
    i = 0
    while i < len(atoms_and_bonds):
        ab = atoms_and_bonds[i]
        if isinstance(ab, Atom):
            n = ([b for b in ab.bonds if not b in reached] +
                 [a for a in ab.neighbors if not a in reached])
        else:
            n = [a for a in ab.atoms if not a in reached]
        atoms_and_bonds.extend(n)
        reached.update(set(n))
        i += 1
    selection.setCurrent(atoms_and_bonds)
Esempio n. 15
0
	def doApply(self, target, solid, track, selAtoms,
			bias, prune, pruneDistance):
		m1, m2 = target
		if prune:
			m1_list = SurfMaker.GetAtomList(m1, m2, pruneDistance)
			m2_list = SurfMaker.GetAtomList(m2, m1, pruneDistance)
		else:
			m1_list = SurfMaker.GetAtomList(m1)
			m2_list = SurfMaker.GetAtomList(m2)

		if not m1_list or not m2_list:
			raise chimera.UserError("No interface surface found")
		p = SurfMaker.UnpackIntersurfData(m1_list, m2_list)
		tetras = SurfMaker.ComputeTetrahedralization(p)
		surfPoints, surfTriangles, surfAtoms = SurfMaker.ComputeSurface(p, tetras, bias)

		surfMetric = [ getDistance(x[0], x[1]) for x in surfAtoms ]
		lo = min(surfMetric)
		hi = max(surfMetric)
		scale = hi - lo
		markers = [ (lo + m['xy'][0] * scale, m['rgba'])
				for m in self.histogramMarkers ]
		surfColors = [ getHistogramColor(x, markers)
					for x in surfMetric ] 
		self.histogramData = (lo, hi, surfMetric)
		def myMakeBars(numBins, data=self.histogramData):
			return makeBars(numBins, data)
		self.histogram["datasource"] = (lo, hi, myMakeBars)

		self._show_geometry(surfPoints, surfTriangles, surfColors, solid, track)
		if selAtoms:
			from chimera import selection
			atomSet = set([])
			for a1, a2 in surfAtoms:
				atomSet.add(a1)
				atomSet.add(a2)
			sel = selection.ItemizedSelection()
			sel.add(atomSet)
			sel.addImplied(vertices=False)
			selection.setCurrent(sel)
Esempio n. 16
0
        # rc('aromatic disk')

        # modify model to display double and triple bonds
        rc('select #0')
        atoms = currentAtoms()

        bondsList = []

        for a in atoms:
            for b in bonds:
                if b not in bondsList:
                    bondsList = bondsList + [b]

        for bond in bondsList:
            setCurrent(bond)
            length = bond.length()
            length = format(length, '.3f')

            if float(length) in doubleBonds:
                rc('setattr b radius 0.2 sel;wait')
            elif float(length) in tripleBonds:
                rc('setattr b radius 0.3 sel;wait')

        rc('windowsize 800 800;wait')
        rc('setzoom 30.0;wait')
        rc('center;wait')

        # take images of molecule
        i = 0
Esempio n. 17
0
def select_all():
    'Select all models'
    from chimera import selection, openModels
    selection.setCurrent(openModels.list())
Esempio n. 18
0
def clear_selection():
    'Clear selection'
    from chimera import selection
    selection.setCurrent([])