[Biopython] PDBid to Uniprot ID?
Nick Matzke
matzke at berkeley.edu
Wed Jul 29 00:38:44 EDT 2009
Peter wrote:
> On Wed, Jun 24, 2009 at 11:04 PM, Nick Matzke <matzke at berkeley.edu> wrote:
>> Hi all,
>>
>> I have succeeded in using the BioPython PDB parser to download a PDB file,
>> parse the structure, etc. But I am wondering if there is an easy way to retrieve
>> the UniProt ID that corresponds to the structure?
>>
>> I.e., if the structure is 1QFC...
>> http://www.pdb.org/pdb/explore/explore.do?structureId=1QFC
>>
>> ...the Uniprot ID is (click "Sequence" above): P29288
>> http://www.pdb.org/pdb/explore/remediatedSequence.do?structureId=1QFC
>>
>> I don't see a way to get this out of the current parser, so I guess I will schlep
>> through the downloaded structure file for "UNP P29288" unless someone
>> has a better idea.
>
> Well, I would at least look for a line starting "DBREF" and then search that
> for the reference.
>
> Right now the PDB header parsing is minimal, and even that was something
> of an after thought - Eric has been looking at this stuff recently, but I image
> he will be busy with his GSoC work at the moment. This could be handled
> as another tiny incremental addition to parse_pdb_header.py - right now I
> don't think it looks at the "DBREF" lines.
>
> Peter
I forgot to post to the list, I wrote a function for parsing the DBREF
line a couple of weeks ago, it should be pretty comprehensive as it uses
the official specifications for DBREF lines.
Here's the code to save other people re-inventing the wheel. Free to
use/modify/include in a biopython upgrade whatever...
===================
def parse_DBREF_line(line):
"""
Following format here:
http://www.wwpdb.org/documentation/format23/sect3.html
Record Format
COLUMNS DATA TYPE FIELD DEFINITION
----------------------------------------------------------------
1 - 6 Record name "DBREF "
8 - 11 IDcode idCode ID code of this entry.
13 Character chainID Chain identifier.
15 - 18 Integer seqBegin Initial sequence number
of the PDB sequence segment.
19 AChar insertBegin Initial insertion code
of the PDB sequence segment.
21 - 24 Integer seqEnd Ending sequence number
of the PDB sequence segment.
25 AChar insertEnd Ending insertion code
of the PDB sequence segment.
27 - 32 LString database Sequence database name.
34 - 41 LString dbAccession Sequence database
accession code.
43 - 54 LString dbIdCode Sequence database
identification code.
56 - 60 Integer dbseqBegin Initial sequence number
of the
database seqment.
61 AChar idbnsBeg Insertion code of
initial residue
of the segment, if PDB is the
reference.
63 - 67 Integer dbseqEnd Ending sequence number
of the
database segment.
68 AChar dbinsEnd Insertion code of the
ending
residue of the segment, if PDB is
the reference.
Database name database
(code in columns 27 - 32)
----------------------------------------------------------
GenBank GB
Protein Data Bank PDB
Protein Identification Resource PIR
SWISS-PROT SWS
TREMBL TREMBL
UNIPROT UNP
Test line:
line=" 1QFC A 1 306 UNP P29288 PPA5_RAT 22 327
"
"""
data_type_list = ['Record name',
'IDcode',
'Character',
'Integer',
'AChar',
'Integer',
'AChar',
'LString',
'LString',
'LString',
'Integer',
'AChar',
'Integer',
'AChar']
field_list = ['"DBREF "',
'idCode',
'chainID',
'seqBegin',
'insertBegin',
'seqEnd',
'insertEnd',
'database',
'dbAccession',
'dbIdCode',
'dbseqBegin',
'idbnsBeg',
'dbseqEnd',
'dbinsEnd']
def_list = ['',
'ID code of this entry.',
'Chain identifier.',
'Initial sequence number of the PDB sequence segment.',
'Initial insertion code of the PDB sequence segment.',
'Ending sequence number of the PDB sequence segment.',
'Ending insertion code of the PDB sequence segment.',
'Sequence database name.',
'Sequence database accession code.',
'Sequence database identification code.',
'Initial sequence number of the database seqment.',
'Insertion code of initial residue of the segment, if PDB is the
reference.',
'Ending sequence number of the database segment.',
'Insertion code of the ending residue of the segment, if PDB is the
reference.']
charpos_list = [(1,6),
(8,11),
(13,13),
(15,18),
(19,19),
(21,24),
(25,25),
(27,32),
(34,41),
(43,54),
(56,60),
(61,61),
(63,67),
(68,68)]
data_list = ['',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'',
'']
# Make empty dictionary
dbref_dict = {}
for index in range(0,len(field_list)):
dbref_dict[ field_list[index] ] = [ data_type_list[index],
charpos_list[index], data_list[index], def_list[index] ]
for field in field_list:
#print field
#print dbref_dict[field][1]
startpos = int(dbref_dict[field][1][0])
endpos = int(dbref_dict[field][1][1])
dbref_dict[field][2] = get_char_range(line, startpos, endpos)
return dbref_dict
===================
>
--
====================================================
Nicholas J. Matzke
Ph.D. Candidate, Graduate Student Researcher
Huelsenbeck Lab
Center for Theoretical Evolutionary Genomics
4151 VLSB (Valley Life Sciences Building)
Department of Integrative Biology
University of California, Berkeley
Lab websites:
http://ib.berkeley.edu/people/lab_detail.php?lab=54
http://fisher.berkeley.edu/cteg/hlab.html
Dept. personal page:
http://ib.berkeley.edu/people/students/person_detail.php?person=370
Lab personal page: http://fisher.berkeley.edu/cteg/members/matzke.html
Lab phone: 510-643-6299
Dept. fax: 510-643-6264
Cell phone: 510-301-0179
Email: matzke at berkeley.edu
Mailing address:
Department of Integrative Biology
3060 VLSB #3140
Berkeley, CA 94720-3140
-----------------------------------------------------
"[W]hen people thought the earth was flat, they were wrong. When people
thought the earth was spherical, they were wrong. But if you think that
thinking the earth is spherical is just as wrong as thinking the earth
is flat, then your view is wronger than both of them put together."
Isaac Asimov (1989). "The Relativity of Wrong." The Skeptical Inquirer,
14(1), 35-44. Fall 1989.
http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
====================================================
More information about the Biopython
mailing list