ó
l™xTc        "  @   s±  d  d l  m Z d d d d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d d€ d� d‚ dƒ d„ d… d† d‡ dˆ d‰ dŠ d‹ dŒ d� dŽ d� d� d‘ d’ d“ d” d• d– d— d˜ d™ dš d› dœ d� dž dŸ d  d¡ d¢ d£ d¤ d¥ d¦ d§ d¨ d© dª d« d¬ d­ d® d¯ d° d± d² d³ d´ dµ d¶ d· d¸ d¹ dº d» d¼ d½ d¾ d¿ dÀ dÁ dÂ dÃ dÄ dÅ dÆ dÇ dÈ dÉ dÊ dË dÌ dÍ dÎ dÏ dÐ dÑ dÒ dÓ dÔ dÕ dÖ d× dØ dÙ dÚ dÛ dÜ dÝ dÞ dß dà dá dâ dã dä då dæ dç dè dé dê dë dì dí dî dï dð dñ dò dó dô dõ dö d÷ dø dù dú dû dü dý dþ dÿ d ddddddddd	d
dddddddddddddddddddddd d!d"d#g"Z d  d$l Z d  d%l m Z d  d&l m Z m Z d'e	 f d(„  ƒ  YZ
 d)e
 f d*„  ƒ  YZ e d+k r­d,GHe j e d- ƒ Z e j e e ƒ ƒ Z x: e e e ƒ ƒ D]& Z e e ƒ e e e ƒ ƒ e e <q&Wd.e j ƒ  GHd/GHd0GHe e e d1ƒ j Z d2Ge GHd3GHe e e d4ƒ j Z d5Ge GHn  d$S(6  iÿÿÿÿ(   t   divisiong·Ptly?g“ÝUyŽ?gØ´Ò~Là‘?gøö ¨É’?gÿBÌE&×’?gRÉp®³©“?gFÇ�„ü“?gO-³”?gÂ'•�•?gcL9aò0–?gÙþÚÅMt—?gÜò]ì~ª—?g¾JvŠx ˜?g¤+ã…vZ˜?g 0J@
ò˜?gõ	,´™?g=¹_Ožá™?g3×eD©¸š?göSû%Y{›?g‰êßAT�›?gŠüW»‘œ?gLSAf5�?g|§v6�?gúv'ÌOŸ?g�Ë²²¾Ÿ?g-{¦ißŸ?g×Å³êñŸ?gšH©ùs ?gØ{E_ý‡ ?g™†4Lô ?gHuŽ¾câ¡?gÇ+"\è¡?g©a©q.¢?g³Ù=!R¢?g|�@ïÕ|¢?gô�j1£?gÖ«‚s9£?g“¶Æpè†£?gÜùñK"Ô£?gÜ|¶'¤?g (IP+¤?g;Á8mƒ3¤?gðÏJJ8^¤?gE‚å‰Ír¤?gÕ,ÃFÿ‡¤?g}mA)\ú¤?g£úÊ´L¥?gK1ÇZ
¦?gsIþû¦?gþ³S÷ù›¦?g›5÷;"·¦?gXþ<nøê¦?gûR��íù¦?g¸õ¸§?g¦Ï66ÇR§?gÐíÞ´÷Ö§?gDf‘NA]¨?g™PdÆäp¨?g“${¶¨?gmPÿ­Äô¨?g!;ã 2ù¨?gûª*²©?g‹—M.©?g#æÅ‚Ô7©?gj\¼%‘x©?gjÛpR†©?gÕõ­Ñu©©?gÜkµJÐª?gÌPTïª?g³•‡EÎ$«?g@Ãà,«?ggÎÿY×0«?g9eG¤2«?gX#e\Q«?g‘Fô�`«?g6™®ñg «?g|¾ÇÔe0¬?gP¤Í.W¬?g(:áE&y¬?g¥`E…‹ž¬?gQ[–‹T­?gµ•Ê»‚®?gX?	ã0®?gA2°­î0®?gfßàÂÒD®?gD„k5Ì®?gýXáó]¯?g]�µðý¯?gè|xG{"°?g
j´3&°?gÝÈ"Pg°?g\Å—cn„°?gÞÂÍÀ�°?gÙœCwÀ°?gÉå¨�Où°?gS3ƒqr*±?g�˜ÅB±?g»}v]K±?g,˜{-XR±?g8€$Õâ~±?g1S¼Ñø‹±?g‹š?*ž±?gëÛÈn©±?gka›ãO°±?g€ö—wÊ±?g‹Öœ×±?g%Àz 
²?g/ù0Éå,²?gÝÚ ”O²?g–žÅT¨j²?gõéÑ¦z²?g³ÜÆcZŽ²?g=ˆ³FM—²?g—æ™²?gÏ6€ü…µ²?g&*‘âiÁ²?gBð’ñ²?g<ô¸½�ú²?g<BT"ª³?gM ÕÃ|)³?g¨�7Â*³?g£ö‡Ê˜F³?g»³ZŸh³?gÒ7fIŠ³?gŸŸY­³?gnˆ±UÂ³?g
Û"(­Ï³?gã`e¿Ï³?g–�ºŽ´?gbˆ‚A´?g!„,ÌC<´?g+	E9ì_´?gD`™N`´?grÊ�™´?g5ãöþ��´?g3x¿[“£´?gl¿Ûÿª´?g�¹,.aÞ´?gxÂ—Fç´?gx£Cê´?g/öqÃÞù´?gWÆ×]µ?gjV*µ?gñ]ãˆ:2µ?g+óéÙMµ?gnÒ. aµ?g	ê)|¨µ?g¡O~W­µ?g’%Th²µ?gäÂg¯Éµ?gË>8ÄÓµ?gµ‚ßµ?g,Š³Û6¶?gMTO[d(¶?gÚÅ›ûf>¶?g‚ûÇ)úb¶?g8Ü:#‹s¶?g$8�‹Š¶?gSê±n�£¶?gLÇà.±¶?gµ‚e ¼Á¶?gÒ¥”z·?gðê‚1·?gØžK·?g«¢	ž·?g²€†ŒÄ*·?gQùÀê:·?gç×ÃH^;·?g�S&~TO·?g‰…íÏ—v·?g¢¦ùŠk}·?g^Ž�3à�·?g#"äâ—·?g¦„ a ·?gR•Î¹·?göÈnTÀ·?gim]óÐ·?gO«�Ðræ·?g?æÈ·ö·?gš¡Uû3"¸?gÚó¼ß$¸?gÓìgWÂ.¸?g.,BÝ1¸?gHÑþA¸?g?ù/ÄŸH¸?g»½þOv¸?gÔoÂ,º‚¸?gèìâ™°Š¸?gWê’úÆŠ¸?g›ô�B•™¸?gÒ¿£BØ©¸?ggjT�{¬¸?g!\›À¸?gÌ�¿oÁ¸?grCoš9Ø¸?g¬0x.SÝ¸?gŽÆc�Þæ¸?g~*‚0Oí¸?g ë§šö¸?g‹�Zw†¹?gÁJå+M¹?gß·Á+”¢¹?g›†{²¼¹?gé-èüeº?gò‹ÌÅº?g€K+É º?g<UgY¸"º?gFEb
šoº?g�|ñ0Aœº?g¥Gy,�´º?gNÆfZMÄº?gv+AÙº?gÔ[v÷·èº?gÅéVo� »?gë’nù-»?gBª=ïá1»?g¶!í_öD»?g3ù§Ié™»?gü¶?À“º»?gk]:Û»?g½]ÿ»?g?Îæj¼?gU‹ü
¼?gù”j‰3¼?g6Ç,
6€¼?g9êHÅê¼?gŸjo*Î
½?gÏ–¥«0½?góê—K½?góöKX·L½?g»±7FQ½?gØ—þs—z½?gJgŠÛE¹½?gTK8ðŠÃ½?g¼cÉ%æÄ½?g¦³Y‡â¾?gà�j J+¾?gÄÓW¾?gLÂ0îªª¾?gS([º’Û¾?g*d3€1æ¾?gzOýí+¿?guýyè›S¿?gì~wÿ=T¿?g�ŸâÃÕÊ¿?goQœÖ°
À?g	%¶à;À?g%­ ñ)À?g] &ž'À?g•à€ÀYVÀ?ghìòÆ[À?gmÝ-eè~À?gÃ —¥ý�À?gùâK„D‡À?g’¨ûÂ¥À?g@,ÅFÖÁ?gøD•¢’Á?gã×S0-@Á?gjµ;ÍOÁ?gW^<Ô˜Á?g20�íÁ?gÞót·GÂ?gÔ³)~HÂ?gàœ%‹Â?góžôfÖãÂ?g=z&ÅùÃ?g{ê1m†‡Ã?gøz5­g°Ã?g�ÙzzÿÃ?g ñÝQó	Ä?gÿ#5ç³[Ä?gÐœâÅ?gü¹¥Õú[Å?gR‡G]‚Å?g[G{$ïÅ?gt‘b¼<Æ?g`�ÔÓ�Æ?gê1Îh“·Æ?g¥{é±)ˆÇ?g(·4”Ç?gÖ‹™B‹»É?g]g¢fîÊ?gŸ¿®œË?g¼£#¥†Ì?g«õa;cÑ?g÷Á–“‚ŒÕ?gSH6÷Ñ}Ú?gºJûŠÚ?gZ½Ä¾åñ?gß‰3Ð`ø?N(   t   flex(   t   lbfgst   lbfgsbt   rayleighc           B   sP   e  Z d  Z d „  Z d „  Z d d „ Z d d „ Z d d „ Z d d „ Z	 RS(   sÁ    Code is from Billy Poon
  =============================================================================
  Class models a 1-d Rayleigh distribution using one parameter, sigma.

              x                x^2
    pdf = --------- exp(- ------------)
           sigma^2         2 sigma^2

                        x^2
    cdf = 1 - exp(- -----------)
                     2 sigma^2

  The derivative of the cdf with respect to sigma is,

      d(cdf)          x^2               x^2             x
    ---------- = - --------- exp( - -----------) = - ------- pdf
     d(sigma)       sigma^3          2 sigma^2        sigma

  -----------------------------------------------------------------------------
  c         C   s/   t  | ƒ d k s t ‚ t | d ƒ |  _ d  S(   Ni   i    (   t   lent   AssertionErrort   floatt   sigma(   t   selft   p(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyt   set_parameters   s    c         C   sˆ   d } x: t t |  j ƒ ƒ D]# } |  j | d k r | } Pq q W| d k re t |  j ƒ d } n  |  j | |  _ t j |  j g ƒ S(   sI   
    Function estimates the parameter values based on the data (cdf)
    g      à?i   N(   t   Nonet   xrangeR   t   x_datat   y_dataR   R   t   double(   R	   t   midpointt   i(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyt   estimate_parameters_from_cdf!   s    c         C   s3   | |  j  } | |  j  t j d | | ƒ } | S(   s@   
    Function returns the probability density function at x
    g      à¿(   R   t   matht   exp(   R	   t   xt   x_sigmat   f(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyt   pdf1   s    "c         C   s,   | |  j  } d t j d | | ƒ } | S(   sD   
    Function returns the cumulative distribution function at x
    g      ð?g      à¿(   R   R   R   (   R	   R   R   R   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyt   cdf9   s    c         C   s"   | |  j  |  j d | ƒ } | S(   sd   
    Function returns the derivative of the cdf at x with respect to the
    standard deviation
    R   (   R   R   (   R	   R   t   df(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyt   d_cdf_d_sigmaA   s    c         C   s   t  j |  j | ƒ g ƒ S(   sC   
    Function returns a flex.double containing all derivatives
    (   R   R   R   (   R	   R   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyt   cdf_gradientsI   s    N(
   t   __name__t
   __module__t   __doc__R   R   R   R   R   R   R   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyR      s   		t   fit_cdfc           B   sV   e  Z d  Z d	 d	 d	 d „ Z d d „ Z d „  Z d d „ Z d d „ Z d „  Z	 RS(
   s³  
  =============================================================================
  Class fits a distribution according to its cumulative distribution function

  Arguments:
    x_data - measured property (list)
    y_data - fraction of points with measured property (cdf) (list)

  Useful accessible attributes:
    self.x - the final parameters (list)
  -----------------------------------------------------------------------------
  c         C   s  t  | ƒ t  | ƒ k s t ‚ t  | ƒ |  _ t j | ƒ |  _ t j | ƒ |  _ |  j ƒ  |  _ t j d g ƒ |  _	 t j d g ƒ |  _
 t j d g ƒ |  _ d |  _ d |  _ | d k rÕ t j d |  ƒ |  _ n | d k ró |  j ƒ  |  _ n  |  j |  j ƒ d  S(   Ng:Œ0âŽyE>g        i   iÿÿÿÿR   t   target_evaluatorR   (   R   R   t   nR   R   R   R   R   R   t   lt   ut   intt   nbdt   number_of_lbfgs_iterationst   number_of_function_evaluationsR   t   runt	   minimizert
   run_lbfgsbR   (   R	   R   R   t   minimizer_type(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyt   __init__\   s    		iÿÿÿÿc         C   s  |  j  j ƒ  } t j d | d d d |  j d |  j d |  j d t d d	 d
 d d | ƒ 	} |  j ƒ  \ } } xª t r| j	 |  j  | | ƒ r¢ |  j ƒ  \ } } qo | j
 ƒ  rå |  j d | j ƒ  d | j ƒ  ƒ } | j d | ƒ qo | j ƒ  r|  j d d ƒ Pqo |  j d d  ƒ qo W| S(   NR#   t   mi   R$   R%   R'   t   enable_stp_initt   factrg    ÐcAt   pgtolgñhãˆµøä>t   iprintt   stpt   csdt   valuet   suffixs    FINALR+   (   R   t   sizeR   R+   R$   R%   R'   t   Truet    compute_functional_and_gradientst   processt   requests_stp_initt
   adjust_stpt    relative_step_length_line_searcht   current_search_directiont$   set_relative_step_length_line_searcht   is_terminatedt   callback_after_step_no_countingt   callback_after_stepR   (   t   OR3   R#   R+   R   t   gt   new_stp(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyR,   u   s2    							c         C   s|   | d k s t  ‚ | j ƒ  |  j j ƒ  k o8 d k n sC t  ‚ d t | | d ƒ } t | | d ƒ } t | | ƒ S(   Ng        i   gÍÌÌÌÌÌì?i    (   R   R8   R   t   abst   min(   R	   R4   R5   t   large_shiftt   max_stp(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyR=   ’   s
    1t    c         C   s#   |  j  d 7_  |  j d | ƒ d  S(   Ni   R7   (   R(   RB   (   RD   R+   R7   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyRC   ™   s    c         C   s   d  S(   N(    (   RD   R7   (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyRB   �   s    c         C   s:  |  j  d 7_  |  j |  j ƒ t j |  j ƒ } x4 t |  j ƒ D]# } |  j d |  j | ƒ | | <qA W| |  j	 } t j
 t j | | ƒ ƒ } t j t |  j ƒ ƒ } xn t |  j ƒ D]] } |  j d |  j | ƒ } x; t t |  j ƒ ƒ D]$ } | | | | | | | | <qî Wq¹ Wd | } d G|  j GH| | f S(   Ni   R   g       @s   cycle sigma(   R)   R   R   R   R   R#   R   R   R   R   t   sumt   sqrtR   R   R   (   R	   t	   predictedR   t
   differenceR   t	   gradientst   g_it   j(    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyR:       s    !&
N(
   R   R   R    R   R.   R,   R=   RC   RB   R:   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyR!   O   s   	t   __main__sc   Test program for LBFGS options.  Fit a function to the test data using two methods: lbfgs & lbfgsb.iŸ   s4   The dataset consists of %d (x,y) pairs to be fitted.sa   The functional has a single variable parameter to be optimized.  Expected value is about 0.072277s   Trying lbfgs...R   s   Answer from lbfgs...s   Trying lbfgsb...R   s   Answer from lbfgsb...(   t
   __future__R    t
   pdb1o3u_drR   t   scitbx.array_familyR   t   scitbxR   R   t   objectR   R!   R   R   t   xdataR   t   ydataR   R   R   R8   R   (    (    (    sT   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/scitbx/lbfgsb/boost_python/tst_fit_cdf.pyt   <module>   s.   ÿ ÿ ÿ oHd$	