Class Bio::PDB::Chain
In: lib/bio/db/pdb/chain.rb  (CVS)
Parent: Object

Bio::PDB::Chain is a class to store a chain.

The object would contain some residues (Bio::PDB::Residue objects) and some heterogens (Bio::PDB::Heterogen objects).

Methods

Included Modules

Utils AtomFinder ResidueFinder HetatmFinder HeterogenFinder Enumerable Comparable

External Aliases

chain_id -> id
  alias

Attributes

chain_id  [RW]  Identifier of this chain
heterogens  [R]  heterogens in this chain
model  [R]  the model to which this chain belongs.
residues  [R]  residues in this chain

Public Class methods

Creates a new chain object.

[Source]

# File lib/bio/db/pdb/chain.rb, line 40
      def initialize(id = nil, model = nil)
        
        @chain_id  = id
        
        @model    = model
        
        @residues   = []
        @residues_hash = {}
        @heterogens = []
        @heterogens_hash = {}
      end

Public Instance methods

Operator aimed to sort based on chain id

[Source]

# File lib/bio/db/pdb/chain.rb, line 166
      def <=>(other)
        return @chain_id <=> other.chain_id
      end

get the residue by id.

Compatibility Note: Now, you cannot find HETATMS in this method. To add "LIGAND" to the id is no longer available. To get heterogens, you must use get_heterogen_by_id.

[Source]

# File lib/bio/db/pdb/chain.rb, line 77
      def [](key)
        get_residue_by_id(key)
      end

gets an amino acid sequence of this chain from ATOM records

[Source]

# File lib/bio/db/pdb/chain.rb, line 182
      def aaseq
        unless defined? @aaseq
          string = ""
          last_residue_num = nil
          @residues.each do |residue|
            if last_residue_num and 
                (x = (residue.resSeq.to_i - last_residue_num).abs) > 1 then
              x.times { string << 'X' }
            end
            tlc = residue.resName.capitalize
            olc = (Bio::AminoAcid.three2one(tlc) or 'X')
            string << olc
          end
          @aaseq = Bio::Sequence::AA.new(string)
        end
        @aaseq
      end

Add a heterogen (ligand) to this chain

[Source]

# File lib/bio/db/pdb/chain.rb, line 100
      def addLigand(ligand)
        raise "Expecting a Bio::PDB::Residue" unless ligand.is_a? Bio::PDB::Residue
        @heterogens.push(ligand)
        if @heterogens_hash[ligand.residue_id] then
          $stderr.puts "Warning: heterogen_id (residue_id) #{ligand.residue_id.inspect} is already used" if $VERBOSE
        else
          @heterogens_hash[ligand.residue_id] = ligand
        end
        self
      end

Add a residue to this chain

[Source]

# File lib/bio/db/pdb/chain.rb, line 88
      def addResidue(residue)
        raise "Expecting a Bio::PDB::Residue" unless residue.is_a? Bio::PDB::Residue
        @residues.push(residue)
        if @residues_hash[residue.residue_id] then
          $stderr.puts "Warning: residue_id #{residue.residue_id.inspect} is already used" if $VERBOSE
        else
          @residues_hash[residue.residue_id] = residue
        end
        self
      end
atom_seq()

Alias for aaseq

Iterates over each residue

[Source]

# File lib/bio/db/pdb/chain.rb, line 154
      def each(&x) #:yields: residue
        @residues.each(&x)
      end

Iterates over each hetero-compound

[Source]

# File lib/bio/db/pdb/chain.rb, line 161
      def each_heterogen(&x) #:yields: heterogen
        @heterogens.each(&x)
      end
each_residue()

Alias for each

get the heterogen (ligand) by id

[Source]

# File lib/bio/db/pdb/chain.rb, line 82
      def get_heterogen_by_id(key)
        #@heterogens.find { |r| r.residue_id == key }
        @heterogens_hash[key]
      end

get the residue by id

[Source]

# File lib/bio/db/pdb/chain.rb, line 67
      def get_residue_by_id(key)
        #@residues.find { |r| r.residue_id == key }
        @residues_hash[key]
      end

returns a string containing human-readable representation of this object.

[Source]

# File lib/bio/db/pdb/chain.rb, line 177
      def inspect
        "#<#{self.class.to_s} id=#{chain_id.inspect} model.serial=#{(model ? model.serial : nil).inspect} residues.size=#{residues.size} heterogens.size=#{heterogens.size} aaseq=#{aaseq.inspect}>"
      end

rehash residues hash and heterogens hash

[Source]

# File lib/bio/db/pdb/chain.rb, line 148
      def rehash
        rehash_residues
        rehash_heterogens
      end

rehash heterogens hash

[Source]

# File lib/bio/db/pdb/chain.rb, line 130
      def rehash_heterogens
        begin
          heterogens_bak = @heterogens
          heterogens_hash_bak = @heterogens_hash
          @heterogens = []
          @heterogens_hash = {}
          heterogens_bak.each do |heterogen|
            self.addLigand(heterogen)
          end
        rescue RuntimeError
          @heterogens = heterogens_bak
          @heterogens_hash = heterogens_hash_bak
          raise
        end
        self
      end

rehash residues hash

[Source]

# File lib/bio/db/pdb/chain.rb, line 112
      def rehash_residues
        begin
          residues_bak = @residues
          residues_hash_bak = @residues_hash
          @residues = []
          @residues_hash = {}
          residues_bak.each do |residue|
            self.addResidue(residue)
          end
        rescue RuntimeError
          @residues = residues_bak
          @residues_hash = residues_hash_bak
          raise
        end
        self
      end

Stringifies each residue

[Source]

# File lib/bio/db/pdb/chain.rb, line 171
      def to_s
        @residues.join('') + "TER\n" + @heterogens.join('')
      end

[Validate]