How to compute projections#
Goal#
Extract a per-frame feature vector from a trajectory using a Metric* projection class.
Minimal example#
from moleculekit.molecule import Molecule
from moleculekit.projections.metricdistance import MetricDistance
mol = Molecule("3PTB")
# Configure the metric once
metric = MetricDistance(
"protein and name CA",
"resname BEN",
periodic="selections",
)
# Project returns (n_frames, n_features)
data = metric.project(mol)
print(data.shape)
Parameters that matter#
Parameter |
Type |
What it does |
|---|---|---|
|
|
First atom selection |
|
|
Second atom selection |
|
|
|
|
|
|
Common variations#
# Cα RMSD versus a reference structure
from moleculekit.projections.metricrmsd import MetricRmsd
rmsd_metric = MetricRmsd(mol, "protein and name CA")
rmsd_data = rmsd_metric.project(mol)
# Secondary structure assignment per frame
from moleculekit.projections.metricsecondarystructure import MetricSecondaryStructure
ss_metric = MetricSecondaryStructure()
ss_data = ss_metric.project(mol)
Gotchas#
Metric*classes are configured once and can be applied to multiple trajectories in a loop — reuse the same object for efficiency.Output shape is always
(n_frames, n_features).MetricDistancewithmetric="contacts"returns binary values; withmetric="distances"it returns float distances in Å.For periodic-box trajectories make sure
mol.boxis populated; otherwise setperiodic=None.