HackaMol::Atom - HackaMol Atom Class


version 0.051


   use HackaMol::Atom;
   use Math::Vector::Real;
   my $atom1 = HackaMol::Atom->new(
       name    => 'Zinc',
       coords  => [ V( 2.05274, 0.01959, -0.07701 ) ],
       Z       => 30,
   print $atom->symbol ; #prints "Zn"
   print "clean " unless $atom->is_dirty; #prints clean
   print $atom->Z ; #prints 80
   print "dirty " if $atom->is_dirty; #prints dirty


Central to HackaMol, the Atom class provides methods and attributes for a given atom. The Atom class consumes HackaMol::PhysVecMVRRole, HackaMol::PdbRole, and HackaMol::QmAtomRole. See the documentation of those roles for details. The Atom class adds attributes (such as symbol, Z, covalent_radius) and methods (such as change_symbol) specific to atoms. Creating an instance of an Atom object requires either the atomic number (Z) or symbol (symbol). The other attributes are lazily built when needed. The Atom class is flexible. The atom type can be changed in place (e.g. convert a zinc atom to a mercury atom, see SYNOPSIS), but changing the type of atom will set the is_dirty flag so that other objects using the atom have the ability to know whether atom-type dependent attributes need to be updated (e.g. forcefield parameters, etc.). Atom data is generated from the PeriodicTable module that borrows data from PerlMol. The PeriodicTable module is for data and will be dumped into a YAML file in the future.



no arguments. Changes the atom type using Z. change_Z calls _clean_atom which clears all attributes and sets calls is_dirty(1).


no arguments. Changes the atom type using symbol and is analogous to change_Z.



isa Bool that is lazy and rw. Default is 0. $self->is_dirty(1) called during the change_symbol and change_Z methods.


isa Str that is lazy and rw. _build_symbol builds the default.

Generating an atom instance with symbol, will run ucfirst(lc ($symbol)) to make sure the format is correct. Thus, creating an atom object is slightly slower with symbol than with Z. If Z is used to generate the instance of the Atom class (my $atom = Atom-new(Z=>1)>), the _build_symbol method generates the symbol from Z only when the symbol attribute is read (symbol attribute is lazy).


isa Int that is lazy and rw. _build_Z builds the default

Z is the Atomic number.


isa Num that is lazy and rw. _build_covalent_radius builds the default.

the covalent radii are taken from those tabulated in:

P. Pyykkoe, M. Atsumi (2009). "Molecular Single-Bond Covalent Radii for Elements 1 to 118". Chemistry: A European Journal 15: 186.

Covalent radii for double and triple bonds, generated from the same authors, are also tabulated but currently not used.


isa Num that is lazy and rw. _build_vdw_radius builds the default.

Atomic Van der Waals radii information will be revisited and revised. Included as reminder for now. See the source of for more information.


isa Num that is lazy with a default of 0. The value adjusted with public Counter traits:

  inc_bond_count    adds 1 by default
  dec_bond_count    subtracts 1 by default
  reset_bond_count   sets to zero





Demian Riccardi <>


This software is copyright (c) 2017 by Demian Riccardi.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.