Esempio n. 1
0
def _build_option_parser():
    defaults = LogoOptions()
    parser = DeOptionParser(usage="%prog [options]  < sequence_data.fa > sequence_logo.eps",
                            description=description,
                            version=release_description,
                            add_verbose_options=False
                            )

    io_grp = OptionGroup(parser, "Input/Output Options", )
    data_grp = OptionGroup(parser, "Logo Data Options", )
    trans_grp = OptionGroup(parser, "Transformations", "Optional transformations of the sequence data.")

    format_grp = OptionGroup(parser, "Logo Format Options",
                             "These options control the format and display of the logo.")
    color_grp = OptionGroup(parser, "Color Options",
                            "Colors can be specified using CSS2 syntax. e.g. 'red', '#FF0000', etc.")
    font_grp = OptionGroup(parser, "Font Format Options",
                           "These options provide control over the font sizes and types.")
    advanced_grp = OptionGroup(parser, "Advanced Format Options",
                               "These options provide fine control over the display of the logo.")
    server_grp = OptionGroup(parser, "WebLogo Server",
                             "Run a standalone webserver on a local port.")

    parser.add_option_group(io_grp)
    parser.add_option_group(data_grp)
    parser.add_option_group(trans_grp)
    parser.add_option_group(format_grp)
    parser.add_option_group(color_grp)
    parser.add_option_group(font_grp)
    parser.add_option_group(advanced_grp)
    parser.add_option_group(server_grp)

    # ========================== IO OPTIONS ==========================

    io_grp.add_option("-f", "--fin",
                      dest="fin",
                      action="store",
                      type="file_in",
                      default=None,
                      help="Sequence input file (default: stdin)",
                      metavar="FILENAME")

    io_grp.add_option("", "--upload",
                      dest="upload",
                      action="store",
                      default=None,
                      help="Upload input file from URL",
                      metavar="URL")

    io_grp.add_option("-D", "--datatype",
                      dest="input_parser",
                      action="store", type="dict",
                      default=seq_io,
                      choices=_seq_formats(),
                      help="Type of multiple sequence alignment or position weight matrix file: (%s)"
                           % ', '.join(_seq_names()),
                      metavar="FORMAT")

    io_grp.add_option("-o", "--fout", dest="fout",
                      type="file_out",
                      default=sys.stdout,
                      help="Output file (default: stdout)",
                      metavar="FILENAME")

    io_grp.add_option("-F", "--format",
                      dest="formatter",
                      action="store",
                      type="dict",
                      choices=formatters,
                      metavar="FORMAT",
                      help="Format of output: eps (default), png, png_print, pdf, jpeg, svg, logodata",
                      default=default_formatter)

    # ========================== Data OPTIONS ==========================

    data_grp.add_option("-A", "--sequence-type",
                        dest="alphabet",
                        action="store",
                        type="dict",
                        choices=std_alphabets,
                        help="The type of sequence data: 'protein', 'rna' or 'dna'.",
                        metavar="TYPE")

    data_grp.add_option("-a", "--alphabet",
                        dest="alphabet",
                        action="store",
                        help="The set of symbols to count, e.g. 'AGTC'. "
                             "All characters not in the alphabet are ignored. "
                             "'actual' can be specified to use an alphabet derived from the symbols present in the input data. "
                             "If neither the alphabet nor sequence-type are specified then weblogo will examine the input data and make an educated guess. "
                             "See also --sequence-type, --ignore-lower-case")

    data_grp.add_option("-U", "--units",
                        dest="unit_name",
                        action="store",
                        choices=list(std_units.keys()),
                        type="choice",
                        default=defaults.unit_name,
                        help="A unit of entropy ('bits' (default), 'nats', 'digits'), or a unit of free energy ('kT', 'kJ/mol', 'kcal/mol'), or 'probability' for probabilities",
                        metavar="NUMBER")

    data_grp.add_option("", "--composition",
                        dest="composition",
                        action="store",
                        type="string",
                        default="auto",
                        help="The expected composition of the sequences: 'auto' (default), 'equiprobable', 'none' (do not perform any compositional adjustment), a CG percentage, a species name (e.g. 'E. coli', 'H. sapiens'), or an explicit distribution (e.g. \"{'A':10, 'C':40, 'G':40, 'T':10}\"). The automatic option uses a typical distribution for proteins and equiprobable distribution for everything else. ",
                        metavar="COMP.")

    data_grp.add_option("", "--weight",
                        dest="weight",
                        action="store",
                        type="float",
                        default=None,
                        help="The weight of prior data.  Default depends on alphabet length",
                        metavar="NUMBER")

    data_grp.add_option("-i", "--first-index",
                        dest="first_index",
                        action="store",
                        type="int",
                        default=1,
                        help="Index of first position in sequence data (default: 1)",
                        metavar="INDEX")

    data_grp.add_option("-l", "--lower",
                        dest="logo_start",
                        action="store",
                        type="int",
                        help="Lower bound of sequence to display",
                        metavar="INDEX")

    data_grp.add_option("-u", "--upper",
                        dest="logo_end",
                        action="store",
                        type="int",
                        help="Upper bound of sequence to display",
                        metavar="INDEX")

    # ========================== Transformation OPTIONS ==========================

    # FIXME Add test?
    trans_grp.add_option("", "--ignore-lower-case",
                         dest="ignore_lower_case",
                         action="store_true",
                         default=False,
                         help="Disregard lower case letters and only count upper case letters in sequences."
                         )

    trans_grp.add_option("", "--reverse",
                         dest="reverse",
                         action="store_true",
                         default=False,
                         help="reverse sequences",
                         )

    trans_grp.add_option("", "--complement",
                         dest="complement",
                         action="store_true",
                         default=False,
                         help="complement nucleic sequences",
                         )

    trans_grp.add_option("", "--revcomp",
                         dest="revcomp",
                         action="store_true",
                         default=False,
                         help="reverse complement nucleic sequences",
                         )

    # ========================== FORMAT OPTIONS ==========================

    format_grp.add_option("-s", "--size",
                          dest="stack_width",
                          action="store",
                          type="dict",
                          choices=std_sizes,
                          metavar="LOGOSIZE",
                          default=defaults.stack_width,
                          help="Specify a standard logo size (small, medium (default), large)")

    format_grp.add_option("-n", "--stacks-per-line",
                          dest="stacks_per_line",
                          action="store",
                          type="int",
                          help="Maximum number of logo stacks per logo line. (default: %default)",
                          default=defaults.stacks_per_line,
                          metavar="COUNT")

    format_grp.add_option("-t", "--title",
                          dest="logo_title",
                          action="store",
                          type="string",
                          help="Logo title text.",
                          default=defaults.logo_title,
                          metavar="TEXT")

    format_grp.add_option("", "--label",
                          dest="logo_label",
                          action="store",
                          type="string",
                          help="A figure label, e.g. '2a'",
                          default=defaults.logo_label,
                          metavar="TEXT")

    format_grp.add_option("-X", "--show-xaxis",
                          action="store",
                          type="boolean",
                          default=defaults.show_xaxis,
                          metavar="YES/NO",
                          help="Display sequence numbers along x-axis? (default: %default)")

    format_grp.add_option("-x", "--xlabel",
                          dest="xaxis_label",
                          action="store",
                          type="string",
                          default=defaults.xaxis_label,
                          help="X-axis label",
                          metavar="TEXT")

    format_grp.add_option("", "--annotate",
                          dest="annotate",
                          action="store",
                          type="string",
                          default=None,
                          help="A comma separated list of custom stack annotations, e.g. '1,3,4,5,6,7'.  Annotation list must be same length as sequences.",
                          metavar="TEXT")

    format_grp.add_option("", "--rotate-numbers",
                          dest="rotate_numbers",
                          action="store",
                          type="boolean",
                          default=defaults.rotate_numbers,
                          help="Draw X-axis numbers with vertical orientation (default: %default).",
                          metavar="YES/NO")

    format_grp.add_option("", "--number-interval",
                          dest="number_interval",
                          action="store",
                          type="float",
                          default=defaults.number_interval,
                          help="Distance between numbers on X-axis (default: %s)" % defaults.number_interval,
                          metavar="NUMBER")

    format_grp.add_option("-S", "--yaxis",
                          dest="yaxis_scale",
                          action="store",
                          type="float",
                          help="Height of yaxis in units. (Default: Maximum value with uninformative prior.)",
                          metavar="UNIT")

    format_grp.add_option("-Y", "--show-yaxis",
                          action="store",
                          type="boolean",
                          dest="show_yaxis",
                          default=defaults.show_yaxis,
                          metavar="YES/NO",
                          help="Display entropy scale along y-axis? (default: %default)")

    format_grp.add_option("-y", "--ylabel",
                          dest="yaxis_label",
                          action="store",
                          type="string",
                          help="Y-axis label (default depends on plot type and units)",
                          metavar="TEXT")

    format_grp.add_option("-E", "--show-ends",
                          action="store",
                          type="boolean",
                          default=defaults.show_ends,
                          metavar="YES/NO",
                          help="Label the ends of the sequence? (default: %default)")

    format_grp.add_option("-P", "--fineprint",
                          dest="fineprint",
                          action="store",
                          type="string",
                          default=defaults.fineprint,
                          help="The fine print (default: weblogo version)",
                          metavar="TEXT")

    format_grp.add_option("", "--ticmarks",
                          dest="yaxis_tic_interval",
                          action="store",
                          type="float",
                          default=defaults.yaxis_tic_interval,
                          help="Distance between ticmarks (default: %default)",
                          metavar="NUMBER")

    format_grp.add_option("", "--errorbars",
                          dest="show_errorbars",
                          action="store",
                          type="boolean",
                          default=defaults.show_errorbars,
                          metavar="YES/NO",
                          help="Display error bars? (default: %default)")

    format_grp.add_option("", "--reverse-stacks",
                          dest="reverse_stacks",
                          action="store",
                          type="boolean",
                          default=defaults.show_errorbars,
                          metavar="YES/NO",
                          help="Draw stacks with largest letters on top? (default: %default)")

    # ========================== Color OPTIONS ==========================
    # TODO: Future Feature
    # color_grp.add_option( "-K", "--color-key",
    #    dest= "show_color_key",
    #    action="store",
    #    type = "boolean",
    #    default= defaults.show_color_key,
    #    metavar = "YES/NO",
    #    help="Display a color key (default: %default)")

    color_scheme_choices = list(std_color_schemes.keys())
    color_scheme_choices.sort()
    color_grp.add_option("-c", "--color-scheme",
                         dest="color_scheme",
                         action="store",
                         type="dict",
                         choices=std_color_schemes,
                         metavar="SCHEME",
                         default=None,  # Auto
                         help="Specify a standard color scheme (%s)" % \
                              ", ".join(color_scheme_choices))

    color_grp.add_option("-C", "--color",
                         dest="colors",
                         action="append",
                         metavar="COLOR SYMBOLS DESCRIPTION ",
                         nargs=3,
                         default=[],
                         help="Specify symbol colors, e.g. --color black AG 'Purine' --color red TC 'Pyrimidine' ")

    color_grp.add_option("", "--default-color",
                         dest="default_color",
                         action="store",
                         metavar="COLOR",
                         default=defaults.default_color,
                         help="Symbol color if not otherwise specified.")

    # ========================== Font options =========================

    font_grp.add_option("", "--fontsize",
                        dest="fontsize",
                        action="store",
                        type="float",
                        default=defaults.fontsize,
                        help="Regular text font size in points (default: %s)" % defaults.fontsize,
                        metavar="POINTS")

    font_grp.add_option("", "--title-fontsize",
                        dest="title_fontsize",
                        action="store",
                        type="float",
                        default=defaults.title_fontsize,
                        help="Title text font size in points (default: %s)" % defaults.title_fontsize,
                        metavar="POINTS")

    font_grp.add_option("", "--small-fontsize",
                        dest="small_fontsize",
                        action="store",
                        type="float",
                        default=defaults.small_fontsize,
                        help="Small text font size in points (default: %s)" % defaults.small_fontsize,
                        metavar="POINTS")

    font_grp.add_option("", "--number-fontsize",
                        dest="number_fontsize",
                        action="store",
                        type="float",
                        default=defaults.number_fontsize,
                        help="Axis numbers font size in points (default: %s)" % defaults.number_fontsize,
                        metavar="POINTS")

    font_grp.add_option("", "--text-font",
                        dest="text_font",
                        action="store",
                        type="string",
                        default=defaults.text_font,
                        help="Specify font for labels (default: %s)" % defaults.text_font,
                        metavar="FONT")

    font_grp.add_option("", "--logo-font",
                        dest="logo_font",
                        action="store",
                        type="string",
                        default=defaults.text_font,
                        help="Specify font for logo (default: %s)" % defaults.logo_font,
                        metavar="FONT")

    font_grp.add_option("", "--title-font",
                        dest="title_font",
                        action="store",
                        type="string",
                        default=defaults.title_font,
                        help="Specify font for title (default: %s)" % defaults.title_font,
                        metavar="FONT")

    # ========================== Advanced options =========================

    advanced_grp.add_option("-W", "--stack-width",
                            dest="stack_width",
                            action="store",
                            type="float",
                            default=defaults.stack_width,
                            help="Width of a logo stack (default: %s)" % defaults.stack_width,
                            metavar="POINTS")

    advanced_grp.add_option("", "--aspect-ratio",
                            dest="stack_aspect_ratio",
                            action="store",
                            type="float",
                            default=defaults.stack_aspect_ratio,
                            help="Ratio of stack height to width (default: %s)" % defaults.stack_aspect_ratio,
                            metavar="POINTS")

    advanced_grp.add_option("", "--box",
                            dest="show_boxes",
                            action="store",
                            type="boolean",
                            default=False,
                            metavar="YES/NO",
                            help="Draw boxes around symbols? (default: no)")

    advanced_grp.add_option("", "--resolution",
                            dest="resolution",
                            action="store",
                            type="float",
                            default=96,
                            help="Bitmap resolution in dots per inch (DPI).  (Default: 96 DPI, except png_print, 600 DPI) Low resolution bitmaps (DPI<300) are antialiased.",
                            metavar="DPI")

    advanced_grp.add_option("", "--scale-width",
                            dest="scale_width",
                            action="store",
                            type="boolean",
                            default=True,
                            metavar="YES/NO",
                            help="Scale the visible stack width by the fraction of symbols in the column?  (I.e. columns with many gaps of unknowns are narrow.)  (Default: yes)")

    advanced_grp.add_option("", "--debug",
                            action="store",
                            type="boolean",
                            default=defaults.debug,
                            metavar="YES/NO",
                            help="Output additional diagnostic information. (Default: %default)")

    advanced_grp.add_option("", "--errorbar-fraction",
                            dest="errorbar_fraction",
                            action="store",
                            type="float",
                            default=defaults.errorbar_fraction,
                            help="Sets error bars display proportion (default: %s)" % defaults.errorbar_fraction,
                            metavar="NUMBER")

    advanced_grp.add_option("", "--errorbar-width-fraction",
                            dest="errorbar_width_fraction",
                            action="store",
                            type="float",
                            default=defaults.errorbar_width_fraction,
                            help="Sets error bars width display proportion (default: %s)" % defaults.errorbar_width_fraction,
                            metavar="NUMBER")

    advanced_grp.add_option("", "--errorbar-gray",
                            dest="errorbar_gray",
                            action="store",
                            type="float",
                            default=defaults.errorbar_gray,
                            help="Sets error bars' gray scale percentage (default: %s)" % defaults.errorbar_gray,
                            metavar="NUMBER")

    # ========================== Server options =========================
    server_grp.add_option("", "--serve",
                          dest="serve",
                          action="store_true",
                          default=False,
                          help="Start a standalone WebLogo server for creating sequence logos.")

    server_grp.add_option("", "--port",
                          dest="port",
                          action="store",
                          type="int",
                          default=8080,
                          help="Listen to this local port. (Default: %default)",
                          metavar="PORT")

    return parser
