-
Notifications
You must be signed in to change notification settings - Fork 2
/
getStatusReference.pl
147 lines (121 loc) · 3.87 KB
/
getStatusReference.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/Perl/bin/perl
use Bio::SeqIO;
#################################################################################
# #
# Script name: getStatusReference.pl #
# Author: Anneleen Van Geystelen #
# Version: v1.0 #
# Created: 23/08/2011 #
# Last Modified: 23/08/2011 #
# #
# Description: This Perl script will create a status file of a givern #
# reference fasta file. #
# #
# #
# INPUT: #
# variable: #
# fixed: path of reference fasta file #
# path of conversion file #
# version (i.e. hg18 or hg19) #
# #
# OUTPUT: status file #
# #
# PERL MODULES: #
# #
#################################################################################
#################################################################################
# VARIABLES #
#################################################################################
if ($#ARGV != 3) {
print "Please, give valid arguments\n"; die;
}
# Set path of reference fasta file.
my $refFile = $ARGV[0];
if (!(-f $refFile)) { die "$refFile does not exist\n"; }
# Set path of the conversion file.
my $convFile = $ARGV[1];
if (!(-f $convFile)) { die "$convFile does not exist\n"; }
# Set version variable.
my $version = $ARGV[2];
# Set path of output status file.
my $statFile = $ARGV[3];
#################################################################################
# END OF VARIABLES #
#################################################################################
#################################################################################
# SUBROUTINES #
#################################################################################
# Function to trim leading and trailing spaces.
sub trimSpace {
my $string = shift;
$string =~ s/^\s+//;
$string =~ s/\s+$//;
return $string;
}
#################################################################################
# END OF SUBROUTINES #
#################################################################################
######################## Create hash of conversion file. ########################
my %name2anc;
my %name2mut;
my %name2pos;
my $flag = 0;
open (CONV, "< $convFile") or die " Could not open conversion file: $convFile\n";
while (<CONV>) {
my $line = $_;
chomp($line);
if ($flag == 1) {
my ($name, $pos36, $pos37, $mutation, $type, $ignore) = split(/\t/, $line);
if (trimSpace($ignore) eq 'no') {
$mutation = trimSpace($mutation);
my ($anc, $mut) = split(/->/, $mutation);
$name = trimSpace($name);
if ($version eq 'hg18') {
$pos36 = trimSpace($pos36);
$name2anc{$name} = $anc;
$name2mut{$name} = $mut;
$name2pos{$name} = $pos36;
} elsif ($version eq 'hg19') {
$pos37 = trimSpace($pos37);
$name2anc{$name} = $anc;
$name2mut{$name} = $mut;
$name2pos{$name} = $pos37;
}
}
} else {
$flag = 1;
}
}
close CONV;
######################## Create hash of reference. #######################
# Get reference sequence.
my $refSeq;
my $in = Bio::SeqIO->new(-file => "$refFile" , -format => 'Fasta');
while(my $sobj = $in->next_seq) {
my $id = $sobj->id;
$refSeq = $sobj->seq();
}
################### Create hash with status of each SNP. ##################
# Get reference bases of SNP.
my %reference;
foreach $name (sort keys %name2pos) {
my $position = $name2pos{$name} - 1;
my $mutant = $name2mut{$name};
my $ancestral = $name2anc{$name};
my $base = substr($refSeq, $position, 1);
$base =~ tr/a-z/A-Z/;
if ($base eq $mutant) {
$reference{$name} = 1;
} elsif ($base eq $ancestral) {
$reference{$name} = 0;
} else {
$reference{$name} = -1
}
}
######################### Write output. ####################################
open (OUT, "> $statFile");
foreach $name (sort keys %reference) {
my $status = $reference{$name};
print OUT $name."\t".$status."\n";
}
close OUT;