This is used for calculating the surface properties of membrane (bilayer/monolayer or lipid droplet systems). This includes interdigitation analysis, tail order parameters (Scd), surface molecule lifetimes.
The overlap parameter,
- 0 indicates no overlap.
-
1 represents identical density distributions at a given
$z$ -position.
It is defined as:
The total interdigitation
The interdigitation analysis quantifies how lipid tails and surface molecules (e.g., triolein) interpenetrate along the membrane normal (z-axis). It follows these steps:
- Define Groups
Select phospholipid tails and neutral lipid atoms (e.g., TRIO). Optionally, define strong interdigitation criteria, such as a minimum number of oxygen atoms above the PL tail midplane. - Compute Density Profiles
Calculate normalized z-density distributions for both PL and TG groups. - Calculate Overlap Parameter
At each z-position, compute the overlap ρov(z) - Integrate to Get Total Interdigitation
Integrate ρov(z) across the z-dimension to yield:
The example below is for lipid droplet (LD) trilayers. However, this can be done with differing bilayer or membrane systems.
We can then determine the diferent types of interdigition. For example, in a LD monolayer, there is generally triolein interacting with the phospholipids. There would be weak interdigitation (tails of the trioleins interdigitating with the PL), and strong interdigitation (3 or more oxygens of triolein glycerol above z-dim midpoint of PL tails). This is fully modifiable by lipid type, tail chain definition, and strong int. definiton in the functions.
|
Strong interdigitation has implications to biological systems. For example, it correlates with the area-per-lipid of membranes, leading to larger membrane defects. |
To compute lipid interdigitation, use:
import MDAnalysis as mda
from analysis.Surface import InterdigitationAnalysis
# Load trajectory
u = mda.Universe("membrane.gro", "trajectory.xtc")
# Set up and run the analysis
analysis = InterdigitationAnalysis(
u,
lipids=["POPC"], # Membrane lipid(s)
NL="TRIO", # Neutral lipid residue name
water="TIP3", # Water residue name
start=0,
stop=500, # Analyze frames 0–500
tail_atoms=None, # Use default membrane tail atoms
min_oxygens=3 # Strong interdigitation: 3+ oxygens
)
analysis.run()
analysis.save_results(out_dir="interdig_results")
# Access results in Python
print("Total interdigitation:", analysis.results["inter"]["total"][:5])
print("Overlap profile sample:", analysis.results["ov"]["total"][:5])
print("Strong/weak counts:", analysis.results["ratio"][f"{analysis.base.NL.lower()}-to-pl"][:5])The order parameter
The order parameter is defined as:
Where:
- θ is the angle between the C–H bond vector and the membrane normal (z-axis).
- ⟨·⟩ represents an ensemble average over time and molecules.
- Scd ≈ 1.0 → Highly ordered lipid tails (rigid packing).
- Scd ≈ 0.0 → Disordered lipid tails (fluid-like).
- Negative values indicate tilt away from the normal.
This calculation is performed using MDAnalysis and follows these steps:
- Identify Lipid Tails: Select C–H pairs in lipid acyl chains.
- Compute Bond Orientations: Measure angles between C–H vectors and the membrane normal.
- Average Over Time: Compute Scd values per carbon index across all frames.
- Output Results: Save results in a
.txtfile.
|
Tail order parameter of different forcefields and system paramters provides insight to physical properties of the biological membrane. |
To compute Scd for POPC tails, use:
import MDAnalysis as mda
import numpy as np
from analysis.order import OrderParameters
from analysis import opc
# Load trajectory
u = mda.Universe("membrane.gro", "trajectory.xtc")
# Set up and run the analysis
op = OrderParameters(
u,
atomlists=opc.POPC1,
selection="resname POPC",
start=0,
stop=500
)
op.run()
np.savetxt("order_parameters.txt", op.results["output"], fmt="%d %.6f")This generates order_parameters.txt with ( S_{cd} ) values per carbon index.
Here’s the concise, LaTeX-formatted README section for Surf-TG Lifetime Analysis, ready for direct pasting:
The lifetime analysis tracks surface-active molecules at the lipid interface. While focused on triolein (Surf-TG), this method applies to any molecule interacting with monolayers, bilayers, or membranes.
A molecule is surface-active if it remains at the interface for continuous frames. The total surface residence time is:
where:
- Tsurf is the total surface residence time.
- δi = 1 if the molecule is surface-bound at frame i, else 0.
- Δt is the frame time step.
- N is the number of trajectory frames.
- Identify surface molecules based on z-position and structural constraints.
- Track residence states across trajectory frames.
- Apply a buffer period to remove transient fluctuations.
- Store residence times for each molecule.
To compute Surf-TG lifetimes, use:
import MDAnalysis as mda
from analysis.Lifetime import LifetimeAnalysis
from analysis.utils import save_lifetimes_to_json
# Load trajectory
universe = mda.Universe("membrane.gro", "trajectory.xtc")
# Initialize lifetime analysis
lifetime_analysis = LifetimeAnalysis(
universe,
lipids=["POPC"],
NL="TRIO",
water="TIP3",
buffer_length=20,
min_oxygens=3
)
# Run the analysis over frames 0–500
lifetime_analysis.run()
# Save results to JSON
save_lifetimes_to_json(lifetime_analysis.results, "lifetime_results")This creates lifetime_results/trio_lifetimes.json, storing lifetimes per molecule.
The output contains surface residence times per molecule:
{
"101": [10, 12, 18],
"205": [5, 7, 25],
"312": [30, 40, 42]
}where keys represent molecule IDs and values are lifetimes.
- Longer lifetimes indicate strong surface retention.
- Force field-dependent trends can be observed across simulations.
The repository includes example scripts demonstrating the analysis classes. Run them from the repository root with Python:
python examples/order_example.py
python examples/lifetime_example.py
python examples/interdigitation_example.py
python examples/vector_orientation_example.pyEach script loads the data in data/ and prints or saves results in the
examples/ folder.


.png)