B
    d3                 @   s   d dl mZmZmZ d dlmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dlmZ d dlm  mZ ejZejZejZejZG dd	 d	ejjZeeG d
d dZeeG dd dZdddZdS )    )absolute_importdivisionprint_function)crystal)sgtbx)uctbxN)flex)minimum_covering_spherec               @   s2   e Zd Zdd Zd
ddZdddZddd	ZdS )direct_space_asuc             C   s"   t jjj| |j|jd || _d S )N)hall_symbolcuts)r   r
   __init__r   r   	unit_cell)selfasur    r   }/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/cctbx/crystal/direct_space_asu.pyr      s    
zdirect_space_asu.__init__Nc             C   sR   |d krd}t  }| jj}x(|  D ]}||dd |D  q&W t||dS )NgMbP?c             S   s   g | ]}t |qS r   )float).0er   r   r   
<listcomp>   s    z<direct_space_asu.minimum_covering_sphere.<locals>.<listcomp>)pointsepsilon)r   vec3_doubler   orthogonalizeshape_verticesappendr	   )r   r   r   orthvertexr   r   r   r	      s     z(direct_space_asu.minimum_covering_spherec             C   s(   |d krd}t | jdd | jD |dS )Ngư>c             S   s   g | ]}|  qS r   )Zas_float_cut_plane)r   Zcutr   r   r   r   #   s    z1direct_space_asu.as_float_asu.<locals>.<listcomp>)r   r   is_inside_epsilon)	float_asur   r   )r   r   r   r   r   as_float_asu   s    zdirect_space_asu.as_float_asuc             C   s   | j |dj||dS )N)r   )	thicknessrelative_thickness)r!   
add_buffer)r   r"   r#   r   r   r   r   r$   &   s    zdirect_space_asu.add_buffer)N)N)NNN)__name__
__module____qualname__r   r	   r!   r$   r   r   r   r   r
      s
   

 r
   c               @   s   e Zd ZdddZdS )_Nc             C   sH   ||g d dkst|d kr"d}|d kr>|   d | }| |S )Nr   gư>gUUUUUU?)countAssertionErrorr   volume_add_buffer)r   r"   r#   r   r   r   r$   /   s    z_.add_buffer)NN)r%   r&   r'   r$   r   r   r   r   r(   ,   s   r(   c               @   s   e Zd Zdd ZdS )r(   c             C   s   |  | | |S )N)get_rt_mx_iinversemultiplyget_rt_mx_j)r   pairr   r   r   get_rt_mx_ji:   s    z_.get_rt_mx_jiN)r%   r&   r'   r2   r   r   r   r   r(   7   s         ?c       	   	   C   s   |   }|  }tj||||d}tj|||d}| |}| |}dd dddg|d  fdddg|d fdddg|d  fdddg|d fdddg|d  fdddg|d fgD }t|	 t
| |d	j|d
dd}|j| d |S )N)sites_cart_minsites_cart_maxdefault_buffer_layermin_unit_cell_length)r4   r5   r6   c             S   s   g | ]\}}t ||d qS ))nc)float_cut_plane)r   r8   r9   r   r   r   r   N   s    z5non_crystallographic_asu_mappings.<locals>.<listcomp>   r      )r   r   )r"   )space_groupr   buffer_thickness)original_sites)minmaxr   non_crystallographic_symmetryr   !non_crystallographic_buffer_layerr   fractionalizeasu_mappingsr>   r    r$   process_sites_cart)	
sites_cartr6   r7   Z	sites_minZ	sites_maxcrystal_symmetrybuffer_layerZasu_cutsresultr   r   r   !non_crystallographic_asu_mappings=   s8    rL   )r3   r   )
__future__r   r   r   cctbxr   r   r   cctbx.sgtbx.direct_space_asucctbx.array_familyr   scitbx.mathr	   boost_adaptbx.boost.pythonboostpythonbp direct_space_asu_float_cut_planer:   direct_space_asu_float_asur    direct_space_asu_asu_mappingZasu_mappingdirect_space_asu_asu_mappingsrF   r
   inject_intor(   rL   r   r   r   r   <module>   s     