[Bioperl-l] Generalized _setparams proposal
Chris Fields
cjfields at uiuc.edu
Wed Jan 10 16:17:16 UTC 2007
Sendu,
Looks great to me! As with your former proposed Bio::Root::RootI method,
would you switch run modules over to using this, or leave them be?
chris
> Bioperl-run wrappers (and some other modules) typically store
> parameters from the user intended for the program they wrap
> via methods of similar name to the parameter. The wrappers
> then implement their own way of taking the values of those
> methods and generating a parameter string suitable for
> passing to the program.
>
> Typically this is done in a _setparams() method with code
> along the lines of:
>
> $param_string .= ' --param_x '.$self->param_x if $self->param_x;
>
> or a number of modules have their own variation on:
>
> # clustalw's _setparam method
> my $param_string = "";
> for $attr ( @CLUSTALW_PARAMS ) {
> $value = $self->$attr();
> next unless (defined $value);
> my $attr_key = lc $attr; #put params in format expected by clustalw
> $attr_key = ' -'.$attr_key;
> $param_string .= $attr_key.'='.$value; } #...
>
>
> I propose generalizing this into a _setparams method in
> Bio::Tools::Run::WrapperBase, eg. such that the above could
> be re-implemented as:
>
> # clustalw's _setparam method
> my $param_string = $self->SUPER::_setparam(
> -methods => \@CLUSTALW_PARAMS,
> -dash => 1,
> -lc => 1,
> -join => '=');
> #...
>
>
>
> Proposed code follows:
>
> =head2 _setparams()
>
> Title : _setparams
> Usage : $params = $self->_setparams(-methods => [qw(window
> evalue_cutoff)])
> Function: For internal use by wrapper modules to build
> parameter strings
> suitable for sending to the program being
> wrapped. For each method
> name supplied, calls the method and adds the
> method name (as modified
> by optional things) along with its value (unless
> a switch) to the
> parameter string
> Example : $params = $self->_setparams(-methods =>
> [qw(window evalue_cutoff)],
> -double_dash => 1,
> -underscore_to_dash => 1);
> If window() had not been previously called, but
> evalue_cutoff(0.5)
> had been called, $params would be ' --evalue-cutoff 0.5'
>
> A separate call should be used for methods that
> store values that
> are intended to be valueless switches:
>
> $params .= $self->_setparams(-methods =>
> [qw(simple large all)],
> -switches => 1,
> -double_dash => 1,
> -underscore_to_dash => 1);
> If simple() had not been called, large(1) had
> been called and all(0)
> had been called, $params would now be '
> --evalue-cutoff 0.5 --large'
>
> Returns : parameter string
> Args : -methods => [] or {} # REQUIRED, array ref of
> method names
> to call,
> or hash ref where keys are
> method names and
> values are how those names
> should be output
> in the params string
> -join => string # define how parameters and their
> values are
> joined, default ' '. (eg.
> could be '=' for
> param=value)
> -switches => boolean # all supplied methods are
> treated as switches
> -lc => boolean # lc() method names prior to
> output in
> string
> -dash => boolean # prefix all method names
> with a single
> dash
> -double_dash => bool # prefix all method names
> with a double dash
> -underscore_to_dash => boolean # convert all
> underscores in method
> names to dashes
>
> =cut
>
> sub _setparams {
> my ($self, @args) = @_;
>
> my ($methods, $switch, $join, $lc, $d, $dd, $utd) =
> $self->_rearrange([qw(METHODS
> SWITCHES
> JOIN
> LC
> DASH
> DOUBLE_DASH
> UNDERSCORE_TO_DASH)], @args);
> $self->throw('-methods is required') unless $methods;
> $self->throw("-dash and -double_dash are mutually
> exclusive") if ($d && $dd);
> $join ||= ' ';
>
> my %methods = ref($methods) eq 'HASH' ? %{$methods} :
> map { $_ => $_ } @{$methods};
>
> my $param_string = '';
> while (my ($method, $method_out) = each %methods) {
> my $value = $self->$method();
> next unless (defined $value);
> next if ($switch && ! $value);
>
> $method_out = lc($method_out) if $lc;
> $method_out = '-'.$method_out if $d;
> $method_out = '--'.$method_out if $dd;
> $method_out =~ s/_/-/g if $utd;
>
> $param_string .= ' '.$method_out.($switch ? '' :
> $join.$value);
> }
>
> return $param_string;
> }
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l
More information about the Bioperl-l
mailing list