#!/usr/bin/env perl
use
List::AllUtils
qw(pairkeys pairgrep pairmap partition_by sort_by)
;
my
$class
=
'Bio::MUST::Core::Tree::Splits'
;
{
my
$infile
=
"test/lhc-prasino.splits.nex"
;
my
$splits
=
$class
->load_splits(
$infile
);
isa_ok
$splits
,
$class
,
$infile
;
cmp_ok
$splits
->rep_n,
'=='
, 100,
'got expected rep_n from splits file'
;
}
{
my
$infile
=
"test/consense.out"
;
my
$splits
=
$class
->load_consense(
$infile
);
isa_ok
$splits
,
$class
,
$infile
;
cmp_ok
$splits
->rep_n,
'=='
, 100,
'got expected rep_n from consense file'
;
my
@exp_supports
= (
[ [
qw(Brachionus Caenorhabd Trichinell Schmidtea)
], 76 ],
[ [
qw(Molgula_te Ciona_inte Xenopus_tr Branchiost)
], 62 ],
[ [
qw(Strongyloc Amphimedon Acropora_m Nematostel)
], 61 ],
);
my
@got_supports
=
map
{
0 +
$splits
->clan_support(
$splits
->ids2key(
$_
->[0]) )
}
@exp_supports
;
is_deeply \
@got_supports
, [
map
{
$_
->[1] }
@exp_supports
],
'got expected support for clans'
;
}
{
my
@infiles
= (
'mullidae-well-rooted.tre'
,
'mullidae-unrooted.tre'
,
'mullidae-unrooted.tpl'
,
);
for
my
$infile
(
@infiles
) {
explain
$infile
;
clan_tests( file(
'test'
,
$infile
) );
}
}
sub
clan_tests {
my
$infile
=
shift
;
my
$tpl
=
$infile
=~ m/\.tpl\z/xms;
my
$max
=
$tpl
? 1 : 100;
my
$splits
=
$class
->load_newick(
$infile
);
isa_ok
$splits
,
$class
,
$infile
;
cmp_ok
$splits
->rep_n,
'=='
,
$max
,
'got expected rep_n from newick file'
;
my
@exp_clans
=
map
{
tr
/_/ /r; }
qw(
Mulloidichthys_dentatus
Mulloidichthys_flavolineatus
Mullus_auratus
Parupeneus_barberinoides
Parupeneus_barberinus
Parupeneus_chrysopleuron
Parupeneus_crassilabris
Parupeneus_cyclostomus
Parupeneus_forsskali
Parupeneus_indicus
Parupeneus_insularis
Parupeneus_rubescens
Pseudupeneus_maculatus
Pseudupeneus_prayensis
Upeneichthys_lineatus
Upeneus_japonicus
Upeneus_oligospilus
Upeneus_suahelicus
Upeneus_sundaicus
Upeneus_tragula
Upeneus_vittatus
)
;
my
$tree
= Bio::MUST::Core::Tree->load(
$infile
);
my
%ids_for
= pairmap {
$a
=> [ sort_by {
$_
->full_id }
@$b
] }
partition_by {
$_
->org }
$tree
->all_seq_ids
;
my
@got_clans
= pairkeys
pairgrep {
$splits
->is_a_clan(
$splits
->ids2key(
$b
) ) }
%ids_for
;
cmp_bag \
@got_clans
, \
@exp_clans
,
'got expected org lists being clans'
;
my
@exp_bp_vals
= (
[ [
qw(Parupeneus_bifasciatus_longo@283070
Parupeneus_multifasciatus_longo@251257
Parupeneus_multifasciatus_stiller@384139
Parupeneus_williamsi_stiller@377438
Parupeneus_margaritatus_stiller@377536
Parupeneus_macronemus_nash@343997
Parupeneus_crassilabris_santa@382724
Parupeneus_crassilabris_stiller@381739
Parupeneus_insularis_santa@382832
Parupeneus_insularis_stiller@380509
Parupeneus_trifasciatus_stiller@383431
Parupeneus_rubescens_longo@311644
Parupeneus_rubescens_stiller@379460
Parupeneus_spilurus_nash@269596
Parupeneus_ciliatus_arbor@359765
Parupeneus_biaculeatus_stiller@383203
Parupeneus_biaculeatus_arbor@304503
Parupeneus_forsskali_santa@345830
Parupeneus_forsskali_stiller@384155
Parupeneus_margaritatus_nash@317842
Parupeneus_cyclostomus_longo@144532
Parupeneus_cyclostomus_1_stiller@381299
Parupeneus_cyclostomus_2_stiller@379819
Parupeneus_chrysopleuron_nash@365245
Parupeneus_chrysopleuron_stiller@378413
Parupeneus_chrysopleuron_2_arbor@362139
Parupeneus_chrysopleuron_1_arbor@272471)
], (
$tpl
? 1 : 78) ],
[ [
qw(Upeneus_oligospilus_nash@260328
Upeneus_oligospilus_2_arbor@353819
Upeneus_oligospilus_1_arbor@318514
Upeneus_heemstra_arbor@265512)
], (
$tpl
? 1 : 45) ],
[ [
qw(Mullus_auratus_1_stiller@381434
Mullus_auratus_2_stiller@380902)
], (
$tpl
? 1 : 98) ],
);
for
my
$exp_row
(
@exp_bp_vals
) {
my
$key
=
$splits
->ids2key(
$exp_row
->[0]);
my
$val
=
$splits
->clan_support(
$key
);
cmp_ok
$val
,
'=='
,
$exp_row
->[1],
"got expected clan support from ids: $val"
;
}
my
$genus
=
'Mulloidichthys'
;
my
@needle
=
grep
{
$_
->full_id =~ m/
$genus
/xms }
$tree
->all_seq_ids;
my
$key
=
$splits
->ids2key(\
@needle
);
ok
$splits
->is_a_clan(
$key
),
"got expected clan status for $genus"
;
cmp_ok
$splits
->clan_support(
$key
),
'=='
,
$max
,
"got expected BP support for $genus"
;
my
%exp_bp_val_for
= (
'Mulloidichthys ayliffe_nash@215468,Mulloidichthys dentatus_longo@321198,Mulloidichthys dentatus_nash@368645,Mulloidichthys flavolineatus_santa@382170,Mulloidichthys flavolineatus_stiller@374330,Mulloidichthys martinicus_longo@312721,Mulloidichthys martinicus_stiller@380523,Mulloidichthys vanicolensis_longo@282366,Mulloidichthys vanicolensis_stiller@385444'
=> [
$max
,
'Mulloidichthys pfluegeri_arbor@366817'
],
'Mulloidichthys ayliffe_nash@215468,Mulloidichthys dentatus_longo@321198,Mulloidichthys dentatus_nash@368645,Mulloidichthys martinicus_longo@312721,Mulloidichthys martinicus_stiller@380523,Mulloidichthys vanicolensis_longo@282366'
=> [
$max
,
'Mulloidichthys flavolineatus_santa@382170,Mulloidichthys flavolineatus_stiller@374330,Mulloidichthys pfluegeri_arbor@366817,Mulloidichthys vanicolensis_stiller@385444'
],
'Mulloidichthys dentatus_longo@321198,Mulloidichthys dentatus_nash@368645'
=> [
$max
,
'Mulloidichthys ayliffe_nash@215468,Mulloidichthys flavolineatus_santa@382170,Mulloidichthys flavolineatus_stiller@374330,Mulloidichthys martinicus_longo@312721,Mulloidichthys martinicus_stiller@380523,Mulloidichthys pfluegeri_arbor@366817,Mulloidichthys vanicolensis_longo@282366,Mulloidichthys vanicolensis_stiller@385444'
],
'Mulloidichthys dentatus_longo@321198,Mulloidichthys dentatus_nash@368645,Mulloidichthys martinicus_longo@312721,Mulloidichthys martinicus_stiller@380523,Mulloidichthys vanicolensis_longo@282366'
=> [
$max
,
'Mulloidichthys ayliffe_nash@215468,Mulloidichthys flavolineatus_santa@382170,Mulloidichthys flavolineatus_stiller@374330,Mulloidichthys pfluegeri_arbor@366817,Mulloidichthys vanicolensis_stiller@385444'
],
'Mulloidichthys flavolineatus_santa@382170,Mulloidichthys flavolineatus_stiller@374330'
=> [
$max
,
'Mulloidichthys ayliffe_nash@215468,Mulloidichthys dentatus_longo@321198,Mulloidichthys dentatus_nash@368645,Mulloidichthys martinicus_longo@312721,Mulloidichthys martinicus_stiller@380523,Mulloidichthys pfluegeri_arbor@366817,Mulloidichthys vanicolensis_longo@282366,Mulloidichthys vanicolensis_stiller@385444'
],
'Mulloidichthys flavolineatus_santa@382170,Mulloidichthys flavolineatus_stiller@374330,Mulloidichthys vanicolensis_stiller@385444'
=> [
$max
,
'Mulloidichthys ayliffe_nash@215468,Mulloidichthys dentatus_longo@321198,Mulloidichthys dentatus_nash@368645,Mulloidichthys martinicus_longo@312721,Mulloidichthys martinicus_stiller@380523,Mulloidichthys pfluegeri_arbor@366817,Mulloidichthys vanicolensis_longo@282366'
],
'Mulloidichthys martinicus_longo@312721,Mulloidichthys martinicus_stiller@380523,Mulloidichthys vanicolensis_longo@282366'
=> [
$max
,
'Mulloidichthys ayliffe_nash@215468,Mulloidichthys dentatus_longo@321198,Mulloidichthys dentatus_nash@368645,Mulloidichthys flavolineatus_santa@382170,Mulloidichthys flavolineatus_stiller@374330,Mulloidichthys pfluegeri_arbor@366817,Mulloidichthys vanicolensis_stiller@385444'
],
'Mulloidichthys martinicus_longo@312721,Mulloidichthys vanicolensis_longo@282366'
=> [ (
$tpl
? 1 : 89),
'Mulloidichthys ayliffe_nash@215468,Mulloidichthys dentatus_longo@321198,Mulloidichthys dentatus_nash@368645,Mulloidichthys flavolineatus_santa@382170,Mulloidichthys flavolineatus_stiller@374330,Mulloidichthys martinicus_stiller@380523,Mulloidichthys pfluegeri_arbor@366817,Mulloidichthys vanicolensis_stiller@385444'
],
);
my
%got_bp_val_for
=
map
{
(
join
','
,
sort
map
{
$_
->full_id } @{
$splits
->key2ids(
$_
) } )
=> [
$splits
->clan_support(
$_
),
join
','
,
sort
map
{
$_
->full_id }
@{
$splits
->key2ids(
$splits
->xor_clans(
$key
,
$_
) ) } ]
}
$splits
->sub_clans(
$key
);
is_deeply \
%got_bp_val_for
, \
%exp_bp_val_for
,
"got expected sub-clans, xor-clans and BP support values for $genus"
;
}
done_testing;