[Bioperl-l] pdb files/structure system

Brian Osborne brian_osborne at cognia.com
Thu Jul 29 08:11:18 EDT 2004


Jurgen,

I'll put your example into the bptutorial and into a new examples/structure
directory, if you don't mind.

If anyone else has useful example code please post it, I'd be happy to add
it to examples/.


Brian O.


-----Original Message-----
From: bioperl-l-bounces at portal.open-bio.org
[mailto:bioperl-l-bounces at portal.open-bio.org]On Behalf Of Jurgen Pletinckx
Sent: Wednesday, July 28, 2004 6:16 PM
To: Douglas Kojetin; bioperl-l at bioperl.org
Subject: RE: [Bioperl-l] pdb files/structure system

| Can anyone point me towards a tutorial dealing with using Bioperl's
| Structure system?  I'm able to read in a PDB file and print out a
| sequence, but I cannot figure out how to extract atoms or coordinates
| from the one line examples given here:
|
| http://bioperl.org/Core/Latest/
| bptutorial.html#iii.9.1_using_3d_structure_objects_and_reading_pdb_files
| _(structurei,_structure::io)
| Using that example, I've tried setting $res to a number of things (1,
| MET1, MET-1, MET, etc.), but I think it's look for something more
| sophisticated (i.e. input from another system module)?

Yes. That example is pretty unenlightening. $res is a
Bio::Structure::Residue
object in that line. Here's one way to get at these objects:

#!/usr/bin/perl -w
use Bio::Structure::IO;
use strict;

my $structio = Bio::Structure::IO->new(-file => "/PDB/ca/pdb1cam.ent");
my $struc = $structio->next_structure;

for my $chain ($struc->get_chains)
{
        my $chainid = $chain->id;
        # one-letter chaincode if present, 'default' otherwise

        for my $res ($struc->get_residues($chain))
        {
                my $resid = $res->id;
                # format is 3-lettercode - dash - residue number, e.g.
PHE-20

                my $atoms = $struc->get_atoms($res);
                # actually a list of atom objects, used here to get a count

                print join "\t", $chainid,$resid,$atoms,"\n";
        }
}

That kind of loop over all objects is often sufficient for me. When I do
need direct access, I first construct an index:

my %resindex;
my %atindex;

for my $chain ($struc->get_chains)
{
        for my $res ($struc->get_residues($chain))
        {
                $resindex{$chain->id}{$res->id} = $res;
                for my $atom ($struc->get_atoms($res))
                {
                        $atindex{$chain->id}{$res->id}{$atom->id} = $atom;
                }

        }
}

print join "\t", $atindex{'default'}{'PHE-20'}{'CA'}->xyz,"\n";

and then use that for lookups. Yet another tool I would like to include into
the Bio::Structure modules. (as get_res_by_name?)

| Is there a HOWTO under development (or in the near future) for the
| Structure system?

There wasn't, actually. Perhaps there should be. I find myself rather
reticent
to enshrine the current sad state of affairs by describing the workarounds
:/

--
Jurgen Pletinckx        AlgoNomics NV
jurgen.pletinckx at algonomics.com


_______________________________________________
Bioperl-l mailing list
Bioperl-l at portal.open-bio.org
http://portal.open-bio.org/mailman/listinfo/bioperl-l




More information about the Bioperl-l mailing list