NAME
HackaMol::X::Calculator - Abstract calculator class for HackaMol
VERSION
version 0.012
SYNOPSIS
use Modern::Perl;
use HackaMol;
use HackaMol::X::Calculator;
use Path::Tiny;
my $path = shift || die "pass path to gaussian outputs";
my $hack = HackaMol->new( data => $path, );
foreach my $out ( $hack->data->children(qr/\.out$/) ) {
my $Calc = HackaMol::X::Calculator->new(
out_fn => $out,
map_out => \&output_map,
);
my $energy = $Calc->map_output(627.51);
printf( "%-40s: %10.6f\n", $Calc->out_fn->basename, $energy );
}
# our function to map molec info from output
sub output_map {
my $calc = shift;
my $conv = shift;
my $re = qr/-\d+.\d+/;
my @energys = $calc->out_fn->slurp =~ m/SCF Done:.*(${re})/g;
return ( $energys[-1] * $conv );
}
DESCRIPTION
The HackaMol::X::Calculator extension generalizes molecular calculations using external programs. The Calculator class consumes the HackaMol::X::Roles::ExtensionRole role, which manage the running of executables... perhaps on files; perhaps in directories. This extension is intended to provide a simple example of interfaces with external programs. This is a barebones use of the ExtensionRole that is intended to be flexible. See the examples and testing directory for use of the map_in and map_out functions inside and outside of the map_input and map_output functions. Extensions with more rigid and encapsulated APIs can evolve from this starting point. In the synopsis, a Gaussian output is processed for the SCF Done value (a classic scripting of problem computational chemists). See the examples and tests to learn how the calculator can be used to:
1. generate inputs
2. run programs
3. process outputs
via interactions with HackaMol objects.
ATTRIBUTES
scratch
If scratch is set, the object will build that directory if needed. See HackaMol::PathRole for more information about the scratch attribute.
SEE ALSO
EXTENDS
CONSUMES
AUTHOR
Demian Riccardi <demianriccardi@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2015 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.