[Bio] / FortyEight / rp_chunk_sims.pl Repository:
ViewVC logotype

Annotation of /FortyEight/rp_chunk_sims.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (view) (download) (as text)

1 : olson 1.1 #
2 :     # Chunk a fasta file into pieces suitable for cluster BLAST calculations.
3 :     #
4 :     # We are provided the NR and peg.synonyms files that should be used for this.
5 :     #
6 :     # Usage: rp_chunk_sims fasta-file nr peg.synonyms sims-job-dir
7 :     #
8 :     # We write a file task.list into sims-job-dir that contains the list of work units.
9 :     #
10 :     # The work units will write raw sims into sims-job-dir/sims.raw
11 :     #
12 :    
13 :     use strict;
14 :     use File::Basename;
15 :     use Cwd 'abs_path';
16 :    
17 : olson 1.4 my $usage = "Usage: $0 [-size max-size] [-include-self] fasta-file nr peg.synonyms sims-job-dir";
18 : olson 1.3
19 :     my $max_size = 10_000;
20 : olson 1.4 my $include_self = 0;
21 : olson 1.3
22 :     while (@ARGV > 0 and $ARGV[0] =~ /^-/)
23 :     {
24 :     my $arg = shift @ARGV;
25 :     if ($arg =~ /^-size/)
26 :     {
27 :     $max_size = shift @ARGV;
28 :     }
29 : olson 1.4 elsif ($arg =~ /^-include-self/)
30 :     {
31 :     $include_self++;
32 :     }
33 : olson 1.3 else
34 :     {
35 :     die $usage;
36 :     }
37 :     }
38 :    
39 :     @ARGV == 4 or die $usage;
40 : olson 1.1
41 :     my $fasta = shift;
42 :     my $nr_file = shift;
43 :     my $pegsyn = shift;
44 :     my $jobdir = shift;
45 :    
46 :     -d $jobdir or mkdir $jobdir or die "Cannot mkdir $jobdir: $!\n";
47 :    
48 :     my $next_task = 1;
49 :     my $last_task;
50 :    
51 :     my $task_file = "$jobdir/task.list";
52 :     my $input_dir = "$jobdir/sims.in";
53 :     my $output_dir = "$jobdir/sims.raw";
54 :     my $error_dir = "$jobdir/sims.err";
55 :    
56 :     -d $input_dir or mkdir $input_dir or die "Cannot mkdir $input_dir: $!\n";
57 :     -d $output_dir or mkdir $output_dir or die "Cannot mkdir $output_dir: $!\n";
58 :     -d $error_dir or mkdir $error_dir or die "Cannot mkdir $error_dir: $!\n";
59 :    
60 :     my $flags = "-m 8 -e 1.0e-5 -FF -p blastp";
61 :    
62 :     my @fasta_files = ($fasta);
63 :    
64 :     open(TASK, ">$task_file") or die "Cannot write $task_file: $!";
65 :    
66 :     #
67 :     # Buzz through once to ensure we can open them.
68 :     #
69 :     for my $file (@fasta_files)
70 :     {
71 :     open(F, "<$file") or die "Cannot open $file: $!\n";
72 :     close(F);
73 :     }
74 :    
75 :     for my $file (@fasta_files)
76 :     {
77 :     my $cur_size = 0;
78 :     my $cur_input = '';
79 :    
80 :     my $base = basename($file);
81 :     $file = abs_path($file);
82 :    
83 :     open(F, "<$file") or die "Cannot open $file: $!\n";
84 :    
85 : olson 1.4 #
86 :     # Prepare and submit self-sims.
87 :     #
88 :     if ($include_self)
89 :     {
90 :     system("$FIG_Config::ext_bin/formatdb", "-p", "t", "-i", $file);
91 :     my $task = $next_task++;
92 :     print TASK join("\t", $task, $file, $file, $flags,
93 :     "$output_dir/$base/out.$task", "$error_dir/$base/err.$task"), "\n";
94 :     }
95 :    
96 : olson 1.1 print "Chunk file $file\n";
97 :    
98 :     while (<F>)
99 :     {
100 :     if (/^>/)
101 :     {
102 :     if ($cur_size >= $max_size)
103 :     {
104 :     write_task($base, $input_dir, $output_dir, $error_dir, $cur_input);
105 :     $cur_size = 0;
106 :     $cur_input = '';
107 :     }
108 :     $cur_input .= $_;
109 :     $cur_size += length($_);
110 :     }
111 :     else
112 :     {
113 :     $cur_input .= $_;
114 :     $cur_size += length($_);
115 :     }
116 :     }
117 :     if ($cur_size >= 0)
118 :     {
119 :     write_task($base, $input_dir, $output_dir, $error_dir, $cur_input);
120 :     $cur_size = 0;
121 :     $cur_input = '';
122 :     }
123 :     close(F);
124 :     }
125 : olson 1.4
126 : olson 1.1 close(TASK);
127 :    
128 :     print "tasks\t1\t$last_task\n";
129 :    
130 :     #
131 :     # Write an input chunk to $dir.
132 :     # Write a line on the
133 :     sub write_task
134 :     {
135 :     my($base, $input_dir, $output_dir, $error_dir, $fasta) = @_;
136 :    
137 :     my $task = $next_task++;
138 :    
139 :     my $idir = "$input_dir/$base";
140 :     my $odir = "$output_dir/$base";
141 :     my $edir = "$error_dir/$base";
142 :    
143 :     -d $idir or mkdir($idir) or die "Cannot mkdir $idir: $!\n";
144 :     -d $odir or mkdir($odir) or die "Cannot mkdir $odir: $!\n";
145 :     -d $edir or mkdir($edir) or die "Cannot mkdir $edir: $!\n";
146 :    
147 :     my $in = "$idir/in.$task";
148 :     my $out = "$odir/out.$task";
149 :     my $err = "$edir/err.$task";
150 :    
151 :     open(I, ">$in") or die "Cannot write $in: $!";
152 :     print I $fasta;
153 :     close(I);
154 :     print TASK join("\t", $task, $in, $nr_file, $flags, $out, $err), "\n";
155 :     $last_task = $task;
156 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3