1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
use File::Basename;
use lib ("$FindBin::RealBin/../../PerlLib");
use Process_cmd;
my $usage = "usage: $0 (RSEM|eXpress|kallisto|salmon-(fmd|quasi)) samples.txt Trinity.fasta\n\n";
my $method = $ARGV[0] or die $usage;
unless ($method =~ /^(RSEM|eXpress|kallisto|salmon-(fmd|quasi))$/i) {
die $usage;
}
my $samples_file = $ARGV[1] or die $usage;
my $trinity_fasta = $ARGV[2] or die $usage;
my $utildir = "$FindBin::RealBin/../../util";
main: {
&process_cmd("ln -sf $trinity_fasta .");
$trinity_fasta = basename($trinity_fasta);
my @samples;
my @global_params;
{
open (my $fh, $samples_file) or die $!;
while (<$fh>) {
chomp;
unless (/\w/) { next; }
if (/^\#/) { next; }
if (/^\-/) {
push (@global_params, $_);
}
else {
my ($sample_name, $left_fq, $right_fq) = split(/\s+/);
unless ($left_fq) {
die "Error, not able to parse line: $_";
}
$left_fq = &ensure_full_path($left_fq);
$right_fq = &ensure_full_path($right_fq) if $right_fq;
my @local_params;
if ($left_fq && $right_fq) {
push (@local_params, "--left $left_fq --right $right_fq");
}
else {
push (@local_params, "--single $left_fq")
}
push (@samples, [$sample_name, @local_params]);
}
}
close $fh;
}
my @trans_results;
my @gene_results;
foreach my $sample (@samples) {
my ($sample_name, @local_params) = @$sample;
my $cmd = "$utildir/align_and_estimate_abundance.pl --transcripts $trinity_fasta --prep_reference "
. " @local_params @global_params";
my $outdir = "$method-$sample_name";
if ($method eq 'RSEM') {
$cmd .= " --est_method RSEM --output_dir $outdir --aln_method bowtie ";
push (@trans_results, "$outdir/RSEM.isoforms.results");
push (@gene_results, "$outdir/RSEM.genes.results");
}
elsif ($method =~ /eXpress/i) {
$cmd .= " --est_method eXpress --output_dir $outdir --aln_method bowtie2 ";
push (@trans_results, "$outdir/results.xprs");
push (@gene_results, "$outdir/results.xprs.genes");
}
elsif ($method eq 'kallisto') {
$cmd .= " --est_method kallisto --output_dir $outdir ";
push (@trans_results, "$outdir/abundance.tsv");
push (@gene_results, "$outdir/abundance.tsv.genes");
}
elsif($method =~ /salmon-(\w+)$/) {
my $salmon_idx_type = $1;
$cmd .= " --est_method salmon --salmon_idx_type $salmon_idx_type --output_dir $outdir";
push (@trans_results, "$outdir/quant.sf");
push (@gene_results, "$outdir/quant.sf.genes");
}
else {
# shouldn't ever get here.
die "error - method $method not recognized";
}
&process_cmd($cmd);
}
## generate matrices.
my $cmd = "$utildir/abundance_estimates_to_matrix.pl --est_method $method --out_prefix $method-trans --name_sample_by_basedir @trans_results";
&process_cmd($cmd);
$cmd = "$utildir/abundance_estimates_to_matrix.pl --est_method $method --out_prefix $method-gene --name_sample_by_basedir @gene_results";
&process_cmd($cmd);
exit(0);
}
|