The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

HackaMol::Roles::BondsAnglesDihedralsRole - Array traits for containers of HackaMol Bonds, Angles, Dihedrals.

VERSION

version 0.044

DESCRIPTION

The HackaMol BondsAnglesDihedralsRole provides ARRAY trait methods for interacting with arrays of bonds angles and dihedrals. The Molecule class consumes this role. The Atom class does not. Thus, Molecules are responsible for reporting multiple bonded connections for any given atom.

ARRAY METHODS

push_bonds, get_bonds, set_bonds, all_bonds, count_bonds, delete_bonds, clear_bonds

ARRAY traits for the bonds attribute, respectively: push, get, set, elements, count, delete, clear

push_bonds

push bond on to bonds array

  $group->push_bonds($bond1, $bond2, @otherbonds);

all_bonds

returns array of all elements in bonds array

  print $_->bond_order, "\n" foreach $group->all_bonds; 

get_bonds

return element by index from bonds array

  print $group->get_bonds(1); # returns $bond2 from that pushed above

set_bonds

set bonds array by index

  $group->set_bonds(1, $bond1);

count_bonds

return number of bonds in the array

  print $group->count_bonds; 

delete_bonds

deletes bond from bonds array and returns it.

clear_bonds

clears bonds array

push_angles, get_angles, set_angles, all_angles, count_angles, delete_angles, clear_angles

ARRAY traits for the bonds attribute, respectively: push, get, set, elements, count, delete, clear

Analogous to those for bonds.

push_dihedrals, get_dihedrals, set_dihedrals, all_dihedrals, count_dihedrals, delete_dihedrals, clear_dihedrals

ARRAY traits for the bonds attribute, respectively: push, get, set, elements, count, delete, clear

Analogous to those for bonds.

SYNOPSIS use HackaMol::Atom; use HackaMol::Angle; use HackaMol::Dihedral;

    my $atom1 = HackaMol::Atom->new(
        name    => 'O1',
        coords  => [ V( 2.05274, 0.01959, -0.07701 ) ],
        Z       => 8,
    );
    
    my $atom2 = HackaMol::Atom->new(
        name    => 'H1',
        coords  => [ V( 1.08388, 0.02164, -0.12303 ) ],
        Z       => 1,
    );
    
    my $atom3 = HackaMol::Atom->new(
        name    => 'H2',
    coords  => [ V( 2.33092, 0.06098, -1.00332 ) ],
    Z       => 1,
    );
    
    my $atom4 = HackaMol::Atom->new(
        name    => 'Cl',
        coords  => [ V(-0.91386, 0.02587, -0.21792 ) ],
        Z       => 17,
    );
    
    my @atoms = ($atom1,$atom2,$atom3,$atom4);
    
    my $bond1 = HackaMol::Angle->new(name=> 'test', atoms[@atoms[0,1]]);
    my $bond2 = HackaMol::Angle->new(name=> 'test', atoms[@atoms[0,2]]);
    
    my @bonds = $atom1->all_bonds;

    my $angle1 = HackaMol::Angle->new(name=> 'test', atoms[@atoms[1,0,2]]);
    my $angle2 = HackaMol::Angle->new(name=> 'test', atoms[@atoms[0,1,3]]);
    
    my @angles = $atom1->all_angles;
    
    my $dihe1  = HackaMol::Dihedral->new(name=> 'test', atoms[@atoms]);
    my $dihe2  = HackaMol::Dihedral->new(name=> 'test', atoms[reverse @atoms]);
    
    my @dihes  = $atom1->all_dihedrals;

SEE ALSO

AUTHOR

Demian Riccardi <demianriccardi@gmail.com>

COPYRIGHT AND LICENSE

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.