diff Roary/lib/Bio/Roary/ParseGFFAnnotationRole.pm @ 0:c47a5f61bc9f draft

Uploaded
author dereeper
date Fri, 14 May 2021 20:27:06 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Roary/lib/Bio/Roary/ParseGFFAnnotationRole.pm	Fri May 14 20:27:06 2021 +0000
@@ -0,0 +1,32 @@
+package Bio::Roary::ParseGFFAnnotationRole;
+
+# ABSTRACT: A role for parsing a gff file efficiently
+
+=head1 SYNOPSIS
+
+with 'Bio::Roary::ParseGFFAnnotationRole';
+
+=cut
+use Moose::Role;
+use Bio::Tools::GFF;
+
+has 'gff_file' => ( is => 'ro', isa => 'Str', required => 1 );
+
+has '_tags_to_filter' => ( is => 'ro', isa => 'Str',             default => 'CDS' );
+has '_gff_parser'     => ( is => 'ro', isa => 'Bio::Tools::GFF', lazy    => 1, builder => '_build__gff_parser' );
+has '_awk_filter'     => ( is => 'ro', isa => 'Str',             lazy    => 1, builder => '_build__awk_filter' );
+
+sub _gff_fh_input_string {
+    my ($self) = @_;
+    return 'sed -n \'/##gff-version 3/,/^>/p\' '.$self->gff_file.'| grep -v \'^>\''." | " .  $self->_awk_filter;
+}
+
+sub _build__awk_filter {
+    my ($self) = @_;
+    return
+        'awk \'BEGIN {FS="\t"};{ if ($3 ~/'
+      . $self->_tags_to_filter
+      . '/) print $9;}\' ';
+}
+
+1;