def get_free_energy_in_solution_method3(
    vac_conf: Chem.Mol,
    m_vac: list,
    m_solv: list,
    solv_conf,
    correct_for_symmetry: bool = False,
):

    if correct_for_symmetry:
        entropy_corr = calc_molecular_graph_entropy(
            solv_conf)[0].value_in_unit(unit.kilocalorie_per_mole)
    else:
        entropy_corr = 0.0

    free_energy_in_solution = []
    # iterating over gas confs, adding energy in gas/solvation and free energy in gas for each conf
    for m_v, m_s in zip(m_vac, m_solv):
        G_gas = float(m_v.GetProp("G with S_rot corrected")) + entropy_corr
        E_gas = float(m_v.GetProp("E_B3LYP_631G_gas"))
        E_solv = float(m_s.GetProp("E_B3LYP_631G_solv"))

        free_energy_in_solution.append(
            (G_gas + (E_solv - E_gas)) * unit.kilocalorie_per_mole)

    mols, e_list = prune_conformers(vac_conf,
                                    free_energy_in_solution,
                                    rmsd_threshold=0.1)
    return e_list
def get_min_free_energy_in_solution_method1(m_solv: list,
                                            correct_for_symmetry: bool = False
                                            ):

    # getting min values for vac/solv energy and free energy in vac
    if correct_for_symmetry:
        entropy_corr = calc_molecular_graph_entropy(
            m_solv[0])[0].value_in_unit(unit.kilocalorie_per_mole)
    else:
        entropy_corr = 0.0
    G_solv_min = min([
        float(m.GetProp("G with S_rot corrected")) + entropy_corr
        for m in m_solv
    ])
    # getting min solvation free energty
    return G_solv_min * unit.kilocalorie_per_mole
def get_min_free_energy_in_solution_method3(
        m_vac: list,
        m_solv: list,
        solv_conf,
        correct_for_symmetry: bool = False):

    if correct_for_symmetry:
        entropy_corr = calc_molecular_graph_entropy(
            solv_conf)[0].value_in_unit(unit.kilocalorie_per_mole)
    else:
        entropy_corr = 0.0

    # getting min values for vac/solv energy and free energy in vac
    dE_vac_min = min([float(m.GetProp("E_B3LYP_631G_gas")) for m in m_vac])
    dE_solv_min = min([float(m.GetProp("E_B3LYP_631G_solv")) for m in m_solv])
    G_vac_min = min([
        float(m.GetProp("G with S_rot corrected")) + entropy_corr
        for m in m_vac
    ])
    # getting min solvation free energty
    return (G_vac_min + (dE_solv_min - dE_vac_min)) * unit.kilocalorie_per_mole
def get_free_energy_in_solution_method1(solv_conf: Chem.Mol,
                                        m_solv: list,
                                        correct_for_symmetry: bool = False):

    free_energy_in_solution = []
    if correct_for_symmetry:
        entropy_corr = calc_molecular_graph_entropy(
            solv_conf)[0].value_in_unit(unit.kilocalorie_per_mole)
    else:
        entropy_corr = 0.0

    # iterating over gas confs, adding energy in gas/solvation and free energy in gas for each conf

    for m in m_solv:
        G_solv = float(m.GetProp("G with S_rot corrected")) + entropy_corr
        free_energy_in_solution.append(G_solv * unit.kilocalorie_per_mole)

    mols, e_list = prune_conformers(solv_conf,
                                    free_energy_in_solution,
                                    rmsd_threshold=0.1)
    return e_list