Skip to content
Snippets Groups Projects
Commit 3cee99f5 authored by cmaffeo2's avatar cmaffeo2
Browse files

Add Citation class and citation information for various Onck model versions

parent c6288efd
No related branches found
No related tags found
No related merge requests found
0.1.dev61
0.2.dev37
......@@ -5,9 +5,10 @@ import numpy as np
import sys
## Local imports
from . import logger, ParticleType, PointParticle, get_resource_path
from . import devlogger, logger, ParticleType, PointParticle, get_resource_path
from .polymer import PolymerBeads, PolymerModel
from .interactions import AbstractPotential, HarmonicBond
from .version import Citation
"""Define particle types"""
_types = dict(
......@@ -121,20 +122,27 @@ for k,t in _types.items():
_types_versions = {1.0: _types}
_types_versions[1.1] = dict()
## https://link.springer.com/article/10.1007/s12274-022-4647-1
_types_versions['1.0cp'] = {k:ParticleType(t.name,
mass = t.mass,
charge = t.charge,
epsilon = t.epsilon) for k,t in _types.items()}
for k in 'R D E K'.split(): _types_versions['1.0cp'][k].epsilon = 0.005
_types_versions[1.1] = dict() # https://www.pnas.org/doi/10.1073/pnas.2221804120
__si_data = """A 71.07 0.7 0
L 113.16 1 0
R 156.19 0.005 +1
K 128.17 0.005 +1
N 114.10 0.41 0
M 131.20 0.78 0
D 115.09 0.005 1
D 115.09 0.005 -1
F 147.18 1 0
C 103.14 0.68 0
P 97.12 0.65 0
Q 128.13 0.33 0
S 87.08 0.45 0
E 129.11 0.005 1
E 129.11 0.005 -1
T 101.11 0.51 0
G 57.05 0.48 0
W 186.22 0.96 0
......@@ -148,9 +156,9 @@ for k, m, e, q in [l.split() for l in __si_data.split('\n')]:
epsilon = float(e), charge = float(q), version=1.1)
assert(t.charge == t0.charge)
if t0.epsilon != t.epsilon:
devlogger.info('Updating epsilon for 1BPA-1.1 {k}: {t0.epsilon} -> {t.epsilon}')
devlogger.info(f'Updating epsilon for 1BPA-1.1 {k}: {t0.epsilon} -> {t.epsilon}')
devlogger.info('Onck model version 1BPA-1.1 has {[t0.epsilon != _types_versions[1.1][k].epsilon for k,t0 in _types_versions[1.0].items()].sum()} different epsilon parameters compared to 1BPA')
devlogger.info(f'Onck model version 1BPA-1.1 has {np.sum([t0.epsilon != _types_versions[1.1][k].epsilon for k,t0 in _types_versions[1.0].items()])} different epsilon parameters compared to 1BPA')
""" Cation-Pi interactions """
eps_cp_dict = {('ARG','PHE'): 4.3,
......@@ -162,6 +170,40 @@ eps_cp_dict = {('ARG','PHE'): 4.3,
eps_cp_dict = {k:v*0.23900574 for k,v in eps_cp_dict.items()} # convert to kcal/mol
for k,v in list(eps_cp_dict.items()): eps_cp_dict[(k[1],k[0])] = v # add reversed keys to dictionary
version_name = {1.0:'1BPA', '1.0cp':'1BPA-CP', 1.1:'1BPA-1.1'}
__base_ref = Citation(
author = 'A. Fragasso, H.W. de Vries, J. Andersson, et al',
title = 'A designer FG-Nup that reconstitutes the selective transport barrier of the nuclear pore complex',
journal = 'Nat Commun',
volume = 12,
year = 2021,
doi = '10.1038/s41467-021-22293-y'
)
__ref1 = Citation(
author = 'A. Fragasso, H.W. de Vries, J. Andersson, et al',
title = 'Transport receptor occupancy in nuclear pore complex mimics',
journal = 'Nano Res',
volume = 15,
pages = '9689–9703',
year = 2022,
doi = '10.1007/s12274-022-4647-1'
)
__ref2 = Citation(
author="M. Dekker, E. Van der Giessen, and P.R. Onck",
title="Phase separation of intrinsically disordered FG-Nups is driven by highly dynamic FG motifs",
journal='PNAS',
volume=120,
number = 25,
pages = 'e2221804120',
year=2023,
doi = '10.1073/pnas.2221804120'
)
version_refs = {1.0: (__base_ref,),
'1.0cp': (__base_ref, __ref1),
1.1: (__base_ref, __ref2),
}
## Default to the latest
_types = _types_versions[1.1]
......@@ -192,8 +234,7 @@ class OnckNonbonded(AbstractPotential):
""" Rather than interacting through the hydrophobic
potential phi_hp, cationic residues interact with aromatic
residues through an 8–6 Lennard Jones potential """
assert(typeA.version == 1.1 and typeB.version == 1.1)
assert( all( t.version in ('1.0cp',1.1) for t in types ) )
key = tuple((typeA.name[:3],typeB.name[:3]))
eps = eps_cp_dict[key]
......@@ -226,7 +267,6 @@ class OnckBeads(PolymerBeads):
spring_constant = 38.422562, # units "8038 kJ / (N_A nm**2)" "0.5 * kcal_mol/AA**2"
rest_length=3.8, version=None, **kwargs):
if version == None:
logger.warning(f'No Onck model version specified; using version 1BPA-1.1 from 2023')
version = 1.1
......@@ -234,7 +274,7 @@ class OnckBeads(PolymerBeads):
raise ValueError(f'Unkown Onck model version "{version}"')
self.version = version
self.types_dict = _types_versions[version]
_types = _types_versions[version] # Update global _types convenience variable
_types = _types_versions[version] # Update global _types convenience variable
self.peptide_bond = HarmonicBond(k = spring_constant,
r0 = rest_length,
......@@ -313,12 +353,20 @@ class OnckModel(PolymerModel):
"""
[debye_length]: angstroms
[damping_coefficient]: ns
"""
logger.info("""You are using an implementation of the Onck model for disordered FG-Nup peptides based on:
Fragasso, A., de Vries, H.W., Andersson, J. et al. A designer FG-Nup that reconstitutes the selective transport barrier of the nuclear pore complex. Nat Commun 12, 2010 (2021). https://doi.org/10.1038/s41467-021-22293-y
if version == None:
logger.warning(f'No Onck model version specified; using version 1BPA-1.1 from 2023')
version = 1.1
if version not in _types_versions:
raise ValueError(f'Unkown Onck model version "{version}"')
self.version = version
Please cite all appropriate articles!""")
logger.info(f'Using an implementation of the Onck model {version_name[self.version]} for disordered FG-Nup peptides.')
_msg = 'Please cite all appropriate articles, including:\n'
_msg = _msg + "\n and\n".join(ref.display() for ref in version_refs[self.version])
print(_msg)
if debye_length != 12.7:
logger.warning("""Deviating from the model published by Onck by choosing a Debye length differing from 1.27 nm.
......@@ -348,12 +396,14 @@ Fragasso, A., de Vries, H.W., Andersson, J. et al. A designer FG-Nup that recons
def _add_nonbonded_interaction(self, interaction, type_):
i = self.types.index(type_) if type_ in self.types else 0
for t in self.types[i:]:
self.add_nonbonded_interaction( interaction, typeA=type_, typeB=t )
# self.add_nonbonded_interaction( interaction, typeA=type_, typeB=t )
self.useNonbondedScheme( interaction, typeA=type_, typeB=t )
def _generate_polymer_beads(self, polymer, sequence, polymer_index=None):
return OnckBeads(polymer, sequence,
monomers_per_bead_group = self.monomers_per_bead_group,
poymer_index = polymer_index
poymer_index = polymer_index,
version = self.version
)
def set_damping_coefficient(self, damping_coefficient):
......
......@@ -139,7 +139,35 @@ def read_version_file(filename):
with open(filename) as fh:
version = fh.readlines()[0].strip()
return version
class Citation():
def __init__(self, author=None, title=None, journal=None, volume=None, number=None, pages=None, year=None, doi=None):
self.author = author
self.title = title
self.journal = journal
self.volume = volume
self.number = number
self.pages = pages
self.year = year
self.doi = doi
def display(self):
msg = ''
if self.author: msg = f'{self.author}. '
if self.title: msg = f'{msg}{self.title}. '
if self.journal: msg = f'{msg}{self.journal} '
if self.volume:
msg = f'{msg} {self.volume}{"," if any((self.number, self.pages, self.year)) else "."} '
if self.number:
msg = f'{msg}({self.number}){"" if any((self.pages,self.year)) else "."} '
if self.pages: msg = f'{msg}{self.pages}{"" if self.year else "."} '
if self.year: msg = f'{msg}({self.year}). '
if self.doi:
if self.doi[:4] == 'http':
msg = f'{msg}{self.doi}'
else:
msg = f'{msg}https://doi.org/{self.doi}'
return msg
try:
version = read_version_file(_version_file)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment