in progress
[jalview.git] / forester / ruby / evoruby / lib / evo / tool / phylogenies_decorator.rb
index ae2d980..973286c 100644 (file)
@@ -30,8 +30,8 @@ module Evoruby
     #DECORATOR_OPTIONS_DOMAINS = '-r=1'
     DECORATOR_OPTIONS_DOMAINS = '-p -t'
     IDS_MAPFILE_SUFFIX        = '.nim'
-    DOMAINS_MAPFILE_SUFFIX    = '.dff'
-    SLEEP_TIME                = 0.1
+    DOMAINS_MAPFILE_SUFFIX    = '_hmmscan_10.dff'
+    SLEEP_TIME                = 0.05
     REMOVE_NI                 = true
     TMP_FILE_1                  = '___PD1___'
     TMP_FILE_2                  = '___PD2___'
@@ -40,10 +40,10 @@ module Evoruby
     JAVA_HOME                 = ENV[Constants::JAVA_HOME_ENV_VARIABLE]
 
     PRG_NAME       = "phylogenies_decorator"
-    PRG_DATE       = "2012.10.11"
+    PRG_DATE       = "2013.11.15"
     PRG_DESC       = "decoration of phylogenies with sequence/species names and domain architectures"
     PRG_VERSION    = "1.02"
-    COPYRIGHT      = "2012 Christian M Zmasek"
+    COPYRIGHT      = "2013 Christian M Zmasek"
     CONTACT        = "phylosoft@gmail.com"
     WWW            = "https://sites.google.com/site/cmzmasek/home/software/forester"
 
@@ -166,21 +166,26 @@ module Evoruby
           log << counter.to_s + ': ' + phylogeny_file + ' -> ' +  outfile + NL
 
           phylogeny_id = get_id( phylogeny_file )
+          if  phylogeny_id == nil || phylogeny_id.size < 1
+            Util.fatal_error( PRG_NAME, 'could not get id from ' + phylogeny_file.to_s )
+          end
+          puts
+          Util.print_message( PRG_NAME, "id: " + phylogeny_id )
+          log << "id: " + phylogeny_id + NL
 
           ids_mapfile_name = nil
           domains_mapfile_name = nil
           seqs_file_name = nil
 
           ids_mapfile_name = get_file( files, phylogeny_id, IDS_MAPFILE_SUFFIX )
-          domains_mapfile_name = get_file( files, phylogeny_id, DOMAINS_MAPFILE_SUFFIX )
-          seqs_file_name = get_seq_file( files, phylogeny_id )
-
+         # domains_mapfile_name = get_file( files, phylogeny_id, DOMAINS_MAPFILE_SUFFIX )
+         # seqs_file_name = get_seq_file( files, phylogeny_id )
 
-          begin
-            Util.check_file_for_readability( domains_mapfile_name )
-          rescue ArgumentError
-            Util.fatal_error( PRG_NAME, 'failed to read from [#{domains_mapfile_name}]: ' + $! )
-          end
+#          begin
+#            Util.check_file_for_readability( domains_mapfile_name )
+#          rescue ArgumentError
+#            Util.fatal_error( PRG_NAME, 'failed to read from [#{domains_mapfile_name}]: ' + $! )
+#          end
 
           begin
             Util.check_file_for_readability( ids_mapfile_name )
@@ -188,32 +193,54 @@ module Evoruby
             Util.fatal_error( PRG_NAME, 'failed to read from [#{ids_mapfile_name}]: ' + $! )
           end
 
-          begin
-            Util.check_file_for_readability( seqs_file_name  )
-          rescue ArgumentError
-            Util.fatal_error( PRG_NAME, 'failed to read from [#{seqs_file_name }]: ' + $! )
-          end
-
-          cmd = decorator +
-           ' -p -f=m ' + phylogeny_file + ' ' +
-           seqs_file_name  + ' ' + TMP_FILE_1
-          puts cmd
-          execute_cmd( cmd, log )
-
-          cmd = decorator + ' ' + DECORATOR_OPTIONS_DOMAINS + ' ' +
-           '-f=d ' + TMP_FILE_1 + ' ' +
-           domains_mapfile_name + ' ' +TMP_FILE_2
-          puts cmd
-          execute_cmd( cmd, log )
+#          begin
+#            Util.check_file_for_readability( seqs_file_name  )
+#          rescue ArgumentError
+#            Util.fatal_error( PRG_NAME, 'failed to read from [#{seqs_file_name }]: ' + $! )
+#          end
+
+#          cmd = decorator +
+#           ' -t -p -f=m ' + phylogeny_file + ' ' +
+#           seqs_file_name  + ' ' + TMP_FILE_1
+#          puts cmd
+#          begin
+#            execute_cmd( cmd, log )
+#          rescue Error
+#            Util.fatal_error( PRG_NAME, 'error: ' + $! )
+#          end
+#
+#          cmd = decorator + ' ' + DECORATOR_OPTIONS_DOMAINS + ' ' +
+#           '-f=d ' + TMP_FILE_1 + ' ' +
+#           domains_mapfile_name + ' ' +TMP_FILE_2
+#          puts cmd
+#          begin
+#            execute_cmd( cmd, log )
+#          rescue Error
+#            Util.fatal_error( PRG_NAME, 'error: ' + $! )
+#          end
 
           cmd = decorator + ' ' +  DECORATOR_OPTIONS_SEQ_NAMES + ' ' +
