Beispiel #1
0
def _logParser(fname):
    import re
    unknownres_regex = re.compile('Unknown residue:\s+(\w+)')
    missingparam_regex = re.compile(
        'For atom: (.*) Could not find vdW \(or other\) parameters for type:\s+(\w+)'
    )
    missingtorsion_regex = re.compile('No torsion terms for\s+(.*)$')
    missingbond_regex = re.compile(
        'Could not find bond parameter for:\s+(.*)$')
    missingangle_regex = re.compile('Could not find angle parameter:\s+(.*)$')
    missingatomtype_regex = re.compile(
        'FATAL:\s+Atom (.*) does not have a type')

    unknownres = []
    missingparam = []
    missingtorsion = []
    missingbond = []
    missingangle = []
    missingatomtype = []
    with open(fname, 'r') as f:
        for line in f:
            if unknownres_regex.search(line):
                unknownres.append(unknownres_regex.findall(line)[0])
            if missingparam_regex.search(line):
                missingparam.append(missingparam_regex.findall(line)[0])
            if missingtorsion_regex.search(line):
                missingtorsion.append(missingtorsion_regex.findall(line)[0])
            if missingbond_regex.search(line):
                missingbond.append(missingbond_regex.findall(line)[0])
            if missingangle_regex.search(line):
                missingangle.append(missingangle_regex.findall(line)[0])
            if missingatomtype_regex.search(line):
                missingatomtype.append(missingatomtype_regex.findall(line)[0])

    errors = []
    if len(unknownres):
        errors.append(
            UnknownResidueError(
                'Unknown residue(s) {} found in the input structure. '
                'You are either missing a topology definition for the residue or you need to '
                'rename it to the correct residue name'.format(
                    np.unique(unknownres))))
    if len(missingparam):
        errors.append(
            MissingParameterError(
                'Missing parameters for atom {} and type {}'.format(
                    missingparam, missingparam)))
    if len(missingtorsion):
        errors.append(
            MissingTorsionError(
                'Missing torsion terms for {}'.format(missingtorsion)))
    if len(missingbond):
        errors.append(
            MissingBondError(
                'Missing bond parameters for {}'.format(missingbond)))
    if len(missingangle):
        errors.append(
            MissingAngleError(
                'Missing angle parameters for {}'.format(missingangle)))
    if len(missingatomtype):
        errors.append(
            MissingAtomTypeError(
                'Missing atom type for {}'.format(missingatomtype)))

    return errors