Mercurial > repos > marpiech > norwich_tools
diff tools/rdock/lib/run_rbfuncs.pl @ 0:bc03dbb6eb37 draft
planemo upload commit 781926e52355f7805db8d9a4ccafeff397b19aa4-dirty
author | marpiech |
---|---|
date | Mon, 29 Aug 2016 03:38:13 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/rdock/lib/run_rbfuncs.pl Mon Aug 29 03:38:13 2016 -0400 @@ -0,0 +1,296 @@ +#!/usr/bin/perl +# Perl functions for the run_rb* collection of automated docking scripts + +use strict; + +################################################################################ +# sub get_prm_table +# +# Purpose: return a hash table of +# key=parameter file name, value = file title +# for all .prm files in a directory +# +# Usage: %prm_table = get_prm_table($dir) +# +# Arguments: +# $prmDir - directory to search for .prm files +# +# Return parameters: +# %prm_table - hash table +# +sub get_prm_table { +#Arguments + my $prm_dir = shift; + +#Local variables + my @prm_list; + my %prm_table; + my $TITLEREC = "TITLE "; + my $file; + my $title; + my @titleLines; + +#Get the list of files ending in .prm + @prm_list = glob "$prm_dir/*.prm"; + +#Read each file and extract the title record + foreach $file (@prm_list) { + open PRMHANDLE,$file; + @titleLines = grep /^$TITLEREC/,<PRMHANDLE>; + close PRMHANDLE; +#Extract just the file name from the full path + my $prmName = substr($file, rindex($file,"/")+1); +#Check if a title record was found + if (scalar @titleLines) { + $title = substr $titleLines[0],length($TITLEREC); + chomp $title; + $prm_table{$prmName} = $title; + } + else { + $prm_table{$prmName} = "No title"; + } + } + return %prm_table; +} +################################################################################ +# sub get_dock_table +# +# Purpose: Modified version of get_prm_table +# specific for the RBT_LIGDB docking database +# Return a hash table of +# key=docking library, value = expression for all sd files in that library +# +# Assumes that all subdirs within $db_dir are separate vendor libraries, +# and that each subdir contains a set of compressed .sd.gz files +# +# Usage: %dock_table = get_dock_table($dir) +# +# Arguments: +# $db_dir - directory to search for docking libraries +# +# Return parameters: +# %dock_table - hash table# +# +sub get_dock_table { +#Arguments + my $db_dir = shift; + +#Local variables + my ($lib,$sdfiles); + my (@lib_list,@sd_list); + my %dock_table; + + opendir DBDIR,$db_dir; + @lib_list = readdir DBDIR; + closedir DBDIR; + + foreach $lib (sort @lib_list) { + if (-d "$db_dir/$lib") { + $sdfiles = "$db_dir/$lib/*.sd*"; + @sd_list = glob $sdfiles; + my $n = scalar(@sd_list); + if ($n > 0) { + $dock_table{"$lib ($n files)"} = $sdfiles; + } + } + } + + return %dock_table; +} +# +################################################################################ +# sub get_selection +# +# Purpose: allow a user to select from +# a list of parameter files. +# +# Usage: $receptor = get_selection(\%prm_table,"receptor") +# +# Arguments: +# $prm_table_ref - reference to hash table returned by get_prm_table +# $name - descriptive name for items (e.g. "receptor" or "script" +# +# Return parameters: +# $item - selected items (key into %prm_table) +# +sub get_selection { +#Arguments + my $prm_table_ref = shift; + my $name = shift; + +#Local variables + my @items = sort keys %$prm_table_ref; + my $nItems = scalar @items; + my ($i,$itemNum,$item); + my $inRange; + + print "\n\n$name selection:\n\n"; + $i=1; + foreach $item (@items) { + print "$i\t$item\t$$prm_table_ref{$item}\n"; + $i++; + } + do { + print "\nEnter the $name number: "; + $itemNum = <STDIN>; + chomp $itemNum; + print "\n"; + $inRange = (($itemNum >= 1) && ($itemNum <= $nItems)); + print "$itemNum is out of range\n" if (!$inRange); + } until ($inRange); + + print "\nYou have selected the following $name\n"; + $item = $items[$itemNum-1]; + print "$itemNum\t$item\t$$prm_table_ref{$item}\n"; + return $item; +} + +################################################################################ +# sub get_multiple_selection +# +# Purpose: allow a user to multiply select from the docking library list +# +# Usage: $receptor = get_selection(\%prm_table,"receptor") +# +# Arguments: +# $prm_table_ref - reference to hash table returned by get_prm_table +# $name - descriptive name for items (e.g. "receptor" or "script" +# +# Return parameters: +# $item - selected items (key into %prm_table) +# +sub get_multiple_selection { +#Arguments + my $prm_table_ref = shift; + my $name = shift; + +#Local variables + my @items = sort keys %$prm_table_ref; + my $nItems = scalar @items; + my ($i,$idstring,$itemNum,$item); + my @itemNums; + my @selectedItems; + my $inRange; + my $allInRange; + + print "\n\n$name selection:\n\n"; + $i=1; + foreach $item (@items) { + print "$i\t$item\t$$prm_table_ref{$item}\n"; + $i++; + } + do { + print "\nEnter the $name number(s): "; + my $idstring = <STDIN>; + chomp $idstring; + @itemNums = get_ids($idstring); + print "\n"; + $allInRange = 1; + foreach $itemNum (@itemNums) { + $inRange = (($itemNum >= 1) && ($itemNum <= $nItems)); + print "$itemNum is out of range\n" if (!$inRange); + $allInRange = $allInRange && $inRange; + } + } until ($allInRange); + + print "\nYou have selected the following $name(s)\n"; + foreach $itemNum (@itemNums) { + $item = $items[$itemNum-1]; + push @selectedItems,$item; + print "$itemNum\t$item\t$$prm_table_ref{$item}\n"; + } + return @selectedItems; +} + +################################################################################ +# sub get_input +# +# Purpose: get user input, or returns default if no response given +# +# Usage: $nRuns = get_input("Enter no. of runs per ligand",10) +# +# Arguments: +# $question - text of question to ask +# $defResponse - default answer +# +# Return parameters: +# $response - user response, or default + +sub get_input { +#Arguments + my $question = shift; + my $defResponse = shift; + print "$question [$defResponse]: "; + my $response = <STDIN>; + chomp $response; + $response = $defResponse if ($response eq ""); + return $response; +} + +# Based on //depot/intranet/1.0/lib/rbt_func.pl#1 +# this function converts a list of ids in one string +# in the format 1,2,4-6,8,15-20 +# and returns an @array with the unique ids +sub get_ids { + my $idstring = shift; + my %ids; + + foreach my $id (split (',',$idstring)){ + if ( grep (/-/,$id)){ + (my $low, my $up) = split ('-',$id); + for ( my $co = $low; $co <= $up; $co++ ){ + $ids{$co}=$co; + } + } + else { + $ids{$id}=$id; + } + } + + return (sort {$a<=>$b} keys %ids); +} +################################################################################ +# sub get_filter_table +# +# Purpose: return a hash table of +# key=filter file name, value = file title +# for all .filter files in a directory +# +# Usage: %filter_table = get_filter_table($dir) +# +# Arguments: +# $filterDir - directory to search for .filter files +# $tmp - temperature for first filter +# Note: +# The first two filters are not in a file, but are created here +# +# Return parameters: +# %filter_table - hash table +# +sub get_filter_table { +#Arguments + my $filter_dir = shift; + my $tmp = shift; + +#Local variables + my $pwd = $ENV{"PWD"}; + my @filter_list; + my %filter_table; + my $file; + +#Get the list of files ending in .filter + @filter_list = ((glob "$pwd/*.filter"), (glob "$filter_dir/*.filter")); + $filter_table{"1no_other_filters"} = ""; + # $filter_table{"1threshold"} = "\tSCORE.INTER < $tmp"; + # $filter_table{"2cavity"} = "\t\tSCORE.RESTR.CAVITY < 1 "; + +#Read each file and extract the title record + foreach $file (@filter_list) { +#Extract just the file name from the full path + my $filterName = substr($file, rindex($file,"/")+1); +#Check if a title record was found + $filter_table{$filterName} = "No title"; + } + return %filter_table; +} +1;