-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathxmfa2mfa.pl
executable file
·65 lines (50 loc) · 1.6 KB
/
xmfa2mfa.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
#!/usr/bin/perl
use strict;
$0 = rindex($0, "/") > -1 ? substr($0, rindex($0, "/")+1) : $0;
my (@lines, @filt_lines);
my ($line, $line_in, $type);
my $mode = ($ARGV[0] eq "1" ? "M1" : ($ARGV[0] eq "2" ? "M2" : die("$0: Invalid base genome argument (expected 1 or 2)")));
die("$0: LAGAN_DIR not defined. Stopped") unless defined $ENV{"LAGAN_DIR"};
while (<STDIN>) {
$line_in = $_;
if ($line_in =~ /^\=.*(DM|M1|M2)$/) {
$type = $1; $line .= $line_in;
$lines[$#lines+1] = $line if $type eq "DM" or $type eq $mode;
undef $line; undef $type;
} else {
$line .= $line_in;
}
}
foreach my $line (@lines) {
if ($mode eq "M2") {
$line =~ /(\>[^\s\n]+\s([\+\-])[^\n]+)\n(.+)\n(\>[^\s\n]+\s([\+\-])[^\n]+)\n(.+)\n(\=.+?)\n/s;
# $line =~ /(\>[^\s\n]+\s([\+\-])[^\n]+)\n([^\n]+)\n(\>[^\s\n]+\s([\+\-])[^\n]+)\n([^\n]+)\n(\=.+?\n)/s;
my ($head1, $strand1, $seq1, $head2, $strand2, $seq2, $foot) = ($1, $2, $3, $4, $5, $6, $7);
die if $strand1 ne $strand2;
if ($strand1 eq "-") {
$seq1 =~ s/\n//g;
$seq2 =~ s/\n//g;
$seq1 = reverse($seq1);
$seq2 = reverse($seq2);
$seq1 =~ s/(.{80})/$1\n/g;
$seq2 =~ s/(.{80})/$1\n/g;
}
$line = $head2."\n".$seq2."\n".$head1."\n".$seq1."\n".$foot."\n";
}
push @filt_lines, $line;
}
open(OUT, "> tmp.xmfa");
foreach my $line (@filt_lines) { print OUT $line; }
close OUT;
system($ENV{"LAGAN_DIR"}."/utils/Glue tmp.xmfa > glue.out 2> glue.err");
open(IN, "< glue.out");
my @glue_out = <IN>;
close IN;
open(IN, "< glue.err");
my @glue_err = <IN>;
close IN;
unlink("tmp.xmfa");
unlink("glue.out");
unlink("glue.err");
print STDOUT @glue_out;
print STDERR @glue_err;