ProDy 1.11 Series

1.11 (Oct 1, 2020)

New Features:

Rework of the Structure Mapping Functions

  • Implemented mapOntoChains() that calculates mappings of chains between two structures in a pairwise fashion.

  • Now newly added mapChainOntoChain() functions as the elementary operation of mapOntoChains() use mapChainOntoChain() that maps a Chain instance onto another.

  • Implemented combineAtomMaps() for optimally combining atommaps obtained from mapOntoChains or mapOntoChain, based on mapping coverages.

  • Implemented alignChains() for aligning two structures using mapOntoChains() and combineAtomMaps().

  • Now buildPDBEnsemble() uses alignChains() to perform the alignment. Therefore, instead of mapping_func, a match_func argument should be passed to the function for controlling how chains are (pre)matched. The match_func takes exactly two parameters, chain1 and chain2, and determines if these two chains should be tried to be mapped.

    Built-in options for match_func includes:

    • bestMatch() which allows all pairwise mappings between chains, and it is called bestMatch() because the optimal mapping will be chosen later automatically.
    • sameChid() which only maps the ones with the same chain ID, and the later optimization of mappings would not matter since the same chain IDs usually indicate a unique mapping.
    • userDefined(). It takes three parameters, which are two chains and a dict instance indicating correspondence Since it has three parameters, a wrapper is needed. Its usage is demonstrated by the following example:
    >>> ref = parsePDB('3qel', subset='ca').select('chain A or chain B')
    ... mob = parsePDB('4pe5', subset='ca')
    ...
    ... chmap = {'3qel_ca': 'AB', '4pe5_ca': 'CD'}
    ... GluRChains = lambda chain1, chain2: userDefined(chain1, chain2, chmap)
    ... atommaps = alignChains(mob, ref, mapping='ce', match_func=GluRChains)
    

Bug Fixes and Improvements: