Ejemplo n.º 1
0
def register_seqalign_command(logger):
    # REMINDER: update manager._builtin_subcommands as additional subcommands are added
    from chimerax.core.commands import CmdDesc, register, create_alias, Or, EmptyArg, RestOfLine, ListOf
    from chimerax.atomic import UniqueChainsArg
    desc = CmdDesc(
        required = [('chains', UniqueChainsArg)],
        synopsis = 'show structure chain sequence'
    )
    register('sequence chain', desc, seqalign_chain, logger=logger)

    desc = CmdDesc(
        required = [('chains', UniqueChainsArg)],
        optional = [('target', Or(AlignmentArg, AlignSeqPairArg))],
        synopsis = 'associate chain(s) with sequence'
    )
    register('sequence associate', desc, seqalign_associate, logger=logger)

    desc = CmdDesc(
        required = [('chains', UniqueChainsArg)],
        optional = [('alignment', AlignmentArg)],
        synopsis = 'disassociate chain(s) from alignment'
    )
    register('sequence disassociate', desc, seqalign_disassociate, logger=logger)
    create_alias('sequence dissociate', 'sequence disassociate $*', logger=logger,
            url="help:user/commands/sequence.html#disassociate")

    desc = CmdDesc(
        required = [('alignments', Or(AlignmentArg,ListOf(AlignmentArg),EmptyArg)),
            ('subcommand_text', RestOfLine)],
        synopsis = "send subcommand to header"
    )
    register('sequence header', desc, seqalign_header, logger=logger)

    from . import manager
    manager._register_viewer_subcommands(logger)
Ejemplo n.º 2
0
 def register_isolde_add_water():
     desc = CmdDesc(optional=[
         ('model', StructureArg),
     ],
                    keyword=[('position', ListOf(FloatArg, 3, 3)),
                             ('bfactor', FloatArg), ('chain', StringArg),
                             ('distance_cutoff', FloatArg),
                             ('sim_settle', BoolArg)],
                    synopsis='Add a water molecule')
     register('isolde add water', desc, add_water, logger=logger)
Ejemplo n.º 3
0
def register_command(logger):
    from chimerax.core.commands import register, CmdDesc, Or, ObjectsArg, EmptyArg, FloatArg
    from chimerax.core.commands import ListOf, EnumOf
    from .color import TargetArg
    from .color import WHAT_TARGETS
    what_arg = ListOf(EnumOf((*WHAT_TARGETS.keys(),)))
    desc = CmdDesc(required=[('objects', Or(ObjectsArg, EmptyArg)),
                             ('percent', FloatArg)],
                   optional=[('what', what_arg)],
                   keyword=[('target', TargetArg)],
                   synopsis="change object transparency")
    register('transparency', desc, transparency, logger=logger)
Ejemplo n.º 4
0
def register_command(logger):
    from chimerax.core.commands import CmdDesc, StringArg, SaveFolderNameArg, IntArg, \
        SaveFileNameArg, ListOf, register
    desc = CmdDesc(
        optional = [('directory', SaveFolderNameArg)],
        keyword = [('width', IntArg),
                   ('height', IntArg),
                   ('supersample', IntArg),
                   ('image_suffix', StringArg),
                   ('exclude', ListOf(StringArg)),
                   ('log_file', SaveFileNameArg)],
        synopsis = 'Render mmCIF assembly images')
    register('pdbimages', desc, pdbimages, logger=logger)
Ejemplo n.º 5
0
 def register_isolde_restrain_distances():
     desc = CmdDesc(
         synopsis=
         'Restrain interatomic distances to current values or a template.',
         required=[
             ('atoms', ListOf(AtomsArg)),
         ],
         keyword=[('template_atoms', ListOf(AtomsArg)),
                  ('protein', BoolArg), ('nucleic', BoolArg),
                  ('custom_atom_names', ListOf(StringArg)),
                  ('per_chain', BoolArg), ('distance_cutoff', FloatArg),
                  ('use_coordinate_alignment', BoolArg),
                  ('alignment_cutoff', FloatArg),
                  ('well_half_width', FloatArg), ('kappa', FloatArg),
                  ('tolerance', FloatArg), ('fall_off', FloatArg),
                  ('display_threshold', FloatArg),
                  ('adjust_for_confidence', BoolArg),
                  ('confidence_type', EnumOf(['plddt', 'pae']))])
     register('isolde restrain distances',
              desc,
              restrain_distances,
              logger=logger)
