ó
a#nSc           @   s  d  Z  d d l Z d d l Z d d l Z d d l m Z m Z d d l m Z d d l	 m
 Z
 d d l m Z d Z d d	 d
  Z d d  Z d d  Z d   Z e d k rd d l Z y& e j e j d d d"  \ Z Z Wn e   n Xd Z d Z d Z d	 Z d	 Z d Z x˘ e D] \ Z Z e d k rKe  e  d Z q e d k r`e Z q e d k rue Z q e d k rd Z q e d k rd Z q e d k r e  e  Z q q Wg  Z! e d k r	xĚ e D]+ Z e j" e# e d   Z$ e! j% e$  q×Wn e d	 Z& e
 e e&  Z' e r5d e Z( n d Z( e se' j) d d d e(  Z* g  Z! x= e* D]2 Z+ e, e+ d	  Z+ e j- e+  Z. e! j% e.  qfWn  e/ e!  rÁe e! e d e n e sÜd  GHe j0 d  n  e re e' e( d! e Z1 e1 re e1  qqn  d S(#   s   command line utility to report on the contributions of descriptors to
tree-based composite models

Usage:  AnalyzeComposite [optional args] <models>

      <models>: file name(s) of pickled composite model(s)
        (this is the name of the db table if using a database)

    Optional Arguments:

      -n number: the number of levels of each model to consider

      -d dbname: the database from which to read the models

      -N Note: the note string to search for to pull models from the database

      -v: be verbose whilst screening
i˙˙˙˙N(   t	   TreeUtilst   Tree(   t   Stats(   t	   DbConnect(   t   ScreenComposites   2.2.0i   i    c         C   s	  |  d } t  |   } | j   } t  |  d k r˙i  } d } i  } xŐ|  D]Í} | d k rp d GHd G| GHn  t  |  }	 | d 7} i  }
 xĆ t t  |   D]˛ } | j |  } t | t j  r t j | i  d |  } t j	 | | d |  xZ | j
   D]I } |
 j | t j | t j   } | | | c d |	 7<| |
 | <qWq q WxK |
 D]C } | j | t j | t j   } | |
 | | 7} | | | <q\W| d k rM xd |
 j
   D]V } | | } d j g  |
 | D] } d | ^ qÝ } d	 | | t |
 |  f GHqźWHqM qM W| d k r2d
 GHn  g  } xą | j
   D]Ł } | | } | d k rŞd j g  | | D] } d | ^ qr } d	 | | t | |  f GHn  | g } | j | |  | j t | |   | j |  qEW| d k rHqn g  } | S(   Ni    i   i   s%   #------------------------------------s   Doing: g      đ?s   , s   %4.2fs   %s,%s,%5.4fs   # Average Descriptor Positions(   t   lent   GetDescriptorNamest   ranget   GetModelt
   isinstanceR   t   TreeNodeR    t   CollectLabelLevelst   CollectDescriptorNamest   keyst   gett   numpyt   zerost   floatt   joint   sumt   extendt   append(   t
   compositest   nToConsidert   verboset	   compositet   nCompositest   nst	   globalRest   nDonet	   descNamest   nModelst   rest   it   modelt   levelst   descIdt   vt   kt   namet   xt   strRest   retValt   tmp(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/ML/AnalyzeComposite.pyt	   ProcessIt'   sb    

!!
* 
*	i   c          C   sÁ  d } y |  j  d | d |  } Wn d d  l } | j   d  SXt |  } | si t j j d  d  St j	 | t j
  } t j	 | t j
  } d }	 d }
 t j	 | t j
  } t j	 | t j
  } d } d } d  } d  } x¸t |  D]Ş} | | d d  k	 rA| | d | | <|	 | | d 7}	 |
 | | d	 7}
 n  | | d
 d  k	 rp| | d
 | | <d
 } n d } d t | | d  } | d k rśt j | d | | | <n  | r˙d t | | d  } | d k r˙t j | d | | | <q˙n  | d  k rN| | d d  k	 r(| } n  | rk| | d d  k	 rk| } qkn | | 7} | rk| | 7} n  | rî | | | d 7} | | | d 7} qî qî Wt |  | } |	 | :}	 |
 | :}
 | | :} t j |  } | | d } | | 8} t t | d  | d
  } i  } d | | d <d | | d <d |	 | d <d |
 | d <| | d <| d | d <d | | d <| d k rŤt j |  \ } } | | d <| | d <n  | r˝t |  | } | | :} | | :} | | :} t j |  } | | d } | | 8} t t | d  | d
  } d | | d <d | | d <d | | d <d | | d <| | d <| d | d  <d | | d! <| d k r˝t j |  \ } } | | d" <| | d# <q˝n  | S($   Ns   overall_error,holdout_error,overall_result_matrix,holdout_result_matrix,overall_correct_conf,overall_incorrect_conf,holdout_correct_conf,holdout_incorrect_conft   fieldst   wherei˙˙˙˙s   no runs found
