Example #1
0
def toInChIKey(mol, backend='rdkit-first', aug_level=0):
    """
    Convert a molecular structure to an InChI Key string.
    For aug_level=0, generates the canonical InChI.
    For aug_level=1, appends the molecule multiplicity.
    For aug_level=2, appends positions of unpaired and paired electrons.

    Uses RDKit or OpenBabel for conversion.

    Args:
        backend     choice of backend, 'try-all', 'rdkit', or 'openbabel'
        aug_level   level of augmentation, 0, 1, or 2
    """
    cython.declare(key=str, ulayer=str, player=str, mlayer=str)

    if aug_level == 0:
        return _write(mol, 'inchikey', backend)

    elif aug_level == 1:
        key = toInChIKey(mol, backend=backend)

        mlayer = '-mult{0}'.format(mol.multiplicity) if mol.multiplicity != 0 else ''

        return key + mlayer

    elif aug_level == 2:
        key = toInChIKey(mol, backend=backend)

        ulayer, player = inchiutil.create_augmented_layers(mol)

        return inchiutil.compose_aug_inchi_key(key, ulayer, player)

    else:
        raise ValueError("Implemented values for aug_level are 0, 1, or 2.")
def toInChIKey(mol, backend='rdkit-first', aug_level=0):
    """
    Convert a molecular structure to an InChI Key string.
    For aug_level=0, generates the canonical InChI.
    For aug_level=1, appends the molecule multiplicity.
    For aug_level=2, appends positions of unpaired and paired electrons.

    Uses RDKit or OpenBabel for conversion.

    Args:
        backend     choice of backend, 'try-all', 'rdkit', or 'openbabel'
        aug_level   level of augmentation, 0, 1, or 2
    """
    cython.declare(key=str, ulayer=str, player=str, mlayer=str)

    if aug_level == 0:
        return _write(mol, 'inchikey', backend)

    elif aug_level == 1:
        key = toInChIKey(mol, backend=backend)

        mlayer = '-mult{0}'.format(mol.multiplicity) if mol.multiplicity != 0 else ''

        return key + mlayer

    elif aug_level == 2:
        key = toInChIKey(mol, backend=backend)

        ulayer, player = inchiutil.create_augmented_layers(mol)

        return inchiutil.compose_aug_inchi_key(key, ulayer, player)

    else:
        raise ValueError("Implemented values for aug_level are 0, 1, or 2.")
def toAugmentedInChIKey(mol):
    """
    Adds additional layers to the InChIKey,
    generating the "augmented" InChIKey.
    """

    cython.declare(key=str, ulayer=str)

    key = toInChIKey(mol)

    ulayer, player = create_augmented_layers(mol)

    return inchiutil.compose_aug_inchi_key(key, ulayer, player)
Example #4
0
def toAugmentedInChIKey(mol):
    """
    Adds an extra layer to the InChIKey denoting the multiplicity
    of the molecule.

    Simply append the multiplicity string, do not separate by a
    character like forward slash.
    """
    key = toInChIKey(mol)
    
    mult_layer = '-mult'+str(mol.multiplicity) 
    ulayer = [str(i+1) for i, at in enumerate(mol.atoms) if at.radicalElectrons > 0]
    ulayer = '-u' + ','.join(ulayer) if mol.getNumberOfRadicalElectrons() > 1 else None

    return compose_aug_inchi_key(key, mult_layer, ulayer)
Example #5
0
def toAugmentedInChIKey(mol):
    """
    Adds additional layers to the InChIKey,
    generating the "augmented" InChIKey.
    """
    
    cython.declare(
            key=str,
            ulayer=str
        )

    key = toInChIKey(mol)

    ulayer, player = create_augmented_layers(mol)

    return inchiutil.compose_aug_inchi_key(key, ulayer, player)