ó
ù™xTc           @   s„   d  d l  m Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d d „ Z
 d „  Z d „  Z d	 e f d
 „  ƒ  YZ d S(   iÿÿÿÿ(   t   divisionN(   t   matrix(   t   align_reference_frame(   t   detector_helpers_typesc         C   sÄ  d d l  m } d d l m } d d l } | j ƒ  } | j |  ƒ | j d j d d ƒ } | j	 } | j
 } | d k	 r… t }	 n t }	 | j | d | d	 t ƒd }
 | rÀ| j | ƒ } | j ƒ  } | j ƒ  d
 k rdd d l m } d d l m } | j d ƒ } | j ƒ  j ƒ  } | j | ƒ d } | j } x' | D] } | j | | | ƒ ƒ qAWn  |
 j | j ƒ  ƒ |
 j | ƒ |
 j | j ƒ  ƒ | j  ƒ  } | j! | ƒ |
 j" | ƒ n  |
 S(   sß   Get an image set from the xds input filename plus an extra filename

  Params:
      input_filename The XDS.INP file
      extra_filename A (G)XPARM.XDS, INTGRATE.HKL or XDS_ASCII.HKL file

  Returns:
      The imageset

  iÿÿÿÿ(   t   xds_inp(   t   ImageSetFactoryNi    t   ?t   #t   image_ranget   check_formatt   PILATUS(   t   ParallaxCorrectedPxMmStrategy(   t   attenuation_coefficientt   Sig      $@(#   t	   iotbx.xdsR   t   dxtbx.imagesetR   t   dxtbxt   readert	   read_filet   name_template_of_data_framest   replacet
   data_ranget   detectort   Nonet   Falset   Truet   from_templatet   loadt   get_detectort   stript   dxtbx.modelR   t   cctbx.eltbxR   t	   get_tablet   get_beamt   get_wavelengtht   mu_at_angstromt   sensor_thicknesst   set_px_mm_strategyt   set_beamt   set_detectort   set_goniometert   get_goniometert   get_scant   set_image_ranget   set_scan(   t   input_filenamet   extra_filenameR   R   R   t   handlet   templateR   t   detector_nameR	   t   imagesett   modelsR   R   R   t   tablet
   wavelengtht   mut   t0t   panelt   scan(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyt   to_imageset   s@    				c         C   sÊ   d d l  m } d d l m } d d l m } m } | |  ƒ } | j d ƒ } | j d ƒ } | j d ƒ } | j d ƒ }	 | | |	 ƒ j ƒ  ƒ } | j d	 ƒ }
 | d | d | d | d
 | d	 |
 ƒ S(   s‹    Get the crystal model from the xparm file

  Params:
      filename The xparm/or integrate filename

  Return:
      The crystal model

  iÿÿÿÿ(   t   coordinate_frame_converter(   t   crystal_model(   t   space_groupt   space_group_symbolst   real_space_at   real_space_bt   real_space_ct   space_group_numbert	   mosaicityR=   (	   t&   rstbx.cftbx.coordinate_frame_converterR;   t   dxtbx.model.crystalR<   t   cctbx.sgtbxR=   R>   t   gett   hall(   t   filenameR;   R<   R=   R>   t   cfcR?   R@   RA   t   sgRC   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyt
   to_crystalM   s     
c         C   s�   d |  k r d Sd |  k r  d Sd |  k r0 d Sd |  k r@ d Sd	 |  k rP d
 Sd |  k r` d Sd |  k rp d St  d |  ‚ d S(   sO   Translate from a xia2 name from the detector library to an XDS detector
  name.t   pilatusR
   t   rayonixt   CCDCHESSt   adsct   ADSCt   saturnt   SATURNt   raxist   RAXISs   mar-345t   MAR345t   mart   MARs   detector %s unknownN(   t   RuntimeError(   t
   dxtbx_name(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyt   xds_detector_namen   s    t   to_xdsc           B   sk   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d
 d
 d
 d
 d
 d d „ Z
 d
 d	 „ Z RS(   s>   A class to export contents of a Sweep as XDS.INP or XPARM.XDS.c         C   sÕ  | |  _  t |  j ƒ  ƒ d k s' t ‚ t t |  j ƒ  d j ƒ  ƒ |  _ |  j \ |  _ |  _	 t
 |  j ƒ  d j ƒ  d |  j ƒ  d j ƒ  d ƒ } | |  _ | t j |  j ƒ  d j ƒ  ƒ j |  _ | t j |  j ƒ  d j ƒ  ƒ j |  _ | t j |  j ƒ  d j ƒ  ƒ } | t j |  j ƒ  d j ƒ  ƒ } | j | ƒ } | j |  _ | t j |  j ƒ  d j ƒ  ƒ } | | j | ƒ | } | j | ƒ } | j | ƒ }	 |  j ƒ  d j ƒ  |  _ |  j \ }
 } | j | ƒ |  _ | |
 d |	 |
 d f |  _ |  j ƒ  j ƒ  |  _ | t j |  j ƒ  j ƒ  ƒ |  _ |  j j  ƒ  |  j |  _ |  j j |  _ |  j! ƒ  j" ƒ  d |  _# |  j! ƒ  j$ ƒ  d |  _% |  j! ƒ  j$ ƒ  d |  _& | t j |  j' ƒ  j( ƒ  ƒ j |  _) d  S(   Ni   i    g      à?(   i   i    i    (   i    i   i    (*   t   _sweept   lenR   t   AssertionErrort   mapt   intt   get_image_sizet   detector_sizet   fastt   slowR   t   get_fast_axist   get_slow_axist%   imagecif_to_xds_transformation_matrixR   t   colt   elemst   detector_x_axist   detector_y_axist   crosst   detector_normalt
   get_origint   dott   get_pixel_sizet
   pixel_sizet   detector_distancet   detector_originR!   R"   R5   t   get_directiont   beam_vectort	   normalizeR*   t   get_image_ranget   starting_framet   get_oscillationt   starting_anglet   oscillation_rangeR)   t   get_rotation_axist   rotation_axis(   t   selft   sweept   Rt   Ft   St   Nt   origint   centret   xt   yt   ft   s(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyt   __init__ˆ   s>    	"	))###"%c         C   s   |  j  j ƒ  S(   N(   R]   R   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyR   »   s    c         C   s   |  j  j ƒ  S(   N(   R]   R)   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyR)   ¾   s    c         C   s   |  j  j ƒ  S(   N(   R]   R!   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyR!   Á   s    c         C   s   |  j  j ƒ  S(   N(   R]   R*   (   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyR*   Ä   s    c         C   s   |  j  j ƒ  S(   N(   R]   t   get_template(   R   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyRŒ   Ç   s    s3   XYCORR INIT COLSPOT IDXREF DEFPIX INTEGRATE CORRECTc      	   C   s‹  | d  k r t j } n  | | | g j d  ƒ d  k s< t ‚ |  j ƒ  d j ƒ  } |  j \ } }	 |  j \ }
 } t	 d |
 ƒ } t	 d | ƒ } t
 t j | | |	 | | ƒ ƒ } |  j ƒ  d j ƒ  } | d | | d d | d f IJ| d k r| d IJn  | d |  j IJ| d	 |  j IJ| d
 | |	 |
 | f IJ| d |  j IJ| d |  j IJ| d |  j IJ| d |  j IJ| d |  j IJ| d |  j IJ| d |  j IJt |  j ƒ  d ƒ r| d |  j ƒ  j ƒ  IJ| d |  j ƒ  j ƒ  IJn  | d |  j ƒ  j d d ƒ IJ| d IJxT |  j ƒ  d j ƒ  D]< \ } } } } | d | d | d | d | d f IJqCW|  j ƒ  j ƒ  } | d d k r¸d | d f } n  | d | IJ| d | IJ| d  k	 rñ| d | IJn  | | | g j d  ƒ d k r‡|  j  } | t! j" | ƒ } | t! j" | ƒ } | t! j" | ƒ } | d | j# IJ| d | j# IJ| d | j# IJn  d  S(!   Ni    i   iè  s4   DETECTOR=%s MINIMUM_VALID_PIXEL_VALUE=%d OVERLOAD=%di   R
   s   SENSOR_THICKNESS= 0.32s,   DIRECTION_OF_DETECTOR_X-AXIS= %.3f %.3f %.3fs,   DIRECTION_OF_DETECTOR_Y-AXIS= %.3f %.3f %.3fs   NX=%d NY=%d QX=%.4f QY=%.4fs   DETECTOR_DISTANCE= %.3fs   ORGX= %.1f ORGY= %.1fs   ROTATION_AXIS= %.3f %.3f %.3fs   STARTING_ANGLE= %.3fs   OSCILLATION_RANGE= %.3fs   X-RAY_WAVELENGTH= %.5fs'   INCIDENT_BEAM_DIRECTION= %.3f %.3f %.3ft   get_polarization_fractions   FRACTION_OF_POLARIZATION= %.3fs)   POLARIZATION_PLANE_NORMAL= %.3f %.3f %.3fs    NAME_TEMPLATE_OF_DATA_FRAMES= %sR   R   s   TRUSTED_REGION= 0.0 1.41s    UNTRUSTED_RECTANGLE= %d %d %d %ds   DATA_RANGE= %d %ds   JOB=%ss   SPACE_GROUP_NUMBER= %is    UNIT_CELL_A-AXIS= %.6f %.6f %.6fs    UNIT_CELL_B-AXIS= %.6f %.6f %.6fs    UNIT_CELL_C-AXIS= %.6f %.6f %.6f(   i    i   ($   R   t   syst   stdoutt   countR_   R   t   get_typeRc   Rr   Ra   R[   R   RG   t   get_trusted_rangeRk   Rl   Rs   Rt   R~   R{   R|   R5   Rv   t   hasattrR!   R�   t   get_polarization_normalRŒ   R   t   get_maskR*   Rx   Rh   R   Ri   Rj   (   R   t   outRB   R?   R@   RA   t   job_cardt   sensorRd   Re   R‰   RŠ   t   dft   dsR   t   trustedt   f0t   s0t   f1t   s1t	   start_endR�   t   unit_cell_a_axist   unit_cell_b_axist   unit_cell_c_axis(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyt   XDS_INPÊ   st    $







)'	c         C   sE  d d l  m } |  j } | t j | ƒ } | t j | ƒ }	 | t j | ƒ }
 t j | j |	 j |
 j ƒ } | | j ƒ  j ƒ  } | j	 d | ƒ } d d l
 m } | j |  j |  j |  j |  j |  j |  j | | j ƒ  | j |	 j |
 j d  |  j |  j |  j |  j |  j |  j |  j d d  d d  ƒ} | j d | ƒ d  S(   Niÿÿÿÿ(   t   uctbxt   metrical_matrix(   t   xparmt   segmentst   orientationR–   (   t   cctbxR¥   Rh   R   Ri   t   sqrRj   t	   transposet   as_sym_mat3t	   unit_cellR   R§   t   writerRy   R{   R|   R~   R5   Rv   t
   parametersR   Rc   Rr   Rt   Rs   Rk   Rl   Rn   t   show(   R   R?   R@   RA   R=   R–   R¥   R�   R¡   R¢   R£   t   A_invR¦   R®   R§   R¯   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyt	   xparm_xds  sD    				N(   t   __name__t
   __module__t   __doc__R‹   R   R)   R!   R*   RŒ   R   R¤   R³   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyR\   …   s   	3						M(   t
   __future__R    RŽ   t   scitbxR   t$   rstbx.cftbx.coordinate_frame_helpersR   t"   dxtbx.model.detector_helpers_typesR   R   R:   RL   R[   t   objectR\   (    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/serialize/xds.pyt   <module>   s   ;	!	