Bio-Palantir

 view release on metacpan or  search on metacpan

bin/explore_bgc_domains.pl  view on Meta::CPAN

#!/usr/bin/env perl
# PODNAME: explore_bgc_domains.pl
# ABSTRACT: Reports all detected domain signatures for a NRPS/PKS gene cluster
# CONTRIBUTOR: Denis BAURAIN <denis.baurain@uliege.be>

use Modern::Perl '2011';
use autodie;

use Getopt::Euclid qw(:vars);
use JSON::Create qw(create_json);

use aliased 'Bio::Palantir::Explorer::ClusterFasta';

my (%json_for, $i);

my $cluster = ClusterFasta->new( file => $ARGV_fasta_file );
my @lines;

GENE:
for my $gene (sort { $a->rank <=> $b->rank } $cluster->all_genes) {
        
    $json_for{'no-taxonomy'}{Clusters}{++$i}{GenesPlus}{$gene->rank} = {
#                    uui =>  $gene->uui,
       rank => $gene->rank,
       name => $gene->name, 
       size => $gene->size, 
       coordinates => (join '-', @{ $gene->coordinates }), 
       begin => $gene->gene_begin, 
       end => $gene->gene_end, 
    };

    DOMAIN:
    for my $domain (sort { $a->rank <=> $b->rank } $gene->all_domains) {

        my $subtype = $domain->subtype // 'NULL';
        my $subtype_evalue = $domain->subtype_evalue // 'NULL';
        my $subtype_score  = $domain->subtype_score // 'NULL';

        $json_for{'no-taxonomy'}{Clusters}{$i}{GenesPlus}{$gene->rank}{'Do'
        . 'mainsPlus'}{$domain->rank} = {
            rank              => $domain->rank, 
            function          => $domain->symbol, 
            size              => $domain->size, 
            coordinates       => (join '-', @{ $domain->coordinates }), 
            begin             => $domain->begin,
            end               => $domain->end, 
            evalue            => $domain->evalue,
            bit_score         => $domain->score,
            subtype           => $subtype,
            subtype_evalue    => $subtype_evalue,
            subtype_bit_score => $subtype_score,
        };
    
        push @lines, [
            'gene' . $gene->rank, $gene->name, 
            (join '-', @{  $gene->coordinates }), 
            'domain' . $domain->rank, $domain->symbol, 
            (join '-', @{ $domain->coordinates }), $domain->size,
            $domain->evalue, $domain->score, $subtype,
            $subtype_evalue, $subtype_score,
        ];
    }
}

open my $out, '>', $ARGV_outfile . '.json';
say {$out} create_json(\%json_for);



( run in 0.688 second using v1.01-cache-2.11-cpan-b16cb0d3907 )