diff variant_effect_predictor/Bio/EnsEMBL/Utils/Eprof.pm @ 0:1f6dce3d34e0

Uploaded
author mahtabm
date Thu, 11 Apr 2013 02:01:53 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/variant_effect_predictor/Bio/EnsEMBL/Utils/Eprof.pm	Thu Apr 11 02:01:53 2013 -0400
@@ -0,0 +1,254 @@
+=head1 LICENSE
+
+  Copyright (c) 1999-2012 The European Bioinformatics Institute and
+  Genome Research Limited.  All rights reserved.
+
+  This software is distributed under a modified Apache license.
+  For license details, please see
+
+    http://www.ensembl.org/info/about/code_licence.html
+
+=head1 CONTACT
+
+  Please email comments or questions to the public Ensembl
+  developers list at <dev@ensembl.org>.
+
+  Questions may also be sent to the Ensembl help desk at
+  <helpdesk@ensembl.org>.
+
+=cut
+
+=head1 NAME
+
+Bio::EnsEMBL::Utils::Eprof - Bespoke Ensembl profiler
+
+=head1 SYNOPSIS
+
+  use Bio::EnsEMBL::Utils::Eprof( 'eprof_start', 'eprof_end',
+    'eprof_dump' );
+
+  &eprof_start('function-a');
+  # ... do something
+  &eprof_end('function-a');
+
+  &eprof_dump( \*STDERR );
+
+  # there is an object based set for above as well, for running
+  # multiple concurrent profilers
+
+=head1 DESCRIPTION
+
+This is an Ensembl profiler as we broke the Perl profilers.
+
+=head1 METHODS
+
+=cut
+
+package Bio::EnsEMBL::Utils::Eprof;
+
+use strict;
+use warnings;
+
+use Bio::EnsEMBL::Utils::Exception ('throw');
+use Bio::EnsEMBL::Utils::EprofStack;
+
+use base qw( Exporter );
+
+our @EXPORT_OK =
+  ( 'eprof_start', 'eprof_end', 'eprof_dump', 'eprof_reset' );
+
+my $global;
+
+sub new {
+  my ($proto) = @_;
+
+  my $class = ref($proto) || $proto;
+  my $self = bless( { '_tags' => {} }, $class );
+
+  return $self;
+}
+
+=head2 eprof_start
+
+ Title   : eprof_start
+ Usage   :
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub eprof_start {
+  my ($tag) = @_;
+
+  if ( !defined($global) ) {
+    $global = Bio::EnsEMBL::Utils::Eprof->new();
+  }
+
+  $global->start($tag);
+}
+
+=head2 eprof_end
+
+ Title   : eprof_end
+ Usage   :
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub eprof_end {
+  my ($tag) = @_;
+
+  if ( !defined($global) ) {
+    $global = Bio::EnsEMBL::Utils::Eprof->new();
+  }
+
+  $global->end($tag);
+}
+
+sub eprof_dump {
+  my ($fh) = @_;
+
+  if ( !defined($global) ) { return }
+
+  $global->dump($fh);
+}
+
+=head2 eprof_reset
+
+ Title   : eprof_reset
+ Usage   :
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub eprof_reset { undef($global) }
+
+=head2 dump
+
+ Title   : dump
+ Usage   :
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub dump {
+  my ( $self, $fh ) = @_;
+
+  my @tags = sort {
+    $self->_tags()->{$a}->total_time()
+      <=> $self->_tags()->{$b}->total_time()
+  } keys %{ $self->_tags() };
+
+  foreach my $tag (@tags) {
+    my $st = $self->_tags->{$tag};
+
+    if ( $st->number() == 0 ) { next }
+
+    my $STD = '---';
+
+    if ( $st->number() > 1 ) {
+      my $SS =
+        $st->total_time_time() -
+        $st->total_time()*$st->total_time()/$st->number();
+
+      if ( $SS > 0 ) {
+        $STD = sprintf( "%6f",
+                        sqrt( $SS/$st->number()/( $st->number() - 1 ) )
+        );
+      }
+    }
+
+    print( $fh sprintf( "Eprof: %20s  %6f  %6f  %d  %s  [%6f,%6f]\n",
+                        $st->tag(), $st->total_time(),
+                        $st->total_time()/$st->number(), $st->number(),
+                        $STD, $st->min_time(),
+                        $st->max_time() ) );
+  } ## end foreach my $tag (@tags)
+} ## end sub dump
+
+=head2 start
+
+ Title   : start
+ Usage   : $eprof->start('this_tag');
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub start {
+  my ( $self, $tag ) = @_;
+
+  if ( !defined($tag) ) {
+    $self->throw("No tag, can't start.");
+  }
+
+  if ( !defined( $self->_tags()->{$tag} ) ) {
+    $self->_tags()->{$tag} = Bio::EnsEMBL::Utils::EprofStack->new($tag);
+  }
+
+  $self->_tags()->{$tag}->push_stack();
+}
+
+=head2 end
+
+ Title   : end
+ Usage   : $eprof->end('this_tag');
+ Function:
+ Example :
+ Returns : 
+ Args    :
+
+
+=cut
+
+sub end {
+  my ( $self, $tag ) = @_;
+
+  if ( !defined($tag) ) {
+    $self->throw("No tag, can't end.");
+  }
+
+  if ( !defined( $self->_tags()->{$tag} ) ) {
+    $self->throw(
+                sprintf( "Ending with a nonexistant tag '%s'", $tag ) );
+  }
+
+  $self->_tags->{$tag}->pop_stack();
+}
+
+=head2 _tags
+
+ Title   : _tags
+ Usage   : $obj->_tags($newval)
+ Function: 
+ Returns : value of _tags
+ Args    : newvalue (optional)
+
+
+=cut
+
+sub _tags {
+  my ($obj) = @_;
+  return $obj->{'_tags'};
+}
+
+1;
+