Ejemplo n.º 6
0
def register_test_command(logger):
    desc = CmdDesc(
        optional=[(
            "test_names",
            ListOf(
                DynamicEnum(
                    lambda session=logger.session: get_test_names(session)
                )
            )
        )],
        synopsis="test the specifed component or 'all'",
    )
    
    register("test", desc, test)
Ejemplo n.º 7
0
 def register_isolde_add_ligand():
     desc = CmdDesc(
         required=[
             ('ligand_id', StringArg),
         ],
         optional=[
             ('model', StructureArg),
         ],
         keyword=[('position', ListOf(FloatArg, 3, 3)),
                  ('bfactor', FloatArg), ('chain', StringArg),
                  ('distance_cutoff', FloatArg), ('sim_settle', BoolArg),
                  ('use_md_template', BoolArg),
                  ('md_template_name', StringArg)],
         synopsis='Add a ligand from the Chemical Components Dictionary')
     register('isolde add ligand', desc, add_ligand, logger=logger)
Ejemplo n.º 8
0
def _register_viewer_subcommand(logger, viewer_sub):
    def viewer_subcommand(session, alignment_s, subcommand_text, *, _viewer_keyword=viewer_sub):
        from .alignment import Alignment
        if alignment_s is None:
            from .cmd import get_alignment_by_id
            alignments = get_alignment_by_id(session, "", multiple_okay=True)
        elif isinstance(alignment_s, Alignment):
            alignments = [alignment_s]
        else:
            alignments = alignment_s
        for alignment in alignments:
            alignment._dispatch_viewer_command(_viewer_keyword, subcommand_text)
    from .cmd import AlignmentArg
    from chimerax.core.commands import CmdDesc, register, Or, EmptyArg, RestOfLine, ListOf
    desc = CmdDesc(
        required = [('alignment_s', Or(AlignmentArg,ListOf(AlignmentArg),EmptyArg)),
            ('subcommand_text', RestOfLine)],
        synopsis = "send subcommand to viewer '%s'" %viewer_sub
    )
    register('sequence %s' % viewer_sub, desc, viewer_subcommand, logger=logger)
Ejemplo n.º 9
0
def register_command(command_name, logger):
    from chimerax.core.commands import CmdDesc, register, StringArg, BoolArg, NonNegativeIntArg, Or
    from chimerax.core.commands import NonNegativeFloatArg, DynamicEnum, ListOf, FloatArg, EnumOf
    from chimerax.atomic import ResiduesArg
    from chimerax.map import MapArg
    desc = CmdDesc(required=[('residues', ResiduesArg),
                             ('res_type', StringArg)],
                   keyword=[
                       ('angle_slop', FloatArg),
                       ('bfactor', FloatArg),
                       ('criteria', Or(ListOf(NonNegativeIntArg), StringArg)),
                       ('density', MapArg),
                       ('dist_slop', FloatArg),
                       ('hbond_allowance', FloatArg),
                       ('ignore_other_models', BoolArg),
                       ('rot_lib',
                        DynamicEnum(logger.session.rotamers.library_names)),
                       ('log', BoolArg),
                       ('preserve', NonNegativeFloatArg),
                       ('relax', BoolArg),
                       ('retain', BoolArg),
                       ('score_method', EnumOf(('sum', 'num'))),
                       ('overlap_cutoff', FloatArg),
                   ],
                   synopsis='Swap amino acid side chain(s)')
    register("swapaa", desc, swap_aa, logger=logger)

    desc = CmdDesc(required=[('residues', ResiduesArg),
                             ('res_type', StringArg)],
                   keyword=[
                       ('rot_lib',
                        DynamicEnum(logger.session.rotamers.library_names)),
                       ('log', BoolArg),
                   ],
                   synopsis='Show possible side-chain rotamers')
    register("swapaa interactive", desc, rotamers, logger=logger)
