[BioRuby] Bug in writing PDB ATOM

GOTO Naohisa ngoto at gen-info.osaka-u.ac.jp
Wed Mar 28 10:50:45 UTC 2007


Hi, Yen-Ju,

I changed pdb.rb in the CVS and the bug is fixed,
although it may still fail in few exceptional ATOM/HETATM lines.

http://code.open-bio.org/cgi/viewcvs.cgi/*checkout*/bioruby/lib/bio/db/pdb/pdb.rb?rev=HEAD&cvsroot=bioruby&content-type=text/plain

Thank you,

Naohisa Goto
ng at bioruby.org / ngoto at gen-info.osaka-u.ac.jp

On Sat, 10 Feb 2007 06:13:25 -0800
"Yen-Ju Chen" <yjchenx at gmail.com> wrote:

> On 2/9/07, GOTO Naohisa <ngoto at gen-info.osaka-u.ac.jp> wrote:
> > Hi, Yen-Ju,
> >
> > Which bioruby version do you use?
> > By using CVS HEAD 'pdb.rb,v 1.16 2006/06/27 14:23:45',
> > it seems fine.
> 
> I tried both 1.0 and CVS.
> And your example indeed works fine.
> Here is the data and script I used:
> 
> ATOM      1  CB  TYR A   4      46.803  20.433  46.159  1.00130.00
> ATOM      2  CG  TYR A   4      46.708  19.122  46.931  1.00130.00
> ATOM      3  CD1 TYR A   4      46.708  17.892  46.257  1.00130.00
> ATOM      4  CE1 TYR A   4      46.596  16.691  46.961  1.00130.00
> ATOM      5  CD2 TYR A   4      46.599  19.109  48.336  1.00130.00
> 
> #########
> require 'bio'
> 
> file = File.new('a.pdb').gets(nil)
> structure = Bio::PDB.new(file)
> 
> structure.each do |model|
>   model.each do |chain|
>     chain.each do |residue|
>       residue.each do |atom|
>         atom.resSeq += 400
>       end
>     end
>   end
> end
> 
> File.open('x.pdb', 'w') do |file|
>   file << structure.to_s
> end
> 
> Yen-Ju
> 
> >
> > #### sample script
> >   require 'bio'
> >   atom = Bio::PDB::Record::ATOM.new
> >   atom.serial = 61
> >   atom.name = 'OD1'
> >   atom.altLoc = ''
> >   atom.resName = 'ASN'
> >   atom.chainID = 'A'
> >   atom.resSeq = 8
> >   atom.iCode = ''
> >   atom.x = 102.025
> >   atom.y = 27.929
> >   atom.z = 144.984
> >   atom.occupancy = 1.0
> >   atom.tempFactor = 88.56
> >   atom.segID = ''
> >   atom.element = 'O'
> >   atom.charge = ''
> >   print atom.to_s
> >   # "ATOM     61  OD1 ASN A   8     102.025  27.929 144.984  1.00 88.56  O  \n"
> > #### end of sample script
> >
> > However, it still fails in some rare cases.
> >
> >   require 'bio'
> >   # record from PDB 1CX1
> >   str = "ATOM    376 HH   TYR A  25       " +
> >           "4.479  12.801  -3.919  1.00  1.72           H  "
> >   atom = Bio::PDB::Record::ATOM.new.initialize_from_string(str)
> >   print atom.to_s
> >   #
> >   # "ATOM    376  HH  TYR A  25       4.479  12.801  -3.919  1.00  1.72  H  \n"
> >   #              ^ an excess space!!
> >
> > I'll make changes in the CVS to give more accurate results,
> > but it'll be still imperfect (becase of ambiguity, as Alex said).
> >
> > Thanks,
> >
> > Naohisa Goto
> > ng at bioruby.org / ngoto at gen-info.osaka-u.ac.jp
> >
> > On Thu, 8 Feb 2007 14:54:09 -0800
> > "Yen-Ju Chen" <yjchenx at gmail.com> wrote:
> >
> > > In bio/db/pdb/pdb.rb line 1019,
> > > the ATOM entry is written as:
> > >
> > >           sprintf("%-6s%5d %-4s%-1s%3s %-1s%4d%-1s
> > >
> > > It results an ATOM entry as:
> > > ATOM     61 OD1  ASN A   8     102.025  27.929 144.984  1.00 88.56           O
> > >
> > > But the right ATOM entry should be
> > > ATOM     61  OD1 ASN A   8     102.025  27.929 144.984  1.00 88.56           O
> > >
> > > Note there are 2 spaces after '61' and one space before 'ASN'
> > > I change this line to:
> > >
> > >           sprintf("%-6s%5d  %-3s%-1s%3s %-1s%4d%-1s
> > >
> > > and it works fine now.
> > > But I am new to Ruby and not familiar with the format yet.
> > >
> > > Yen-Ju
> > > _______________________________________________
> > > BioRuby mailing list
> > > BioRuby at lists.open-bio.org
> > > http://lists.open-bio.org/mailman/listinfo/bioruby
> > >
> >
> 



More information about the BioRuby mailing list