File Coverage

blib/lib/Bio/FastParsers/Hmmer/Standard/Target.pm
Criterion Covered Total %
statement 12 12 100.0
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 16 16 100.0


line stmt bran cond sub pod time code
1             package Bio::FastParsers::Hmmer::Standard::Target;
2             # ABSTRACT: Internal class for standard HMMER parser
3             # CONTRIBUTOR: Arnaud DI FRANCO <arnaud.difranco@gmail.com>
4             $Bio::FastParsers::Hmmer::Standard::Target::VERSION = '0.213510';
5 7     7   5811 use Moose;
  7         33  
  7         66  
6 7     7   53913 use namespace::autoclean;
  7         22  
  7         80  
7              
8 7     7   744 use List::AllUtils qw(indexes);
  7         18  
  7         496  
9              
10 7     7   52 use aliased 'Bio::FastParsers::Hmmer::Standard::Domain';
  7         18  
  7         73  
11              
12              
13             # public attributes
14              
15             # TODO: check if this an empty ArrayRef would not make more sense than Maybe
16             # We dont want smth else than a Domain in this ArrayRef
17             # so it is more a matter of precision than sense
18             has 'domains' => (
19             traits => ['Array'],
20             is => 'ro',
21             isa => 'ArrayRef[Maybe[Bio::FastParsers::Hmmer::Standard::Domain]]',
22             required => 1,
23             handles => {
24             next_domain => 'shift',
25             get_domain => 'get',
26             all_domains => 'elements',
27             count_domains => 'count',
28             },
29             );
30              
31             with 'Bio::FastParsers::Roles::Targetable';
32              
33             # parse Target block (raw)...
34             # ... and retrieve attrs from the corresponding line of hit table (Hit)
35              
36             around BUILDARGS => sub {
37             my ($orig, $class, $inargs) = @_;
38              
39             # retrieve lines still to parse as @raw...
40             my @raw = @{ $inargs->{raw} };
41              
42             # recycle the anonymous HashRef already containing old Hit information
43             # as the foundation for the new Target object
44             my %outargs = %{ $inargs->{hit} };
45              
46             # add Target name
47             ( $outargs{target_name} = $raw[0] ) =~ s/[\>\s+]//xmsg;
48              
49             # split Domain blocks
50             my @domain_indexes = indexes { m/^\s+==/xms } @raw;
51              
52             # set as empty ArrayRef as --domE option can report Target without domain
53             $outargs{domains} = [];
54             if (@domain_indexes) {
55             my @summary = grep {
56             $_ =~ m/^\s+\d/xms
57             } @raw[ 1 .. $domain_indexes[0]-1 ];
58              
59             for (my $i = 0; $i < @domain_indexes; $i++) {
60             my @block = defined $domain_indexes[$i+1]
61             ? @raw[ $domain_indexes[$i] .. $domain_indexes[$i+1] ]
62             : splice @raw, $domain_indexes[$i]
63             ;
64             push @{ $outargs{domains} },
65             Domain->new( { raw => \@block, summary => $summary[$i] } );
66             }
67             }
68              
69             # return expected constructor hash
70             return $class->$orig(%outargs);
71             };
72              
73             __PACKAGE__->meta->make_immutable;
74             1;
75              
76             __END__
77              
78             =pod
79              
80             =head1 NAME
81              
82             Bio::FastParsers::Hmmer::Standard::Target - Internal class for standard HMMER parser
83              
84             =head1 VERSION
85              
86             version 0.213510
87              
88             =head1 SYNOPSIS
89              
90             # TODO
91              
92             =head1 DESCRIPTION
93              
94             # TODO
95              
96             =head1 AUTHOR
97              
98             Denis BAURAIN <denis.baurain@uliege.be>
99              
100             =head1 CONTRIBUTOR
101              
102             =for stopwords Arnaud DI FRANCO
103              
104             Arnaud DI FRANCO <arnaud.difranco@gmail.com>
105              
106             =head1 COPYRIGHT AND LICENSE
107              
108             This software is copyright (c) 2013 by University of Liege / Unit of Eukaryotic Phylogenomics / Denis BAURAIN.
109              
110             This is free software; you can redistribute it and/or modify it under
111             the same terms as the Perl 5 programming language system itself.
112              
113             =cut