Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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")
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)