NAME
Proch::N50 - a small module to calculate N50 (total size, and total number of sequences) for a FASTA or FASTQ file. It's easy to install, with minimal dependencies.
VERSION
version 0.60
SYNOPSIS
use Proch::N50 qw(getStats getN50);
my $filepath = '/path/to/assembly.fasta';
# Get N50 only: getN50(file) will return an integer
print "N50 only:\t", getN50($filepath), "\n";
# Full stats
my $seq_stats = getStats($filepath);
print Data::Dumper->Dump( [ $seq_stats ], [ qw(*FASTA_stats) ] );
# Will print:
# %FASTA_stats = (
# 'N50' => 65,
# 'min' => 4,
# 'max' => 65,
# 'dirname' => 'data',
# 'size' => 130,
# 'seqs' => 6,
# 'filename' => 'small_test.fa',
# 'status' => 1
# );
# Get also a JSON object
my $seq_stats_with_JSON = getStats($filepath, 'JSON');
print $seq_stats_with_JSON->{json}, "\n";
# Will print:
# {
# "status" : 1,
# "seqs" : 6,
# <...>
# "filename" : "small_test.fa",
# "N50" : 65,
# }
# Directly ask for the JSON object only:
my $json = jsonStats($filepath);
print $json;
METHODS
getN50(filepath)
This function returns the N50 for a FASTA/FASTQ file given, or 0 in case of error(s).
getStats(filepath, alsoJSON)
Calculates N50 and basic stats for <filepath>. Returns also JSON if invoked with a second parameter. This function return a hash reporting:
- json (string: JSON pretty printed)
-
(pretty printed) JSON string of the object (only if JSON is installed)
jsonStats(filepath)
Returns the JSON string with basic stats (same as $result->{json} from getStats(File, JSON)). Requires JSON::PP installed.
_n50fromHash(hash, totalsize)
This is an internal helper subroutine that perform the actual N50 calculation, hence its addition to the documentation. Expects the reference to an hash of sizes $size{SIZE} = COUNT
and the total sum of sizes obtained parsing the sequences file. Returns N50, min and max lengths.
Dependencies
Module (N50.pm)
- FASTX::Reader (required)
- JSON::PP, <File::Basename> (core modules)
Implementation (n50.pl)
- JSON
-
(optional) when using
--format JSON
- Text::ASCIITable
-
(optional) when using
--format screen
. This might be substituted by a different module in the future.
AUTHOR
Andrea Telatin <andrea@telatin.com>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2019 by Andrea Telatin.
This is free software, licensed under:
The MIT (X11) License