Skip to content

Commit e871411

Browse files
Merge pull request #611 from carlocamilloni/new_dih
extended fix to learning
2 parents 137613d + 2bc1de1 commit e871411

3 files changed

Lines changed: 30 additions & 61 deletions

File tree

src/multiego/ensemble.py

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -775,26 +775,21 @@ def init_LJ_datasets(meGO_ensemble, matrices, pairs14, exclusion_bonds14, args):
775775
OO_mask = masking.create_linearized_mask(
776776
type_ai_mapped.to_numpy(),
777777
type_aj_mapped.to_numpy(),
778-
[("O", "O"), ("OM", "OM"), ("O", "OM")],
778+
[("O", "O"), ("O", "OM")],
779779
symmetrize=True,
780780
)
781-
782-
# hydrongen-oxygen attraction
783-
HO_mask = masking.create_linearized_mask(
781+
OMOM_mask = masking.create_linearized_mask(
784782
type_ai_mapped.to_numpy(),
785783
type_aj_mapped.to_numpy(),
786-
[("H", "O"), ("H", "OM"), ("H", "OA")],
784+
[("OM", "OM")],
787785
symmetrize=True,
788786
)
789787

790-
# oxygen-nitrogen repulsion (when not attractive)
791-
ON_mask = masking.create_linearized_mask(
788+
# hydrongen-oxygen attraction
789+
HO_mask = masking.create_linearized_mask(
792790
type_ai_mapped.to_numpy(),
793791
type_aj_mapped.to_numpy(),
794-
[
795-
("O", "N"),
796-
("OM", "N"),
797-
],
792+
[("H", "O"), ("H", "OM"), ("H", "OA")],
798793
symmetrize=True,
799794
)
800795

@@ -805,11 +800,11 @@ def init_LJ_datasets(meGO_ensemble, matrices, pairs14, exclusion_bonds14, args):
805800

806801
# TODO
807802
# here we should iterate over the pairs in type definition amd generate the repulsions
808-
# NL-NZ repulsion
803+
# NL-NL repulsion
809804
NN_mask = masking.create_linearized_mask(
810805
type_ai_mapped.to_numpy(),
811806
type_aj_mapped.to_numpy(),
812-
[("NL", "NL"), ("NZ", "NZ"), ("NL", "NZ")],
807+
[("NL", "NL")],
813808
symmetrize=True,
814809
)
815810

@@ -822,8 +817,8 @@ def init_LJ_datasets(meGO_ensemble, matrices, pairs14, exclusion_bonds14, args):
822817
train_dataset.loc[OO_mask & ((train_dataset["bond_distance"] != 3) | (~train_dataset["same_chain"])), "rep"] = (
823818
type_definitions.mg_OO_c12_rep
824819
)
825-
train_dataset.loc[ON_mask & ((train_dataset["bond_distance"] != 3) | (~train_dataset["same_chain"])), "rep"] = (
826-
type_definitions.mg_ON_c12_rep
820+
train_dataset.loc[OMOM_mask & ((train_dataset["bond_distance"] != 3) | (~train_dataset["same_chain"])), "rep"] = (
821+
type_definitions.mg_OMOM_c12_rep
827822
)
828823
train_dataset.loc[HH_mask & ((train_dataset["bond_distance"] != 3) | (~train_dataset["same_chain"])), "rep"] = (
829824
type_definitions.mg_HH_c12_rep
@@ -844,6 +839,7 @@ def init_LJ_datasets(meGO_ensemble, matrices, pairs14, exclusion_bonds14, args):
844839
train_dataset["mg_sigma"] = pd.Series(pairwise_mg_sigma)
845840
# special mg sigma cases:
846841
train_dataset.loc[OO_mask, "mg_sigma"] = (type_definitions.mg_OO_c12_rep) ** (1 / 12) / 2 ** (1 / 6)
842+
train_dataset.loc[OMOM_mask, "mg_sigma"] = (type_definitions.mg_OMOM_c12_rep) ** (1 / 12) / 2 ** (1 / 6)
847843
train_dataset.loc[HH_mask, "mg_sigma"] = type_definitions.mg_HH_c12_rep ** (1 / 12) / 2 ** (1 / 6)
848844
train_dataset.loc[NN_mask, "mg_sigma"] = (type_definitions.mg_NN_c12_rep) ** (1 / 12) / 2 ** (1 / 6)
849845
train_dataset.loc[HO_mask, "mg_sigma"] = type_definitions.mg_HO_sigma
@@ -1074,6 +1070,7 @@ def set_sig_epsilon(meGO_LJ, parameters):
10741070
(meGO_LJ["probability"] <= meGO_LJ["limit_rc_att"] * np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"]))
10751071
& (meGO_LJ["probability"] > meGO_LJ["md_threshold"])
10761072
& (meGO_LJ["rc_probability"] > meGO_LJ["md_threshold"])
1073+
& (meGO_LJ["epsilon_prior"] < 0.0)
10771074
)
10781075
meGO_LJ.loc[condition, "epsilon"] = (-meGO_LJ["rep"] * (meGO_LJ["distance"] / meGO_LJ["rc_distance"]) ** 12).clip(
10791076
lower=-20 * meGO_LJ["rep"], upper=-0.05 * meGO_LJ["rep"]
@@ -1612,12 +1609,8 @@ def make_pairs_exclusion_topology(meGO_ensemble, meGO_LJ_14, args):
16121609
] = type_definitions.mg_OO_c12_rep
16131610

16141611
df.loc[
1615-
(
1616-
(df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "OM")
1617-
)
1618-
& (
1619-
(df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "OM")
1620-
),
1612+
((df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "OM"))
1613+
& ((df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "OM")),
16211614
"c12",
16221615
] = type_definitions.mg_OMOM_c12_rep
16231616

@@ -1628,29 +1621,19 @@ def make_pairs_exclusion_topology(meGO_ensemble, meGO_LJ_14, args):
16281621
] = type_definitions.mg_HH_c12_rep
16291622

16301623
df.loc[
1631-
(
1632-
(df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "NL")
1633-
)
1634-
& (
1635-
(df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "NL")
1636-
),
1624+
((df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "NL"))
1625+
& ((df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "NL")),
16371626
"c12",
16381627
] = type_definitions.mg_NN_c12_rep
16391628

16401629
df.loc[
16411630
(
1642-
(
1643-
(df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "OM")
1644-
| (df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "O")
1645-
)
1646-
& ((df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "N"))
1631+
(df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "O")
1632+
& (df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "N")
16471633
)
16481634
| (
1649-
((df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "N"))
1650-
& (
1651-
(df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "OM")
1652-
| (df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "O")
1653-
)
1635+
(df["ai"].map(meGO_ensemble["sbtype_type_dict"]) == "N")
1636+
& (df["aj"].map(meGO_ensemble["sbtype_type_dict"]) == "O")
16541637
),
16551638
"c12",
16561639
] = type_definitions.mg_ON_c12_rep

src/multiego/resources/type_definitions.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -204,23 +204,12 @@ def lj14_generator(df):
204204
# List of atom type combinations for LJ14 pairs
205205
atom_type_combinations = [
206206
# Tuple of atom type combinations for LJ14 pairs
207-
# ("backbone_carbonyl", "sidechain_cb", 0.275, 1.299682e-06, 1),
208-
# ("backbone_oxygen", "sidechain_cb", 1, 1.5e-6, 0),
209-
# ("ct_oxygen", "sidechain_cb", None, 5.0e-7, 0),
210207
("backbone_nitrogen", "sidechain_cb", None, 5.0e-7, -1),
211208
("first_backbone_nitrogen", "backbone_nitrogen", None, 4.0e-6, 1),
212-
# ("backbone_nitrogen", "backbone_nitrogen", 0.343, None, 1),
213-
# ("backbone_carbonyl", "backbone_carbonyl", 0.5, None, -1),
214-
# ("sidechain_cgs", "backbone_carbonyl", 0.250, 1.2e-6, 0),
215-
# ("sidechain_cgs", "backbone_nitrogen", 0.200, 5.5e-7, 0),
216-
# ("sidechain_cgs", "first_backbone_nitrogen", 0.200, 5.5e-7, 0),
217-
# ("sidechain_cds", "backbone_calpha", 0.100, 5e-7, 0),
218209
]
219210

220211
# Special non-local interactions different from basic mg combination rules
221212
# PROTEIN
222-
polar_sbtype = ["O", "OA", "OM", "N", "NL", "NT", "NR", "NZ", "NE", "C", "S"]
223-
hyd_sbtype = ["CH3", "CH2", "CH2r", "CH1", "CAH", "CAH2"]
224213
special_non_local = [
225214
{
226215
"atomtypes": (["O"], ["O"]), # charged oxygen-oxygen repulsion

tools/make_mat/make_mat.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -609,28 +609,25 @@ def main_routine(mol_i, mol_j, topology_mego, topology_ref, molecules_name, pref
609609
OO_mask = masking.create_matrix_mask(
610610
topology_df_i["mego_type"].to_numpy(),
611611
topology_df_j["mego_type"].to_numpy(),
612-
[("OM", "OM"), ("O", "O"), ("OM", "O")],
612+
[("O", "O"), ("OM", "O")],
613613
symmetrize=True,
614614
)
615-
HH_mask = masking.create_matrix_mask(
615+
OMOM_mask = masking.create_matrix_mask(
616616
topology_df_i["mego_type"].to_numpy(),
617617
topology_df_j["mego_type"].to_numpy(),
618-
[("H", "H")],
618+
[("OM", "OM")],
619619
symmetrize=True,
620620
)
621-
NN_mask = masking.create_matrix_mask(
621+
HH_mask = masking.create_matrix_mask(
622622
topology_df_i["mego_type"].to_numpy(),
623623
topology_df_j["mego_type"].to_numpy(),
624-
[("NL", "NL"), ("NZ", "NZ"), ("NL", "NZ")],
624+
[("H", "H")],
625625
symmetrize=True,
626626
)
627-
ON_mask = masking.create_matrix_mask(
627+
NN_mask = masking.create_matrix_mask(
628628
topology_df_i["mego_type"].to_numpy(),
629629
topology_df_j["mego_type"].to_numpy(),
630-
[
631-
("O", "N"),
632-
("OM", "N"),
633-
],
630+
[("NL", "NL")],
634631
symmetrize=True,
635632
)
636633

@@ -665,10 +662,10 @@ def main_routine(mol_i, mol_j, topology_mego, topology_ref, molecules_name, pref
665662

666663
# define all cutoff using combination rule values and OO_mask
667664
c12_cutoff = CUTOFF_FACTOR * np.power(np.where(OO_mask, type_definitions.mg_OO_c12_rep, c12_values), 1.0 / 12.0)
665+
# apply OMOM correction
666+
c12_cutoff = np.where(OMOM_mask, CUTOFF_FACTOR * np.power(type_definitions.mg_OMOM_c12_rep, 1.0 / 12.0), c12_cutoff)
668667
# apply HH correction
669668
c12_cutoff = np.where(HH_mask, CUTOFF_FACTOR * np.power(type_definitions.mg_HH_c12_rep, 1.0 / 12.0), c12_cutoff)
670-
# apply ON correction
671-
c12_cutoff = np.where(ON_mask, CUTOFF_FACTOR * np.power(type_definitions.mg_ON_c12_rep, 1.0 / 12.0), c12_cutoff)
672669
# apply NN correction
673670
c12_cutoff = np.where(NN_mask, CUTOFF_FACTOR * np.power(type_definitions.mg_NN_c12_rep, 1.0 / 12.0), c12_cutoff)
674671

@@ -691,8 +688,8 @@ def main_routine(mol_i, mol_j, topology_mego, topology_ref, molecules_name, pref
691688
1.0 / 12.0,
692689
),
693690
)
691+
c12_cutoff = np.where(OMOM_mask, CUTOFF_FACTOR * np.power(type_definitions.mg_OMOM_c12_rep, 1.0 / 12.0), c12_cutoff)
694692
c12_cutoff = np.where(HH_mask, CUTOFF_FACTOR * np.power(type_definitions.mg_HH_c12_rep, 1.0 / 12.0), c12_cutoff)
695-
c12_cutoff = np.where(ON_mask, CUTOFF_FACTOR * np.power(type_definitions.mg_ON_c12_rep, 1.0 / 12.0), c12_cutoff)
696693
c12_cutoff = np.where(NN_mask, CUTOFF_FACTOR * np.power(type_definitions.mg_NN_c12_rep, 1.0 / 12.0), c12_cutoff)
697694

698695
mismatched = topology_df_i.loc[topology_df_i["ref_type"].str[0] != topology_df_i["mego_name"].str[0]]

0 commit comments

Comments
 (0)