ó
<™xTc           @   s‹  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
 m Z d  d	 l m Z d  d
 l m Z d  d l Z d  d l Z d  d l Z d „  Z d e f d „  ƒ  YZ e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e d „ Z e d „ Z  d d d d d d d „ Z" d d d „ Z# e$ d k r‡e# ƒ  n  d S(    iÿÿÿÿ(   t   division(   t   jvx(   t   jv_index(   t   guide_to_notation(   t	   web_links(   t   reference_table(   t   facet_analysis(   t   sgtbx(   t   matrix(   t   OptionParserNc         C   s   |  r
 d Sd S(   Ni    iÿ   (   i    iÿ   i    (   iÿ   i    i    (    (   t   inclusive_flag(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   select_color   s     t   orthogonalizerc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   | |  _  d  S(   N(   t	   unit_cell(   t   selfR   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   __init__   s    c         C   s)   |  j  j g  | D] } t | ƒ ^ q ƒ S(   N(   R   t   orthogonalizet   float(   R   t   vertext   x(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   __call__   s    (   t   __name__t
   __module__R   R   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyR      s   	c         C   sŒ  t  j d ƒ } t  j ƒ  } | j } | j ƒ  xw d D]o } xf d D]^ } xU d D]M } | rm | d k rm qO n  | | | f } | j | ƒ | j |  | ƒ ƒ qO WqB Wq5 W| j }	 xÔ t d t | j ƒ d ƒ D]¶ } x­ t | d t | j ƒ ƒ D]� } | j | j	 }
 | j | j	 } d } x5 t d ƒ D]' } |
 | | | k r*| d 7} q*q*W| d k rñ |	 j t  j
 | | f ƒ ƒ qñ qñ WqÎ W| S(   NR   i    i   i   (   i    i   (   i    i   (   i    i   (   R   t   geometryt   pointSett   pointst   hide_pointst   appendt   linest   xranget   lenR   t   line(   t   orthot   xy_plane_onlyt   gt
   points_intt   points_cartt   it   jt   kt   vR   t   v1t   v2t   n(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   unit_cell_geometry   s0    	
 	## 'c         C   s  t  j d ƒ } | j j ƒ  t  j d d ƒ | _ x‚ t d ƒ D]t } g  | D] } t | ƒ d ^ qK } | d k rŒ | j j |  | ƒ ƒ n  | | c d 7<| j j |  | ƒ ƒ q> WxY t d ƒ D]K } d d d g } d | | <| j j t  j	 d d | d	 f d
 | ƒ ƒ qÃ W| S(   Nt   basis_vectorst	   thicknessi   g333333Ã?i    g      Ð?iÿ   t   verticesi   t   color(
   R   R   R   R   t   lineSetR   R   R   R   R   (   R    t   min_fractionalR"   R%   R   R(   R0   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   basis_vector_geometry3   s    #
0c         C   s2   g  } x% | D] } | j  |  | d ƒ ƒ q W| S(   Ni    (   R   (   R    t   polygont   resultR   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   cartesian_polygonC   s    c         C   s´   t  |  d ƒ ƒ } t  |  d ƒ ƒ } xm | j ƒ  D]_ } |  | ƒ } xJ t d ƒ D]< } t | | | | ƒ | | <t | | | | ƒ | | <qP Wq1 Wt t j | ƒ t j | ƒ ƒ S(   Ni   iþÿÿÿi   (   i   i   i   (   iþÿÿÿiþÿÿÿiþÿÿÿ(   t   listt   keysR   t   mint   maxt   absR   t   col(   R    t   all_verticest   min_coort   max_coorR   t   vertex_cartR%   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   get_diagonal_extendI   s    #c         C   s\   d d d g } xF |  j  ƒ  D]8 } x/ t d ƒ D]! } t | | | | ƒ | | <q/ Wq W| S(   Ni    i   (   R8   R   R9   (   R=   R5   R   R%   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   get_min_fractionalS   s
    #c         C   si   t  j } t |  ƒ } g  } xG t | ƒ D]9 } | d | } | j | |  | ƒ | |  | ƒ ƒ q( W| S(   Ni   (   R   R<   R   R   R   (   R/   R<   R+   R5   R%   R&   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   get_edge_vectorsZ   s    	)c         C   s^  t  |  ƒ } t |  ƒ } | d j | d ƒ } g  } x"t | ƒ D]} | d | } | | } | | }	 t j | j |	 ƒ t j | j ƒ  |	 j ƒ  ƒ ƒ }
 d |
 k  oº t j	 k  n sÅ t
 ‚ | t j |
 d ƒ } | | t | ƒ } | j | ƒ } t | ƒ } | d k st
 ‚ | | | 9} t j |  | ƒ | | } | j | j ƒ qB W| S(   Ni    i   i   (   R   RC   t   crossR   t   matht   acost   dott   sqrtt   norm_sqt   pit   AssertionErrort   tanR;   R   R<   R   t   elems(   R/   t   shrink_lengthR+   t   edge_vectorst   normal_vectorR5   R%   R&   t   eit   ejt   phit   ft
   shift_parat
   shift_perpt   lt   vertex_inside(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   shrink_polygonc   s&    

6%c         C   sR   t  j |  ƒ } t  j | ƒ } | | | t | | ƒ } | | j | | j f S(   N(   R   R<   R;   RM   (   t   cart_at   cart_bRN   t   at   bt   d(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   shrink_edgex   s    c      	   C   s0  t  j d ƒ } | j j ƒ  t  j d d ƒ | _ xø | D]ð } xç t t | ƒ d ƒ D]Ï } g  d d g D] } | | | j ^ qh \ } }	 | r· | d d k sU |	 d d k r· qU n  | j j	 ƒ  }
 | j j
 t |  | ƒ |  |	 ƒ | ƒ ƒ | j j t  j |
 |
 d f d t | | j ƒ ƒƒ qU Wq8 W| S(   Nt   edgesR.   i   i   i    i   R0   (   R   R   R   R   R1   R   R   R   R   t   sizet   extendR_   R   R   R   t   edge_inclusive_flag(   R    t   all_edge_segmentsRN   R!   R"   t   edge_segmentst	   i_segmentt   _R)   R*   R%   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   edge_geometry~   s    0&(c         C   sw   t  j d ƒ } xa | j ƒ  D]S \ } } | rD | d d k rD q n  | j j t  j |  | ƒ d t | ƒ ƒƒ q W| S(   NR/   i   i    R0   (   R   R   t   itemsR   R   t   pointR   (   R    R=   R!   R"   R   R
   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   vertex_geometryŽ   s     t   asu_gallerys   http://%s/jv395/jarss   http://%s/cctbx/cctbx_web.cgis-   ?target_module=explore_symmetry&amp;sgsymbol=c   5         sT  | d  k r t j } n  |  d k  } t j | j ƒ j ƒ  } | sc | j ƒ  j ƒ  |  k sc t	 ‚ n  t
 j | ƒ }	 t
 j | |	 ƒ }
 t
 j |
 ƒ } | j d d ƒ } t | ƒ } t | | ƒ d } g  } | d  k rkxT|	 D]L} xC| D];\ ‰  } ‡  f d †  } | r| ƒ  rqê n  t | ˆ  ƒ } t | | ƒ } t j ƒ  } t j d d d d	 g t | ƒ ƒ} | j } | j ƒ  d
 } x: ˆ  D]2 } | d 7} | j | d ƒ | j | | ƒ q‰W| j } g  } x( ˆ  D]  } | j | j | d ƒ ƒ qÕW| j t j | t | ƒ ƒ ƒ | j | ƒ qê WqÝ W| j t | |
 | d | ƒƒ | j t | | d | ƒƒ nw t j d ƒ } xX | D]P } | r¦| j  d d k r¦q�n  | j j t j! | | j  ƒ d | j" ƒƒ q�W| j | ƒ | d  k rd } d } d } n d } d } d } | r$d }  n d }  |  t# |  ƒ | f }! t$ j% j& | |! d ƒ }" |! d }# t$ j% j& | |! d ƒ }$ d  }% d  }& | r�d }  d }' n d }  d }' t# |  ƒ d k rØ|  t# |  ƒ d | f }% n |  |' | f }% t# |  ƒ |' k  r|  t# |  ƒ d | f }& n |  d | f }& |  t# |  ƒ | f }( | d  k s[t' | ƒ d k rät( |" d ƒ }) t j) |) ƒ t* | d | ƒj |) ƒ t+ | t, | ƒ ƒ j |) ƒ x | D] } | j |) ƒ q³Wt j- |) ƒ |) j. ƒ  n  g  }* |* j }+ |+ d ƒ |+ d ƒ |+ d ƒ |+ d  ƒ t
 j/ | ƒ }, |+ d! ƒ |+ d" ƒ |+ d# ƒ g  }- x7 |, D]/ } | rw| d d k rwqUn  |- j | ƒ qUW|- j0 ƒ  |+ d$ t' |- ƒ ƒ | rµd% }. n d
 }. x) |- D]! } |+ d& t1 | ƒ d |. !ƒ qÂW|+ d' ƒ |+ d( ƒ |+ d# ƒ g  }- x< | j2 D]1 }/ | r9|/ j3 ƒ  dD k r9qn  |- j |/ ƒ qW|+ d+ t' |- ƒ ƒ x" |- D] }/ |+ d& |/ j3 ƒ  ƒ qeW|+ d' ƒ |+ d, ƒ |+ d( ƒ |+ d# ƒ |+ d- ƒ x" |- D] }/ |+ d& t1 |/ ƒ ƒ q¼W|+ d' ƒ |+ d. ƒ |+ d( ƒ |+ d/ ƒ |+ d0 ƒ | s[d1 t1 | ƒ }0 d2 | | t4 j5 t1 | ƒ ƒ t1 | ƒ |  f }1 d  }2 n‰ d
 d3 l6 m7 }3 |3 j8 |  d d j9 d4 d5 ƒ }4 d1 |4 }0 d6 |4 |  f }1 d7 | | t4 j5 t1 | ƒ ƒ t1 | ƒ | j ƒ  j ƒ  f }2 t( |$ d ƒ }) t j: |# d8 |0 d9 |1 d: |2 d; d< d= |% d> |& d? | d@ |( dA |* dB | | dC |) ƒ|) j. ƒ  d  S(E   Ni    t   volumeid   g{®Gáz”?c             s-   x& ˆ  D] }  |  d d d k r t  Sq Wt S(   Ni    i   (   t   Truet   False(   R   (   R4   (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   exclude¯   s    t   facett   backfacet   hidet   showiÿÿÿÿi   R!   t   gridi   R0   t    t   _grids	   Grid views   Polygon views
   asu_%02d%ss
   asu_%03d%ss   .jvxs   .htmls   asu_%02d%s.htmli   s   asu_%03d%s.htmliæ   t   ws?   Surface area: green = inside the asymmetric unit, red = outsides   <br>s+   Basis vectors: a = red, b = green, c = blues   <p>s   <table border=2 cellpadding=8>s   <tr valign=top>s   <td>s   <pre>Number of vertices: %diüÿÿÿs     s   </pre>s   </td>s   z>=0s   z<1s   <pre>Number of faces: %ds8   <a href="guide_to_notation.html">[Guide to notation]</a>s   <pre>Geometric notation:sb   <a href="http://scripts.iucr.org/cgi-bin/paper?pz5088" target="external">[Acta Cryst. article]</a>s   </tr>s   </table>s   ASU s)   Space group: <a href="%s">%s</a> (No. %d)(   t   plane_groupsRg   t    s   Plane group: %s (No. %d)s7   Corresponding space group: <a href="%s">%s</a> (No. %d)t   titlet   headert
   sub_headert
   index_htmls
   index.htmlt	   prev_htmlt	   next_htmlt   alternative_labelt   alternative_htmlt   legendt   jars_urlRT   (   s   z>=0s   z<1(;   t   NoneR   t   default_http_server_nameR   t   space_groupt   hall_symbolt   infot   typet   numberRK   R   t   asu_polygonst   get_all_edge_segmentst   get_all_verticest   any_compatible_unit_cellR   RA   R6   RY   R   R   R   t   intR   R   R   t   facest   indext   faceR   Rh   Rk   t   siteRj   R0   R;   t   ost   patht   joinR   t   opent   headR,   R3   RB   t   tailt   closet   shape_verticest   sortt   strt   cutst   as_xyzt   urllibt
   quote_plust   cctbx.sgtbxRy   t   hermann_mauguin_hall_tablet   replacet   html_loader(5   t   group_type_numbert   asut   colored_grid_pointst   http_server_namet   html_subdirR„   t   explore_symmetry_urlR!   t   space_group_infot   list_of_polygonsRd   R=   R   R    RN   t
   geometriest   polygonsR
   Rp   t   vertices_cartt   vertices_inside_cartR#   R"   R$   R%   R   R‘   t   point_indicest   fract
   grid_labelt   alternative_html_infixR�   t   fmtt   base_file_namet   jvx_file_namet   jvx_in_htmlt   html_file_nameR   R€   t   last_group_type_numberR‚   RT   Rƒ   RW   Rœ   t	   remainingR&   t   cutR{   R|   R}   Ry   t	   pg_symbol(    (   R4   sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt
   asu_as_jvx—   sD   !%	

			 /	 	
		






 
	


 









	
	
	
c         C   s/  t  d d ƒ } | j d d d d d d d	 d
 d d ƒ| j d d d d ƒ| j ƒ  \ } } | j d  k	 rz | j }  n  t j j | ƒ sœ t j | ƒ n  t	 j
 t d | d ƒ ƒ t j
 t d | d ƒ ƒ t | ƒ d k r| j r÷ d g } qd g } n  x%| D]} g  | j d ƒ D] } t | ƒ ^ q } t | ƒ d" k sPt ‚ t | ƒ d k ro| d 9} n  xµ t | d | d d ƒ D]˜ } | j rÏd G| GHd d l m }	 |	 j | ƒ }
 | d 9} n d G| GHt j | ƒ }
 x9 d  g  g D]+ } t d | d |
 d | d  |  d! | ƒ qôWq‹Wq
