-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathSNPtable2elai.pl
executable file
·122 lines (110 loc) · 2.94 KB
/
SNPtable2elai.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
#!/usr/bin/perl
use warnings;
use strict;
#unless (@ARGV == 3) {die;}
my $in = $ARGV[0]; #Infile SNP table
my $out = $ARGV[1]; #Prefix for outfile.
my $pop = $ARGV[2]; #Population file for each sample
my %pop;
my %samples;
my @samples;
my %popList;
my $Locicount=1;
my $NumColBad=2;
open (PARFILE1, "> $out.parentfile1.txt") or die "Could not open a file\n";
open (PARFILE2, "> $out.parentfile2.txt") or die "Could not open a file\n";
open (ADMIXFILE, "> $out.admixed.txt") or die "Could not open a file\n";
open (LOCI, "> $out.geneticmap.txt") or die "Could not open a file\n";
my %rom;
$rom{"I"} = "1";
$rom{"II"} = "2";
$rom{"III"} = "3";
$rom{"IV"} = "4";
$rom{"V"} = "5";
$rom{"VI"} = "6";
$rom{"VII"} = "7";
$rom{"VIII"} = "8";
$rom{"IX"} = "9";
$rom{"X"} = "10";
$rom{"XI"} = "11";
$rom{"XII"} = "12";
$rom{"XIII"} = "13";
$rom{"XIV"} = "14";
$rom{"XV"} = "15";
$rom{"XVI"} = "16";
$rom{"XVII"} = "17";
$rom{"XVIII"} = "18";
$rom{"XIX"} = "19";
$rom{"XX"} = "20";
$rom{"XXI"} = "21";
$rom{"XXII"} = "22";
if ($pop){
open POP, $pop;
while (<POP>){
chomp;
my @a = split (/\t/,$_);
$pop{$a[0]}=$a[1];
$popList{$a[1]}++;
}
close POP;
}
open IN, $in;
while (<IN>) {}
my $locinum = ($.-1);
print PARFILE1 "$popList{'p1'}\n$locinum\n";
print PARFILE2 "$popList{'p2'}\n$locinum\n";
print ADMIXFILE "$popList{3}\n$locinum\n";
print "$locinum\n";
open IN, $in;
while (<IN>){
chomp;
my @a = split (/\t/,$_);
if (($a[0] eq "contig" ) or ($a[0] eq "CHROM")){
print PARFILE1 "IND";
print PARFILE2 "IND";
print ADMIXFILE "IND";
foreach my $i ($NumColBad..$#a){
$samples{$i}=$a[$i];
push(@samples,$a[$i]);
if ($pop{$a[$i]} eq "p1"){
print PARFILE1 ", $a[$i]";
}
elsif ($pop{$a[$i]} eq "p2"){
print PARFILE2 ", $a[$i]";
}
elsif ($pop{$a[$i]} eq 3){
print ADMIXFILE ", $a[$i]";
}
}
print PARFILE1 "\n";
print PARFILE2 "\n";
print ADMIXFILE "\n";
}else{
print PARFILE1 "$a[0]_$a[1]";
print PARFILE2 "$a[0]_$a[1]";
print ADMIXFILE "$a[0]_$a[1]";
print LOCI "$a[0]_$a[1], $a[1], 1";
$Locicount++;
foreach my $i ($NumColBad..$#a){
if ($pop{$samples{$i}}){
if ($pop{$samples{$i}} eq "p1"){
print PARFILE1 ", $a[$i]";
}
elsif ($pop{$samples{$i}} eq "p2"){
print PARFILE2 ", $a[$i]";
}
elsif ($pop{$samples{$i}} eq 3){
print ADMIXFILE ", $a[$i]";
}
}
}
print PARFILE1 "\n";
print PARFILE2 "\n";
print ADMIXFILE "\n";
print LOCI "\n";
}
}
close PARFILE1;
close PARFILE2;
close ADMIXFILE;
close LOCI;