#! /usr/bin/perl -w # Released under the terms of the BiO Licence. # http://biomatics.kaist.ac.kr/Research/Biolicense/ use strict; use Getopt::Long; use lib '/BiO/Research/Perl/Modules/'; use Mysql::Simple 'doQuery'; use PSIMAP '$scopDb'; my $PDB; GetOptions ( "pdb=s" => \$PDB, ); die( &usage ) unless $PDB; my @color = qw( Red Green Blue Cyan Magenta Yellow Orange SeaGreen Pink SkyBlue Gold Brown HotPink Purple BlueTint Grey GreenBlue PinkTint GreenTint RedOrange Violet YellowTint ); # Get domain data. my $domain = doQuery(" SELECT PDB, SUNID, SID, SCCS, DOMAIN FROM $scopDb.domain WHERE PDB = '$PDB' ") or die "DBI::errstr\n"; die "$PDB NOT FOUND IN $scopDb\n" unless @$domain; my $time = localtime(); print " load inline echo Protein Contact DB: $PDB\t$time echo Author: Dan Bolser (MRC Dunn) echo \n\n"; my %sccs; # Checks for my %color; # multi groups. # For each domain for (my $i=0; $i<@$domain; $i++){ my ($pdb, $sunid, $sid, $sccs, $domainDef) = @{$domain->[$i]}; # Define domain name alias my $color = $color[$i%@color]; # Spit some information warn join("\t", $i, @{$domain->[$i]}, $color), "\n"; # Format SCCS for rasmol my $sccs_name = $sccs; $sccs_name =~ tr/\./_/; # Deal with SCCS groups. unless ( $sccs{$sccs} ){ print " define $sccs_name "; $sccs{$sccs}++; } # Deal with color groups. unless ( $color{$color} ){ print " define x$color "; $color{$color}++; } # Format some text my $details = sprintf( "%12s: %3s %5s %5s %-15s %-15s %8s\n", ("DOMAIN($i)", $pdb, $sunid, $sid, $sccs_name, $domainDef, $color)); # Convert SCOP domain definition into rasmol format. my $selectDomain = &scop2rasmol( $domainDef ); # Do the main print " echo $details select $selectDomain # Select domain color $color\n # Color domain. define px$sunid selected # Define alias... define No$i selected # ... # select within(5.0,selected) # Select domain contacts! # define surf_px$sunid selected # Define alias... # define surf_No$i selected select px$sunid # Handle multi domain alias select x$color # ... define x$color selected, $selectDomain # ... select $sccs_name # ... define $sccs_name selected, $selectDomain # ... select !* # Reset selection. \n\n"; } print " select * \n echo echo Each domain is defined as... echo px00000 (scop sunid) echo a_1_1_1_1 (scop sccs) echo xCOLOR (COLOR = rasmol color, eg xRed) echo No1 (n = domain number, eg No1) echo \n exit # These newlines are important! \n\n"; warn "OK\n"; sub scop2rasmol { my $scopDomainDefinition = shift; my @rasmolSelect; # Split the domain definition into components. foreach ( split(/,/, $scopDomainDefinition) ){ if ( /^(.{1}):$/o ){ push @rasmolSelect, "*$1" } # X: elsif ( /^((?:-|)\d+)(?:\D|)-((?:-|)\d+)(?:\D|)$/o ){ push @rasmolSelect, "$1-$2" } # 40-90 elsif ( /^(.{1}):((?:-|)\d+)(?:\D|)-((?:-|)\d+)(?:\D|)$/o ){ push @rasmolSelect, "$2-$3$1" } # X:40-90 elsif ( /^-$/o ){ push @rasmolSelect, "*" } # - else { die "$_:BAD DOMAIN DEF!\n" } } my $rasmolSelectString = join(",", @rasmolSelect); return $rasmolSelectString; } sub usage{ warn <<"EOS"; Create a rasmol script for defining the SCOP domain structure of a PDB. USAGE: $0 PDBCode EOS }