B
    §dë  ã               @   sŒ   d dl mZmZmZ d dlm  mZ d dlm	Z	 e 
d¡Zd dlT d dlmZ d dlZe e¡G dd„ dƒƒZe e¡G d	d„ dƒƒZdS )
é    )Úabsolute_importÚdivisionÚprint_functionN)ÚzipÚcctbx_xray_ext)Ú*)Úflexc               @   sR   e Zd Zdd„ Zddd„Zddd	„Zd
d„ Zddd„Zdd„ Zdd„ Z	dd„ Z
dS )Ú_c             C   s8   i }t | jƒ}x$|  ¡  ¡ D ]\}}|| ||< qW |S )N)ÚlistÚunique_countsÚtype_index_pairs_as_dictÚitems)ÚselfÚresultr   ÚtÚi© r   úm/mnt/filia/a/genomebrowser/www/genomebrowser/fleming/tools/molprobity/modules/cctbx_project/cctbx/xray/ext.pyÚtype_count_dict   s
    
z_.type_count_dictTc       	      C   s„   |   ¡ }g }t ¡ }xR|  ¡  ¡ D ]B\}}| ||f¡ || }|d krT| d¡ q"| | d¡¡ q"W tj||d}tj||dS )Nr   )Úreverse)Úpermutation)	Úunique_gaussians_as_listr   Údoubler   r   ÚappendÚat_stolÚsort_permutationÚselect)	r   Zheaviest_firstÚugsÚpairsZsf0sr   r   ÚgaussianÚpermr   r   r   Úsorted_type_index_pairs   s    z_.sorted_type_index_pairsNÚ c       
   	   C   s¤   |d krt j}|  ¡ }t| jƒ}g }xh|  ¡ D ]\\}}|| }|d krLd}	n t| ¡ ƒ}	| ¡ dkrl|	d7 }	| 	d|||	|| f ¡ d}q.W t
d |¡|d d S )NÚNoner   z+cz
%s%s:%s*%dr"   ú )Úfile)ÚsysÚstdoutr   r
   r   r!   ÚstrÚn_termsÚcr   ÚprintÚjoin)
r   ÚoutÚprefixÚunique_gaussiansr   Úpartsr   r   r   Zgnr   r   r   Úshow_summary"   s     
z_.show_summaryc             C   sJ   |   ¡ dkrFddlm} ||dƒ}| ¡ }|jdkrFdt|jƒ d S dS )	NÚneutronr   )Úneutron_news_1992_tableTg        z( WARNING! anomalous neutron scattering (z) is ignored!r"   )Z
last_tableZcctbx.eltbx.neutronr3   Zbound_coh_scatt_lengthÚimagr(   )r   Zstd_lblr3   Zscattering_infoÚbr   r   r   Úwarning_if_any3   s    

z_.warning_if_anyúNumber of scattering types:c             C   sÊ  |d krt j}|  ¡ }t| jƒ}|  ¡ }|d k	rFt|| t|ƒ|d t|ƒdkrft|d |d n`tdtdd„ |D ƒƒƒ}	d|	 }
tdtt	t|ƒƒƒƒ}d	| }|d
d|	d  d|d  f  }|rÐ|d7 }|rÜ|d7 }t||d xÆ|D ]¾\}}|d |
|  |||   d }|| }|rJ|d kr8|d7 }n|d| 
d¡ 7 }|rŽ|d krd|d7 }n*|dt	| ¡ ƒ 7 }| ¡ dkrŽ|d7 }td| ¡ |  |¡f |d qîW |rÆt|d |d d S )N)r%   r   z!  Empty scattering-type registry.é   c             S   s   g | ]\}}t |ƒ‘qS r   )Úlen)Ú.0r   r   r   r   r   ú
<listcomp>L   s    z_.show.<locals>.<listcomp>z%%-%ds é   z%%%ddz  Type%s %sNumberr$   z	    sf(0)z   Gaussiansz   z	     Nonez %8.2fz
      Nonez %7sz+cz%s%sz3  sf(0) = scattering factor at diffraction angle 0.)r&   r'   r   r
   r   r!   r+   r9   Úmaxr(   r   r)   r*   Úrstripr6   )r   ÚheaderZshow_sf0Zshow_gaussiansr-   r.   r/   r   ZtipsÚntZnt_fmtÚncZnc_fmtÚliner   r   r   r   r   r   Úshow=   sH     
    



 "z_.showc             C   s8   d}x.t |  ¡ | jƒD ]\}}|| d¡| 7 }qW |S )Nr   )r   r   r   r   )r   r   Úgr*   r   r   r   Ú0sum_of_scattering_factors_at_diffraction_angle_0i   s    z2_.sum_of_scattering_factors_at_diffraction_angle_0c             C   s4   i }t | jƒ}x |  ¡ D ]\}}|| ||< qW |S )N)r
   r   r!   )r   r   r   r   r   r   r   r   Úwilson_dicto   s
    
z_.wilson_dictc             C   s6   i }|   ¡ }x$|  ¡  ¡ D ]\}}|| ||< qW |S )N)r   r   r   )r   r   r   r   r   r   r   r   Úas_type_gaussian_dictv   s
    z_.as_type_gaussian_dict)T)Nr"   )r7   TTNr"   )Ú__name__Ú
__module__Ú__qualname__r   r!   r1   r6   rC   rE   rF   rG   r   r   r   r   r	   
   s   

    
'r	   c               @   s   e Zd Zdd„ ZdS )r	   c             C   s6   ddl m} |  ¡ }| ¡ s |S | |t | ¡ ¡¡S )Nr   )Úmaptbx)ÚcctbxrK   Úreal_mapÚ	is_paddedÚcopyr   ÚgridÚfocus)r   rK   r   r   r   r   Úreal_map_unpadded€   s
     z_.real_map_unpaddedN)rH   rI   rJ   rR   r   r   r   r   r	   }   s   )Ú
__future__r   r   r   Úboost_adaptbx.boost.pythonÚboostÚpythonÚbpÚ	six.movesr   Ú
import_extÚextr   Úcctbx.array_familyr   r&   Úinject_intoÚscattering_type_registryr	   Zsampled_model_densityr   r   r   r   Ú<module>   s   
s