22
33# #########LICENCE##########
44# PCAP - NGS reference implementations and helper code for the ICGC/TCGA Pan-Cancer Analysis Project
5- # Copyright (C) 2014-2015 ICGC PanCancer Project
5+ # Copyright (C) 2014-2017 ICGC PanCancer Project
66#
77# This program is free software; you can redistribute it and/or
88# modify it under the terms of the GNU General Public License
4949use PCAP;
5050use PCAP::Cli;
5151
52- const my @ANALYSIS_TYPES => (qw( ALIGNMENTS CALLS) );
52+ const my @ANALYSIS_TYPES => (qw( ALIGNMENTS CALLS RNA_STAR RNA_TOPHAT ) );
5353const my @AVAILABLE_COMPOSITE_FILTERS => (qw( not_sanger_workflow caller max_dataset_GB multi_tumour sanger_version broad_version dkfz_embl_version jamboree_approved manual_donor_blacklist) );
5454const my $DEFAULT_URL => ' http://pancancer.info/gnos_metadata/latest' ;
5555const my $GTDL_COMMAND => ' %s%s --max-children 3 --rate-limit 200 -vv -c %s -d %scghub/data/analysis/download/%s -p %s' ;
@@ -152,6 +152,10 @@ sub pull_data {
152152 $check_ref = \&check_alignments;
153153 $code_ref = \&pull_alignments;
154154 }
155+ elsif ($options -> {' analysis' } =~ m / ^RNA/ ) {
156+ $check_ref = \&check_rna_alignments;
157+ $code_ref = \&pull_rna_alignments;
158+ }
155159
156160 my $thread_count = $options -> {' threads' };
157161 if ($CAN_USE_THREADS == 0) {
@@ -218,6 +222,39 @@ sub check_or_create_symlink {
218222 return 1;
219223}
220224
225+ sub check_rna_alignments{
226+ my ($options , $donor , $outbase , $donor_base ) = @_ ;
227+ warn " Checking $donor ->{donor_unique_id}\n " ;
228+ $options -> {' analysis' } =~ m / ^RNA_(.+)/ ;
229+ my $rna_type = lc $1 ;
230+ my $to_do = 0;
231+ # for normal:
232+ if (exists $donor -> {' rna_seq' }-> {' alignment' }-> {' normal' }-> {$rna_type }) {
233+ $to_do += check_bam($options , $donor -> {' donor_unique_id' }, $donor -> {' rna_seq' }-> {' alignment' }-> {' normal' }-> {$rna_type }, $outbase , $donor_base , ' rna/' .$rna_type .' /normal' );
234+ }
235+
236+ # for tumour
237+ for my $tumour_data (@{$donor -> {' rna_seq' }-> {' alignment' }-> {' tumor' }}) {
238+ $to_do += check_bam($options , $donor -> {' donor_unique_id' }, $tumour_data -> {$rna_type }, $outbase , $donor_base , ' rna/' .$rna_type .' /tumour' );
239+ }
240+ return $to_do ;
241+ }
242+
243+ sub pull_rna_alignments {
244+ my ($options , $donor , $outbase , $donor_base ) = @_ ;
245+ $options -> {' analysis' } =~ m / ^RNA_(.+)/ ;
246+ my $rna_type = lc $1 ;
247+ # for normal:
248+ if (exists $donor -> {' rna_seq' }-> {' alignment' }-> {' normal' }-> {$rna_type }) {
249+ pull_bam($options , $donor -> {' donor_unique_id' }, $donor -> {' rna_seq' }-> {' alignment' }-> {' normal' }-> {$rna_type }, $outbase , $donor_base , ' rna/' .$rna_type .' /normal' );
250+ }
251+
252+ # for tumour
253+ for my $tumour_data (@{$donor -> {' rna_seq' }-> {' alignment' }-> {' tumor' }}) {
254+ pull_bam($options , $donor -> {' donor_unique_id' }, $tumour_data -> {$rna_type }, $outbase , $donor_base , ' rna/' .$rna_type .' /tumour' );
255+ }
256+ }
257+
221258sub check_alignments {
222259 my ($options , $donor , $outbase , $donor_base ) = @_ ;
223260 warn " Checking $donor ->{donor_unique_id}\n " ;
@@ -254,8 +291,8 @@ sub check_bam {
254291
255292 if (-e $success ) {
256293 check_or_create_symlink($orig_bam , $sym_bam );
257- check_or_create_symlink($orig_bam .' .bai' , $sym_bam .' .bai' );
258- create_bas($repo , $gnos_id , $sym_bam );
294+ check_or_create_symlink($orig_bam .' .bai' , $sym_bam .' .bai' ) if ( -e $orig_bam . ' .bai ' ) ;
295+ create_bas($repo , $gnos_id , $sym_bam ) unless ( $options -> { ' analysis ' } =~ m / ^RNA / ) ;
259296 return 0;
260297 }
261298
@@ -277,7 +314,6 @@ sub pull_alignments {
277314
278315sub pull_bam {
279316 my ($options , $donor_id , $bam_data , $outbase , $donor_base , $type ) = @_ ;
280-
281317 my $repo = select_repo($options , $bam_data -> {' aligned_bam' }-> {' gnos_repo' });
282318 unless (exists $options -> {' keys' }-> {$repo }) {
283319 warn sprintf " Skipping %s BAM for Donor %s - No permission key for repo %s " , $type , $donor_id , $repo ;
@@ -297,8 +333,8 @@ sub pull_bam {
297333
298334 if (-e $success ) {
299335 check_or_create_symlink($orig_bam , $sym_bam );
300- check_or_create_symlink($orig_bam .' .bai' , $sym_bam .' .bai' );
301- create_bas($repo , $gnos_id , $sym_bam );
336+ check_or_create_symlink($orig_bam .' .bai' , $sym_bam .' .bai' ) if ( -e $orig_bam . ' .bai ' ) ;
337+ create_bas($repo , $gnos_id , $sym_bam ) unless ( $options -> { ' analysis ' } =~ m / ^RNA / ) ;
302338 return ;
303339 }
304340 return if ($options -> {' symlinks' });
@@ -329,8 +365,9 @@ sub pull_bam {
329365 unlink $err_file ;
330366
331367 check_or_create_symlink($orig_bam , $sym_bam );
332- check_or_create_symlink($orig_bam .' .bai' , $sym_bam .' .bai' );
333- my $bas_valid = create_bas($repo , $gnos_id , $sym_bam );
368+ check_or_create_symlink($orig_bam .' .bai' , $sym_bam .' .bai' ) if (-e $orig_bam .' .bai' );
369+ my $bas_valid = 1;
370+ $bas_valid = create_bas($repo , $gnos_id , $sym_bam ) unless ($options -> {' analysis' } =~ m / ^RNA/ );
334371
335372 if ($bas_valid == 1) {
336373 # touch a success file in the output loc
@@ -516,13 +553,15 @@ sub load_data {
516553 warn sprintf " Donor: %s blacklisted\n " , $donor -> {' donor_unique_id' } if ($options -> {' debug' });
517554 next ;
518555 }
519- unless ($donor -> {' flags' }-> {' is_normal_specimen_aligned' }) {
520- warn sprintf " Donor: %s normal sample not aligned\n " , $donor -> {' donor_unique_id' } if ($options -> {' debug' });
521- next ;
522- }
523- unless ($donor -> {' flags' }-> {' are_all_tumor_specimens_aligned' }) {
524- warn sprintf " Donor: %s all tumour samples not aligned\n " , $donor -> {' donor_unique_id' } if ($options -> {' debug' });
525- next ;
556+ unless ($options -> {' analysis' } =~ m / ^RNA/ ) {
557+ unless ($donor -> {' flags' }-> {' is_normal_specimen_aligned' }) {
558+ warn sprintf " Donor: %s normal sample not aligned\n " , $donor -> {' donor_unique_id' } if ($options -> {' debug' });
559+ next ;
560+ }
561+ unless ($donor -> {' flags' }-> {' are_all_tumor_specimens_aligned' }) {
562+ warn sprintf " Donor: %s all tumour samples not aligned\n " , $donor -> {' donor_unique_id' } if ($options -> {' debug' });
563+ next ;
564+ }
526565 }
527566
528567 if (exists $options -> {' COMPOSITE_FILTERS' }-> {' multi_tumour' } && $donor -> {' flags' }-> {' all_tumor_specimen_aliquot_counts' } == 1) {
@@ -572,7 +611,11 @@ sub load_data {
572611 warn sprintf " Donor: %s has no variant calling available\n " , $donor -> {' donor_unique_id' } if ($options -> {' debug' });
573612 next ;
574613 }
575-
614+ }
615+ elsif ($options -> {' analysis' } =~ m / ^RNA_(.+)/ ) {
616+ my $rna_type = lc $1 ;
617+ next unless ( $donor -> {' flags' }-> {' is_tumor_' .$rna_type .' _rna_seq_alignment_performed' }
618+ || $donor -> {' flags' }-> {' is_normal_' .$rna_type .' _rna_seq_alignment_performed' });
576619 }
577620 else {
578621 my $size = data_size_alignments_gb($options , $donor );
0 commit comments