Skip to content

Commit

Permalink
Pacbio Run Analysis
Browse files Browse the repository at this point in the history
add build from analysis directory
  • Loading branch information
ebelter committed Aug 16, 2018
1 parent 7175dbf commit 3cb78dd
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 9 deletions.
34 changes: 34 additions & 0 deletions lib/Pacbio/Run/AnalysisFactoryForRsii.pm
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,40 @@ sub build {
\@analyses;
}

sub build_from_analysis_directory {
my ($class, $directory) = @_;

die "No analysis directory given." if not $directory;
die "Analysis directory given does not exist!" if not -d "$directory";

my ($metadata_xml_file, @analysis_files);
find(
{
wanted => sub{
if ( /metadata\.xml$/) {
die "Found more than one metadata XML in $directory" if $metadata_xml_file;
$metadata_xml_file = $File::Find::name;
}
elsif ( $File::Find::dir =~ /Analysis_Results/ and /\.h5$/ ) {
push @analysis_files, $File::Find::name;
}
},
},
glob($directory->file('*')->stringify),
);

die "Failed to find analysis metadata xml in directory: $directory" if !$metadata_xml_file;
die "Failed to find analysis files in directory: $directory" if !@analysis_files;

my $xml_info = _load_xml($metadata_xml_file);
my $analysis = Pacbio::Run::Analysis->new(
metadata_xml_file => file($metadata_xml_file),
%$xml_info,
);
$analysis->add_analysis_files(@analysis_files);
$analysis;
}

sub _load_xml {
my ($xml_file) = @_;

Expand Down
50 changes: 41 additions & 9 deletions t/Pacbio-Run-AnalysisFactoryForRsii.t
Original file line number Diff line number Diff line change
Expand Up @@ -6,29 +6,61 @@ use warnings 'FATAL';
use TenxTestEnv;

use Path::Class;
use Test::More tests => 1;
use Test::More tests => 3;
use Test::Exception;

my %setup = ( class => 'Pacbio::Run::AnalysisFactoryForRsii', );
subtest 'new' => sub{
plan tests => 11;
subtest 'setup' => sub{
plan tests => 3;

use_ok($setup{class}) or die;

throws_ok(sub{ $setup{class}->build; }, qr/No run directory given/, 'new fails w/o directory');
throws_ok(sub{ $setup{class}->build('blah'); }, qr/Run directory given does not exist/, 'new fails w/ non existing directory');
$setup{run_dir} = TenxTestEnv::test_data_directory_for_class('Pacbio::Run')->subdir('6U00FA');
ok(-d $setup{run_dir}->stringify, 'run data dir exists');

my $directory = dir( TenxTestEnv::test_data_directory_for_class('Pacbio::Run') )->subdir('6U00FA');
ok(-d "$directory", "example run directory exists");
my $subdir = $setup{run_dir}->subdir('A01_1')->subdir('Analysis_Results');
my @afiles = map {
$subdir->file( sprintf('m160819_231415_00116_c101036512550000001823251411171640_s1_p0.%d.bax.h5', $_) )
} (qw/ 1 2 3 /);
push @afiles, $subdir->file('m160819_231415_00116_c101036512550000001823251411171640_s1_p0.bas.h5');
$setup{A01_1_analysis_files} = \@afiles;
is(@{$setup{A01_1_analysis_files}}, 4, 'run analysis files');

my $analyses = $setup{class}->build($directory);
};

subtest 'build' => sub{
plan tests => 10;

throws_ok(sub{ $setup{class}->build; }, qr/No run directory given/, 'fails w/o directory');
throws_ok(sub{ $setup{class}->build('blah'); }, qr/Run directory given does not exist/, 'fails w/ non existing directory');

my $analyses = $setup{class}->build($setup{run_dir});
is(@$analyses, 10, 'built the correct number of analyses');
is($analyses->[0]->metadata_xml_file, $directory->subdir('A01_1')->file('m160819_231415_00116_c101036512550000001823251411171640_s1_p0.metadata.xml'), 'metadata_xml_file');
is($analyses->[0]->metadata_xml_file, $setup{run_dir}->subdir('A01_1')->file('m160819_231415_00116_c101036512550000001823251411171640_s1_p0.metadata.xml'), 'metadata_xml_file');
is($analyses->[0]->sample_name, 'NA19434_4808o3_lib1_50pM', 'sample_name');
is($analyses->[0]->library_name, 'NA19434_4808o3_lib1_50pM_A1', 'library_name');
is($analyses->[0]->plate_id, '6U00FA', 'plate_id');
is($analyses->[0]->version, '2.3.0.3.154799', 'version');
is($analyses->[0]->well, 'A01', 'well');
is_deeply($analyses->[0]->analysis_files, $setup{A01_1_analysis_files}, 'analysis files');

};

subtest 'build from analysis directory' => sub{
plan tests => 9;

throws_ok(sub{ $setup{class}->build_from_analysis_directory; }, qr/No analysis directory given/, 'fails w/o directory');
throws_ok(sub{ $setup{class}->build_from_analysis_directory('blah'); }, qr/Analysis directory given does not exist/, 'fails w/ non existing directory');
throws_ok(sub{ $setup{class}->build_from_analysis_directory($setup{run_dir}->subdir('A01_1')->subdir('Analysis_Results')); }, qr/Failed to find analysis metadata xml in/, 'fails w/ when no analysis found');

my $directory = $setup{run_dir}->subdir('A01_1');
my $analysis = $setup{class}->build_from_analysis_directory($directory);
is($analysis->metadata_xml_file, $directory->file('m160819_231415_00116_c101036512550000001823251411171640_s1_p0.metadata.xml'), 'metadata_xml_file');
is($analysis->sample_name, 'NA19434_4808o3_lib1_50pM', 'sample_name');
is($analysis->library_name, 'NA19434_4808o3_lib1_50pM_A1', 'library_name');
is($analysis->plate_id, '6U00FA', 'plate_id');
is($analysis->version, '2.3.0.3.154799', 'version');
is($analysis->well, 'A01', 'well');

};

Expand Down

0 comments on commit 3cb78dd

Please sign in to comment.