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

Annotation of /MGRASTBackend/mg_non_figfam_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 = "non_figfam_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 : arodri7 1.2 #my $fasta = $meta->get_metadata("preprocess.fasta_file");
53 :     my $fasta = $meta->get_metadata("figfam_server.non_assigned_fasta");
54 : arodri7 1.1 ($fasta and -f $fasta) or $stage->fatal("fasta not found: '$fasta'");
55 :    
56 :     my @sge_ids;
57 :     my @short_ids;
58 :    
59 :     my $cutoff = $stage->get_metadata("options.sim_compute_cutoff");
60 :     $cutoff = 0.01 unless defined($cutoff);
61 :    
62 :     my $simdb = FortyEightMeta::SimDB->new($FIG_Config::mgrast_database_def);
63 :     $simdb or $stage->fatal("Cannot open database description file $FIG_Config::mgrast_database_def");
64 :    
65 :     my $blast_opts = "-m 8 -e $cutoff";
66 :     my @jobs;
67 :    
68 :     my $status_db = FortyEightMeta::SimStatusDB->new($job_id);
69 :     $status_db or die "Cannot create status_db";
70 :    
71 :     my @db_list = $simdb->databases();
72 :     #
73 :     # Remove databases marked with inhibit_sims=1 - these are there
74 :     # for analysis of older data that we don't want to compute sims
75 :     # for any more.
76 :     #
77 :     # in this case the only db we want to run is the seed db
78 :    
79 :     @db_list = grep { !$_->{inhibit_sims} } @db_list;
80 :     $stage->set_metadata("sims.database_list", \@db_list);
81 :    
82 :     for my $db (@db_list)
83 :     {
84 :     my $name = $db->{name};
85 : arodri7 1.2 print STDOUT "DB: $name\n";
86 :     next if ($name !~ /SEED/);
87 : arodri7 1.1 my $version = $db->{version};
88 :     my $files = $db->{files};
89 :     for my $file (@$files)
90 :     {
91 :     my $path = $file->{fasta};
92 :     #
93 :     # Compute size of seqs per batch. uspib is microseconds per
94 :     # input byte, calibrated on the fast intel boxes. We target 15-minute runs
95 :     # since those correspond to roughly 30-minute runs on the PPC nodes.
96 :     #
97 :    
98 :     my $uspib = $file->{uspib};
99 :     my $chunk_size;
100 :     if ($uspib)
101 :     {
102 :     $chunk_size = int(15 * 60 / ( 1e-6 * $uspib));
103 :     }
104 :     else
105 :     {
106 :     $chunk_size = 10000;
107 :     }
108 :     $stage->log("Sims db: name=$name version=$version uspib=$uspib path=$path chunksize=$chunk_size");
109 :    
110 :     my $blastp = $file->{type} eq 'dna' ? 'blastn' : 'blastx';
111 :     my $dir = $file->{dir};
112 :     my $nr = $file->{fasta};
113 :    
114 :     my $path = "$proc/$dir";
115 :     -d $path or mkdir ($path, 0777) or $stage->fatal("Cannot mkdir $path: $!");
116 :     open(F, ">", "$path/FASTA_PATH");
117 :     print F "$nr\n";
118 :     close(F);
119 :    
120 :     my $cmd = "$chunk_exe -p $blastp -o '$blast_opts' -N $chunk_size -nr $nr -j $path $fasta";
121 :     open(P, "$cmd |") or $stage->fatal("Failed pipe open: $!: $cmd");
122 :     my($start, $end);
123 :     while (<P>)
124 :     {
125 :     print;
126 :     chomp;
127 :     if (/tasks\s+(\d+)\s+(\d+)/)
128 :     {
129 :     ($start, $end) = ($1, $2);
130 :     }
131 :     }
132 :     close(P) or $stage->fatal("Error on close: \$!=$! \$?=$?: $cmd");
133 :    
134 :     defined($start) or $stage->fatal("tasks not found");
135 :    
136 :     print "Got tasks from $start to $end\n";
137 :    
138 :     #
139 :     # And submit.
140 :     #
141 :    
142 :     my @sge_args;
143 : arodri7 1.2 my $jobname = "mnf$file->{abbr}_$job_id";
144 : arodri7 1.1
145 :     push(@sge_args, "-N $jobname");
146 :     push(@sge_args, "-v PATH");
147 :     push(@sge_args, "-e $jobdir/sge_output");
148 :     push(@sge_args, "-o $jobdir/sge_output");
149 :     push(@sge_args, "-t $start-$end");
150 :     push(@sge_args, "-b yes");
151 :     #
152 :     # metagenome 48hr jobs get low priority
153 :     #
154 :     push(@sge_args, "-l low");
155 :    
156 :     my $sge_args = join(" ", @sge_args);
157 :    
158 :     my $sge_id;
159 :    
160 :     eval {
161 :     $sge_id = $sge->submit_job($meta, $sge_args, "$compute_exe $jobdir $path");
162 :     # print "Would submit '$sge_args' '$compute_exe' '$jobdir' '$path'\n";
163 :     };
164 :    
165 :     if ($@)
166 :     {
167 :     $stage->fatal($meta, "error starting SGE job $compute_exe $jobdir: $@\n");
168 :     }
169 :    
170 :     #
171 :     # Initialize sim status entries.
172 :     #
173 :     my $retries = $FIG_Config::mgrast_blast_retries;
174 :     $retries = 3 unless defined($retries);
175 :     for my $t ($start .. $end)
176 :     {
177 :     my $rec = {};
178 :     $rec->{sim_sge_id} = $sge_id;
179 :     $rec->{abbr} = $file->{abbr};
180 :     $rec->{work_dir} = $path;
181 :     $rec->{blast_retries_left} = $retries;
182 :     $rec->{status} = 'not_started';
183 :    
184 :     $status_db->set_task($dir, $t, $rec);
185 :     }
186 :    
187 :     push(@sge_ids, $sge_id);
188 :     }
189 :     }
190 :    
191 :     $stage->set_qualified_metadata("sge_ids", \@sge_ids);
192 :     $stage->set_status("complete");
193 :     $stage->set_running("no");
194 :    
195 :    
196 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3