ó
ª™xTc           @   s’   d  d l  m Z d  d l Z d  d l Z d  d l m Z d  d l m Z d d „ Z	 e	 d ƒ Z
 d d d	 „ Z d
 „  Z e d k rŽ e ƒ  n  d S(   iÿÿÿÿ(   t   divisionN(   t   flex(   t   approx_equalid   c         C   sR   t  j j d ƒ } t j ƒ  } x- t |  ƒ D] } | j | j d | ƒ ƒ q+ W| S(   Ni   i   (   t   scitbxt   matht   haltonR   t   doublet   xranget   appendt   nth_given_base(   t   nt   halton_objectt   xt   ii(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   halton_x   s
    i(   g      @c            s÷  d  } d  ‰ d „  } d „  } d „  } d „  }	 d „  }
 d „  } d „  ‰  d ‡  ‡ f d	 † } d
 d d d d „ } d
 } d  } | d k r– t } n t | ƒ } | } | d  k rÉ | d
 |  | ƒ } n| |  | | ˆ  ƒ } ˆ  | |  | | ƒ ‰ | |  | | | d
 | ƒ } | |  | | | | d ƒ } | t k r‡| | | | } | | } | | |  | ƒ | | ƒ } t j | ƒ | | } n  | t k rå| | | | } | | } | | |  | ƒ |
 | ƒ } t j | ƒ | | } n  t j | d ƒ S(   Nc         S   s{   | |  |  | |  |  d | | } t  j | d k ƒ } | j | d ƒ d t j d t j ƒ | t  j | ƒ } | S(   Ng       @id   g      ð?(   R   t   boolt   set_selectedR   t   sqrtt   pit   exp(   R   t   zt   sigzt   ddt   selt   result(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   experimental_array   s
    &,c         S   sk   | |  |  | |  |  d | | } | d k r; d } n  t  j | ƒ d t  j d t  j ƒ | } | S(   Ng       @g      Y@g      ð?(   R   R   R   R   (   R   R   R   R   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   experimental_single   s
    &	,c         S   s0   t  j d t  j ƒ t j |  |  d ƒ } | S(   Ng       @(   R   R   R   R   R   (   R   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   centric    s    ,c         S   s0   t  j d t  j ƒ t  j |  |  d ƒ } | S(   Ng       @(   R   R   R   R   (   R   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   centric_single#   s    ,c         S   s    d |  t  j |  |  ƒ } | S(   Ng       @(   R   R   (   R   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   acentric'   s    c         S   s    d |  t  j |  |  ƒ } | S(   Ng       @(   R   R   (   R   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   acentric_single*   s    c         S   sz   | r4 |  |  d | |  |  d d | | } n  | su |  |  t  j |  d ƒ | |  |  d d | | } n  | S(   Ng       @i   g•Ö&è.>(   R   t   log(   R   R   R   t   centric_flagR   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   f_single.   s
    .;i   c            s/   ˆ  |  | | | ƒ ˆ } | | | d } | S(   Ng       @(    (   R   R   R   R    t   levelR   (   R!   t   max_s(    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   f_rat5   s    i    i   gñhãˆµøä>id   c         S   sX  d t  j d ƒ d } | | d | | }	 | |	 |  | | ƒ }
 d | | | | } | | |  | | ƒ } | | } d } xÌ | | k rK|
 | k  râ | } |	 } |
 } | | d | | }	 | |	 |  | | ƒ }
 | | } nG |	 } | }	 | }
 d | | | | } | | |  | | ƒ } | | } | d 7} | | k r€ | } q€ q€ W| | d S(   Niÿÿÿÿi   g       @i   i    (   R   R   (   R   R   R    t   functiont   at   bt   epst	   max_countt   ct   x1t   fx1t   x2t   fx2t   deltat   count(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   golden_section_max;   s2    


i(   gê-�™—q=(	   t   Nonet   x_precomputedR   t   TrueR   t   sumt   FalseR   R   (   R   R   R    R
   t   limt   max_eR   R   R   R   R   R   R$   R1   R   R   t   jact   low_et   high_e(    (   R!   R#   sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   log_p   sD    								

c       
   C   s/  d }  xt  d ƒ D]} | d d } t d | d |  d t d d	 ƒ } t d | d |  d t d d	 ƒ } d
 } d
 } | d
 k rì | } t j d d t j t | d ƒ ƒ } | d
 k rÃ d } n  t j t j	 | d ƒ | d ƒ } n  t
 | | d d ƒst ‚ t
 | | d d ƒs t ‚ q Wd GHd  S(   Ng-Cëâ6
?iX  g      I@g333333Ó?R   R   R    R
   i   i    g      ð?g       @g�íµ ÷Æ°>g        gê-�™—q=R(   gš™™™™™¹?t   OK(   R   R<   R6   R4   R   R   R   t   maxR   R   R   t   AssertionError(   R   R   R   t   pact   pcct   tact   tcct   tmp(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   testu   s     !!'	)t   __main__(   t
   __future__R    R   t   scitbx.mathR   t   scitbx.array_familyR   t   libtbx.test_utilsR   R   R3   R<   RE   t   __name__(    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/scaling/absence_likelihood.pyt   <module>   s   e	