Contact to Distances Converter

GitHub Link to Code.

Helper class for converting contact-based feature selectors to distance-based.

Contact features are boolean (0/1) indicating presence/absence of contacts, which are not suitable for violin plots. This helper creates equivalent distance-based feature selectors for the same atom pairs, enabling continuous value visualization.

class mdxplain.plots.helper.contact_to_distances_converter.ContactToDistancesConverter

Helper class for converting contact features to distances.

Contacts are boolean features (0/1) that indicate whether atoms are within a cutoff distance. These are not suitable for violin plots which require continuous values. This helper creates a new feature selector with distances for the same atom pairs.

The conversion preserves:

  • Exact same atom pairs

  • Same feature ordering

  • Same trajectory coverage

Examples

>>> # Ensure feature selector uses continuous values
>>> continuous_selector = ContactToDistancesConverter.convert_contacts_to_distances(
...     pipeline_data, "important_contacts"
... )
>>> # Returns "important_contacts_distances" if conversion needed
>>> # Returns "important_contacts" if already continuous
static convert_contacts_to_distances(pipeline_data: PipelineData, feature_selector_name: str) Tuple[str, bool, float | None]

Ensure feature selector uses continuous distance features.

If the selector contains ‘contacts’ (boolean features), creates a new selector ‘{name}_distances’ with distances for the same atom pairs. If selector already uses continuous features, returns original name unchanged.

Parameters

pipeline_dataPipelineData

Pipeline data container with feature selectors

feature_selector_namestr

Name of the feature selector to check/convert

Returns

Tuple[str, bool, Optional[float]]

Tuple of (selector_name, is_temporary, contact_cutoff)

  • selector_name: Name of continuous feature selector

  • is_temporary: True if temporary selector was created, False otherwise

  • contact_cutoff: Contact cutoff value if converted from contacts, None otherwise

Raises

ValueError

If feature selector not found or conversion fails

Examples

>>> # Selector with contacts - creates new distances selector
>>> new_name = ContactToDistancesConverter.convert_contacts_to_distances(
...     pipeline_data, "key_contacts"
... )
>>> print(new_name)  # "key_contacts_distances"
>>> # Selector already with distances - returns original
>>> name = ContactToDistancesConverter.convert_contacts_to_distances(
...     pipeline_data, "key_distances"
... )
>>> print(name)  # "key_distances"

Notes

Boolean contact features cannot be meaningfully visualized in violin plots. This method automatically creates a distances-based version for visualization while preserving the original selector for analysis purposes.

The new selector name follows the pattern: “{original}_distances”

static cleanup_temporary_selector(pipeline_data: PipelineData, selector_name: str) None

Remove temporary distance selector.

Silently removes a feature selector that was created temporarily for visualization purposes.

Parameters

pipeline_dataPipelineData

Pipeline data container

selector_namestr

Name of selector to remove

Returns

None

Removes selector from pipeline_data

Examples

>>> # After creating temporary selector
>>> selector, is_temp = ContactToDistancesConverter.convert_contacts_to_distances(
...     pipeline_data, "contacts_only"
... )
>>> # Use selector...
>>> if is_temp:
...     ContactToDistancesConverter.cleanup_temporary_selector(
...         pipeline_data, selector
...     )

Notes

Only removes selectors that actually exist in pipeline_data. Silently does nothing if selector doesn’t exist.