ó
šxTc           @   sâ   d  d l  m Z m Z m Z 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 Z d  d l Z d e f d „  ƒ  YZ d	 e f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   iÿÿÿÿ(   t   mr_solutiont   mr_ndimt   mr_rlistt   mr_sett   MapCoefst   map_str_float1D(   t   euler_angles(   t	   scatterer(   t   flex(   t   StringIONt   LabinParserc           B   s   e  Z d  Z e d „  ƒ Z RS(   s"   
    CCP4-style labin parsing
    c         C   sC   t  ƒ  } x3 |  j ƒ  D]% } | j d ƒ \ } } | | | <q W| S(   Nt   =(   R
   t   split(   t   labint   objt   labin_definitiont   program_labelt
   data_label(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   parse   s
    	(   t   __name__t
   __module__t   __doc__t   staticmethodR   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR
      s   t   SolutionFileParserc           B   sO  e  Z d  Z e j d e j ƒ Z e j d e j ƒ Z e j d e j ƒ Z e j d e j ƒ Z	 e j d e j ƒ Z
 e j d e j ƒ Z e j d e j ƒ Z e j d e j ƒ Z e j d	 e j ƒ Z e j d
 e j ƒ Z e j d e j ƒ Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   sM   
    This class parses a solution file and creates an mr_solution object
    sÜ   
        ^ SOLU \w* \s+ TRIAL \s+ ENSE \w* \s+
        (\w+)
        \s+ EULER
        \s+ ( -? \d+ \. \d+ )
        \s+ ( -? \d+ \. \d+ )
        \s+ ( -? \d+ \. \d+ )
        \s+ RFZ \s+
        ( \d+ \. \d+ )
        s0  
        ^ SOLU \w* \s+ 6DIM \s+ ENSE \w* \s+
        ([\w\{\}\-]+)
        \s+ EULER
        ( \s+ -?\d+ \. \d+ )
        ( \s+ -?\d+ \. \d+ )
        ( \s+ -?\d+ \. \d+ )
        \s+
        ( FRAC | ORTH )
        ( \s+ -?\d+ \. \d+ )
        ( \s+ -?\d+ \. \d+ )
        ( \s+ -?\d+ \. \d+ )
        s/   
        \s+ BFAC \s+ ( -?\d+ \. \d+ )
        s7   
        ^ SOLU \w* \s+ SET
        ( [^\n]* )
        s8   
        ^ SOLU \w* \s+ SPAC
        ( [^\n]* )
        sX   
        ^ SOLU \w* \s+ SOLPAR \s+ FSOL \s+ ( -?\d+ \. \d+ )
        ( [^\n]* )
        sL   
        ^ SOLU \w* \s+ SOLPAR \s+ .* \s+ BSOL \s+ ( -?\d+ \. \d+ )
        s=   
        ^ SOLU \w* \s+ .* \s+ FIXB \s+ ( ON | OFF )
        ss   
        ^ SOLU \w* \s+ ENSE \w* \s+
        ( \S+ ) \s+
        VRMS
        ( (?: \s+ -? \d+ \. \d+ )+ )
        s­   
        ^ SOLU \w* \s+ ENSE \w* \s+
        ( \S+ ) \s+
        VRMS \s DELTA
        ( \s+ [+-] \d+ \. \d+ ) \s+
        RMSD
        ( (?: \s+ -? \d+ \. \d+ )+ )
        sÁ   
        ^ SOLU \w* \s+ ENSE \w* \s+
        ( \S+ ) \s+
        VRMS \s DELTA
        ( \s+ [+-] \d+ \. \d+ ) \s+
        RMSD
        ( (?: \s+ -? \d+ \. \d+ )+ ) \s+
        \# VRMS
        c         C   s?   g  |  _  |  j ƒ  x | D] } |  j | ƒ q W|  j ƒ  d  S(   N(   t   mr_setst   empty_currentt   parse_sol_linet   move_current_to_processed(   t   selft   filet   line(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   __init__‘   s
    	
c         C   s1  t  j j | ƒ } | r‰ |  j j t | j d ƒ t | j d ƒ ƒ t | j d ƒ ƒ t | j d ƒ ƒ f d t | j d ƒ ƒ ƒ ƒ d  St  j j | ƒ } | rÆt  j	 j | ƒ } |  j
 j t | j d ƒ t j t | j d ƒ ƒ t | j d ƒ ƒ t | j d ƒ ƒ ƒ | j d ƒ d k | j d ƒ d k t | j d ƒ ƒ t | j d	 ƒ ƒ t | j d
 ƒ ƒ f | r‚t | j d ƒ ƒ n d | j d ƒ d k | j d ƒ d k | j d ƒ d k ƒ	 ƒ d  St  j j | ƒ } | r|  j rþ|  j ƒ  |  j ƒ  n  | j d ƒ |  _ d  Sy- |  j d | ƒ \ } } | |  j | <d  SWn t k
 rTn Xt  j j | ƒ } | rˆ| j d ƒ j ƒ  |  _ n  t  j j | ƒ } | r»t | j d ƒ ƒ |  _ n  t  j j | ƒ } | rît | j d ƒ ƒ |  _ n  t  j j | ƒ } | r-| j d ƒ d k r!t n t |  _  n  d  S(   Ni   i   i   i   i    i   t   FRACi   i   i   t   FIXRiÿÿÿÿt   FIXTt   FIXBR   t   ON(!   R   t
   SOLU_TRIALt   searcht   current_rlistt   appendR   t   groupt   floatt	   SOLU_6DIMt	   SOLU_BFACt   current_ndimR   R   t
   zyz_matrixt   findt   SOLU_SETt   current_annotationR   R   t   get_vrms_valuet   current_vrmst   SyntaxErrort	   SOLU_SPACt   stript   current_space_groupt	   SOLU_FSOLt   current_fsolt	   SOLU_BSOLt   current_bsolt	   SOLU_FIXBt   Truet   Falset   current_fixb(   R   R   t   resultt   bfac_resultt   namet   vrms(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR   œ   sl    	
c         C   sO   d  |  _ g  |  _ g  |  _ t ƒ  |  _ d |  _ d |  _ d |  _ t	 |  _
 d  S(   Nt    i    (   t   NoneR1   R'   R-   R   R3   R7   R9   R;   R>   R?   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR   î   s    						c         C   sŸ   d d l  m } |  j r= | j d |  j ƒ j ƒ  j ƒ  } n d } |  j j t |  j	 |  j
 |  j d d d d d d d d d d g  t ƒ  |  j | d ƒ ƒ d  S(   Niÿÿÿÿ(   t   sgtbxt   symbolRD   i    (   t   cctbxRF   R7   t   space_group_infot   typet   hall_symbolR   R(   R   R1   R-   R'   R   R3   (   R   RF   t   sg(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR   ú   s.    	$c         C   s   t  |  j ƒ S(   N(   R    R   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   get_dot_sol  s    c         C   s   t  t |  ƒ ƒ S(   N(   R   R   (   t	   file_name(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt
   parse_file  s    c         C   s   t  t |  ƒ ƒ S(   N(   R   R	   (   t
   sol_string(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   parse_string%  s    c         C   s/  |  j  j | ƒ } | rS | j ƒ  \ } } | g  | j ƒ  D] } t | ƒ ^ q: f S|  j j | ƒ } | rÌ | j ƒ  \ } } } t | j ƒ  ƒ } | g  | j ƒ  D]# } t j t | ƒ d | ƒ ^ q¢ f S|  j	 j | ƒ } | r"| j ƒ  \ } } } | g  | j ƒ  D] } t | ƒ ^ q	f St
 d ‚ d  S(   Ni   s	   Not found(   t   SOLU_VRMS_1R&   t   groupsR   R*   t   SOLU_VRMS_3R6   t   matht   sqrtt   SOLU_VRMS_2R4   (   t   clsR   R@   RB   t   rmst   rt   dt   delta(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR2   +  s    ):)(   R   R   R   t   ret   compilet   VERBOSER%   R+   R,   R0   R5   R8   R:   R<   RR   RW   RT   R   R   R   R   RM   R   RO   RQ   t   classmethodR2   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR      sT   
			R		 	t   AtomDefinitionc           B   s   e  Z d  Z d „  Z RS(   s#   
    Information about an atom
    c         C   sC   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ | |  _ d  S(   N(   t   xtalt   elemt   xt   yt   zt   occt   bfac(   R   Rb   Rc   Rd   Re   Rf   Rg   Rh   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR   I  s    						(   R   R   R   R   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyRa   D  s   t   AtomFileParserc           B   s§   e  Z d  Z e j d e j ƒ Z e j d e j ƒ Z e j d e j ƒ Z d „  Z	 d „  Z
 d „  Z d „  Z d „  Z e d	 „  ƒ Z e d
 „  ƒ Z e d „  ƒ Z RS(   sC   
    This class parses an EP .sol-file and return atom records
    s*  
            ^ \s* ATOM \s+ CRYS \w* \s+
            (\w+)
            \s+ TYPE \s+
            (\w+)
            \s+ ( FRAC | ORTH )
            ( \s+ -?\d+ \. \d* )
            ( \s+ -?\d+ \. \d* )
            ( \s+ -?\d+ \. \d* )
            \s+ OCC
            ( \s+ -?\d+ \. \d* )
            sC   
            \s+ ISOB
            ( \s+ -?\d+ \. \d* )
            s¾   
            ^ \s* SCAT \w* \s+ TYPE \s+
            ( \w+ )
            \s+ FP \s* = \s*
            ( -?\d+ \. \d+ )
            \s+ FDP \s* = \s*
            ( -?\d+ \. \d+ )
            c         C   s4   g  |  _  i  |  _ x | D] } |  j | ƒ q Wd  S(   N(   t   atomst   form_factorsR   (   R   t   streamR   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR   z  s    		c      
   C   s"  t  j j | ƒ } | rÈ t  j j | ƒ } | rH t | j d ƒ ƒ } n d  } |  j j t	 | j d ƒ | j d ƒ t | j d ƒ ƒ t | j d ƒ ƒ t | j d ƒ ƒ t | j d ƒ ƒ | ƒ ƒ d  St  j
 j | ƒ } | rt | j d ƒ ƒ t | j d ƒ ƒ f |  j | j d ƒ <d  Sd  S(   Ni   i   i   i   i   i   i   (   Ri   t	   ATOM_CRYSR&   t	   ISOB_BFACR*   R)   RE   Rj   R(   Ra   t   F_PRIME_AND_F_DOUBLEPRIMERk   (   R   R   R@   t   bfac_searchRh   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyR   ƒ  s*    	
(c         C   s   |  j  j | d ƒ d S(   Ng        i    (   g        g        (   Rk   t   get(   R   t   element(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   get_f_p¦  s    c         C   s   |  j  j | d ƒ d S(   Ng        i   (   g        g        (   Rk   Rq   (   R   Rr   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   get_f_dp«  s    c         C   sv   t  j g  |  j D]_ } t d | j d | j | j | j f d | j d | j	 rX | j	 n d t
 j t
 j ƒ ^ q ƒ S(   Nt   scattering_typet   sitet	   occupancyt   bg       À(   R   t   xray_scattererRj   R   Rc   Rd   Re   Rf   Rg   Rh   RU   t   pi(   R   t   atom(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   get_cctbx_atoms°  s    c         C   s   t  j g  ƒ S(   N(   R   Ry   (   R   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   get_empty_atoms_list½  s    c         C   s   t  t |  ƒ ƒ S(   N(   Ri   R	   (   t   atom_string(    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyRQ   Â  s    c         C   s   t  t |  ƒ ƒ S(   N(   Ri   R   (   RN   (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyRO   È  s    (   R   R   R   R]   R^   R_   Rm   Rn   Ro   R   R   Rs   Rt   R|   R   R}   RQ   RO   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyRi   T  s$   			#			(   t   phaserR    R   R   R   R   R   t   scitbx.mathR   t
   cctbx.xrayR   t   cctbx.array_familyR   t	   cStringIOR	   R]   RU   t   dictR
   t   objectR   Ra   Ri   (    (    (    sH   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/phaser/test_phaser_parsers.pyt   <module>   s   .ÿ (