0
|
1 package Bio::Roary::ParseGFFAnnotationRole;
|
|
2
|
|
3 # ABSTRACT: A role for parsing a gff file efficiently
|
|
4
|
|
5 =head1 SYNOPSIS
|
|
6
|
|
7 with 'Bio::Roary::ParseGFFAnnotationRole';
|
|
8
|
|
9 =cut
|
|
10 use Moose::Role;
|
|
11 use Bio::Tools::GFF;
|
|
12
|
|
13 has 'gff_file' => ( is => 'ro', isa => 'Str', required => 1 );
|
|
14
|
|
15 has '_tags_to_filter' => ( is => 'ro', isa => 'Str', default => 'CDS' );
|
|
16 has '_gff_parser' => ( is => 'ro', isa => 'Bio::Tools::GFF', lazy => 1, builder => '_build__gff_parser' );
|
|
17 has '_awk_filter' => ( is => 'ro', isa => 'Str', lazy => 1, builder => '_build__awk_filter' );
|
|
18
|
|
19 sub _gff_fh_input_string {
|
|
20 my ($self) = @_;
|
|
21 return 'sed -n \'/##gff-version 3/,/^>/p\' '.$self->gff_file.'| grep -v \'^>\''." | " . $self->_awk_filter;
|
|
22 }
|
|
23
|
|
24 sub _build__awk_filter {
|
|
25 my ($self) = @_;
|
|
26 return
|
|
27 'awk \'BEGIN {FS="\t"};{ if ($3 ~/'
|
|
28 . $self->_tags_to_filter
|
|
29 . '/) print $9;}\' ';
|
|
30 }
|
|
31
|
|
32 1;
|