Source code for schrodinger.application.macromodel.tools
"""
Useful functions for setting up MacroModel jobs.
Copyright Schrodinger, LLC. All rights reserved.
"""
# Contributors: K Shawn Watts
################################################################################
# Globals/Constants
################################################################################
################################################################################
# Packages
################################################################################
import os
import re
_version = '$Revision: 1.8.12.1 $'
################################################################################
# Functions
################################################################################
[docs]def count(mae_file=""):
    """
    Returns the total number of structures in a Maestro file.
    Uses structure.count_structures when possible.
    """
    try:
        import schrodinger.structure as structure
        return structure.count_structures(mae_file)
    except ImportError:
        return _count(mae_file) 
def _count(mae_file=""):
    """
    Deprecated by count.
    Returns the total number of full and partial CTs in the file.
    This is a simple grep statement that will fail if grep is not
    in your path, and worse, will miscount if the CTs have wicked
    values that match the [fp]_m_ct pattern.
    Replaced by a more robust structure.count_structures.
    """
    cmd = r"egrep -c '(}\s+)?[fp]_m_ct' %s" % mae_file
    # run command, capture stdout
    p = os.popen(cmd, 'r')
    count = p.readline()
    count = int(count.strip())
    p.close()
    return count
[docs]def serial_split(mae_file=""):
    """
    Returns a list of files generated after executing serial_split.
    The user must have the utility, or this will fail.  The useful
    bit is the returned list of file names.
    """
    mae_re = re.compile(r'.mae$')
    basename = mae_re.sub("", mae_file)
    basename += '_SerNo_'
    split_re = re.compile(r'_SerNo_\d+\.mae$')
    base_re = re.compile(basename)
    serial_split_files = []
    # Do the split with the existing utility which is fast, but does
    # not return anything useful
    cmd = " ".join([
        os.path.join(os.environ.get('SCHRODINGER'), 'utilities',
                     'serial_split'), mae_file, basename
    ])
    # ev45987 fixes for windows
    # Do commandline clean up ourselves as described by Aditya
    cmd = cmd.replace("\\", "\\\\")
    cmd = "%s" % cmd
    os.system(cmd)
    # Recover the output with some flimsy regexs
    for file in os.listdir(os.getcwd()):
        if base_re.match(file) and split_re.search(file):
            serial_split_files.append(file)
    return serial_split_files 
################################################################################
# Classes
################################################################################
# Deprecated GUI classes removed r2006-1.  Use schrodinger.ui package instead.
#EOF