ó
~xTc           @   s'   d  d l  m Z d d d     YZ d S(   i˙˙˙˙(   t   divisiont   readerc           B   s;   e  Z d  Z d   Z e d    Z e d  Z d   Z RS(   s,   A class to read the XDS.INP file used in XDSc         C   s   d  S(   N(    (   t   self(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/xds/xds_inp.pyt   __init__   s    c         C   s"   d d l  } | j j |   d k S(   s   Check if the given file is an XDS.INP file.

    Params:
      filename The XDS.INP filename

    Returns:
      True/False the file is a XDS.INP file

    i˙˙˙˙Ns   XDS.INP(   t   ost   patht   basename(   t   filenameR   (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/xds/xds_inp.pyt   is_xds_inp_file   s    c         C   sŃ   d
 |  _ d |  _ d
 |  _ d
 |  _ d |  _ d |  _ d
 |  _ d |  _ d
 |  _	 d d g |  _
 d
 |  _ d |  _ d |  _ d
 |  _ t j |  rŤ t | d  j   } n t d	 j |    |  j |  d
 S(   sŔ   Read the XDS.INP file.

    See http://xds.mpimf-heidelberg.mpg.de/html_doc/xds_files.html for more
    information about the file format.

    Param:
      filename The path to the file

    i    i    g      ŕ?g        g      4@i   g       @t   rs   {0} is not a XDS.INP fileN(   t   Nonet   unit_cell_constantst   minimum_valid_pixel_valuet   correctionst   trusted_regiont   maximum_number_of_processort   fraction_of_polarizationt   polarization_plane_normalt   starting_anglet   starting_framet   include_resolution_ranget   space_group_numbert   max_fac_rmeast
   data_rangeR   R   t   opent	   readlinest   IOErrort   formatt   parse_lines(   R   R   t   check_filenamet   lines(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/xds/xds_inp.pyt	   read_file   s$    													c         C   s  d d l  } g  } g  |  _ x| D]˙} | j d  } | d k rS | d | !} n  | j   } g  | j d |  D] } | d k rr | ^ qr } g  } x| | D]t }	 |	 j d  }
 |
 d k r| j |	 |
 d   |
 d t |	  k  r| j |	 |
 d  qq | j |	  q Wx	t |  r t |  d k rf| d j d  d k sUt  | j |  Pn  x´ t |  D]Ś \ } }	 | d k rŠ|	 j d  d k st  qs| d k rě|	 j d  d k rě| j | d | ! | | } Pqs| d t |  k rs| j |  g  } PqsqsWqWq" Wxp| D]h} | d } | d	 k rad
 j	 | d  |  _
 q,| d k rt | d  |  _ q,| d k rĽt | d  |  _ q,| d k rßt |  d k rĎd |  _ q| d |  _ q,| d k rt t | d  |  _ q,| d k r)t t | d  |  _ q,| d k rNt t | d  |  _ q,| d k rpt | d  |  _ q,| d k r|  j j t t | d   q,| d k ržt | d  |  _ q,| d k rŕt | d  |  _ q,| d k rt | d  |  _ q,| d k r$t | d  |  _ q,| d k rFt | d  |  _ q,| d k rht | d  |  _ q,| d k rt | d  |  _ q,| d k rŻt t | d  |  _ q,| d k rŃt | d  |  _ q,| d k rót | d  |  _ q,| d  k rt t | d  |  _  q,| d! k r:t | d  |  _! q,| d" k r_t t | d  |  _" q,| d# k rt# | d  |  _$ q,| d$ k r| d |  _% q,| d% k rżt | d  |  _& q,| d& k rát | d  |  _' q,| d' k rt t | d  |  _( q,| d( k r+t t | d)  |  _) q,| d* k rMt | d  |  _* q,| d+ k rot | d  |  _+ q,| d, k r,t t | d  |  _, q,q,Wd S(-   s@   Parse the lines

    Param:
      tokens The list of lines

    i˙˙˙˙Nt   !i    s    |\tt    t   =i   s	   DETECTOR=t    s   MINIMUM_VALID_PIXEL_VALUE=s	   OVERLOAD=s   CORRECTIONS=s   DIRECTION_OF_DETECTOR_X-AXIS=iý˙˙˙s   DIRECTION_OF_DETECTOR_Y-AXIS=s   TRUSTED_REGION=iţ˙˙˙s   SENSOR_THICKNESS=s   UNTRUSTED_RECTANGLE=iü˙˙˙s   MAXIMUM_NUMBER_OF_PROCESSORS=s   NX=s   NY=s   QX=s   QY=s   ORGX=s   ORGY=s   ROTATION_AXIS=s   DETECTOR_DISTANCE=s   X-RAY_WAVELENGTH=s   INCIDENT_BEAM_DIRECTION=s   FRACTION_OF_POLARIZATION=s   POLARIZATION_PLANE_NORMAL=s   FRIEDEL'S_LAW=s   NAME_TEMPLATE_OF_DATA_FRAMES=s   STARTING_ANGLE=s   STARTING_FRAME=s   INCLUDE_RESOLUTION_RANGE=s   UNIT_CELL_CONSTANTS=iú˙˙˙s   SPACE_GROUP_NUMBER=s   MAX_FAC_Rmeas=s   DATA_RANGE=(-   t   ret   untrusted_rectanglet   findt   stript   splitt   appendt   lent   AssertionErrort	   enumeratet   joint   detectort   floatR   t   intt   overloadR
   R   t   mapt   direction_of_detector_x_axist   direction_of_detector_y_axisR   t   sensor_thicknessR   t   nxt   nyt   pxt   pyt   orgxt   orgyt   rotation_axist   detector_distancet   xray_wavelengtht   incident_beam_directionR   R   t   boolt   friedels_lawt   name_template_of_data_framesR   R   R   R   R   R   R   (   R   R   R$   t
   parameterst   recordt   comment_chart   ct   tokt   tokenst   tt   it   i_tokt	   parametert   name(    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/xds/xds_inp.pyR   D   sĆ    	1!

 (	   t   __name__t
   __module__t   __doc__R   t   staticmethodR   t   TrueR   R   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/xds/xds_inp.pyR      s
   	%N(    (   t
   __future__R    R   (    (    (    s?   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/iotbx/xds/xds_inp.pyt   <module>	   s   