[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