
     i"+              "          d dl Z d dlZd dlmZmZ d dlmZmZ ddl	m
Z
  e j        d          d             Z e j        d          d	             Zd
 Zd Zd Z e j        d          d             Ze j                            ddddddddddddej                            dg d          fdej                            dg d          fd d!d"d#d$d%d&d'd(d)ej                            d*g d          fd+d, ej        g d-ej                  fd.d/d0 ej        g d1d2          fg          d3             Zd4 Zd5 Zd6 Zd7 Zd8 Zd9 Z G d: d;          Z G d< d=          Z G d> d?          Z dS )@    N)assert_allcloseassert_equal)Gridmrc   )	datafilesmodulescopec                  8    t          t          j        d          S )NMRCfile_format)r   r   CCP4     a/srv/www/vhosts/g4struct/public_html/venv/lib/python3.11/site-packages/gridData/tests/test_mrc.pyg1r      s    	E2222r   c                      t          j                    } |                     t          j                   |                                 \  }}t          ||          S )N)gridedges)r   r   readr   r   histogramddr   )datar   r   s      r   g2r      sI    799DIIin""$$KD%T''''r   c                 $    t          |            d S N
_test_ccp4)r   s    r   test_ccp4_Gridr           rNNNNNr   c                 $    t          |            d S r   r   )r   s    r   test_ccp4_mrcr#      r!   r   c                    d}t          | j        j        t          j        d|dz                        t          | j        j        |           t          | j        g d           t          | j        t          j	        d                     d S )N   r   )g      ?g      ?gUUUUUU?   )
r   r   flatnparangesizer   deltaoriginzeros)gPOINTSs     r   r   r      sx    Fbi6!844555f%%%AG---...28A;;'''''r   c                  >    t          j        t          j                  S r   )r   r   r   	CCP4_1JZVr   r   r   ccp4datar2   %   s    79&'''r   z
name,value)nx`   )nyL   )nzF   )mode   )nxstart)nystarti)nzstartf   )mxT   )myrA   )mz   cella)fffffF@rF   giV@))x<f4)yrH   )zrH   dtypecellb)     V@rN   rN   ))alpharH   )betarH   )gammarH   )mapcr:   )maprr   )mapsr&   )dming   m)dmaxg   "@)dmeang   NC)ispg\   )nsymbti  )nversionr   r,           r]   r]   )maps   MAP machst)D   A   r   r   )rmsg=d#?)nlablr   label)
sP    Map from fft                                                                   P                                                                                   re   re   re   re   re   re   re   re   z|S80c                     t          |          t          u rt          | j        |         |d           d S t	          | j        |         |           d S )Ngư>rtol)typefloatr   headerr   )r2   namevalues      r   test_ccp4_read_headerrn   )   sU    Z E{{e-u5AAAAAAX_T*E22222r   c                 0    t          | j        d           d S )N)r6   r4   r8   )r   shaper2   s    r   test_axes_orientationrr   [   s     .....r   c           	      ~    t          | j        t          j        g dg dg dgt          j                             d S )N),r?r]   r]   )r]   rt   r]   )r]   r]   gGz?rK   )r   r+   r(   arrayfloat32rq   s    r   
test_deltarw   a   s_    HNBH	*	*	*	*	*	*	*	*	*	,35:%? %? %? @ @ @ @ @r   c                 4    t          | j        g d           d S )N)gz>)g}rg:pL@r   r,   rq   s    r   test_originrz   g   s#    
 HO%L%L%LMMMMMr   c                      t          j        t          d          5  t          t          j        d           d d d            d S # 1 swxY w Y   d S )Nz8Only orthorhombic unitcells are currently supported, notmatchr   r   )pytestraises
ValueErrorr   r   MRC_EMD3001r   r   r   test_triclinic_ValueErrorr   n   s    	z(
) 
) 
) 7 7 	Y"66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   AA	A	c                      t          j        t          d          5  t          t          j                   d d d            d S # 1 swxY w Y   d S )Nzis not a volumetric densityr|   )r~   r   r   r   r   ISPG_0r   r   r   test_mrcfile_volume_checkr   t   s    	z)F	G	G	G  Y                 s   AA
Ac                      t          t          j        d          } t          t	          j        | j                  d           d S )NT)assume_volumetricgfffff@)r   r   r   r   r(   sumr   )r   s    r   test_mrcfile_volume_forcer   x   s9    	 D999DBF49%%w/////r   c                   `    e Zd Z ej        d          d             Zd Zd Zd Zd Z	d Z
d	S )
TestGridMRCclassr
   c                 4    t          t          j                  S r   )r   r   r1   )selfs    r   r   zTestGridMRC.grid~   s    I'(((r   c                 D    t          |j        j        |j                   d S r   )r   r   rp   r   r   r2   s      r   
