Bio-HTS

 view release on metacpan or  search on metacpan

bin/performance_test.pl  view on Meta::CPAN

#!/usr/bin/env perl

use strict;
use warnings;

use Bio::HTS::Tabix;
use Data::Dumper;
use feature qw(say);
use Try::Tiny;
use Benchmark qw/cmpthese timethese/;

use Sapientia::Util::Bed;

die "File " . $ARGV[0] . " doesn't exist" unless -e $ARGV[0];

my @chroms = (1..22, 'X', 'Y', 'M');
my $num_lookups = 20;


my $t = Bio::HTS::Tabix->new( filename => $ARGV[0] );
sub tabix_perl {
#    for my $i ( 0 .. $num_lookups ) {
        #number between 100000 and 4000000
        my $start = int(rand(4000000)) + 100000;
        my $end = $start + 5;
        my $chrom = $chroms[int(rand(scalar @chroms))];
        
        #say "Fetching region $chrom:$start-$end... ";
        #my $iter = $t->query("$chrom:$start-$end");
        get_region($chrom, $start, $end);
        #say "Found " . scalar( get_region($chrom, $start, $end) ) . " entries";
        #say "\t$_" for get_region($chrom, $start, $end);
#    }
}

sub get_region {
    my ( $chrom, $start, $end ) = @_;

    my $iter = $t->query("$chrom:$start-$end");

    my @rows;
    try {
        while ( my $line = $iter->next ) {
            push @rows, _next($line);
        }
    }
    catch {
        say "No reads for region, probably";  
    };

    return @rows;
}

my $b = Sapientia::Util::Bed->new( bed_file => $ARGV[0], silent => 1 );
sub tabix_cmd {

#    for my $i ( 0 .. $num_lookups ) {
        #number between 100000 and 4000000
        my $start = int(rand(4000000)) + 100000;
        my $end = $start + 5;
        my $chrom = $chroms[int(rand(scalar @chroms))];
        
        #print "Fetching region $chrom:$start-$end... ";
        #say "Found " . scalar($b->get_region("$chrom:$start-$end"));
        $b->get_region("$chrom:$start-$end");
#    }
}

#rip from Util::Bed for fair comparison



( run in 3.647 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )