Chemistry::File::QChemOut - Q-Chem ouput molecule format reader


Chemistry-File-QChemOut documentation Contained in the Chemistry-File-QChemOut distribution.

Index


Code Index:

NAME

Top

Chemistry::File::QChemOut - Q-Chem ouput molecule format reader

SYNOPSIS

Top

    use Chemistry::File::QChemOut;

    # read an QChemOut file
    my $mol = Chemistry::Mol->read("myfile.out", format => 'qchemout');

    # read all the intermediate structures (e.g., optimization steps)
    my $mol = Chemistry::Mol->read("myfile.out", 
        format => 'chemout', all => 1);

DESCRIPTION

Top

This module reads Q-Chem output files. It automatically registers the 'qchemout' format with Chemistry::Mol, so that Q-Chem outuput files may be identified and read using Chemistry::Mol->read().

The current version of this reader simply extracts the cartesian coordinates and symbols from the Q-Chem outuput file. All other information is ignored.

INPUT OPTIONS

Top

all

If true, read all the intermediate structures, as in a structure optimization. This causes $mol->read to return an array instead of a single molecule. Default: false.

VERSION

Top

0.10

SEE ALSO

Top

Chemistry::Mol, http://www.perlmol.org/.

AUTHOR

Top

Ivan Tubert-Brohman <itub@cpan.org>


Chemistry-File-QChemOut documentation Contained in the Chemistry-File-QChemOut distribution.
package Chemistry::File::QChemOut;

$VERSION = '0.10';
# $Id: QChemOut.pm,v 1.1.1.1 2006/10/04 16:13:50 itubert Exp $

use base qw(Chemistry::File);
use Chemistry::Mol;
use Carp;
use strict;
use warnings;

Chemistry::Mol->register_format(qchemout => __PACKAGE__);

sub parse_string {
    my ($class, $s, %opts) = @_;

    my $mol_class  = $opts{mol_class}  || 'Chemistry::Mol';
    my $atom_class = $opts{atom_class} || $mol_class->atom_class;

    my @coord_blocks = $s =~ m{
                Standard\ Nuclear\ Orientation
                .*? 
                ----
                (?:\n|\r\n?)
                (.*?)           # coordinate block
                \ ----
        }smxg;

    croak "no coordinates found" unless @coord_blocks;

    unless ($opts{all}) {
        # keep only the last block
        splice @coord_blocks, 0, @coord_blocks - 1;
    }

    my @mols;
    for my $block (@coord_blocks) {
        my $mol = $mol_class->new();
        my @lines = split /(?:\n|\r\n?)/, $block;

        my $i = 0;
        for my $line (@lines) {
            $i++;
            $line =~ s/^\s+//;
            my ($n, $symbol, $x, $y, $z) = split ' ', $line;

            my $atom = $mol->new_atom(
                symbol => $symbol, 
                coords => [$x, $y, $z],
            );
        }
        push @mols, $mol;
    }

    return $opts{all} ? @mols : $mols[0];
}

sub name_is {
    my ($class, $fname) = @_;
    return;
    $fname =~ /\.xyz$/i;
}

sub file_is {
    my ($class, $fname) = @_;
    return;
    $fname =~ /\.xyz$/i;
}

sub write_string {
    my ($class, $mol, %opts) = @_;

    croak "QChemOut writing not implemented";
}

1;