ó
°™xTc           @   sù  d  d l  m Z d  d l m Z d  d l Z d  d l Z d  d l Z e j	 j
 d ƒ Z d  d l Td „  Z d „  Z d „  Z d	 „  Z 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) „  Z" e d* d d d+ „ Z$ d S(,   iÿÿÿÿ(   t   division(   t   sgtbxNt   mmtbx_geometry_clash_ext(   t   *c         C   s‚   d d l  m } d d l m } | j ƒ  } | j d | d | j g  |  D]0 } | j d | j ƒ  d | j	 | j
 ƒ ƒ ^ qH ƒ ƒ S(   sC   
  A utility function to convert atoms into cctbx.xray.structure
  iÿÿÿÿ(   t   xray(   t   flext   crystal_symmetryt
   scattererst   labelt   site(   t   cctbxR   t   cctbx.array_familyR   t	   unit_cellt	   structuret   xray_scatterert	   scatterert   pdb_label_columnst   fractionalizet   xyz(   t   atomst   symmetryR   R   t   cellt   a(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   to_xray_structure   s    	c         C   s3   |  j  ƒ  j } | r% t j d | ƒ St j ƒ  Sd  S(   Nt
   identifier(   t   parentt   altloct   altloc_strategyt	   alternatet   regular(   t   atomR   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   altloc_strategy_from_atom"   s    c         C   s   |  j  j ƒ  j ƒ  S(   N(   t   elementt   stript
   capitalize(   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt
   element_of-   s    c         C   s
   t  j ƒ  S(   N(   t   indexingt   linear_spheres(   t   params(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   linear_indexer_for2   s    c         C   s   t  j d |  j ƒ  d d ƒ S(   Nt	   voxelizert   margini   (   R$   t   hash_spheresR(   (   R&   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   hash_indexer_for7   s    t   SymmetryEquivalentc           B   s}   e  Z d  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z	 d „  Z
 d „  Z d	 „  Z RS(
   s0   
  A potential symmetry equivalent of an atom
  c         C   s   | |  _  | |  _ d  S(   N(   R   t   symop(   t   selfR   R-   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   __init__A   s    	c         C   s   |  j  j ƒ  S(   N(   R   R   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt
   atom_groupG   s    c         C   s   |  j  j ƒ  S(   N(   R0   R   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   residue_groupM   s    c         C   s   |  j  j ƒ  S(   N(   R1   R   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   chainS   s    c         C   s   |  j  j ƒ  S(   N(   R2   R   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   moleculeY   s    c         C   s   |  j  j ƒ  S(   N(   R3   R   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   root^   s    c         C   s"   |  j  | j  k o! |  j | j k S(   N(   R   R-   (   R.   t   other(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   __eq__d   s    c         C   s   |  | k S(   N(    (   R.   R5   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   __ne__i   s    c         C   s   t  |  j |  j f ƒ S(   N(   t   hashR   R-   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   __hash__n   s    (   t   __name__t
   __module__t   __doc__R/   t   propertyR0   R1   R2   R3   R4   R6   R7   R9   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR,   <   s   			t   ClashingPairc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s   
  Clashing atom pair
  c         C   s   | |  _  | |  _ d  S(   N(   t   leftt   right(   R.   R?   R@   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   x   s    	c         C   s   |  j  j |  j j k S(   N(   R?   R4   R@   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   is_self_clash~   s    c         C   s   t  |  j |  j f ƒ S(   N(   t	   frozensetR?   R@   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRB   ƒ   s    c         C   s   t  |  j j |  j j f ƒ S(   N(   RB   R?   R   R@   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt	   atom_pairˆ   s    c         C   s   t  |  j ƒ  ƒ S(   N(   R8   RB   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR9   �   s    c         C   s   |  j  ƒ  | j  ƒ  k S(   N(   RB   (   R.   R5   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR6   ’   s    c         C   s   |  | k S(   N(    (   R.   R5   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR7   —   s    (
   R:   R;   R<   R/   RA   RB   RC   R9   R6   R7   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR>   s   s   						t
   ClashPointc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s!   
  Clashes with a central atom
  c         C   s   | |  _  | |  _ d  S(   N(   t   centret   others(   R.   RE   RF   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   ¡   s    	c            s   ‡  f d †  ˆ  j  Dƒ S(   Nc         3   s'   |  ] } t  d  ˆ  j d | ƒ Vq d S(   R?   R@   N(   R>   RE   (   t   .0t   o(   R.   (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pys	   <genexpr>©   s    (   RF   (   R.   (    (   R.   sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   pairs§   s    c         C   s   t  |  j ƒ S(   N(   t   lenRF   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   count¬   s    (   R:   R;   R<   R/   RI   RK   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRD   œ   s   		t   ClashCollectionc           B   s    e  Z d  Z d „  Z d „  Z RS(   s   
  All clashes in a model
  c         C   s   | |  _  d  S(   N(   t   points(   R.   RM   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   ¶   s    c         c   s4   x- |  j  D]" } x | j ƒ  D] } | Vq Wq
 Wd  S(   N(   RM   RI   (   R.   t   pointt   pair(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRI   »   s    (   R:   R;   R<   R/   RI   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRL   ±   s   	t   Modelc           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 RS(   s:   
  A model, providing fast access to atoms by memory_id
  c         C   s2   | j  ƒ  |  _ t d „  | j ƒ  Dƒ ƒ |  _ d  S(   Nc         s   s!   |  ] } | j  ƒ  | f Vq d  S(   N(   t	   memory_id(   RG   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pys	   <genexpr>Ê   s    (   RQ   R   t   dictR   t   atom_for(   R.   R4   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   Ç   s    c         C   s   |  j  j ƒ  S(   N(   RS   t   values(   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR   Í   s    c         C   s   t  d „  |  j ƒ  Dƒ ƒ S(   Nc         s   s   |  ] } t  d  | ƒ Vq d S(   R   N(   R#   (   RG   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pys	   <genexpr>Ô   s    (   t   setR   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   elementsÒ   s    c         C   s   t  |  j ƒ S(   N(   R8   R   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR9   ×   s    c         C   s   |  j  | j  k S(   N(   R   (   R.   R5   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR6   Ü   s    c         C   s   |  | k S(   N(    (   R.   R5   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR7   á   s    c         C   s   |  j  | S(   N(   RS   (   R.   t   key(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   __getitem__æ   s    (
   R:   R;   R<   R/   R   RV   R9   R6   R7   RX   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRP   Â   s   						t   Casec           B   sM   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d d „ ƒ Z	 RS(   s2   
  Calculation parameters that are transferable
  c         C   s(   | |  _  | |  _ | |  _ | |  _ d  S(   N(   R   t   vdw_radius_fort
   max_radiusR)   (   R.   R   RZ   R[   R)   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   ð   s    			c         C   s6   t  d | d |  j ƒ } | j d d |  j |  j ƒ S(   NR   R   t   buffer_thicknessi   (   R   R   t   asu_mappingsR[   R)   (   R.   R   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   asu_mapping_forø   s    	c         C   s¿   |  j  j ƒ  j ƒ  j ƒ  } t | Œ  \ } } } t | ƒ t | ƒ d t | ƒ t | ƒ d t | ƒ t | ƒ d f } d |  j } t j	 j
 j d |  j  j ƒ  j | ƒ d | | | f ƒ S(   Ng       @i   t   baset   step(   R   t   space_group_infot   direct_space_asut   shape_verticest   zipt   mint   maxR[   t   mmtbxt   geometryt   shared_typesR(   R   t   orthogonalize(   R.   t   verticest   xst   yst   zsRE   R`   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR(      s    c         C   s   |  j  t d | ƒ S(   NR   (   RZ   R#   (   R.   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt
   radius_for  s    c         C   sF  | j  ƒ  } |  j d | ƒ } | j ƒ  } t | ƒ t | ƒ k sH t ‚ g  } g  } xÖ t | | ƒ D]Å \ } } |  j d | ƒ }	 t d | ƒ }
 | j ƒ  } g  | D]E } t	 d | j
 ƒ  d |	 d | j d | d |
 d | j | ƒ ƒ ^ q¤ } d t | ƒ k st ‚ | j | d	 ƒ | j | d ƒ qd Wt d
 | d | | g ƒ S(   NR   R   RE   t   radiusR3   R   R-   i   i    t   modelt   group(   R   R^   t   mappingsRJ   t   AssertionErrorRd   Ro   R   RQ   t   spheret   mapped_siteR   t	   get_rt_mxt   appendt   extendt   SphereModelGroup(   R.   Rq   R   t   asu_mappingRs   t   asu_spherest   other_spheresR   t   mappingRp   R   t   aidt   mt
   considered(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   sphere_model_group_for  s$    Og      ð?c   	      C   s…   d d  l  } t | j g  | D] } | j ƒ  ^ q t ƒ  ƒ } |  d | d | d | rx t g  | D] } | | ^ q_ ƒ n d d | ƒ S(   NiÿÿÿÿR   RZ   R[   g        R)   (   t   operatort   reducet   or_RV   RU   Rf   (	   t   clsR   t   modelsRZ   R)   Rƒ   R€   RV   t   e(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   create9  s    /(
   R:   R;   R<   R/   R^   R(   Ro   R‚   t   classmethodR‰   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRY   ë   s   					"t   AtomDescriptorc           B   s&   e  Z d  Z d „  Z e d „  ƒ Z RS(   sJ   
  A descriptor that allows looking up the original object is necessary
  c         C   s   | |  _  | |  _ d  S(   N(   Rq   Ru   (   R.   Rq   Ru   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   R  s    	c         C   s   |  j  |  j j S(   N(   Rq   Ru   R   (   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR   X  s    (   R:   R;   R<   R/   R=   R   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR‹   M  s   	t   SphereModelc           B   s    e  Z d  Z d „  Z d „  Z RS(   s&   
  Sphere representation of a model
  c         C   s   | |  _  | |  _ d  S(   N(   Rq   t   spheres(   R.   Rq   R�   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   c  s    	c            s   ‡  f d †  ˆ  j  Dƒ S(   Nc         3   s'   |  ] } t  d  ˆ  j d | ƒ Vq d S(   Rq   Ru   N(   R‹   Rq   (   RG   t   s(   R.   (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pys	   <genexpr>l  s    (   R�   (   R.   (    (   R.   sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   descriptorsi  s    (   R:   R;   R<   R/   R�   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRŒ   ^  s   	Rz   c           B   s    e  Z d  Z d „  Z d „  Z RS(   s   
  Partitioned sphere model
  c         C   s   | |  _  | |  _ d  S(   N(   Rq   t   _group(   R.   Rq   Rr   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   u  s    	c         C   s,   g  |  j  D] } t d |  j d | ƒ ^ q
 S(   NRq   R�   (   R�   RŒ   Rq   (   R.   RŽ   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRr   {  s    (   R:   R;   R<   R/   Rr   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRz   p  s   	t
   ASUContentc           B   s>   e  Z d  Z e d „ Z d „  Z d „  Z d „  Z d „  Z RS(   s"   
  Contains the asymmetric unit
  c         C   s4   | |  _  | d |  j  ƒ |  _ i  |  _ g  |  _ d  S(   NR&   (   t   caset   indexert
   model_witht   asu_transforms(   R.   R’   t   ifactory(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   ‡  s    		c         C   s\   | j  |  j | j  j <| j ƒ  \ } } |  j j | ƒ |  j d | ƒ |  j d | ƒ d  S(   Nt   sphere_model(   Rq   R”   R   Rr   R•   Rx   t   _insert(   R.   t   sequencet   asuR5   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   add�  s
    c      	   C   s1   t  d |  j j d | ƒ d t d | d | ƒ ƒ S(   Nt   ranget   objectt	   predicatet	   tolerance(   t   filterR“   t   close_tot   overlap_interaction_predicate(   R.   Ru   RŸ   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   clashing_with™  s
    c         C   s   t  d |  j | j d | ƒ S(   NRq   Ru   (   R‹   R”   R3   (   R.   Ru   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   descriptor_for¤  s    c         C   s=   x6 | j  ƒ  D]( } |  j j d | j d | j j ƒ q Wd  S(   NR�   t   position(   R�   R“   R›   Ru   RE   (   R.   R—   t   d(    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR˜   ¬  s    (	   R:   R;   R<   R+   R/   R›   R£   R¤   R˜   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR‘   ‚  s   	
		t   DistanceCalculationc           B   s    e  Z d  Z d „  Z d „  Z RS(   s-   
  Calculates clash distance for atom pair
  c         C   s   | |  _  d  S(   N(   R   (   R.   R   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   ·  s    c         C   s¹   | j  j |  j j | j  j j ƒ \ } } } | j j |  j j | j j j ƒ \ } } } |  j j | | | | | | f ƒ } d d  l }	 |	 j	 t
 g  | D] }
 |
 |
 ^ qŸ ƒ ƒ S(   Niÿÿÿÿ(   R?   R-   R   R   R   R   R@   Rj   t   matht   sqrtt   sum(   R.   RO   t   l_xt   l_yt   l_zt   r_xt   r_yt   r_zt   diffR¨   R¦   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   __call__¼  s
    ..'(   R:   R;   R<   R/   R²   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR§   ²  s   	t   ClashCalculationc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s   
  Calculates clashpoints
  g      à?c         C   s   | |  _  d  S(   N(   RŸ   (   R.   RŸ   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   Ì  s    c         C   s�   | j  d | j d |  j ƒ } | rŒ | t d t d | j d | j j ƒ d g  | D]- } t d | j d | ƒ j d | j ƒ ^ qR ƒ ƒ n  d  S(   NRu   RŸ   RE   R   R-   RF   (   R£   Ru   RŸ   RD   R,   R   R-   R¤   (   R.   Rš   t
   descriptort   accumulatort   clashingRŽ   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR²   Ñ  s    			(   R:   R;   R<   R/   R²   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR³   Ç  s   t   ClashCountCalculationc           B   s#   e  Z d  Z d d „ Z d „  Z RS(   s"   
  Calculates number of clashes
  g      à?c         C   s   | |  _  d  S(   N(   RŸ   (   R.   RŸ   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/   ï  s    c         C   s2   | j  d | j d |  j ƒ } | t | ƒ ƒ d  S(   NRu   RŸ   (   R£   Ru   RŸ   RJ   (   R.   Rš   R´   Rµ   R¶   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR²   ô  s    		(   R:   R;   R<   R/   R²   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR·   ê  s   t   ElementAccumulatorc           B   s    e  Z d  Z d „  Z d „  Z RS(   s%   
  Collects all elements in a list
  c         C   s   g  |  _  d  S(   N(   t   result(   R.   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/     s    c         C   s   |  j  j | ƒ d  S(   N(   R¹   Rx   (   R.   R    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR²     s    (   R:   R;   R<   R/   R²   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR¸   ý  s   	t   ReducingAccumulatorc           B   s    e  Z d  Z d „  Z d „  Z RS(   s*   
  Sums up the elements as they come in
  c         C   s   | |  _  | |  _ d  S(   N(   R¹   t	   operation(   R.   t   initialR»   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR/     s    	c         C   s   |  j  |  j | ƒ |  _ d  S(   N(   R»   R¹   (   R.   R    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyR²     s    (   R:   R;   R<   R/   R²   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyRº     s   	c   	      C   s‰   g  |  D] } t  d | ƒ ^ q } t d t j d | d | d | d | ƒ d | ƒ } x- | D]% } | j d | j j d	 | ƒ ƒ q\ W| S(
   NR4   R’   R   R‡   RZ   R)   R–   R™   Rq   (   RP   R‘   RY   R‰   R›   R’   R‚   (	   t   rootsR   RZ   R–   R)   t   rR‡   Rš   R€   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   calculate_contents  s    "			#g      ð?c   
      C   s¢   t  d |  d | d | d | d | ƒ } | d  k r? t ƒ  } n  | d  k rW t ƒ  } n  xA | j D]6 } x- | j ƒ  D] }	 | d | d |	 d | ƒ qt Wqa W| j S(	   NR½   R   RZ   R–   R)   Rš   R´   Rµ   (   R¿   t   NoneR³   R¸   R•   R�   R¹   (
   R½   R   t	   vdw_tableR–   R)   t   calculationRµ   Rš   R—   R¦   (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt	   calculate/  s    
	!(%   t
   __future__R    R
   R   t   mmtbx.geometry.primitiveRg   t   mmtbx.geometry.shared_typest   boost.pythont   boostt   pythont
   import_extt   extR   R   R   R#   R'   R+   R�   R,   R>   RD   RL   RP   RY   R‹   RŒ   Rz   R‘   R§   R³   R·   R¸   Rº   R¿   RÀ   RÃ   (    (    (    sB   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/geometry/clash.pyt   <module>   s>   
					7))b0#	