Ejemplo n.º 10
0
 def save_args(self, _name=name):
     from .mapargs import MapRegionArg, Int1or3Arg
     from chimerax.core.commands import BoolArg, ModelsArg, EnumOf, \
         RepeatOf, IntArg, ListOf
     args = {'models': ModelsArg}
     if _name == "Chimera map":
         args.update({
             'append':
             BoolArg,
             'base_index':
             IntArg,
             'chunk_shapes':
             ListOf(
                 EnumOf(('zyx', 'zxy', 'yxz', 'yzx', 'xzy',
                         'xyz'))),
             'compress':
             BoolArg,
             'compress_method':
             EnumOf(
                 ('zlib', 'lzo', 'bzip2', 'blosc',
                  'blosc:blosclz', 'blosc:lz4', 'blosc:lz4hc',
                  'blosc:snappy', 'blosc:zlib', 'blosc:zstd')),
             'compress_shuffle':
             BoolArg,
             'compress_level':
             IntArg,
             'mask_zone':
             BoolArg,
             'region':
             MapRegionArg,
             'subsamples':
             RepeatOf(Int1or3Arg),
             'step':
             Int1or3Arg,
         })
     return args
Ejemplo n.º 11
0
    for m, values in ud_positions.items():
        undo_state.add(m, "display_positions", *values)
    for m, values in ud_display.items():
        undo_state.add(m, "display", *values)
    if only:
        mset = set(models)
        mset.update(ancestor_models(models))
        for m in session.models.list():
            if m not in mset:
                undo_state.add(m, "display", m.display, False)
                m.display = False


from chimerax.core.commands import ListOf, EnumOf, Annotation
WhatArg = ListOf(
    EnumOf(('atoms', 'bonds', 'pseudobonds', 'pbonds', 'cartoons', 'ribbons',
            'surfaces', 'models')))


