in progress
[jalview.git] / forester / archive / perl / rio_slave.pl
1 #!/usr/bin/perl -W
2
3 # rio_slave.pl
4 # ------------
5 #
6 # Copyright (C) 2002 Washington University School of Medicine
7 # and Howard Hughes Medical Institute
8 # All rights reserved
9 #
10 # Created: 01/18/02
11 # Author: Christian M. Zmasek
12 # zmasek@genetics.wustl.edu
13 # http://www.genetics.wustl.edu/eddy/people/zmasek/
14 #
15 # Last modified: 02/20/02
16
17
18 # Arguments:
19
20 # 0: first block in multiple alignment to process
21 # 1: last block in multiple alignment to process
22 # 2: name of resampled alignment, inc. query
23 # 3: matrix number
24 # 4: name of query
25 # 5: PWD file
26 # 6: seed for random number generator for neighbor
27 # 7: node number
28 # 8: temp dir
29
30
31 use strict;
32
33 use FindBin;
34 use lib $FindBin::Bin;
35 use rio_module;
36
37 if ( @ARGV != 9 ) {
38     &dieWithUnexpectedError( "argument count is off" );
39 }
40
41 my $start       = $ARGV[ 0 ];
42 my $end         = $ARGV[ 1 ];
43 my $align       = $ARGV[ 2 ];
44 my $matrix_n    = $ARGV[ 3 ];
45 my $name        = $ARGV[ 4 ];
46 my $pwd_file    = $ARGV[ 5 ];
47 my $seed        = $ARGV[ 6 ];
48 my $number      = $ARGV[ 7 ];
49 my $temp_dir    = $ARGV[ 8 ];
50
51 my $b           = 0;
52 my $outfile     = "";
53 my $mytemp_dir  = $temp_dir."/dir_".$number;
54
55 mkdir(  $mytemp_dir, 0700 )
56 || &dieWithUnexpectedError( "Could not create \"$mytemp_dir\"" );
57
58 unless ( ( -e $mytemp_dir ) && ( -d $mytemp_dir ) ) {
59     &dieWithUnexpectedError( "\"$mytemp_dir\" does not exist, or is not a directory" );
60 }
61  
62        
63 &executePuzzleDQObootstrapped( $align, $matrix_n );
64        
65 system( "mv", $align.".dist", $mytemp_dir."/DISTs_TO_QUERY" )
66 && &dieWithUnexpectedError( "could not mv" );
67
68 unlink( $align );
69   
70 sleep( 2 );
71
72 &dividePWDfile( $pwd_file,
73                 $mytemp_dir."/DIVIDED",
74                 $start,
75                 $end );
76
77 &addDistsToQueryToPWDfile( $mytemp_dir."/DIVIDED",
78                            $mytemp_dir."/DISTs_TO_QUERY",
79                            $mytemp_dir."/PWD_INC_QUERY",
80                            $name );
81                             
82 unlink( $mytemp_dir."/DIVIDED" );                           
83
84 $b = $end - $start + 1;
85
86 chdir ( $mytemp_dir ) 
87 || &dieWithUnexpectedError( "Could not chdir to \"$mytemp_dir\"" );
88
89 &executeNeighbor( $mytemp_dir."/PWD_INC_QUERY",
90                   $b,
91                   1, # randomize input order
92                   $seed,
93                   1 ); # lower-triangular data matrix
94
95
96 unlink( "outfile", $mytemp_dir."/PWD_INC_QUERY", $mytemp_dir."/DISTs_TO_QUERY" );
97
98 system( "mv", "outtree", "../MAKETREEOUT".$MULTIPLE_TREES_FILE_SUFFIX.$number )
99 && &dieWithUnexpectedError( "could not mv" );   
100
101 sleep( 1 );
102
103 chdir( ".." )
104 || &dieWithUnexpectedError( "Could not chdir to \"..\"" );
105
106 rmdir( $mytemp_dir ) || &dieWithUnexpectedError( "Could not delete \"$mytemp_dir\"" );
107
108 $outfile = "FINISHED_$number";
109
110 open( OUT, ">$outfile" ) || &dieWithUnexpectedError( "Cannot create file \"$outfile\"" );
111 close( OUT );
112
113 exit( 0 );
114
115
116
117
118 sub dividePWDfile {
119     my $pwd_file        = $_[ 0 ];
120     my $outfile         = $_[ 1 ];
121     my $start           = $_[ 2 ]; # e.g. 0
122     my $end             = $_[ 3 ]; # e.g. 9
123     
124     my $c               = 0;
125     my $write           = 0;
126     my $return_line     = "";
127     
128     &testForTextFilePresence( $pwd_file );
129     
130     open( IN_PWD, "$pwd_file" ) || &dieWithUnexpectedError( "Cannot open file \"$pwd_file\"" );
131     open( OUT_PWD, ">$outfile" ) || &dieWithUnexpectedError( "Cannot create file \"$outfile\"" );
132     
133     while ( $return_line = <IN_PWD> ) {
134         if ( $return_line =~ /^\s*(\d+)\s*$/ ) {
135             if ( $c >= $start && $c <= $end ) {
136                 $write = 1;
137             }
138             elsif ( $c > $end ) {
139                 last;
140             }
141             $c++;
142         }
143         if ( $write == 1 ) {
144             print OUT_PWD $return_line;
145         }    
146     }
147     
148     close( IN_PWD );
149     close( OUT_PWD );
150     
151     return;
152  
153 } ## dividePWDfile
154
155
156
157
158
159
160