Mercurial > repos > marpiech > norwich_tools_docking
comparison tools/rdock/lib/run_rbfuncs.pl @ 3:b02d74d22d05 draft default tip
planemo upload
| author | marpiech |
|---|---|
| date | Mon, 29 Aug 2016 08:23:52 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 2:bd50f811878f | 3:b02d74d22d05 |
|---|---|
| 1 #!/usr/bin/perl | |
| 2 # Perl functions for the run_rb* collection of automated docking scripts | |
| 3 | |
| 4 use strict; | |
| 5 | |
| 6 ################################################################################ | |
| 7 # sub get_prm_table | |
| 8 # | |
| 9 # Purpose: return a hash table of | |
| 10 # key=parameter file name, value = file title | |
| 11 # for all .prm files in a directory | |
| 12 # | |
| 13 # Usage: %prm_table = get_prm_table($dir) | |
| 14 # | |
| 15 # Arguments: | |
| 16 # $prmDir - directory to search for .prm files | |
| 17 # | |
| 18 # Return parameters: | |
| 19 # %prm_table - hash table | |
| 20 # | |
| 21 sub get_prm_table { | |
| 22 #Arguments | |
| 23 my $prm_dir = shift; | |
| 24 | |
| 25 #Local variables | |
| 26 my @prm_list; | |
| 27 my %prm_table; | |
| 28 my $TITLEREC = "TITLE "; | |
| 29 my $file; | |
| 30 my $title; | |
| 31 my @titleLines; | |
| 32 | |
| 33 #Get the list of files ending in .prm | |
| 34 @prm_list = glob "$prm_dir/*.prm"; | |
| 35 | |
| 36 #Read each file and extract the title record | |
| 37 foreach $file (@prm_list) { | |
| 38 open PRMHANDLE,$file; | |
| 39 @titleLines = grep /^$TITLEREC/,<PRMHANDLE>; | |
| 40 close PRMHANDLE; | |
| 41 #Extract just the file name from the full path | |
| 42 my $prmName = substr($file, rindex($file,"/")+1); | |
| 43 #Check if a title record was found | |
| 44 if (scalar @titleLines) { | |
| 45 $title = substr $titleLines[0],length($TITLEREC); | |
| 46 chomp $title; | |
| 47 $prm_table{$prmName} = $title; | |
| 48 } | |
| 49 else { | |
| 50 $prm_table{$prmName} = "No title"; | |
| 51 } | |
| 52 } | |
| 53 return %prm_table; | |
| 54 } | |
| 55 ################################################################################ | |
| 56 # sub get_dock_table | |
| 57 # | |
| 58 # Purpose: Modified version of get_prm_table | |
| 59 # specific for the RBT_LIGDB docking database | |
| 60 # Return a hash table of | |
| 61 # key=docking library, value = expression for all sd files in that library | |
| 62 # | |
| 63 # Assumes that all subdirs within $db_dir are separate vendor libraries, | |
| 64 # and that each subdir contains a set of compressed .sd.gz files | |
| 65 # | |
| 66 # Usage: %dock_table = get_dock_table($dir) | |
| 67 # | |
| 68 # Arguments: | |
| 69 # $db_dir - directory to search for docking libraries | |
| 70 # | |
| 71 # Return parameters: | |
| 72 # %dock_table - hash table# | |
| 73 # | |
| 74 sub get_dock_table { | |
| 75 #Arguments | |
| 76 my $db_dir = shift; | |
| 77 | |
| 78 #Local variables | |
| 79 my ($lib,$sdfiles); | |
| 80 my (@lib_list,@sd_list); | |
| 81 my %dock_table; | |
| 82 | |
| 83 opendir DBDIR,$db_dir; | |
| 84 @lib_list = readdir DBDIR; | |
| 85 closedir DBDIR; | |
| 86 | |
| 87 foreach $lib (sort @lib_list) { | |
| 88 if (-d "$db_dir/$lib") { | |
| 89 $sdfiles = "$db_dir/$lib/*.sd*"; | |
| 90 @sd_list = glob $sdfiles; | |
| 91 my $n = scalar(@sd_list); | |
| 92 if ($n > 0) { | |
| 93 $dock_table{"$lib ($n files)"} = $sdfiles; | |
| 94 } | |
| 95 } | |
| 96 } | |
| 97 | |
| 98 return %dock_table; | |
| 99 } | |
| 100 # | |
| 101 ################################################################################ | |
| 102 # sub get_selection | |
| 103 # | |
| 104 # Purpose: allow a user to select from | |
| 105 # a list of parameter files. | |
| 106 # | |
| 107 # Usage: $receptor = get_selection(\%prm_table,"receptor") | |
| 108 # | |
| 109 # Arguments: | |
| 110 # $prm_table_ref - reference to hash table returned by get_prm_table | |
| 111 # $name - descriptive name for items (e.g. "receptor" or "script" | |
| 112 # | |
| 113 # Return parameters: | |
| 114 # $item - selected items (key into %prm_table) | |
| 115 # | |
| 116 sub get_selection { | |
| 117 #Arguments | |
| 118 my $prm_table_ref = shift; | |
| 119 my $name = shift; | |
| 120 | |
| 121 #Local variables | |
| 122 my @items = sort keys %$prm_table_ref; | |
| 123 my $nItems = scalar @items; | |
| 124 my ($i,$itemNum,$item); | |
| 125 my $inRange; | |
| 126 | |
| 127 print "\n\n$name selection:\n\n"; | |
| 128 $i=1; | |
| 129 foreach $item (@items) { | |
| 130 print "$i\t$item\t$$prm_table_ref{$item}\n"; | |
| 131 $i++; | |
| 132 } | |
| 133 do { | |
| 134 print "\nEnter the $name number: "; | |
| 135 $itemNum = <STDIN>; | |
| 136 chomp $itemNum; | |
| 137 print "\n"; | |
| 138 $inRange = (($itemNum >= 1) && ($itemNum <= $nItems)); | |
| 139 print "$itemNum is out of range\n" if (!$inRange); | |
| 140 } until ($inRange); | |
| 141 | |
| 142 print "\nYou have selected the following $name\n"; | |
| 143 $item = $items[$itemNum-1]; | |
| 144 print "$itemNum\t$item\t$$prm_table_ref{$item}\n"; | |
| 145 return $item; | |
| 146 } | |
| 147 | |
| 148 ################################################################################ | |
| 149 # sub get_multiple_selection | |
| 150 # | |
| 151 # Purpose: allow a user to multiply select from the docking library list | |
| 152 # | |
| 153 # Usage: $receptor = get_selection(\%prm_table,"receptor") | |
| 154 # | |
| 155 # Arguments: | |
| 156 # $prm_table_ref - reference to hash table returned by get_prm_table | |
| 157 # $name - descriptive name for items (e.g. "receptor" or "script" | |
| 158 # | |
| 159 # Return parameters: | |
| 160 # $item - selected items (key into %prm_table) | |
| 161 # | |
| 162 sub get_multiple_selection { | |
| 163 #Arguments | |
| 164 my $prm_table_ref = shift; | |
| 165 my $name = shift; | |
| 166 | |
| 167 #Local variables | |
| 168 my @items = sort keys %$prm_table_ref; | |
| 169 my $nItems = scalar @items; | |
| 170 my ($i,$idstring,$itemNum,$item); | |
| 171 my @itemNums; | |
| 172 my @selectedItems; | |
| 173 my $inRange; | |
| 174 my $allInRange; | |
| 175 | |
| 176 print "\n\n$name selection:\n\n"; | |
| 177 $i=1; | |
| 178 foreach $item (@items) { | |
| 179 print "$i\t$item\t$$prm_table_ref{$item}\n"; | |
| 180 $i++; | |
| 181 } | |
| 182 do { | |
| 183 print "\nEnter the $name number(s): "; | |
| 184 my $idstring = <STDIN>; | |
| 185 chomp $idstring; | |
| 186 @itemNums = get_ids($idstring); | |
| 187 print "\n"; | |
| 188 $allInRange = 1; | |
| 189 foreach $itemNum (@itemNums) { | |
| 190 $inRange = (($itemNum >= 1) && ($itemNum <= $nItems)); | |
| 191 print "$itemNum is out of range\n" if (!$inRange); | |
| 192 $allInRange = $allInRange && $inRange; | |
| 193 } | |
| 194 } until ($allInRange); | |
| 195 | |
| 196 print "\nYou have selected the following $name(s)\n"; | |
| 197 foreach $itemNum (@itemNums) { | |
| 198 $item = $items[$itemNum-1]; | |
| 199 push @selectedItems,$item; | |
| 200 print "$itemNum\t$item\t$$prm_table_ref{$item}\n"; | |
| 201 } | |
| 202 return @selectedItems; | |
| 203 } | |
| 204 | |
| 205 ################################################################################ | |
| 206 # sub get_input | |
| 207 # | |
| 208 # Purpose: get user input, or returns default if no response given | |
| 209 # | |
| 210 # Usage: $nRuns = get_input("Enter no. of runs per ligand",10) | |
| 211 # | |
| 212 # Arguments: | |
| 213 # $question - text of question to ask | |
| 214 # $defResponse - default answer | |
| 215 # | |
| 216 # Return parameters: | |
| 217 # $response - user response, or default | |
| 218 | |
| 219 sub get_input { | |
| 220 #Arguments | |
| 221 my $question = shift; | |
| 222 my $defResponse = shift; | |
| 223 print "$question [$defResponse]: "; | |
| 224 my $response = <STDIN>; | |
| 225 chomp $response; | |
| 226 $response = $defResponse if ($response eq ""); | |
| 227 return $response; | |
| 228 } | |
| 229 | |
| 230 # Based on //depot/intranet/1.0/lib/rbt_func.pl#1 | |
| 231 # this function converts a list of ids in one string | |
| 232 # in the format 1,2,4-6,8,15-20 | |
| 233 # and returns an @array with the unique ids | |
| 234 sub get_ids { | |
| 235 my $idstring = shift; | |
| 236 my %ids; | |
| 237 | |
| 238 foreach my $id (split (',',$idstring)){ | |
| 239 if ( grep (/-/,$id)){ | |
| 240 (my $low, my $up) = split ('-',$id); | |
| 241 for ( my $co = $low; $co <= $up; $co++ ){ | |
| 242 $ids{$co}=$co; | |
| 243 } | |
| 244 } | |
| 245 else { | |
| 246 $ids{$id}=$id; | |
| 247 } | |
| 248 } | |
| 249 | |
| 250 return (sort {$a<=>$b} keys %ids); | |
| 251 } | |
| 252 ################################################################################ | |
| 253 # sub get_filter_table | |
| 254 # | |
| 255 # Purpose: return a hash table of | |
| 256 # key=filter file name, value = file title | |
| 257 # for all .filter files in a directory | |
| 258 # | |
| 259 # Usage: %filter_table = get_filter_table($dir) | |
| 260 # | |
| 261 # Arguments: | |
| 262 # $filterDir - directory to search for .filter files | |
| 263 # $tmp - temperature for first filter | |
| 264 # Note: | |
| 265 # The first two filters are not in a file, but are created here | |
| 266 # | |
| 267 # Return parameters: | |
| 268 # %filter_table - hash table | |
| 269 # | |
| 270 sub get_filter_table { | |
| 271 #Arguments | |
| 272 my $filter_dir = shift; | |
| 273 my $tmp = shift; | |
| 274 | |
| 275 #Local variables | |
| 276 my $pwd = $ENV{"PWD"}; | |
| 277 my @filter_list; | |
| 278 my %filter_table; | |
| 279 my $file; | |
| 280 | |
| 281 #Get the list of files ending in .filter | |
| 282 @filter_list = ((glob "$pwd/*.filter"), (glob "$filter_dir/*.filter")); | |
| 283 $filter_table{"1no_other_filters"} = ""; | |
| 284 # $filter_table{"1threshold"} = "\tSCORE.INTER < $tmp"; | |
| 285 # $filter_table{"2cavity"} = "\t\tSCORE.RESTR.CAVITY < 1 "; | |
| 286 | |
| 287 #Read each file and extract the title record | |
| 288 foreach $file (@filter_list) { | |
| 289 #Extract just the file name from the full path | |
| 290 my $filterName = substr($file, rindex($file,"/")+1); | |
| 291 #Check if a title record was found | |
| 292 $filter_table{$filterName} = "No title"; | |
| 293 } | |
| 294 return %filter_table; | |
| 295 } | |
| 296 1; |
