Bio-Gonzales

 view release on metacpan or  search on metacpan

bin/gonz_obo2dict.pl  view on Meta::CPAN

#!/usr/bin/env perl

use warnings;
use strict;

use Data::Dumper;
use Carp;

use 5.010;

use Bio::Gonzales::Util::Cerial;
use List::MoreUtils qw/uniq/;
use Bio::Gonzales::GO::Util qw/get_recursive_related_terms_by_types/;
use Data::Stag;

use GO::Parser;
use GO::Model::Graph;
use Try::Tiny;

use Getopt::Long::Descriptive;

my ( $opt, $usage ) = describe_options(
  '%c %o <obo file>',
  [
    "format" => hidden => {
      one_of => [ [ "json|j" => "output in json format" ], [ "yaml|y" => "output in yaml format" ], ],
      default => 'json'
    }
  ],
  [
    "relation" => hidden => {
      one_of => [ [ "parent|p" => "get parents recursively" ], [ "child|c" => "get childs recursively" ], ],
      default => 'parent'
    }
  ],
  [ 'alt_id',        'also include alternative ids' ],
  [ 'all_types',     'also include (negatively/positively) regulates parent/child relations' ],
  [ 'syn',           'also include synonyms' ],
  [ 'namespace|n=s', 'restrict to certain namespace' ],
  [ 'verbose|v',     "print extra stuff" ],
  [ 'help',          "print usage message and exit" ],
);

print( $usage->text ), exit if $opt->help;

my $file = shift;
die "$file is no file" unless ( -f $file );

my $errhandler = Data::Stag->getformathandler('xml');
$errhandler->fh( \*STDERR );

my $parser = get_parser($file);
$parser->errhandler($errhandler);

my %go;

$parser->parse($file);    # parse file -> objects
my $graph = $parser->handler->graph;    # get L<GO::Model::Graph> object

my @terms;
if ( $opt->namespace ) {
  @terms = grep { $_->namespace eq $opt->namespace } @{ $graph->get_all_terms };
} else {
  @terms = @{ $graph->get_all_terms };
}

my $types = [qw/is_a part_of/];

if ( $opt->all_types ) {
  undef $types;
}

my $relation = $opt->relation;
for my $t (@terms) {
  if ( $t->acc !~ /^GO:/ ) {
    say STDERR Dumper $t;
    next;
  }



( run in 1.882 second using v1.01-cache-2.11-cpan-5c0b1e786e0 )