App-Fasops
view release on metacpan or search on metacpan
lib/App/Fasops/Command/xlsx.pm view on Meta::CPAN
27, # Lite Turquoise
44, # Pale Blue 0b100
46, # Lavender
47, # Tan
24, # Periwinkle
49, # Aqua
51, # Gold
45, # Rose
52, # Light Orange
26, # Ivory
29, # Coral
31, # Ice Blue
# 30, # Ocean Blue
# 41, # Light Turquoise, again
# 48, # Light Blue
# 50, # Lime
# 54, # Blue-Gray
# 62, # Indigo
);
for my $i ( 0 .. $#colors ) {
$bg_of->{$i}{bg_color} = $colors[$i];
}
$bg_of->{unknown}{bg_color} = 9; # White
# snp base
my $snp_fg_of = {
'A' => { color => 58, }, # Dark Green
'C' => { color => 18, }, # Dark Blue
'G' => { color => 28, }, # Dark Purple
'T' => { color => 16, }, # Dark Red
'N' => { color => 8, }, # Black
'-' => { color => 8, }, # Black
};
for my $fg ( keys %{$snp_fg_of} ) {
for my $bg ( keys %{$bg_of} ) {
$format_of->{snp}{"$fg$bg"} = $workbook->add_format(
font => 'Courier New',
size => 10,
align => 'center',
valign => 'vcenter',
%{ $snp_fg_of->{$fg} },
%{ $bg_of->{$bg} },
);
}
}
$format_of->{snp}{'-'} = $workbook->add_format(
font => 'Courier New',
size => 10,
align => 'center',
valign => 'vcenter',
);
for my $bg ( keys %{$bg_of} ) {
$format_of->{indel}->{$bg} = $workbook->add_format(
font => 'Courier New',
size => 10,
bold => 1,
align => 'center',
valign => 'vcenter',
%{ $bg_of->{$bg} },
);
}
return $format_of;
}
# store all variations
sub get_vars {
my $seq_refs = shift;
my $opt = shift;
# outgroup
my $out_seq;
if ( $opt->{outgroup} ) {
$out_seq = pop @{$seq_refs};
}
my $seq_count = scalar @{$seq_refs};
if ( $seq_count < 2 ) {
Carp::confess "Too few sequences [$seq_count]\n";
}
my $indel_sites = App::Fasops::Common::get_indels($seq_refs);
if ( $opt->{outgroup} ) {
App::Fasops::Common::polarize_indel( $indel_sites, $out_seq );
}
my $snp_sites = App::Fasops::Common::get_snps($seq_refs);
if ( $opt->{outgroup} ) {
App::Fasops::Common::polarize_snp( $snp_sites, $out_seq );
}
my %variations;
for my $site ( @{$indel_sites} ) {
if ( $opt->{nocomplex} and $site->{indel_freq} == -1 ) {
next;
}
if ( $opt->{nosingle} and $site->{indel_freq} <= 1 ) {
next;
}
if ( $opt->{noindel} ) {
next;
}
if ( defined $opt->{min} and $site->{indel_freq} / $seq_count < $opt->{min} ) {
next;
}
if ( defined $opt->{max} and $site->{indel_freq} / $seq_count > $opt->{max} ) {
next;
}
$site->{var_type} = 'indel';
$variations{ $site->{indel_start} } = $site;
}
( run in 0.710 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )