-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathget_geneID.pl
101 lines (78 loc) · 1.83 KB
/
get_geneID.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
use warnings;
use strict;
use Getopt::Long;
use File::Basename;
use Bio::SeqIO;
#Usage: perl get_geneID.pl --gff <gff> --out <out>
my $version_num = '1.0';
my $command_line = join(" ", @ARGV);
###### Get options ###############
my ($gff,$fas,$genome_vcf_file,$out) = '';
GetOptions(
'gff=s' => \$gff,
'out=s' => \$out
);
if( $gff eq '' or $out eq ''){
my $usage_message = usage_message($version_num);
die "$usage_message\n";
}
#####################################################
## get mRNA information
open (SRC,"$gff");
open (TGT,">$out") || die "No open";
my %gene2mRNA = ();
my %gene2site = ();
while(<SRC>)
{
if(m/^#/)
{
next;
}
my @line = split(/\t/,$_);
if($line[8] =~ m/([^\r\n]+)/){
$line[8] = $1;
}
my $id='';
my $name='';
my $parent = '';
if($line[8] =~m/ID\=([^\;]+)/){
$id=$1;
}
if($line[8] =~m/Name\=([^\;]+)/){
$name =$1;
}
if($line[8] =~m/Parent\=([^\;]+)/){
$parent =$1;
}
if (uc($line[2]) eq 'GENE'){
$gene2site{$id}=$line[0].':'.$line[3].'-'.$line[4];
}
elsif(uc($line[2]) eq 'MRNA'){
#$trans2gene{$id} = $parent;
#$trans_id2name{$id} = $name;
$gene2mRNA{$parent}{$id} = 1;
}
} ## while file
print "Read GFF done\n";
for my $gene(sort keys %gene2site){
my $site = $gene2site{$gene} ;
my $gene1 = $gene.'A';
my $gene2 = $gene.'B';
if(exists $gene2mRNA{$gene}){
my @trans = sort keys %{$gene2mRNA{$gene}};
for (@trans){
print TGT $gene1 ,"\t",$_.'A',"\n";
}
for (@trans){
print TGT $gene2 ,"\t",$_.'B',"\n";
}
}
}
sub usage_message {
my $version = shift;
my $usage_message = "\n Trans extraction $version
Usage: perl get_geneID.pl --gff <gff> --out <out>
";
return $usage_message;
}