From 115c09169c179ef298a451c110abb284c2e6728d Mon Sep 17 00:00:00 2001 From: Andrew Yates Date: Mon, 16 Apr 2018 17:47:37 +0100 Subject: [PATCH 1/4] Create checksum algorithm according to new spec Creating a new checksum according to the proposed specification in reference retrieval. --- lib/Fastadb/Util.pm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 lib/Fastadb/Util.pm diff --git a/lib/Fastadb/Util.pm b/lib/Fastadb/Util.pm new file mode 100644 index 0000000..d52edc9 --- /dev/null +++ b/lib/Fastadb/Util.pm @@ -0,0 +1,16 @@ +package Fastadb::Util; + +use strict; +use warnings; + +use Digest::SHA qw/sha512_hex/; + +sub reference_retrieval_checksum { + my ($seq, $offset) = @_; # offset expressed in bytes + $offset = 24 if ! defined $offset; + my $digest = sha512_hex($sequence); + my $substring = substr($digest, 0, $offset*2); #going into hex from bytes + return $substring; +} + +1; From 7b7c1f52017b888c29b6c3c47ce15044b701b566 Mon Sep 17 00:00:00 2001 From: Andrew Yates Date: Mon, 16 Apr 2018 17:53:09 +0100 Subject: [PATCH 2/4] Testing reference_retrieval_digest --- t/checksum.t | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 t/checksum.t diff --git a/t/checksum.t b/t/checksum.t new file mode 100644 index 0000000..ed37d45 --- /dev/null +++ b/t/checksum.t @@ -0,0 +1,31 @@ +use strict; +use warnings; +use Test::More; + +use Fastadb::Util qw/reference_retrieval_digest/; +use Fastadb::Fmt::Fasta; +use File::Basename qw/dirname/; +use File::Spec; + +is(reference_retrieval_digest('ACGT'), '68a178f7c740c5c240aa67ba41843b119d3bf9f8b0f0ac36', 'Check basic round tripping of reference retrieval digest'); + +my $test_data_dir = File::Spec->catdir(File::Spec->rel2abs(dirname(__FILE__)), 'data'); + +my $fasta_iter = Fastadb::Fmt::Fasta->new(file => File::Spec->catfile($test_data_dir, 'test.fa'), type => 'dna'); +is( + reference_retrieval_digest($fasta_iter->iterate()->{sequence}), + 'b28e54e972297b88324983e18b20420470acac31baff8520', + 'Checking basic encoding of known sequence test1' +); +is( + reference_retrieval_digest($fasta_iter->iterate()->{sequence}), + '999687f722592a0959abb475879ccb3b20064d0ad7bbbd85', + 'Checking basic encoding of known sequence test2' +); +is( + reference_retrieval_digest($fasta_iter->iterate()->{sequence}), + '21b4f4bd9e64ed355c3eb676a28ebedaf6d8f17bdc365995', + 'Checking basic encoding of known sequence test3' +); + +done_testing(); From cf8adc296a7a5c45836b496eac8d601704123799 Mon Sep 17 00:00:00 2001 From: Andrew Yates Date: Mon, 16 Apr 2018 17:53:58 +0100 Subject: [PATCH 3/4] Change subroutine name and implement exporter --- lib/Fastadb/Util.pm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/Fastadb/Util.pm b/lib/Fastadb/Util.pm index d52edc9..9d1bf95 100644 --- a/lib/Fastadb/Util.pm +++ b/lib/Fastadb/Util.pm @@ -3,9 +3,13 @@ package Fastadb::Util; use strict; use warnings; +require Exporter; +our @ISA = qw(Exporter); +our @EXPORT_OK = qw(reference_retrieval_digest); + use Digest::SHA qw/sha512_hex/; -sub reference_retrieval_checksum { +sub reference_retrieval_digest { my ($seq, $offset) = @_; # offset expressed in bytes $offset = 24 if ! defined $offset; my $digest = sha512_hex($sequence); From 17a0b717eaf16b552643c27a78bcb6c6d808ea9e Mon Sep 17 00:00:00 2001 From: Andrew Yates Date: Mon, 16 Apr 2018 17:59:59 +0100 Subject: [PATCH 4/4] Bad reference --- lib/Fastadb/Util.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Fastadb/Util.pm b/lib/Fastadb/Util.pm index 9d1bf95..ba6c26f 100644 --- a/lib/Fastadb/Util.pm +++ b/lib/Fastadb/Util.pm @@ -10,7 +10,7 @@ our @EXPORT_OK = qw(reference_retrieval_digest); use Digest::SHA qw/sha512_hex/; sub reference_retrieval_digest { - my ($seq, $offset) = @_; # offset expressed in bytes + my ($sequence, $offset) = @_; # offset expressed in bytes $offset = 24 if ! defined $offset; my $digest = sha512_hex($sequence); my $substring = substr($digest, 0, $offset*2); #going into hex from bytes