ó
šxTc           @   sª  d  d l  m Z d  d l m Z d  d l m Z d  d l m Z m Z m Z m	 Z	 m
 Z
 m Z d  d l m Z d  d l Z d  d l Z d  d l Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d  e f d! „  ƒ  YZ  d" e f d# „  ƒ  YZ! d$ e f d% „  ƒ  YZ" d& e f d' „  ƒ  YZ# d( e f d) „  ƒ  YZ$ d* e f d+ „  ƒ  YZ% d, e f d- „  ƒ  YZ& d. e f d/ „  ƒ  YZ' d0 e f d1 „  ƒ  YZ( d2 e f d3 „  ƒ  YZ) d4 e f d5 „  ƒ  YZ* d6 e f d7 „  ƒ  YZ+ d8 e f d9 „  ƒ  YZ, d: e f d; „  ƒ  YZ- d< e f d= „  ƒ  YZ. d> e f d? „  ƒ  YZ/ d@ e f dA „  ƒ  YZ0 dB e0 f dC „  ƒ  YZ1 dD e0 f dE „  ƒ  YZ2 dF e f dG „  ƒ  YZ3 dH e3 f dI „  ƒ  YZ4 dJ e3 f dK „  ƒ  YZ5 dL e3 f dM „  ƒ  YZ6 dN „  Z7 d S(O   iÿÿÿÿ(   t   division(   t   rsam(   t   residue_substitution(   t   roott   modelt   chaint   residue_groupt
   atom_groupt   atom(   t   flexNt   ForwardIndexerc           B   s   e  Z d  Z d „  Z RS(   sD   
    Class to lookup a descriptor object from the actual object
    c         C   sk  t  t j d | ƒ d f g ƒ t  g  t | j ƒ  ƒ D]$ \ } } t j d | ƒ | f ^ q4 ƒ t  g  t | j ƒ  ƒ D]$ \ } } t j d | ƒ | f ^ qt ƒ t  g  t | j ƒ  ƒ D]$ \ } } t j	 d | ƒ | f ^ q´ ƒ t  g  t | j
 ƒ  ƒ D]$ \ } } t j d | ƒ | f ^ qô ƒ t  g  t | j ƒ  ƒ D]$ \ } } t j d | ƒ | f ^ q4ƒ g |  _ d  S(   Nt   obji    (   t   dictt   Entityt   Roott	   enumeratet   modelst   Modelt   chainst   Chaint   residue_groupst   ResidueGroupt   atom_groupst	   AtomGroupt   atomst   Atomt   arrays(   t   selfR   t   it   e(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   __init__   s     ::::(   t   __name__t
   __module__t   __doc__R   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR
      s   t   ReverseIndexerc           B   s   e  Z d  Z d „  Z RS(   sD   
    Class to lookup from the actual object from a deferred one
    c         C   s^   | g t  | j ƒ  ƒ t  | j ƒ  ƒ t  | j ƒ  ƒ t  | j ƒ  ƒ t  | j ƒ  ƒ g |  _ d  S(   N(   t   listR   R   R   R   R   R   (   R   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   3   s    (   R   R    R!   R   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR"   .   s   t   MMDBIndexerc           B   s,   e  Z d  Z d d d d d g Z d „  Z RS(   s&   
    From mmdb selection to index
    i   R   i   R   i   R   i   R   i   R   c         C   s§   i d g d 6i  i  i  i  i  g |  _  x{ |  j D]p \ } } xa t t | | ƒ ƒ  ƒ D]G \ } } t d | d | ƒ j ƒ  } |  j  | j | g  ƒ j | ƒ qT Wq/ Wd  S(   Ni    R   t   level(    (   R   t   CREATIONR   t   getattrR   t
   specifierst
   setdefaultt   append(   R   R   R%   t   methodt   indexR   t   key(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   L   s    %(   i   s   models(   i   s   chains(   i   s   residue_groups(   i   s   atom_groups(   i   s   atoms(   R   R    R!   R&   R   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR$   ?   s   	c   	   	   C   s  g  } x|  j  ƒ  D]ó } g  } x× | j ƒ  D]É } g  } x¤ | j ƒ  D]– } g  | j ƒ  D]H } | j | j ƒ  j j ƒ  g | j | j	 | j
 g t | j ƒ g ^ qX } | j | j ƒ  | j j ƒ  | j ƒ  d j | g ƒ qE W| j | j | g ƒ q, W| j | ƒ q W| S(   Ni    (   R   R   R   R   t   namet   parentt   altloct   stript   occt   bt   elementR#   t   xyzR*   t   resseq_as_intt   icodeR   t   resnamet   id(	   R   t
   expressiont   mt   m_exprt   ct   rg_exprt   rgt   at   a_expr(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   to_coot_s_expression]   s     X	t
   Descriptorc           B   sS   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 d „  ƒ Z
 RS(   sB   
    Descriptor to portably identify an entity unambiguously 
    c         C   s   | |  _  | |  _ d  S(   N(   R%   R,   (   R   R%   R,   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   „   s    	c         C   s'   t  d | j |  j |  j d |  j ƒ S(   NR   R%   (   R   R   R%   R,   (   R   t   indexer(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt	   as_entityŠ   s    c         C   s   |  j  |  j f S(   N(   R%   R,   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   params’   s    c         C   s   t  |  j ƒ  ƒ S(   N(   t   hashRF   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   __hash__—   s    c         C   s,   t  | |  j ƒ s t S|  j ƒ  | j ƒ  k S(   N(   t
   isinstancet	   __class__t   FalseRF   (   R   t   other(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   __eq__œ   s    c         C   s   |  | k S(   N(    (   R   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   __ne__¤   s    c         C   s1   g  | j  | | D] } |  d | d | ƒ ^ q S(   NR%   R,   (   R   (   t   clsR%   R(   RD   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   from_specifiers©   s    (   R   R    R!   R   RE   RF   RH   RM   RN   t   classmethodRP   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRC      s   						R   c           B   sm  e  Z d  Z e e e e e e g Z	 e
 g  e e	 ƒ D] \ Z Z e e f ^ q4 ƒ Z d d „  f d d „  f d d „  f d d „  f d d	 „  f d
 d „  f g Z d d „  f d d „  f d d „  f d d „  f d d „  f d d „  f g Z d „  d „  d „  d „  d „  d „  g Z d „  d „  d  „  d! „  d" „  d# „  g Z d$ „  Z d% „  Z d& „  Z d' „  Z d( „  Z d) „  Z d* „  Z d+ „  Z d, „  Z d- „  Z d. „  Z d/ „  Z d0 „  Z d1 „  Z  d2 „  Z! d3 „  Z" d4 „  Z# d5 „  Z$ d6 „  Z% d7 „  Z& d8 „  Z' e( d9 „  ƒ Z) e( d: „  ƒ Z* e( d; „  ƒ Z+ e( d< „  ƒ Z, e( d= „  ƒ Z- e( d> „  ƒ Z. e( d? „  ƒ Z/ RS(@   sI   
    Hashing, naming and selectors for iotbx.pdb.hierarchy.* objects
    t    c         C   s   d S(   N(    (    (   t   h(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   <lambda>¸   s    s	   id = '%s'c         C   s   |  j  S(   N(   R9   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   ¹   s    c         C   s   |  j  S(   N(   R9   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   º   s    s   resid = '%s'c         C   s
   |  j  ƒ  S(   N(   t   resid(   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   »   s    s   resname = '%s', altloc = '%s'c         C   s   |  j  |  j f S(   N(   R8   R0   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   ¼   s    s   name = '%s'c         C   s   |  j  S(   N(   R.   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   ½   s    t   allc         C   s   d S(   N(    (    (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   À   s    s
   model '%s'c         C   s   |  j  S(   N(   R9   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Á   s    s
   chain '%s'c         C   s   |  j  S(   N(   R9   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Â   s    s   resseq '%s' and icode '%s'c         C   s   |  j  |  j f S(   N(   t   resseqR7   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ã   s    s
   altid '%s'c         C   s   |  j  S(   N(   R0   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ä   s    s	   name '%s'c         C   s   |  j  S(   N(   R.   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Å   s    c         C   s   d S(   N(    (    (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   È   s    c         C   s
   |  j  f S(   N(   R9   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   É   s    c         C   s
   |  j  f S(   N(   R9   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ê   s    c         C   s   |  j  |  j f f S(   N(   RW   R7   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ë   s    c         C   s
   |  j  f S(   N(   R0   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ì   s    c         C   s
   |  j  f S(   N(   R.   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Í   s    c         C   s   d S(   N(    (    (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ð   s    c         C   s   d S(   N(    (    (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ñ   s    c         C   s
   |  j  f S(   N(   R9   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ò   s    c         C   s   |  j  ƒ  |  j j ƒ  f S(   N(   R6   R7   R1   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ó   s    c         C   s   d S(   N(    (    (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Ô   s    c         C   s   |  j  |  j ƒ  j j ƒ  f S(   N(   R.   R/   R0   R1   (   RS   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   Õ   s    c         C   s2   t  | |  j | ƒ s t ‚ | |  _ | |  _ d  S(   N(   RI   t   IOTBX_HIERARCHYt   AssertionErrort   _objectt   _level(   R   R   R%   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   Ø   s    	c         C   s   |  j  S(   N(   RZ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   objectß   s    c         C   s   |  j  S(   N(   R[   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR%   ä   s    c         C   sQ   |  j  d k r t d ‚ n  |  j j ƒ  } | s4 d  S|  j d | d |  j  d ƒ S(   Ni    s   root has no parentR   R%   i   (   R[   t
   ValueErrorRZ   R/   t   NoneRJ   (   R   R/   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR/   é   s    c         C   s   |  j  |  j S(   N(   RX   R[   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   iotbx_classö   s    c         C   s$   t  d |  j d | j |  j |  ƒ S(   NR%   R,   (   RC   R[   R   (   R   RD   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   as_descriptorû   s    	c         C   s   |  j  d |  j ƒ S(   Nt   data(   t   formatt   NAMES(   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   level_identifier  s    c         C   s   |  j  d |  j ƒ S(   NRa   (   Rb   t	   SELECTORS(   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   level_selector  s    c         C   s   |  j  |  j |  j ƒ S(   N(   t
   SPECIFIERSR[   RZ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   level_specifier  s    c         C   s   |  j  |  j |  j ƒ S(   N(   t   COOT_SPECIFIERSR[   RZ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   level_coot_selector  s    c         C   s!   d |  j  |  j j |  j ƒ  f S(   Ns   %s (%s)(   RX   R[   R   Rd   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt
   level_name  s    c         C   s,   d j  g  |  j ƒ  D] } | j ƒ  ^ q ƒ S(   Ns    and (   t   joint	   hierarchyRf   (   R   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   selector  s    c         C   s2   t  t j g  |  j ƒ  D] } | j ƒ  ^ q d ƒ S(   N(    (   t   reducet   operatort   addRm   Rh   (   R   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR(   $  s    "c         C   s2   t  t j g  |  j ƒ  D] } | j ƒ  ^ q d ƒ S(   N(    (   Ro   Rp   Rq   Rm   Rj   (   R   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   coot_selector-  s    "c         C   sX   |  g } |  } x< d | j  k  rM | j ƒ  } | s7 Pn  | j | ƒ | } q Wt | ƒ S(   Ni    (   R[   R/   R*   t   reversed(   R   RS   t   currentR/   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRm   6  s    	
c         C   s"   |  j  ƒ  j ƒ  } | j ƒ  d k S(   Ni    (   Rm   t   nextR%   (   R   t   top(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   is_connectedG  s    c         C   s$   | |  j  \ } } | | |  j ƒ S(   N(   R[   RZ   (   R   Ra   Rb   R+   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRb   N  s    c         C   s   t  |  j j ƒ  ƒ S(   N(   RG   RZ   t	   memory_id(   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRH   T  s    c         C   s   |  j  j ƒ  | j  j ƒ  k S(   N(   RZ   Rx   (   R   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRM   Y  s    c         C   s   |  | k S(   N(    (   R   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRN   ^  s    c         C   sq   |  j  d k r |  j ƒ  St |  j ƒ  ƒ } | d j  d k rK | d } n  d j g  | D] } | j ƒ  ^ qX ƒ S(   Ni    i   s   , (   R[   Rk   R#   Rm   Rl   (   R   RS   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   __str__c  s    
c         C   s;   | j  |  j k r t d ‚ n  |  d | d |  j | j  ƒ S(   Ns   Unknown entity classR   R%   (   RJ   t	   LEVEL_FORR]   (   RO   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   Createp  s    c         C   s   |  d | d |  j  t ƒ S(   NR   R%   (   Rz   R   (   RO   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   y  s    c         C   s   |  d | d |  j  t ƒ S(   NR   R%   (   Rz   R   (   RO   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR     s    c         C   s   |  d | d |  j  t ƒ S(   NR   R%   (   Rz   R   (   RO   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   …  s    c         C   s   |  d | d |  j  t ƒ S(   NR   R%   (   Rz   R   (   RO   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   ‹  s    c         C   s   |  d | d |  j  t ƒ S(   NR   R%   (   Rz   R   (   RO   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   ‘  s    c         C   s   |  d | d |  j  t ƒ S(   NR   R%   (   Rz   R   (   RO   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   —  s    (0   R   R    R!   R   R   R   R   R   R   RX   R   R   R   R=   Rz   Rc   Re   Rg   Ri   R   R\   R%   R/   R_   R`   Rd   Rf   Rh   Rj   Rk   Rn   R(   Rr   Rm   Rw   Rb   RH   RM   RN   Ry   RQ   R{   R   R   R   R   R   R   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   °   sn   1																								t   Instructionc           B   s   e  Z d  Z d „  Z RS(   s3   
    Generic instruction related functionality
    c         C   s   |  | k S(   N(    (   R   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRN   ¢  s    (   R   R    R!   RN   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR|   �  s   t   DeleteInstructionc           B   sn   e  Z d  Z i d e 6d e 6d e 6Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z e d
 „  ƒ Z RS(   s!   
    Deletes a residue group
    t   remove_residue_groupt   remove_atom_groupt   remove_atomc         C   sR   | j  ƒ  } | s" t d | ‚ n  t | j ƒ  |  j | j ƒ  ƒ | j ƒ  ƒ d  S(   Ns   %s has no parent(   R/   t   RuntimeErrorR'   R\   t
   METHOD_FORR_   (   R   t   entityR/   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   apply_to²  s    c         C   s   d | S(   Ns	   Delete %s(    (   R   Rƒ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   log¼  s    c         C   s   |  j  j d f S(   N(    (   RJ   R   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   parseable_formÁ  s    c         C   s   t  S(   N(   t   True(   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   is_structural_changeÆ  s    c         C   s   t  |  j ƒ S(   N(   RG   RJ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRH   Ë  s    c         C   s   t  | |  j ƒ S(   N(   RI   RJ   (   R   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRM   Ð  s    c         C   s   |  ƒ  S(   N(    (   RO   RF   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   from_paramsÕ  s    (   R   R    R!   R   R   R   R‚   R„   R…   R†   Rˆ   RH   RM   RQ   R‰   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR}   §  s   
	
					t   SetInstructionc           B   sÅ   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e
 d „  ƒ Z e
 d	 „  ƒ Z e
 d
 „  ƒ Z e
 d „  ƒ Z e
 d „  ƒ Z e
 d „  ƒ Z e
 d „  ƒ Z e
 d „  ƒ Z RS(   s   
    Set a property
    c         C   s   | |  _  d  S(   N(   R„   (   R   t   setter(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   à  s    c         C   s   d |  j  j | f S(   Ns   Set '%s' to '%s' on %s(   R„   t   description(   R   Rƒ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR…   å  s    c         C   s   |  j  j d S(   Ni    (   R„   RŒ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   propertyê  s    c         C   s   |  j  j |  j j f S(   N(   RJ   R   R„   RŒ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR†   ï  s    c         C   s"   |  j  ƒ  d k p! |  j  ƒ  d k S(   Ns   b-factorR4   (   R�   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRˆ   ô  s    c         C   s   t  |  j |  j j f ƒ S(   N(   RG   RJ   R„   RŒ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRH   ü  s    c         C   s,   t  | |  j ƒ s t S|  j j | j j k S(   N(   RI   RJ   RK   R„   RŒ   (   R   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRM     s    c            s+   ‡  f d †  } d ˆ  f | _  |  d | ƒ S(   Nc            s   ˆ  |  j  ƒ  _ d  S(   N(   R\   RW   (   Rƒ   (   t   value(    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‹     s    RW   R‹   (   RŒ   (   RO   RŽ   R‹   (    (   RŽ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   Resseq	  s    c            s+   ‡  f d †  } d ˆ  f | _  |  d | ƒ S(   Nc            s   ˆ  |  j  ƒ  _ d  S(   N(   R\   R7   (   Rƒ   (   RŽ   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‹     s    R7   R‹   (   RŒ   (   RO   RŽ   R‹   (    (   RŽ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   Icode  s    c            s+   ‡  f d †  } d ˆ  f | _  |  d | ƒ S(   Nc            s   ˆ  |  j  ƒ  _ d  S(   N(   R\   R8   (   Rƒ   (   RŽ   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‹   $  s    R8   R‹   (   RŒ   (   RO   RŽ   R‹   (    (   RŽ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   Resname!  s    c            s+   ‡  f d †  } d ˆ  f | _  |  d | ƒ S(   Nc            s   |  j  ƒ  j ˆ  ƒ d  S(   N(   R\   t   set_b(   Rƒ   (   RŽ   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‹   0  s    s   b-factorR‹   (   RŒ   (   RO   RŽ   R‹   (    (   RŽ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   Bfactor-  s    c            s+   ‡  f d †  } d ˆ  f | _  |  d | ƒ S(   Nc            s   |  j  ƒ  j ˆ  ƒ d  S(   N(   R\   t   set_element(   Rƒ   (   RŽ   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‹   <  s    R4   R‹   (   RŒ   (   RO   RŽ   R‹   (    (   RŽ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   Element9  s    c            s+   ‡  f d †  } d ˆ  f | _  |  d | ƒ S(   Nc            s   |  j  ƒ  j ˆ  ƒ d  S(   N(   R\   t
   set_hetero(   Rƒ   (   RŽ   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‹   H  s    t   heteroR‹   (   RŒ   (   RO   RŽ   R‹   (    (   RŽ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   HeteroE  s    c            s+   ‡  f d †  } d ˆ  f | _  |  d | ƒ S(   Nc            s   |  j  ƒ  j ˆ  ƒ d  S(   N(   R\   t   set_name(   Rƒ   (   RŽ   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‹   T  s    R.   R‹   (   RŒ   (   RO   RŽ   R‹   (    (   RŽ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   NameQ  s    c         C   se   i |  j  d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6|  j d 6} | | d d	 | d
 ƒ S(   NRW   R7   R8   s   b-factorR4   R—   R.   i    RŽ   i   (   R�   R�   R‘   R“   R•   R˜   Rš   (   RO   RF   t   constructor_for(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‰   ]  s    





(   R   R    R!   R   R…   R�   R†   Rˆ   RH   RM   RQ   R�   R�   R‘   R“   R•   R˜   Rš   R‰   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRŠ   Û  s    							t   AttachInstructionc           B   si   e  Z d  Z i d e 6Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z e d	 „  ƒ Z RS(
   s)   
    Attaches atoms to an atom_group
    t   append_atomc         C   s   | |  _  d  S(   N(   Ra   (   R   Ra   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   v  s    c         C   s9   |  j  j ƒ  } t | j ƒ  |  j | j ƒ  ƒ | ƒ d  S(   N(   Ra   t   as_iotbx_objectR'   R\   R‚   R_   (   R   Rƒ   t   child(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR„   {  s    c         C   s   d |  j  j ƒ  | f S(   Ns   Attach %s to %s(   Ra   t
   identifier(   R   Rƒ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR…   �  s    c         C   s(   |  j  j |  j j  j |  j j ƒ  f f S(   N(   RJ   R   Ra   R†   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR†   †  s    	c         C   s   t  S(   N(   R‡   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRˆ   Ž  s    c         C   s   t  |  j |  j f ƒ S(   N(   RG   RJ   Ra   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRH   “  s    c         C   s&   t  | |  j ƒ s t S|  j | j k S(   N(   RI   RJ   RK   Ra   (   R   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRM   ˜  s    c         C   s$   |  d t  t | d ƒ | d Œ  ƒ S(   NRa   i    i   (   R'   R   (   RO   RF   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‰      s    (   R   R    R!   R   R‚   R   R„   R…   R†   Rˆ   RH   RM   RQ   R‰   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRœ   m  s   
							t   ResetIsotropicInstructionc           B   sS   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 d „  ƒ Z
 RS(   s$   
    Deletes uij from an entity
    c         C   s   | j  ƒ  j ƒ  d  S(   N(   R\   t	   uij_erase(   R   Rƒ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR„   «  s    c         C   s   d | S(   Ns   Reset %s to isotropic(    (   R   Rƒ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR…   °  s    c         C   s   |  j  j d f S(   N(    (   RJ   R   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR†   µ  s    c         C   s   t  S(   N(   R‡   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRˆ   º  s    c         C   s   t  |  j ƒ S(   N(   RG   RJ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRH   ¿  s    c         C   s   t  | |  j ƒ S(   N(   RI   RJ   (   R   RL   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRM   Ä  s    c         C   s   |  ƒ  S(   N(    (   RO   RF   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR‰   É  s    (   R   R    R!   R„   R…   R†   Rˆ   RH   RM   RQ   R‰   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR¡   ¦  s   						t   ChainSamplec           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s    
    A chain to be modified
    c         C   s   | |  _  | |  _ i  |  _ d  S(   N(   R   t   mmtt   store(   R   R   R¤   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   Õ  s    		c      
   C   s�   d } | |  j  k r‚ t j d |  j d t t |  j j |  j j ƒ ƒ d t t |  j j	 |  j j
 ƒ ƒ d |  j j ƒ |  j  | <n  |  j  | S(   Nt   radiiR   t   radius_for_mainchain_atomt   sidechain_data_fort   unknown_radius(   R¦   (   R¥   R   t   VanDerWaalsRadiusR   R   t   zipR¤   t   mainchain_atom_namest   mainchain_atom_radiit   three_letter_codest   sidechain_atom_radii_dictst   unknown_atom_radius(   R   R-   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt
   atom_radiiÜ  s    				c         C   sT   d | | f } | |  j  k rI t j d |  j d |  j ƒ  ƒ |  j  | <n  |  j  | S(   Nt   asaR   t	   vdw_radii(   R¥   R   t   AccessibleSurfaceAreaR   R±   (   R   t   radiust	   precisionR-   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   accessible_surface_areaô  s    		c         C   s   d  S(   N(   R^   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   identity  s    (   R   R    R!   R   R±   R·   R¸   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR£   Ð  s
   			t   AlignedChainSamplec           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s    
    A chain to be modified
    c         C   s·   t  j d | d | d | j | d | j d | d | ƒ } t | ƒ | j ƒ  k sX t ‚ t t |  ƒ j	 d | d | ƒ | |  _
 | |  _ | |  _ t  j d |  j d |  j ƒ |  _ d  S(	   NR   t   mtypet   sequencet   gapt   min_hssp_lengtht   min_matching_fractionR¤   R   (   R   t   match_chain_to_alignmentt
   alignmentsR¼   t   lent   lengthRY   t   superR¹   R   t	   alignmentR,   t   alignedt   chain_residue_groups_differenceR   t	   unaligned(   R   R   RÄ   R,   R¤   R½   R¾   RÅ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR     s    								c         C   s   |  j  j d S(   Ni    (   RÄ   RÀ   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   target_sequence"  s    c         C   s   |  j  j |  j S(   N(   RÄ   RÀ   R,   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   model_sequence'  s    c         C   s=   d d  l  } | j j d d d g d |  j ƒ  |  j ƒ  g ƒ S(   Niÿÿÿÿt   namest   TARGETt   MODELRÀ   (   t   iotbx.bioinformaticst   bioinformaticsRÄ   RÈ   RÉ   (   R   t   iotbx(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   pairwise_alignment,  s    c   	      C   sÖ   d | | f } | |  j  k rË | |  j j j ƒ  k rR t d | |  j j f ‚ n  |  j j j d | ƒ } t j d |  j	 d | d | ƒ } | j
 ƒ  \ } } g  | j D] } | | | ^ q§ |  j  | <n  |  j  | S(   Nt
   similaritys   Unknown matrix %s for type %sR.   RÄ   t   matrixt   unknown(   R¥   R¤   t   similarity_matrix_suiteRÊ   R�   R.   t
   matrix_forR   t   SequenceSimilarityRÄ   t   normalizationt   values(	   R   RÒ   RÓ   R-   R;   t   scorest   scalet   baseRŽ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   sequence_similarity5  s    			.c         C   s   |  j  ƒ  j ƒ  S(   N(   RÐ   t   identity_fraction(   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR¸   M  s    (	   R   R    R!   R   RÈ   RÉ   RÐ   RÜ   R¸   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR¹     s   						t	   Blueprintc           B   sA   e  Z d  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z RS(   s6   
    Object to contain deferred modification data
    c         C   s   g  |  _  d  S(   N(   Ra   (   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   W  s    c         C   s   |  j  j | ƒ d  S(   N(   Ra   R*   (   R   t   datum(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRq   \  s    c         C   sI   g  } x< |  j  D]1 \ } } | j d | ƒ } | j | | f ƒ q W| S(   NRD   (   Ra   RE   R*   (   R   t	   r_indexert   instructionsR   t   dR   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRá   a  s
    c         C   s[   g  } xN |  j  D]C \ } } | j d | ƒ j ƒ  } | j | j ƒ  | j | f ƒ q W| S(   NRD   (   Ra   RE   R(   R*   R†   R%   (   R   Rà   t   modificationsR   Râ   t   specs(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   formatted_modificationsl  s
    #c         C   sF   |  ƒ  } x6 | D]. \ } } | j  d | | j d | ƒ f ƒ q W| S(   NRß   RD   (   Rq   R`   (   RO   Rá   RD   t   bpR   R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   from_instructionsw  s    	&(	   R   R    R!   R   Rq   Rá   Rå   RQ   Rç   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRÞ   R  s   				t   Sculptorc           B   st   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 e d	 „  ƒ Z e d
 „  ƒ Z RS(   sB   
    Coordinates mainchain, sidechain and b-factor processing
    c	   	      C   sL   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t	   deletionst
   polishingst   renumbert   pruningst   completionst   renamet   bfactorst	   minimum_b(	   R   Ré   Rê   Rë   Rì   Rí   Rî   Rï   Rð   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   ˆ  s    							c         C   s  |  j  d | ƒ } |  j j d | ƒ \ } } |  j d | ƒ \ } } } }	 }
 } |  j d | ƒ \ } } } g  } x“| j j ƒ  D]‚} t j d | ƒ } | | k rÌ | j	 t
 j d | | ƒ | f ƒ n  | | k rþ | j	 t
 j d | | ƒ | f ƒ n  | | k r#| j	 t ƒ  | f ƒ n  xÞ| j ƒ  D]Ð} t j d | ƒ } | | k rz| j	 t
 j d | | ƒ | f ƒ n  | | k rÉx@ | | D]1 } | j | 7_ | j	 t d | ƒ | f ƒ q‘Wn  x4| j ƒ  D]&} t j d | ƒ } | | k r| j	 t ƒ  | f ƒ n  | |	 k rE| j	 t
 j d |	 | ƒ | f ƒ n  | |
 k rw| j	 t
 j d |
 | ƒ | f ƒ n  | | k r©| j	 t
 j d | | ƒ | f ƒ n  | | k rÎ| j	 t ƒ  | f ƒ n  | | k rÖ| j	 t
 j d t ƒ | f ƒ qÖqÖWq0Wq‚ W| S(   Nt   sampleR   RŽ   Ra   (   t   run_mainchain_designRë   t	   calculatet   run_sidechain_designt   run_bfactor_designR   R   R   R   R*   RŠ   R�   R�   R}   R   R   R‘   R3   Rœ   R   R   Rš   R•   R“   R¡   R˜   RK   (   R   Rñ   t   loggert   moribund_rgst
   resseq_fort	   icode_fort   moribund_atomst   resname_fort   hetero_resetst   name_fort   element_fort   generated_fort   bfactor_fort   isotropic_resetst   b_shiftRá   R   R?   R   t   agRâ   R   R@   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   run   sX    $      (c         C   s­   |  j  s t ƒ  S|  j d |  j  d | d t ƒ } t g  t | j | ƒ D]* \ } } | rG | rG t j d | ƒ ^ qG ƒ } | j g  | j	 D] } t j d | ƒ ^ qŠ ƒ | S(   Nt
   algorithmsRñ   t   reducerR   (
   Ré   t   sett)   collate_alignment_frame_algorithm_resultst   anyR«   RÅ   R   R   t   updateRÇ   (   R   Rñ   t   resultR?   t   mbt   moribund(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   run_deletion_algorithmsê  s    				')c         C   sb   |  j  d | ƒ } xI |  j D]> } | j d | d | ƒ \ } } | j | ƒ | j | ƒ q W| S(   NRñ   R  (   R  Rê   Ró   t   difference_updateR
  (   R   Rñ   R  t	   algorithmt   deletet   restore(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRò     s    	c         C   sã   |  j  s i  S|  j d |  j  d | d t ƒ } t g  t | j | ƒ D]0 \ } } | rD | rD t j d | ƒ | f ^ qD ƒ } t | j	 j
 j d | j	 j ƒ j j ƒ  ƒ } | j g  | j D] } t j d | ƒ | f ^ qº ƒ | S(   NR  Rñ   R  R   t	   sidechain(   Rì   R  t   minR   R«   RÅ   R   R   t   maxR¤   t   topology_cachet   get_mainchain_distance_fort   unknown_sidechain_topologyt	   from_atomRØ   R
  RÇ   (   R   Rñ   R  R?   t   lt	   level_forRÇ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   run_pruning_algorithms  s     				-/c   $      C   sÎ  t  t | j j | j j ƒ ƒ } | j j } |  j j d | ƒ \ } } | j j } |  j	 d | ƒ } t
 ƒ  } i  }	 i  }
 i  } t
 | j j ƒ } g  | j j D] } | j |  j k r  | ^ q  } xñ| j j ƒ  D]à} t j d | ƒ } i  } | | k } | j | d  ƒ } d  } xë| j ƒ  D]Ý} t j d | ƒ } | j | j | ƒ } | j d | ƒ } | | k } | rŸ| j d | d | j | | | ƒ ƒ } n i  } i  } x-| j ƒ  D]} t j d | ƒ } | j | k rò| | | j <q¸n  | r*| | j j | j | d ƒ k  r*| j | ƒ q¸| rR| j | j k rR| j | ƒ q¸| rÊ| j | j | j k rÊ| j | j } | |	 | <| j  ƒ  d } | j! j  ƒ  | k r½| |
 | <n  | | | <q¸| | | j <q¸W| | | j | | j ƒ f | | j" <q#Wd | k rlt# | ƒ d k rl| d \ }  }! }" | d =x- | j$ ƒ  D] \ }# } }" | j% |! ƒ qIWn  xE | j$ ƒ  D]7 \ }  } } |  j& d	 | d
 | d | d | ƒ | |  <qyWqÔ W| | | |	 |
 | f S(   NRñ   R   R  t   sourcet   targeti   i    RR   t
   generatorst
   atom_namedt	   max_levelR8   ('   R   R«   R¤   R®   t   sidechain_topologiesR  Rî   Ró   R  R  R  R¬   t   sidechain_completiont   NAMERí   R   R   R   R   t   getR^   R   R   R8   R  t   get_mapping_betweenR   R   R.   R  Rq   t   mappingR1   R4   R0   RÁ   RØ   R
  t   do_sidechain_completion($   R   Rñ   t   sidechain_forRÓ   Rû   Rü   t   cachet   max_level_forR  Rý   Rþ   Rÿ   t   mainchain_atomst   gR  R?   t   d_rgt   ag_altcodedt
   do_pruningR%   R8   R  t   d_agt   sct   ca_distt
   do_mappingt   amR   R   t   d_atomt   tnameR4   t   descrt   common_namedt   rnt   desc(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRô   1  s|    		(
#	c            sn  g  |  j  D] } | j d | ƒ ^ q
 } t | j j ƒ  ƒ ‰  t ‡  f d †  | Dƒ ƒ s_ t ‚ g  t | Œ  D] } t | ƒ ^ ql } | r™ t	 | ƒ } n	 |  j
 } t |  j
 | d ƒ } g  | D] } | | ^ q¿ } i  }	 t ƒ  }
 xz t | j j ƒ  | ƒ D]` \ } } t j d | ƒ } d t | j | ƒ k  rA| |	 | <n  | j ƒ  rý |
 j | ƒ qý qý W|	 |
 | f S(   NRñ   c         3   s!   |  ] } ˆ  t  | ƒ k Vq d  S(   N(   RÁ   (   t   .0R   (   RÂ   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pys	   <genexpr>—  s    i    R   g{®Gáz„?(   Rï   Ró   RÁ   R   R   RV   RY   R«   t   sumR  Rð   R  R  R   R   t   absR3   t   uij_is_definedRq   (   R   Rñ   t   pt
   individualt   indt
   cumulativet   lowestR  R=   R   R  t   atR3   R8  (    (   RÂ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRõ   “  s$    ("%		%c      	      sž   t  t  ‡  f d †  |  j Dƒ ƒ t  ‡  f d †  |  j Dƒ ƒ t ˆ  |  j j ƒ t  ‡  f d †  |  j Dƒ ƒ t ˆ  |  j j ƒ t  ‡  f d †  |  j Dƒ ƒ g ƒ S(   Nc         3   s!   |  ] } t  ˆ  | j ƒ Vq d  S(   N(   t
   issubclasst   TYPE(   R<  R@   (   t   sample_type(    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pys	   <genexpr>·  s    c         3   s!   |  ] } t  ˆ  | j ƒ Vq d  S(   N(   RF  RG  (   R<  R@   (   RH  (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pys	   <genexpr>¸  s    c         3   s!   |  ] } t  ˆ  | j ƒ Vq d  S(   N(   RF  RG  (   R<  R@   (   RH  (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pys	   <genexpr>º  s    c         3   s!   |  ] } t  ˆ  | j ƒ Vq d  S(   N(   RF  RG  (   R<  R@   (   RH  (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pys	   <genexpr>¼  s    (	   RV   Ré   Rê   RF  Rë   RG  Rì   Rî   Rï   (   R   RH  (    (   RH  s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   processable³  s    c            sy   t  | j ƒ ‰  g  |  D] } | j d | ƒ ^ q } t ‡  f d †  | Dƒ ƒ sV t ‚ g  t | Œ  D] } | | ƒ ^ qc S(   NRñ   c         3   s!   |  ] } t  | ƒ ˆ  k Vq d  S(   N(   RÁ   (   R<  R   (   RÂ   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pys	   <genexpr>Ç  s    (   RÁ   RÅ   Ró   RV   RY   R«   (   R  Rñ   R  R@   t   individualst   equi(    (   RÂ   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR  Á  s    %"c   	      C   s‘   g  } x„ |  D]| } | d | d | d | ƒ } | j  | j ƒ | j t g  g  | j D] } | j ƒ  ^ qT D] } | j | f ^ qj ƒ ƒ q W| S(   NR   R8   R!  (   t   extendt	   generatedR
  R   Rž   R.   (	   R  R   R!  R8   RM  t   genR  Râ   R@   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR(  Ë  s    	C(   R   R    R!   R   R  R  Rò   R  Rô   Rõ   RI  t   staticmethodR  R(  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRè   ƒ  s   		J				b	 	
t	   Discarderc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sN   
    Sculptor-like class that deletes every residue except the ones named
    c         C   s   t  | ƒ |  _ d  S(   N(   R  t   keep(   R   RQ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   è  s    c         C   s   t  | t ƒ S(   N(   RF  R£   (   R   RH  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRI  í  s    c         C   sx   g  } xk | j  j ƒ  D]Z } xQ | j ƒ  D]C } | j j ƒ  |  j k r) | j t ƒ  t j	 d | ƒ f ƒ q) q) Wq W| S(   NR   (
   R   R   R   R8   R1   RQ  R*   R}   R   R   (   R   Rñ   Rö   Rá   R?   R  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR  ò  s    '(   R   R    R!   R   RI  R  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRP  ã  s   		t    LinearAveragedSequenceSimilarityc           B   s    e  Z d  Z d „  Z d „  Z RS(   s3   
    Sequence similarity with linear averaging
    c         C   sm   d | d t  | ƒ k s  t ‚ t j | ƒ } d | k  sA t ‚ | |  _ | |  _ | | |  _ | |  _ d  S(   Ni   i   i    (   RÁ   RY   R	   R=  RÒ   RÓ   t   weightst   window(   R   RÒ   RÓ   RT  RS  t   norm(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR     s     		c         C   s¡   | j  j j d |  j ƒ } | j ƒ  \ } } t j d | j d |  j d |  j ƒ d |  j	 d | j
 | | ƒ } g  | D]% } t j t j | ƒ |  j ƒ ^ qx S(   NR.   R»   RÒ   RÓ   t   widtht   padding(   R¤   RÔ   RÕ   RÒ   R×   R   t   localizeRÜ   RÓ   RT  t   gap_penaltyR	   R=  t   doubleRS  (   R   Rñ   RÒ   RÚ   RÛ   t	   localizedt   subseq(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt
   scores_for  s    				(   R   R    R!   R   R]  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRR    s   	t   SpaceAveragedSequenceSimilarityc           B   sD   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   s1   
    Sequence similarity averaged over space
    c         C   s1   d | k s t  ‚ | |  _ | |  _ | |  _ d  S(   Ni    (   RY   RÒ   RÓ   t   maxdist(   R   RÒ   RÓ   R_  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   (  s    		c   	   	   C   sò   |  j  d | ƒ } | j d |  j d |  j ƒ } t | ƒ t | ƒ k sN t ‚ |  j d | d | ƒ \ } } t | ƒ t | ƒ k sŠ t ‚ g  } x[ t | | ƒ D]J \ } } | sÅ | j | ƒ q  n  | j |  j	 d | d | d | ƒ ƒ q  W| S(   NRñ   RÒ   RÓ   t	   positionsRÙ   t   positiont   points(
   t   calculate_mean_positionsRÜ   RÒ   RÓ   RÁ   RY   t   calculate_ss_mapR«   R*   t   calculate_average(	   R   Rñ   R`  RÙ   Rb  RØ   t   averagedRa  t   score(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR]  0  s(    				c            s¸   t  | j j ƒ ‰  ‡  f d †  } g  } xŠ | j D] } | sP | j d  ƒ q1 n  t j g  | j ƒ  D] } | | ƒ rc | j	 ^ qc ƒ } | s� | j d  ƒ q1 | j | j
 ƒ  ƒ q1 W| S(   Nc            s   |  j  ˆ  k S(   N(   R.   (   R@   (   t	   mainchain(    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT   T  s    (   R  R¤   R¬   RÅ   R*   R^   R	   t   vec3_doubleR   R5   t   mean(   R   Rñ   Rn   R`  R?   R@   t   accepted(    (   Rh  s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRc  Q  s    1c         C   sh   t  j ƒ  } t  j ƒ  } xC t | | ƒ D]2 \ } } | s@ q( n  | j | ƒ | j | ƒ q( W| | f S(   N(   R	   Ri  RZ  R«   R*   (   R   R`  RÙ   Rb  RØ   R@  t   s(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRd  i  s    c         C   sš   t  j d | d | ƒ } | |  j d k } d t | j ƒ  ƒ k  sI t ‚ |  j d t j | j	 | ƒ ƒ ƒ } t j
 | ƒ } t j
 | j	 | ƒ | ƒ | S(   Nt   centret   coordsi   i    t	   distances(   R   t   distance_sqs_fromR_  RÁ   t
   iselectionRY   t   calculate_weightsR	   t   sqrtt   selectR=  (   R   Ra  Rb  RÙ   t   distance_sqst	   selectionRS  RU  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRe  x  s    			c         C   s   t  j | |  j d ƒ S(   Ng       @(   R	   t   expR_  (   R   Ro  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRr  ‡  s    (	   R   R    R!   R   R]  Rc  Rd  Re  Rr  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR^  #  s   		!			t   MDAGapc           B   s   e  Z d  Z e Z d „  Z RS(   s;   
    Include residue if present in the search sequence
    c         C   s)   g  | j  ƒ  D] } | | j j k ^ q S(   N(   RÈ   RÄ   R¼   (   R   Rñ   t   t(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   ”  s    (   R   R    R!   R¹   RG  Ró   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRx  �  s   t   MDASimilarityc           B   s&   e  Z d  Z e Z d „  Z d „  Z RS(   sO   
    Include residue if the sequence similarity is higher than a threshold
    c         C   s   | |  _  | |  _ d  S(   N(   t   ss_calct	   threshold(   R   R{  R|  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR      s    	c         C   s/   g  |  j  j d | ƒ D] } | |  j k  ^ q S(   NRñ   (   R{  R]  R|  (   R   Rñ   Rl  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   ¦  s    (   R   R    R!   R¹   RG  R   Ró   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRz  ™  s   	t   MDAThresholdAdjustSimilarityc           B   s/   e  Z d  Z e Z d „  Z d „  Z d „  Z RS(   sO   
    Include residue if the sequence similarity is higher than a threshold
    c         C   s   | |  _  | |  _ d  S(   N(   R{  t   offset(   R   R{  R~  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   ´  s    	c   	      C   s¹   t  ƒ  j d | ƒ j t ƒ } t g  t | j ƒ  | j ƒ  ƒ D] } d  | k r= | ^ q= ƒ } | |  j	 | } |  j
 j d | ƒ } |  j d | d | ƒ } g  | D] } | | k  ^ q£ S(   NRñ   RÙ   R  (   Rx  Ró   t   countR‡   RÁ   R«   RÈ   RÉ   R^   R~  R{  R]  t   get_threshold(	   R   Rñ   t	   gap_countR@  t   model_countR  RÙ   R|  Rl  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   º  s    "c         C   sØ   | s t  ‚ t t | ƒ ƒ } | d d f } xw | d D]Q } | t g  | D] } | | k  rL | ^ qL ƒ f } | | d k  r„ Pn  | } q9 W| d d t | ƒ f } | | d | d | k rÌ | d S| d Sd  S(   Ni    i   iÿÿÿÿg{®Gáz„?(   RY   t   sortedR  RÁ   (   R   RÙ   R  t   orderedt   previousR|  Rl  Rt   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR€  È  s    1
(   R   R    R!   R¹   RG  R   Ró   R€  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR}  ­  s
   		t   MDARemoveLongc           B   s/   e  Z d  Z e Z d „  Z d „  Z d „  Z RS(   s7   
    Remove residues only if the deletion is long 
    c         C   s   | |  _  d  S(   N(   t
   min_length(   R   R‡  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   ç  s    c         C   s}   g  } xp |  j  d | ƒ D]\ } t | ƒ } t g } | j j | k rd |  j | k rd t g } qd n  | j | | ƒ q W| S(   NRñ   (   t   split_alignmentRÁ   RK   RÄ   R¼   R‡  R‡   RL  (   R   Rñ   t   deletiont
   contiguousRÂ   t   verdict(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   ì  s    	c            s1   | j  j ‰  t j d | j ƒ  d ‡  f d †  ƒ S(   NR»   t   consecutivityc            s    |  ˆ  k r | ˆ  k S| ˆ  k S(   N(    (   t   leftt   right(   R¼   (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRT     s    (   RÄ   R¼   R   t   splitRÈ   (   R   Rñ   (    (   R¼   s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRˆ  ý  s    	(   R   R    R!   R¹   RG  R   Ró   Rˆ  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR†  à  s
   		t   MPARemoveShortc           B   s&   e  Z d  Z e Z d „  Z d „  Z RS(   sS   
    Removes residues that would map to a short segment on the model structure
    c         C   s   d | k  s t  ‚ | |  _ d  S(   Ni    (   RY   R‡  (   R   R‡  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR     s    c         C   s½   g  | j  j ƒ  D]$ } t j d | ƒ | k r | ^ q } | j j } g  } xd t j d | d | ƒ D]J } t | ƒ |  j	 k  re | j
 g  | D] } t j d | ƒ ^ q� ƒ qe qe W| g  f S(   NR   R»   RŒ  (   R   R   R   R   R¤   RŒ  R   R�  RÁ   R‡  RL  (   R   Rñ   R  R?   t   presentt   consecR  RŠ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó     s    $-(   R   R    R!   R£   RG  R   Ró   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR�  	  s   	t   MPAKeepRegularc           B   s/   e  Z d  Z e Z d „  Z d „  Z d „  Z RS(   sj   
    Reinstates consecutive residues up to max_length if they are in regular
    secondary structure 
    c         C   s   d | k  s t  ‚ | |  _ d  S(   Ni    (   RY   t
   max_length(   R   R”  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   .  s    c   
      C   sæ   |  j  d | j d | j ƒ } | j j } g  } x© | j D]ž } g  | D]$ } t j d | ƒ | k rG | ^ qG } xd t j d | d | ƒ D]J }	 t	 |	 ƒ |  j
 k rŠ | j g  |	 D] } t j d | ƒ ^ q² ƒ qŠ qŠ Wq: Wg  | f S(   NR¤   R   R   R»   RŒ  (   t   get_secondary_structureR¤   R   RŒ  t   elementsR   R   R   R�  RÁ   R”  RL  (
   R   Rñ   R  t   sec_strR’  t	   reinstatet   sseR?   R  t   segment(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   4  s    		11c         C   sY   | j  s t d | j ‚ n  y | j  d | ƒ } Wn  t k
 rT } t d | ‚ n X| S(   Ns0   No secondary structure analyser available for %sR   s)   Error in secondary structure analysis: %s(   t   secondary_structure_analyserR�   R.   R]   (   R   R¤   R   R—  R   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR•  J  s    	(   R   R    R!   R£   RG  R   Ró   R•  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR“  &  s
   		t   MRAOriginalc           B   s   e  Z d  Z e Z d „  Z RS(   s-   
    Algorithm that does not do anything
    c         C   s
   i  i  f S(   N(    (   R   Rñ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   `  s    (   R   R    R!   R£   RG  Ró   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRœ  Y  s   t   MRASequencec           B   sD   e  Z d  Z e Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z	 RS(   s8   
    Renumbers residue_groups according to sequence
    c         C   s   | |  _  | |  _ d  S(   N(   t   enquiret   start(   R   Rž  RŸ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   l  s    	c         C   s  |  j  | ƒ } | j j } |  j d } d } g  } i  } i  } xÏ t | | j ƒ D]» \ }	 }
 |	 | k r~ | d 7} d } n7 | d k s– | d k rŸ d } n t t | ƒ d ƒ } |
 sÁ qS n  t j	 d |
 ƒ } |
 j
 ƒ  | k rò | | | <n  |
 j | k rS | | | <qS qS W| | f S(   Ni   t    t   Zt   AR   (   Rž  RÄ   R¼   RŸ  R«   RÅ   t   chrt   ordR   R   R6   R7   (   R   Rñ   R»   R¼   RW   R7   Rá   Rø   Rù   t   rescodeR?   t   ent(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   r  s,    
		c         C   s   |  d t  j d | ƒ S(   NRž  RŸ  (   R¹   RÈ   (   RO   RŸ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   Target˜  s    	c         C   s   |  d t  j d | ƒ S(   NRž  RŸ  (   R¹   RÉ   (   RO   RŸ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   ¡  s    	(
   R   R    R!   R£   RG  R   Ró   RQ   R§  R   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR�  e  s   		&	t
   SROriginalc           B   s   e  Z d  Z e Z d „  Z RS(   s-   
    Algorithm that does not do anything
    c         C   s   i  t  ƒ  f S(   N(   R  (   R   Rñ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   ²  s    (   R   R    R!   R£   RG  Ró   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR¨  «  s   t
   SRSequencec           B   s,   e  Z d  Z e Z d „  Z e d „  ƒ Z RS(   s-   
    Rename according to target sequence
    c   
      C   s,  t  t | j j | j j ƒ ƒ } i  } t ƒ  } x� t | j ƒ  | j ƒ D]ƒ \ } } | sa qI n  | | j j	 k r| d } n | j
 | | j j ƒ } |  j d | d | ƒ \ } }	 | j | ƒ | j |	 ƒ qI WxO | j D]D } |  j d | d | j j ƒ \ } }	 | j | ƒ | j |	 ƒ qÚ W| | f S(   Nt   GAPR?   R8   (   R   R«   R¤   t   one_letter_codesR®   R  RÈ   RÅ   RÄ   R¼   R%  t   unknown_three_lettert   atom_group_name_settingsR
  RÇ   (
   R   Rñ   t   three_letter_forRû   Rü   R¥  R?   R8   t   rn_fort   het_res(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   ¾  s0    	%			c         C   s”   i  } t  ƒ  } xx |  j ƒ  D]j } | j | k rJ | | t j d | ƒ <n  x9 | j ƒ  D]+ } | j rW | j t j d | ƒ ƒ qW qW Wq W| | f S(   NR   (	   R  R   R8   R   R   R   R—   Rq   R   (   R?   R8   Rû   Rü   R  R@   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR­  ç  s    		$(   R   R    R!   R¹   RG  Ró   RO  R­  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR©  ·  s   	)t   SRSingleLetterTargetc           B   s,   e  Z d  Z e Z d „  Z e d „  ƒ Z RS(   sl   
    Rename according to target sequence, but equivalence is tested on single-
    letter residue codes
    c   
      C   sz  t  t | j j | j j ƒ ƒ } t  t | j j | j j ƒ ƒ } i  } t ƒ  } xš t | j ƒ  | j ƒ D]€ \ } } | s‚ qj n  |  j d | d | d | j	 j
 d | d | j j d | d | j j ƒ \ } }	 | j | ƒ | j |	 ƒ qj Wx | j D]t } |  j d | d | j j d | j	 j
 d | d | j j d | d | j j ƒ \ } }	 | j | ƒ | j |	 ƒ qø W| | f S(   NR?   R¥  t   gap_chart   one_letter_fort   unknown_one_letterR®  R¬  (   R   R«   R¤   R«  R®   R  RÈ   RÅ   R­  RÄ   R¼   R´  R¬  R
  RÇ   (
   R   Rñ   R®  R³  Rû   Rü   R¥  R?   R¯  R°  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó      s>    	%		c         C   sÈ   i  } t  ƒ  } x¬ |  j ƒ  D]ž }	 t j d |	 ƒ }
 | | k rM d | |
 <n1 | j |	 j ƒ | k r~ | j | | ƒ | |
 <n  x9 |	 j ƒ  D]+ } | j r‹ | j t j	 d | ƒ ƒ q‹ q‹ Wq W| | f S(   NR   Rª  (
   R  R   R   R   R%  R8   R   R—   Rq   R   (   R?   R¥  R²  R³  R´  R®  R¬  Rû   Rü   R  R1  R@   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR­  -  s    		$(   R   R    R!   R¹   RG  Ró   RO  R­  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR±  ø  s   	-t   SidechainPruningAlgorithmc           B   s,   e  Z d  Z e d „  ƒ Z e d „  ƒ Z RS(   s   
    Some generic features
    c         C   sP   | | k rH | | } | j  d | ƒ j j ƒ  } | rA t | ƒ Sd Sn d Sd  S(   NR  i    ic   (   R  R  RØ   R  (   RO   R)  R*  R¥  R2  t   dist(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   residue_max_bond_distanceT  s    

c         C   sP   | | k rH | | } | j  d | ƒ j j ƒ  } | rA t | ƒ Sd Sn d Sd  S(   NR  i    i   (   R  R  RØ   R  (   RO   R)  R*  R¥  R2  R¶  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   residue_min_bond_distancee  s    

(   R   R    R!   RQ   R·  R¸  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRµ  O  s   t   SPASchwarzenbacherc           B   s/   e  Z d  Z e Z d „  Z d „  Z d „  Z RS(   s<   
    Truncates sidechain if residues types do not agree
    c         C   s   d | k s t  ‚ | |  _ d  S(   Ni    (   RY   R%   (   R   R%   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   }  s    c         C   sƒ   t  t | j j | j j ƒ ƒ } | j j } g  t | j ƒ  | j ƒ  ƒ D]6 \ } } |  j d | d | | k d | d | ƒ ^ qI S(   NR  t   is_identicalR)  R*  (	   R   R«   R¤   R«  R"  R  RÈ   RÉ   t   pruning_level_for(   R   Rñ   R)  R*  Ry  R;   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   ƒ  s
    c         C   s-   | r" |  j  d | d | d | ƒ S|  j Sd  S(   NR)  R*  R¥  (   R·  R%   (   R   R  Rº  R)  R*  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR»  •  s    	(   R   R    R!   R¹   RG  R   Ró   R»  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR¹  v  s
   		t   SPASimilarityc           B   s/   e  Z d  Z e Z d „  Z d „  Z d „  Z RS(   sï   
    Sequence similarity defined sidechain truncation:
        Full length if upper_limit < conservation,
        Full truncation if conservation < lower_limit,
        Predefined truncation if upper_limit < conservation < lower_limit
    c         C   sF   d | k r | | k s t  ‚ | |  _ | |  _ | |  _ | |  _ d  S(   Ni    (   RY   R{  t   lowert   upperR%   (   R   R{  R½  R¾  R%   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   ¬  s
    			c         C   s†   t  t | j j | j j ƒ ƒ } | j j } g  t | j ƒ  |  j j d | ƒ ƒ D]0 \ } } |  j	 d | d | d | d | ƒ ^ qR S(   NRñ   R  RÑ   R)  R*  (
   R   R«   R¤   R«  R"  R  RÈ   R{  R]  R»  (   R   Rñ   R)  R*  Ry  Rl  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   ¶  s    	c         C   sa   |  j  | k r+ |  j d | d | d | ƒ S|  j | k rA |  j S|  j d | d | d | ƒ Sd  S(   NR)  R*  R¥  (   R¾  R·  R½  R%   R¸  (   R   R  RÑ   R)  R*  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR»  Ê  s    		(   R   R    R!   R¹   RG  R   Ró   R»  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR¼  ¢  s
   	
	t   Scaledc           B   s    e  Z d  Z d „  Z d „  Z RS(   s6   
    Algorithms transforming their primary result
    c         C   s   | |  _  d  S(   N(   t   factor(   R   RÀ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   â  s    c         C   s   g  | D] } |  j  | ^ q S(   N(   RÀ  (   R   t   primaryRŽ   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt	   transformç  s    (   R   R    R!   R   RÂ  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR¿  Ý  s   	t   BPAOriginalBfactorc           B   s   e  Z d  Z e Z d „  Z RS(   s5   
    Original bfactor with linear transformation
    c         C   s/   |  j  d g  | j j ƒ  D] } | j ^ q ƒ S(   NRÁ  (   RÂ  R   R   R3   (   R   Rñ   R@   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó   ó  s    (   R   R    R!   R£   RG  Ró   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRÃ  ì  s   t   BPAAccessibleSurfaceAreac           B   s&   e  Z d  Z e Z d „  Z d „  Z RS(   s5   
    Accessible surface area with transformation
    c         C   sS   d | k  s t  ‚ d | k  s$ t  ‚ | |  _ | |  _ t t |  ƒ j d | ƒ d  S(   Ni    RÀ  (   RY   t   probeR¶   RÃ   RÄ  R   (   R   RÅ  R¶   RÀ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR   ÿ  s
    		c         C   s7   | j  d |  j d |  j ƒ } |  j d t | j ƒ ƒ S(   NRµ   R¶   RÁ  (   R·   RÅ  R¶   RÂ  R#   RØ   (   R   Rñ   R²   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó     s    		(   R   R    R!   R£   RG  R   Ró   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRÄ  ø  s   		t   BPASequenceSimilarityc           B   s&   e  Z d  Z e Z d „  Z d „  Z RS(   s7   
    Sequence similarity score with transformation
    c         C   s&   t  t |  ƒ j d | ƒ | |  _ d  S(   NRÀ  (   RÃ   RÆ  R   R{  (   R   R{  RÀ  (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyR     s    c         C   s  |  j  j d | ƒ } t | ƒ t | j ƒ k s6 t ‚ t g  t | j | ƒ D]* \ } } | rL t j d | ƒ | f ^ qL ƒ } x? | j	 D]4 } t j d | ƒ } | | k s³ t ‚ d | | <q‰ W|  j
 d g  | j j ƒ  D]% } | t j | j ƒ  j ƒ  ƒ ^ qÚ ƒ S(   NRñ   R   i    RÁ  (   R{  R]  RÁ   RÅ   RY   R   R«   R   R   RÇ   RÂ  R   R   R/   (   R   Rñ   RÙ   R?   Rg  t	   score_forR8  R@   (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRó     s    !C	(   R   R    R!   R¹   RG  R   Ró   (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyRÆ    s   	c          c   s—   d d  l  }  d d  l } | j | j | j } |  j | |  j | j | ƒ |  j | j | ƒ |  j | j | ƒ ƒ } x | D] } d j | ƒ Vq{ Wd  S(   NiÿÿÿÿRR   (   t	   itertoolst   stringt   ascii_uppercaset   ascii_lowercaset   digitsR   t   productRl   (   RÈ  RÉ  t   allcharst   itt   comb(    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt	   chain_ids5  s    (8   t
   __future__R    t   phaserR   R   t   iotbx.pdb.hierarchyR   R   R   R   R   R   t   scitbx.array_familyR	   t   scitbx.matht   scitbxRp   t   mathR\   R
   R"   R$   RB   RC   R   R|   R}   RŠ   Rœ   R¡   R£   R¹   RÞ   Rè   RP  RR  R^  Rx  Rz  R}  R†  R�  R“  Rœ  R�  R¨  R©  R±  Rµ  R¹  R¼  R¿  RÃ  RÄ  RÆ  RÑ  (    (    (    s;   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/chisel.pyt   <module>   sZ   . 	"1í
4’9*6L1ÿ a"j3)3FAW',;#