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

Annotation of /MGRASTBackend/mg_non_seed_sims.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : arodri7 1.1
2 :     #
3 :     # Chunk inputs and submit a pile of runs to the cluster.
4 :     #
5 :    
6 :     use strict;
7 :     use FIG;
8 :     use FIG_Config;
9 :     use File::Basename;
10 :     use GenomeMeta;
11 :     use Job48;
12 :     use JobStage;
13 :     use SGE;
14 :     use FortyEightMeta::SimDB;
15 :     use FortyEightMeta::SimStatusDB;
16 :    
17 : arodri7 1.2 my $STAGE = "mg_non_seed_sims";
18 : arodri7 1.1
19 :     @ARGV == 1 or die "Usage: $0 job-dir\n";
20 :    
21 :     my $jobdir = shift;
22 :    
23 :     -d $jobdir or die "$0: job dir $jobdir does not exist\n";
24 :    
25 :     my $stage = new JobStage('Job48', $STAGE, $jobdir);
26 :     $stage or die "Cannot create job for $jobdir\n";
27 :    
28 :     my $job_id = basename($jobdir);
29 :     my $job = $stage->job();
30 :    
31 :     my $meta = $job->meta;
32 :    
33 :     print "Running job! $jobdir\n";
34 :    
35 :     $stage->set_status("in_progress");
36 :    
37 :     my $sge = new SGE;
38 :    
39 :     #
40 :     # Find needed executables
41 :     #
42 :    
43 :     my $chunk_exe = "$FIG_Config::bin/mg_chunk_sims";
44 :     -x $chunk_exe or $stage->fatal("Executable missing: $chunk_exe");
45 :    
46 :     my $compute_exe = "$FIG_Config::bin/mg_compute_sims";
47 :     -x $compute_exe or $stage->fatal("Executable missing: $compute_exe");
48 :    
49 :     my $proc = "$jobdir/proc";
50 :     chdir($proc) or $stage->fatal("cannot chdir $proc: $!");
51 :    
52 :     my $fasta = $meta->get_metadata("preprocess.fasta_file");
53 :     ($fasta and -f $fasta) or $stage->fatal("fasta not found: '$fasta'");
54 :    
55 :     my @sge_ids;
56 :     my @short_ids;
57 :    
58 :     my $cutoff = $stage->get_metadata("options.sim_compute_cutoff");
59 :     $cutoff = 0.01 unless defined($cutoff);
60 :    
61 :     my $simdb = FortyEightMeta::SimDB->new($FIG_Config::mgrast_database_def);
62 :     $simdb or $stage->fatal("Cannot open database description file $FIG_Config::mgrast_database_def");
63 :    
64 :     my $blast_opts = "-m 8 -e $cutoff";
65 :     my @jobs;
66 :    
67 :     my $status_db = FortyEightMeta::SimStatusDB->new($job_id);
68 :     $status_db or die "Cannot create status_db";
69 :    
70 :     my @db_list = $simdb->databases();
71 :     #
72 :     # Remove databases marked with inhibit_sims=1 - these are there
73 :     # for analysis of older data that we don't want to compute sims
74 :     # for any more.
75 :     #
76 :     @db_list = grep { !$_->{inhibit_sims} } @db_list;
77 :     $stage->set_metadata("sims.database_list", \@db_list);
78 :     for my $db (@db_list)
79 :     {
80 :     my $name = $db->{name};
81 : arodri7 1.2 next if ($name =~ /SEED/);
82 : arodri7 1.1 my $version = $db->{version};
83 :     my $files = $db->{files};
84 :     for my $file (@$files)
85 :     {
86 :     my $path = $file->{fasta};
87 :     #
88 :     # Compute size of seqs per batch. uspib is microseconds per
89 :     # input byte, calibrated on the fast intel boxes. We target 15-minute runs
90 :     # since those correspond to roughly 30-minute runs on the PPC nodes.
91 :     #
92 :    
93 :     my $uspib = $file->{uspib};
94 :     my $chunk_size;
95 :     if ($uspib)
96 :     {
97 :     $chunk_size = int(15 * 60 / ( 1e-6 * $uspib));
98 :     }
99 :     else
100 :     {
101 :     $chunk_size = 10000;
102 :     }
103 :     $stage->log("Sims db: name=$name version=$version uspib=$uspib path=$path chunksize=$chunk_size");
104 :    
105 :     my $blastp = $file->{type} eq 'dna' ? 'blastn' : 'blastx';
106 :     my $dir = $file->{dir};
107 :     my $nr = $file->{fasta};
108 :    
109 :     my $path = "$proc/$dir";
110 :     -d $path or mkdir ($path, 0777) or $stage->fatal("Cannot mkdir $path: $!");
111 :     open(F, ">", "$path/FASTA_PATH");
112 :     print F "$nr\n";
113 :     close(F);
114 :    
115 :     my $cmd = "$chunk_exe -p $blastp -o '$blast_opts' -N $chunk_size -nr $nr -j $path $fasta";
116 :     open(P, "$cmd |") or $stage->fatal("Failed pipe open: $!: $cmd");
117 :     my($start, $end);
118 :     while (<P>)
119 :     {
120 :     print;
121 :     chomp;
122 :     if (/tasks\s+(\d+)\s+(\d+)/)
123 :     {
124 :     ($start, $end) = ($1, $2);
125 :     }
126 :     }
127 :     close(P) or $stage->fatal("Error on close: \$!=$! \$?=$?: $cmd");
128 :    
129 :     defined($start) or $stage->fatal("tasks not found");
130 :    
131 :     print "Got tasks from $start to $end\n";
132 :    
133 :     #
134 :     # And submit.
135 :     #
136 :    
137 :     my @sge_args;
138 : arodri7 1.2 my $jobname = "mns$file->{abbr}_$job_id";
139 : arodri7 1.1
140 :     push(@sge_args, "-N $jobname");
141 :     push(@sge_args, "-v PATH");
142 :     push(@sge_args, "-e $jobdir/sge_output");
143 :     push(@sge_args, "-o $jobdir/sge_output");
144 :     push(@sge_args, "-t $start-$end");
145 :     push(@sge_args, "-b yes");
146 :     #
147 :     # metagenome 48hr jobs get low priority
148 :     #
149 :     push(@sge_args, "-l low");
150 :    
151 :     my $sge_args = join(" ", @sge_args);
152 :    
153 :     my $sge_id;
154 :    
155 :     eval {
156 :     $sge_id = $sge->submit_job($meta, $sge_args, "$compute_exe $jobdir $path");
157 :     # print "Would submit '$sge_args' '$compute_exe' '$jobdir' '$path'\n";
158 :     };
159 :    
160 :     if ($@)
161 :     {
162 :     $stage->fatal($meta, "error starting SGE job $compute_exe $jobdir: $@\n");
163 :     }
164 :    
165 :     #
166 :     # Initialize sim status entries.
167 :     #
168 :     my $retries = $FIG_Config::mgrast_blast_retries;
169 :     $retries = 3 unless defined($retries);
170 :     for my $t ($start .. $end)
171 :     {
172 :     my $rec = {};
173 :     $rec->{sim_sge_id} = $sge_id;
174 :     $rec->{abbr} = $file->{abbr};
175 :     $rec->{work_dir} = $path;
176 :     $rec->{blast_retries_left} = $retries;
177 :     $rec->{status} = 'not_started';
178 :    
179 :     $status_db->set_task($dir, $t, $rec);
180 :     }
181 :    
182 :     push(@sge_ids, $sge_id);
183 :     }
184 :     }
185 :    
186 :     $stage->set_qualified_metadata("sge_ids", \@sge_ids);
187 :     $stage->set_status("complete");
188 :     $stage->set_running("no");
189 :    
190 :    
191 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3