ó
,§xTc           @   sÏ   d  d l  Z  d  d l m Z d  d l Z d  d l m Z d d d „  ƒ  YZ d „  Z d „  Z e	 d k rË e j
 d	 d
 k  rœ e j j d ƒ e j d ƒ n  x, e j
 d D] Z d e GHe e ƒ GHqª Wn  d S(   iÿÿÿÿN(   t   OrderedDict(   t	   put_errort   MtzMetac           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s»   t  | d ƒ t k s t ‚ | |  _ | ri | d d !\ |  _ |  _ |  _ | d \ |  _ |  _ |  _	 n  | |  _
 | |  _ | |  _ | |  _ | | k sŸ t ‚ t | ƒ |  _ | |  _ d  S(   Ni    i   (   t   typet   tuplet   AssertionErrort   cellt   at   bt   ct   alphat   betat   gammat   symmetryt	   sg_numbert   dmint   dmaxR    t   columnst   filename(   t   selfR   R   R   R   R   R   R   (    (    s4   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/mtz.pyt   __init__   s    					c         C   s   d |  j  S(   Ns…   cell: %(cell)s
symmetry: "%(symmetry)s" (symmetry group no. %(sg_number)d)
resolution range: %(dmin)s - %(dmax)s
columns: %(columns)s(   t   __dict__(   R   (    (    s4   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/mtz.pyt   __str__   s    c         C   st   | |  j  k r6 t d | |  j f ƒ t j d ƒ n  |  j  | } | | k rp t d | |  j | | f ƒ t St S(   Ns   Column '%s' not found in %si   s/   Column '%s' in %s has type '%s' (expected '%s')(   R   R   R   t   syst   exitt   Falset   True(   R   t   labelt   expected_typet   col_type(    (    s4   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/mtz.pyt   check_col_type   s    (   t   __name__t
   __module__R   R   R   (    (    (    s4   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/mtz.pyR      s   		c         C   s  t  j d d |  g d t  j d t  j ƒ} | j d d ƒ \ } } | j ƒ  } | rg t d |  ƒ ‚ n  | j ƒ  } x_t | ƒ D]Q\ } } | j d ƒ s¡ q€ n  | j d	 ƒ rõ y( t	 d
 „  | | d j
 ƒ  Dƒ ƒ } WqÑt k
 rñ d } qÑXq€ | j d ƒ r?| j
 d ƒ d j ƒ  }	 t | j
 ƒ  d j d ƒ ƒ }
 q€ | j d ƒ r…| | d } t | d d !ƒ } t | d d !ƒ } q€ | j d ƒ r«| | d j
 ƒ  } q€ | j d ƒ r€ | | d j
 ƒ  } q€ q€ Wt | | ƒ } t | d |	 d |
 d | d | d | d |  ƒS(    sF   for now using mtzdump, directly calling libccp4/mtzlib would be bettert   mtzdumpt   HKLINt   stdint   stdoutt   inputs   HEAD
ENDs   mtzdump of %s failed.s    * s0    * Dataset ID, project/crystal/dataset names, cec         s   s   |  ] } t  | ƒ Vq d  S(   N(   t   float(   t   .0t   x(    (    s4   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/mtz.pys	   <genexpr>9   s    i   s    * Space group = t   'i   iÿÿÿÿt   )s    *  Resolution Rangei   i   i(   i)   i5   s    * Column Labelss    * Column TypesR   R   R   R   R   R   N(   t
   subprocesst   Popent   PIPEt   communicatet   pollt   RuntimeErrort
   splitlinest	   enumeratet
   startswithR   t   splitt
   ValueErrort   Nonet   stript   intt   rstripR&   t   zipR   (   t   hklint   pt
   stdoutdatat
   stderrdatat   retcodet   linest   nt   lineR   R   R   t   res_linet   lower_resolt   upper_resolt   column_namest   column_typesR   (    (    s4   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/mtz.pyt   read_metadata+   s<    ("c         C   sÂ   d d g } t  |  ƒ } | j | j k rI t d | j | j f ƒ ‚ n  | j | j k  rz t d | j | j f ƒ ‚ n  x1 | D]) } | | j k r� | j | d ƒ | Sq� Wt d |  ƒ ‚ d  S(   Nt
   FreeR_flagt   FREEs&   free-R-flags dmax: %g (should be < %g)s'   free-R-flags dmin: %g (should be >= %g)t   Is   free-R column not found in %s(   RH   R   R5   R   R   R   (   t   free_mtzt   data_mtz_metat   namest
   rfree_metat   name(    (    s4   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/mtz.pyt   check_freerflags_columnM   s    t   __main__i    i   s   No filenames.
i   s   File: %s(    (   R+   t   collectionsR    R   t   c4.utilsR   R   RH   RQ   R   t   argvt   stderrt   writeR   t   arg(    (    (    s4   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/c4/mtz.pyt   <module>   s   $	"		