def get_charge(mol, property_name, do_charge): from rdkit.Chem import AllChem as Chem err = 0 # partial charges if do_charge is False: err = check_mol(mol, property_name, do_charge) if err == 0: # prepares molecule mol = Chem.RemoveHs(mol) n_at = mol.GetNumAtoms() # takes properties list_prop = mol.GetPropsAsDict() # extracts the property according to the set name string_values = list_prop[property_name] string_values = string_values.split("\n") w = np.asarray(map(float, string_values)) else: mol = Chem.AddHs(mol) n_at = mol.GetNumAtoms() w = np.ones((n_at, 1)) / n_at # same format as previous calculation w = np.asarray(map(float, w)) property_name = 'equal_w' err = 0 # extract properties for atom in range(n_at): mol.GetAtomWithIdx(atom).SetDoubleProp(property_name, w[atom]) mol = Chem.RemoveHs(mol) # Gasteiger-Marsili Charges elif (do_charge is True) and (err is 0): Chem.ComputeGasteigerCharges(mol) err = check_mol(mol, property_name, do_charge) return mol, property_name, err