20251125
This commit is contained in:
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $usage = "\n\nusage: $0 chrysalis_dir/ component_no (WELDS|SCAFF|BOTH)\n\n";
|
||||
|
||||
my $chrysalis_dir = $ARGV[0] or die $usage;
|
||||
my $component_no = $ARGV[1];
|
||||
my $draw_type = $ARGV[2] or die $usage;
|
||||
|
||||
unless (defined $component_no) {
|
||||
die $usage;
|
||||
}
|
||||
|
||||
unless ($draw_type =~ /^(WELDS|SCAFF|BOTH)$/) {
|
||||
die $usage;
|
||||
}
|
||||
|
||||
main: {
|
||||
|
||||
my $graph_from_iworm_file = "$chrysalis_dir/GraphFromIwormFasta.out";
|
||||
|
||||
my %iworm_accs = &get_iworm_list_from_component($graph_from_iworm_file, $component_no);
|
||||
|
||||
## get the weld links:
|
||||
my %welds = &parse_welds($graph_from_iworm_file, \%iworm_accs);
|
||||
|
||||
## get the scaffolding links:
|
||||
my $scaffolding_file = "$chrysalis_dir/../iworm_scaffolds.txt";
|
||||
my %scaffolds = &parse_scaffolded_pairs($scaffolding_file, \%iworm_accs);
|
||||
|
||||
## write dot file
|
||||
print "digraph {\n";
|
||||
|
||||
|
||||
my %iworm_to_id;
|
||||
## write node labels
|
||||
my $counter = 0;
|
||||
foreach my $iworm_acc (keys %iworm_accs) {
|
||||
$counter++;
|
||||
my $iworm_id = $iworm_to_id{$iworm_acc} = $counter;
|
||||
print "\t$iworm_id [label=\"$iworm_acc\"];\n";
|
||||
}
|
||||
|
||||
if ($draw_type =~ /WELDS|BOTH/) {
|
||||
## add weld links
|
||||
foreach my $iworm_acc (keys %welds) {
|
||||
my $iworm_id = $iworm_to_id{$iworm_acc};
|
||||
foreach my $welded_iworm_acc (keys %{$welds{$iworm_acc}}) {
|
||||
my $welded_id = $iworm_to_id{$welded_iworm_acc};
|
||||
print "\t$iworm_id" . "->" . "$welded_id [color=\"blue\"];\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($draw_type =~ /SCAFF|BOTH/) {
|
||||
## add scaffolding links
|
||||
foreach my $iworm_acc (keys %scaffolds) {
|
||||
my $iworm_id = $iworm_to_id{$iworm_acc};
|
||||
unless (defined $iworm_id) { next; }
|
||||
|
||||
foreach my $scaffolded_iworm_acc (keys %{$scaffolds{$iworm_acc}}) {
|
||||
my $scaffolded_id = $iworm_to_id{$scaffolded_iworm_acc};
|
||||
unless (defined $scaffolded_id) { next; } # not all scaffolded entries were chosen for clustering if read support was insufficient
|
||||
|
||||
print "\t$iworm_id" . "->" . "$scaffolded_id [color=\"green\"];\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
print "}\n";
|
||||
|
||||
exit(0);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
####
|
||||
sub parse_welds {
|
||||
my ($graph_file, $iworm_accs_href) = @_;
|
||||
|
||||
my %welds;
|
||||
|
||||
open (my $fh, $graph_file) or die "Error, cannot oepn file $graph_file";
|
||||
while (<$fh>) {
|
||||
chomp;
|
||||
if (/^\#Welding: >(a\d+;\d+)_\S+ to >(a\d+;\d+)_/) {
|
||||
my $iworm_acc_A = $1;
|
||||
my $iworm_acc_B = $2;
|
||||
|
||||
($iworm_acc_A, $iworm_acc_B) = sort ($iworm_acc_A, $iworm_acc_B);
|
||||
|
||||
if ($iworm_accs_href->{$iworm_acc_A} || $iworm_accs_href->{$iworm_acc_B}) { # really should only have situations where they're both included
|
||||
|
||||
$welds{$iworm_acc_A}->{$iworm_acc_B} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
close $fh;
|
||||
|
||||
return(%welds);
|
||||
}
|
||||
|
||||
|
||||
####
|
||||
sub get_iworm_list_from_component {
|
||||
my ($graph_file, $component_no) = @_;
|
||||
|
||||
my %iworm_accs;
|
||||
|
||||
open (my $fh, $graph_file) or die "Error, cannot open file $graph_file";
|
||||
while (<$fh>) {
|
||||
if (/^>Component_$component_no /) {
|
||||
/\[iworm>(a\d+;\d+)_/ or die "Error, cannot parse iworm acc from $_ ";
|
||||
my $iworm_acc = $1;
|
||||
|
||||
$iworm_accs{$iworm_acc} = 1;
|
||||
}
|
||||
}
|
||||
close $fh;
|
||||
|
||||
|
||||
return(%iworm_accs);
|
||||
}
|
||||
|
||||
|
||||
####
|
||||
sub parse_scaffolded_pairs {
|
||||
my ($scaffolding_file, $iworm_accs_href) = @_;
|
||||
|
||||
my %scaffolded_pairs;
|
||||
|
||||
open (my $fh, $scaffolding_file) or die "Error, cannot open file $scaffolding_file";
|
||||
while (<$fh>) {
|
||||
chomp;
|
||||
my @x = split(/\t/);
|
||||
my ($iworm_acc_A, $iworm_acc_B) = ($x[0], $x[2]);
|
||||
|
||||
($iworm_acc_A, $iworm_acc_B) = sort ($iworm_acc_A, $iworm_acc_B);
|
||||
|
||||
if ($iworm_accs_href->{$iworm_acc_A} || $iworm_accs_href->{$iworm_acc_B}) {
|
||||
|
||||
$scaffolded_pairs{$iworm_acc_A}->{$iworm_acc_B} = 1;
|
||||
}
|
||||
}
|
||||
close $fh;
|
||||
|
||||
return(%scaffolded_pairs);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user