Esempio n. 2
0
def _build_option_parser():
    defaults = LogoOptions()
    parser = DeOptionParser(
        usage="%prog [options] < sequence_data.fa > sequence_logo.eps",
        description=description,
        version=release_description,
        add_verbose_options=False,
    )

    io_grp = OptionGroup(parser, "Input/Output Options")
    data_grp = OptionGroup(parser, "Logo Data Options")
    heat_grp = OptionGroup(
        parser,
        "Heat Map Options",
        "These options affect the format of the sequence logo in the heat map mode (See also Color Options).",
    )
    color_grp = OptionGroup(
        parser,
        "Color Options",
        "Colors can be specified using CSS2 syntax. e.g. 'red', '#FF0000', etc (See also Heat Map Options).",
    )
    trans_grp = OptionGroup(parser, "Transformations", "Optional transformations of the sequence data.")
    format_grp = OptionGroup(
        parser, "Logo Format Options", "These options control the format and display of the sequence logo."
    )
    advanced_grp = OptionGroup(
        parser, "Advanced Format Options", "These options provide fine control over the display of the sequence logo."
    )
    server_grp = OptionGroup(parser, "HeatLogo Server", "Run a standalone webserver on a local port.")

    parser.add_option_group(io_grp)
    parser.add_option_group(data_grp)
    parser.add_option_group(heat_grp)
    parser.add_option_group(color_grp)
    parser.add_option_group(trans_grp)
    parser.add_option_group(format_grp)
    parser.add_option_group(advanced_grp)
    parser.add_option_group(server_grp)

    # ========================== IO OPTIONS ==========================

    io_grp.add_option(
        "-i",
        "--input",
        dest="fin",
        action="store",
        type="file_in",
        default=None,
        help="Sequence input file (default: stdin)",
        metavar="FILENAME",
    )

    # Add position weight matrix formats to input parsers by hand
    fin_choices = dict(seq_io.format_names())
    fin_choices["transfac"] = "transfac"
    formatters_string = formatters.keys()
    io_grp.add_option(
        "-f",
        "--input-format",
        dest="input_parser",
        action="store",
        type="dict",
        default=seq_io,
        choices=fin_choices,  # seq_io.format_names(),
        help="Type of multiple sequence alignment or position weight matrix file: (%s, transfac)"
        % ", ".join([f.names[0] for f in seq_io.formats]),
        metavar="FORMAT",
    )

    io_grp.add_option(
        "-o",
        "--output",
        dest="fout",
        type="file_out",
        default=sys.stdout,
        help="Output file (default: stdout)",
        metavar="FILENAME",
    )

    io_grp.add_option(
        "-F",
        "--output-format",
        dest="formatter",
        action="store",
        type="dict",
        metavar="FORMAT",
        choices=formatters,
        help="Format of output: eps (default), png, png_print, pdf, jpeg, svg, logodata",
        default=default_formatter,
    )

    io_grp.add_option(
        "",
        "--pwm-prob",
        dest="pwm_prob",
        action="store",
        type="string",
        metavar="FILENAME",
        default=None,
        help="Output position weight matrix composed of logarithmic probabilities",
    )

    io_grp.add_option(
        "",
        "--pwm-pval",
        dest="pwm_pval",
        action="store",
        type="string",
        metavar="FILENAME",
        default=None,
        help="Output position weight matrix of P-values",
    )

    # ========================== Data OPTIONS ==========================

    data_grp.add_option(
        "-A",
        "--sequence-type",
        dest="alphabet",
        action="store",
        type="dict",
        choices=std_alphabets,
        help="The type of sequence data: 'protein', 'rna', 'dna', or 'codon' (See also: --codon-frame).",
        metavar="TYPE",
    )

    data_grp.add_option(
        "-a",
        "--alphabet",
        dest="alphabet",
        action="store",
        help="The set of symbols to count, e.g. 'AGTC'. All characters not in the alphabet are ignored. If neither the alphabet nor sequence-type are specified then heatlogo will examine the input data and make an educated guess. (See also: --sequence-type, --ignore-lower-case)",
    )

    data_grp.add_option(
        "-R",
        "--codon-frame",
        dest="codon_frame",
        action="store",
        type="int",
        default=defaults.codon_frame,
        help="Codon reading frame (default: +1): [+1, +2, +3] indicate the forward strand frame, and [-1, -2, -3] indicate the reverse strand frame",
        metavar="NUMBER",
    )

    data_grp.add_option(
        "-b",
        "--composition",
        dest="composition",
        action="store",
        type="string",
        default="auto",
        help="The expected composition of the sequences. HeatLogo accepts four types of formats: (1) String: 'auto' (default), 'equiprobable', or 'none' (do not perform any compositional adjustment, Heatmap: off). The automatic option uses a typical distribution for proteins and equiprobable distribution for everything else. (2) CG percentage. (3) Explicit distribution of bases, amino acids, or codons (format: \"{'A':10, 'C':40, 'G':40, 'T':10}\"). (4) Tab-delimited file containing each symbol and its expected composition in each line.",
        metavar="COMP.",
    )

    data_grp.add_option(
        "-w",
        "--weight",
        dest="weight",
        action="store",
        type="float",
        default=None,
        help="The weight of prior data.  Default depends on alphabet length",
        metavar="NUMBER",
    )

    data_grp.add_option(
        "-N",
        "--second-data",
        dest="second_data",
        action="store",
        type="file_in",
        default=None,
        help="Second dataset file to compare with the input. HeatLogo measures statistical significance at each column by comparing the number of symbols appered in input and second datasets. Accepted formats: %s."
        % ", ".join([f.names[0] for f in seq_io.formats]),
        metavar="FILENAME",
    )

    data_grp.add_option(
        "-B",
        "--second-composition",
        dest="second_composition",
        action="store",
        type="string",
        default="auto",
        help="The expected composition of the second sample sequences. The supported formats are the same as those of '--composition'.",
        metavar="2nd-COMP.",
    )

    data_grp.add_option(
        "-W",
        "--second-weight",
        dest="second_weight",
        action="store",
        type="float",
        default=None,
        help="The prior weight for the second dataset.  Default depends on alphabet length",
        metavar="NUMBER",
    )

    data_grp.add_option(
        "-U",
        "--units",
        dest="unit_name",
        action="store",
        choices=std_units.keys(),
        type="choice",
        default=defaults.unit_name,
        help="A unit of entropy ('bits' (default), 'nats', 'digits'), or a unit of free energy ('kT', 'kJ/mol', 'kcal/mol'), or 'probability' for probabilities",
        metavar="NUMBER",
    )

    # ======================== Heat Map OPTIONS =========================

    stats_choices = stats_tests.keys()
    stats_choices.sort()
    heat_grp.add_option(
        "-S",
        "--stats-test",
        dest="stats_func",
        action="store",
        type="dict",
        choices=stats_tests,
        metavar="TEST",
        default=defaults.stats_func,
        help="Specify a statistical test to calculate p-values: %s (default: t-test)" % ", ".join(stats_choices),
    )

    heat_color_choices = heat_color_schemes.keys()
    heat_color_choices.sort()
    heat_grp.add_option(
        "-H",
        "--heat-scheme",
        dest="heat_scheme",
        action="store",
        type="dict",
        choices=heat_color_schemes,
        metavar="SCHEME",
        default=defaults.heat_scheme,
        help="Specify a heatmap color scheme (%s) (See also: '--p-color')" % ", ".join(heat_color_choices),
    )

    heat_grp.add_option(
        "",
        "--p-color",
        dest="p_colors",
        action="append",
        metavar="COLOR PVALUE",
        nargs=2,
        default=[],
        help="Specify a color for a p-value (p-value range: -1 < p < 1), e.g. --p-color blue 0.5 --p-color red 0.25",
    )

    heat_grp.add_option(
        "",
        "--hide-colorkey",
        dest="show_colorkey",
        action="store_false",
        default=True,
        help="Toggle switch to hide a heatmap color key on the right side of a sequence logo (default: off)",
    )

    # ========================== Color OPTIONS ==========================

    color_scheme_choices = std_color_schemes.keys()
    color_scheme_choices.sort()
    color_grp.add_option(
        "-C",
        "--color-scheme",
        dest="color_scheme",
        action="store",
        type="dict",
        choices=std_color_schemes,
        metavar="SCHEME",
        default=None,  # Auto
        help="Specify a standard color scheme (%s) (Heatmap: off)" % ", ".join(color_scheme_choices),
    )

    color_grp.add_option(
        "",
        "--c-color",
        dest="colors",
        action="append",
        metavar="COLOR SYMBOLS DESCRIPTION ",
        nargs=3,
        default=[],
        help="Specify symbol colors, e.g.  --c-color black AG 'Purine' --c-color red TC 'Pyrimidine', (Heatmap: off)",
    )

    color_grp.add_option(
        "",
        "--default-color",
        dest="default_color",
        action="store",
        metavar="COLOR",
        default=defaults.default_color,
        help="Symbol color if not otherwise specified.",
    )

    # ========================== Transformation OPTIONS ==========================

    # FIXME Add test?
    trans_grp.add_option(
        "",
        "--ignore-lower-case",
        dest="ignore_lower_case",
        action="store_true",
        default=False,
        help="Disregard lower case letters and only count upper case letters in sequences.",
    )

    trans_grp.add_option("", "--reverse", dest="reverse", action="store_true", default=False, help="reverse sequences")

    trans_grp.add_option(
        "", "--complement", dest="complement", action="store_true", default=False, help="complement DNA sequences"
    )

    # ========================== FORMAT OPTIONS ==========================

    format_grp.add_option(
        "-I",
        "--first-index",
        dest="first_index",
        action="store",
        type="int",
        default=1,
        help="Index of first position in sequence data (default: 1)",
        metavar="INDEX",
    )

    format_grp.add_option(
        "-s",
        "--start",
        dest="logo_start",
        action="store",
        type="int",
        help="Lower bound (i.e. start position) of sequence to display",
        metavar="INDEX",
    )

    format_grp.add_option(
        "-e",
        "--end",
        dest="logo_end",
        action="store",
        type="int",
        help="Upper bound (i.e. end position) of sequence to display",
        metavar="INDEX",
    )

    format_grp.add_option(
        "-L",
        "--size",
        dest="stack_width",
        action="store",
        type="dict",
        choices=std_sizes,
        metavar="LOGOSIZE",
        default=defaults.stack_width,
        help="Specify a standard logo size (small, medium (default), large)",
    )

    format_grp.add_option(
        "-n",
        "--stacks-per-line",
        dest="stacks_per_line",
        action="store",
        type="int",
        help="Maximum number of logo stacks per logo line. (default: %default)",
        default=defaults.stacks_per_line,
        metavar="COUNT",
    )

    format_grp.add_option(
        "-t",
        "--title",
        dest="logo_title",
        action="store",
        type="string",
        help="Logo title text.",
        default=defaults.logo_title,
        metavar="TEXT",
    )

    format_grp.add_option(
        "-l",
        "--label",
        dest="logo_label",
        action="store",
        type="string",
        help="A figure label, e.g. '2a'",
        default=defaults.logo_label,
        metavar="TEXT",
    )

    format_grp.add_option(
        "-X",
        "--show-xaxis",
        action="store",
        type="boolean",
        default=defaults.show_xaxis,
        metavar="YES/NO",
        help="Display sequence numbers along x-axis? (default: %default)",
    )

    format_grp.add_option(
        "-x",
        "--xlabel",
        dest="xaxis_label",
        action="store",
        type="string",
        default=defaults.xaxis_label,
        help="X-axis label",
        metavar="TEXT",
    )

    format_grp.add_option(
        "",
        "--annotate",
        dest="annotate",
        action="store",
        type="string",
        default=None,
        help="A comma separated list of custom stack annotations, e.g. '1,3,4,5,6,7'.  Annotation list must be same length as sequences.",
        metavar="TEXT",
    )

    format_grp.add_option(
        "-M",
        "--yaxis",
        dest="yaxis_scale",
        action="store",
        type="float",
        help="Height of yaxis in units. (Default: Maximum value with uninformative prior.)",
        metavar="UNIT",
    )

    format_grp.add_option(
        "-Y",
        "--show-yaxis",
        action="store",
        type="boolean",
        dest="show_yaxis",
        default=defaults.show_yaxis,
        metavar="YES/NO",
        help="Display entropy scale along y-axis? (default: %default)",
    )

    format_grp.add_option(
        "-y",
        "--ylabel",
        dest="yaxis_label",
        action="store",
        type="string",
        help="Y-axis label (default depends on plot type and units)",
        metavar="TEXT",
    )

    format_grp.add_option(
        "-E",
        "--show-ends",
        action="store",
        type="boolean",
        default=defaults.show_ends,
        metavar="YES/NO",
        help="Label the ends of the sequence? (default: %default)",
    )

    format_grp.add_option(
        "-P",
        "--fineprint",
        dest="fineprint",
        action="store",
        type="string",
        default=defaults.fineprint,
        help="The fine print (default: heatlogo version)",
        metavar="TEXT",
    )

    format_grp.add_option(
        "",
        "--ticmarks",
        dest="yaxis_tic_interval",
        action="store",
        type="float",
        default=defaults.yaxis_tic_interval,
        help="Distance between ticmarks (default: %default)",
        metavar="NUMBER",
    )

    format_grp.add_option(
        "",
        "--errorbars",
        dest="show_errorbars",
        action="store",
        type="boolean",
        default=defaults.show_errorbars,
        metavar="YES/NO",
        help="Display error bars? (default: %default)",
    )

    format_grp.add_option(
        "",
        "--reverse-stacks",
        dest="reverse_stacks",
        action="store",
        type="boolean",
        default=defaults.show_errorbars,
        metavar="YES/NO",
        help="Draw stacks with largest letters on top? (default: %default)",
    )

    # ========================== Advanced options =========================

    advanced_grp.add_option(
        "-k",
        "--stack-width",
        dest="stack_width",
        action="store",
        type="float",
        default=defaults.stack_width,
        help="Width of a logo stack (default: %s)" % defaults.stack_width,
        metavar="POINTS",
    )

    advanced_grp.add_option(
        "",
        "--aspect-ratio",
        dest="stack_aspect_ratio",
        action="store",
        type="float",
        default=defaults.stack_aspect_ratio,
        help="Ratio of stack height to width (default: %s)" % defaults.stack_aspect_ratio,
        metavar="POINTS",
    )

    advanced_grp.add_option(
        "",
        "--box",
        dest="show_boxes",
        action="store",
        type="boolean",
        default=False,
        metavar="YES/NO",
        help="Draw boxes around symbols? (default: no)",
    )

    advanced_grp.add_option(
        "",
        "--resolution",
        dest="resolution",
        action="store",
        type="float",
        default=96,
        help="Bitmap resolution in dots per inch (DPI).  (Default: 96 DPI, except png_print, 600 DPI) Low resolution bitmaps (DPI<300) are antialiased.",
        metavar="DPI",
    )

    advanced_grp.add_option(
        "",
        "--scale-width",
        dest="scale_width",
        action="store",
        type="boolean",
        default=True,
        metavar="YES/NO",
        help="Scale the visible stack width by the fraction of symbols in the column?  (i.e. columns with many gaps of unknowns are narrow.)  (Default: yes)",
    )

    # ========================== Server options =========================
    server_grp.add_option(
        "",
        "--serve",
        dest="serve",
        action="store_true",
        default=False,
        help="Start a standalone HeatLogo server for creating sequence logos.",
    )

    server_grp.add_option(
        "",
        "--port",
        dest="port",
        action="store",
        type="int",
        default=8080,
        help="Listen to this local port. (Default: %default)",
        metavar="PORT",
    )

    return parser
