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)
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)
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)