forked from deweylab/RSEM
-
Notifications
You must be signed in to change notification settings - Fork 0
/
rsem-plot-transcript-wiggles
executable file
·176 lines (111 loc) · 6.58 KB
/
rsem-plot-transcript-wiggles
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#!/usr/bin/env perl
use Getopt::Long;
use Pod::Usage;
use FindBin;
use lib $FindBin::RealBin;
use rsem_perl_utils qw(runCommand getSAMTOOLS);
use Env qw(@PATH);
@PATH = ($FindBin::RealBin, "$FindBin::RealBin/" . getSAMTOOLS(), @PATH);
use strict;
my $gene_list = 0; # default is 0, means input is not a gene list
my $transcript_list = 0; # default is 0, this option can only be turned on if allele-specific expression is calculated
my $show_unique = 0; # 0, default value, means do not show unique transcript wiggles; 1 means show unique transcript wiggles
my $p = 1;
my $mem = "1G";
my $help = 0;
GetOptions("gene-list" => \$gene_list,
"transcript-list" => \$transcript_list,
"show-unique" => \$show_unique,
"p|num-threads=i" => \$p,
"memory-per-thread=s" => \$mem,
"h|help" => \$help) or pod2usage(-exitval => 2, -verbose => 2);
pod2usage(-verbose => 2) if ($help == 1);
pod2usage(-msg => "Invalid number of arguments!", -exitval => 2, -verbose => 2) if (scalar(@ARGV) != 3);
my $alleleS = 0;
if (-e "$ARGV[0].alleles.results") { $alleleS = 1; }
pod2usage(-msg => "--transcript-list cannot be set if allele-specific reference is not built!", -exitval => 2, -verbose => 2) if (!$alleleS && $transcript_list);
pod2usage(-msg => "--gene-list and --transcript-list cannot be set at the same time!", -exitval => 2, -verbose => 2) if ($gene_list && $transcript_list);
my $command = "";
unless (-e "$ARGV[0].transcript.sorted.bam") {
$command = "samtools sort -@ $p -m $mem -o $ARGV[0].transcript.sorted.bam $ARGV[0].transcript.bam";
&runCommand($command);
}
unless (-e "$ARGV[0].transcript.readdepth") {
$command = "rsem-bam2readdepth $ARGV[0].transcript.sorted.bam $ARGV[0].transcript.readdepth";
&runCommand($command);
}
if ($show_unique) {
unless (-e "$ARGV[0].uniq.transcript.bam") {
$command = "rsem-get-unique $p $ARGV[0].transcript.bam $ARGV[0].uniq.transcript.bam";
&runCommand($command);
}
unless (-e "$ARGV[0].uniq.transcript.sorted.bam") {
$command = "samtools sort -@ $p -m $mem -o $ARGV[0].uniq.transcript.sorted.bam $ARGV[0].uniq.transcript.bam";
&runCommand($command);
}
unless (-e "$ARGV[0].uniq.transcript.readdepth") {
$command = "rsem-bam2readdepth $ARGV[0].uniq.transcript.sorted.bam $ARGV[0].uniq.transcript.readdepth";
&runCommand($command);
}
}
my $id_type;
if ($alleleS) {
$id_type = 0;
if ($transcript_list) { $id_type = 1; }
if ($gene_list) { $id_type = 2; }
}
else {
$id_type = 1;
if ($gene_list) { $id_type = 2; }
}
$command = "rsem-gen-transcript-plots $ARGV[0] $ARGV[1] $alleleS $id_type $show_unique $ARGV[2]";
&runCommand($command);
__END__
=head1 NAME
rsem-plot-transcript-wiggles
=head1 PURPOSE
Generate PDF wiggle plots from transcript or gene ids
=head1 SYNOPSIS
rsem-plot-transcript-wiggles [options] sample_name input_list output_plot_file
=head1 ARGUMENTS
=over
=item B<sample_name>
The name of the sample analyzed.
=item B<input_list>
A list of transcript ids or gene ids. But it cannot be a mixture of transcript & gene ids. Each id occupies one line without extra spaces.
=item B<output_plot_file>
The file name of the pdf file which contains all plots.
=back
=head1 OPTIONS
=over
=item B<--gene-list>
The input-list is a list of gene ids. (Default: off)
=item B<--transcript-list>
The input-list is a list of transcript ids. This option can only be turned on if allele-specific expression is calculated. (Default: off)
=item B<--show-unique>
Show the wiggle plots as stacked bar plots. See description section for details. (Default: off)
=item B<-p/--num-threads> <int>
Set the number of threads we can use. (Default: 1)
=item B<--memory-per-thread> <string>
Set the maximum allowable memory per thread. <string> represents the memory and accepts suffices 'K/M/G'. (Default: 1G)
=item B<-h/--help>
Show help information.
=back
=head1 DESCRIPTION
This program generates transcript wiggle plots and outputs them in a pdf file. This program can accept either a list of transcript ids or gene ids (if transcript to gene mapping information is provided) and has two modes of showing wiggle plots. If '--show-unique' is not specified, the wiggle plot for each transcript is a histogram where each position has the expected read depth at this position as its height. If '--show-unique' is specified, for each transcript a stacked bar plot is generated. For each position, the read depth of unique reads, which have only one alignment, is showed in black. The read depth of multi-reads, which align to more than one places, is showed in red on top of the read depth of unique reads.This program will use some files RSEM generated previouslly. So please do not delete/move any file 'rsem-calculate-expression' generated. If allele-specific expression is calculated, the basic unit for plotting is an allele-specific transcript and plots can be grouped by either transcript ids (--transcript-list) or gene ids (--gene-list).
=head1 OUTPUT
=over
=item B<output_plot_file>
This is a pdf file containing all plots generated. If a list of transcript ids is provided, each page display at most 6 plots in 3 rows and 2 columns. If gene ids are provided, each page display a gene. The gene's id is showed at the top and all its transcripts' wiggle plots are showed in this page. The arrangment of plots is determined automatically. For each transcript wiggle plot, the transcript id is displayed as title. x-axis is position in the transcript and y-axis is read depth. If allele-specific expression is calculated, the basin unit becomes an allele-specific transcript and transcript ids and gene ids can be used to group allele-specific transcripts.
=item B<sample_name.transcript.sorted.bam and sample_name.transcript.readdepth>
If these files do not exist, 'rsem-plot-transcript-wiggles' will automatically generate them.
=item B<sample_name.uniq.transcript.bam, sample_name.uniq.transcript.sorted.bam and sample_name.uniq.transcript.readdepth>
If '--show-unique' option is specified and these files do not exist, 'rsem-plot-transcript-wiggles' will automatically generate them.
=back
=head1 EXAMPLES
Suppose sample_name and output_plot_file are set to 'mmliver_single_quals' and 'output.pdf' respectively. input_list is set to 'transcript_ids.txt' if transcript ids are provided, and is set to 'gene_ids.txt' if gene ids are provided.
1) Transcript ids are provided and we just want normal wiggle plots:
rsem-plot-transcript-wiggles mmliver_single_quals transcript_ids.txt output.pdf
2) Gene ids are provided and we want to show stacked bar plots:
rsem-plot-transcript-wiggles --gene-list --show-unique mmliver_single_quals gene_ids.txt output.pdf
=cut