From ab7e45a21a5137a4301f4d09511a3c11a6d00d57 Mon Sep 17 00:00:00 2001 From: Carlo Camilloni Date: Fri, 5 Dec 2025 12:00:21 +0100 Subject: [PATCH 1/6] fix trivial log issue --- src/multiego/ensemble.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/multiego/ensemble.py b/src/multiego/ensemble.py index 3ac008c0..d28b379d 100644 --- a/src/multiego/ensemble.py +++ b/src/multiego/ensemble.py @@ -894,7 +894,7 @@ def generate_MG_LJ_pairs_rep(sbtype1, sbtype2, dictionary_name_rc_c12, c12_rep=N pairs_LJ["c12"] = c12_rep / factor pairs_LJ["c6"] = 0.0 pairs_LJ["epsilon"] = -c12_rep / factor - pairs_LJ["sigma"] = c12_rep / factor ** (1.0 / 12.0) / 2.0 ** (1.0 / 6.0) + pairs_LJ["sigma"] = (c12_rep / factor) ** (1.0 / 12.0) / 2.0 ** (1.0 / 6.0) pairs_LJ["mg_sigma"] = pairs_LJ["sigma"] pairs_LJ["mg_epsilon"] = -c12_rep / factor From 2205a37925d55cd03fd114fcf186f0f8b34d5977 Mon Sep 17 00:00:00 2001 From: Carlo Camilloni Date: Tue, 9 Dec 2025 11:28:42 +0100 Subject: [PATCH 2/6] new dihedrals - new targets - new sigma for CH1 - removed most 1-4 interactions (targeted on larger AA) - 5 bonds rule (instead of 6) - decreased c12 rep for OO and ON --- multi-ego-basic.ff/aminoacids.rtp | 16 ++-- multi-ego-basic.ff/ffbonded.itp | 91 +++++++++++++--------- src/multiego/ensemble.py | 20 ++--- src/multiego/resources/type_definitions.py | 40 ++++------ src/multiego/topology.py | 2 +- 5 files changed, 89 insertions(+), 80 deletions(-) diff --git a/multi-ego-basic.ff/aminoacids.rtp b/multi-ego-basic.ff/aminoacids.rtp index d862427f..9e9fcd30 100644 --- a/multi-ego-basic.ff/aminoacids.rtp +++ b/multi-ego-basic.ff/aminoacids.rtp @@ -394,11 +394,11 @@ [ dihedrals ] ; ai aj ak al gromos type -CA -C N CA gd_14 - -C N CA C gd_44QK - -C N CA C gd_43QK + -C N CA C gd_44Q + -C N CA C gd_43Q N CA CB CG gd_34 - N CA C +N gd_45QK - N CA C +N gd_42QK + N CA C +N gd_45Q + N CA C +N gd_42Q CA CB CG CD gd_34 CB CG CD NE2 gd_40 @@ -707,11 +707,11 @@ [ dihedrals ] ; ai aj ak al gromos type -CA -C N CA gd_14 - -C N CA C gd_44QK - -C N CA C gd_43QK + -C N CA C gd_44K + -C N CA C gd_43K N CA CB CG gd_34 - N CA C +N gd_45QK - N CA C +N gd_42QK + N CA C +N gd_45K + N CA C +N gd_42K CA CB CG CD gd_34 CB CG CD CE gd_34 CG CD CE NZ gd_34 diff --git a/multi-ego-basic.ff/ffbonded.itp b/multi-ego-basic.ff/ffbonded.itp index 96697d80..588e9904 100644 --- a/multi-ego-basic.ff/ffbonded.itp +++ b/multi-ego-basic.ff/ffbonded.itp @@ -376,43 +376,43 @@ ;;;;;;;;;;;;;;;;;;;; ;ALA ;;;;;;;;;;;;;;;;;;;; -#define gd_42A 170.0000 2.5000 2 +#define gd_42A 100.0000 3.0000 2 ; Backbone dihedral angle -N-CA-C-N- ALA ; #define gd_43A 15.0000 3.300 3 ;heigher k to shift down J coupling and have a cleaner distinction between betas ; Backbone dihedral angle -C-N-CA-C- ALA ; -#define gd_44A -164.000 2.8 1 +#define gd_44A 170.000 3.0 1 ; Backbone dihedral angle -C-N-CA-C- ALA ; -#define gd_45A -170.00 4.0 1 +#define gd_45A -170.00 3.5 1 ; Backbone dihedral angle -N-CA-C-N- ALA ; ;;;;;;;;;;;;;;;;;;;; ; ASN ;;;;;;;;;;;;;;;;;;;; -#define gd_42N -170.0000 2.5000 2 +#define gd_42N 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- ASN ; #define gd_43N 15.0000 1.300 3 ; Backbone dihedral angle -C-N-CA-C- ASN ; -#define gd_44N -120.000 4.6 1 +#define gd_44N -120.000 3.0 1 ; Backbone dihedral angle -C-N-CA-C- ASN ; -#define gd_45N 180.00 2.3 1 +#define gd_45N 180.00 1.0 1 ; Backbone dihedral angle -N-CA-C-N- ASN ; ;;;;;;;;;;;;;;;;;;;; ; ASP ;;;;;;;;;;;;;;;;;;;; -#define gd_42D 170.0000 2.5000 2 +#define gd_42D 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- ASP ; #define gd_43D 15.0000 2.000 3 ; Backbone dihedral angle -C-N-CA-C- ASPl ; -#define gd_44D -140.000 3.60 1 +#define gd_44D 180.000 3.60 1 ; Backbone dihedral angle -C-N-CA-C- ASP ; #define gd_45D 180.00 1.6 1 @@ -421,13 +421,13 @@ ;;;;;;;;;;;;;;;;;;;; ; CYS ;;;;;;;;;;;;;;;;;;;; -#define gd_42C 170.0000 2.5000 2 +#define gd_42C 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- CYS ; #define gd_43C 15.0000 1.300 3 ; Backbone dihedral angle -C-N-CA-C- CYS ; -#define gd_44C -140.000 4.00 1 +#define gd_44C 180.000 4.00 1 ; Backbone dihedral angle -C-N-CA-C- CYS ; #define gd_45C 180.00 2.0 1 @@ -436,7 +436,7 @@ ;;;;;;;;;;;;;;;;;;;; ;GLU ;;;;;;;;;;;;;;;;;;;; -#define gd_42E 170.0000 2.5000 2 +#define gd_42E 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- GLU ; #define gd_43E 15.0000 2.60 3 ;heigher k to shift down J coupling and have a cleaner distinction between betas @@ -451,28 +451,28 @@ ;;;;;;;;;;;;;;;;;;;; ; HIS ;;;;;;;;;;;;;;;;;;;; -#define gd_42H 170.0000 2.5000 2 +#define gd_42H 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- HIS ; #define gd_43H 15.0000 1.00 3 ; Backbone dihedral angle -C-N-CA-C- HIS ; -#define gd_44H -110.000 3.70 1 +#define gd_44H 180.000 3.70 1 ; Backbone dihedral angle -C-N-CA-C- HIS ; -#define gd_45H 180.00 2.9 1 +#define gd_45H 180.00 0.5 1 ; Backbone dihedral angle -N-CA-C-N- HIS ; ;;;;;;;;;;;;;;;;;;;; ; LEU ;;;;;;;;;;;;;;;;;;;; -#define gd_42L 170.0000 2.5000 2 +#define gd_42L 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- LEU ; #define gd_43L 15.0000 1.600 3 ; Backbone dihedral angle -C-N-CA-C- LEU ; -#define gd_44L -140.000 3.0 1 +#define gd_44L 180.000 3.0 1 ; Backbone dihedral angle -C-N-CA-C- LEU ; #define gd_45L 180.00 1.6 1 @@ -481,13 +481,13 @@ ;;;;;;;;;;;;;;;;;;;; ; MET ;;;;;;;;;;;;;;;;;;;; -#define gd_42M 170.0000 2.5000 2 +#define gd_42M 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- MET ; #define gd_43M 15.0000 2.000 3 ; Backbone dihedral angle -C-N-CA-C- MET ; -#define gd_44M -130.000 3.5 1 +#define gd_44M 180.000 3.5 1 ; Backbone dihedral angle -C-N-CA-C- MET ; #define gd_45M 180.00 1.8 1 @@ -496,13 +496,13 @@ ;;;;;;;;;;;;;;;;;;;; ; ARG/TRP ;;;;;;;;;;;;;;;;;;;; -#define gd_42RW 170.0000 2.5000 2 +#define gd_42RW 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- ARG/TRP ; #define gd_43RW 15.0000 2.500 3 ; Backbone dihedral angle -C-N-CA-C- ARG/TRP ; -#define gd_44RW -120.000 2.70 1 +#define gd_44RW 180.000 2.70 1 ; Backbone dihedral angle -C-N-CA-C- ARG/TRP ; #define gd_45RW 180.000 2.50 1 @@ -510,45 +510,60 @@ ; ; ;;;;;;;;;;;;;;;;;;;; -; GLN/LYS +; GLN ;;;;;;;;;;;;;;;;;;;; -#define gd_42QK 170.0000 2.5000 2 +#define gd_42Q 150.0000 1.5000 2 ; Backbone dihedral angle -N-CA-C-N- GLN/LYS ; -#define gd_43QK 15.0000 2.000 3 +#define gd_43Q 15.0000 2.000 3 ; Backbone dihedral angle -C-N-CA-C- GLN/LYS ; -#define gd_44QK -120.000 2.80 1 +#define gd_44Q -120.000 1.00 1 ; Backbone dihedral angle -C-N-CA-C- GLN/LYS ; -#define gd_45QK 180.000 3.30 1 +#define gd_45Q 180.000 3.50 1 +; Backbone dihedral angle -N-CA-C-N- GLN/LYS +; +;;;;;;;;;;;;;;;;;;;; +; LYS +;;;;;;;;;;;;;;;;;;;; +#define gd_42K 150.0000 1.5000 2 +; Backbone dihedral angle -N-CA-C-N- GLN/LYS +; +#define gd_43K 15.0000 2.000 3 +; Backbone dihedral angle -C-N-CA-C- GLN/LYS +; +#define gd_44K -120.000 1.00 1 +; Backbone dihedral angle -C-N-CA-C- GLN/LYS +; +#define gd_45K 180.000 0.00 1 ; Backbone dihedral angle -N-CA-C-N- GLN/LYS ; ;;;;;;;;;;;;;;;;;;;; ; VAL/ILE ;;;;;;;;;;;;;;;;;;;; -#define gd_42VI 170.0000 2.0000 2 +#define gd_42VI 150.0000 0.0000 2 ; Backbone dihedral angle -N-CA-C-N- VAL/ILE ; -#define gd_43VI 15.0000 1.800 3 ; lower k for higher J coupling and more population in intermediate beta region +#define gd_43VI 15.0000 1.000 3 ; lower k for higher J coupling and more population in intermediate beta region ; Backbone dihedral angle -C-N-CA-C- VAL/ILE ; #define gd_44VI -97.000 3.9 1 ; Backbone dihedral angle -C-N-CA-C- VAL/ILE ; -#define gd_45VI 180.00 1.2 1 +#define gd_45VI 180.00 0.0 1 ; Backbone dihedral angle -N-CA-C-N- VAL/ILE ;;;;;;;;;;;;;;;;;;;; ; PHE ;;;;;;;;;;;;;;;;;;;; -#define gd_42F 170.0000 2.5000 2 +#define gd_42F 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- PHE ; #define gd_43F 15.0000 1.700 3 ; Backbone dihedral angle -C-N-CA-C- PHE ; -#define gd_44F -110.000 3.3 1 +#define gd_44F 180.000 3.3 1 ; Backbone dihedral angle -C-N-CA-C- PHE ; #define gd_45F 180.00 2.1 1 @@ -557,22 +572,22 @@ ;;;;;;;;;;;;;;;;;;;; ;SER ;;;;;;;;;;;;;;;;;;;; -#define gd_42S 170.0000 2.5000 2 +#define gd_42S 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- SER ; #define gd_43S 15.0000 2.500 3 ; Backbone dihedral angle -C-N-CA-C- SER ; -#define gd_44S -140.000 2.80 1 +#define gd_44S -140.000 1.50 1 ; Backbone dihedral angle -C-N-CA-C- SER ; -#define gd_45S 180.00 2.90 1 +#define gd_45S 180.00 0.00 1 ; Backbone dihedral angle -N-CA-C-N- SER ; ;;;;;;;;;;;;;;;;;;;; ;THR ;;;;;;;;;;;;;;;;;;;; -#define gd_42T 170.0000 2.5000 2 +#define gd_42T 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- THR ; #define gd_43T 15.0000 2.50 3 @@ -581,22 +596,22 @@ #define gd_44T -95.000 3.3 1 ; Backbone dihedral angle -C-N-CA-C- THR ; -#define gd_45T 180.00 2.2 1 +#define gd_45T 180.00 0.0 1 ; Backbone dihedral angle -N-CA-C-N- THR ; ;;;;;;;;;;;;;;;;;;;; ; TYR ;;;;;;;;;;;;;;;;;;;; -#define gd_42Y 170.0000 2.5000 2 +#define gd_42Y 150.0000 2.5000 2 ; Backbone dihedral angle -N-CA-C-N- TYR ; #define gd_43Y 15.0000 2.000 3 ; Backbone dihedral angle -C-N-CA-C- TYR ; -#define gd_44Y -110.000 2.9 1 +#define gd_44Y -110.000 2.0 1 ; Backbone dihedral angle -C-N-CA-C- TYR ; -#define gd_45Y 180.00 1.8 1 +#define gd_45Y 180.00 0.0 1 ; Backbone dihedral angle -N-CA-C-N- TYR ; diff --git a/src/multiego/ensemble.py b/src/multiego/ensemble.py index d28b379d..43e5ca35 100644 --- a/src/multiego/ensemble.py +++ b/src/multiego/ensemble.py @@ -1250,7 +1250,7 @@ def generate_LJ(meGO_ensemble, train_dataset, parameters): & (meGO_LJ["mg_epsilon"] < 0) & ((abs(meGO_LJ["epsilon"] - meGO_LJ["mg_epsilon"]) / abs(meGO_LJ["mg_epsilon"])) < parameters.relative_c12d) & ((meGO_LJ["bond_distance"] > 3) | (~meGO_LJ["same_chain"])) - & ~((meGO_LJ["bond_distance"] < 7) & (meGO_LJ["same_chain"])) + & ~((meGO_LJ["bond_distance"] < 6) & (meGO_LJ["same_chain"])) ) ] @@ -1291,10 +1291,10 @@ def generate_LJ(meGO_ensemble, train_dataset, parameters): if not parameters.single_molecule: # neighbour intramolecular interactions are not used as intermolecular - copy_intra = meGO_LJ.loc[(meGO_LJ["same_chain"]) & (meGO_LJ["bond_distance"] < 7)] + copy_intra = meGO_LJ.loc[(meGO_LJ["same_chain"]) & (meGO_LJ["bond_distance"] < 6)] meGO_LJ_14 = pd.concat([meGO_LJ_14, copy_intra], axis=0, sort=False, ignore_index=True) # remove them from the default force-field - meGO_LJ = meGO_LJ.loc[~((meGO_LJ["same_chain"]) & (meGO_LJ["bond_distance"] < 7))] + meGO_LJ = meGO_LJ.loc[~((meGO_LJ["same_chain"]) & (meGO_LJ["bond_distance"] < 6))] # now we can decide to keep intermolecular interactions as intramolecular ones # to do this is enough to remove it from meGO_LJ_14, in this way the value used for the contact is the one meGO_LJ @@ -1305,7 +1305,7 @@ def generate_LJ(meGO_ensemble, train_dataset, parameters): (~meGO_LJ_14["same_chain"]) & (meGO_LJ_14["molecule_name_ai"] == meGO_LJ_14["molecule_name_aj"]) & (meGO_LJ_14["epsilon"] > 0.0) - & (meGO_LJ_14["bond_distance"] > 6) + & (meGO_LJ_14["bond_distance"] > 5) ) ] else: @@ -1650,30 +1650,30 @@ def make_pairs_exclusion_topology(meGO_ensemble, meGO_LJ_14, args): # this need to be the default repulsion if within two residue if not pairs.empty: pairs.loc[ - (~pairs["same_chain"]) & (pairs["bond_distance"] < 7), + (~pairs["same_chain"]) & (pairs["bond_distance"] < 6), "c6", ] = 0.0 pairs.loc[ - (~pairs["same_chain"]) & (pairs["bond_distance"] < 7), + (~pairs["same_chain"]) & (pairs["bond_distance"] < 6), "c12", ] = pairs["rep"] # else it should be default mg pairs.loc[ - (~pairs["same_chain"]) & (pairs["bond_distance"] > 6) & (pairs["mg_epsilon"] < 0.0), + (~pairs["same_chain"]) & (pairs["bond_distance"] > 5) & (pairs["mg_epsilon"] < 0.0), "c6", ] = 0.0 pairs.loc[ - (~pairs["same_chain"]) & (pairs["bond_distance"] > 6) & (pairs["mg_epsilon"] < 0.0), + (~pairs["same_chain"]) & (pairs["bond_distance"] > 5) & (pairs["mg_epsilon"] < 0.0), "c12", ] = -pairs["mg_epsilon"] pairs.loc[ - (~pairs["same_chain"]) & (pairs["bond_distance"] > 6) & (pairs["mg_epsilon"] > 0.0), + (~pairs["same_chain"]) & (pairs["bond_distance"] > 5) & (pairs["mg_epsilon"] > 0.0), "c6", ] = ( 4 * pairs["mg_epsilon"] * (pairs["mg_sigma"] ** 6) ) pairs.loc[ - (~pairs["same_chain"]) & (pairs["bond_distance"] > 6) & (pairs["mg_epsilon"] > 0.0), + (~pairs["same_chain"]) & (pairs["bond_distance"] > 5) & (pairs["mg_epsilon"] > 0.0), "c12", ] = ( 4 * pairs["mg_epsilon"] * (pairs["mg_sigma"] ** 12) diff --git a/src/multiego/resources/type_definitions.py b/src/multiego/resources/type_definitions.py index 49ccb42d..9c899d1a 100644 --- a/src/multiego/resources/type_definitions.py +++ b/src/multiego/resources/type_definitions.py @@ -2,9 +2,9 @@ import json import sys -mg_OO_c12_rep = 1.5e-6 +mg_OO_c12_rep = 7.5e-7 mg_HH_c12_rep = 1.2e-8 -mg_ON_c12_rep = 1.5e-6 +mg_ON_c12_rep = 7.5e-7 mg_NN_c12_rep = 2.5e-5 mg_HO_sigma = 0.169500 mg_eps_ch3 = 0.15 @@ -84,8 +84,8 @@ 4.0 * 0.31365**12 * mg_eps_pol, # "NE", sig=0.31365 4.0 * 0.35812**12 * mg_eps_pol, # "C", sig=0.35812 4.0 * 0.35812**12 * mg_eps_ch_aromatic, # "CH", sig=0.35812 - 4.0 * 0.50192**12 * mg_eps_ch1, # "CH1", sig=0.50192 - 4.0 * 0.50192**12 * mg_eps_ch1, # "CAH", sig=0.50192 + 4.0 * 0.44592**12 * mg_eps_ch1, # "CH1", sig=0.50192 + 4.0 * 0.44592**12 * mg_eps_ch1, # "CAH", sig=0.50192 4.0 * 0.40704**12 * mg_eps_ch2, # "CH2", sig=0.40704 4.0 * 0.40704**12 * mg_eps_ch2, # "CAH2", sig=0.40704 4.0 * 0.37479**12 * mg_eps_ch3, # "CH3", sig=0.37479 @@ -110,8 +110,8 @@ 4.0 * 0.31365**6 * mg_eps_pol, # "NE", 4.0 * 0.35812**6 * mg_eps_pol, # "C", 4.0 * 0.35812**6 * mg_eps_ch_aromatic, # "CH" - 4.0 * 0.50192**6 * mg_eps_ch1, # "CH1" - 4.0 * 0.50192**6 * mg_eps_ch1, # "CAH" + 4.0 * 0.44592**6 * mg_eps_ch1, # "CH1" + 4.0 * 0.44592**6 * mg_eps_ch1, # "CAH" 4.0 * 0.40704**6 * mg_eps_ch2, # "CH2" 4.0 * 0.40704**6 * mg_eps_ch2, # "CAH2" 4.0 * 0.37479**6 * mg_eps_ch3, # "CH3" @@ -183,22 +183,22 @@ def lj14_generator(df): # List of atom type combinations for LJ14 pairs atom_type_combinations = [ # Tuple of atom type combinations for LJ14 pairs - ("backbone_carbonyl", "sidechain_cb", 0.275, 1.299682e-06, 1), - ("backbone_oxygen", "sidechain_cb", 1, 1.5e-6, 0), - ("ct_oxygen", "sidechain_cb", 1, 1.5e-6, 0), - ("backbone_nitrogen", "sidechain_cb", 1, 2.7e-6, -1), +# ("backbone_carbonyl", "sidechain_cb", 0.275, 1.299682e-06, 1), +# ("backbone_oxygen", "sidechain_cb", 1, 1.5e-6, 0), +# ("ct_oxygen", "sidechain_cb", None, 5.0e-7, 0), + ("backbone_nitrogen", "sidechain_cb", None, 5.0e-7, -1), ("first_backbone_nitrogen", "backbone_nitrogen", None, 4.0e-6, 1), - ("backbone_nitrogen", "backbone_nitrogen", 0.343, None, 1), - ("backbone_carbonyl", "backbone_carbonyl", 0.5, None, -1), - ("sidechain_cgs", "backbone_carbonyl", 0.250, 1.2e-6, 0), - ("sidechain_cgs", "backbone_nitrogen", 0.200, 5.5e-7, 0), - ("sidechain_cgs", "first_backbone_nitrogen", 0.200, 5.5e-7, 0), - ("sidechain_cds", "backbone_calpha", 0.100, 5e-7, 0), +# ("backbone_nitrogen", "backbone_nitrogen", 0.343, None, 1), +# ("backbone_carbonyl", "backbone_carbonyl", 0.5, None, -1), +# ("sidechain_cgs", "backbone_carbonyl", 0.250, 1.2e-6, 0), +# ("sidechain_cgs", "backbone_nitrogen", 0.200, 5.5e-7, 0), +# ("sidechain_cgs", "first_backbone_nitrogen", 0.200, 5.5e-7, 0), +# ("sidechain_cds", "backbone_calpha", 0.100, 5e-7, 0), ] # Special non-local interactions different from basic mg combination rules # PROTEIN -polar_sbtype = ["OM", "OA", "N", "NT", "NL", "NR", "NZ", "NE", "C", "S", "P", "OE", "CR1"] +polar_sbtype = ["OA", "OM", "N", "NL", "NT", "NR", "NZ", "NE", "C", "S", "P", "OE", "CR1"] hyd_sbtype = ["CH3", "CH3p", "CH2", "CH2r", "CH1"] special_non_local = [ { @@ -231,12 +231,6 @@ def lj14_generator(df): "sigma": mg_HO_sigma, "epsilon": mg_eps_HO, }, - { - "atomtypes": (["O"], hyd_sbtype), # bkbn_polar - hydrophobic repulsion - "interaction": "att", - "sigma": None, # If None use default mg value of sigma - "epsilon": mg_eps_bkbn_O_CB, - }, ] # List of amino acids and nucleic acids diff --git a/src/multiego/topology.py b/src/multiego/topology.py index 1ac1ab59..a4b72cb9 100644 --- a/src/multiego/topology.py +++ b/src/multiego/topology.py @@ -330,7 +330,7 @@ def generate_bond_exclusions(reduced_topology, bond_pair): ex6.add(current_atom) # Stop traversal after depth 6 - if depth < 6: + if depth < 5: for neighbor in graph[current_atom]: if neighbor not in visited: visited.add(neighbor) From 9d61fecb61f82796230a6cfd8f6c9cf53165cb0d Mon Sep 17 00:00:00 2001 From: Carlo Camilloni Date: Tue, 9 Dec 2025 13:41:21 +0100 Subject: [PATCH 3/6] dih --- multi-ego-basic.ff/ffbonded.itp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/multi-ego-basic.ff/ffbonded.itp b/multi-ego-basic.ff/ffbonded.itp index 588e9904..5e3ff7c0 100644 --- a/multi-ego-basic.ff/ffbonded.itp +++ b/multi-ego-basic.ff/ffbonded.itp @@ -385,7 +385,7 @@ #define gd_44A 170.000 3.0 1 ; Backbone dihedral angle -C-N-CA-C- ALA ; -#define gd_45A -170.00 3.5 1 +#define gd_45A -170.00 4.0 1 ; Backbone dihedral angle -N-CA-C-N- ALA ; ;;;;;;;;;;;;;;;;;;;; @@ -521,7 +521,7 @@ #define gd_44Q -120.000 1.00 1 ; Backbone dihedral angle -C-N-CA-C- GLN/LYS ; -#define gd_45Q 180.000 3.50 1 +#define gd_45Q 180.000 3.00 1 ; Backbone dihedral angle -N-CA-C-N- GLN/LYS ; ;;;;;;;;;;;;;;;;;;;; From 9753f2405e4c0050a429df259815b24d421dfce6 Mon Sep 17 00:00:00 2001 From: Carlo Camilloni Date: Tue, 9 Dec 2025 23:00:41 +0100 Subject: [PATCH 4/6] back to the former repulsion rule with the lower ON repulsion we can go back to the old repulsion that seems much better in learning very local geometry. In a beta hairpin case with this rule and an epsilon of 0.2 the beta population goes from 5 to 50% --- src/multiego/ensemble.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/multiego/ensemble.py b/src/multiego/ensemble.py index 43e5ca35..8e8d15f5 100644 --- a/src/multiego/ensemble.py +++ b/src/multiego/ensemble.py @@ -1049,9 +1049,12 @@ def set_sig_epsilon(meGO_LJ, parameters): condition = ( meGO_LJ["probability"] <= meGO_LJ["limit_rc_att"] * np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"]) ) & (meGO_LJ["probability"] > meGO_LJ["md_threshold"]) + #meGO_LJ.loc[condition, "epsilon"] = -meGO_LJ["rep"] * ( + # 1.0 + (np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"]) - meGO_LJ["probability"]) + #) meGO_LJ.loc[condition, "epsilon"] = -meGO_LJ["rep"] * ( - 1.0 + (np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"]) - meGO_LJ["probability"]) - ) + meGO_LJ["distance"]/meGO_LJ["rc_distance"] + ) ** 12 meGO_LJ.loc[condition, "learned"] = 1 # 1-4 interactions are special and cannot become attractive because they are part of the bonded-interactions From b62d08827217249ff6bb62dc19f5a42ca89589dd Mon Sep 17 00:00:00 2001 From: Carlo Camilloni Date: Tue, 9 Dec 2025 23:24:24 +0100 Subject: [PATCH 5/6] repulsion rule capped --- src/multiego/ensemble.py | 10 +++++----- src/multiego/resources/type_definitions.py | 18 +++++++++--------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/multiego/ensemble.py b/src/multiego/ensemble.py index 8e8d15f5..f2ee3dca 100644 --- a/src/multiego/ensemble.py +++ b/src/multiego/ensemble.py @@ -1049,12 +1049,12 @@ def set_sig_epsilon(meGO_LJ, parameters): condition = ( meGO_LJ["probability"] <= meGO_LJ["limit_rc_att"] * np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"]) ) & (meGO_LJ["probability"] > meGO_LJ["md_threshold"]) - #meGO_LJ.loc[condition, "epsilon"] = -meGO_LJ["rep"] * ( + # meGO_LJ.loc[condition, "epsilon"] = -meGO_LJ["rep"] * ( # 1.0 + (np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"]) - meGO_LJ["probability"]) - #) - meGO_LJ.loc[condition, "epsilon"] = -meGO_LJ["rep"] * ( - meGO_LJ["distance"]/meGO_LJ["rc_distance"] - ) ** 12 + # ) + meGO_LJ.loc[condition, "epsilon"] = (-meGO_LJ["rep"] * (meGO_LJ["distance"] / meGO_LJ["rc_distance"]) ** 12).clip( + lower=-20 * meGO_LJ["rep"], upper=-0.05 * meGO_LJ["rep"] + )[condition] meGO_LJ.loc[condition, "learned"] = 1 # 1-4 interactions are special and cannot become attractive because they are part of the bonded-interactions diff --git a/src/multiego/resources/type_definitions.py b/src/multiego/resources/type_definitions.py index 9c899d1a..c5748806 100644 --- a/src/multiego/resources/type_definitions.py +++ b/src/multiego/resources/type_definitions.py @@ -183,17 +183,17 @@ def lj14_generator(df): # List of atom type combinations for LJ14 pairs atom_type_combinations = [ # Tuple of atom type combinations for LJ14 pairs -# ("backbone_carbonyl", "sidechain_cb", 0.275, 1.299682e-06, 1), -# ("backbone_oxygen", "sidechain_cb", 1, 1.5e-6, 0), -# ("ct_oxygen", "sidechain_cb", None, 5.0e-7, 0), + # ("backbone_carbonyl", "sidechain_cb", 0.275, 1.299682e-06, 1), + # ("backbone_oxygen", "sidechain_cb", 1, 1.5e-6, 0), + # ("ct_oxygen", "sidechain_cb", None, 5.0e-7, 0), ("backbone_nitrogen", "sidechain_cb", None, 5.0e-7, -1), ("first_backbone_nitrogen", "backbone_nitrogen", None, 4.0e-6, 1), -# ("backbone_nitrogen", "backbone_nitrogen", 0.343, None, 1), -# ("backbone_carbonyl", "backbone_carbonyl", 0.5, None, -1), -# ("sidechain_cgs", "backbone_carbonyl", 0.250, 1.2e-6, 0), -# ("sidechain_cgs", "backbone_nitrogen", 0.200, 5.5e-7, 0), -# ("sidechain_cgs", "first_backbone_nitrogen", 0.200, 5.5e-7, 0), -# ("sidechain_cds", "backbone_calpha", 0.100, 5e-7, 0), + # ("backbone_nitrogen", "backbone_nitrogen", 0.343, None, 1), + # ("backbone_carbonyl", "backbone_carbonyl", 0.5, None, -1), + # ("sidechain_cgs", "backbone_carbonyl", 0.250, 1.2e-6, 0), + # ("sidechain_cgs", "backbone_nitrogen", 0.200, 5.5e-7, 0), + # ("sidechain_cgs", "first_backbone_nitrogen", 0.200, 5.5e-7, 0), + # ("sidechain_cds", "backbone_calpha", 0.100, 5e-7, 0), ] # Special non-local interactions different from basic mg combination rules From d5143182ba89a3ee2ad6180a5f9ab4cd0d899942 Mon Sep 17 00:00:00 2001 From: Carlo Camilloni Date: Wed, 10 Dec 2025 11:21:53 +0100 Subject: [PATCH 6/6] updated repulsion --- src/multiego/ensemble.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/multiego/ensemble.py b/src/multiego/ensemble.py index f2ee3dca..29e7d6c0 100644 --- a/src/multiego/ensemble.py +++ b/src/multiego/ensemble.py @@ -1047,8 +1047,10 @@ def set_sig_epsilon(meGO_LJ, parameters): # this is used only when MD_th < MD_p < limit_rc_att*RC_p # negative epsilon are used to identify non-attractive interactions condition = ( - meGO_LJ["probability"] <= meGO_LJ["limit_rc_att"] * np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"]) - ) & (meGO_LJ["probability"] > meGO_LJ["md_threshold"]) + (meGO_LJ["probability"] <= meGO_LJ["limit_rc_att"] * np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"])) + & (meGO_LJ["probability"] > meGO_LJ["md_threshold"]) + & (meGO_LJ["rc_probability"] > meGO_LJ["md_threshold"]) + ) # meGO_LJ.loc[condition, "epsilon"] = -meGO_LJ["rep"] * ( # 1.0 + (np.maximum(meGO_LJ["rc_probability"], meGO_LJ["rc_threshold"]) - meGO_LJ["probability"]) # )