Source code for vermouth.processors.add_molecule_edges

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2018 University of Groningen
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
Processor adding edges between molecules.
"""

from .processor import Processor
from .. import edge_tuning
from ..molecule import Choice

# TODO: this should be defined in the force fields
DNA_DONORS = (
    {'resname': Choice(['DA', 'DA3', 'DA5']), 'atomname': Choice(['C2', 'N6'])},
    {'resname': Choice(['DG', 'DG3', 'DG5']), 'atomname': Choice(['N1', 'N2'])},
    {'resname': Choice(['DC', 'DC3', 'DC5']), 'atomname': 'N4'},
    {'resname': Choice(['DT', 'DT3', 'DT5']), 'atomname': 'N3'},
)
DNA_ACCEPTORS = (
    {'resname': Choice(['DA', 'DA3', 'DA5']), 'atomname': 'N1'},
    {'resname': Choice(['DG', 'DG3', 'DG5']), 'atomname': 'O6'},
    {'resname': Choice(['DC', 'DC3', 'DC5']), 'atomname': Choice(['N3', 'O2'])},
    {'resname': Choice(['DT', 'DT3', 'DT5']), 'atomname': Choice(['O2', 'O4'])},
)
DNA_HB_DIST = 0.30


[docs] class AddMoleculeEdgesAtDistance(Processor): """ Processor that adds edges within and between molecules. The processor adds edges between atoms, within or between molecules, when the atoms are part of the selections provided for each end of the edges, and the atoms are closer than a given threshold. Parameters ---------- threshold: float Distance threshold in nanometers under which to create an edge. templates_from: list[dict] List of node templates to select the atoms at one end of the edges. templates_to: list[dict] List of node template to select the atoms at the other end of the edges. attribute: str Name of the attribute under which are stores the coordinates. See Also -------- vermouth.molecule.attributes_match """ def __init__(self, threshold, templates_from, templates_to, attribute='position', min_edges=0): self.threshold = threshold self.templates_from = templates_from self.templates_to = templates_to self.attribute = attribute self.min_edges = min_edges
[docs] def run_system(self, system): """ Run the processor on the system. """ system.molecules = edge_tuning.add_edges_threshold( system.molecules, threshold=self.threshold, templates_a=self.templates_from, templates_b=self.templates_to, attribute=self.attribute, min_edges=self.min_edges, ) return system
[docs] class MergeNucleicStrands(AddMoleculeEdgesAtDistance): """ Add edges between complementary nucleic acid strands. By default, the edges are added in place of the hydrogen bonds between complementary bases. Parameters ---------- threshold: float Distance threshold in nanometers under which to create an edge. templates_donnors: list[dict] List of templates describing hydrogen donnors. templates_acceptors: list[dict] List of templates describing hydrogen acceptors. attribute: str Name of the attribute under which are store the node coordinates. """ def __init__(self, threshold=DNA_HB_DIST, templates_donnors=DNA_DONORS, templates_acceptors=DNA_ACCEPTORS, attribute='position'): super().__init__( threshold=threshold, templates_from=templates_donnors, templates_to=templates_acceptors, attribute=attribute, min_edges=4 )