annotate variant_effect_predictor/Bio/EnsEMBL/Pipeline/FASTA/ConcatFiles.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
1 =pod
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
2
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
3 =head1 LICENSE
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
4
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
5 Copyright (c) 1999-2012 The European Bioinformatics Institute and
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
6 Genome Research Limited. All rights reserved.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
7
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
8 This software is distributed under a modified Apache license.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
9 For license details, please see
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
10
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
11 http://www.ensembl.org/info/about/code_licence.html
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
12
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
13 =head1 CONTACT
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
14
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
15 Please email comments or questions to the public Ensembl
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
16 developers list at <dev@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
17
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
18 Questions may also be sent to the Ensembl help desk at
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
19 <helpdesk@ensembl.org>.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
20
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
21 =head1 NAME
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
22
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
23 Bio::EnsEMBL::Pipeline::FASTA::ConcatFiles
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
24
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
25 =head1 DESCRIPTION
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
26
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
27 Performs a find in the DNA dumps directory for the given species and then
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
28 concats files which match a specified name pattern. We only allow
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
29 two types of concats; DNA and RM DNA. The concat file is a series
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
30 of cat command calls from all other Gzipped FASTA dumps (allowed under
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
31 the GZip specification).
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
32
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
33 Allowed parameters are:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
34
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
35 =over 8
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
36
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
37 =item release - Needed to build the target path
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
38
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
39 =item species - Required to indicate which species we are working with
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
40
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
41 =item data_type - The type of data to work with. Can be I<dna>, I<dn_sm> or I<dna_rm>
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
42
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
43 =item base_path - The base of the dumps
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
44
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
45 =back
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
46
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
47 =cut
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
48
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
49 package Bio::EnsEMBL::Pipeline::FASTA::ConcatFiles;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
50
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
51 use strict;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
52 use warnings;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
53 use base qw/Bio::EnsEMBL::Pipeline::FASTA::Base/;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
54
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
55 use File::Spec;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
56 use File::stat;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
57
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
58 sub param_defaults {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
59 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
60 return {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
61 dna => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
62 regex => qr/.+\.dna\..+\.fa\.gz$/,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
63 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
64 dna_rm => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
65 regex => qr/.+\.dna_rm\..+\.fa\.gz$/,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
66 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
67 dna_sm => {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
68 regex => qr/.+\.dna_sm\..+\.fa\.gz$/,
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
69 },
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
70 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
71 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
72
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
73 sub fetch_input {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
74 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
75 foreach my $key (qw/data_type species release base_path/) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
76 $self->throw("Cannot find the required parameter $key") unless $self->param($key);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
77 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
78 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
79 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
80
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
81 # sticks ends of files together into one big file.
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
82 sub run {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
83 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
84
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
85 my @file_list = @{$self->get_dna_files()};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
86 my $count = scalar(@file_list);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
87 my $running_total_size = 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
88
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
89 if($count) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
90 my $target_file = $self->target_file();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
91 $self->info("Concatting type %s with %d file(s) into %s", $self->param('data_type'), $count, $target_file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
92
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
93 if(-f $target_file) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
94 $self->info("Target already exists. Removing");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
95 unlink $target_file or $self->throw("Could not remove $target_file: $!");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
96 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
97
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
98 $self->info('Running concat');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
99 foreach my $file (@file_list) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
100 $self->fine('Processing %s', $file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
101 $running_total_size += stat($file)->size;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
102 system("cat $file >> $target_file")
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
103 and $self->throw( sprintf('Cannot concat %s into %s. RC %d', $file, $target_file, ($?>>8)));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
104 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
105
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
106 $self->info("Catted files together");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
107
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
108 my $catted_size = stat($target_file)->size;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
109
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
110 if($running_total_size != $catted_size) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
111 $self->throw(sprintf('The total size of the files catted together should be %d but was in fact %d. Failing as we expect the catted size to be the same', $running_total_size, $catted_size));
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
112 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
113
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
114 $self->param('target_file', $target_file);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
115 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
116 else {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
117 $self->throw("Cannot continue as we found no files to concat");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
118 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
119 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
120 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
121
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
122 sub write_output {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
123 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
124 my $file = $self->param('target_file');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
125 if($file) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
126 $self->dataflow_output_id({ file => $file, species => $self->param('species') }, 1);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
127 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
128 return;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
129 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
130
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
131 sub get_dna_files {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
132 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
133 my $path = $self->fasta_path('dna');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
134 my $data_type = $self->param('data_type');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
135 my $regex_hash = $self->param($data_type);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
136 if(! $regex_hash ) {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
137 $self->throw("We do not have an entry for the data_type $data_type in our regex lookup hash. Edit this module");
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
138 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
139 my $regex = $regex_hash->{regex};
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
140 my $filter = sub {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
141 my ($filename) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
142 return ($filename =~ $regex && $filename !~ /\.toplevel\./) ? 1 : 0;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
143 };
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
144 my $files = $self->find_files($path, $filter);
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
145 return [ sort @{$files} ];
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
146 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
147
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
148
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
149 sub target_file {
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
150 my ($self) = @_;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
151 # File name format looks like:
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
152 # <species>.<assembly>.<release>.<sequence type>.<id type>.<id>.fa.gz
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
153 # e.g. Homo_sapiens.GRCh37.64.dna_rm.toplevel.fa.gz
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
154 my @name_bits;
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
155 push @name_bits, $self->web_name();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
156 push @name_bits, $self->assembly();
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
157 push @name_bits, $self->param('release');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
158 push @name_bits, $self->param('data_type');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
159 push @name_bits, 'toplevel';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
160 push @name_bits, 'fa', 'gz';
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
161 my $file_name = join( '.', @name_bits );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
162 my $dir = $self->fasta_path('dna');
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
163 return File::Spec->catfile( $dir, $file_name );
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
164 }
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
165
1f6dce3d34e0 Uploaded
mahtabm
parents:
diff changeset
166 1;