/usr/share/pyshared/cclib/parser/ccopen.py is in python-cclib 1.1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | # This file is part of cclib (http://cclib.sf.net), a library for parsing
# and interpreting the results of computational chemistry packages.
#
# Copyright (C) 2009, the cclib development team
#
# The library is free software, distributed under the terms of
# the GNU Lesser General Public version 2.1 or later. You should have
# received a copy of the license along with cclib. You can also access
# the full license online at http://www.gnu.org/copyleft/lgpl.html.
__revision__ = "$Revision: 992 $"
import types
import logfileparser
import adfparser
import gamessparser
import gamessukparser
import gaussianparser
import jaguarparser
import molproparser
import orcaparser
def ccopen(source, *args, **kargs):
"""Guess the identity of a particular log file and return an instance of it.
Inputs:
source - a single logfile, a list of logfiles, or an input stream
Returns:
one of ADF, GAMESS, GAMESS UK, Gaussian, Jaguar, Molpro, ORCA, or
None (if it cannot figure it out or the file does not exist).
"""
filetype = None
# Try to open the logfile(s), using openlogfile.
if isinstance(source, types.StringTypes) or \
isinstance(source, list) and all([isinstance(s, types.StringTypes) for s in source]):
try:
inputfile = logfileparser.openlogfile(source)
except IOError, (errno, strerror):
print "I/O error %s (%s): %s" % (errno, source, strerror)
return None
isstream = False
elif hasattr(source, "read"):
inputfile = source
isstream = True
else:
raise ValueError
# Read through the logfile(s) and search for a clue.
for line in inputfile:
if line.find("Amsterdam Density Functional") >= 0:
filetype = adfparser.ADF
break
# Don't break in this case as it may be a GAMESS-UK file.
elif line.find("GAMESS") >= 0:
filetype = gamessparser.GAMESS
# This can break, since it is non-GAMESS-UK specific.
elif line.find("GAMESS VERSION") >= 0:
filetype = gamessparser.GAMESS
break
elif line.find("G A M E S S - U K") >= 0:
filetype = gamessukparser.GAMESSUK
break
elif line.find("Gaussian, Inc.") >= 0:
filetype = gaussianparser.Gaussian
break
elif line.find("Jaguar") >= 0:
filetype = jaguarparser.Jaguar
break
elif line.find("PROGRAM SYSTEM MOLPRO") >= 0:
filetype = molproparser.Molpro
break
# Molpro log files don't have the line above. Set this only if
# nothing else is detected, and notice it can be overwritten,
# since it does not break the loop.
elif line[0:8] == "1PROGRAM" and not filetype:
filetype = molproparser.Molpro
elif line.find("O R C A") >= 0:
filetype = orcaparser.ORCA
break
# Need to close file before creating a instance.
if not isstream:
inputfile.close()
# Return an instance of the chosen class.
try:
return filetype(source, *args, **kargs)
except TypeError:
print "Log file type not identified."
raise
|