Skip to content

Commit e95a061

Browse files
committed
An idiotical tail-counter function covering currently only "sn-*" tails.
1 parent 884b6ad commit e95a061

2 files changed

Lines changed: 39 additions & 0 deletions

File tree

src/fairmd/lipids/auxiliary/mollib.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
from fairmd.lipids import FMDL_DATA_PATH
1616
from fairmd.lipids.core import System
17+
from fairmd.lipids.molecules import Lipid
1718

1819

1920
def uname2element(mapping_name: str) -> str:
@@ -95,3 +96,18 @@ def guess_elements(system: System, u: mda.Universe) -> None:
9596
selection.atoms.elements = selection.n_atoms * [elname]
9697
# end mapping loop
9798
# end molecules loop
99+
100+
101+
def get_tails_of_lipid(lipid: Lipid) -> list[str]:
102+
"""Get the tails of a lipid molecule.
103+
104+
:param lipid: Lipid molecule
105+
:return: List of tails (str-s)
106+
"""
107+
tails = []
108+
for props in lipid.mapping_dict.values():
109+
if "FRAGMENT" in props and props["FRAGMENT"].startswith("sn-"):
110+
tail_id = props["FRAGMENT"]
111+
if tail_id not in tails:
112+
tails.append(tail_id)
113+
return tails

tests/test_misc.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,26 @@ def temporary_dir():
192192
check.is_not_in("Dielectric", line)
193193
check.is_not_in("ChargeDensity", line)
194194
check.equal(rcode, RCODE_ERROR)
195+
196+
197+
def test_get_tails():
198+
"""Test Lipid.get_tails function."""
199+
from fairmd.lipids.molecules import Lipid
200+
from fairmd.lipids.auxiliary.mollib import get_tails_of_lipid
201+
202+
lipid = Lipid(name="DPPC")
203+
lipid.register_mapping("mappingDPPCberger.yaml")
204+
205+
tails = get_tails_of_lipid(lipid)
206+
check.is_instance(tails, list)
207+
check.equal(len(tails), 2)
208+
check.is_in("sn-1", tails)
209+
check.is_in("sn-2", tails)
210+
211+
lipid = Lipid(name="TOCL")
212+
lipid.register_mapping("mappingTOCLcharmm.yaml")
213+
214+
tails = get_tails_of_lipid(lipid)
215+
check.equal(len(tails), 4)
216+
check.is_in("sn-1 1", tails)
217+
check.is_in("sn-2 1", tails)

0 commit comments

Comments
 (0)