[Bio] / MGRASTBackend / mg_chunk_figfam_sims.pl Repository:
ViewVC logotype

Annotation of /MGRASTBackend/mg_chunk_figfam_sims.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : arodri7 1.1 #!/usr/bin/perl
2 :     #
3 :     # Chunk a fasta file into pieces suitable for cluster BLAST calculations.
4 :     #
5 :     # We are provided the NR and peg.synonyms files that should be used for this.
6 :     #
7 :     # Usage: rp_chunk_sims -p blastprog -o 'blastopts' -n num-seqs -nr nr -j sims-job-dir fasta [fasta ...]
8 :     #
9 :     #
10 :     # We write a file task.list into sims-job-dir that contains the list of work units.
11 :     #
12 :     # The work units will write raw sims into sims-job-dir/sims.raw
13 :     #
14 :    
15 :     use strict;
16 :     use File::Basename;
17 :     use Cwd 'abs_path';
18 :    
19 :     my $usage = "$0 [-p blastprog] [-o blastopts] [-N num-chars] [-n num-seqs] -nr nr-file -j jobdir fasta [fasta...]";
20 :    
21 :     my $blastprog = "blastx";
22 :     my $flags = "-m 8 -FF";
23 :     my $max_seqs;
24 :     my $max_chars;
25 :     my $jobdir;
26 :     my $ff_data;
27 :     my $fasta;
28 :    
29 :     while (@ARGV)
30 :     {
31 :     my $opt = shift;
32 :     if ($opt eq '-p')
33 :     {
34 :     $blastprog = shift;
35 :     }
36 :     elsif ($opt eq '-o')
37 :     {
38 :     $flags = shift;
39 :     }
40 :     elsif ($opt eq '-f')
41 :     {
42 :     $fasta = shift;
43 :     }
44 :     elsif ($opt eq '-d')
45 :     {
46 :     $ff_data = shift;
47 :     }
48 :     elsif ($opt eq '-n')
49 :     {
50 :     $max_seqs = shift;
51 :     }
52 :     elsif ($opt eq '-N')
53 :     {
54 :     $max_chars = shift;
55 :     }
56 :     elsif ($opt eq '-j')
57 :     {
58 :     $jobdir = shift;
59 :     }
60 :     elsif ($opt =~ /^-/)
61 :     {
62 :     die "Invalid option $opt. Usage: $usage\n";
63 :     }
64 :     else
65 :     {
66 :     unshift(@ARGV, $opt);
67 :     last;
68 :     }
69 :     }
70 :    
71 :     $flags = "$flags -p $blastprog";
72 :    
73 :     if (@ARGV == 0)
74 :     {
75 :     die $usage;
76 :     }
77 :    
78 :     my @figfam_output_files = @ARGV;
79 :    
80 :     for my $f (@figfam_output_files)
81 :     {
82 :     -f $f or die "FIGfam output file $f does not exist\n";
83 :     }
84 :    
85 :     if (!defined($max_seqs) and !defined($max_chars))
86 :     {
87 :     die "Must pass either -n or -N option\n";
88 :     }
89 :    
90 :     -d $jobdir or mkdir $jobdir or die "Cannot mkdir $jobdir: $!\n";
91 :    
92 :     my $next_task = 1;
93 :     my $last_task;
94 :    
95 :     my $task_file = "$jobdir/task.list";
96 :     my $input_dir = "$jobdir/sims.in";
97 :     my $output_dir = "$jobdir/sims.raw";
98 :     my $error_dir = "$jobdir/sims.err";
99 :    
100 :     -d $input_dir or mkdir $input_dir or die "Cannot mkdir $input_dir: $!\n";
101 :     -d $output_dir or mkdir $output_dir or die "Cannot mkdir $output_dir: $!\n";
102 :     -d $error_dir or mkdir $error_dir or die "Cannot mkdir $error_dir: $!\n";
103 :    
104 :     $input_dir = abs_path($input_dir);
105 :     $output_dir = abs_path($output_dir);
106 :     $error_dir = abs_path($error_dir);
107 :    
108 :     open(TASK, ">$task_file") or die "Cannot write $task_file: $!";
109 :    
110 :     for my $file (@figfam_output_files)
111 :     {
112 :     my $cur_size = 0;
113 :     my $cur_count = 0;
114 :     my $cur_input = '';
115 :    
116 :     my $base = basename($file);
117 :     $file = abs_path($file);
118 :    
119 :     open(F, "<$file") or die "Cannot open $file: $!\n";
120 :    
121 :     print "Chunk file $file\n";
122 :    
123 :     while (<F>)
124 :     {
125 :     if ((defined($max_seqs) and ($cur_count >= $max_seqs)))
126 :     {
127 :     write_task($base, $ff_data, $fasta, $input_dir, $output_dir, $error_dir, $cur_input);
128 :     $cur_count = 0;
129 :     $cur_input = '';
130 :     }
131 :     $cur_input .= $_;
132 :     $cur_count++;
133 :     }
134 :     if ($cur_count >= 0)
135 :     {
136 :     write_task($base, $ff_data, $fasta, $input_dir, $output_dir, $error_dir, $cur_input);
137 :     $cur_input = '';
138 :     $cur_count = 0;
139 :     }
140 :     close(F);
141 :     }
142 :     close(TASK);
143 :    
144 :     print "tasks\t1\t$last_task\n";
145 :    
146 :     #
147 :     # Write an input chunk to $dir.
148 :     # Write a line on the
149 :     sub write_task
150 :     {
151 :     my($base, $ff_data, $fasta_file, $input_dir, $output_dir, $error_dir, $chunk) = @_;
152 :    
153 :     my $task = $next_task++;
154 :    
155 :     my $idir = "$input_dir/$base";
156 :     my $odir = "$output_dir/$base";
157 :     my $edir = "$error_dir/$base";
158 :    
159 :     -d $idir or mkdir($idir) or die "Cannot mkdir $idir: $!\n";
160 :     -d $odir or mkdir($odir) or die "Cannot mkdir $odir: $!\n";
161 :     -d $edir or mkdir($edir) or die "Cannot mkdir $edir: $!\n";
162 :    
163 :     my $in = "$idir/in.$task";
164 :     my $out = "$odir/out.$task";
165 :     my $err = "$edir/err.$task";
166 :    
167 :     open(I, ">$in") or die "Cannot write $in: $!";
168 :     print I $chunk;
169 :     close(I);
170 :     print TASK join("\t", $task, $in, $flags, $ff_data, $fasta_file, $out, $err), "\n";
171 :     $last_task = $task;
172 :     }

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3