test_shapezTestGridMRC.test_shape   s    TY_hn55555r   c                 *    |j         |j        k    sJ d S r   )_mrc_headerrk   r   s      r   test_mrc_headerzTestGridMRC.test_mrc_header   s    8?222222r   c                 ^    t          |j        t          j        |j                             d S r   )r   r+   r(   diagr   s      r   rw   zTestGridMRC.test_delta   s&    
BGHN$;$;<<<<<r   c                 :    t          |j        |j                   d S r   ry   r   s      r   rz   zTestGridMRC.test_origin   s    X_55555r   c                 :    t          |j        |j                   d S r   )r   r   ru   r   s      r   	test_datazTestGridMRC.test_data   s    	8>22222r   N)__name__
__module____qualname__r~   fixturer   r   r   rw   rz   r   r   r   r   r   r   }   s        V^'""") ) #")6 6 63 3 3= = =6 6 63 3 3 3 3r   r   c                   *    e Zd ZdZd Zd Zd Zd ZdS )TestMRCWritez!Tests for MRC write functionalityc                 "   t          |dz            }|                    |           t          j        |          }t	          |j        |j                   t	          |j        |j        dd           t	          |j        |j        d           dS )z,Test writing and reading back preserves datazroundtrip.mrch㈵>gMbP?rh   atolrg   N)strwriter   r   r   ru   r,   r+   r   r2   tmpdiroutfilemrc_reads        r   test_mrc_write_roundtripz%TestMRCWrite.test_mrc_write_roundtrip   s    f.// 	w 77## 	777t$OOOOTBBBBBBr   c                    t          |dz            }|                    |           t          j        |          }|j        j        |j        j        k    sJ |j        j        |j        j        k    sJ |j        j        |j        j        k    sJ |j        j        |j        j        k    sJ |j        j	        |j        j	        k    sJ |j        j
        |j        j
        k    sJ dS )z%Test that header fields are preservedz
header.mrcN)r   r   r   r   rk   rR   rS   rT   r;   r=   r>   r   s        r   test_mrc_write_header_preservedz,TestMRCWrite.test_mrc_write_header_preserved   s    f|+,,w77## #x';;;;;#x';;;;;#x';;;;; &(/*AAAAA&(/*AAAAA&(/*AAAAAAAr   c                    t          |dz            }t          j                    }t          j        d                              ddd                              t          j                  |_        t          j	        g d          |_
        t          j        g d          |_        d|_        |                    |           t          j        |          }t          |j        |j        d	           t          |j        |j        d
	           t          t          j	        |j
                  t          j	        |j
                  d	           dS )z'Test creating new MRC file from scratchznew.mrc   r:   r&      )      ?       @g      @)g      @      $@g      .@r   rg   -C6?N)r   r   r   r(   r)   reshapeastyperv   ru   r   r+   r,   rankr   r   )r   r   r   mrc_newr   s        r   test_mrc_write_new_filez$TestMRCWrite.test_mrc_write_new_file   s   fy()) '))	"--aA66==bjII00"3"3"344 	g77## 	DAAAAdCCCC//1G1GdSSSSSSr   c                    t          |dz            }t          j                    }t          j        dt          j                  |_        t          j        g d          |_        t          j        g d          |_	        d|_
        t          j        t          d          5  |                    |           d	d	d	           d	S # 1 swxY w Y   d	S )