Esempio n. 3
0
def _build_option_parser():
    defaults = LogoOptions()
    parser = DeOptionParser(usage="%prog [options]  < sequence_data.fa > sequence_logo.eps",
                            description=description,
                            version=release_description,
                            add_verbose_options=False
                            )

    io_grp = OptionGroup(parser, "Input/Output Options", )
    data_grp = OptionGroup(parser, "Logo Data Options", )
    trans_grp = OptionGroup(parser, "Transformations", "Optional transformations of the sequence data.")

    format_grp = OptionGroup(parser, "Logo Format Options",
                             "These options control the format and display of the logo.")
    color_grp = OptionGroup(parser, "Color Options",
                            "Colors can be specified using CSS2 syntax. e.g. 'red', '#FF0000', etc.")
    font_grp = OptionGroup(parser, "Font Format Options",
                           "These options provide control over the font sizes and types.")
    advanced_grp = OptionGroup(parser, "Advanced Format Options",
                               "These options provide fine control over the display of the logo.")
    server_grp = OptionGroup(parser, "WebLogo Server",
                             "Run a standalone webserver on a local port.")

    parser.add_option_group(io_grp)
    parser.add_option_group(data_grp)
    parser.add_option_group(trans_grp)
    parser.add_option_group(format_grp)
    parser.add_option_group(color_grp)
    parser.add_option_group(font_grp)
    parser.add_option_group(advanced_grp)
    parser.add_option_group(server_grp)

    # ========================== IO OPTIONS ==========================

    io_grp.add_option("-f", "--fin",
                      dest="fin",
                      action="store",
                      type="file_in",
                      default=None,
                      help="Sequence input file (default: stdin)",
                      metavar="FILENAME")

    io_grp.add_option("", "--upload",
                      dest="upload",
                      action="store",
                      default=None,
                      help="Upload input file from URL",
                      metavar="URL")

    io_grp.add_option("-D", "--datatype",
                      dest="input_parser",
                      action="store", type="dict",
                      default=seq_io,
                      choices=_seq_formats(),
                      help="Type of multiple sequence alignment or position weight matrix file: (%s)"
                           % ', '.join(_seq_names()),
                      metavar="FORMAT")

    io_grp.add_option("-o", "--fout", dest="fout",
                      type="file_out",
                      default=sys.stdout,
                      help="Output file (default: stdout)",
                      metavar="FILENAME")

    io_grp.add_option("-F", "--format",
                      dest="formatter",
                      action="store",
                      type="dict",
                      choices=formatters,
                      metavar="FORMAT",
                      help="Format of output: eps (default), png, png_print, pdf, jpeg, svg, logodata",
                      default=default_formatter)

    # ========================== Data OPTIONS ==========================

    data_grp.add_option("-A", "--sequence-type",
                        dest="alphabet",
                        action="store",
                        type="dict",
                        choices=std_alphabets,
                        help="The type of sequence data: 'protein', 'rna' or 'dna'.",
                        metavar="TYPE")

    data_grp.add_option("-a", "--alphabet",
                        dest="alphabet",
                        action="store",
                        help="The set of symbols to count, e.g. 'AGTC'. "
                             "All characters not in the alphabet are ignored. "
                             "If neither the alphabet nor sequence-type are specified then weblogo will examine the input data and make an educated guess. "
                             "See also --sequence-type, --ignore-lower-case")

    data_grp.add_option("-U", "--units",
                        dest="unit_name",
                        action="store",
                        choices=list(std_units.keys()),
                        type="choice",
                        default=defaults.unit_name,
                        help="A unit of entropy ('bits' (default), 'nats', 'digits'), or a unit of free energy ('kT', 'kJ/mol', 'kcal/mol'), or 'probability' for probabilities",
                        metavar="NUMBER")

    data_grp.add_option("", "--composition",
                        dest="composition",
                        action="store",
                        type="string",
                        default="auto",
                        help="The expected composition of the sequences: 'auto' (default), 'equiprobable', 'none' (do not perform any compositional adjustment), a CG percentage, a species name (e.g. 'E. coli', 'H. sapiens'), or an explicit distribution (e.g. \"{'A':10, 'C':40, 'G':40, 'T':10}\"). The automatic option uses a typical distribution for proteins and equiprobable distribution for everything else. ",
                        metavar="COMP.")

    data_grp.add_option("", "--weight",
                        dest="weight",
                        action="store",
                        type="float",
                        default=None,
                        help="The weight of prior data.  Default depends on alphabet length",
                        metavar="NUMBER")

    data_grp.add_option("-i", "--first-index",
                        dest="first_index",
                        action="store",
                        type="int",
                        default=1,
                        help="Index of first position in sequence data (default: 1)",
                        metavar="INDEX")

    data_grp.add_option("-l", "--lower",
                        dest="logo_start",
                        action="store",
                        type="int",
                        help="Lower bound of sequence to display",
                        metavar="INDEX")

    data_grp.add_option("-u", "--upper",
                        dest="logo_end",
                        action="store",
                        type="int",
                        help="Upper bound of sequence to display",
                        metavar="INDEX")

    # ========================== Transformation OPTIONS ==========================

    # FIXME Add test?
    trans_grp.add_option("", "--ignore-lower-case",
                         dest="ignore_lower_case",
                         action="store_true",
                         default=False,
                         help="Disregard lower case letters and only count upper case letters in sequences."
                         )

    trans_grp.add_option("", "--reverse",
                         dest="reverse",
                         action="store_true",
                         default=False,
                         help="reverse sequences",
                         )

    trans_grp.add_option("", "--complement",
                         dest="complement",
                         action="store_true",
                         default=False,
                         help="complement nucleic sequences",
                         )

    trans_grp.add_option("", "--revcomp",
                         dest="revcomp",
                         action="store_true",
                         default=False,
                         help="reverse complement nucleic sequences",
                         )

    # ========================== FORMAT OPTIONS ==========================

    format_grp.add_option("-s", "--size",
                          dest="stack_width",
                          action="store",
                          type="dict",
                          choices=std_sizes,
                          metavar="LOGOSIZE",
                          default=defaults.stack_width,
                          help="Specify a standard logo size (small, medium (default), large)")

    format_grp.add_option("-n", "--stacks-per-line",
                          dest="stacks_per_line",
                          action="store",
                          type="int",
                          help="Maximum number of logo stacks per logo line. (default: %default)",
                          default=defaults.stacks_per_line,
                          metavar="COUNT")

    format_grp.add_option("-t", "--title",
                          dest="logo_title",
                          action="store",
                          type="string",
                          help="Logo title text.",
                          default=defaults.logo_title,
                          metavar="TEXT")

    format_grp.add_option("", "--label",
                          dest="logo_label",
                          action="store",
                          type="string",
                          help="A figure label, e.g. '2a'",
                          default=defaults.logo_label,
                          metavar="TEXT")

    format_grp.add_option("-X", "--show-xaxis",
                          action="store",
                          type="boolean",
                          default=defaults.show_xaxis,
                          metavar="YES/NO",
                          help="Display sequence numbers along x-axis? (default: %default)")

    format_grp.add_option("-x", "--xlabel",
                          dest="xaxis_label",
                          action="store",
                          type="string",
                          default=defaults.xaxis_label,
                          help="X-axis label",
                          metavar="TEXT")

    format_grp.add_option("", "--annotate",
                          dest="annotate",
                          action="store",
                          type="string",
                          default=None,
                          help="A comma separated list of custom stack annotations, e.g. '1,3,4,5,6,7'.  Annotation list must be same length as sequences.",
                          metavar="TEXT")

    format_grp.add_option("", "--rotate-numbers",
                          dest="rotate_numbers",
                          action="store",
                          type="boolean",
                          default=defaults.rotate_numbers,
                          help="Draw X-axis numbers with vertical orientation (default: %default).",
                          metavar="YES/NO")

    format_grp.add_option("", "--number-interval",
                          dest="number_interval",
                          action="store",
                          type="float",
                          default=defaults.number_interval,
                          help="Distance between numbers on X-axis (default: %s)" % defaults.number_interval,
                          metavar="NUMBER")

    format_grp.add_option("-S", "--yaxis",
                          dest="yaxis_scale",
                          action="store",
                          type="float",
                          help="Height of yaxis in units. (Default: Maximum value with uninformative prior.)",
                          metavar="UNIT")

    format_grp.add_option("-Y", "--show-yaxis",
                          action="store",
                          type="boolean",
                          dest="show_yaxis",
                          default=defaults.show_yaxis,
                          metavar="YES/NO",
                          help="Display entropy scale along y-axis? (default: %default)")

    format_grp.add_option("-y", "--ylabel",
                          dest="yaxis_label",
                          action="store",
                          type="string",
                          help="Y-axis label (default depends on plot type and units)",
                          metavar="TEXT")

    format_grp.add_option("-E", "--show-ends",
                          action="store",
                          type="boolean",
                          default=defaults.show_ends,
                          metavar="YES/NO",
                          help="Label the ends of the sequence? (default: %default)")

    format_grp.add_option("-P", "--fineprint",
                          dest="fineprint",
                          action="store",
                          type="string",
                          default=defaults.fineprint,
                          help="The fine print (default: weblogo version)",
                          metavar="TEXT")

    format_grp.add_option("", "--ticmarks",
                          dest="yaxis_tic_interval",
                          action="store",
                          type="float",
                          default=defaults.yaxis_tic_interval,
                          help="Distance between ticmarks (default: %default)",
                          metavar="NUMBER")

    format_grp.add_option("", "--errorbars",
                          dest="show_errorbars",
                          action="store",
                          type="boolean",
                          default=defaults.show_errorbars,
                          metavar="YES/NO",
                          help="Display error bars? (default: %default)")

    format_grp.add_option("", "--reverse-stacks",
                          dest="reverse_stacks",
                          action="store",
                          type="boolean",
                          default=defaults.show_errorbars,
                          metavar="YES/NO",
                          help="Draw stacks with largest letters on top? (default: %default)")

    # ========================== Color OPTIONS ==========================
    # TODO: Future Feature
    # color_grp.add_option( "-K", "--color-key",
    #    dest= "show_color_key",
    #    action="store",
    #    type = "boolean",
    #    default= defaults.show_color_key,
    #    metavar = "YES/NO",
    #    help="Display a color key (default: %default)")

    color_scheme_choices = list(std_color_schemes.keys())
    color_scheme_choices.sort()
    color_grp.add_option("-c", "--color-scheme",
                         dest="color_scheme",
                         action="store",
                         type="dict",
                         choices=std_color_schemes,
                         metavar="SCHEME",
                         default=None,  # Auto
                         help="Specify a standard color scheme (%s)" % \
                              ", ".join(color_scheme_choices))

    color_grp.add_option("-C", "--color",
                         dest="colors",
                         action="append",
                         metavar="COLOR SYMBOLS DESCRIPTION ",
                         nargs=3,
                         default=[],
                         help="Specify symbol colors, e.g. --color black AG 'Purine' --color red TC 'Pyrimidine' ")

    color_grp.add_option("", "--default-color",
                         dest="default_color",
                         action="store",
                         metavar="COLOR",
                         default=defaults.default_color,
                         help="Symbol color if not otherwise specified.")

    # ========================== Font options =========================

    font_grp.add_option("", "--fontsize",
                        dest="fontsize",
                        action="store",
                        type="float",
                        default=defaults.fontsize,
                        help="Regular text font size in points (default: %s)" % defaults.fontsize,
                        metavar="POINTS")

    font_grp.add_option("", "--title-fontsize",
                        dest="title_fontsize",
                        action="store",
                        type="float",
                        default=defaults.title_fontsize,
                        help="Title text font size in points (default: %s)" % defaults.title_fontsize,
                        metavar="POINTS")

    font_grp.add_option("", "--small-fontsize",
                        dest="small_fontsize",
                        action="store",
                        type="float",
                        default=defaults.small_fontsize,
                        help="Small text font size in points (default: %s)" % defaults.small_fontsize,
                        metavar="POINTS")

    font_grp.add_option("", "--number-fontsize",
                        dest="number_fontsize",
                        action="store",
                        type="float",
                        default=defaults.number_fontsize,
                        help="Axis numbers font size in points (default: %s)" % defaults.number_fontsize,
                        metavar="POINTS")

    font_grp.add_option("", "--text-font",
                        dest="text_font",
                        action="store",
                        type="string",
                        default=defaults.text_font,
                        help="Specify font for labels (default: %s)" % defaults.text_font,
                        metavar="FONT")

    font_grp.add_option("", "--logo-font",
                        dest="logo_font",
                        action="store",
                        type="string",
                        default=defaults.text_font,
                        help="Specify font for logo (default: %s)" % defaults.logo_font,
                        metavar="FONT")

    font_grp.add_option("", "--title-font",
                        dest="title_font",
                        action="store",
                        type="string",
                        default=defaults.title_font,
                        help="Specify font for title (default: %s)" % defaults.title_font,
                        metavar="FONT")

    # ========================== Advanced options =========================

    advanced_grp.add_option("-W", "--stack-width",
                            dest="stack_width",
                            action="store",
                            type="float",
                            default=defaults.stack_width,
                            help="Width of a logo stack (default: %s)" % defaults.stack_width,
                            metavar="POINTS")

    advanced_grp.add_option("", "--aspect-ratio",
                            dest="stack_aspect_ratio",
                            action="store",
                            type="float",
                            default=defaults.stack_aspect_ratio,
                            help="Ratio of stack height to width (default: %s)" % defaults.stack_aspect_ratio,
                            metavar="POINTS")

    advanced_grp.add_option("", "--box",
                            dest="show_boxes",
                            action="store",
                            type="boolean",
                            default=False,
                            metavar="YES/NO",
                            help="Draw boxes around symbols? (default: no)")

    advanced_grp.add_option("", "--resolution",
                            dest="resolution",
                            action="store",
                            type="float",
                            default=96,
                            help="Bitmap resolution in dots per inch (DPI).  (Default: 96 DPI, except png_print, 600 DPI) Low resolution bitmaps (DPI<300) are antialiased.",
                            metavar="DPI")

    advanced_grp.add_option("", "--scale-width",
                            dest="scale_width",
                            action="store",
                            type="boolean",
                            default=True,
                            metavar="YES/NO",
                            help="Scale the visible stack width by the fraction of symbols in the column?  (I.e. columns with many gaps of unknowns are narrow.)  (Default: yes)")

    advanced_grp.add_option("", "--debug",
                            action="store",
                            type="boolean",
                            default=defaults.debug,
                            metavar="YES/NO",
                            help="Output additional diagnostic information. (Default: %default)")

    advanced_grp.add_option("", "--errorbar-fraction",
                            dest="errorbar_fraction",
                            action="store",
                            type="float",
                            default=defaults.errorbar_fraction,
                            help="Sets error bars display proportion (default: %s)" % defaults.errorbar_fraction,
                            metavar="NUMBER")

    advanced_grp.add_option("", "--errorbar-width-fraction",
                            dest="errorbar_width_fraction",
                            action="store",
                            type="float",
                            default=defaults.errorbar_width_fraction,
                            help="Sets error bars width display proportion (default: %s)" % defaults.errorbar_width_fraction,
                            metavar="NUMBER")

    advanced_grp.add_option("", "--errorbar-gray",
                            dest="errorbar_gray",
                            action="store",
                            type="float",
                            default=defaults.errorbar_gray,
                            help="Sets error bars' gray scale percentage (default: %s)" % defaults.errorbar_gray,
                            metavar="NUMBER")

    # ========================== Server options =========================
    server_grp.add_option("", "--serve",
                          dest="serve",
                          action="store_true",
                          default=False,
                          help="Start a standalone WebLogo server for creating sequence logos.")

    server_grp.add_option("", "--port",
                          dest="port",
                          action="store",
                          type="int",
                          default=8080,
                          help="Listen to this local port. (Default: %default)",
                          metavar="PORT")

    return parser
