def name(session, name, text=None): if name == "all": raise UserError("\"all\" is reserved and cannot be redefined") if text is None: from chimerax.core.commands import get_selector try: sel = get_selector(name) except KeyError: raise UserError("\"%s\" is not defined" % name) else: value = _get_name_desc(sel, True) session.logger.info('\t'.join([name, value])) else: try: ast, used, unused = AtomSpecArg.parse(text, session) if unused: raise AnnotationError("contains extra trailing text") except AnnotationError as e: raise UserError("\"%s\": %s" % (text, str(e))) def selector(session, models, results, spec=text): objects, used, unused = ObjectsArg.parse(spec, session) results.combine(objects) selector.name_text = text from chimerax.core.commands import register_selector register_selector(name, selector, session.logger)
def name(session, name, text=None, skip_check=False): if name == "all": raise UserError("\"all\" is reserved and cannot be shown or defined") if text is None: from chimerax.core.commands import get_selector_description try: desc = get_selector_description(name, session) except KeyError: raise UserError("\"%s\" is not defined" % name) else: if desc: session.logger.info('\t'.join([name, desc])) else: if _is_reserved(name): raise UserError("\"%s\" is reserved and cannot be redefined" % name) if not skip_check: try: ast, used, unused = AtomSpecArg.parse(text, session) if unused: raise AnnotationError("contains extra trailing text") except AnnotationError as e: raise UserError("\"%s\": %s" % (text, str(e))) def selector(session, models, results, spec=text): objects, used, unused = ObjectsArg.parse(spec, session) results.combine(objects) from chimerax.core.commands import register_selector register_selector(name, selector, session.logger, user=True, desc=text) session.basic_actions.define(name, text)
def name_frozen(session, name, objects): if _is_reserved(name): raise UserError("\"%s\" is reserved and cannot be redefined" % name) if objects.empty(): raise UserError("nothing is selected by specifier") from chimerax.core.commands import register_selector register_selector(name, objects, session.logger, user=True) session.basic_actions.define(name, objects)
def register(selector_name, logger): """Register selector with ChimeraX. """ # Registration is simply telling ChimeraX which function # to call when the selector is used. If an unexpected # selector_name is given, the dictionary lookup will fail, # and the resulting exception will be caught by ChimeraX. from chimerax.core.commands import register_selector register_selector(selector_name, _selector_func[selector_name], logger)
def create_selector(self, mol, logger): if self._is_subassembly(): name = self.id sel_name = ('A' + name) if is_integer(name) else name def _selector(session, models, results, self=self, mol=mol): atoms = self._subassembly_atoms(mol) results.add_atoms(atoms) from chimerax.core.commands import register_selector register_selector(sel_name, _selector, logger)
def register_selectors(logger): def select(results, models, group): from .chem_group import find_group atoms = find_group(group, models, return_collection=True) for m in atoms.unique_structures: results.add_model(m) results.add_atoms(atoms) from chimerax.core.commands import register_selector for group_name in group_info.keys(): register_selector(group_name.replace(' ', '-'), lambda ses, models, results, gn=group_name: select( results, models, gn), logger)
def register_selectors(logger, name): if name == "tm": register_selector("tm", tm_selector, logger, desc="transition metals") elif any(name == sub for sub in Substituent.list()): register_selector( name, lambda sess, models, results, sub_name=name: substituent_selection( sess, sub_name, models, results), logger, desc="substituent %s" % name) elif name == "connected": register_selector("connected", all_connected_selector, logger, desc="fragment connected to selected atoms")
def name_frozen(session, name, objects): if name == "all": raise UserError("\"all\" is reserved and cannot be redefined") from chimerax.core.commands import register_selector register_selector(name, objects, session.logger)
def register_selectors(logger): from chimerax.core.commands import register_selector register_selector("selAtoms", _sel_atoms_selector, logger) register_selector("selMaps", _sel_maps_selector, logger, atomic=False) register_selector("selModels", _sel_models_selector, logger, atomic=False)