z+Test that zero voxel size raises ValueErrorzinvalid.mrc)r:   r:   r:   rK   )r]   r   r   r\   r&   zVoxel size must be positiver|   N)r   r   r   r(   onesrv   ru   r   r+   r,   r   r~   r   r   r   )r   r   r   mrc_objs       r    test_mrc_write_zero_voxel_raisesz-TestMRCWrite.test_mrc_write_zero_voxel_raises   s    f},--'))	<<<00///22]:-JKKK 	# 	#MM'"""	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s   #CC
C
N)r   r   r   __doc__r   r   r   r   r   r   r   r   r      s_        ++C C CB B B"T T T(# # # # #r   r   c                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )TestGridMRCWritez'Tests for Grid.export() with MRC formatc                    t          |dz            }t          j        d                              ddd                              t          j                  }t          |g dg d          }|                    |d	
           t          |          }t          |j	        |j	        d           t          |j
        |j
        d           t          |j        |j        d           dS )z)Test Grid.export() with file_format='mrc'zgrid.mrc<   r&   r      )r   r   r   r   r   r   )r,   r+   r   r   r   rg   r   N)r   r(   r)   r   r   rv   r   exportr   r   r,   r+   )r   r   r   r   r.   g_reads         r   test_grid_export_mrcz%TestGridMRCWrite.test_grid_export_mrc   s    fz)** y}}$$Q1--44RZ@@iii??? 	
e,,,g 	QV$7777qxd;;;;agD999999r   c                    t          |dz            }t          t          j                  }|                    |d           t          |          }t          |j        |j        d           t          |j        |j        d           t          |j        |j        d           t          |j        j
        |j        j
                   dS )u4   Test MRC → Grid → export → Grid preserves datazroundtrip_grid.mrcr   r   r   rg   r   N)r   r   r   r1   r   r   r   r,   r+   r   rp   )r   r   r   g_origr   s        r   test_grid_export_mrc_roundtripz/TestGridMRCWrite.test_grid_export_mrc_roundtrip   s    f3344 i)** 	g5111g 	V[t<<<<v}4@@@@fl>>>>V[&(9:::::r   c                 \   t          |dz            }t          t          j                  }|j        j        }|j        j        }|j        j        }|                    |d           t          |          }|j        j        |k    sJ |j        j        |k    sJ |j        j        |k    sJ dS )z2Test that Grid preserves MRC header through exportzheader_grid.mrcr   r   N)	r   r   r   r1   r   rR   rS   rT   r   )r   r   r   r   	orig_mapc	orig_mapr	orig_mapsr   s           r   %test_grid_export_mrc_preserves_headerz6TestGridMRCWrite.test_grid_export_mrc_preserves_header   s    f0011i)**&+	&+	&+	 	g5111g!&)3333!&)3333!&)333333r   c                 @   t          j        dt           j                                      d          }t	          |dz            }t          j                    }||_        t          j        g d          |_	        t          j        g d          |_
        d|_        |                    |           t          j        |          }t          |j        |           t          t          j        |j	                  g d           t          |j
        g ddd	
           dS )z6Test writing 4x4x4 MRC file with custom header values.@   rK   )r   r   r   ztest_with_header.mrc)g      ?r   g      @)r   g      4@g      >@r&   r   r   r   N)r(   r)   rv   r   r   r   r   ru   r   r+   r,   r   r   r   r   r   r   r   mm_reads         r    test_mrc_write_4x4x4_with_headerz1TestGridMRCWrite.test_mrc_write_4x4x4_with_header  s     y2:...66yAAf5566 GII'///**8...//	 !!d+++--???'9'9'93OOOOOOr   c                    t           j                            d           t           j                            ddd                              t           j                  }t          |dz            }t          j                    }||_	        t          j
        g d          |_        t          j	        g d          |_        d|_        |                    |           t          j        |          }t          |j	        |           t          t          j
        |j                  g d           t          |j        g ddd	           d
S )z0Test writing 4x4x4 MRC file with default header.*   r   ztest_without_header.mrcr   r\   r&   r   r   r   N)r(   randomseedrandr   rv   r   r   r   ru   r   r+   r,   r   r   r   r   s         r   #test_mrc_write_4x4x4_without_headerz4TestGridMRCWrite.test_mrc_write_4x4x4_without_header#  s    		ry~~aA&&--bj99f8899 GII'///**8OOO,,	 !!d+++--???TLLLLLLr   N)	r   r   r   r   r   r   r   r   r   r   r   r   r   r      sm        11: : :"; ; ;"4 4 4"P P P,M M M M Mr   r   )!r~   numpyr(   numpy.testingr   r   gridDatar   r    r   r   r   r   r    r#   r   r2   markparametrizerecru   uint8rn   rr   rw   rz   r   r   r   r   r   r   r   r   r   <module>r      ss       ) ) ) ) ) ) ) )              h3 3  3 h( (  (    ( ( ( h( (  ( bfll.HHH  J J Kbfll?!V!V!V  X X Y!%rv||L"L"L"L  N N Oxrx(((999:hbh 
] 
] 
] !" " " #?+( + +X3 3Y+ +X3/ / /@ @ @N N N7 7 7  0 0 0
3 3 3 3 3 3 3 3*B# B# B# B# B# B# B# B#J`M `M `M `M `M `M `M `M `M `Mr   