g        i    i   i   i   g      đ?i   t   tgti   i   i   id   t   oAvgt   oDevt   oCorrectConft   oIncorrectConft
   oResultMatt   oBestIdxt   oBestErrt
   oAvgEnricht
   oDevEnricht   hAvgt   hDevt   hCorrectConft   hIncorrectConft
   hResultMatt   hBestIdxt   hBestErrt
   hAvgEnricht
   hDevEnrich(   t   GetDatat	   tracebackt	   print_exct   NoneR   t   syst   stderrt   writeR   R   R   R   t   evalR   t   CalcEnrichmentR   t   argsortt   sqrtR   t
   MeanAndDev(    t   connR.   t   enrichR-   t   dataRC   t   nPtst   overallt   overallEnricht   oCorConft
   oInCorConft   holdoutt   holdoutEnricht   hCorConft
   hInCorConft   overallMatrixt   holdoutMatrixR!   t   haveHoldoutt
   tmpOverallt
   tmpHoldoutt
   avgOverallt   oSortt   oMint
   devOverallR    t   meant   devt
   avgHoldoutt   hSortt   hMint
   devHoldout(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/ML/AnalyzeComposite.pyt
   ErrorStatsa   s˛    
		












c   	      C   sq  |  j    }  |  d d |  d <d |  } |  j d  rZ |  d d |  d <| d |  7} n  | GHHd GHd GHt |  d	  } t |  } t | d  } x t t |   D]y } | | d
 k rË d | | <n  | | } d Gx& t t |   D] } d | | Gqě Wd d | | | f | | GHq¨ Wd Gx t t |   D]
 } d Gq<WHd GxU t t |   D]A } | | d
 k rd | | <n  d d | | | f | | GqbWH| d k rŕ|  j d  rŕd | |  d |  d f GHn  |  j d  rmd GHt |  d  } t |  } t | d  } x t t |   D]y } | | d
 k rUd | | <n  | | } d Gx& t t |   D] } d | | GqvWd d | | | f | | GHq2Wd Gx t t |   D]
 } d GqĆWHd GxU t t |   D]A } | | d
 k rd | | <n  d d | | | f | | GqěWH| d k rm|  j d  rmd | |  d |  d f GHqmn  d  S(   NR5   i   s   
# Error Statistics:
	Overall: %(oAvg)6.3f%% (%(oDev)6.3f)  %(oCorrectConf)4.1f/%(oIncorrectConf)4.1f
		Best: %(oBestIdx)d %(oBestErr)6.3f%%R9   R>   s{   
	Holdout: %(hAvg)6.3f%% (%(hDev)6.3f)  %(hCorrectConf)4.1f/%(hIncorrectConf)4.1f
		Best: %(hBestIdx)d %(hBestErr)6.3f%%
  s   # Results matrices:s	   	Overall:R4   i    s   		s   % 6.2fs	   	| % 4.2fg      Y@s   ------i˙˙˙˙R7   s   		Enrich(%d): %.3f (%.3f)R8   R=   s	   	Holdout:R@   RA   (   t   copyt   has_keyt	   transposeR   R   R   (	   t   statDRO   t   txtR+   t	   colCountst	   rowCountsR!   t   rowt   j(    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/ML/AnalyzeComposite.pyt	   ShowStatsÁ   sx    
 
# " 
# " c           C   s   t  GHt j d  d  S(   Ni˙˙˙˙(   t   __doc__RF   t   exit(    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/ML/AnalyzeComposite.pyt   Usage  s    t   __main__s   n:d:N:vXt   skips   enrich=t    s   -ns   -ds   -Ns   -vs   --skips   --enricht   rbs   where note='%s'R-   R"   R.   R   s    ERROR: no composite models foundRO   (   s   skips   enrich=(2   Rt   R   RF   t   cPicklet   rdkit.ML.DecTreeR    R   t   rdkit.ML.DataR   t   rdkit.Dbase.DbConnectionR   t   rdkit.MLR   t   __VERSION_STRINGR,   Ri   Rs   Rv   t   __name__t   getoptt   argvt   argst   extrast   countRE   t   dbt   noteR   Rx   RO   t   argt   valt   intR   t   loadt   openR   R   t   tblRN   R.   RB   t   pklst   pklt   strt   loadst   compR   Ru   R    (    (    (    s[   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/rdkit/ML/AnalyzeComposite.pyt   <module>   s~   :`D					
