#!/usr/bin/perl -w # Usage: # key-to-rasmol [-start 1] [-set_name conserved] < YKL149C.t2k.w0.5.key-residues > conserved.rasmol # # converts a list of key residues (one residue per line) into # a rasmol script that highlights those residues. # # Since the numbering is taken from the key-residues file, the -start option # is usually useless. If defined, then -start -1 is added to the # numbers in the key-residues file. # # The residues are defined to be a set, whose name can be specified. use Getopt::Long; my $start=1; my $set_name="conserved"; GetOptions("start_column=n" => \$start , "set_name=s" => \$set_name ); my @residues; # which residue numbers to highlight while () { if (/[A-Za-z]+(\d+)/) { push @residues, $1 + $start-1; } } # compress residues into ranges my @low; my @high; my $range=-1; my $prev=-99999; foreach my $res (@residues) { if ($res != $prev+1) { # start a new range $range++; $low[$range] = $high[$range] = $res; } else { # extend existing range $high[$range] = $res; } $prev = $res; } my @ranges; for ($i=0; $i< scalar(@low); $i++) { $ranges[$i] = ($low[$i]==$high[$i])? $low[$i] : "$low[$i]-$high[$i]"; } print "select none\n"; if (scalar(@ranges) >0) { print " select " . join("\n select selected or ", @ranges) . "\n"; print " select selected and not (*.N or *.C or *.O)\n"; } print "define $set_name selected\n"; print " wireframe 0.1\n"; print " spacefill 0.4\n"; print " color cpk\n"; print "center selected\n"; print "zoom 150\n";