Wd  S(#   Nt   usages.   usage: python jv_asu.py [options] [numbers...]s   -ss   --servert   actiont   storeRŠ   t   stringt   helps   network name of http servert   metavart   NAMEs   -ps   --plane_groupt
   store_trues   %s/index.htmlRx   s   %s/guide_to_notation.htmli    s   1-17s   1-230t   -i   i   s   Plane group number:iÿÿÿÿ(   t   plane_group_reference_tables   Space group number:R§   R¨   R©   Rª   R«   (   i   i   (   R	   t
   add_optiont
   parse_argst   serverR…   R•   R–   t   isdirt   makedirsR   t
   write_htmlR˜   R   R   t   plane_groupt   splitR�   RK   R   t   cctbx.sgtbx.direct_space_asuRÊ   t   get_asuR   RÀ   (   Rª   R«   t   parsert   optionst   argst   argR+   t   numbersR§   RÊ   R¨   R©   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   runI  sP    	( "			t   __main__(%   t
   __future__R    t   cctbx.web.asu_galleryR   R   R   R   RÓ   R   R   t   cctbxR   t   scitbxR   t   libtbx.option_parserR	   R¡   RE   R•   R   t   objectR   Ro   R,   R3   R6   RA   RB   RC   RY   R_   Rh   Rk   R…   RÀ   RÚ   R   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/cctbx/web/asu_gallery/jv_asu.pyt   <module>   sB   				
						¬+