#!/usr/bin/perl # Description: This is a template example script. It reads an alignment as fasta and produces formatted output from the web service # Author: Peter Wad Sackett # Email: # Version: 1.1 ws0 # Date: 2008-09-15 # usage: perl maxalign_ws.pl # include standard XML::Compile helper functions (used to initiate WSDL proxys) use strict; require "xml-compile.pl"; # create proxy to maxalign my $maxalign = WSDLclient ( 'http://www.cbs.dtu.dk/ws/MaxAlign/MaxAlign_1_1_ws0.wsdl' ); #my $maxalign = WSDL2proxy ( 'http://www.cbs.dtu.dk/ws/MaxAlign/MaxAlign_1_1_ws0.wsdl' ); # Get alignment in fasta format from STDIN my @fasta; my $entry = -1; while (<>) { chomp; if (/^>(.*)/) { my ($id , $comment) = split (" ",$1); $entry++; $fasta[$entry]->{id} = $id; $fasta[$entry]->{comment} = $comment if defined $comment; } else { $fasta[$entry]->{seq} .= $_; } } # Create request my @sequence; for ( my $i = 0 ; $i < scalar ( @fasta ) ; $i ++ ) { push @sequence , { id => $fasta[$i]->{id} , comment => $fasta[$i]->{comment} , seq => $fasta[$i]->{seq} }; } # Do the request my $response = $maxalign->{maxalign}->( parameters => { parameters => { alignment => {sequence => [@sequence]} } }); # Print the response print "# Original number of sequences: $response->{parameters}->{output}->{originalsequencenumber}\n"; print "# Original total number of columns: $response->{parameters}->{output}->{originalcolumnnumber}\n"; print "# Original ungapped columns: $response->{parameters}->{output}->{originalungapcolumnnumber}\n"; print "# Original alignment area: $response->{parameters}->{output}->{originalalignmentarea}\n\n"; if (exists $response->{parameters}->{output}->{resultsequencenumber} and $response->{parameters}->{output}->{resultungapcolumnnumber} and $response->{parameters}->{output}->{resultalignmentarea} ) { print "# Number of sequences in result: $response->{parameters}->{output}->{resultsequencenumber}\n"; print "# Ungapped columns in result: $response->{parameters}->{output}->{resultungapcolumnnumber}\n"; print "# Resulting alignment area: $response->{parameters}->{output}->{resultalignmentarea}\n\n"; print "#New alignment in fasta format:\n\n"; foreach my $seqref (@{$response->{parameters}->{output}->{resultalignment}->{sequence}}) { print ">$seqref->{id}"; print exists $seqref->{comment} ? " $seqref->{comment}\n" : "\n"; for (my $i = 0; $i < length $seqref->{seq}; $i += 60) { print substr($seqref->{seq}, $i, 60), "\n"; } } } else { print "This alignment can't be improved by removing sequences\n"; }