kegg.pm
字号:
#!usr/bin/perl
use strict ;
use SOAP::Lite;
use File::Path;
##########################################################
#convert NCBI gene-id to KEGG gene-id
#input NCBI gene-id.can be multiple or single.
#Input type:string like"ncbi-geneid:21969 ncbi-geneid:21975"
#return NCBI gene-id and corresponding KEGG gene-id
#sample ncbi-geneid:21969 mmu:21969 ...
sub ConvertID
{
my $wsdl = 'http://soap.genome.jp/KEGG.wsdl';
my $gene = $_[0];
my $serv = SOAP::Lite -> service($wsdl);
my $result = $serv -> bconv($gene);
return ($result);
}
############################################################
#get_pathways_by_genes([string]:genes_id_list)
#Search all pathways which include all the given genes.
#How to pass the list of genes_id will depend on the language specific implementations.
#Return value:
#ArrayOfstring (pathway_id)
#Example:
# Returns all pathways including E. coli genes 'b0077' and 'b0078'
#get_pathways_by_genes(['eco:b0077' , 'eco:b0078'])
sub GetPathwayByGene
{
my $wsdl = 'http://soap.genome.jp/KEGG.wsdl';
my @gene = @_;
my $singlegene;
my @Single_Gene ;
my $serv = SOAP::Lite -> service($wsdl);
my %result ;
my $index = 0 ;
my $temp_gene;
foreach $singlegene (@gene)
{
$temp_gene = $serv -> get_pathways_by_genes(["$singlegene"]);
$result{$singlegene} = $temp_gene ;
$index++;
}
return(%result);
}
##########################################################
sub SearchKEGG
{
#specify the snp id to gene id file.
#my $InputFileName = "snp_TO_geneid.txt" ;
my $InputFileName = $_[0] ;
#my $path = $_[1].'KEGG/';
# eval{mkpath($path,0,0755)};
# if($@)
# {
# warn("Make path [$path] failed:\n$@");
# }
my $path = $_[1];
my $OutputFileName_GeneToPath = $path.'Gene_To_PathwayID.txt';
my $geneid ;
my @temp ;
my $pathway_key ;
my $geneid_to_keggid ;
my $KeggId ;
my @KEGG_ID;
my $singleId ;
my @single_gene_pathway;
my %pathway;
######
my %pathway_of_genes ;
my @single_pathway ;
my $i;
my $j ;
my ($k,$l) ;
my $OutputFileName_PathToGene = $path.'Pathway_To_GeneID.txt';
open(MYFILE,$InputFileName )||die "can not open file $InputFileName \n" ;
#extract the NCBI gene id.
while(<MYFILE>)
{
@temp = split(/\t/ , $_);
$geneid= $geneid."ncbi-geneid:".$temp[1];
}
$geneid_to_keggid = "ncbi-geneid:21969 eco:b0077
ncbi-geneid:21974 eco:b0078
ncbi-geneid:21975 eco:b0077
ncbi-geneid:21975 eco:b0078";
#convert the NCBI GeneID to KEGG id.
#$geneid_to_keggid = ConvertID($geneid);
$KeggId = $geneid_to_keggid ;
#delete the prefix :ncbi-geneid:21975 ,leaving only KEGG gene-id
$KeggId =~ s/ncbi-geneid:[0-9]+\s//g;
#store KEGG id in an array.
@KEGG_ID = split(/\n/,$KeggId);
#Get the pathway ID
#%pathway = GetPathwayByGene(@KEGG_ID);
$pathway{'eco:b0077'}=['path:eco00290','path:eco00650','path:eco00660','path:eco00770'];
$pathway{'eco:b0078'}=['path:eco00290','path:eco00650','path:eco00660','path:eco00770'];
open(NEWFH,">$OutputFileName_GeneToPath" )||die "can not open file $OutputFileName_GeneToPath \n" ;
foreach $pathway_key (keys %pathway)
{
print NEWFH "$pathway_key:\t";
foreach $singleId ($pathway{$pathway_key})
{
print NEWFH "@$singleId\t" ;
}
print NEWFH "\n";
}
close(NEWFH);
#######################################################
#Get the IDs of pathways which contain a special gene
for $i (0..$#KEGG_ID)
{
@single_pathway = @{$pathway{$KEGG_ID[$i]}};
for $k (0..$#single_pathway)
{
$pathway_of_genes{$single_pathway[$k]} .= $KEGG_ID[$i];
$pathway_of_genes{$single_pathway[$k]} .= "\t";
}
}
#Output to file.
open(NEWFH,">$OutputFileName_PathToGene" )||die "can not open file $OutputFileName_PathToGene \n" ;
foreach $j (keys %pathway_of_genes)
{
print NEWFH "$j:\t";
print NEWFH "$pathway_of_genes{$j}\t" ;
print NEWFH "\n";
}
close(NEWFH);
print "\n";
}
1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -