-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathrun_ssake.pl
executable file
·101 lines (96 loc) · 2.22 KB
/
run_ssake.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/perl -w
#
use strict;
use warnings;
use English;
my $pre = -1;
my @reads = ();
my $file = shift or die "$0 <bp_reads.txt>\n";
open RD, $file or die $!;
open OUT, ">$file.localreads.fa" or die $!;
my $old_fh = select(OUT);
$| = 1;
select($old_fh);
while (<RD>) {
chomp;
my @e = split /\s+/, $_;
if ($pre != $e[0]) {
if (@reads > 0) {
my $i = 0;
seek OUT, 0, 0;
truncate OUT, 0;
my %seen = ();
@reads = grep { ! $seen{$_}++ } @reads;
foreach my $r (@reads) {
print OUT ">read$i\n";
print OUT $r, "\n";
$i++;
}
my $consensus = "";
my $name = "";
# system("cap3 localreads.fa -i 30 -j 31 -o 18 -s 300 > localreads.fa.log;");
system("SSAKE -m 16 -f $file.localreads.fa -w 1 -z 50 -o 1 -b $file.ssake.asm");
open OUT2, '>>', "$file.ssake.asm.out" or die $!;
my $old_fh2 = select(OUT2);
$| = 1;
select($old_fh2);
open IN, "$file.ssake.asm.contigs" or die $!;
while (<IN>) {
if (/^>(\S+)/) {
if ($name ne "") {
print OUT2 ">", $name, "\n", $consensus, "\n";
}
$name = "E".$pre."|".$1;
} else {
chomp;
$consensus = $_;
}
}
print OUT2 ">", $name, "\n", $consensus, "\n";
close IN;
close OUT2;
# system("cat localreads.fa.cap.contigs >> cap3.asm.out");
$pre = $e[0];
@reads = ();
}
push @reads, ($e[1], $e[2]);
$pre = $e[0];
} else {
push @reads, ($e[1], $e[2]);
}
}
if (@reads > 0) {
my $i = 0;
seek OUT, 0, 0;
truncate OUT, 0;
my %seen = ();
@reads = grep { ! $seen{$_}++ } @reads;
foreach my $r (@reads) {
print OUT ">read$i\n";
print OUT $r, "\n";
$i++;
}
}
system("SSAKE -m 16 -f $file.localreads.fa -w 1 -z 50 -o 1 -b $file.ssake.asm");
#system("cap3 localreads.fa -i 30 -j 31 -o 18 -s 300 > localreads.fa.log;");
open OUT2, '>>', "$file.ssake.asm.out" or die $!;
open IN, "$file.ssake.asm.contigs" or die $!;
my $consensus = "";
my $name = "";
while (<IN>) {
if (/^>(\S+)/) {
if ($name ne "") {
print OUT2 ">", $name, "\n", $consensus, "\n";
}
$name = "E".$pre."|".$1;
} else {
chomp;
$consensus = $_;
}
}
print OUT2 ">", $name, "\n", $consensus, "\n";
close IN;
close OUT2;
#system("cat localreads.fa.cap.contigs >> cap3.asm.out");
close OUT;
close RD;