ó
’™xTc           @   sÆ  d  Z  d d l m Z d d l Z e j j d ƒ Z d d l m	 Z	 d d l
 m Z m Z d d l
 m Z d d l m Z m Z m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l m Z d d l Z d d l Z e j  Z  e j! Z! d e f d „  ƒ  YZ" d e# f d „  ƒ  YZ$ e$ Z% d e# f d „  ƒ  YZ& d e& f d „  ƒ  YZ' d d „ Z( d d „ Z) d e& f d „  ƒ  YZ* d e# f d „  ƒ  YZ+ d S(    s  
R. J. Gildea, L. J. Bourhis, O. V. Dolomanov, R. W. Grosse-Kunstleve,
H. Puschmann, P. D. Adams and J. A. K. Howard:
iotbx.cif: a comprehensive CIF toolbox.
J. Appl. Cryst. (2011). 44, 1259-1263.

http://dx.doi.org/10.1107/S0021889811041161

http://cctbx.sourceforge.net/iotbx_cif

iÿÿÿÿ(   t   divisionNt   iotbx_cif_ext(   t   flex(   t   adptbxt   miller(   t
   covariance(   t   modelt   builderst   geometry(   t   OrderedDict(   t&   format_float_with_standard_uncertainty(   t   Sorry(   t	   flat_list(   t   detect_binary_file(   t
   smart_open(   t   matrixt   CifParserErrorc           B   s   e  Z e Z e j Z RS(    (   t   __name__t
   __module__t   __orig_module__t	   Exception(    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR   #   s   t   readerc           B   sz   e  Z d d d d d e e d  „ Z d „  Z d „  Z d d d „ Z d d „ Z d d d „ Z	 d d e
 e d d „ Z RS(	   c   	      C   sw  | | | g j  d  ƒ d k s$ t ‚ | |  _ | d  k rK t j | ƒ } n | d  k s] t ‚ | |  _ | d  k	 r„ t j | ƒ } n d } | d  k	 r¥ | j	 ƒ  } n  t
 ƒ  } t t | ƒ | j ƒ | _ | j d | ƒ rê t d ƒ ‚ n  t j | | | | ƒ |  _ | r<t |  j j ƒ  ƒ r<t |  j j ƒ  d ƒ ‚ n  | rst |  j j ƒ  ƒ rst |  j j ƒ  d ƒ ‚ n  d  S(   Ni   t   memoryt   blocks'   Binary file detected, aborting parsing.i    (   t   countt   Nonet   AssertionErrort	   file_pathR   t   cif_model_buildert   builderR   t   for_readingt   readR   t   mint   lent   monitor_initialt   is_binary_fileR   t   extt   fast_readert   parsert   lexer_errorst   parser_errors(	   t   selfR   t   file_objectt   input_stringt
   cif_objectR   t   raise_if_errorst   strictt   binary_detector(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyt   __init__)   s*    $			c         C   s   |  j  j ƒ  S(   N(   R   R   (   R)   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR   I   s    c         C   s&   |  j  j ƒ  j ƒ  |  j  j ƒ  j ƒ  S(   N(   R&   R'   t   sizeR(   (   R)   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyt   error_countL   s    i2   c         C   sl   | d  k r t j } n  x% |  j j ƒ  |  D] } | | IJq, Wx% |  j j ƒ  |  D] } | | IJqT Wd  S(   N(   R   t   syst   stdoutR&   R'   R(   (   R)   t
   max_errorst   outt   msg(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyt   show_errorsP   s     c      	   C   sL   t  d |  j ƒ  d |  j d | d t j ƒ j } | d  k	 rD | | S| Sd  S(   Nt	   cif_modelR   t   data_block_namet   data_structure_builder(   t   cctbx_data_structures_from_cifR   R   R   t   crystal_structure_buildert   xray_structuresR   (   R)   R:   R>   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyt   build_crystal_structuresW   s    	c         C   sR   t  d |  j ƒ  d |  j d | d t j d | ƒ j } | d  k	 rJ | | S| Sd  S(   NR9   R   R:   R;   t   base_array_info(   R<   R   R   R   t   miller_array_buildert   miller_arraysR   (   R)   R:   R@   t   arrays(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyt   build_miller_arraysb   s    		c         C   s  | d  k r* t j d |  j d d ƒ } n  | d  k	 rW |  j d | d | ƒ j ƒ  } n7 t g  |  j d | ƒ j ƒ  D] } | j ƒ  ^ qs ƒ } | } xz t | ƒ D]l \ } }	 | d  k	 r¡ |	 j ƒ  }
 |
 j	 d | d | ƒ } |	 j
 d | ƒ | | <| | j |	 j ƒ  ƒ q¡ q¡ W| S(	   Nt   sourcet   source_typet   cifR:   R@   t   other_symmetryt   forcet   crystal_symmetry(   R   R   t
   array_infoR   RD   t   valuesR   t	   enumerateRJ   t   join_symmetryt   customized_copyt   set_infot   info(   R)   R:   RJ   t   force_symmetryt   merge_equivalentsR@   RC   RH   t   it   arrayt   crystal_symmetry_from_file(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyt   as_miller_arraysp   s(    		1		N(   R   R   R   t   TrueR0   R   R2   R8   R?   RD   t   FalseRW   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR   '   s$   		t   crystal_symmetry_as_cif_blockc           B   s   e  Z d d  d d „ Z RS(   t   coreCIFs   %.3fc         C   s¡  | j  ƒ  |  _ |  j d k s$ t ‚ |  j d k r? d |  _ n	 d |  _ | j d ƒ s] t ‚ t j ƒ  |  _ d |  j } | j ƒ  d  k	 rõt j
 d t d |  j d	 t d
 t | j ƒ  ƒ d
 ƒ f d |  j d g  | j ƒ  D] } | j ƒ  ^ qß f f ƒ ƒ } |  j j | ƒ d |  j } | j ƒ  j ƒ  }	 |	 j ƒ  }
 |
 j ƒ  j  ƒ  |  j | d <|	 j ƒ  |  j | d <|	 j ƒ  |  j | d <|	 j ƒ  |  j | d <d |  j } |	 j ƒ  |  j | d <|	 j ƒ  |  j | d <|	 j ƒ  |  j | d <n  | j ƒ  d  k	 r�| j ƒ  } t | j ƒ  ƒ } | j ƒ  } | d  k	 rï| j ƒ  } xK t d ƒ D]= } | | d k rVt | | t j | | ƒ ƒ | | <qVqVWt j  | j! ƒ  ƒ } t j" | j# ƒ  ƒ } | | j$ | ƒ } t | t j | ƒ ƒ } n  | \ } } } } } } | | |  j | d <| | |  j | d <| | |  j | d <| | |  j | d <| | |  j | d <| | |  j | d <| | |  j | d <n  d  S(   Nt   corecift   mmcift   .t   _t   %s   _cell%st   datat   _space_group_symopt   idi   t   operation_xyzs   _space_group%st   crystal_systemt	   IT_numbers   name_H-M_altt	   name_Halls   _symmetry%ss   space_group_name_H-Mt   space_group_name_Hallt   Int_Tables_numberi   i    t   length_at   length_bt   length_ct   angle_alphat
   angle_betat   angle_gammat   volume(   R\   R]   (%   t   lowert   formatR   t	   separatort
   startswithR   R   t	   cif_blockt   space_groupR   t   loopR	   t   rangeR!   t   as_xyzt   add_loopt   space_group_infot   typet   groupRe   t   numbert   lookup_symbolt   hall_symbolt	   unit_cellt   listt
   parametersRp   t   matrix_packed_u_diagonalt   format_float_with_sut   matht   sqrtR   t   rowt   d_volume_d_paramst   sqrt   matrix_packed_u_as_symmetrict   dot(   R)   RJ   t   cell_covariance_matrixRr   t   numeric_formatt   cell_prefixt   st   sym_loopt	   sg_prefixt   sg_typet   sgt   uct   paramsRp   t   diagRT   t   d_v_d_paramst   vcvt   var_vt   at   bt   ct   alphat   betat   gamma(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR0   �   s`     	1+N(   R   R   R   R0   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyRZ   �   s   t   xray_structure_as_cif_blockc           B   s   e  Z d d d  „ Z RS(   c      
   C   sò  t  j |  | j ƒ  d | ƒ| j ƒ  } | j ƒ  } | d  k	 rŽ | j ƒ  } | j ƒ  } t j	 t j
 | j ƒ  ƒ ƒ } t j | j ƒ  ƒ }	 n  d }
 t j d d ƒ } xtt | ƒ D]f\ } } d  } } } | d  k	 rM| | } | j j ƒ  rR| j d k rRg  } xH t d ƒ D]7 } | j t | j | t j | | j | ƒ ƒ ƒ qWn  | j j ƒ  r•| j d k r•t | j t j | | j ƒ ƒ } n  | j j ƒ  s³| j j ƒ  rM| j j ƒ  rït | j t j t j  | | | ƒ ƒ ƒ } qJt j! | | | ƒ j" ƒ  } |	 t j# | ƒ j$ |	 ƒ } t | j% | ƒ t j | ƒ ƒ } qMn  | d  k r†g  t d ƒ D] } |
 | j | ^ qf} n  | d  k r¢|
 | j } n  | d  k rÄ|
 | j% | ƒ } n  | j j& ƒ  rÜd } n d } | j' | j( | j) | d | d | d | | | f ƒ q³ W|  j* j+ | ƒ | j, | j- ƒ  ƒ } | j. ƒ  rît/ | j0 ƒ  ƒ } t j d d ƒ } xP| D]H} t1 j2 | | j3 ƒ } | d  k	 rƒ| j( g } | | j4 | j( ƒ j5 } | d k rO| | | d !| } x— t d ƒ D]U } | | d k r3| j t | | t j | | ƒ ƒ ƒ qó| j |
 | | ƒ qóWq´| j( g g  t d ƒ D] } |
 | | ^ qe} n1 | j( g g  t d ƒ D] } |
 | | ^ q™} | j' | ƒ qyW|  j* j+ | ƒ |  j* j+ t6 | ƒ ƒ n  d  S(   NR�   s   %.6ft   headert   _atom_site_labelt   _atom_site_type_symbolt   _atom_site_fract_xt   _atom_site_fract_yt   _atom_site_fract_zt   _atom_site_U_iso_or_equivt   _atom_site_adp_typet   _atom_site_occupancyi    i   t   Uanit   Uisoi   i   t   _atom_site_aniso_labelt   _atom_site_aniso_U_11t   _atom_site_aniso_U_22t   _atom_site_aniso_U_33t   _atom_site_aniso_U_12t   _atom_site_aniso_U_13t   _atom_site_aniso_U_23iÿÿÿÿi   (   R£   R¤   R¥   R¦   R§   R¨   R©   Rª   (   R­   R®   R¯   R°   R±   R²   R³   (7   RZ   R0   RJ   t
   scatterersR�   R   t   parameter_mapR„   R   t   pow2t   doublet   u_star_to_u_cif_linear_mapR   Rˆ   t   u_star_to_u_iso_linear_formR   Rw   RM   t   flagst	   grad_sitet   siteRx   t   appendR…   R†   R‡   t   grad_occupancyt	   occupancyt
   grad_u_isot   grad_u_anisot   u_isoR   t   variance_for_u_isot%   extract_covariance_matrix_for_u_anisoR‹   RŠ   RŒ   t   u_iso_or_equivt   use_u_anisot   add_rowt   labelt   scattering_typeRu   Rz   t   selectt   extract_use_u_anisoR1   R‚   t   extract_labelsR   t   u_star_as_u_cift   u_start   indext   u_anisot   atom_type_cif_loop(   R)   t   xray_structuret   covariance_matrixR�   R´   R•   t	   param_mapt   covariance_diagonalt   u_star_to_u_cif_linear_map_pow2R¹   t   fmtt   atom_site_loopt   i_seqt   scR¼   t   occuRÅ   R–   RT   t   covt   vart   adp_typet   aniso_scattererst   labelst
   aniso_loopt   u_cifRˆ   t   idx(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR0   È   s¢    	   	
%		$-	$	     	$41N(   R   R   R   R0   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR¡   Æ   s   R[   c         C   s„  | j  ƒ  } | d k s t ‚ | d k r3 d } n d } i d d 6d d 6} i d	 d
 6d d 6} |  j ƒ  } | j ƒ  } t g  | D] } | j ƒ  ^ qƒ ƒ } d | d | d | g }	 |	 j g  t | ƒ D] }
 d | |
 d f ^ qÌ ƒ |	 j g  t | ƒ D] }
 d | |
 d f ^ q ƒ |	 j d | d | d | g ƒ t j	 d |	 ƒ } | j
 ƒ  } |  j ƒ  } |  j } i  } x3 |  j ƒ  D]% } | j | j | j | j f ƒ q‰W| j |  j ƒ } | d  k rÜ|  j } n  | d  k rñd } n  xŒ| j
 ƒ  j ƒ  D]x\ } } | j | j ƒ } | j rM| | j k rMd | j ƒ  } n% | d  k rrd } | | j ƒ  } n  | d k r�d \ } } n$ | | \ } } d | } d | } | | | g } g  | j ƒ  D] } d | ^ qÍ} g  | j ƒ  D] } d | ^ qð} | j d g | | j ƒ  ƒ | j d g | | j ƒ  ƒ | j | | ƒ | j | j ƒ  | | g ƒ | j | ƒ qW| S(   NR\   R]   R^   R_   s9   International Tables Volume C Table 6.1.1.4 (pp. 500-502)t   it1992s3   Waasmaier & Kirfel (1995), Acta Cryst. A51, 416-431t   wk1995sG   Henke, Gullikson and Davis, At. Data and Nucl. Data Tables, 1993, 54, 2t   henkes"   Sasaki, KEK Report, 1989, 88-14, 1t   sasakis   _atom_type%ssymbols    _atom_type%sscat_dispersion_reals    _atom_type%sscat_dispersion_imags    _atom_type%sscat_Cromer_Mann_a%ii   s    _atom_type%sscat_Cromer_Mann_b%is   _atom_type%sscat_Cromer_Mann_cs   _atom_type%sscat_sources"   _atom_type%sscat_dispersion_sourceR¢   s   Custom %i-GaussiansŠ   %i-Gaussian fit: Grosse-Kunstleve RW, Sauter NK, Adams PD:
Newsletter of the IUCr Commission on Crystallographic Computing 2004, 3, 22-31.s   %.5f(   s   corecifs   mmcif(   R^   R^   (   Rq   R   t   scattering_type_registryt   unique_gaussians_as_listt   maxt   n_termst   extendRx   R   Rw   t   as_type_gaussian_dictt   scattering_type_registry_paramsR´   t
   setdefaultRÉ   t   fpt   fdpt   gett   inelastic_form_factors_sourceR   t	   iteritemst   tablet   custom_dictt
   array_of_at
   array_of_bR�   RÇ   (   RÒ   Rr   Rs   t   sourcest   inelastic_referencesRè   t   unique_gaussianst   gaussiant   max_n_gaussiansR¢   RT   t   atom_type_loopt   gaussian_dictR–   t   fp_fdp_tableRÚ   t   disp_sourcet	   atom_typet   scat_sourceRð   Rñ   Rˆ   R›   t
   gaussian_at
   gaussian_b(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyRÑ   +  st     	

%	+	+	#	

##t   _refln_c         C   sI   t  j d d | d | d | f ƒ } x |  D] } | j | ƒ q. W| S(   NR¢   s	   %sindex_hs	   %sindex_ks	   %sindex_l(   R   Rw   RÇ   (   t   indicest   prefixt
   refln_loopt   hkl(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyt   miller_indices_as_cif_loopr  s
    	t   miller_arrays_as_cif_blockc           B   s2   e  Z d d d d  d d „ Z d d d d „ Z RS(   t   _reflnR[   c         C   sw   t  j |  | j ƒ  d | ƒ| |  j |  _ | j ƒ  j ƒ  |  _ d  |  _ |  j	 | | | | ƒ |  j
 j |  j ƒ d  S(   NRr   (   RZ   R0   RJ   Rs   R  R  t	   deep_copyR   R	  t   add_miller_arrayRu   Rz   (   R)   RU   t
   array_typet   column_namet   column_namest   miller_index_prefixRr   (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR0   |  s    	c         C   s	  | | | g j  d ƒ d k s$ t ‚ | d k	 rE | d k s] t ‚ n | d k	 r] | g } n  | j ƒ  rg| d k rš |  j d | |  j d | g } n t | ƒ d k s² t ‚ d | d k rÒ d | d	 k sò d
 | d k r+d | d	 k r+t j | j ƒ  ƒ j	 ƒ  t j
 | j ƒ  ƒ j	 ƒ  g } q�t j | j ƒ  ƒ j	 ƒ  | j d t ƒ j ƒ  j	 ƒ  g } n| j ƒ  rì| d k r¦g  d D] } |  j d | ^ q†} n t | ƒ d k s¾t ‚ g  | j ƒ  j ƒ  D] } | j	 ƒ  ^ qÑ} n•| d k	 r_| j ƒ  rd } n d } |  j d | | g } | j ƒ  d k	 r_| j |  j d | d ƒ q_n  t | j ƒ  t j ƒ r‰| j ƒ  g } n | j ƒ  j	 ƒ  g } | j ƒ  rA| j ƒ  d k	 rÎt | ƒ d k sò| j ƒ  d k rAt | ƒ d k rAg  } | j ƒ  \ }	 }
 x-d D]%} |
 j | ƒ } | j |
 j | ƒ ƒ | d k rt|	 j ƒ  j | ƒ } | t | ƒ d  } n* |	 j ƒ  j | ƒ } | t | ƒ d } |	 j ƒ  j | ƒ } t j t j | j ƒ  | ƒ | ƒ } | j ƒ  d k	 r| j  |	 j ƒ  j | ƒ ƒ n  |  j! d k r#| |  _ n  |  j" | d | ƒqWd Sn  | j ƒ  d k	 r�t | ƒ d k r�| j | j ƒ  j	 ƒ  ƒ n  |  j j# ƒ  | j ƒ  j# ƒ  k o·|  j j$ | j ƒ  ƒ s�d d l% m& } | j ƒ  j' ƒ  } | |  j | ƒ } | j( d ƒ j# ƒ  r§| j |  j j | j) d ƒ ƒ ƒ x; | D]3 } | j t j d g | j# ƒ  | j# ƒ  ƒ ƒ q,Wx, | D]$ } | j# ƒ  | j# ƒ  k sjt ‚ qjW| |  j | ƒ } n  | j( d	 ƒ j# ƒ  rJ| j | j) d	 ƒ ƒ } |  j j | ƒ t |  j! j* ƒ  ƒ d } x5 | D]- } t+ | ƒ d g | } |  j! j, | ƒ qW| |  j | ƒ } n  | |  j | ƒ } | j- ƒ  } g  | D] } | j | ƒ ^ qo} n  |  j! d k rºt. |  j d |  j ƒ|  _! n  t/ t0 | | ƒ ƒ } x# | D] } | |  j! k sÖt ‚ qÖW|  j! j1 | ƒ d S(   sU   
    Accepts a miller array, and one of array_type, column_name or column_names.
    i   t   calct   meast   F_t   phase_t   _A_i    t   _B_i   s   .A_s   .B_t   degt   ABCDs	   HL_%s_isoi   t   squared_t    t   sigmat   +t   -R  Niÿÿÿÿ(   t   match_indicest   ?i   R  (   R  R  (   R  R   (2   R   R   R   t   is_complex_arrayR  R!   R   t   realRa   t	   as_stringt   imagt   abst   phasesRX   t   is_hendrickson_lattman_arrayt   as_abcdt   is_xray_intensity_arrayt   sigmasR½   t
   isinstancet
   std_stringt   anomalous_flagt   match_bijvoet_matest   pairs_hemisphere_selectionRì   t   singles_hemisphere_selectionR  RÊ   R   RU   t   setRJ   t
   set_sigmasR	  R  R1   t   all_eqt   cctbx.millerR!  R  t   singlest   single_selectiont   keysR‚   RÇ   t   permutationR  R	   t   zipt   add_columns(   R)   RU   R  R  R  Ra   t   abcdt   dt   obs_extt   asut   matchest   anomalous_signt   selR  t   hemisphere_column_namest   hemisphere_datat   hemisphere_arrayR!  t   other_indicest   matcht   single_indicest   n_data_columnsR
  Rˆ   t   permt   columnst   key(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR  ˆ  sª    $  !$'.	"$$$!"1"%N(   R   R   R   R0   R  (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR  z  s   	R<   c           B   s#   e  Z d d d d d d d  „ Z RS(   c      
   K   sX  | d  k s | d  k s t ‚ | d  k r? t j t j f } n' | t j t j f k s] t ‚ | f } t ƒ  |  _ t ƒ  |  _ | d  k r¨ t d | d | ƒ j	 ƒ  } n  t
 | ƒ sÃ t d ƒ ‚ n  | d  k	 r| | k r| d  k rô d | }	 n d | | f }	 t |	 ƒ ‚ n  g  }
 i  } x2| j ƒ  D]$\ } } | d  k	 rV| | k rVq,n  x÷ | D]ï } | t j k r¬d | k sŠd | k rL|  j j | | | ƒ j ƒ qLq]| t j k r]t j | ƒ } | d  k	 rß| } n  | d  k	 r| j d | g ƒ } n  d	 | k sd
 | k rL|  j j | | | d | d | ƒj ƒ  ƒ qLq]q]Wq,Wd  S(   NR   R*   s   No data block found in CIFs!   Unknown CIF data block name: "%s"s.   Unknown CIF data block name "%s" in file: "%s"R¥   t   _atom_site_Cartn_xRà   t   _refln_index_hs   _refln.index_hR@   t   wavelengths(   R   R   R   RA   R=   R	   R>   RB   R   R   R!   R   t   RuntimeErrort   itemsRï   t	   structuret   get_wavelengthsRO   RC   (   R)   R*   R   R9   R;   R:   R@   t   kwdst   data_structure_buildersR7   t   errorsRP  RM  R   R   t   block_wavelengths(    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR0   ò  sJ    	 "		N(   R   R   R   R0   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyR<   ñ  s   (,   t   __doc__t
   __future__R    t   boost.pythont   boostt   pythont
   import_extR$   t   cctbx.array_familyR   t   cctbxR   R   R   t	   iotbx.cifR   R   R   t   libtbx.containersR	   t   libtbx.utilsR
   R…   R   R   R   t   libtbxR   t   scitbxR   R†   R3   t   distances_as_cif_loopt   angles_as_cif_loopR   t   objectR   R%   RZ   R¡   RÑ   R  R  R<   (    (    (    s@   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/cif/__init__.pyt   <module>   s4   		d9eGw