Exemplo n.º 1
0
def compute_morgan_fingerprints(graph: nx.Graph, fingerprint_length: int, fingerprint_radius: int):
    """Get Morgan Fingerprint of a specific SMILES string.

    Adapted from: <https://github.com/google-research/google-research/blob/
    dfac4178ccf521e8d6eae45f7b0a33a6a5b691ee/mol_dqn/chemgraph/dqn/deep_q_networks.py#L750>

    Args:
      graph (nx.Graph): The molecule as a networkx graph
      fingerprint_length (int): Bit-length of fingerprint
      fingerprint_radius (int): Radius used to compute fingerprint
    Returns:
      np.array. shape = [hparams.fingerprint_length]. The Morgan fingerprint.
    """
    if graph is None:  # No smiles string
        return np.zeros((fingerprint_length,))
    molecule = convert_nx_to_rdkit(graph)
    if molecule is None:  # Invalid smiles string
        return np.zeros((fingerprint_length,))

    # Compute the fingerprint
    fingerprint = AllChem.GetMorganFingerprintAsBitVect(
        molecule, fingerprint_radius, fingerprint_length)
    arr = np.zeros((1,))

    # ConvertToNumpyArray takes ~ 0.19 ms, while
    # np.asarray takes ~ 4.69 ms
    DataStructs.ConvertToNumpyArray(fingerprint, arr)
    return arr
Exemplo n.º 2
0
    def _call(self, graph: nx.Graph) -> float:
        # Compute all the rewards
        mol = convert_nx_to_rdkit(graph)
        mw = Descriptors.MolWt(mol)
        pic50 = self.pic50_reward(graph)
        sim = self.similarity_reward(graph)

        # Normalize them
        mw_score = 1.0 / ((1 + np.exp(
            (self.mw_range[0] - mw) / self.mw_tol)) * (1 + np.exp(
                (mw - self.mw_range[1]) / self.mw_tol)))
        pic50_score = 1.0 / (1 + np.exp((8 - pic50) / self.pic50_tol))
        # Sim is already between [0, 1]

        # Combine them
        return sim + mw_score + pic50_score
Exemplo n.º 3
0
 def _call(self, graph: nx.Graph) -> float:
     mol = convert_nx_to_rdkit(graph)
     return QED.qed(mol)
Exemplo n.º 4
0
 def _call(self, graph: nx.Graph) -> float:
     mol = convert_nx_to_rdkit(graph)
     return calculateScore(mol)
Exemplo n.º 5
0
 def _call(self, graph: nx.Graph) -> float:
     mol = convert_nx_to_rdkit(graph)
     return Crippen.MolLogP(mol)