| Chemistry-MacroMol documentation | Contained in the Chemistry-MacroMol distribution. |
Chemistry::MacroMol - Perl module for macromolecules
use Chemistry::MacroMol;
my $mol = Chemistry::MacroMol->new(name => 'my big molecule');
$mol->new_domain(name => "ASP"); # see Chemistry::Domain for details
my @domains = $mol->domains;
For the purposes of this module, a macromolecule is just a molecule that consists of several "domains". For example, a protein consists of aminoacid residues, or a nucleic acid consists of bases. Therefore Chemistry::MacroMol is derived from Chemistry::Mol, with additional methods to handle the domains.
The way things are currently structured, an atom in a macromolecule "belong" both to the MacroMol object and to a Domain object. This way you can get all the atoms in $protein via $protein->atoms, or to the atoms in residue 123 via $protein->domain(123)->atoms.
Remember that this class inherits all the methods from Chemistry::Mol. They won't be repeated here.
Create a new MacroMol object with the specified attributes. You can use the same attributes as for Chemistry::Mol->new.
Add one or more Domain objects to the molecule. Returns the last domain added.
Returns the domain class that a macromolecule class expects to use by default. Chemistry::MacroMol objects return "Chemistry::Domain", but subclasses will likely override this method.
Shorthand for $mol->add_domain($mol->domain_class->new(parent => $mol, name => value, ...));
Returns the domains with the given indices, or all by default. NOTE: the indices start from one (1), not from zero.
0.06
Ivan Tubert, <itub@cpan.org>
Copyright 2004 by Ivan Tubert
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Chemistry-MacroMol documentation | Contained in the Chemistry-MacroMol distribution. |
package Chemistry::MacroMol; $VERSION = '0.06'; # $Id: MacroMol.pm,v 1.6 2004/07/03 19:19:44 itubert Exp $ use 5.006; use strict; use warnings; use base qw(Chemistry::Mol);
sub new { my $class = shift; my %args = @_; my $self = bless $class->SUPER::new(), $class; $self->{domains} = []; $self->$_($args{$_}) for (keys %args); return $self; }
sub add_domain { my $self = shift; for my $b (@_){ push @{$self->{domains}}, $b; $self->{byId}{$b->{id}} = $b; } $_[-1]; }
sub domain_class { "Chemistry::Domain" }
sub new_domain { my $self = shift; $self->add_domain(Chemistry::Domain->new(parent => $self, @_)); }
sub domains { my $self = shift; if (@_) { my @doms = map {$_ - 1} @_; wantarray ? @{$self->{domains}}[@doms] : $self->{domains}[$doms[-1]]; } else { @{$self->{domains}}; # return all } } 1;