Esempio n. 4
0
def _build_option_parser() :
    defaults = LogoOptions()
    parser = DeOptionParser(usage="%prog [options]  < sequence_data.fa > sequence_logo.eps",
        description = description,
        version     = release_description,
        add_verbose_options = False
        )

    io_grp = OptionGroup(parser, "Input/Output Options",)
    data_grp = OptionGroup(parser, "Logo Data Options",)
    trans_grp = OptionGroup(parser, "Transformations", "Optional transformations of the sequence data.")


    format_grp = OptionGroup(parser, "Logo Format Options",
        "These options control the format and display of the logo.")
    color_grp = OptionGroup(parser, "Color Options",
        "Colors can be specified using CSS2 syntax. e.g. 'red', '#FF0000', etc.")
    advanced_grp = OptionGroup(parser, "Advanced Format Options",
        "These options provide fine control over the display of the logo. ")
    server_grp = OptionGroup(parser, "LogOddsLogo Server",
        "Run a standalone webserver on a local port.")


    parser.add_option_group(io_grp)
    parser.add_option_group(data_grp)
    parser.add_option_group(trans_grp)
    parser.add_option_group(format_grp)
    parser.add_option_group(color_grp)
    parser.add_option_group(advanced_grp)
    parser.add_option_group(server_grp)

    # ========================== IO OPTIONS ==========================

    io_grp.add_option( "-f", "--fin",
        dest="fin",
        action="store",
        type="file_in",
        default=None,
        help="Sequence input file (default: stdin)",
        metavar="FILENAME")

    # Add position weight matrix formats to input parsers by hand
    fin_choices = dict(seq_io.format_names())
    fin_choices['transfac'] = 'transfac'

    io_grp.add_option("-D", "--datatype",
        dest="input_parser",
        action="store", type ="dict",
        default = seq_io,
        choices = fin_choices,       # seq_io.format_names(),
        help="Type of multiple sequence alignment or position weight matrix file: (%s, transfac)" %
           ', '.join([ f.names[0] for f in seq_io.formats]),
        metavar="FORMAT")

    io_grp.add_option("-o", "--fout", dest="fout",
        type="file_out",
        default=sys.stdout,
        help="Output file (default: stdout)",
        metavar="FILENAME")

    io_grp.add_option( "-F", "--format",
        dest="formatter",
        action="store",
        type="dict",
        choices = formatters,
        metavar= "FORMAT",
        help="Format of output: eps (default), png, png_print, pdf, jpeg, svg, logodata",
        default = default_formatter)


    # ========================== Data OPTIONS ==========================



    data_grp.add_option( "-M", "--score-method",
        dest="score_method",
        action="store",
        default="BILD",
        type="string",
        help="The method for scoring: 'BILD' or 'NML' or 'SC' or 'SU':        "
             "                                  "
             "  BILD - BILD score                                             "
             "  NML  - Normalized Maximum Likelihood score                    "
	     "  SC   - Schneider score - Corrected                            "
	     "  SU   - Schneider score - Uncorrected                          "
        )

    data_grp.add_option( "-d", "--dmnumber",
        dest="dmnumber",
        action="store",
        type="string",
        help="Dirichlet mixture parameter for BILD score.                     "
             "For nucleotide sequences, it should be a floating point value"
             " corresponding to Dirichlet concentration alpha (DEFAULT 1.0).  "
             "For protein sequences, it should be an integer (0 to 8)"
             " indicating a particular stored Dirichlet mixture:              "
             "                   "
	     "  0 - recode3-20 (20 components)                                "
	     "  1 - recode4-20 (20 components)                                "
	     "  2 - recode5-20 (20 components)                                "
	     "  3 - Fournier-20 (20 components)                               "
	     "  4 - dist-20 (20 components)                                   "
	     "  5 - dist-ncbi-52 (52 components - DEFAULT)                    "
	     "  6 - dist-ncbi-72 (72 components)                              "
	     "  7 - dist-ncbi-110 (110 components)                            "
	     "  8 - dist-ncbi-134 (134 components)                            "
             "This parameter is ignored for any other scoring method.         "
        )

    data_grp.add_option( "-A", "--sequence-type",
        dest="alphabet",
        action="store",
        type="dict",
        choices = std_alphabets,
        help="The type of sequence data: 'protein', 'rna' or 'dna'.",
        metavar="TYPE")

    data_grp.add_option( "-a", "--alphabet",
        dest="alphabet",
        action="store",
        help="The set of symbols to count, e.g. 'AGTC'. "
             "All characters not in the alphabet are ignored. "
             "If neither the alphabet nor sequence-type are specified then logoddslogo will examine the input data and make an educated guess. "
             "See also --sequence-type, --ignore-lower-case" )


    data_grp.add_option( "-U", "--units",
        dest="unit_name",
        action="store",
        choices = std_units.keys(),
        type="choice",
        default = defaults.unit_name,
        help="A unit of entropy ('bits' (default), 'nats', 'digits'), or a unit of free energy ('kT', 'kJ/mol', 'kcal/mol'), or 'probability' for probabilities",
        metavar = "NUMBER")


    data_grp.add_option( "", "--composition",
        dest="composition",
        action="store",
        type="string",
        default = None,
        help="""The expected composition of the sequences: 'equiprobable (default)', a CG percentage, a species name (e.g. 'E. coli','H. sapiens'), or an explicit distribution (e.g. "{'A':10, 'C':40, 'G':40, 'T':10}"). For proteins, NML, SC, and SU use the Robinson-Robinson frequencies as the background, although an explicit specification (same format as above) is also allowed. BILD always used the implicit background frequencies of the selected Dirichlet mixture.""",
        metavar="COMP")

    data_grp.add_option( "", "--weight",
        dest="weight",
        action="store",
        type="float",
        default = None,
        help="The weight of prior data.  Default depends on alphabet length",
        metavar="NUMBER")

    data_grp.add_option( "", "--no-weighcounts",
        dest="weighcounts",
        action="store_false",
        default = True,
        help="For proteins only, do not use other columns to estimate the number of independent observations of an amino acid within the column considered.  Default is True",
        metavar="YES/NO")

    data_grp.add_option( "", "--ovline",
        dest="ovline",
        action="store_true",
        default = False,
        help="Draw an overline on the positive score region.  Default is False ",
        metavar="YES/NO")

    data_grp.add_option( "-i", "--first-index",
        dest="first_index",
        action="store",
        type="int",
        default = 1,
        help="Index of first position in sequence data (default: 1)",
        metavar="INDEX")

    data_grp.add_option( "-l", "--lower",
        dest="logo_start",
        action="store",
        type="int",
        help="Lower bound of sequence to display",
        metavar="INDEX")

    data_grp.add_option( "-u", "--upper",
        dest="logo_end",
        action="store",
        type="int",
        help="Upper bound of sequence to display",
        metavar="INDEX")

    # ========================== Transformation OPTIONS ==========================


    # FIXME Add test?
    trans_grp.add_option( "", "--ignore-lower-case",
        dest="ignore_lower_case",
        action="store_true",
        default=False,
        help="Disregard lower case letters and only count upper case letters in sequences."
       )

    trans_grp.add_option( "", "--reverse",
        dest="reverse",
        action="store_true",
        default=False,
        help="reverse sequences",
        )

    trans_grp.add_option( "", "--complement",
        dest="complement",
        action="store_true",
        default=False,
        help="complement DNA sequences",
        )



    # ========================== FORMAT OPTIONS ==========================

    format_grp.add_option( "-s", "--size",
        dest="stack_width",
        action="store",
        type ="dict",
        choices = std_sizes,
        metavar = "LOGOSIZE",
        default = defaults.stack_width,
        help="Specify a standard logo size (small, medium (default), large)" )

    format_grp.add_option( "-n", "--stacks-per-line",
        dest="stacks_per_line",
        action="store",
        type="int",
        help="Maximum number of logo stacks per logo line. (default: %default)",
        default = defaults.stacks_per_line,
        metavar="COUNT")

    format_grp.add_option( "-t", "--title",
        dest="logo_title",
        action="store",
        type="string",
        help="Logo title text.",
        default = defaults.logo_title,
        metavar="TEXT")

    format_grp.add_option( "", "--label",
        dest="logo_label",
        action="store",
        type="string",
        help="A figure label, e.g. '2a'",
        default = defaults.logo_label,
        metavar="TEXT")

    format_grp.add_option( "-X", "--show-xaxis",
        action="store",
        type = "boolean",
        default= defaults.show_xaxis,
        metavar = "YES/NO",
        help="Display sequence numbers along x-axis? (default: %default)")

    format_grp.add_option( "-x", "--xlabel",
        dest="xaxis_label",
        action="store",
        type="string",
        default = defaults.xaxis_label,
        help="X-axis label",
        metavar="TEXT")

    format_grp.add_option( "", "--annotate",
            dest="annotate",
            action="store",
            type="string",
            default = None,
            help="A comma separated list of custom stack annotations, e.g. '1,3,4,5,6,7'.  Annotation list must be same length as sequences.",
            metavar="TEXT")

    format_grp.add_option( "-S", "--yaxis",
        dest="yaxis_scale",
        action="store",
        type="float",
        help="Height of yaxis in units. (Default: Maximum value with uninformative prior.)",
        metavar = "UNIT")

    format_grp.add_option( "-Y", "--show-yaxis",
        action="store",
        type = "boolean",
        dest = "show_yaxis",
        default= defaults.show_yaxis,
        metavar = "YES/NO",
        help="Display entropy scale along y-axis? (default: %default)")

    format_grp.add_option( "-y", "--ylabel",
        dest="yaxis_label",
        action="store",
        type="string",
        help="Y-axis label (default depends on plot type and units)",
        metavar="TEXT")

    format_grp.add_option( "-E", "--show-ends",
        action="store",
        type = "boolean",
        default= defaults.show_ends,
        metavar = "YES/NO",
        help="Label the ends of the sequence? (default: %default)")

    format_grp.add_option( "-P", "--fineprint",
        dest="fineprint",
        action="store",
        type="string",
        default= defaults.fineprint,
        help="The fine print (default: logoddslogo version)",
        metavar="TEXT")

    format_grp.add_option( "", "--ticmarks",
        dest="yaxis_tic_interval",
        action="store",
        type="float",
        default= defaults.yaxis_tic_interval,
        help="Distance between ticmarks (default: %default)",
        metavar = "NUMBER")


    format_grp.add_option( "", "--errorbars",
        dest = "show_errorbars",
        action="store",
        type = "boolean",
        default= defaults.show_errorbars,
        metavar = "YES/NO",
        help="Display error bars? (default: %default)")

    format_grp.add_option( "", "--reverse-stacks",
        dest = "reverse_stacks",
        action="store",
        type = "boolean",
        default= defaults.show_errorbars,
        metavar = "YES/NO",
        help="Draw stacks with largest letters on top? (default: %default)")




    # ========================== Color OPTIONS ==========================
    # TODO: Future Feature
    # color_grp.add_option( "-K", "--color-key",
    #    dest= "show_color_key",
    #    action="store",
    #    type = "boolean",
    #    default= defaults.show_color_key,
    #    metavar = "YES/NO",
    #    help="Display a color key (default: %default)")


    color_scheme_choices = std_color_schemes.keys()
    color_scheme_choices.sort()
    color_grp.add_option( "-c", "--color-scheme",
        dest="color_scheme",
        action="store",
        type ="dict",
        choices = std_color_schemes,
        metavar = "SCHEME",
        default = None, # Auto
        help="Specify a standard color scheme (%s)" % \
            ", ".join(color_scheme_choices) )

    color_grp.add_option( "-C", "--color",
        dest="colors",
        action="append",
        metavar="COLOR SYMBOLS DESCRIPTION ",
        nargs = 3,
        default=[],
        help="Specify symbol colors, e.g. --color black AG 'Purine' --color red TC 'Pyrimidine' ")

    color_grp.add_option( "", "--default-color",
        dest="default_color",
        action="store",
        metavar="COLOR",
        default= defaults.default_color,
        help="Symbol color if not otherwise specified.")


    # ========================== Advanced options =========================

    advanced_grp.add_option( "-W", "--stack-width",
        dest="stack_width",
        action="store",
        type="float",
        default= defaults.stack_width,
        help="Width of a logo stack (default: %s)"% defaults.stack_width,
        metavar="POINTS" )

    advanced_grp.add_option( "", "--aspect-ratio",
        dest="stack_aspect_ratio",
        action="store",
        type="float",
        default= defaults.stack_aspect_ratio ,
        help="Ratio of stack height to width (default: %s)"%defaults.stack_aspect_ratio,
        metavar="POINTS" )

    advanced_grp.add_option( "", "--box",
        dest="show_boxes",
        action="store",
        type = "boolean",
        default=False,
        metavar = "YES/NO",
        help="Draw boxes around symbols? (default: no)")

    advanced_grp.add_option( "", "--resolution",
        dest="resolution",
        action="store",
        type="float",
        default=96,
        help="Bitmap resolution in dots per inch (DPI).  (Default: 96 DPI, except png_print, 600 DPI) Low resolution bitmaps (DPI<300) are antialiased.",
        metavar="DPI")

    advanced_grp.add_option( "", "--scale-width",
        dest="scale_width",
        action="store",
        type = "boolean",
        default= True,
        metavar = "YES/NO",
        help="Scale the visible stack width by the fraction of symbols in the column?  (I.e. columns with many gaps of unknowns are narrow.)  (Default: yes)")

    advanced_grp.add_option( "", "--debug",
        action="store",
        type = "boolean",
        default= defaults.debug,
        metavar = "YES/NO",
        help="Output additional diagnostic information. (Default: %default)")


    # ========================== Server options =========================
    server_grp.add_option( "", "--serve",
        dest="serve",
        action="store_true",
        default= False,
        help="Start a standalone LogOddsLogo server for creating sequence logos.")

    server_grp.add_option( "", "--port",
        dest="port",
        action="store",
        type="int",
        default= 8080,
        help="Listen to this local port. (Default: %default)",
        metavar="PORT")

    return parser