-           '-f=n ' + TMP_FILE_2 + ' ' +
+           '-f=n ' + phylogeny_file + ' ' +
            ids_mapfile_name + ' ' + outfile
           puts cmd
-          execute_cmd( cmd, log )
-
-          File.delete( TMP_FILE_1 )
-          File.delete( TMP_FILE_2 )
+          begin
+            execute_cmd( cmd, log )
+          rescue Error
+            Util.fatal_error( PRG_NAME, 'error: ' + $! )
+          end
+          
+#          cmd = decorator + ' ' +  DECORATOR_OPTIONS_SEQ_NAMES + ' ' +
+#                    '-f=n ' + TMP_FILE_2 + ' ' +
+#                    ids_mapfile_name + ' ' + outfile
+#                   puts cmd
+#                   begin
+#                     execute_cmd( cmd, log )
+#                   rescue Error
+#                     Util.fatal_error( PRG_NAME, 'error: ' + $! )
+#                   end
+
+        #  File.delete( TMP_FILE_1 )
+        #  File.delete( TMP_FILE_2 )
 
         end
       }
@@ -226,7 +253,7 @@ module Evoruby
     end # def run
 
     def execute_cmd( cmd, log )
-      log << 'excuting ' + cmd + NL
+      log << 'executing ' + cmd + NL
       IO.popen( cmd , 'r+' ) do | pipe |
         pipe.close_write
         log << pipe.read + NL + NL
@@ -236,33 +263,35 @@ module Evoruby
 
 
     def get_id( phylogeny_file_name )
-      phylogeny_file_name =~ /^(.+?)__/
-      $1
+      if phylogeny_file_name =~ /^(.+?_.+?)_/
+        return $1
+      elsif phylogeny_file_name =~ /^(.+?)__/
+        return $1
+      elsif phylogeny_file_name =~ /^(.+?)_/
+        return $1
+      end
+      nil
     end
 
     def get_file( files_in_dir, phylogeny_id, suffix_pattern )
       matching_files = Array.new
-     
+
       files_in_dir.each { | file |
 
         if ( !File.directory?( file ) &&
              file !~ /^\./ &&
              file !~ /^00/ &&
-             file =~ /^#{phylogeny_id}#{suffix_pattern}$/ )
+             file =~ /^#{phylogeny_id}.*#{suffix_pattern}$/ )
           matching_files << file
         end
-       
-       
       }
-    
-
       if matching_files.length < 1
         Util.fatal_error( PRG_NAME, 'no file matching [' + phylogeny_id +
-           '_] [' + suffix_pattern + '] present in current directory' )
+           '...' + suffix_pattern + '] present in current directory' )
       end
       if matching_files.length > 1
-        Util.fatal_error( PRG_NAME, 'more than one file matching [' + phylogeny_id +
-           '_] [' + suffix_pattern + '] present in current directory' )
+        Util.fatal_error( PRG_NAME, 'more than one file matching [' +
+           phylogeny_id  + '...' + suffix_pattern + '] present in current directory' )
       end
       matching_files[ 0 ]
     end
@@ -275,17 +304,18 @@ module Evoruby
         if ( !File.directory?( file ) &&
              file !~ /^\./ &&
              file !~ /^00/ &&
-             file =~ /^#{phylogeny_id}.+\d$/ )
+             ( file =~ /^#{phylogeny_id}__.+\d$/ || file =~ /^#{phylogeny_id}_.*\.fasta$/ ) )
           matching_files << file
         end
-
       }
 
       if matching_files.length < 1
-        Util.fatal_error( PRG_NAME, 'no seq file matching [' + phylogeny_id + '] present in current directory' )
+        Util.fatal_error( PRG_NAME, 'no seq file matching [' +
+           phylogeny_id + '_] present in current directory' )
       end
       if matching_files.length > 1
-        Util.fatal_error( PRG_NAME, 'more than one seq file matching [' + phylogeny_id + '] present in current directory' )
+        Util.fatal_error( PRG_NAME, 'more than one seq file matching [' +
+           phylogeny_id + '_] present in current directory' )
       end
       matching_files[ 0 ]
     end