class TargetArg(Annotation):
    '''
    Character string indicating what to show or hide,
    a = atoms, b = bonds, p = pseudobonds, c = cartoons, r = cartoons, s = surfaces, m = models.
    '''
    name = 'object type'

    @staticmethod
    def parse(text, session):
        from chimerax.core.commands import StringArg
        token, text, rest = StringArg.parse(text, session)
        target_chars = {
Ejemplo n.º 12
0
from chimerax.atomic import AtomsArg, selected_atoms
from chimerax.core.commands import BoolArg, CmdDesc, StringArg, DynamicEnum, ListOf, NoArg, Or, EmptyArg

from SEQCROW.finders import AtomSpec
from SEQCROW.residue_collection import ResidueCollection, Residue


substitute_description = CmdDesc(
    required=[("selection", Or(AtomsArg, EmptyArg))], \
    keyword=[
        (
            "substituents",
            ListOf(
                DynamicEnum(
                    Substituent.list, \
                    name="substituent", \
                    case_sensitive=True, \
                    url="http://catalysttrends.wheelergroupresearch.com/AaronTools/substituents.php")
            )
        ),
        ("newName", ListOf(StringArg)),
        ("guessAttachment", BoolArg),
        ("modify", BoolArg),
        ("minimize", BoolArg),
        ("newResidue", BoolArg),
        ("useRemoteness", BoolArg),
        ("available", NoArg),
    ],
    synopsis="modify substituents"
)
Ejemplo n.º 13
0
                    logger.error("%s does not match any bundles" %
                                 _bundle_string(bundle_name, version))
                    return
            bundles.append(bi)
    kw = {
        "session": session,
        "per_user": user_only,
        "no_deps": no_deps,
    }
    if reinstall is not None:
        kw["reinstall"] = reinstall
    ts.install_bundle(bundles, logger, **kw)


toolshed_install_desc = CmdDesc(required=[("bundle_names",
                                           ListOf(Or(BundleNameArg,
                                                     WheelArg)))],
                                optional=[("version", StringArg)],
                                keyword=[("user_only", BoolArg),
                                         ("reinstall", BoolArg),
                                         ("no_deps", BoolArg)],
                                hidden=["user_only"],
                                synopsis='Install a bundle')


def toolshed_uninstall(session, bundle_names, force_remove=False):
    '''
    Uninstall an installed bundle.

    Parameters
    ----------
    bundle_names : list of bundle names
Ejemplo n.º 14
0
                v = min(r1, v) if r1 >= r0 else max(r1, v)
                if frames is None and v == r1:
                    stop = True
            else:
                f = (float(frame_num - 1) /
                     (frames - 1) if frames > 1 else 1.0)
                v = r0 * (1 - f) + r1 * f
            args.append(fmt % v)
    else:
        args.append(fmt % frame_num)
    return args, stop


def stop_perframe_callbacks(session, handlers=None):

    if not hasattr(session, 'perframe_handlers'):
        from chimerax.core import errors
        raise errors.UserError("No per-frame command active")
    pfh = session.perframe_handlers
    if handlers is None:
        handlers = tuple(pfh)
    for h in handlers:
        session.triggers.remove_handler(h)
        pfh.remove(h)


# -----------------------------------------------------------------------------
#
from chimerax.core.commands import ListOf, FloatArg
RangeArg = ListOf(FloatArg, 2, 3, name='a range')
Ejemplo n.º 15
0
        if version in ["all", "versioned"]:
            _info_path_show(logger, "system", "versioned", what)
        if version in ["all", "unversioned"]:
            _info_path_show(logger, "system", "unversioned", what)
    if which == "all" or which == "user":
        if version in ["all", "versioned"]:
            _info_path_show(logger, "user", "versioned", what)
        if version in ["all", "unversioned"]:
            _info_path_show(logger, "user", "unversioned", what)


path_names = EnumOf(["config", "data", "log", "state", "cache"])
info_path_desc = CmdDesc(optional=[
    ("which", EnumOf(["all", "system", "user"])),
    ("version", EnumOf(["all", "versioned", "unversioned"])),
    ("what", ListOf(path_names)),
],
                         synopsis="Report directory paths")


def _info_path_show(logger, which, version, what):
    if what is None:
        names = path_names.values
    else:
        names = what
    if which == "system":
        which_prefix = "site_"
    else:
        which_prefix = "user_"
    if version == "versioned":
        from chimerax import app_dirs
Ejemplo n.º 16
0
from chimerax.core.commands import BoolArg, CmdDesc, StringArg, DynamicEnum, ListOf, NoArg, Or, EmptyArg

from SEQCROW.residue_collection import ResidueCollection
from SEQCROW.finders import AtomSpec


fuseRing_description = CmdDesc(
    required=[("selection", Or(OrderedAtomsArg, EmptyArg))], \
    keyword=[
        (
            "rings",
            ListOf(
                DynamicEnum(
                    Ring.list,
                    name="ring",
                    case_sensitive=True,
                    #we don't have a page for these
                    #url="http://catalysttrends.wheelergroupresearch.com/AaronTools/rings.php"
                )
            )
        ),
        ("newName", ListOf(StringArg)),
        ("modify", BoolArg),
        ("minimize", BoolArg),
        ("available", NoArg),
    ],
    synopsis="fuse a ring",
    url="https://github.com/QChASM/SEQCROW/wiki/Commands#fuseRing",
)

Ejemplo n.º 17
0
def register_movie_command(logger):

    from chimerax.core.commands import CmdDesc, register, BoolArg, EnumOf, ListOf, IntArg, Int2Arg, StringArg, FloatArg, SaveFolderNameArg, SaveFileNameArg

    from .formats import image_formats, formats, qualities
    ifmts = image_formats
    fmts = tuple(formats.keys())
    record_desc = CmdDesc(
        keyword=[('directory', SaveFolderNameArg), ('pattern', StringArg),
                 ('format', EnumOf(ifmts)), ('size', Int2Arg),
                 ('supersample', IntArg), ('limit', IntArg)],
        synopsis='Start saving frames of a movie to image files')
    register('movie record', record_desc, movie_record, logger=logger)

    from .movie import RESET_CLEAR, RESET_KEEP, RESET_NONE
    reset_modes = (RESET_CLEAR, RESET_KEEP, RESET_NONE)
    encode_desc = CmdDesc(optional=[('output', ListOf(SaveFileNameArg))],
                          keyword=[
                              ('format', EnumOf(fmts)),
                              ('quality', EnumOf(qualities)),
                              ('qscale', IntArg),
                              ('bitrate', FloatArg),
                              ('framerate', FloatArg),
                              ('reset_mode', EnumOf(reset_modes)),
                              ('round_trip', BoolArg),
                              ('wait', BoolArg),
                              ('verbose', BoolArg),
                          ],
                          synopsis='Convert image files into a video file')
    register('movie encode', encode_desc, movie_encode, logger=logger)

    crossfade_desc = CmdDesc(
        optional=[('frames', IntArg)],
        synopsis='Add images to crossfade between current and next frame')
    register('movie crossfade', crossfade_desc, movie_crossfade, logger=logger)

    duplicate_desc = CmdDesc(
        optional=[('frames', IntArg)],
        synopsis='Duplicate the last frame to create a pause in a movie')
    register('movie duplicate', duplicate_desc, movie_duplicate, logger=logger)

    stop_desc = CmdDesc(synopsis='Pause movie recording')
    register('movie stop', stop_desc, movie_stop, logger=logger)

    abort_desc = CmdDesc(
        synopsis='Stop movie recording and delete saved image files')
    register('movie abort', abort_desc, movie_abort, logger=logger)

    reset_desc = CmdDesc(
        optional=[('reset_mode', EnumOf(reset_modes))],
        synopsis='Specify whether to save image files after movie encoding')
    register('movie reset', reset_desc, movie_reset, logger=logger)

    status_desc = CmdDesc(
        synopsis=
        'Report recording status such as number of frames saved to the log')
    register('movie status', status_desc, movie_status, logger=logger)

    formats_desc = CmdDesc(
        synopsis='Report the available video formats to the log')
    register('movie formats', formats_desc, movie_formats, logger=logger)

    ignore_desc = CmdDesc(optional=[('ignore', BoolArg)],
                          synopsis='Ignore subsequent movie commands')
    register('movie ignore', ignore_desc, movie_ignore, logger=logger)
Ejemplo n.º 18
0
    }
    try:
        with urlopen(url, urlencode(params).encode()) as f:
            text = f.read()
            del text
        session.logger.info("%s is subscribed to the ChimeraX %s list" %
                            (email, label))
    except URLError as e:
        session.logger.warning("Failed to subscribed %s to the ChimeraX "
                               "%s list: %s" % (email, label, str(e)))


register_desc = CmdDesc(keyword=[("name", StringArg),
                                 ("email", StringArg),
                                 ("organization", StringArg),
                                 ("research", ListOf(EnumOf(ResearchAreas))),
                                 ("research_other", StringArg),
                                 ("funding", ListOf(EnumOf(FundingSources))),
                                 ("funding_other", StringArg),
                                 ("comment", StringArg),
                                 ("join_discussion", BoolArg),
                                 ("join_announcements", BoolArg)],
                        required_arguments=["name", "email"])


def registration_status(session, verbose=False):
    from .nag import report_status
    report_status(session.logger, verbose)


registration_status_desc = CmdDesc(keyword=[("verbose", NoArg)])