changeset 1:a9a1b182bc6d draft

Deleted selected files
author rsajulga
date Thu, 16 Jul 2015 16:30:25 -0400
parents 4961ddd2f782
children d0311668d442
files uniprot_id_mapping.py
diffstat 1 files changed, 0 insertions(+), 697 deletions(-) [+]
line wrap: on
line diff
--- a/uniprot_id_mapping.py	Thu Jul 16 16:28:42 2015 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,697 +0,0 @@
-#!/usr/bin/env python
-"""
-#
-#------------------------------------------------------------------------------
-#                         University of Minnesota
-#         Copyright 2015, Regents of the University of Minnesota
-#------------------------------------------------------------------------------
-# Author:
-#
-#  James E Johnson
-#
-#------------------------------------------------------------------------------
-"""
-import json
-import logging
-import optparse
-from optparse import OptionParser
-import os
-import sys
-import re
-import urllib
-import urllib2
-import timeit
-start = timeit.default_timer()
-try:
-    import xml.etree.cElementTree as ET
-except ImportError:
-    import xml.etree.ElementTree as ET
-
-"""print 
-http://www.uniprot.org/help/programmatic_access#id_mapping_examples
-http://www.uniprot.org/help/uploadlists
-
-From input files or stdin get accessions/IDs to map.
-An input option can specify what id_type the input accessions/IDs are, 
-otherwise, we should attempt to categorize the input accessions/IDs according to their inferred id_type
-
-input_dict = dict()
-for id_string in input_ids:
-  (id,id_type) = getAccession(id_string)
-  if not id_type in input_dict:
-    input_dict[id_type] = []
-  input_dict[id_type].append(id)
-
-
-# We need to retrieve by from_id_type and to_id_type
-for id_type in input_dict:
-  for 
-
-
-tabular output:
-#input_id	to_id	to_id
-
-
-"""
-def warn_err(msg,exit_code=1):
-    sys.stderr.write(msg)
-    if exit_code:
-      sys.exit(exit_code)
-
-def __main__():
-  version = '1.0'
-  idDict = {
-    #Category:UniProt
-    'ACC+ID':'UniProtKB AC/ID',
-    'ACC':'UniProtKB AC',
-    'ID':'UniProtKB ID',
-    'UPARC':'UniParc',
-    'NF50':'UniRef50',
-    'NF90':'UniRef90',
-    'NF100':'UniRef100',
-    'GENENAME':'Gene name',
-    #Category:Other sequence databases
-    'EMBL_ID':'EMBL/GenBank/DDBJ',
-    'EMBL':'EMBL/GenBank/DDBJ CDS',
-    'PIR':'PIR',
-    'UNIGENE_ID':'UniGene',
-    'P_ENTREZGENEID':'Entrez Gene (GeneID)',
-    'P_GI':'GI number*',
-    'P_REFSEQ_AC':'RefSeq Protein', 
-    'REFSEQ_NT_ID':'RefSeq Nucleotide',
-    #Category:3D structure databases
-    'PDB_ID':'PDB',
-    'DISPROT_ID':'DisProt',
-    #Category:Protein-protein interaction databases
-    'BIOGRID_ID':'BioGrid',
-    'DIP_ID':'DIP',
-    'MINT_ID':'MINT',
-    'STRING_ID':'STRING',
-    #Category:Chemistry
-    'CHEMBL_ID':'ChEMBL',
-    'DRUGBANK_ID':'DrugBank',
-    'GUIDETOPHARMACOLOGY_ID':'GuidetoPHARMACOLOGY',
-    #Category:Protein family/group databases
-    'ALLERGOME_ID':'Allergome',
-    'MEROPS_ID':'MEROPS',
-    'MYCOCLAP_ID':'mycoCLAP',
-    'PEROXIBASE_ID':'PeroxiBase',
-    'REBASE_ID':'REBASE',
-    'TCDB_ID':'TCDB',
-    #Category:Polymorphism databases
-    'DMDM_ID':'DMDM',
-    #Category:2D gel databases
-    'WORLD_2DPAGE_ID':'World-2DPAGE',
-    #Category:Protocols and materials databases
-    'DNASU_ID':'DNASU',
-    #Category:Genome annotation databases
-    'ENSEMBL_ID':'Ensembl',
-    'ENSEMBL_PRO_ID':'Ensembl Protein',
-    'ENSEMBL_TRS_ID':'Ensembl Transcript',
-    'ENSEMBLGENOME_ID':'Ensembl Genomes',
-    'ENSEMBLGENOME_PRO_ID':'Ensembl Genomes Protein',
-    'ENSEMBLGENOME_TRS_ID':'Ensembl Genomes Transcript',
-    'P_ENTREZGENEID':'GeneID',
-    'KEGG_ID':'KEGG',
-    'PATRIC_ID':'PATRIC',
-    'UCSC_ID':'UCSC',
-    'VECTORBASE_ID':'VectorBase',
-    #Category:Organism-specific gene databases
-    'ARACHNOSERVER_ID':'ArachnoServer',
-    'CGD':'CGD',
-    'CONOSERVER_ID':'ConoServer',
-    'CYGD_ID':'CYGD',
-    'DICTYBASE_ID':'dictyBase',
-    'ECHOBASE_ID':'EchoBASE',
-    'ECOGENE_ID':'EcoGene',
-    'EUHCVDB_ID':'euHCVdb',
-    'EUPATHDB_ID':'EuPathDB',
-    'FLYBASE_ID':'FlyBase',
-    'GENECARDS_ID':'GeneCards',
-    'GENEFARM_ID':'GeneFarm',
-    'GENOLIST_ID':'GenoList',
-    'H_INVDB_ID':'H-InvDB',
-    'HGNC_ID':'HGNC',
-    'HPA_ID':'HPA',
-    'LEGIOLIST_ID':'LegioList',
-    'LEPROMA_ID':'Leproma',
-    'MAIZEGDB_ID':'MaizeGDB',
-    'MIM_ID':'MIM',
-    'MGI_ID':'MGI',
-    'NEXTPROT_ID':'neXtProt',
-    'ORPHANET_ID':'Orphanet',
-    'PHARMGKB_ID':'PharmGKB', 
-    'POMBASE_ID':'PomBase',
-    'PSEUDOCAP_ID':'PseudoCAP',
-    'RGD_ID':'RGD',
-    'SGD_ID':'SGD',
-    'TAIR_ID':'TAIR',
-    'TUBERCULIST_ID':'TubercuList',
-    'WORMBASE_ID':'WormBase',
-    'WORMBASE_TRS_ID':'WormBase Transcript',
-    'WORMBASE_PRO_ID':'WormBase Protein',
-    'XENBASE_ID':'Xenbase',
-    'ZFIN_ID':'ZFIN',
-    #Category:Phylogenomic databases
-    'EGGNOG_ID':'eggNOG',
-    'GENETREE_ID':'GeneTree',
-    'HOGENOM_ID':'HOGENOM',
-    'HOVERGEN_ID':'HOVERGEN',
-    'KO_ID':'KO',
-    'OMA_ID':'OMA',
-    'ORTHODB_ID':'OrthoDB',
-    'PROTCLUSTDB_ID':'ProtClustDB',
-    'TREEFAM_ID':'TreeFam',
-    #Category:Enzyme and pathway databases
-    'BIOCYC_ID':'BioCyc',
-    'REACTOME_ID':'Reactome',
-    'UNIPATHWAY_ID':'UniPathWay',
-    #Category:Gene expression databases
-    'CLEANEX_ID':'CleanEx',
-    #Category:Other
-    'CHITARS_ID':'ChiTaRS',
-    'GENOMERNAI_ID':'GenomeRNAi',
-    'GENEWIKI_ID':'GeneWiki',
-    'NEXTBIO_ID':'NextBio'
-  }
-
-  """ 
-  TODO:  
-    Would be better to be able to infer the from_id type for the input accession/ID  especially for a fasta file
-    - Allow the options.from_id to be unspecified and empty, and try to determine the from_id by the input ID/Accession.  
-
-  # rather than an array of input accessions, we need to put them in a dict() by type
-  def addAccession(id_dict,id_type,id):
-    if id_type not in id_dict:
-      id_dict[id_type] = []-++
-    id_dict[id_type] = [].append(id)
-
-  # returns(accession, id_type)
-  def getAccession(header, matchType):
-    # (format regex pattern, FROM_ID)
-    # TODO  try to determine which type of accession ID we have by matching by regular expressions
-    # each regex match should have a groups[0] that given the accession
-    # for id_types, see: http://www.uniprot.org/help/programmatic_access#id_mapping_examples
-    fmts = [
-      ('>?(?:sp|tr|sw)\|(\w+).*','ACC+ID'),
-      ('>?gi|\d+\|ref\|(NP_\d+\.\d+).*','ACC+ID'),
-      ('>/UniRef\d+_(\w+).*','ACC+ID'),
-      ('>/(UPI\d+).*','ACC+ID'),
-      ('NP_\d+\.\d+','ACC+ID'),
-      ('ENSP\d+','ENSEMBL_PRO_ID'),
-      ('ENST\d+','ENSEMBL_TRS_ID'),
-    ]
-    for pat,cat in fmts:
-      m = re.match(pat,header)
-      if m:
-        matchType.append(cat)
-        return (m.groups()[0],cat)
-    matchType.append('ACC+ID')
-    return (header,'ACC+ID')
-
-    # Then when we are retrieving the id mappings, we need to incrementally fetch by from_id / to_id types
-  idMaps = dict() # {to_id,idMap}
-  for to_id in options.to_id:
-    idMap = dict()
-    idMaps[to_id] = idMap
-    for (from_id,ids) id_dict.items():
-      # limit the requests to 500 at a time
-      idx = range(0,len(ids),500)
-      idx.append(len(ids))
-      for i in range(len(idx)-1):
-        getIdMapping(ids[idx[i]:idx[i+1]],from_id,to_id,idMap=idMap)
-  """
-
-  """
-  Some examples of fasta ID lines From:
-    https://code.google.com/p/compomics-utilities/source/browse/trunk/src/main/java/com/compomics/util/protein/Header.java
->sw|Pxxxx|ACTB_HUMAN xxxx xxx xxxx ...
->gi|xxxxx|xx|xxxxx|(x) xxxx xxx xxxx ...
->IPI:IPIxxxxxx.y|REFSEQ_XP:XP_aaaaa[|many more like this can be present] Tax_Id=9606 descr
->HIT000000001.10|HIX0021591.10|AB002292.2|NO|NO|HC|cds 185..4219|DH domain containing protein.
->OExyz (OExyz) xxx xxx xxx
->hflu_lsi_xxxx xxx xxx xxx
->C_tr_Lx_x [xxx - xxx] | xxx xxx
->M. tub.xxx|Rvxxx| xxx xxx
-// Drosophile DB.
-// We need to find two elements:
-//   - the accession String (retrieved as the trimmed version of everything
-//     up to (and NOT including) " pep:"
-//   - the description (everything (trimmed) starting from (and including) the " pep:".
->CGxxxxxx pep:xxxxxx
->xxxx xxx SGDID:xxxx xxx
->generic_some_tag|proten_accession|a description for this protein
-// Old (everything before 9.0 release (31 Oct 2006)) standard SwissProt header as
-// present in the Expasy FTP FASTA file.
-// Is formatted something like this:
->XXX_YYYY (acc) rest
->sp|accession|ID descr rest (including taxonomy, if available
->tr|accession|ID descr rest (including taxonomy, if available)
->nxp|NX_P02768-1|ALB|Serum albumin|Iso
-// New (9.0 release (31 Oct 2006) and beyond) standard SwissProt header as
-// present in the Expasy FTP FASTA file.
-// Is formatted something like this:
->accession|ID descr rest (including taxonomy, if available)
-// Flybase FASTA format.
->FBxxx type=xxx
-// A header translating a genome sequence into a protein sequences.
-// We need to find two elements, separated by a space:
-//   - the accession string (retrieved as the first part of a space delimited String).
-//   - the nucleic acid start and stop site (between brackets, separated by a '-').
->dm345_3L-sense [234353534-234353938]
->dmic_c_1_469 Dialister micraerophilus DSM 19965 [161699 - 160872] aspartate-semialdehyde dehydrogenase Database
->synsp_j_c_8_5 Synergistes[G-2] sp. oral taxon 357 W5455 (JCVI) [820 - 1089]  ORF
-// The Arabidopsis thaliana database; TAIR format
->AT1G08520.1 | Symbol: PDE166 | magnesium-chelatase subunit chlD, chloroplast, putative / Mg-protoporphyrin IX chelatase, putative (CHLD), similar to Mg-chelatase SP:O24133 from Nicotiana tabacum, GB:AF014399 GI:2318116 from (Pisum sativum) | chr1:2696415-2700961 FORWARD | Aliases: T27G7.20, T27G7_20, PDE166, PIGMENT DEFECTIVE 166
-...
-// Okay, try the often-used 'generic' approach. If this fails, we go to the worse-case scenario, ie. do not process at all.
-// Testing for this is somewhat more complicated.
-// Often used simple header; looks like:
-// >NP0465 (NP0465) A description for this protein.
-// We need to find two elements:
-//   - the accession String (easily retrieved as the next String until a space is encountered).
-//   - the description
->NP0465 (NP0465) A description for this protein.
- GenBank                           gb|accession|locus
- EMBL Data Library                 emb|accession|locus
- DDBJ, DNA Database of Japan       dbj|accession|locus
- NBRF PIR                          pir||entry
- Protein Research Foundation       prf||name
- SWISS-PROT                        sp|accession|entry name
- Brookhaven Protein Data Bank      pdb|entry|chain
- Patents                           pat|country|number
- GenInfo Backbone Id               bbs|number
- General database identifier       gnl|database|identifier
- NCBI Reference Sequence           ref|accession|locus
- Local Sequence identifier         lcl|identifier
-  """
-
-
-  def getFastaAccession(header):
-    # TODO parse the ID and return the accession
-    # (format regex pattern, FROM_ID)
-    # TODO  try to determine which type of accession ID we have by matching by reg|([A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})ular expressions
-    # each regex match should have a groups[0] that given the accession
-    # for id_types, see: http://www.uniprot.org/help/programmatic_access#id_mapping_examples
-    fmts = [
-      ('>?(?:sp|tr|sw)\|(\w+).*','ACC+ID'),
-      ('>?gi|\d+\|ref\|(NP_\d+\.\d+).*','ACC+ID'),
-      ('NP_\d+\.\d+','ACC+ID'),
-
-      ('([OPQ][0-9][A-Z0-9]{3}[0-9])|([A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})','ACC'),
-      ('(...*)_....*','ID'),
-      ('>/(UPI\d+).*','UPARC'),
-      ('>/UniRef50_(\w+).*','NF50'),
-      ('UniRef90_(\w+).*','NF90'),
-      ('UniRef100_(\w+).*','NF100'),
-      ('([A-C][A-Z]?\d{6})|(DM-Z)\d{5})','EMBL_ID'),
-      ('ENSP\d+','ENSEMBL_PRO_ID'),
-      ('ENST\d+','ENSEMBL_TRS_ID')
-    ]
-    for pat,cat in fmts:
-      m = re.match(pat,header)
-      if m:
-        return m.groups()[0]
-    return header
-
-  # rather than an array of input accessions, we need to put them in a dict() by type
-  def addAccession(id_dict,id_type,id):
-    for idtype in id_type:
-      if idtype not in id_dict:
-        id_dict[idtype] = []
-      id_dict[idtype].append(id)
-
-  # returns(accession, id_type)
-  def getAccession(header):
-    # (format regex pattern, FROM_ID)
-    # TODO  try to determine which type of accession ID we have by matching by regular expressions
-    # each regex match should have a groups[0] that given the accession
-    # for id_types, see: http://www.uniprot.org/help/programmatic_access#id_mapping_examples
-    fmts = [
-      ('([OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})','ACC'),
-      ('.*_[A-Z]*','ID'),
-      ('UPI(\d+).*','UPARC'),
-      ('(UniRef50_\w+.*)','NF50'),
-      ('UniRef90_(\w+).*','NF90'),
-      ('(UniRef100_\w+.*)','NF100'),
-      ('a[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2}','GENENAME'),
-
-      ('([A-L][A-Z]?\d{6})|([A-NR-Z]\d{5})|([A-Z]{4}\d{8})','EMBL_ID'), 
-      ('K\d*','KO_ID'),
-
-      ('([A-Z]*\d*\.\d$)','EMBL'),
-      ('([IBC]\d{5})','PIR'),
-      ('(Hs\.\d*)','UNIGENE_ID'),
-      ('[A-Z]P_(\d*\.\d)','P_REFSEQ_AC'),
-      ('[NX][MC]_(\d*\.\d)','REFSEQ_NT_ID'),
-      ('(\d[A-Z0-9]{3})','PDB_ID'),
-      ('(DP\d{5})','DISPROT_ID'),
-      ('(DIP-\d*N$)','DIP_ID'),
-      ('(MINT-\d*)','MINT_ID'),
-      ('(9606\.ENSP\d*)','STRING_ID'),
-      ('(CHEMBL\d*)','CHEMBL_ID'),
-      ('(DB\d*)','DRUGBANK_ID'),
-      ('([A-Z]\d\d\.[A-Z0-9]\d{2})','MEROPS_ID'),
-
-      ('[A-Z]*_[A-Z]*','MYCOCLAP_ID'),
-
-      ('(\d\.[A-Z](?:\.\d*){3})','TCDB_ID'),
-      ('\d{4}:([OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})','WORLD_2DPAGE_ID'),
-      ('ENS.?*G\d*','ENSEMBL_ID'),
-      ('ENS.?*P\d*','ENSEMBL_PRO_ID'),
-      ('ENS.?*T\d*','ENSEMBL_TRS_ID'),
-      (' ','ENSEMBLGENOME_ID'),
-      (' ','ENSEMBLGENOME_PRO_ID'),
-      (' ','ENSEMBLGENOME_TRS_ID'),
-      ('(hsa:\d*)','KEGG_ID'),
-      ('(uc\d*[a-z]*\.\d$)','UCSC_ID'),
-      ('VEL:J:LDKJFS','VECTORBASE_ID'),
-      ('AS\d*','ARACHNOSERVER_ID'),
-      ('CAL\d*','CGD'),
-      ('Y[A-Z]{2}[0-9]{3}[cw].*|Q\d{4}|R\d{4}[wc]','CYGD_ID'),
-      ('DDB_G\d*','DICTYBASE_ID'),
-      ('EB\d{4}','ECHOBASE_ID'),
-      ('EG\d{5}','ECOGENE_ID'),  
-      ('(?:HM|G[QU]|F[JMN]|E[FU]|DQ|A[A-Z])\d{6}|[DLMSUXYZ]\d{5}','EUHCVDB_ID'),
-      ('[A-Z][a-z]*DB:.*','EUPATHDB_ID'),
-      ('FBgn\d*','FLYBASE_ID'),
-      ('GC[A-Z0-9]{9}','GENECARDS_ID'),
-      ('(?:BSU\d|gbs|LIN|LMO|MUL_|MYPU_|pl[iu])\d{4}|MUP\d{3}c?','GENOLIST_ID'),
-      ('HIX\d*','H_INVDB_ID'),
-      ('HGNC:\d*','HGNC_ID'),
-      ('(?:CAB|HPA)\d{6}','HPA_ID'),
-      ('lp[lp]\d{4}','LEGIOLIST_ID'),
-      ('ML\d{4}','LEPROMA_ID'),
-      ('MGI:\d*','MGI_ID'),
-      ('NX_(?:[OPQ][0-9][A-Z0-9]{3}[0-9]|[A-NR-Z][0-9](?:[A-Z][A-Z0-9]{2}[0-9]){1,2})','NEXTPROT_ID'),
-      ('PA\d{3,5,9}','PHARMGKB_ID'),
-      ('SP.*\.\d\dc?,'POMBASE_ID'),
-      ('PA\d{4}','PSEUDOCAP_ID'),
-      ('S\d{9}','SGD_ID'),
-      ('AT.G\d{5}','TAIR_ID'),
-      ('Rv\d{4}c?','TUBERCULIST_ID'),
-      ('WBGene\d{8}','WORMBASE_ID'),
-      ('(\dR(SSE|\d\d?)|A[CH]\d\d?|[BC]\d\d[A-Z]\d)\.\d.[0-9a-z]?|CBG\d{5}|C[CD][48]\.\d.[a-z]?|CE7X_3\.1|cTel5\dX\.1[ab]?|D\d{4}\.\d.[a-z]?,'WORMBASE_ID'),
-      ('C(BP|E)\d{5}','WORMBASE_PRO_ID'),
-      ('XB-GENE-\d*','XENBASE_ID'),
-      ('ZDB-GENE-\d{6}-\d{4}','ZFIN_ID'),
-      
-
-      ('(.*[CKN]OG\d*)','EGGNOG_ID'),
-      ('(ENSGT\d*)','GENETREE_ID'),
-      ('HOG\d*','HOGENOM_ID'),
-      ('HBG\d*','HOVERGEN_ID'),
-
-      ('[A-Z]{7}','OMA_ID'),
-
-      ('EOG\d*','ORTHODB_ID'),
-      ('asdfsadfasdf','PROTCLUSTDB_ID'),
-      ('TF\d*','TREEFAM_ID'),
-      ('REACT_\d*','REACTOME_ID'),
-      ('asdfasl;DF:LJk','UNIPATHWAY_ID'),
-      ('HS_\d*','CLEANEX_ID'),
-      ('SAMEAS GENE NAME','CHITARS_ID'),
-      ('GENENAME_\(gene\)','GENEWIKI_ID'),
-    ]
-    # remove the need for .groups() (i.e. parantheses)
-    if re.match('\d*$', header): # For ambiguous number only ID types
-         numIDtypes = [
-           'P_ENTREZGENEID',
-           'P_GI',
-           'DMDM_ID',
-           'BIOGRID_ID',
-           'GUIDETOPHARMACOLOGY_ID',
-           'ALLERGOME_ID',
-           'PEROXIBASE_ID',
-           'REBASE_ID',
-           'DNASU_ID',
-           'GENOMERNAI_ID',
-           'NEXTBIO_ID',
-           'CONOSERVER_ID',
-           'GENEFARM_ID',
-           'MAIZEGDB_ID',
-           'MIM_ID',
-           'MGI_ID',
-           'ORPHANET_ID',
-           'RGD_ID']
-         ambiguous = []
-         for numIDs in numIDtypes:
-           nm = getIdMapping([header],numIDs,'ACC',ambiguity=True) 
-           if nm != None:
-              ambiguous.append(nm)
-         if ambiguous == []:
-           ambiguous.append('No Match')
-         return (header, ambiguous)
-    for pat,cat in fmts:
-      m = re.match(pat,header)
-      if m:
-        #return (m.groups()[0],[cat])
-        return (header,[cat])
-    return (header,['ACC+ID'])
-
-
-  def read_tabular(filepath,col):
-    accessions = []
-    with open(filepath) as fp:
-      for i,line in enumerate(fp):
-        if line.strip() == '' or line.startswith('#'):
-          continue
-        fields = line.rstrip('\n').split('\t')
-        accession = fields[col]
-        accessions.append(accession)
-    return accessions
-
-  def get_fasta_entries(fp):
-    name, seq = None, []
-    for line in fp:
-      line = line.rstrip()
-      if line.startswith(">"):
-        if name: yield (name, ''.join(seq))
-        name, seq = line, []
-      else:
-        seq.append(line)
-    if name: yield (name, ''.join(seq))
-
-  def read_fasta(filepath):
-    accessions = []
-    with open(filepath) as fp:
-      for id, peptide in get_fasta_entries(fp):
-        accessions.append(getFastaAccession(id))
-    return accessions
-
-  def read_mzid(fp):
-    accessions = []
-    for event, elem in ET.iterparse(fp):
-      if event == 'end':
-        if re.search('DBSequence',elem.tag):
-          accessions.append(elem.attrib['accession'])
-    return accessions
-
-  def read_pepxml(fp):
-    accessions = []
-    for event, elem in ET.iterparse(fp):
-      if event == 'end':
-        if re.search('search_hit',elem.tag):
-          accessions.append(elem.get('protein'))
-    return accessions
-
-  def getUniprotSequence(uniprot_id):
-    url = "http://www.uniprot.org/uniprot/%s.fasta" % uniprot_id 
-    print url
-    fp = urllib2.urlopen(url)
-    for id, seq in get_fasta_entries(fp):
-      if seq:
-        return seq
-    return ''
-
-
-
-
-  def getIdMapping(accessions,from_id,to_id,fh=None,idMap=None,ambiguity=None,crossReference=None,idMaps=None):
-    # print >> sys.stderr, "%s accessions(%d): %s ..." % (to_id,len(accessions),' '.join(accessions[:min(len(accessions),3)]))
-    if not accessions:
-      return
-    url = 'http://www.uniprot.org/mapping/'
-    # Cross Referencing: Mapping to non-UniprotKB ('ACC') IDs to other non-UniprotKB ('ACC') IDs
-    if to_id != 'ACC' and from_id != 'ACC':
-      crMap = {}
-      getIdMapping(accessions,from_id,'ACC',idMap=crMap)
-      crMap2 = crMap.copy()
-      for x in crMap.keys():
-         for y in crMap[x].keys():
-            for z in crMap[x][y]: 
-               crMap2[x][y] = []
-               getIdMapping([z],'ACC',to_id,idMap=crMap2,crossReference=[x,from_id])
-      idMap.update(crMap2)
-      return
-    params = {
-    'from': from_id,
-    'to': to_id,
-    'format':'tab',
-    'query': '\n'.join(accessions)
-    }
-    data = urllib.urlencode(params)
-    request = urllib2.Request(url, data)
-    contact = "" # Please set your email address here to help us debug in case of problems.
-    request.add_header('User-Agent', 'Python %s' % contact)
-    response = None
-    for i in range(3):
-      try:
-        response = urllib2.urlopen(request)
-        break
-      except Exception, e:
-        warn_err("%s",exit_code=None)
-    if response:
-      response.next()
-    print params
-
-    for line in response:
-      # print >> sys.stderr, "idMap: %s" % line
-      if fh:
-        fh.write(line)
-      if ambiguity: # if there was a response, then an ambiguous match can be made
-        return from_id
-      if idMap != None:
-        id1,id2 = line.strip().split('\t')
-        print id2
-        if crossReference != None:
-          id1, from_id = crossReference
-        # print >> sys.stderr, "idMap: %s:%s" % (id1,id2)
-        try:
-           idMap[id1][from_id].append(id2)
-        except:
-           idMap[id1] = {from_id:[id2]}
-    if ambiguity == None:
-      for line in response:
-        for acc in accessions:
-          idMap[acc] = {from_id:['N/A']}
-        return
-
-
-  #Parse Command Line
-  parser = optparse.OptionParser()
-  # input files
-  parser.add_option( '-t', '--tabular', dest='tabular', default=None, help='A tabular file that contains a peptide column' )
-  parser.add_option( '-c', '--column', dest='column', type='int', default=0, help='The column (zero-based) in the tabular file that contains peptide sequences' )
-  parser.add_option( '-f', '--fasta', dest='fasta', default=None, help='A fasta file containing peptide sequences' )
-  parser.add_option( '-m', '--mzid', dest='mzid', default=None, help='A mxIdentML file containing peptide sequences' )
-  parser.add_option( '-p', '--pepxml', dest='pepxml', default=None, help='A pepxml file containing peptide sequences' )
-  # Decoy pattern
-  parser.add_option( '-D', '--decoy', dest='decoy', default=None, help='Decoy pattern to be trimmed from IDs , e.g. _REVERSED' )
-  # filter patterns
-  parser.add_option( '-I', '--include', dest='include_pat', default=None, help='Include pattern to filter IDs' )
-  parser.add_option( '-X', '--exclude', dest='exclude_pat', default=None, help='Exclude pattern to filter IDs' )
-  # Unipept Flags
-  parser.add_option( '-F', '--from', dest='from_id', default='ACC+ID', choices=idDict.keys(), help='From ID type' )
-  parser.add_option( '-T', '--to', dest='to_id', default=[], action="append", choices=idDict.keys(), help='To ID type' )
-  # output files
-  parser.add_option( '-o', '--output', dest='output', default=None, help='Output file path for TAB-separated-values')
-  # parser.add_option( '-O', '--format', dest='format', default='tab', choices=['list','tab','json'], help='output format' )
-  parser.add_option( '-v', '--version', dest='version', action='store_true', default=False, help='print version and exit' )
-  (options, args) = parser.parse_args()
-  if options.version:
-    print >> sys.stdout,"%s" % version
-    sys.exit(0)
-
-  accessions = []
-  ## Get accessions
-  if options.mzid:
-    accessions += read_mzid(options.mzid)
-  if options.pepxml:
-    accessions += read_pepxml(options.pepxml)
-  if options.tabular:
-    accessions += read_tabular(options.tabular,options.column) 
-  if options.fasta:
-    accessions += read_fasta(options.fasta) 
-  if args and len(args) > 0:
-    for i,accession in enumerate(args):
-      accessions.append(accession) 
-  # filter accessions
-  if options.decoy:
-    filtered_accs = [re.sub(options.decoy,'',x) for x in accessions]
-    accessions = filtered_accs 
-  if options.include_pat:
-    filtered_accs = []
-    for acc in accessions:
-      if re.match(options.include_pat,acc):
-        filtered_accs.append(acc)
-    accessions = filtered_accs 
-  if options.exclude_pat:
-    filtered_accs = []
-    for acc in accessions:
-      if not re.match(options.exclude_pat,acc):
-        filtered_accs.append(acc)
-    accessions = filtered_accs 
-  if len(accessions) < 1:
-    warn_err("No accessions input!",exit_code=1)
-  if options.output != None:
-    try:
-      outputPath = os.path.abspath(options.output)
-      outputFile = open(outputPath, 'w')
-    except Exception, e:
-      print >> sys.stderr, "failed: %s" % e
-      exit(3)
-  else:
-    outputFile = sys.stdout
-
-
-  # Removes duplicates in accessions
-  seen = set()
-  seen_add = seen.add
-  accessions = [x for x in accessions if not (x in seen or seen_add(x))]
-  # Sorts accessions to inferred ID types i+n a dictionary
-  id_dict = {}
-  for header in accessions:
-      id , id_types = getAccession(header)
-      addAccession(id_dict,id_types,id)
-  idMaps = dict() # {to_id,idMap}
-  for to_id in options.to_id:
-    idMap = dict()
-    idMaps[to_id] = idMap
-    for (from_id,ids) in id_dict.items():
-      # limit the requests to 500 at a time
-      idx = range(0,len(ids),500)
-      idx.append(len(ids))
-      for i in range(len(idx)-1):
-        getIdMapping(ids[idx[i]:idx[i+1]],from_id,to_id,idMap=idMap,idMaps=idMaps)
-        print ids
-#Write output 
-  #Output Table Header
-  outputFile.write("\n#%-17s" % (options.from_id))
-  for t in options.to_id:
-    outputFile.write("%-18s" % t)
-  outputFile.write("\n" + ("=" * 18) + ("=" * 18 * len(options.to_id)) + "\n")
-
-  # Create an output-friendly matrix
-  idArray = [[[] for x in range(len(options.to_id))] for x in range(len(accessions))]
-  for a, acc in enumerate(accessions):
-     idLength = 0
-     for i, to_id in enumerate(options.to_id): # [[ids],[ids]]
-        idArrayColumn = []
-        idPairs = idMaps[to_id][acc] #{from_id:[IDs]} -> [from_id1,from_id2,from_id3]
-        for from_id in idPairs:
-            ids = idPairs[from_id]
-            for id_ in ids:
-                idArrayColumn.append("%s[%s]" % (id_,from_id))
-        if idLength < len(idArrayColumn):
-            idLength = len(idArrayColumn)
-        idArray[a][i].extend(idArrayColumn)
-     for y in range(idLength):
-        outputFile.write("%-18s" % acc)
-        for x in range(len(options.to_id)):
-           try:
-             outputFile.write("%-18s" % idArray[a][x][y])
-           except:
-             outputFile.write(" " * 18)
-        outputFile.write("\n")
-  # Output Matrix
-  
-                 
-
-  #print idMaps
- # python uniprot_id_mapping.py -T ACC -T PDB_ID -T ENSEMBL_PRO_ID -T ENSEMBL_TRS_ID -t test-data/old-inputs/var.tsv
-  stop = timeit.default_timer()
-  outputFile.write("%s %s %-s\n\n" % ("run time: ", stop - start, "seconds"))
-
-if __name__ == "__main__" : __main__()
-