ó
õ™xTc           @   sÁ   d  d l  m Z d  d l m Z m Z d  d l m Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d f  d	 „  ƒ  YZ	 e
 d
 k r½ e ƒ  Z e j ƒ  e ƒ  Z e j ƒ  e	 ƒ  Z e j ƒ  n  d S(   iÿÿÿÿ(   t   division(   t   HierarchicalDetectort   PanelTreeNode(   t
   PanelGroupt   TestPanelTreeNodec           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   sµ   d d l  m } t ƒ  |  _ t d |  j ƒ |  _ | j d ƒ j ƒ  } | j d ƒ j ƒ  } d	 } | j d
 ƒ } | j d ƒ } d } |  j j | | | ƒ |  j j | | | ƒ d  S(   Niÿÿÿÿ(   t   matrixt   parenti   i    i
   (   i   i   i    (   iÿÿÿÿi   i    (   i
   i
   i
   (   i   i    i    (   i    i   i    (   i    i    i    (   t   scitbxR   R   t   roott   nodet   colt	   normalizet	   set_frame(   t   selfR   t	   root_fastt	   root_slowt   root_origint	   node_fastt	   node_slowt   node_origin(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyt   __init__   s"    		c         C   s6   |  j  ƒ  |  j ƒ  |  j ƒ  |  j ƒ  |  j ƒ  d  S(   N(   t   tst_attributest   tst_parent_and_roott   tst_get_local_framet   tst_set_local_framet   tst_set_parent_frame(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyt   run   s
    



c         C   s«   |  j  j ƒ  d k s t ‚ |  j  j ƒ  d k s6 t ‚ |  j  j ƒ  d k sQ t ‚ |  j  j ƒ  d k sl t ‚ |  j  j ƒ  d k s‡ t ‚ |  j  j ƒ  d k s¢ t ‚ d GHd  S(	   Nt    i   i    t   OK(   i   i    i    (   i    i   i    (   i    i    i   (   i    i    i    (   R	   t   get_namet   AssertionErrort   get_typet   get_fast_axist   get_slow_axist
   get_normalt
   get_origin(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   &   s    c         C   s~   |  j  j ƒ  |  j k s t ‚ |  j  j ƒ  |  j k s< t ‚ |  j j ƒ  d  k sW t ‚ |  j j ƒ  |  j k su t ‚ d GHd  S(   NR   (   R	   R   R   R   t   None(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   /   s
    c            s€  d d l  m } d d l m } |  j j ƒ  } | d k sA t ‚ |  j j ƒ  } | j d ƒ j	 ƒ  j
 } | j d ƒ j	 ƒ  j
 } | j d ƒ j	 ƒ  j
 } | j | d ƒ d d f ƒ j
 } | j | d | d | d | d ƒ j ƒ  j
 } d ‰  t | ƒ t | ƒ k st ‚ t ‡  f d	 †  t | | ƒ Dƒ ƒ s=t ‚ d
 GH|  j j ƒ  }	 |  j j ƒ  }
 |  j j ƒ  } |  j j ƒ  } t ‡  f d †  t |	 | ƒ Dƒ ƒ s©t ‚ t ‡  f d †  t |
 | ƒ Dƒ ƒ sÔt ‚ t ‡  f d †  t | | ƒ Dƒ ƒ sÿt ‚ t ‡  f d †  t | | ƒ Dƒ ƒ s*t ‚ d
 GH|  j j ƒ  } |	 |
 | } t ‡  f d †  t | | ƒ Dƒ ƒ swt ‚ d
 GHd  S(   Niÿÿÿÿ(   R   (   t   sqrti   i    iÈ   iöÿÿÿgH¯¼šò×z>c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   t   abs(   t   .0t   at   b(   t   eps(    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>N   s    R   c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>U   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>V   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>W   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>X   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>]   s    (   i   i    i    i    i    i   i    i    i    i    i   i    i    i    i    i   (   i   iÿÿÿÿi    (   i   i   i    (   i    i    i   (   i    (   i    (   i    (   i   (   R   R   t   mathR%   R	   t   get_transformation_matrixR   t   get_local_transformation_matrixR
   R   t   elemst   sqrt	   transposet   lent   allt   zipt   get_local_fast_axist   get_local_slow_axist   get_local_normalt   get_local_origint   get_local_d_matrix(   R   R   R%   t   tmt   ex_fastt   ex_slowt   ex_normt   ex_origt   expectedt   fastt   slowt   normt   origt   ld(    (   R*   sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   6   s@       ".++++++c            só  d d l  m } | j d ƒ j ƒ  } | j d ƒ j ƒ  } d } |  j j | | | ƒ |  j j ƒ  } |  j j ƒ  } |  j j ƒ  } d ‰  t	 ‡  f d †  t
 | | ƒ Dƒ ƒ s´ t ‚ t	 ‡  f d †  t
 | | ƒ Dƒ ƒ sß t ‚ t	 ‡  f d †  t
 | | ƒ Dƒ ƒ s
t ‚ d	 GH| j d ƒ } | j d ƒ }	 | j d ƒ }
 |  j j ƒ  } |  j j ƒ  } |  j j ƒ  } t	 ‡  f d †  t
 | | ƒ Dƒ ƒ s”t ‚ t	 ‡  f d †  t
 | |	 ƒ Dƒ ƒ s¿t ‚ t	 ‡  f d †  t
 | |
 ƒ Dƒ ƒ sêt ‚ d	 GHd  S(   Niÿÿÿÿ(   R   i    i   gH¯¼šò×z>c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>n   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>o   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>p   s    R   i
   c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>y   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>z   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>{   s    (   iÿÿÿÿiÿÿÿÿi    (   iÿÿÿÿi   i    (   i    i    i    (   i    iÿÿÿÿi    (   iÿÿÿÿi    i    (   i
   i
   i
   (   R   R   R
   R   R	   t   set_local_frameR4   R5   R7   R2   R3   R   R    R!   R#   (   R   R   R?   R@   t   origint   fast_gett   slow_gett
   origin_getR:   R;   R=   RB   (    (   R*   sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   a   s.    ++++++c            s¬  d d l  m } | j d ƒ j ƒ  } | j d ƒ j ƒ  } d } | j d ƒ j ƒ  } | j d ƒ j ƒ  } | j d ƒ } | j | ƒ } | j | j d | j d | j d | j d ƒ j ƒ  }	 | j |  j j	 ƒ  j
 ƒ  ƒ }
 |	 |
 j ƒ  } |  j j | ƒ |  j j ƒ  } |  j j ƒ  } |  j j ƒ  } d ‰  t ‡  f d †  t | | ƒ Dƒ ƒ sat ‚ t ‡  f d †  t | | ƒ Dƒ ƒ sŒt ‚ t ‡  f d †  t | | ƒ Dƒ ƒ s·t ‚ d	 GH| j d ƒ j ƒ  } | j d ƒ j ƒ  } | j d ƒ } |  j j ƒ  } |  j j ƒ  } |  j j ƒ  } t ‡  f d
 †  t | | ƒ Dƒ ƒ sMt ‚ t ‡  f d †  t | | ƒ Dƒ ƒ sxt ‚ t ‡  f d †  t | | ƒ Dƒ ƒ s£t ‚ d	 GHd  S(   Niÿÿÿÿ(   R   i    i   gH¯¼šò×z>c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>™   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>š   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>›   s    R   c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>¥   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>¦   s    c         3   s+   |  ]! \ } } t  | | ƒ ˆ  k  Vq d  S(   N(   R&   (   R'   R(   R)   (   R*   (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>§   s    (   iÿÿÿÿiÿÿÿÿi    (   iÿÿÿÿi   i    (   i    i    i    (   i   i    i    (   i    i   i    (   i    i    i    (   i    (   i    (   i    (   i   (   iÿÿÿÿiÿÿÿÿi    (   iÿÿÿÿi   i    (   i    i    i    (   R   R   R
   R   t   crossR/   R.   R0   R	   R   R,   t   inverset   apply_transformationR4   R5   R7   R2   R3   R   R    R!   R#   (   R   R   t   ex_local_fastt   ex_local_slowt   ex_local_originR?   R@   RE   t   normalt   tp2t   tp1t   tdt
   local_fastt
   local_slowt   local_originR:   R;   R=   RB   (    (   R*   sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   ~   s>    7++++++(	   t   __name__t
   __module__R   R   R   R   R   R   R   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR      s   						+	t   TestPanelGroupc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   s4   t  ƒ  |  _ |  j j ƒ  |  _ |  j j ƒ  |  _ d  S(   N(   R   R   t	   add_groupt   g1t   g2(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   ­   s    c         C   s   |  j  ƒ  |  j ƒ  d  S(   N(   t   tst_set_frameR   (   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   ´   s    
c         C   sý   d d l  m } | j d
 ƒ j ƒ  } | j d ƒ j ƒ  } d } |  j j | | | ƒ | j | j | j | ƒ j ƒ  j } d „  t	 | |  j j
 ƒ  ƒ Dƒ s¤ t ‚ d „  t	 | |  j j
 ƒ  ƒ Dƒ sÌ t ‚ d „  t	 | |  j j
 ƒ  ƒ Dƒ sô t ‚ d	 GHd  S(   Niÿÿÿÿ(   R   i   i    i
   c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>Ê   s    c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>Ë   s    c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>Ì   s    R   (   i   i   i    (   iÿÿÿÿi   i    (   i
   i
   i
   (   R   R   R
   R   R   R   R/   R.   R0   R3   t   get_d_matrixR   RZ   R[   (   R   R   R   R   R   t   ex(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR\   ¸   s    	(((c         C   sê  d d l  m } | j d ƒ j ƒ  } | j d ƒ j ƒ  } d } |  j j | | | ƒ | j | j | j | ƒ j ƒ  j } d „  t	 | |  j j
 ƒ  ƒ Dƒ s¤ t ‚ d „  t	 | |  j j
 ƒ  ƒ Dƒ sÌ t ‚ d „  t	 | |  j j
 ƒ  ƒ Dƒ sô t ‚ d	 GH| j d ƒ } | j d ƒ } | j d ƒ } |  j j | | | ƒ d }	 d }
 d } | j |	 |
 | ƒ j ƒ  j } d
 „  t	 | |  j j
 ƒ  ƒ Dƒ s–t ‚ d „  t	 | |  j j
 ƒ  ƒ Dƒ s¾t ‚ d „  t	 | |  j j
 ƒ  ƒ Dƒ sæt ‚ d  S(   Niÿÿÿÿ(   R   i   i    i
   c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>â   s    c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>ã   s    c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>ä   s    R   c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>ó   s    c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>ô   s    c         s   s+   |  ]! \ } } t  | | ƒ t k  Vq d  S(   N(   R2   R*   (   R'   R(   R)   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>õ   s    (   i   i   i    (   iÿÿÿÿi   i    (   i
   i
   i
   (   i   iÿÿÿÿi    (   i   i   i    (   i    i    i    (   i   i    i    (   i    i   i    (   i
   i
   i
   (   R   R   R
   R   R   RD   R/   R.   R0   R3   R]   R   RZ   R[   (   R   R   R   R   R   R^   t   g1_fastt   g1_slowt   g1_origt
   ex_g1_fastt
   ex_g1_slowt
   ex_g1_origt   ex_g1(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   Ð   s4    	((( (((   RV   RW   R   R   R\   R   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyRX   «   s   			t   Test2c           B   sG   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   c   	      C   sT  t  ƒ  } | j ƒ  } | j d ƒ | j d ƒ | j ƒ  } | j d ƒ | j d ƒ | j ƒ  } | j d ƒ | j d ƒ | j ƒ  } | j d ƒ | j d ƒ | j ƒ  } | j d ƒ | j d ƒ | j ƒ  } | j d ƒ | j d	 ƒ | j | ƒ | j | ƒ | j ƒ  } | j d
 ƒ | j d	 ƒ | j | ƒ | j | ƒ | |  _ d  S(   Nt   P1t   Pt   P2t   P3t   P4t   D1t   Dt   Q1t   Qt   Q2(   R   t	   add_panelt   set_namet   set_typet	   hierarchyRY   t   detector(	   R   Ru   t   panel1t   panel2t   panel3t   panel4R   t   quad1t   quad2(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   ú   s6    	c         C   s,   |  j  ƒ  |  j ƒ  |  j ƒ  |  j ƒ  d  S(   N(   t   tst_iterate_and_indext   tst_flatt   tst_get_valid_D_matrixt   tst_copy_and_reference(   R   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR     s    


c         C   s½   d d d d g } d d d d g } g  } g  } x7 |  j  D], } | j | j ƒ  ƒ | j | j ƒ  ƒ q: Wt d „  t | | ƒ Dƒ ƒ s� t ‚ t d „  t | | ƒ Dƒ ƒ s´ t ‚ d GHd	 S(
   s    Test the flat hierarchy. Rh   Rg   Ri   Rj   Rk   c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   t   nt   en(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>/  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   t   tt   et(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>0  s    R   N(   Ru   t   appendR   R   R2   R3   R   (   R   t   expected_typest   expected_namest   namest   typest   p(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR}   %  s    %%c         C   sy  d d g } d d g } g  } g  } x= |  j  j ƒ  D], } | j | j ƒ  ƒ | j | j ƒ  ƒ q4 Wt d „  t | | ƒ Dƒ ƒ s‰ t ‚ t d „  t | | ƒ Dƒ ƒ s® t ‚ d d g } d d g } g  } g  } xC |  j  j ƒ  j ƒ  D], } | j | j ƒ  ƒ | j | j ƒ  ƒ qè Wt d „  t | | ƒ Dƒ ƒ s=t ‚ t d „  t | | ƒ Dƒ ƒ sbt ‚ t	 |  j  j ƒ  ƒ d k sƒt ‚ |  j  j ƒ  d	 } | j ƒ  d k rº| j ƒ  d k sÀt ‚ t	 | ƒ d k sØt ‚ | d
 } | j ƒ  d k r| j ƒ  d k st ‚ d d d d d d d g } d d d d d d d g } g  } g  } xC |  j  j ƒ  j
 ƒ  D], } | j | j ƒ  ƒ | j | j ƒ  ƒ qdWt d „  t | | ƒ Dƒ ƒ s¹t ‚ t d „  t | | ƒ Dƒ ƒ sÞt ‚ d d d d d d d g } d d d d d d d g } g  } g  } xC |  j  j ƒ  j ƒ  D], } | j | j ƒ  ƒ | j | j ƒ  ƒ q6Wt d „  t | | ƒ Dƒ ƒ s‹t ‚ t d „  t | | ƒ Dƒ ƒ s°t ‚ d d d d g } d d d d g } g  } g  } xC |  j  j ƒ  j ƒ  D], } | j | j ƒ  ƒ | j | j ƒ  ƒ qöWt d „  t | | ƒ Dƒ ƒ sKt ‚ t d „  t | | ƒ Dƒ ƒ spt ‚ d GHd S(   sC    Test iteration and indexing through the detector in various ways. Ro   Rn   Rp   c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R€   R�   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>?  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R‚   Rƒ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>@  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R€   R�   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>J  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R‚   Rƒ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>K  s    i   i   i    Rj   Rh   Rm   Rl   Rg   Ri   Rk   c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R€   R�   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>]  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R‚   Rƒ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>^  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R€   R�   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>h  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R‚   Rƒ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>i  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R€   R�   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>s  s    c         s   s!   |  ] \ } } | | k Vq d  S(   N(    (   R'   R‚   Rƒ   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pys	   <genexpr>t  s    R   N(   Ru   Rt   R„   R   R   R2   R3   R   t   reverseR1   t   iter_preordert   iter_levelordert   iter_panels(   R   R…   R†   R‡   Rˆ   R‰   t   groupt   panel(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR|   4  sh    %%%%!*
*%%%%%%c         C   sW   |  j  j ƒ  } x< | D]4 } y | j ƒ  t s5 t ‚ Wq t k
 rI q Xq Wd GHd S(   s@    Try to get bad D matrix and check that an exception is thrown. R   N(   Ru   t   panelst   get_D_matrixt   FalseR   t	   Exception(   R   R�   R‰   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyt   tst_get_uninitialized_D_matrixx  s    
c         C   s  d d l  m } |  j j ƒ  j d d d ƒ x× |  j j ƒ  j ƒ  D]À } | j | j ƒ  ƒ } | j | j ƒ  ƒ } | j | j	 ƒ  ƒ } t
 | | j d ƒ ƒ d k  s¬ t ‚ t
 | | j d ƒ ƒ d k  sÑ t ‚ t
 | | j d ƒ ƒ d k  sö t ‚ | j ƒ  } qB W|  j j ƒ  j ƒ  \ } } | j d d d ƒ | j d d d ƒ | j ƒ  \ }	 }
 |	 j d  d! d" ƒ |
 j d# d$ d% ƒ | j ƒ  \ } } | j d& d' d( ƒ | j d) d* d+ ƒ d d l m } d } | j d | d- ƒ d | d/ ƒ d f ƒ } | j d | d1 ƒ d | d3 ƒ d f ƒ } | j d | d5 ƒ d | d7 ƒ d f ƒ } | j d | d9 ƒ d | d; ƒ d f ƒ } | j d< ƒ } | j d= ƒ } | j d> ƒ } | j d? ƒ } | j d@ ƒ } | j dA ƒ } | j dB ƒ } | j dC ƒ } t
 | j |	 j	 ƒ  ƒ | ƒ | k  s t ‚ t
 | j |
 j	 ƒ  ƒ | ƒ | k  sKt ‚ t
 | j | j	 ƒ  ƒ | ƒ | k  svt ‚ t
 | j | j	 ƒ  ƒ | ƒ | k  s¡t ‚ t
 | j |	 j ƒ  ƒ | ƒ | k  sÌt ‚ t
 | j |
 j ƒ  ƒ | ƒ | k  s÷t ‚ t
 | j | j ƒ  ƒ | ƒ | k  s"t ‚ t
 | j | j ƒ  ƒ | ƒ | k  sMt ‚ t
 | j |	 j ƒ  ƒ | ƒ | k  sxt ‚ t
 | j |
 j ƒ  ƒ | ƒ | k  s£t ‚ t
 | j | j ƒ  ƒ | ƒ | k  sÎt ‚ t
 | j | j ƒ  ƒ | ƒ | k  sùt ‚ d GHd S(D   s>    Setup the hierarchy of frames and check it's all consistent. iÿÿÿÿ(   R   i   i    id   gH¯¼šò×z>i
   i   i   iöÿÿÿ(   R%   g      $@g      @i   in   iZ   g      4@R   N(   i   i    i    (   i    i   i    (   i    i    id   (   i   i    i    (   i    i   i    (   i    i    id   (   i   i   i    (   iÿÿÿÿi   i    (   i
   i
   i    (   i   iÿÿÿÿi    (   i   i   i    (   i   i   i    (   i   iÿÿÿÿi    (   i   i   i    (   i   i    i
   (   i   i   i    (   iÿÿÿÿi   i    (   i    i   iöÿÿÿ(   i   iÿÿÿÿi    (   i   i   i    (   i    i   iöÿÿÿ(   i   i   i    (   iÿÿÿÿi   i    (   i   i    i
   g      9@g      )@g      9@g      )@g      9@g      )@g      9@g      )@g      9@g      )@g      9@g      )@g      9@g      )@g      9@g      )@(   i   i    i    (   i    i   i    (   i    iÿÿÿÿi    (   i   i    i    (   i    i   i    (   iÿÿÿÿi    i    (   i   i    i    (   i    i   i    (   R   R   Ru   Rt   RD   R‹   R
   R    R!   R#   R&   R   R‘   t   childrenR+   R%   (   R   R   t   objR?   R@   RB   Rm   t   q1t   q2t   p1t   p2t   p3t   p4R%   R*   t   p1_d0t   p2_d0t   p3_d0t   p4_d0t   p1_d1t   p2_d1t   p3_d1t   p4_d1t   p1_d2t   p2_d2t   p3_d2t   p4_d2(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR~   „  s†    %%%,,,,++++++++++++c         C   s¯  d d l  m } |  j j ƒ  } | d d } | d d } | d d } | d d } | j |  j d ƒ ss t ‚ | j |  j d ƒ s� t ‚ | j |  j d ƒ s« t ‚ | j |  j d ƒ sÇ t ‚ | |  j ƒ } | |  j k së t ‚ | j ƒ  } | j d	 d
 d ƒ | d d } | d d } | d d } | d d } | j | d ƒ s[t ‚ | j | d ƒ stt ‚ | j | d ƒ s�t ‚ | j | d ƒ s¦t ‚ d GHd  S(   Niÿÿÿÿ(   t   deepcopyi    i   i   i   i
   R   (   i   i    i    (   i    i   i    (   i    i    i
   (   t   copyR©   Ru   Rt   t   is_R   RD   (   R   R©   R   R™   Rš   R›   Rœ   t   new_detector(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyR   Ø  s.    (	   RV   RW   R   R   R}   R|   R”   R~   R   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyRf   ø   s   	$			D		Tt   __main__N(   t
   __future__R    t   dxtbx.modelR   R   R   t   objectR   RX   Rf   RV   t   testR   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/dxtbx/tests/model/tst_detector2.pyt   <module>   s   ¥Mÿ 	
	
	