HackaMol-X-Calculator

VERSION

developer version 0.00_1 Available for testing from cpan.org:

please see *HackaMol::X::Calculator on MetaCPAN for formatted documentation.

SYNOPSIS

   use Modern::Perl;
   use HackaMol;
   use HackaMol::X::Calculator;

   my $hack = HackaMol -> new( 
                         name => "hackitup" , 
                         data => "local_pdbs",
   );

   my $i = 0;

   foreach my $pdb ( $hack -> data -> children( qr/\.pdb$/ ) ){

     my $mol = $hack -> read_file_mol( $pdb );

     my $Calc = HackaMol::X::Calculator -> new (
                molecule => $mol,
                scratch  => 'realtmp/tmp',
                in_fn    => 'calc.inp'
                out_fn   => "calc-$i.out"
                map_in   => \&input_map,
                map_out  => \&output_map,
                exe      => '~/bin/xyzenergy < ', 
     );     

     $Calc -> map_input;
     $Calc -> capture_sys_command;
     my $energy = $Calc -> map_output(627.51);

     printf ("Energy from xyz file: %10.6f\n", $energy);

     $i++;

   }

   #  our functions to map molec info to input and from output
   sub input_map {
     my $calc = shift;
     $calc -> mol -> print_xyz( $calc -> in_fn );
   }

   sub output_map {
     my $calc   = shift;
     my $conv   = shift;
     my @eners  = map { /ENERGY= (-\d+.\d+)/; $1*$conv } $calc -> out_fn -> lines; 
     return pop @eners;
   }

DESCRIPTION

Abstract calculator class for HackaMol. The HackaMol::X::Calculator extension generalizes molecular calculations using external programs. The Calculator class consumes roles provided by the HackaMol core that manages the running of executables... perhaps on files; perhaps in directories. This extension is intended to provide a simple example of interfaces with external programs. It is probably a little too flexible. New extensions can evolve from this starting point, in scripts, to more rigid encapsulated classes.