ó
�™xTc           @   s­   d  d l  m Z d  d l Z d  d l m Z d  d l m Z d  d l Z d  d l Z i d d 6d d 6Z	 d	 e j
 j f d
 „  ƒ  YZ d e j
 j f d „  ƒ  YZ d „  Z d S(   iÿÿÿÿ(   t   divisionN(   t   file_reader(   t   Sorryt   PDBt   pdbt   mmCIFt   mmcift   cif_handlerc           B   s   e  Z d  Z d Z RS(   t   cift   CIF(   t   __name__t
   __module__t	   file_typet   file_type_label(    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyR      s   t   model_handlerc           B   s  e  Z d  Z d Z d d e d d d d „ Z d d d „ Z d „  Z d „  Z	 d „  Z
 d „  Z d „  Z d d	 „ Z d d
 „ Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z RS(   R   R   c         C   sk   t  j j j |  d | d | d | ƒt d | d | ƒ |  _ | |  _ d „  |  _ d „  |  _ g  |  _ d  S(   Nt   allowed_param_namest   allowed_multiple_paramst   debugc         S   s   t  S(   N(   t   True(   t	   file_name(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   <lambda>#   s    c         S   s   t  S(   N(   R   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyR   $   s    (	   t   iotbxt	   gui_toolst   managert   __init__R   t   tmp_dirt   add_callbackt   remove_callbackt   _viewable_file_params(   t   selfR   R   R   t   cif_param_namest   multiple_cif_paramsR   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyR      s    	c         C   sZ   | d  k	 r0 | d  k r0 |  j j | d  ƒ } n  | d  k	 rV | j j j ƒ  } t | Sd  S(   N(   t   Nonet   _cached_input_filest   gett   file_objectt   inputR   t   model_file_types(   R   R   t
   input_fileR   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_file_type_label'   s
    c         C   s>   t  |  d ƒ r |  j j ƒ  n  i  |  _ i  |  _ i  |  _ d  S(   NR   (   t   hasattrR   t   clear_cachet   _cached_pdb_hierarchiest   _cached_bondst   _cached_xray_structures(   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   clear_format_specific_cache.   s
    		c         C   s   | |  _  | |  _ d  S(   N(   R   R   (   R   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   set_callbacks5   s    	c         C   s   |  j  | ƒ d  S(   N(   R   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   add_file_callback9   s    c         C   s   |  j  | ƒ d  S(   N(   R   (   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   remove_file_callback<   s    c         C   s&   | j  } | j j } | |  j | <| S(   N(   R   R#   t	   hierarchyR*   (   R   R&   R   t   pdb_hierarchy(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   save_other_file_data?   s    	c         C   s)  g  } | d  k	 r$ |  j | ƒ } n |  j j ƒ  } t | ƒ d k rM | d St | ƒ d k r%g  } x$ | D] } | j |  j | ƒ ƒ ql W|  j } | d  k rª d } n  t j	 j
 | ƒ sÂ t ‚ t j	 j | d ƒ } t | d ƒ } x! | D] } | j | j ƒ  ƒ qí W| j d ƒ | j ƒ  | Sd  S(   Ni   i    s   /var/tmps   current_model.pdbt   wt   END(   R    t   get_param_filesR!   t   keyst   lent   appendt   get_pdb_hierarchyR   t   ost   patht   isdirt   AssertionErrort   joint   opent   writet   as_pdb_stringt   close(   R   t   file_param_namet
   file_namest   pdb_hierarchiesR   R   t   fR2   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_complete_model_fileE   s,    		
c         C   sW   t  |  j ƒ d k r |  j ƒ  Sg  } x' |  j D] } | j |  j | ƒ ƒ q/ W| Sd  S(   Ni    (   R8   R   t   get_current_file_namest   extendR6   (   R   RD   RE   t
   param_name(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_files_for_viewing`   s    
c         C   s1   t  | t ƒ s$ t  | t ƒ s$ t ‚ | |  _ d  S(   N(   t
   isinstancet   listt   tupleR>   R   (   R   t   params(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   set_viewable_paramsi   s    $c         C   s  d  } t j ƒ  } g  } xj | D]b } |  j | } | j ƒ  } | d  k	 r_ | d  k	 r_ | } n  |  j | ƒ j ƒ  } | j | ƒ q W| d  k	 rì d d  l }	 |	 j	 j
 | ƒ }
 |	 j	 j | j ƒ  ƒ } | j |
 d ƒ | j | d ƒ n  | j d j | ƒ ƒ | j ƒ  S(   Niÿÿÿÿs   
(   R    t	   cStringIOt   StringIOR!   t   crystal_symmetryR:   RB   R9   t	   iotbx.pdbR   t   format_cryst1_recordt   format_scale_recordst	   unit_cellRA   R?   t   getvalue(   R   RE   t   symmt   pdb_strt   hierarchiesR   t   pdb_filet	   file_symmt   hierarchy_strR   t   cryst1t   scale(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   combine_pdb_filesm   s$    	c         C   sâ   | d  k	 r` |  j | ƒ } t | ƒ d k ro |  j | d ƒ } |  j | d ƒ } | | f Sn |  j j ƒ  } t | ƒ d k r� t d ƒ ‚ n  |  j | ƒ } d d  l	 } | j
 j j d | ƒ } | j } | j ƒ  } | | f S(   Ni   i    s   No PDB files loaded.iÿÿÿÿt
   pdb_string(   R    R6   R8   R:   t   get_xray_structureR!   R7   R   Rb   t   iotbx.pdb.hierarchyR   R1   R$   t   xray_structure_simple(   R   RD   RE   R1   t   xray_structureR[   R   t   pdb_in(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_combined_pdb_input�   s    	c         O   s   |  j  j | | Ž  d  S(   N(   R   t	   save_file(   R   t   argst   kwds(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   save_cif_file”   s    c         O   s   |  j  j | | Ž  d  S(   N(   R   t   set_param_file(   R   Rk   Rl   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   set_param_cif_file—   s    c         C   s   |  j  j ƒ  S(   N(   R   RI   (   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_current_cif_file_namesš   s    c         C   s:   g  } x- |  j  j ƒ  D] } | j |  j | ƒ ƒ q W| S(   N(   R   RI   R9   t   get_cif_file(   R   t   filesR   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_cifs�   s    c         C   s    g  |  j  ƒ  D] } | j ^ q S(   N(   Rs   R#   (   R   t   file(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_cif_objects£   s    c         C   s   |  j  j | ƒ S(   N(   R   t   get_file(   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyRq   ¦   s    c         C   s   |  j  j | ƒ S(   N(   R   t   remove_file(   R   R   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   remove_cif_file©   s    c         C   sZ   |  j  | ƒ } | d  k	 rV | |  j k rF | j j } | |  j | <n  |  j j | ƒ Sd  S(   N(   Rv   R    R*   R#   R1   R"   (   R   R   R&   R2   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyR:   ­   s    c         C   sc   |  j  | ƒ } | d  k	 r_ |  j j | d  ƒ } | d  k r[ | j j ƒ  } | |  j | <n  | Sd  S(   N(   Rv   R    R,   R"   R#   Rf   (   R   R   R]   Rg   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyRd   ¶   s    c         C   s¨   t  j j | ƒ s t ‚ |  j | ƒ d  k r@ |  j d | ƒ n  | |  j k rj |  j | ƒ rj |  j | S|  j	 | ƒ } | d  k	 s‹ t ‚ | j
 ƒ  } | |  j | <| S(   NR   (   R;   R<   t   isfileR>   Rv   R    Rj   R+   t   file_is_modifiedR:   t'   distance_based_simple_two_way_bond_sets(   R   R   R2   t   atomic_bonds(    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_connectivityÀ   s    c         C   sD   |  j  | ƒ } | d  k r: t j | ƒ } | j d ƒ n  | j ƒ  S(   NR   (   Rv   R    R   t   any_filet   assert_file_typeRT   (   R   R   R]   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   get_pdb_file_symmetryÍ   s
    c   
      C   sL  d d  l  } | d  k r< |  j d  k r0 d } q< |  j } n  t j j | ƒ sT t ‚ |  j | ƒ } | d  k r¨ t j	 | ƒ } | j
 d ƒ |  j | ƒ |  j | } n  | j ƒ  j ƒ  } t | j ƒ  | j ƒ  ƒ } t j j | t j j | ƒ ƒ } t | d ƒ }	 |	 j d | j j d | d t ƒ ƒ |	 j | j ƒ  ƒ |	 j ƒ  | S(   Niÿÿÿÿs   /var/tmpR   R4   s   %s
RT   t   write_scale_records(   RU   R    R   R;   R<   R=   R>   R:   R   R~   R   Rj   R*   t   atomst   extract_xyzt   get_fake_symmetryt   mint   maxR?   t   basenameR@   RA   R   t   format_cryst1_and_scale_recordsR   RB   RC   (
   R   R   R   R   R2   R]   t   xyzRZ   t   output_fileRG   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   create_copy_with_fake_symmetryÔ   s,    	!
N(   R
   R   R   R   R    t   FalseR   R'   R-   R.   R/   R0   R3   RH   RL   RQ   Rb   Ri   Rm   Ro   Rp   Rs   Ru   Rq   Rx   R:   Rd   R}   R€   R‹   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyR      s>   																		
		c         C   sx   d d l  m } | d |  d d } | d |  d d } | d |  d d } d | | | f } | j | ƒ } | S(   Niÿÿÿÿ(   t   crystal_symmetry_from_anyi    g      $@i   i   s   %.3f,%.3f,%.3f,90,90,90,P1(   R   R�   t   from_string(   t   xyz_mint   xyz_maxR�   t   at   bt   ct   combinedRZ   (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyR„   í   s    (   t
   __future__R    t   iotbx.gui_toolsR   R   t   libtbx.utilsR   RR   R;   R%   R   R   R   R   R„   (    (    (    sD   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/gui_tools/models.pyt   <module>   s   Ü