#!/usr/bin/env perl ########################################################################### # # Copyright (C) 1997-2015 Nigel P. Brown # # (i) License # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # (ii) Contacts # # Project Admin: Nigel P. Brown # Email: biomview@gmail.com # Project URL: http://bio-mview.sourceforge.net # # (iii) Citation # # Please acknowledge use of this Program by citing the following reference in # any published work including web-sites: # # Brown, N.P., Leroy C., Sander C. (1998) MView: A Web compatible database # search or multiple alignment viewer. Bioinformatics. 14(4):380-381. # # and provide a link to the MView project URL given above under 'Contacts'. # ########################################################################### # $Id: mview,v 1.79 2015/06/18 20:26:00 npb Exp $ my $VERSION = '1.59'; my $PATCH = ''; my $PROJECT = 'MView'; my $AUTHOR = "Nigel P. Brown"; my $VERSION = $VERSION . ($PATCH?".$PATCH":""); my $COPYYRS = "1997-2015"; my $PROJPTH = 'http://bio-mview.sourceforge.net'; my $AUTHMAIL = 'biomview@gmail.com'; ########################################################################### require 5.004; $^W=1; BEGIN {$::COMPILE_ERROR=0} #catch compile time method call failure use lib '/opt/chipster/tools/mview/lib'; use Getopt; use Bio::MView::Manager; use strict; exit 1 if $::COMPILE_ERROR; ########################################################################### my $PROG = Universal::basename($0); my $INVOKE = "$PROG @ARGV"; my $DOCTYPE = ''; my $SCRATCH = Universal::tmpfile("mview_$$"); my %KNOWN_FORMAT = ( #search formats 'blast' => 1, 'uvfasta' => 1, #flatfile formats 'plain' => 1, 'clustal' => 1, 'msf' => 1, 'fasta' => 1, 'pir' => 1, 'hssp' => 1, 'maf' => 1, 'multas' => 1, 'mips' => 1, 'jnetz' => 1, ); my ($HTML_NULL, $HTML_DATA, $HTML_CSS, $HTML_BODY, $HTML_HTML, $HTML_MIME) = (0,1,2,4,8,16); my ($VERB_NULL, $VERB_FILE, $VERB_ARGV, $VERB_FORM, $VERB_OPTS) = (0,1,2,4,8); my ($stm, $com, $opt, $par) = (\*STDOUT); ########################################################################### $SIG{'INT'} = sub { warn "$PROG: exiting on interrupt\n"; &cleanup(); exit 1 }; $com = new Getopt($PROG, \*DATA)->getoptions(\@ARGV); $opt = $com->get_option_hash; $par = $com->get_parameter_hash; rationalise_parameters($opt, $par); dump_options($opt, $par) if $opt->{'verbose'} & $VERB_OPTS; usage($com, $opt, $par, 0) if $opt->{'help'}; html_head($opt, $par, $stm); #echo command line? if ($opt->{'verbose'} & $VERB_ARGV) { my $s = $com->argv_string; $s =~ s/\-+v[a-z]*[=\s]+\S+\s*//g; if ($opt->{'html'}) { print $stm "
";
print $stm "$PROG $s";
print $stm "
\n\n" if $opt->{'html'}; print $stm Bio::MView::Manager::list_colormaps($opt->{'html'}); print $stm "
\n" if $opt->{'html'}; print $stm Bio::MView::Manager::list_groupmaps($opt->{'html'}); print $stm "
\n" if $opt->{'pre'}; if (! defined $mgr->parse($file, $format)) { warn "$PROG: can't parse file '$file'\n"; } print $stm "\n" if $opt->{'pre'}; } #Universal::vmstat("Manager constructor done"); #colormap/groupmap listing request: no alignment return 0 if $par->{'noparse'}; #save printing until end? if ($par->{'register'} and $opt->{'out'} eq 'new') { $mgr->print; #Universal::vmstat("print done (mview)"); } return $mgr->alignment_count; } sub cleanup { unlink "$SCRATCH" if -f "$SCRATCH" } sub rationalise_parameters { my ($o, $p) = @_; #ignore HTML if RDB output ($o->{'html'}, $p->{'html'}) = (0, 0) if $p->{'mode'} eq 'rdb'; #ignore HTML if CLUSTAL output ($o->{'html'}, $p->{'html'}) = (0, 0) if $p->{'mode'} eq 'clustal'; #ignore HTML if PIR output ($o->{'html'}, $p->{'html'}) = (0, 0) if $p->{'mode'} eq 'pir'; #ignore HTML if MSF output ($o->{'html'}, $p->{'html'}) = (0, 0) if $p->{'mode'} eq 'msf'; #ignore HTML if fasta/pearson output ($o->{'html'}, $p->{'html'}) = (0, 0) if $p->{'mode'} eq 'fasta'; #ignore HTML if plain output ($o->{'html'}, $p->{'html'}) = (0, 0) if $p->{'mode'} eq 'plain'; #switch off preformatted flag if HTML is off $o->{'pre'} = 0 unless $o->{'html'}; #ignore style sheets if HTML off ($o->{'css'}, $p->{'css1'}) = ('off', 0) if $o->{'html'} == 0; #ignore style sheets in HTML if css is unset $o->{'html'} &= ($HTML_MIME|$HTML_HTML|$HTML_BODY|$HTML_DATA) if $o->{'css'} eq 'off'; #ignore coloring if HTML is off! unless ($o->{'html'}) { $p->{'aln_coloring'} = 'none'; $p->{'con_coloring'} = 'none'; } #switch off parsing if color/groupmap listing requested if ($o->{'listcolors'} or $o->{'listgroups'}) { $o->{'noparse'} = $p->{'noparse'} = 1; $o->{'pre'} = 0; } else { $o->{'noparse'} = $p->{'noparse'} = 0; } } sub html_head { my ($o, $p, $stm) = (@_, *STDOUT); #warn "HTML=$o->{'html'}\n"; return unless $o->{'html'}; return if $o->{'html'} == $HTML_DATA; #want MIME type? if ($o->{'html'} & $HTML_MIME) { print $stm "Content-Type: text/html\n\n"; } #want HTML HEAD? if ($o->{'html'} & $HTML_HTML) { print $stm "$DOCTYPE\n\n\n"; #want STYLE? if ($o->{'html'} & $HTML_CSS) { #link styles print $stm "\n"; #alignment styles if ($o->{'css'} =~ /^(?:file|http):/i) { #link to style sheet print $stm "{'css'}\">\n"; } else { #style sheet in situ print $stm "\n"; } } #want TITLE? (in titlebar) if (defined $o->{'title'}) { print $stm "
\n" if $opt->{'html'}; $com->usage($stm); print $stm "
$PROJECT ";
$s .= "$VERSION, Copyright \© ";
$s .= "$COPYYRS $AUTHOR";
$s .= "
\n";
return $s;
}
if ($opt->{'noparse'}) { #listcolor/listgroups without HTML
$s .= "# $PROJECT $VERSION, Copyright (C) $COPYYRS $AUTHOR\n";
return $s;
}
$s = "\n$PROJECT $VERSION, Copyright (C) $COPYYRS $AUTHOR\n\n";
$s;
}
###########################################################################
__DATA__
text: "usage: __PROG [options] [file...]\n\n
Option names and parameter values can generally be abbreviated. Alternative\n
parameter values are listed in braces {}, followed by the default value in\n
square brackets [].\n\n
Some options take multiple arguments which must be supplied as a comma\n
separated list, like '1,8,9,10'. Subranges are allowed, so you could also\n
write that as '1,8:10' or even '1,8..10'. Any argument must be quoted if it\n
contains whitespace or a wildcard that might be expanded by the shell\n"
###########################################################################
#silent options because no 'usage:' field.
[SILENT]
#force @ARGV to be examined for '-help' first.
OPTION: help
default: 0
action: sub { __ARGS; __OPTION{__ON} = 1 if __OV }
#force @ARGV to be examined for '-listcolors' first.
OPTION: listcolors
default: 0
action: sub { __ARGS; __OPTION{__ON} = 1 if __OV }
#force @ARGV to be examined for '-listgroups' first.
OPTION: listgroups
default: 0
action: sub { __ARGS; __OPTION{__ON} = 1 if __OV }
#force @ARGV to be examined for '-listcss' first.
OPTION: listcss
default: 0
action: sub { __ARGS; __OPTION{__ON} = 1 if __OV }
#force @ARGV to be examined for '-colorfile' first.
OPTION: colorfile
type: s
action: sub { __ARGS;
local *TMP;
if (defined __OV) {
open(TMP, "< __OV") or CORE::die "__PROG: can't open colormap file '__OV'\n";
Bio::MView::Manager::load_colormaps(\*TMP);
close TMP;
}
}
#force @ARGV to be examined for '-groupfile' first.
OPTION: groupfile
type: s
action: sub { __ARGS;
local *TMP;
if (defined __OV) {
open(TMP, "< __OV") or CORE::die "__PROG: can't open consensus group file '__OV'\n";
Bio::MView::Manager::load_groupmaps(\*TMP);
close TMP;
}
}
#set the default colormaps and groupmaps (assume protein)
OPTION: aa
action: sub { __ARGS;
(__PARAM{'def_aln_colormap'},
__PARAM{'def_con_colormap'}) =
Bio::MView::Manager::get_default_colormaps('aa');
__PARAM{'def_aln_groupmap'} = __PARAM{'def_con_groupmap'} =
Bio::MView::Manager::get_default_groupmap('aa');
__PARAM{'moltype'} = 'aa';
return 0;
}
#verbosity level, normally 0 to keep quiet
OPTION: verbose
type: i
default: 0
#obsolete options: report fact to user
OPTION: dna
action: sub { __ARGS; __WARN("obsolete option '-__ON' replaced by '-moltype dna'") if defined __OV; }
OPTION: keep
action: sub { __ARGS; __WARN("obsolete option '-__ON' renamed as '-show'") if defined __OV; }
OPTION: disc
action: sub { __ARGS; __WARN("obsolete option '-__ON' renamed as '-hide'") if defined __OV; }
###########################################################################
[FORMATS]
text: "Input/output formats:"
OPTION: in
usage: "Input __CHOOSE(main::check_format)"
type: s
action: sub { __ARGS;
return __OPTION{__ON} = main::check_format(__OV, 'par')
if defined __OV;
return;
}
OPTION: out
usage: "Output __CHOOSE(Bio::MView::Manager::check_convert_mode)"
type: s
default: new
param: mode
convert: sub { __ARGS;
__OPTION{'pre'} = 1;
if (__OV =~ /^n/i) { #default
__PV = 'new'; __OPTION{'pre'} = 0;
} elsif (__OV =~ /^pl/i) { #plain
__PV = 'plain';
} elsif (__OV =~ /^fa/i) { #Pearson/FASTA
__PV = 'pearson';
} elsif (__OV =~ /^pe/i) { #Pearson/FASTA
__PV = 'pearson';
} elsif (__OV =~ /^pi/i) { #PIR
__PV = 'pir';
} elsif (__OV =~ /^ms/i) { #MSF
__PV = 'msf';
} elsif (__OV =~ /^cl/i) { #CLUSTAL/aln
__PV = 'clustal';
} elsif (__OV =~ /^al/i) { #CLUSTAL/aln
__PV = 'clustal';
} elsif (__OV =~ /^rd/i) { #RDB
__PV = 'rdb'; __OPTION{'pre'} = 0;
} else {
__WARN("unknown output format '-__ON=__OV'.");
}
__PV;
}
###########################################################################
[CONTENT]
text: "Main formatting options:"
OPTION: ruler
usage: "Show ruler"
type: b
default: off
param:
OPTION: alignment
usage: "Show alignment"
type: b
default: on
param:
OPTION: conservation
usage: "Show clustal conservation line"
type: b
default: off
param:
OPTION: consensus
usage: "Show consensus"
type: b
default: off
param:
OPTION: width
usage: "Paginate alignment in blocks of N columns {N,flat}"
type: s
default: flat
param:
convert: sub { __ARGS;
if (__OV eq 'flat') {
return 0;
} else {
return __TEST('i', __ON, __OV);
}
}
###########################################################################
[IDENTITY]
text: "Percent identity calculations"
OPTION: pcid
usage: "Compute percent identities with respect to __CHOOSE(Bio::MView::Manager::check_identity_mode)"
type: s
default: 'aligned'
param:
convert: sub { __ARGS;
return 'reference' if __OV =~ /^r/;
return 'aligned' if __OV =~ /^a/;
return 'hit' if __OV =~ /^h/;
__WARN("bad setting '-__ON=__OV'.");
__WARN("known percent identity methods are: ", join(",",
Bio::MView::Manager::check_identity_mode), "\n");
}
OPTION: reference
usage: "Use row N or row identifier as %identity reference"
type: s
default: query
param: ref_id
###########################################################################
[FILTER]
text: "General row/column filters:"
OPTION: top
usage: "Report top N hits"
type: s
default: all
param: topn
convert: sub { __ARGS;
return 0 if __OV eq 'all';
return __TEST('i', __ON, __OV);
}
OPTION: maxident
usage: "Only report sequences with percent identity <= N"
type: f
default: 100
param:
convert: sub { __ARGS;
if (__OV < 0 or __OV > 100) {
__WARN("bad setting '-__ON=__OV', want range 0..100.");
}
__OV;
}
OPTION: minident
usage: "Only report sequences with percent identity >= N"
type: f
default: 0
param:
convert: sub { __ARGS;
if (__OV < 0 or __OV > 100) {
__WARN("bad setting '-__ON=__OV', want range 0..100.");
}
__OV;
}
OPTION: show
usage: "Keep rows 1..N or identifiers"
type: @s
param: keeplist
OPTION: hide
usage: "Hide rows 1..N or identifiers"
type: @s
param: skiplist
OPTION: nops
usage: "No operation: exclude rows 1..N or identifiers from calculatons"
type: @s
param: nopslist
OPTION: range
usage: "Display column range M:N as numbered by ruler"
type: s
default: all
param:
convert: sub { __ARGS;
my @tmp = ();
if (__OV ne 'all') {
@tmp = split(/:/, __OV);
if (@tmp != 2) {
__WARN("bad range setting '-__ON=__OV', want M:N.");
} else {
__TEST('i', __ON, $tmp[0]);
__TEST('i', __ON, $tmp[1]);
#ignore range order, but check for negative values
if ($tmp[0] < 1 or $tmp[1] < 1) {
__WARN("bad range setting '-__ON=__OV', want M:N.");
}
}
}
return [ @tmp ];
}
###########################################################################
[MOLTYPE]
text: "Molecule type:"
OPTION: moltype
usage: "Affects coloring and format converions __CHOOSE(Bio::MView::Manager::check_molecule_type)"
type: s
default: aa
param: moltype
convert: sub { __ARGS;
if (__OV =~ /^aa/i) {
__PV = 'aa';
} elsif (__OV =~ /^na/i) {
__PV = 'na';
} elsif (__OV =~ /^dna/i) {
__PV = 'dna';
} elsif (__OV =~ /^rna/i) {
__PV = 'rna';
}
unless (defined __PV and defined
Bio::MView::Manager::check_molecule_type(__PV)) {
__WARN("unknown molecule type '-__ON=__OV'.");
__WARN("known types are: ", join(",",
Bio::MView::Manager::check_molecule_type), "\n");
}
(__PARAM{'def_aln_colormap'},
__PARAM{'def_con_colormap'}) =
Bio::MView::Manager::get_default_colormaps(__PV);
__PARAM{'def_aln_groupmap'} = __PARAM{'def_con_groupmap'} =
Bio::MView::Manager::get_default_groupmap(__OV);
__PARAM{'moltype'} = __PV;
__PV;
}
###########################################################################
[ALN]
text: "Alignment coloring:"
OPTION: coloring
usage: "Basic style of coloring __CHOOSE(Bio::MView::Manager::check_alignment_color_scheme)"
type: s
default: none
param: aln_coloring
convert: sub { __ARGS;
if (__OV =~ /^n/i) {
__PV = 'none';
} elsif (__OV =~ /^a/i) {
__PV = 'any';
} elsif (__OV =~ /^i/i) {
__PV = 'identity';
} elsif (__OV =~ /^c/i) {
__PV = 'consensus';
} elsif (__OV =~ /^g/i) {
__PV = 'group';
}
unless (defined __PV and defined
Bio::MView::Manager::check_alignment_color_scheme(__PV)) {
__WARN("unknown coloring scheme '-__ON=__OV'.");
__WARN("known color schemes are: ", join(",",
Bio::MView::Manager::check_alignment_color_scheme), "\n");
}
__PV;
}
OPTION: colormap
usage: "Name of colormap to use"
type: s
param: aln_colormap
convert: sub { __ARGS;
if (defined __OV) {
__PV = __OV;
} else {
__PV = __PARAM{'def_aln_colormap'};
}
__PV = Bio::MView::Manager::check_colormap(__PV);
unless (defined __PV) {
__WARN("unknown colormap '-__ON=__OV'.");
__WARN("known maps are: ", join(",",
Bio::MView::Manager::check_colormap), "\n");
}
__DELETE_PARAM('def_aln_colormap');
__PV;
}
OPTION: groupmap
usage: "Name of groupmap to use if coloring by consensus"
type: s
param: aln_groupmap
convert: sub { __ARGS;
if (defined __OV) {
__PV = __OV;
} else {
__PV = __PARAM{'def_aln_groupmap'};
}
__PV = Bio::MView::Manager::check_groupmap(__PV);
unless (defined __PV) {
__WARN("unknown groupmap '-__ON=__OV'.");
__WARN("known maps are: ", join(",",
Bio::MView::Manager::check_groupmap), "\n");
}
__DELETE_PARAM('def_aln_groupmap');
__PV;
}
OPTION: threshold
usage: "Threshold percentage for consensus coloring"
type: f
default: 70
param: aln_threshold
convert: sub { __ARGS;
if (__OV < 50 or __OV > 100) {
__WARN("bad value for '-__ON=__OV' must be in range 50..100.");
}
[ __OV ];
}
OPTION: ignore
usage: "Ignore singleton or class groups __CHOOSE(Bio::MView::Manager::check_ignore_class)"
type: s
default: none
param: aln_ignore
convert: sub { __ARGS;
__PV = Bio::MView::Manager::check_ignore_class(__OV);
if (!defined __PV) {
__WARN("unknown alignment ignore mode '-__ON=__OV'.");
__WARN("known ignore classes are: ", join(",",
Bio::MView::Manager::check_ignore_class), "\n");
}
__PV;
}
###########################################################################
[CON]
text: "Consensus coloring:"
OPTION: con_coloring
usage: "Basic style of coloring __CHOOSE(Bio::MView::Manager::check_consensus_color_scheme)"
type: s
default: none
param: con_coloring
convert: sub { __ARGS;
if (__OV =~ /^n/i) {
__PV = 'none';
} elsif (__OV =~ /^a/i) {
__PV = 'any';
} elsif (__OV =~ /^i/i) {
__PV = 'identity';
} elsif (__OV =~ /^c/i) {
__PV = 'consensus';
} elsif (__OV =~ /^g/i) {
__PV = 'group';
}
unless (defined __PV and defined
Bio::MView::Manager::check_consensus_color_scheme(__PV)) {
__WARN("unknown coloring scheme '-__ON=__OV'.");
__WARN("known color schemes are: ", join(",",
Bio::MView::Manager::check_consensus_color_scheme), "\n");
}
__PV;
}
OPTION: con_colormap
usage: "Name of colormap to use"
type: s
param: con_colormap
convert: sub { __ARGS;
if (defined __OV) {
__PV = __OV;
} else {
__PV = __PARAM{'def_con_colormap'};
}
__PV = __PARAM{'def_con_colormap'} unless defined __OV;
__PV = Bio::MView::Manager::check_colormap(__PV);
unless (defined __PV) {
__WARN("unknown colormap '-__ON=__OV'.");
__WARN("known maps are: ", join(",",
Bio::MView::Manager::check_colormap), "\n");
}
__DELETE_PARAM('def_con_colormap');
__PV;
}
OPTION: con_groupmap
usage: "Name of groupmap to use if coloring by consensus"
type: s
param: con_groupmap
convert: sub { __ARGS;
if (defined __OV) {
__PV = __OV;
} else {
__PV = __PARAM{'def_con_groupmap'};
}
__PV = Bio::MView::Manager::check_groupmap(__PV);
unless (defined __PV) {
__WARN("unknown groupmap '-__ON=__OV'.");
__WARN("known maps are: ", join(",",
Bio::MView::Manager::check_groupmap), "\n");
}
__DELETE_PARAM('def_con_groupmap');
__PV;
}
OPTION: con_threshold
usage: "Consensus line thresholds"
type: @f
default: '100,90,80,70'
param: con_threshold
convert: sub { __ARGS;
local $_;
foreach (@{__PV}) {
if ($_ < 50 or $_ > 100) {
__WARN("bad range for '-__ON=$_' must be in range 50..100.");
}
}
__PV;
}
OPTION: con_ignore
usage: "Ignore singleton or class groups __CHOOSE(Bio::MView::Manager::check_ignore_class)"
type: s
default: none
param: con_ignore
convert: sub { __ARGS;
__PV = Bio::MView::Manager::check_ignore_class(__OV);
if (!defined __PV) {
__WARN("unknown consensus ignore mode '-__ON=__OV'.");
__WARN("known ignore classes are: ", join(",",
Bio::MView::Manager::check_ignore_class), "\n");
}
__PV;
}
###########################################################################
[HYBRID]
text: "Hybrid alignment and consensus:"
OPTION: con_gaps
usage: "Count gaps during consensus computations if set to 'on'"
type: b
default: on
param:
###########################################################################
[MAPS]
text: "User defined colormap and consensus group definition:"
OPTION: colorfile
usage: "Load more colormaps from file"
OPTION: groupfile
usage: "Load more groupmaps from file"
###########################################################################
[GENERALFORMAT]
text: "Miscellaneous formatting:"
OPTION: gap
usage: "Use this gap character"
type: s
default: -
param:
OPTION: label0
usage: "Switch off label {0= row number}"
default: 0
param:
convert: sub { __ARGS; (__OV ? 0 : 1) }
OPTION: label1
usage: "Switch off label {1= identifier}"
default: 0
param:
convert: sub { __ARGS; (__OV ? 0 : 1) }
OPTION: label2
usage: "Switch off label {2= description}"
default: 0
param:
convert: sub { __ARGS; (__OV ? 0 : 1) }
OPTION: label3
usage: "Switch off label {3= scores}"
default: 0
param:
convert: sub { __ARGS; (__OV ? 0 : 1) }
OPTION: label4
usage: "Switch off label {4= percent identity}"
default: 0
param:
convert: sub { __ARGS; (__OV ? 0 : 1) }
OPTION: label5
usage: "Switch off label {5= first sequence positions: query}"
default: 0
param:
convert: sub { __ARGS; (__OV ? 0 : 1) }
OPTION: label6
usage: "Switch off label {6= second sequence positions: hit}"
default: 0
param:
convert: sub { __ARGS; (__OV ? 0 : 1) }
OPTION: register
usage: "Output multi-pass alignments with columns in register"
type: b
default: on
param:
###########################################################################
[HTML]
text: "HTML markup:"
OPTION: html
usage: "Controls amount of HTML markup {head,body,data,full,off}"
type: s
default: off
param:
convert: sub { __ARGS;
if (__OV =~ /^full/i) {
__OPTION{__ON} = (16|8|4|2|1);
return 1;
}
if (__OV =~ /^head/i) {
__OPTION{__ON} = (8|4|2|1);
return 1;
}
if (__OV =~ /^body/i) {
__OPTION{__ON} = (4|2|1);
return 1;
}
if (__OV =~ /^data/i) {
__OPTION{__ON} = (1);
return 1;
}
if (__OV =~ /^off/i) {
__OPTION{__ON} = 0;
return 0;
}
__WARN ("unknown setting '-__ON=__OV'");
}
OPTION: title
usage: "Page title string"
type: s
default: ""
OPTION: pagecolor
usage: "Page backgound color"
type: s
default: white
OPTION: textcolor
usage: "Page text color"
type: s
default: black
OPTION: linkcolor
usage: "Link color"
type: s
default: blue
param:
OPTION: alinkcolor
usage: "Active link color"
type: s
default: red
param:
OPTION: vlinkcolor
usage: "Visited link color"
type: s
default: purple
param:
OPTION: alncolor
usage: "Alignment background color"
type: s
default: white
param:
OPTION: labcolor
usage: "Alignment label color"
type: s
default: black
param:
OPTION: symcolor
usage: "Alignment symbol default color"
type: s
default: #666666
param:
OPTION: gapcolor
usage: "Alignment gap color"
type: s
default: #666666
param:
OPTION: css
usage: "Use Cascading Style Sheets {off,on,URL}"
type: s
default: off
param: css1
convert: sub { __ARGS;
#supplied style sheet URL
return 1 if __OV =~ /^(?:file|http):/i;
if (__OV ne 'on' and __OV ne 'off' and __OV ne '0' and __OV ne '1') {
__WARN("bad value for '-__ON=__OV' want {on,off,URL} or {0,1,URL}");
}
return 1 if __OV eq 'on' or __OV eq '1';
return 0;
}
OPTION: bold
usage: "Use bold emphasis for coloring sequence symbols"
default: 0
param:
convert: sub { __ARGS; __OV > 0 ? 1 : 0 }
OPTION: srs
usage: "Try to use SRS links {off,on}"
type: s
default: off
action: sub { __ARGS;
if (__OV eq 'off') {
return $Bio::SRS::Type = 0;
} elsif (__OV eq 'on') {
return $Bio::SRS::Type = 1;
} else {
__WARN("bad SRS setting, want {off,on}.");
}
return $Bio::SRS::Type = 1; #default
}
OPTION: find
usage: "Find and highlight exact string or simple regular expression or ':' delimited set of patterns"
type: s
default: ""
param:
action: sub { __ARGS;
if (__OV) {
__PARAM{'aln_coloring'} = 'find';
__PARAM{'aln_colormap'} =
Bio::MView::Manager::get_default_find_colormap();
}
}
###########################################################################
[GENERICBLAST]
OPTION: hsp
type: s
default: ranked
param:
convert: sub { __ARGS;
return 'all' if __OV =~ /^a/;
return 'discrete' if __OV =~ /^d/;
return 'ranked' if __OV =~ /^r/;
__WARN("bad setting '-__ON=__OV'.");
__WARN("known hsp methods are: ", join(",",
Bio::MView::Manager::check_hsp_tiling), "\n");
}
OPTION: maxeval
type: s
default: unlimited
param:
convert: sub { __ARGS;
return undef if __OV eq 'unlimited';
__TEST('f', __ON, __OV);
__WARN("bad setting '-__ON=__OV', want > 0.") if __OV < 0;
__OV;
}
OPTION: minbits
type: s
default: unlimited
param:
convert: sub { __ARGS;
return undef if __OV eq 'unlimited';
__TEST('f', __ON, __OV);
__WARN("bad setting '-__ON=__OV', want > 0.") if __OV < 0;
__OV;
}
OPTION: strand
type: @s
default: both
param:
convert: sub { __ARGS;
local $_;
foreach (@{__PV}) {
if (lc $_ eq 'p') {
return ['+'];
} elsif (lc $_ eq 'm') {
return ['-'];
} elsif (lc $_ eq 'both') {
return [];
} elsif ($_ eq '*') {
return [];
} else {
__WARN("bad value for '-__ON=$_' choose from '{p,m,both,*}'");
}
}
}
###########################################################################
[BLAST1]
text: "NCBI BLAST (series 1):"
#generic
OPTION: hsp
usage: "HSP tiling method __CHOOSE(Bio::MView::Manager::check_hsp_tiling)"
type: s
default: ranked
OPTION: maxpval
usage: "Ignore hits with p-value greater than N"
type: s
default: unlimited
param:
convert: sub { __ARGS;
return undef if __OV eq 'unlimited';
__TEST('f', __ON, __OV);
__WARN("bad setting '-__ON=__OV', want > 0.") if __OV < 0;
__OV;
}
OPTION: minscore
usage: "Ignore hits with score less than N"
type: s
default: unlimited
param:
convert: sub { __ARGS;
return undef if __OV eq 'unlimited';
__TEST('f', __ON, __OV);
__WARN("bad setting '-__ON=__OV', want > 0.") if __OV < 0;
__OV;
}
#generic
OPTION: strand
usage: "Report only these query strand orientations {p,m,both,*}"
type: @s
default: both
###########################################################################
[BLAST2]
text: "NCBI BLAST (series 2), NCBI BLAST+, WashU-BLAST:"
#generic
OPTION: hsp
usage: "HSP tiling method __CHOOSE(Bio::MView::Manager::check_hsp_tiling)"
type: s
default: ranked
#generic
OPTION: maxeval
usage: "Ignore hits with e-value greater than N"
type: s
default: unlimited
#generic
OPTION: minbits
usage: "Ignore hits with bits less than N"
type: s
default: unlimited
#generic
OPTION: strand
usage: "Report only these query strand orientations {p,m,both,*}"
type: @s
default: both
###########################################################################
[PSIBLAST]
text: "NCBI PSI-BLAST:"
#generic
OPTION: hsp
usage: "HSP tiling method __CHOOSE(Bio::MView::Manager::check_hsp_tiling)"
type: s
default: ranked
#generic
OPTION: maxeval
usage: "Ignore hits with e-value greater than N"
type: s
default: unlimited
#generic
OPTION: minbits
usage: "Ignore hits with bits less than N"
type: s
default: unlimited
OPTION: cycle
usage: "Process the N'th cycle of a multipass search {1..N,first,last,all,*}"
type: @s
default: last
param:
convert: sub { __ARGS;
local $_; my @tmp=();
foreach (@{__PV}) {
if ($_ eq 'first') {
push @tmp, 1;
} elsif ($_ eq 'last') {
push @tmp, 0;
} elsif ($_ eq 'all') {
@tmp = ();
last;
} elsif ($_ eq '*') {
@tmp = ();
last;
} elsif (/^\d+$/) {
push @tmp, $_;
} else {
__WARN("bad value for '-__ON=$_' choose from '{1..N,first,last,all,*}'");
}
}
return [ @tmp ];
}
###########################################################################
[FASTA]
text: "FASTA (U. of Virginia):"
OPTION: minopt
usage: "Ignore hits with opt score less than N"
type: s
default: unlimited
param:
convert: sub { __ARGS;
return undef if __OV eq 'unlimited';
__TEST('f', __ON, __OV);
__WARN("bad setting '-__ON=__OV', want > 0.") if __OV < 0;
__OV;
}
#generic
OPTION: strand
usage: "Report only these query strand orientations {p,m,both,*}"
type: @s
default: both
###########################################################################
[HSSP]
text: "HSSP/Maxhom:"
OPTION: chain
usage: "Report only these chainnames/numbers {A..B,1..N,first,last,all,*}"
type: @s
default: *
param:
convert: sub { __ARGS;
local $_; my @tmp=();
foreach (@{__PV}) {
if ($_ eq 'first') {
push @tmp, 1;
} elsif ($_ eq 'last') {
push @tmp, 0;
} elsif ($_ eq 'all') {
@tmp = ();
last;
} elsif ($_ eq '*') {
@tmp = ();
last;
} else {
push @tmp, $_;
}
}
return [ @tmp ];
}
###########################################################################
[MAF]
text: "UCSC MAF:"
OPTION: block
usage: "Report only these blocks {1..N,first,last,all,*}"
type: @s
default: first
param:
convert: sub { __ARGS;
local $_; my @tmp=();
foreach (@{__PV}) {
if ($_ eq 'first') {
push @tmp, 1;
} elsif ($_ eq 'last') {
push @tmp, 0;
} elsif ($_ eq 'all') {
@tmp = ();
last;
} elsif ($_ eq '*') {
@tmp = ();
last;
} elsif (/^\d+$/) {
push @tmp, $_;
} else {
__WARN("bad value for '-__ON=$_' choose from '{1..N,first,last,all,*}'");
}
}
return [ @tmp ];
}
###########################################################################
[MULTAL]
text: "MULTAL/MULTAS:"
#share
OPTION: block
usage: "Report only these blocks {1..N,first,last,all,*}"
type: @s
default: first
###########################################################################
[HELP]
text: "More information and help:"
OPTION: help
usage: "This help"
OPTION: listcolors
usage: "Print listing of known colormaps"
OPTION: listgroups
usage: "Print listing of known consensus groups"
OPTION: listcss
usage: "Print style sheet"
###########################################################################