#!/usr/bin/perl # this script reads a DNA sequence on STDIN (fasta format) # and runs a hardcoded promoter profile (sigma 70 + UP element + FIS binding site) use SOAP::Lite; use strict; my $tools = SOAP::Lite ->service('http://www.cbs.dtu.dk/ws/SmallTools/SmallTools_1_0.wsdl') ->on_fault( sub { my($self, $res) = @_; die "faultcode:", ref $res ? $res->faultcode : $self->transport->status, "\n" , "faultstring:", ref $res ? $res->faultstring : $self->transport->status, "\n" , ; }); my @IDS; my @SEQ; # read fasta sequence from STDIN my $id = -1; while (<>) { chomp; if ( /^>(.*)/ ) { $id++; $IDS[$id] = $1; } elsif (/^([A-Za-z]+)$/) { $SEQ[$id] .= $1; } } foreach my $id (0 .. $#IDS) { my $xml = " $SEQ[$id] -10 region 1 090091910 901910090 100000 000001 13
16
19
-35 region 1 1000052 9091077113 009112613 000136413 0
3
6
UP element 0.5 2506138657775772613651321425667766137013 66160125014135364257864643912132578779125 01429521121121300113140000700 0611001300011024013131000053 -4
2
4
FIS 0.5 0 38392602613039787777655910051150263126 525165005365001130266510011065 1009126132652131312661664076064600 01003912000000002640090000
"; my $infscan_request = SOAP::Data->type('xml' => $xml); my $result = $tools->infscan($infscan_request); my @RESULT; if ( ref ( $result->{entry} ) eq 'ARRAY') { @RESULT = @{$result->{entry}}; } else { @RESULT = ( $result->{entry}); } foreach my $r (@RESULT) { print $IDS[$id],"\t",$r->{pos},"\t",$r->{bitscore_tot}; my @UNIT; if (ref ( $r->{unit} ) eq 'ARRAY') { @UNIT = @{$r->{unit}}; } else { @UNIT = ( $r->{unit}); } foreach my $u (@UNIT) { if ( defined ( $u->{'seq'} ) ) { print "\t"; print "($u->{'spacer'} nt) " if defined $u->{'spacer'}; print $u->{'seq'}; } else { print "\t-"; } } print "\n"; } }