X-Git-Url: http://source.jalview.org/gitweb/?p=jpred.git;a=blobdiff_plain;f=jpred%2Flib%2FDSSP%2FSCOP.pm;fp=jpred%2Flib%2FDSSP%2FSCOP.pm;h=a05baca7a834bd74f8ec6adca015a51a450fcdbc;hp=5975c33aaf72ec6c2f0d5aca6b3ed6075f6222a0;hb=eb3001dc41bf6cd46e20fd13fe3efbe9dedf6013;hpb=2cf032f4b987ba747c04159965aed78e3820d942 diff --git a/jpred/lib/DSSP/SCOP.pm b/jpred/lib/DSSP/SCOP.pm index 5975c33..a05baca 100644 --- a/jpred/lib/DSSP/SCOP.pm +++ b/jpred/lib/DSSP/SCOP.pm @@ -32,56 +32,61 @@ Returns the DSSP::Position objects from within the range given. These are in the =cut sub get_range { - my ($self, $defn) = @_; - - $defn =~ / / and croak "get_range('$defn') has a space in it, which isn't allowed"; - my @ranges = split /,/, $defn; - - my @data; - for (@ranges) { - my @range; - # A:1-200 or A: - if (/:/) { - my ($chain, $range) = split /:/, $_; - - # A:1-200 - if ($range =~ /([[:alnum:]]+)-([[:alnum:]]+)/) { - push @data, [ $self->select_positions($chain, $1, $2) ]; - } - # Hmmmmm. - elsif ($range) { - confess "You shouldn't be here"; - } - # A: - else { - push @data, [ $self->get_chain_defs($chain) ]; - } - } - else { - # 297-368 - if (/([[:alnum:]]+)-([[:alnum:]]+)/) { - my @chains = $self->chains; - if (@chains > 1) { - die "Don't know which chain to select" - } - my ($chain) = @chains; - - push @data, [ $self->select_positions($chain, $1, $2) ]; - } - # - - elsif (/^-$/) { - for my $chain ($self->chains) { - push @data, [ $self->get_chain_defs($chain) ]; - } - } - # Otherwise we don't know what it is - else { - confess "Missed particular '$_'"; - } - } - } - - return @data; + my ( $self, $defn ) = @_; + + $defn =~ / / and croak "get_range('$defn') has a space in it, which isn't allowed"; + my @ranges = split /,/, $defn; + + my @data; + for (@ranges) { + my @range; + + # A:1-200 or A: + if (/:/) { + my ( $chain, $range ) = split /:/, $_; + + # A:1-200 + if ( $range =~ /([[:alnum:]]+)-([[:alnum:]]+)/ ) { + push @data, [ $self->select_positions( $chain, $1, $2 ) ]; + } + + # Hmmmmm. + elsif ($range) { + confess "You shouldn't be here"; + } + + # A: + else { + push @data, [ $self->get_chain_defs($chain) ]; + } + } else { + + # 297-368 + if (/([[:alnum:]]+)-([[:alnum:]]+)/) { + my @chains = $self->chains; + if ( @chains > 1 ) { + die "Don't know which chain to select"; + } + my ($chain) = @chains; + + push @data, [ $self->select_positions( $chain, $1, $2 ) ]; + } + + # - + elsif (/^-$/) { + for my $chain ( $self->chains ) { + push @data, [ $self->get_chain_defs($chain) ]; + } + } + + # Otherwise we don't know what it is + else { + confess "Missed particular '$_'"; + } + } + } + + return @data; } =head2 $self->select_positions($chain, $start, $end); @@ -93,42 +98,42 @@ Passed a chain =cut sub select_positions { - my ($self, $chain, $start, $end) = @_; - - confess "Not passed all arguments" if grep { not defined } $chain, $start, $end; - confess "Not passed a valid chain" unless grep { $_ eq $chain } $self->chains; - - my ($flag, @positions) = 0; - my $test = sub { - my ($off, $start, $end) = @_; - if (3 == grep { looks_like_number $_ } $off, $start, $end) { - return 1 if $off >= $start and $off <= $end; - } - else { - return undef; - } - }; - - for my $pos ($self->get_chain_defs($chain)) { - if ($pos->break) { - push @positions, $pos if $flag; - next; - } - - my $off = $pos->off; - if ( - ($off eq $start or $test->($off, $start, $end)) - .. - ($off eq $end or $test->($off, $start, $end)) - # $test($off, $start, $end) $off >= $start and $off <= $end) - #($off eq $start or ) - ) { - push @positions, $pos; - $flag = 1; - } - else { $flag = 0 } - } - return @positions; + my ( $self, $chain, $start, $end ) = @_; + + confess "Not passed all arguments" if grep { not defined } $chain, $start, $end; + confess "Not passed a valid chain" unless grep { $_ eq $chain } $self->chains; + + my ( $flag, @positions ) = 0; + my $test = sub { + my ( $off, $start, $end ) = @_; + if ( 3 == grep { looks_like_number $_ } $off, $start, $end ) { + return 1 if $off >= $start and $off <= $end; + } else { + return undef; + } + }; + + for my $pos ( $self->get_chain_defs($chain) ) { + if ( $pos->break ) { + push @positions, $pos if $flag; + next; + } + + my $off = $pos->off; + if ( + ( $off eq $start or $test->( $off, $start, $end ) ) .. ( $off eq $end or $test->( $off, $start, $end ) ) + + # $test($off, $start, $end) $off >= $start and $off <= $end) + #($off eq $start or ) + ) + { + push @positions, $pos; + $flag = 1; + } else { + $flag = 0; + } + } + return @positions; } 1;