Here is a Python routine to find residues with specified residue numbers in specified chains. One way to do this is to run a
from chimerax.core.commands import run residues = run(session, 'select #1/A:105,107/B:228,301').residues
This can be relatively slow for parsing thousands of residues because the command parser in ChimeraX 1.4 is rather slow. So below is equivalent Python code that will run faster.
from chimerax.atomic import all_structures structures = all_structures(session) chain_res = [('A', (105,107)), ('B', (228,301))] residues = find_residues(structures.residues, chain_res)
Here is the residues.py code:
def find_residues(residues, chain_id_and_res_numbers): ''' Return Residues for specified chain identifiers and residue numbers given as a list of (chain_id, res_number_list) pairs. ''' chain_ids = residues.chain_ids res_nums = residues.numbers from numpy import zeros, bool, isin mask = zeros((len(residues),), bool) for chain_id, res_numbers in chain_id_and_res_numbers: mask |= (chain_ids == chain_id) & isin(res_nums, res_numbers) return residues[mask]
Tom Goddard, August 2, 2022