]> git.donarmstrong.com Git - rsem.git/blob - rsem-calculate-expression
Added some instructions on how to visualize transcript coordinate BAM/WIG files using IGV
[rsem.git] / rsem-calculate-expression
1 #!/usr/bin/perl
2
3 use Getopt::Long;
4 use Pod::Usage;
5 use File::Basename;
6 use Switch;
7 use strict;
8
9 #const
10 my $BURNIN = 200;
11 my $NCV = 1000;
12 my $SAMPLEGAP = 1;
13 my $CONFIDENCE = 0.95;
14 my $NSPC = 50;
15
16 my $NMB = 1024; # default
17
18 my $status = 0;
19
20 my $read_type = 1; # default, single end with qual
21
22 my $bowtie_path = "";
23 my $C = 2;
24 my $E = 99999999;
25 my $L = 25;
26 my $maxHits = 200;
27 my $chunkMbs = 0;       # 0 = use bowtie default
28 my $phred33 = 0;
29 my $phred64 = 0;
30 my $solexa = 0;
31
32 my $is_sam = 0;
33 my $is_bam = 0;
34 my $fn_list = "";
35 my $tagName = "XM";
36
37 my $probF = 0.5;
38
39 my $minL = 1;
40 my $maxL = 1000;
41 my $mean = -1;
42 my $sd = 0;
43
44 my $estRSPD = 0;
45 my $B = 20;
46
47 my $nThreads = 1;
48 my $genBamF = 1;  # default is generating transcript bam file
49 my $genGenomeBamF = 0;
50 my $sampling = 0;
51 my $calcCI = 0;
52 my $var_opt = 0; # temporarily, only for internal use
53 my $quiet = 0;
54 my $help = 0;
55
56 my $paired_end = 0;
57 my $no_qual = 0;
58 my $keep_intermediate_files = 0;
59
60 my $strand_specific = 0;
61
62 my $mTime = 0;
63 my ($time_start, $time_end, $time_alignment, $time_rsem, $time_ci) = (0, 0, 0, 0, 0);
64
65 GetOptions("keep-intermediate-files" => \$keep_intermediate_files,
66            "no-qualities" => \$no_qual,
67            "paired-end" => \$paired_end,
68            "strand-specific" => \$strand_specific,
69            "sam" => \$is_sam,
70            "bam" => \$is_bam,
71            "sam-header-info=s" => \$fn_list,
72            "tag=s" => \$tagName,
73            "seed-length=i" => \$L,
74            "bowtie-path=s" => \$bowtie_path,
75            "bowtie-n=i" => \$C,
76            "bowtie-e=i" => \$E,
77            "bowtie-m=i" => \$maxHits,
78            "bowtie-chunkmbs=i" => \$chunkMbs,
79            "phred33-quals" => \$phred33,
80            "phred64-quals" => \$phred64, #solexa1.3-quals" => \$phred64,
81            "solexa-quals" => \$solexa,
82            "forward-prob=f" => \$probF,
83            "fragment-length-min=i" => \$minL,
84            "fragment-length-max=i" => \$maxL,
85            "fragment-length-mean=f" => \$mean,
86            "fragment-length-sd=f" => \$sd,
87            "estimate-rspd" => \$estRSPD,
88            "num-rspd-bins=i" => \$B,
89            "p|num-threads=i" => \$nThreads,
90            "no-bam-output" => sub { $genBamF = 0; },
91            "output-genome-bam" => \$genGenomeBamF,
92            "sampling-for-bam" => \$sampling,
93            "var" => \$var_opt,
94            "calc-ci" => \$calcCI,
95            "ci-memory=i" => \$NMB,
96            "time" => \$mTime,
97            "q|quiet" => \$quiet,
98            "h|help" => \$help) or pod2usage(-exitval => 2, -verbose => 2);
99
100 pod2usage(-verbose => 2) if ($help == 1);
101
102
103 #check parameters and options
104
105 if ($is_sam || $is_bam) {
106     pod2usage(-msg => "Invalid number of arguments!", -exitval => 2, -verbose => 2) if (scalar(@ARGV) != 3);
107     pod2usage(-msg => "--sam and --bam cannot be active at the same time!", -exitval => 2, -verbose => 2) if ($is_sam == 1&& $is_bam == 1);
108     pod2usage(-msg => "--bowtie-path, --bowtie-n, --bowtie-e, --bowtie-m, --phred33-quals, --phred64-quals or --solexa-quals cannot be set if input is SAM/BAM format!", -exitval => 2, -verbose => 2) if ($bowtie_path ne "" || $C != 2 || $E != 99999999 || $maxHits != 200 || $phred33 || $phred64 || $solexa);
109 }
110 else {
111     pod2usage(-msg => "Invalid number of arguments!", -exitval => 2, -verbose => 2) if (!$paired_end && scalar(@ARGV) != 3 || $paired_end && scalar(@ARGV) != 4);    
112     pod2usage(-msg => "Only one of --phred33-quals --phred64-quals/--solexa1.3-quals --solexa-suqls can be active!", -exitval => 2, -verbose => 2) if ($phred33 + $phred64 + $solexa > 1);    
113     podwusage(-msg => "--sam , --bam or --sam-header-info cannot be set if use bowtie aligner to produce alignments!", -exitval => 2, -verbose => 2) if ($is_sam || $is_bam || $fn_list ne "");
114 }
115
116 pod2usage(-msg => "Forward probability should be in [0, 1]!", -exitval => 2, -verbose => 2) if ($probF < 0 || $probF > 1);
117 pod2usage(-msg => "Min fragment length should be at least 1!", -exitval => 2, -verbose => 2) if ($minL < 1);
118 pod2usage(-msg => "Min fragment length should be smaller or equal to max fragment length!", -exitval => 2, -verbose => 2) if ($minL > $maxL);
119 pod2usage(-msg => "The memory allocated for calculating credibility intervals should be at least 1 MB!\n", -exitval => 2, -verbose => 2) if ($NMB < 1);
120 pod2usage(-msg => "Number of threads should be at least 1!\n", -exitval => 2, -verbose => 2) if ($nThreads < 1);
121 pod2usage(-msg => "Seed length should be at least 5!\n", -exitval => 2, -verbose => 2) if ($L < 5);
122 pod2usage(-msg => "--sampling-for-bam cannot be specified if --no-bam-output is specified!\n", -exitval => 2, -verbose => 2) if ($sampling && !$genBamF);
123 pod2usage(-msg => "--output-genome-bam cannot be specified if --no-bam-output is specified!\n", -exitval => 2, -verbose => 2) if ($genGenomeBamF && !$genBamF);
124
125 if ($L < 25) { print "Warning: the seed length set is less than 25! This is only allowed if the references are not added poly(A) tails.\n"; }
126
127 if ($strand_specific) { $probF = 1.0; }
128
129 my $mate1_list = "";
130 my $mate2_list = "";
131 my $inpF = "";
132
133 my ($refName, $sampleName, $sampleToken, $temp_dir, $stat_dir, $imdName) = ();
134 my $gap = 32;
135
136 if ($paired_end) {
137     if ($no_qual) { $read_type = 2; }
138     else { $read_type = 3; }
139 }
140 else {
141     if ($no_qual) { $read_type = 0; }
142     else { $read_type = 1; }
143 }
144
145 if (scalar(@ARGV) == 3) {
146     if ($is_sam || $is_bam) { $inpF = $ARGV[0]; } 
147     else {$mate1_list = $ARGV[0]; }
148     $refName = $ARGV[1];
149     $sampleName = $ARGV[2];
150 }
151 else {
152     $mate1_list = $ARGV[0];
153     $mate2_list = $ARGV[1];
154     $refName = $ARGV[2];
155     $sampleName = $ARGV[3];
156 }
157
158 if ($genGenomeBamF) {
159     open(INPUT, "$refName.ti");
160     my $line = <INPUT>; chomp($line);
161     close(INPUT);
162     my ($M, $type) = split(/ /, $line);
163     pod2usage(-msg => "No genome information provided, so genome bam file cannot be generated!\n", -exitval => 2, -verbose => 2) if ($type != 0);
164 }
165
166 my $pos = rindex($sampleName, '/');
167 if ($pos < 0) { $sampleToken = $sampleName; }
168 else { $sampleToken = substr($sampleName, $pos + 1); }
169
170 $temp_dir = "$sampleName.temp";
171 $stat_dir = "$sampleName.stat";
172
173 if (!(-d $temp_dir) && !mkdir($temp_dir)) { print "Fail to create folder $temp_dir.\n"; exit(-1); }
174 if (!(-d $stat_dir) && !mkdir($stat_dir)) { print "Fail to create folder $stat_dir.\n"; exit(-1); }
175
176 $imdName = "$temp_dir/$sampleToken";
177
178 if (!$is_sam && !$is_bam && !$no_qual && ($phred33 + $phred64 + $solexa == 0)) { $phred33 = 1; }
179
180 my ($mate_minL, $mate_maxL) = (1, $maxL);
181
182 if ($bowtie_path ne "") { $bowtie_path .= "/"; }
183
184 my ($fn, $dir, $suf) = fileparse($0);
185 my $command = "";
186
187 if (!$is_sam && !$is_bam) {
188     $command = $bowtie_path."bowtie";
189     if ($no_qual) { $command .= " -f"; }
190     else { $command .= " -q"; }
191     
192     if ($phred33) { $command .= " --phred33-quals"; }
193     elsif ($phred64) { $command .= " --phred64-quals"; }
194     elsif ($solexa) { $command .= " --solexa-quals"; }
195     
196     $command .= " -n $C -e $E -l $L";
197     if ($read_type == 2 || $read_type == 3) { $command .= " -I $minL -X $maxL"; }
198     if ($chunkMbs > 0) { $command .= " --chunkmbs $chunkMbs"; }
199     
200     if ($strand_specific || $probF == 1.0) { $command .= " --norc"; }
201     elsif ($probF == 0.0) { $command .= " --nofw"; }
202
203     $command .= " -p $nThreads -a -m $maxHits -S";
204     if ($quiet) { $command .= " --quiet"; }    
205
206     $command .= " $refName";
207     if ($read_type == 0 || $read_type == 1) {
208         $command .= " $mate1_list"; 
209     }
210     else {
211         $command .= " -1 $mate1_list -2 $mate2_list";
212     }
213
214     $command .= " | gzip > $sampleName.sam.gz";
215
216     if ($mTime) { $time_start = time(); }
217
218     &runCommand($command);
219
220     if ($mTime) { $time_end = time(); $time_alignment = $time_end - $time_start; }
221
222     $inpF = "$sampleName.sam.gz";
223     $is_sam = 1; # output of bowtie is a sam file
224 }
225
226 if ($mTime) { $time_start = time(); }
227
228 $command = $dir."rsem-parse-alignments $refName $sampleName $sampleToken";
229
230 my $samInpType;
231 if ($is_sam) { $samInpType = "s"; } 
232 elsif ($is_bam) { $samInpType = "b"; }
233
234 $command .= " $samInpType $inpF -t $read_type";
235 if ($fn_list ne "") { $command .= " -l $fn_list"; }
236 if ($tagName ne "") { $command .= " -tag $tagName"; }
237 if ($quiet) { $command .= " -q"; }
238
239 &runCommand($command);
240
241 $command = $dir."rsem-build-read-index $gap"; 
242 switch($read_type) {
243     case 0  { $command .= " 0 $quiet $imdName\_alignable.fa"; }
244     case 1  { $command .= " 1 $quiet $imdName\_alignable.fq"; }
245     case 2  { $command .= " 0 $quiet $imdName\_alignable_1.fa $imdName\_alignable_2.fa"; }
246     case 3  { $command .= " 1 $quiet $imdName\_alignable_1.fq $imdName\_alignable_2.fq"; }
247 }
248 &runCommand($command);
249
250 my $doesOpen = open(OUTPUT, ">$imdName.mparams");
251 if ($doesOpen == 0) { print "Cannot generate $imdName.mparams!\n"; exit(-1); }
252 print OUTPUT "$minL $maxL\n";
253 print OUTPUT "$probF\n";
254 print OUTPUT "$estRSPD\n";
255 print OUTPUT "$B\n";
256 print OUTPUT "$mate_minL $mate_maxL\n";
257 print OUTPUT "$mean $sd\n";
258 print OUTPUT "$L\n";
259 close(OUTPUT);  
260
261 $command = $dir."rsem-run-em $refName $read_type $sampleName $sampleToken -p $nThreads";
262 if ($genBamF) { 
263     $command .= " -b $samInpType $inpF";
264     if ($fn_list ne "") { $command .= " 1 $fn_list"; }
265     else { $command .= " 0"; }
266     if ($sampling) { $command .= " --sampling"; }
267 }
268 if ($calcCI) { $command .= " --gibbs-out"; }
269 if ($quiet) { $command .= " -q"; }
270
271 &runCommand($command);
272
273 if ($genBamF) {
274     $command = $dir."sam/samtools sort $sampleName.transcript.bam $sampleName.transcript.sorted";
275     &runCommand($command);
276     $command = $dir."sam/samtools index $sampleName.transcript.sorted.bam";
277     &runCommand($command);
278
279     if ($genGenomeBamF) {
280         $command = $dir."rsem-tbam2gbam $refName $sampleName.transcript.bam $sampleName.genome.bam";
281         &runCommand($command);
282         $command = $dir."sam/samtools sort $sampleName.genome.bam $sampleName.genome.sorted";
283         &runCommand($command);
284         $command = $dir."sam/samtools index $sampleName.genome.sorted.bam";
285         &runCommand($command);
286     }
287 }
288
289 &collectResults("$imdName.iso_res", "$sampleName.isoforms.results"); # isoform level
290 &collectResults("$imdName.gene_res", "$sampleName.genes.results"); # gene level
291
292 if ($mTime) { $time_end = time(); $time_rsem = $time_end - $time_start; }
293
294 if ($mTime) { $time_start = time(); }
295
296 if ($calcCI || $var_opt) {
297     $command = $dir."rsem-run-gibbs $refName $sampleName $sampleToken $BURNIN $NCV $SAMPLEGAP";
298     $command .= " -p $nThreads";
299     if ($var_opt) { $command .= " --var"; }
300     if ($quiet) { $command .= " -q"; }
301     &runCommand($command);
302 }
303
304 if ($calcCI) {
305     system("mv $sampleName.isoforms.results $imdName.isoforms.results.bak1");
306     system("mv $sampleName.genes.results $imdName.genes.results.bak1");
307     &collectResults("$imdName.iso_res", "$sampleName.isoforms.results"); # isoform level
308     &collectResults("$imdName.gene_res", "$sampleName.genes.results"); # gene level
309
310     $command = $dir."rsem-calculate-credibility-intervals $refName $sampleName $sampleToken $CONFIDENCE $NCV $NSPC $NMB";
311     $command .= " -p $nThreads";
312     if ($quiet) { $command .= " -q"; }
313     &runCommand($command);
314
315     system("mv $sampleName.isoforms.results $imdName.isoforms.results.bak2");
316     system("mv $sampleName.genes.results $imdName.genes.results.bak2");
317     &collectResults("$imdName.iso_res", "$sampleName.isoforms.results"); # isoform level
318     &collectResults("$imdName.gene_res", "$sampleName.genes.results"); # gene level
319 }
320
321 if ($mTime) { $time_end = time(); $time_ci = $time_end - $time_start; }
322
323 if ($mTime) { $time_start = time(); }
324
325 if (!$keep_intermediate_files) {
326     &runCommand("rm -rf $temp_dir", "Fail to delete the temporary folder!");
327 }
328
329 if ($mTime) { $time_end = time(); }
330
331 if ($mTime) { 
332     open(OUTPUT, ">$sampleName.time");
333     print OUTPUT "Aligning reads: $time_alignment s.\n";
334     print OUTPUT "Estimating expression levels: $time_rsem s.\n";
335     print OUTPUT "Calculating credibility intervals: $time_ci s.\n";
336     my $time_del = $time_end - $time_start;
337 #    print OUTPUT "Delete: $time_del s.\n";
338     close(OUTPUT);
339 }
340
341 # command, {err_msg}
342 sub runCommand {
343     print $_[0]."\n";
344     my $status = system($_[0]);
345     if ($status != 0) { 
346         my $errmsg;
347         if (scalar(@_) > 1) { $errmsg = $_[1]; }
348         else { $errmsg = "\"$command\" failed! Plase check if you provide correct parameters/options for the pipeline!"; }
349         print $errmsg."\n";
350         exit(-1);
351     }
352     print "\n";
353 }
354
355 # inpF, outF
356 sub collectResults {
357     my $local_status;
358     my ($inpF, $outF);
359     my (@results, @ids) = ();
360     my $line;
361     my $cnt;
362
363     $inpF = $_[0];
364     $outF = $_[1];
365
366     $local_status = open(INPUT, $inpF);
367     if ($local_status == 0) { print "Fail to open file $inpF!\n"; exit(-1); }
368     
369     $cnt = 0;
370     @results = ();
371     
372     while ($line = <INPUT>) {
373         ++$cnt;
374         chomp($line);
375         my @local_arr = split(/\t/, $line);
376         if ($cnt == 4) { @ids = @local_arr; }
377         else { push(@results, \@local_arr); }
378     }
379     
380     push(@results, \@ids);
381     close(INPUT);
382
383     $local_status = open(OUTPUT, ">$outF");
384     if ($local_status == 0) { print "Fail to create file $outF!\n"; exit(-1); }
385
386     my $n = scalar(@results);
387     my $m = scalar(@{$results[0]});
388     for (my $i = 0; $i < $m; $i++) {
389         my @out_arr = ();
390         for (my $j = 0; $j < $n; $j++) { push(@out_arr, $results[$j][$i]); }
391         $" = "\t";
392         print OUTPUT "@out_arr\n"; 
393     }
394     close(OUTPUT);
395 }
396
397
398 __END__
399
400 =head1 NAME
401
402 rsem-calculate-expression
403
404 =head1 SYNOPSIS
405
406 =over
407
408  rsem-calculate-expression [options] upstream_read_file(s) reference_name sample_name
409  rsem-calculate-expression [options] --paired-end upstream_read_file(s) downstream_read_file(s) reference_name sample_name
410  rsem-calculate-expression [options] --sam/--bam [--paired-end] input reference_name sample_name
411
412 =back
413
414 =head1 ARGUMENTS
415
416 =over
417
418 =item B<upstream_read_files(s)>
419
420 Comma-separated list of files containing single-end reads or upstream reads for paired-end data.  By default, these files are assumed to be in FASTQ format.  If the --no-qualities option is specified, then FASTA format is expected.
421
422 =item B<downstream_read_file(s)>
423
424 Comma-separated list of files containing downstream reads which are paired with the upstream reads.  By default, these files are assumed to be in FASTQ format.  If the --no-qualities option is specified, then FASTA format is expected.
425
426 =item B<input>
427
428 SAM/BAM formatted input file.  If "-" is specified for the filename, SAM/BAM input is instead assumed to come from standard input. RSEM requires all alignments of the same read group together. For paired-end reads, RSEM also requires the two mates of any alignment be adjacent. See Description section for how to make input file obey RSEM's requirements.
429
430 =item B<reference_name>                        
431
432 The name of the reference used.  The user must have run 'rsem-prepare-reference' with this reference_name before running this program.
433
434 =item B<sample_name>
435
436 The name of the sample analyzed. All output files are prefixed by this name (e.g., sample_name.genes.results)
437
438 =back
439
440 =head1 OPTIONS
441
442 =over
443
444 =item B<--paired-end>
445
446 Input reads are paired-end reads. (Default: off)
447
448 =item B<--no-qualities>
449
450 Input reads do not contain quality scores. (Default: off)
451
452 =item B<--strand-specific>
453
454 The RNA-Seq protocol used to generate the reads is strand specific, i.e., all (upstream) reads are derived from the forward strand.  This option is equivalent to --forward-prob=1.0.  With this option set, if RSEM runs the Bowtie aligner, the '--norc' Bowtie option will be used, which disables alignment to the reverse strand of transcripts.  (Default: off)
455
456 =item B<--sam>
457
458 Input file is in SAM format. (Default: off)
459
460 =item B<--bam>
461
462 Input file is in BAM format. (Default: off)
463
464 =item B<--sam-header-info> <file>
465
466 RSEM reads header information from input by default. If this option is on, header information is read from the specified file. For the format of the file, please see SAM official website. (Default: "")
467
468 =item B<-p/--num-threads> <int>
469
470 Number of threads to use. Both Bowtie and expression estimation will use this many threads. (Default: 1)
471
472 =item B<--no-bam-output>
473
474 Do not output any BAM file. (Default: off)
475
476 =item B<--output-genome-bam>
477
478 Generate a BAM file, 'sample_name.genome.bam', with alignments mapped to genomic coordinates and annotated with their posterior probabilities. In addition, RSEM will call samtools (included in RSEM package) to sort and index the bam file. 'sample_name.genome.sorted.bam' and 'sample_name.genome.sorted.bam.bai' will be generated. (Default: off)
479
480 =item B<--sampling-for-bam>
481
482 When RSEM generates a BAM file, instead of outputing all alignments a read has with their posterior probabilities, one alignment is sampled and outputed according to the posterior probabilities. If the sampling result is that the read comes from the "noise" transcript, nothing is outputed. (Default: off)
483
484 =item B<--calc-ci>
485
486 Calculate 95% credibility intervals and posterior mean estimates.  (Default: off)
487
488 =item B<--seed-length> <int>
489
490 Seed length used by the read aligner.  Providing the correct value is important for RSEM. If RSEM runs Bowtie, it uses this value for Bowtie's seed length parameter. Any read with its or at least one of its mates' (for paired-end reads) length less than this value will be ignored. If the references are not added poly(A) tails, the minimum allowed value is 5, otherwise, the minimum allowed value is 25. Note that this script will only check if the value >= 5 and give a warning message if the value < 25 but >= 5. (Default: 25)
491
492 =item B<--tag> <string>
493
494 The name of the optional field used in the SAM input for identifying a read with too many valid alignments. The field should have the format <tagName>:i:<value>, where a <value> bigger than 0 indicates a read with too many alignments. (Default: "")
495
496 =item B<--bowtie-path> <path>
497
498 The path to the bowtie executables. (Default: the path to the bowtie executables is assumed to be in the user's PATH environment variable)
499
500 =item B<--bowtie-n> <int>
501
502 (Bowtie parameter) max # of mismatches in the seed. (Range: 0-3, Default: 2)
503
504 =item B<--bowtie-e> <int>
505
506 (Bowtie parameter) max sum of mismatch quality scores across the alignment. (Default: 99999999)
507
508 =item B<--bowtie-m> <int>
509
510 (Bowtie parameter) suppress all alignments for a read if > <int> valid alignments exist. (Default: 200)
511
512 =item B<--bowtie-chunkmbs> <int>
513
514 (Bowtie parameter) memory allocated for best first alignment calculation (Default: 0 - use bowtie's default)
515
516 =item B<--phred33-quals>
517
518 Input quality scores are encoded as Phred+33. (Default: on)
519
520 =item B<--phred64-quals>
521
522 Input quality scores are encoded as Phred+64 (default for GA Pipeline ver. >= 1.3). (Default: off)
523
524 =item B<--solexa-quals>
525
526 Input quality scores are solexa encoded (from GA Pipeline ver. < 1.3). (Default: off)
527
528 =item B<--forward-prob> <double>
529
530 Probability of generating a read from the forward strand of a transcript. Set to 1 for a strand-specific protocol where all (upstream) reads are derived from the forward strand, 0 for a strand-specific protocol where all (upstream) read are derived from the reverse strand, or 0.5 for a non-strand-specific protocol. (Default: 0.5)
531
532 =item B<--fragment-length-min> <int>
533
534 Minimum read/insert length allowed. This is also the value for the bowtie -I option. (Default: 1)
535
536 =item B<--fragment-length-max> <int>
537
538 Maximum read/insert length allowed. This is also the value for the bowtie -X option. (Default: 1000)
539
540 =item B<--fragment-length-mean> <double>
541
542 (single-end data only) The mean of the fragment length distribution, which is assumed to be a Gaussian. (Default: -1, which disables use of the fragment length distribution)
543
544 =item B<--fragment-length-sd> <double>
545
546 (single-end data only) The standard deviation of the fragment length distribution, which is assumed to be a Gaussian.  (Default: 0, which assumes that all fragments are of the same length, given by the rounded value of B<--fragment-length-mean>)
547
548 =item B<--estimate-rspd>
549
550 Set this option if you want to estimate the read start position distribution (RSPD) from data. Otherwise, RSEM will use a uniform RSPD. (Default: off)
551
552 =item B<--num-rspd-bins> <int>
553
554 Number of bins in the RSPD. Only relevant when '--estimate-rspd' is specified.  Use of the default setting is recommended. (Default: 20)
555
556 =item B<--ci-memory> <int>
557
558 Maximum size (in memory, MB) of the auxiliary buffer used for computing credibility intervals (CI). Set it larger for a faster CI calculation. However, leaving 2 GB memory free for other usage is recommended. (Default: 1024)
559
560 =item B<--keep-intermediate-files>
561
562 Keep temporary files generated by RSEM.  RSEM creates a temporary directory, 'sample_name.temp', into which it puts all intermediate output files. If this directory already exists, RSEM overwrites all files generated by previous RSEM runs inside of it. By default, after RSEM finishes, the temporary directory is deleted.  Set this option to prevent the deletion of this directory and the intermediate files inside of it. (Default: off)
563
564 =item B<--time>
565
566 Output time consumed by each step of RSEM to 'sample_name.time'. (Default: off)
567
568 =item B<-q/--quiet>
569
570 Suppress the output of logging information. (Default: off)
571
572 =item B<-h/--help>
573
574 Show help information.
575
576 =back
577
578 =head1 DESCRIPTION
579
580 In its default mode, this program aligns input reads against a reference transcriptome with Bowtie and calculates expression values using the alignments.  RSEM assumes the data are single-end reads with quality scores, unless the '--paired-end' or '--no-qualities' options are specified.  Users may use an alternative aligner by specifying one of the --sam and --bam options, and providing an alignment file in the specified format. However, users should make sure that they align against the indices generated by 'rsem-prepare-reference' and the alignment file satisfies the requirements mentioned in ARGUMENTS section. 
581
582 One simple way to make the alignment file satisfying RSEM's requirements (assuming the aligner used put mates in a paired-end read adjacent) is to use 'convert-sam-for-rsem' script. This script only accept SAM format files as input. If a BAM format file is obtained, please use samtools to convert it to a SAM file first. For example, if '/ref/mouse_125' is the 'reference_name' and the SAM file is named 'input.sam', you can run the following command: 
583
584   convert-sam-for-rsem /ref/mouse_125 input.sam -o input_for_rsem.sam  
585
586 For details, please refer to 'convert-sam-for-rsem's documentation page.
587
588 The SAM/BAM format RSEM uses is v1.4. However, it is compatible with old SAM/BAM format. However, RSEM cannot recognize 0x100 in the FLAG field. In addition, RSEM requires SEQ and QUAL are not '*'. 
589
590 The user must run 'rsem-prepare-reference' with the appropriate reference before using this program.
591
592 For single-end data, it is strongly recommended that the user provide the fragment length distribution parameters (--fragment-length-mean and --fragment-length-sd).  For paired-end data, RSEM will automatically learn a fragment length distribution from the data.
593
594 Please note that some of the default values for the Bowtie parameters are not the same as those defined for Bowtie itself.
595
596 The temporary directory and all intermediate files will be removed when RSEM finishes unless '--keep-intermediate-files' is specified.
597
598 With the '--calc-ci' option, 95% credibility intervals and posterior mean estimates will be calculated in addition to maximum likelihood estimates.
599
600 =head1 OUTPUT
601
602 =over
603
604 =item B<sample_name.genes.results> 
605
606 File containing gene level expression estimates. The format of each
607 line in this file is:
608
609 gene_id expected_counts tau_value [pmc_value tau_pme_value tau_ci_lower_bound tau_ci_upper_bound] transcript_id_list
610
611 Fields are separated by the tab character. Fields within "[]" are only
612 presented if '--calc-ci' is set. pme stands for posterior mean
613 estimation. pmc stands for posterior mean counts. ci_lower_bound(l)
614 means the lower bound of the credibility intervals, ci_upper_bound(u)
615 means the upper bound of the credibility intervals. So the credibility
616 interval is [l, u]. 'transcript_id_list' is a space-separated list of
617 transcript_ids belonging to the gene. If no gene information is
618 provided, this file has the same content as
619 'sample_name.isoforms.results'.
620
621 =item B<sample_name.isoforms.results> 
622
623 File containing isoform level expression values. The format of each
624 line in this file is:
625
626 transcript_id expected_counts tau_value [pmc_value tau_pme_value tau_ci_lower_bound tau_ci_upper_bound] gene_id
627
628 Fields are separated by the tab character. 'gene_id' is the gene_id of
629 the gene which this transcript belongs to. If no gene information is
630 provided, 'gene_id' and 'transcript_id' are the same.
631
632 =item B<sample_name.transcript.bam, sample_name.transcript.sorted.bam and sample_name.transcript.sorted.bam.bai>
633
634 Only generated when --no-bam-output is not specified.
635
636 'sample_name.transcript.bam' is a BAM-formatted file of read
637 alignments in transcript coordinates. The MAPQ field of each alignment
638 is set to min(100, floor(-10 * log10(1.0 - w) + 0.5)), where w is the
639 posterior probability of that alignment being the true mapping of a
640 read.  In addition, RSEM pads a new tag ZW:f:value, where value is a
641 single precision floating number representing the posterior
642 probability.
643
644 'sample_name.transcript.sorted.bam' and
645 'sample_name.transcript.sorted.bam.bai' are the sorted BAM file and
646 indices generated by samtools (included in RSEM package).
647
648 =item B<sample_name.genome.bam, sample_name.genome.sorted.bam and sample_name.genome.sorted.bam.bai>
649
650 Only generated when --no-bam-output is not specified and --output-genome-bam is specified.
651
652 'sample_name.genome.bam' is a BAM-formatted file of read alignments in
653 genomic coordinates. Alignments of reads that have identical genomic
654 coordinates (i.e., alignments to different isoforms that share the
655 same genomic region) are collapsed into one alignment.  The MAPQ field
656 of each alignment is set to min(100, floor(-10 * log10(1.0 - w) +
657 0.5)), where w is the posterior probability of that alignment being
658 the true mapping of a read.  In addition, RSEM pads a new tag
659 ZW:f:value, where value is a single precision floating number
660 representing the posterior probability. If an alignment is spliced, a
661 XS:A:value tag is also added, where value is either '+' or '-'
662 indicating the strand of the transcript it aligns to.
663
664 'sample_name.genome.sorted.bam' and 'sample_name.genome.sorted.bam.bai' are the
665 sorted BAM file and indices generated by samtools (included in RSEM package).
666
667 =item B<sample_name.sam.gz>
668
669 Only generated when the input files are raw reads instead of SAM/BAM format files
670
671 It is the gzipped SAM output produced by bowtie aligner.
672
673 =item B<sample_name.time>
674
675 Only generated when --time is specified.
676
677 It contains time (in seconds) consumed by aligning reads, estimating expression levels and calculating credibility intervals.
678
679 =item B<sample_name.stat>
680
681 This is a folder instead of a file. All model related statistics are stored in this folder. Use 'rsem-plot-model' can generate plots using this folder.
682
683 =back
684
685 =head1 EXAMPLES
686
687 Assume the path to the bowtie executables is in the user's PATH environment variable. Reference files are under '/ref' with name 'mouse_125'. 
688
689 1) '/data/mmliver.fq', single-end reads with quality scores. Quality scores are encoded as for 'GA pipeline version >= 1.3'. We want to use 8 threads and generate a genome BAM file:
690
691  rsem-calculate-expression --phred64-quals \
692                            -p 8 \
693                            --output-genome-bam \
694                            /data/mmliver.fq \
695                            /ref/mouse_125 \
696                            mmliver_single_quals
697
698 2) '/data/mmliver_1.fq' and '/data/mmliver_2.fq', paired-end reads with quality scores. Quality scores are in SANGER format. We want to use 8 threads and do not generate a genome BAM file:
699
700  rsem-calculate-expression -p 8 \
701                            --paired-end \
702                            /data/mmliver_1.fq \
703                            /data/mmliver_2.fq \
704                            /ref/mouse_125 \
705                            mmliver_paired_end_quals
706
707 3) '/data/mmliver.fa', single-end reads without quality scores. We want to use 8 threads:
708
709  rsem-calculate-expression -p 8 \
710                            --no-qualities \
711                            /data/mmliver.fa \
712                            /ref/mouse_125 \
713                            mmliver_single_without_quals
714
715 4) Data are the same as 1). We want to take a fragment length distribution into consideration. We set the fragment length mean to 150 and the standard deviation to 35. In addition to a BAM file, we also want to generate credibility intervals.  We allow RSEM to use 1GB of memory for CI calculation:
716
717  rsem-calculate-expression --bowtie-path /sw/bowtie \
718                            --phred64-quals \
719                            --fragment-length-mean 150.0 \
720                            --fragment-length-sd 35.0 \
721                            -p 8 \
722                            --output-genome-bam \
723                            --calc-ci \
724                            --ci-memory 1024 \
725                            /data/mmliver.fq \
726                            /ref/mouse_125 \
727                            mmliver_single_quals
728
729 5) '/data/mmliver_paired_end_quals.bam', paired-end reads with quality scores.  We want to use 8 threads:
730
731  rsem-calculate-expression --paired-end \
732                            --bam \
733                            -p 8 \
734                            /data/mmliver_paired_end_quals.bam \
735                            /ref/mouse_125 \
736                            mmliver_paired_end_quals
737
738 =cut