ó
©%�Tc           @   sŸ  d  d l  Z  d  d l Z g  a d a e a e j d ƒ rB e a n  g  a	 d „  Z
 d „  Z d „  Z d dÄ d „  ƒ  YZ d	 dÅ d
 „  ƒ  YZ d dÆ d „  ƒ  YZ d „  Z d „  Z d „  Z d „  Z e Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d  „  Z$ d! „  Z% d" „  Z& d# „  Z' d$ „  Z( d% „  Z) d& „  Z* d' „  Z+ d( „  Z, d g  d) „ Z. d* g  d+ „ Z/ d a0 e d, „ Z1 d- „  Z2 d. „  Z3 d/ „  Z4 d0 „  Z5 d1 „  Z6 d2 „  Z7 d3 „  Z8 d4 „  Z9 d5 „  Z: d6 „  Z; d* d7 „ Z< d8 „  Z= d9 „  Z> d: „  Z? d; „  Z@ d< „  ZA d= „  ZB d> „  ZC d? „  ZD d@ „  ZE dA „  ZF dB „  ZG dC „  ZH dD „  ZI eI ZJ dE „  ZK dF „  ZL dG „  ZM dH „  ZN dI „  ZO dJ „  ZP dK „  ZQ dL „  ZR dM „  ZS dN „  ZT dO „  ZU dP „  ZV dQ „  ZW dR „  ZX dS „  ZY dT „  ZZ dU „  Z[ dV „  Z\ dW „  Z] dX „  Z^ dY „  Z_ dZ „  Z` d[ „  Z$ d\ „  Za d] „  Zb d^ „  Zc d_ „  Zd d` „  Ze da „  Zf db „  Zg dc ah dd „  Zi de „  Zj df „  Zk dg „  Zl dh „  Zm di „  Zn dj „  Zo y tp Wn g  ap n Xdk „  Zq dl „  Zr dm dn „ Zs do „  Zt dp „  Zu dq „  Zv dr „  Zw ds „  Zx dt „  Zy du „  Zz dv „  Z{ dw „  Z| dx „  Z} dy „  Z~ dz „  Z d{ „  Z€ d| „  Z� d} „  Z‚ d~ „  Zƒ d „  Z„ d€ „  Z… d� „  Z† d‚ „  Z‡ dƒ „  Zˆ d„ „  Z‰ d… „  ZŠ d† „  Z‹ d‡ „  ZŒ e dˆ „ Z� d‰ „  ZŽ e dŠ „ Z� d‹ „  Z� dŒ „  Z‘ e‘ Z’ d� „  Z“ dŽ „  Z” d� „  Z• d� „  Z• d‘ „  Z– d’ „  Z— d“ „  Z˜ d” „  Z™ d• „  Zš d– „  Z› d— „  Zœ e a� d˜ „  Zž e e e d™ „ ZŸ dš „  Z  d› „  Z¡ dœ „  Z¢ d� „  Z£ dž „  Z¤ e dŸ „ Z¥ d  „  Z¦ d¡ „  Z§ d¢ „  Z¨ d£ „  Z© d¤ „  Zª d¥ „  Z« e¬ Z­ d¦ „  Z® d§ „  Z¯ d¨ „  Z° d© „  Z± dª „  Z² d« „  Z³ d¬ „  Z´ d­ „  Zµ d® „  Z¶ d¯ „  Z· d° „  Z¸ g  d d e d± „ Z¹ d² „  Zº d³ „  Z» d´ „  Z¼ dµ „  Z½ d¶ „  Z¾ d· „  Z¿ d¸ „  ZÀ d d¹ „ ZÁ dº „  ZÂ d» „  ZÃ d¼ „  ZÄ d½ „  ZÅ d¾ „  ZÆ d¿ „  ZÇ dÀ „  ZÈ dÁ „  ZÉ eÄ ZÊ tË s€d  d lÌ ZÌ e aÍ dÂ „  ZÎ n  e aÏ e. dÃ ƒ s›e aÏ n  d S(Ç   iÿÿÿÿNs   //A/1-2t   MSYSTEMc         G   sk   t  |  ƒ } t |  ƒ x5 | D]- } | d } | d t | ƒ !} | | Œ  q Wt d k rg t |  ƒ n  d  S(   Ni    i   (   t   backup_statet   turn_off_backupt   lent   backup_modet   turn_on_backup(   t   imolt   funcst   b_statet   ft   funct   args(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   with_no_backups8   s    

c          G   sq   t  ƒ  } t d ƒ x> |  D]6 } | d } | d t | ƒ !} | | Œ  } t ƒ  q W| d k rm t d ƒ n  | S(   Ni   i    (   t&   refinement_immediate_replacement_statet$   set_refinement_immediate_replacementR   t   accept_regularizement(   R   t   replace_stateR	   R
   R   t   ret(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   with_auto_acceptM   s    	

c    
         sî   d d l  m } t ƒ  ‰  ˆ  s, t d ƒ n¾ ‡  ‡ f d †  ‰ t |  ƒ d k r] |  d } n( t |  d ƒ | k r| |  } n	 |  g } x^ | D]V } | d } | d } g  } x' | D] } ˆ | ƒ } | j | ƒ q³ W| | Œ  }	 qŒ W|	 Sd  S(   Niÿÿÿÿ(   t   ListTypes   No residue foundc            s¤   i ˆ  d d 6ˆ  d d 6ˆ  d d 6ˆ  d d 6ˆ  d	 d
 6ˆ  d d 6} t  |  t ƒ r… g  } x! |  D] } | j ˆ | ƒ ƒ qd W| S| j |  ƒ rœ | |  S|  Sd  S(   Ni    t   aa_imoli   t   aa_chain_idi   t	   aa_res_noi   t   aa_ins_codei   t   aa_atom_namei   t   aa_alt_conf(   t
   isinstancet   listt   appendt   has_key(   t   itemt   aa_dictt   arg_lst   ele(   t   active_atomt   arg_to_append(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR#   l   s    i   i    (   t   typesR   t   active_residuet   add_status_bar_textR   t   typeR   (
   R   R   t   ls_funcsR!   R
   t	   func_argsR   t   argt   insR   (    (   R"   R#   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   using_active_atomd   s&    			

t	   NoBackupsc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   sô   'Macro' to tidy up a a setup of functions to be run with no backup
    for a particular molecule.

    use with 'with', e.g.:
    
    > with WithNoBackups(imol=0):
        refine_zone(imol, "A", 43, 45, "")
        accept_regularizement()
    c         C   s   | |  _  d  S(   N(   R   (   t   selfR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   __init__­   s    c         C   s#   t  |  j ƒ |  _ t |  j ƒ d  S(   N(   R   R   R   R   (   R.   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt	   __enter__¯   s    c         C   s#   |  j  d k r t |  j ƒ n  d  S(   Ni   (   R   R   R   (   R.   R'   t   valuet	   traceback(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   __exit__²   s    (   t   __name__t
   __module__t   __doc__R/   R0   R3   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR-   ¢   s   			t
   AutoAcceptc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s×   
    Pythonic 'Macro' to tidy up a set of functions to be run with automatic
    accepting of the refinement.
 
    use with 'with', e.g.:
    
    > with AutoAccept():
         refine_zone(0, "A", 43, 45, "")

    c         C   s   d |  _  d  S(   Niÿÿÿÿ(   R   (   R.   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR/   Ê   s    	c         C   s   t  ƒ  |  _ t d ƒ d  S(   Ni   (   R   R   R   (   R.   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR0   Í   s    c         C   s'   t  ƒ  |  j d k r# t d ƒ n  d  S(   Ni    (   R   R   R   (   R.   R'   R1   R2   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR3   Ð   s    (   R4   R5   R6   R/   R0   R3   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR7   ¾   s   
		t   UsingActiveAtomc           B   s)   e  Z d  Z d „  Z d „  Z d „  Z RS(   s
  
    Run functions on the active atom.

    use with 'with', e.g.:
    
    > with UsingActiveAtom() as [aa_imol, aa_chain_id, aa_res_no, aa_ins_code, aa_atom_name, aa_alt_conf]:
          refine_zone(aa_imol, aa_chain_id, aa_res_no-2, aa_res_no+2, aa_ins_code)
    c         C   s   t  |  _ d  S(   N(   t   Falset
   no_residue(   R.   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR/   à   s    	c         C   s“   t  ƒ  |  _ |  j s+ t d ƒ t |  _ nd |  j d } |  j d } |  j d } |  j d } |  j d } |  j d } | | | | | | g Sd  S(   Ns   No (active) residue foundi    i   i   i   i   i   (   R%   R"   R&   t   TrueR:   (   R.   R   t   chain_idt   res_not   ins_codet	   atom_namet   alt_conf(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR0   ã   s    	
c         C   s   |  j  r t Sd  S(   N(   R:   R;   (   R.   R'   R1   R2   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR3   ñ   s    	(   R4   R5   R6   R/   R0   R3   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR8   Ö   s   		c         C   s   t  |  ƒ d k S(   Ni   (   t   molecule_has_hydrogens_raw(   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   molecule_has_hydrogensú   s    c         C   sk   t  j j d t |  d ƒ d ƒ } t  j j d t |  d ƒ d ƒ } t d ƒ t |  | ƒ t |  | | ƒ S(   Ns   coot-refmaci    s   -needs-H.pdbs   -with-H.pdb(   t   ost   patht   joint   molecule_name_stubt   make_directory_maybet   write_pdb_filet    add_hydrogens_using_refmac_inner(   R   t   out_file_namet   in_file_name(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   add_hydrogens_using_refmacý   s    
c         C   s~   t  j j d t |  d ƒ d | d ƒ } t  j j d t |  d ƒ d | d ƒ } t d ƒ t |  | | ƒ t |  | | ƒ S(   Ns   coot-refmaci    s   -chain-s   -needs-H.pdbs   -with-H.pdb(   RC   RD   RE   RF   RG   t   write_chain_to_pdb_fileRI   (   R   R<   RJ   RK   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt#   add_hydrogens_to_chain_using_refmac  s    
c         C   sS   t  d d | d | g d g d d ƒ } y | d k rC t |  | ƒ SWn t SXd  S(   Nt   refmac5t   XYZINt   XYZOUTs   MAKE HOUT YESs   refmac-H-addition.logi    (   t   popen_commandt   add_hydrogens_from_fileR9   (   R   RK   RJ   t   status(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRI     s    c           C   s   d t  ƒ  k S(   Ns   -pre(   t   coot_version(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   pre_release_qm3  s    c          C   sL   g  }  x? t  t ƒ  ƒ D]. } t | ƒ s4 t | ƒ r |  j | ƒ q q W|  S(   N(   t   ranget   graphics_n_moleculest   valid_map_molecule_qmt   valid_model_molecule_qmR   (   R   t   mol_no(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   molecule_number_list;  s    c           C   s   t  t t ƒ  ƒ S(   N(   t   filterRZ   R\   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   model_molecule_number_listC  s    c         C   s¿   d d l  m } t } t |  ƒ | k } | r» t j |  t j ƒ } | r» t j j |  ƒ } | r¸ t j |  t j	 ƒ } | rµ t j |  t j
 ƒ } | r² t j |  t j ƒ } q² qµ q¸ q» n  | S(   Niÿÿÿÿ(   t
   StringType(   R$   R_   R9   R'   RC   t   accesst   F_OKRD   t   isdirt   R_OKt   W_OKt   X_OK(   t
   prefix_dirR_   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   directory_is_modifiable_qmL  s    $c   
      C   sŠ   d d  l  } d d  l } t j j | |  ƒ } | j  | ƒ } t } d } x; | D]3 } t j j | ƒ }	 |	 | k rO | } |	 } qO qO W| S(   Niÿÿÿÿi    (   t   globt   timeRC   RD   RE   R9   t   getmtime(
   t   glob_strt   dirRh   Ri   t   pattt   filest   latest_filet   latest_mtimet   file_t
   this_mtime(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   most_recently_created_filej  s    c         C   s$   d |  d d t  |  d ƒ } | S(   Ns   //i    t   /i   (   t   str(   t   centre_residue_specR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt"   residue_spec2atom_selection_string€  s     c         C   s#   t  |  t ƒ s t S|  d d Sd  S(   Ni    (   R   R   R9   (   t   ra(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_atom2atom_name…  s    c         C   s#   t  |  t ƒ s t S|  d d Sd  S(   Ni    i   (   R   R   R9   (   Rx   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_atom2alt_conf‹  s    c         C   sO   t  |  t ƒ s t St |  ƒ d k r- |  d St |  ƒ d k rG |  d St Sd  S(   Ni   i    i   i   (   R   R   R9   R   (   t   rs(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_spec2chain_id‘  s    c         C   sO   t  |  t ƒ s t St |  ƒ d k r- |  d St |  ƒ d k rG |  d St Sd  S(   Ni   i   i   i   (   R   R   R9   R   (   R{   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_spec2res_no�  s    c         C   sO   t  |  t ƒ s t St |  ƒ d k r- |  d St |  ƒ d k rG |  d St Sd  S(   Ni   i   i   (   R   R   R9   R   (   R{   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_spec2ins_code¨  s    c         C   s^   d d  l  } t |  | j ƒ s" t St |  ƒ d k r< |  d St |  ƒ d k rV |  d St Sd  S(   Niÿÿÿÿi   i    i   i   (   R$   R   R   R9   R   (   t	   atom_specR$   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   atom_spec2imol³  s    c         C   s   t  |  | d | d | d ƒ S(   Ni   i   i   (   t   residue_name(   R   t   spec(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_spec2residue_name¾  s    c          C   s@   g  }  x3 t  t ƒ  ƒ D]" } t | ƒ r |  j | ƒ q q W|  S(   N(   RW   RX   t   is_valid_map_moleculeR   (   t   map_listt   i(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   map_molecule_listÆ  s
    c          C   s@   g  }  x3 t  t ƒ  ƒ D]" } t | ƒ r |  j | ƒ q q W|  S(   N(   RW   RX   t   is_valid_model_moleculeR   (   t
   model_listR†   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   model_molecule_listÐ  s
    c         C   s   t  |  ƒ d k r t St Sd  S(   Ni   (   t   is_shelx_moleculeR;   R9   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   shelx_molecule_qmÚ  s    c         C   sC   |  d k r t  d ƒ n& |  d k r2 t  d ƒ n d G|  Gd GHd  S(   Nt   flati   s   spherical-surfacei    s   virtual trackball types   not understood(   t
   vt_surface(   R'   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   set_virtual_trackball_typeä  s
    c         C   sp   d d  l  } d } t |  ƒ t k	 r( t Sx- |  D]% } t | | j ƒ rJ q/ | d 7} q/ W| d k rh t St Sd  S(   Niÿÿÿÿi    i   (   R$   R'   R   R9   R   t   StringTypesR;   (   t   lsR$   t   not_strR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   list_of_strings_qmî  s     c         C   s*   d d  l  } |  r | j |  ƒ Sd g Sd  S(   Niÿÿÿÿt    (   t   stringRE   (   R‘   R•   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   string_append_with_spacesþ  s    c           C   s   t  d ƒ t  d ƒ t  d ƒ g S(   Ni    i   i   (   t   rotation_centre_position(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   rotation_centre  s    		c         C   se   g  } |  | k r# | j  |  ƒ | S|  | k r3 | Sx' |  | k r\ | j  |  ƒ |  d }  q6 W| Sd  S(   Ni   (   R   (   t   at   bt   result(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   number_list  s     c         C   sM   t  j j |  ƒ s t St |  d ƒ } t d „  | Dƒ ƒ } | j ƒ  | Sd  S(   Nt   rc         s   s   |  ] } d  Vq d S(   i   N(    (   t   .0t   line(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pys	   <genexpr>"  s    (   RC   RD   t   isfileR9   t   opent   sumt   close(   t	   file_namet   fint   n_lines(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   file_n_lines  s    
c    	      O   s›   d d l  } | j d | j |  | Ž } | j ƒ  \ } } | j ƒ  } | r— | j d ƒ } | d k rs |  d } n  | j | | ƒ } | | _ | ‚ n  | S(   sÎ   Run command with arguments and return its output as a byte string.

Backported from Python 2.7 as it's implemented as pure python on stdlib.

>>> check_output(['/usr/bin/python', '--version'])
Python 2.6.2
iÿÿÿÿNt   stdoutR   i    (	   t
   subprocesst   Popent   PIPEt   communicatet   pollt   gett   Nonet   CalledProcessErrort   output(	   t	   popenargst   kwargsR©   t   processR±   t
   unused_errt   retcodet   cmdt   error(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   check_output'  s    			c   	      C   s˜   d d  l  } d d  l } | j \ } } } } } | d k rt | d k rt y | j |  j ƒ  ƒ } Wq” t } q” Xn  y t |  ƒ } Wn t } n X| S(   Niÿÿÿÿi   i   (   R©   t   syst   version_infoR¹   t   splitR9   (	   R·   R©   Rº   t   majort   minort   microt   releaselevelt   serialR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   shell_command_to_string?  s    
c         C   s9   t  |  d d t d t d | d | ƒ} | r1 t St Sd  S(   Nt   PATHt   no_disk_searcht   screen_infot   only_extensiont   add_extensions(   t   find_exeR;   R9   (   R·   t   only_extension_heret   add_extensions_heret   exe_path(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   command_in_path_qmV  s    	R”   c            sy  d d  l  } d d  l } | j j |  ƒ r. t Sg  } |  ‰  | j d k r¡ t |  ƒ } t |  ƒ ‰  | rs | g } q¡ | j d j	 | j
 ƒ } t d „  | ƒ } n  | r³ | g } n  | rÆ | | 7} n  ˆ  g } | rô | t ‡  f d †  | ƒ 7} n  yq | j d }	 xY | D]Q }
 xH | j	 |	 | j
 ƒ D]1 } | j j | |
 ƒ } | j j | ƒ r't Sq'WqWt SWn d GHt SXd  S(   Niÿÿÿÿt   ntt   PATHEXTc         S   s   |  d S(   Ni   (    (   t   ext(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   <lambda>y  s    c            s   ˆ  d |  S(   Nt   .(    (   RÏ   (   t	   cmd_noext(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   ‚  s    RÃ   s   BL WARNING:: couldnt open $PATH(   RC   R•   RD   R    R;   t   namet   file_name_extensiont   strip_extensiont   environR¼   t   pathsept   mapRE   R9   (   R·   RÆ   RÇ   RC   R•   t
   extensionst   file_extt   tmp_extt   program_namest   primary_patht   cmd_nameRD   t   program_exe(    (   RÒ   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   command_in_path_qm_old_versione  s>    	c         C   si  d d  l  } d d  l } d d  l } | j \ } }	 }
 } } | j j |  ƒ rW |  } n3 t |  ƒ sx d G|  Gd GHd GHn  t |  d d ƒ } | rX| d k r¡|	 d k r¡d d  l } t	 | d	 ƒ } | g | } | rú | j
 | d
 | j d | j ƒ} n | j
 | d
 | j d | ƒ} x" | D] } | j j | d ƒ qW| j j ƒ  | r†x3 | j D]% } d G| j d ƒ GH| j | ƒ qZWn  | j ƒ  | j ƒ  | j Sd } | j | ƒ } t | d	 ƒ } x | D] } | j | d ƒ qÌW| j ƒ  | j | d | d | d | d ƒ } | j ƒ  } | d  k rDd G|  Gd GHd Sd S| j | ƒ n d |  GHt Sd  S(   Niÿÿÿÿs   command s    not found in $PATH!s5   BL INFO:: Maybe we'll find it somewhere else later...t   CCP4_BINRÃ   i   i   t   wt   stdinR¨   s   
t   #s    
s   data_list_file_tmp.txtt    s    < s    > R�   s   running command s    failed!i   i    s+   WARNING:: could not find %s, so not running(   Rº   R•   RC   R»   RD   R    RÌ   RÈ   R©   R¡   Rª   R«   Rã   t   writeR£   R¨   t   rstript   waitt
   returncodeRE   t   filet   popenR¯   t   removeR9   (   R·   R   t	   data_listt   log_filet   screen_flagRº   R•   RC   R½   R¾   R¿   RÀ   RÁ   t   cmd_execfileR©   t   logt   cmd_argsR´   t   dataRŸ   t   data_list_filet   args_stringt   inputRT   t   cmd_finished(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRR   Ÿ  sR    $	$


*	c         C   s   t  |  | ƒ d k  S(   Ngü©ñÒMbP?(   t   abs(   t   x1t   x2(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   close_float_qmç  s    c         C   s(   d d  l  } | j j |  ƒ \ } } | S(   Niÿÿÿÿ(   RC   RD   t   splitext(   t   sRC   t   headt   tail(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÕ   î  s    c         C   sT   d d  l  } d d  l } | j j |  ƒ \ } } | rL | j | d ƒ } | Sd Sd  S(   NiÿÿÿÿRÑ   R”   (   RC   R•   RD   Rü   t   lstrip(   R¤   RC   R•   t   rootRÏ   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÔ   ø  s    c         C   sP   d d  l  } t |  | j ƒ rH t j j |  ƒ \ } } | d | } | Sd Sd  S(   Niÿÿÿÿs   -tmpt   tmp(   R$   R   R�   RC   RD   Rü   (   R¤   R$   R  RÏ   R	   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   add_tmp_extension_to  s    c         C   s
   t  |  ƒ S(   N(   RÕ   (   Rý   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   file_name_sans_extension  s    c         C   s(   d d  l  } | j j |  ƒ \ } } | S(   Niÿÿÿÿ(   RC   RD   R¼   (   Rý   RC   Rþ   Rÿ   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt
   strip_path  s    c         C   sÃ   d d  l  } d d  l } t |  | j ƒ r¿ t |  ƒ d k r¿ |  j d ƒ sZ |  j d ƒ r^ t St j d k r¼ t |  ƒ d k r¼ g  | j	 D] } | d ^ q‰ } |  d d !| k r¹ t Sq¼ q¿ n  t
 S(	   Niÿÿÿÿi    Rt   s   \RÍ   i   t   :i   (   R$   R•   R   R�   R   t
   startswithR;   RC   RÓ   t   ascii_uppercaseR9   (   Rý   R$   R•   t   dlt   drive_letter_ls(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   slash_start_qm  s    ! c          C   s(   d d  l  }  |  j d |  j ƒ  ƒ } | S(   Niÿÿÿÿs   %Y-%m-%d_%H%M(   Ri   t   strftimet	   localtime(   Ri   t   lt(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   unique_date_time_str0  s    c         C   sD   t  d t |  ƒ | ƒ } g  } x | D] } | j |  | ƒ q% W| S(   Ni    (   RW   R   R   (   R‘   t   nt   elementsR™   R†   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt	   every_nth;  s
    c         C   s_   t  | t ƒ r[ | g  k r[ x= | D]2 } | d d |  k r" | d d | k r" | Sq" Wn  t S(   sC   Get atom_info fomr a residue.
    residue_atoms must be a list
    i    i   (   R   R   R9   (   R?   t   residue_atomsR@   t   residue_atom(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   get_atom_from_residueG  s    c         C   s9   t  |  | | d ƒ } | s t St | | | ƒ } | Sd  S(   NR”   (   t   residue_infoR9   R  (   R   R<   t   resnoR>   R?   t   alt_conf_internalt   res_infoR   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   get_atomY  s
    c           C   s   t  d k r t St Sd  S(   Ni   (   t    residue_info_dialog_is_displayedR;   R9   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt    residue_info_dialog_displayed_qmd  s    c         C   si   d d  l  } d d  l } | j j | d |  ƒ } | j  | ƒ } x! | D] } d G| GHt | ƒ qH Wd  S(   Niÿÿÿÿs   /*.s   BL INFO:: reading (   Rh   RC   RD   t   normpatht   read_pdb(   t   glob_patternRl   Rh   RC   Rm   t	   all_filesRê   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   multi_read_pdbp  s    	c          C   sŽ   d d  l  }  d d  l } t ƒ  } t d ƒ | j j | j j d ƒ d ƒ } |  j  | ƒ } x! | D] } d G| GHt | ƒ qc Wt | ƒ d  S(   Niÿÿÿÿi    RÑ   s   /*.pdbs   BL INFO:: reading (   Rh   RC   t   recentre_on_read_pdbt   set_recentre_on_read_pdbRD   R  t   abspathR  (   Rh   RC   t   recentre_statusRm   R   Rê   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   read_pdb_allz  s    	
"	c         C   sM   d d  l  } | j j |  ƒ r" t S| j j |  ƒ r8 t S| j |  ƒ t Sd  S(   Niÿÿÿÿ(   RC   RD   R    R9   Rb   R;   t   mkdir(   t   dir_nameRC   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt
   coot_mkdir†  s    c          C   s9   g  t  d ƒ D]( }  t  d ƒ D] } t |  | ƒ ^ q q S(   Ni   (   RW   t   get_view_matrix_element(   t
   row_numbert   column_number(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   view_matrix”  s    c          C   s9   g  t  d ƒ D]( }  t  d ƒ D] } t | |  ƒ ^ q q S(   Ni   (   RW   R*  (   R+  R,  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   view_matrix_transpš  s    c          C   s   t  t d d d d g ƒ }  |  S(   Ni    i   i   i   (   RØ   t   get_view_quaternion_internal(   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   view_quaternionŸ  s    c         C   s4   |  | } | j  | ƒ | j  | ƒ t | Œ  } | S(   N(   R   t   add_view_raw(   t   positiont
   quaterniont   zoomt	   view_nameR   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   add_view¦  s
    
c	         C   sõ   d d  l  }	 d „  }
 d |  | | } d |  | | } d |  | | } d |  | | } g  } xO | | | | g D]; } | d k  r‘ d } n | } | j |	 j | ƒ d ƒ qv Wt |
 | d | | | | | | g ƒ } | j | d ƒ | S(   Niÿÿÿÿc         S   s^   |  d k r | d k r |  S|  d k  r9 | d k r9 |  S|  d k rV | d k  rV |  S|  Sd  S(   Ni    (    (   t   xt   y(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   convert_signº  s    i   i    i   (   t   mathR   t   sqrtRØ   (   t   m00t   m10t   m20t   m01t   m11t   m21t   m02t   m12t   m22R:  R9  t   pwt   pxt   pyt   pzt   prt   vt   v1R‘   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   matrix2quaternion°  s    	
	+c	   	      C   s,   t  t |  | | | | | | | | ƒ	 ƒ d  S(   N(   t   set_view_quaternionRL  (	   R<  R=  R>  R?  R@  RA  RB  RC  RD  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   set_view_matrixâ  s    	c           C   s   t  t ƒ  Œ  t d ƒ d  S(   Ni   (   t   set_axis_orientation_matrixR-  t!   set_axis_orientation_matrix_usage(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   miguels_axesê  s    c         C   s(   t  |  d ƒ t  |  d ƒ t  |  d ƒ g S(   Ni    i   i   (   t   molecule_centre_internal(   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   molecule_centreò  s    c         C   se   t  |  ƒ ra t ƒ  } t |  | d t |  ƒ d | d t |  ƒ d | d t |  ƒ d ƒ n  d  S(   Ni    i   i   (   RZ   R˜   t   translate_molecule_byRS  (   R   t   rotate_centre(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   move_molecule_to_screen_centreù  s
    	c        	   C   s   d d d d d d d d d g	 S(   Ni   i    (    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   identity_matrix  s    c         C   s‹   d d  l  } | j | ƒ rz |  d k r4 | d d g S|  d k rM d | d g S|  d k rf d d | g Sd G|  Gd GHt Sn d G| GHt Sd  S(	   NiÿÿÿÿR7  i    R8  t   zs   symbol axis: s    incomprehensibles"   incomprehensible length argument: (   t   operatort   isNumberTypeR9   (   t   axist   lengthRY  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   translation  s    	c   	         s  d d  l  ‰  d d  l } d „  } ‡  f d †  } ‡  f d †  } ‡  f d †  } d „  } d „  } | j | ƒ r |  d k rš | t ƒ  | | | ƒ ƒ ƒ q	|  d	 k rÅ | t ƒ  | | | ƒ ƒ ƒ q	|  d
 k rð | t ƒ  | | | ƒ ƒ ƒ q	d G|  Gd GHn	 d G| GHd  S(   Niÿÿÿÿc         S   s   |  d d S(   NgJØMû!	@g     €f@(    (   t   degs(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt
   deg_to_rad"  s    c      	      s>   ˆ  j  |  ƒ } ˆ  j |  ƒ } d d d d | | d | | g	 S(   Ni   i    (   t   cost   sin(   t   alphat	   cos_alphat	   sin_alpha(   R:  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   simple_rotation_x%  s    c      	      s>   ˆ  j  |  ƒ } ˆ  j |  ƒ } | d | d d d | d | g	 S(   Ni    i   (   R`  Ra  (   Rb  Rc  Rd  (   R:  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   simple_rotation_y*  s    c            s;   ˆ  j  |  ƒ } ˆ  j |  ƒ } | | d | | d d d g S(   Ni    (   R`  Ra  (   Rb  Rc  Rd  (   R:  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   simple_rotation_z/  s    c           S   s   t  ƒ  d  S(   N(   R-  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   vm7  s    c         S   s   | d  S(   N(    (   t   mat1t   mat2(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   mult8  s    R7  R8  RX  s   symbol axis: s    incomprehensibles"   incomprehensible length argument: (   R:  RY  RZ  R-  (	   R[  t   degreesRY  R_  Re  Rf  Rg  Rh  Rk  (    (   R:  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   rotate_about_screen_axis  s     			c         C   s3   t  |  ƒ d k r" t |  d ƒ n t |  d ƒ d  S(   Ni    i   (   t   map_is_displayedt   set_map_displayed(   R   t   idummy(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   toggle_display_mapK  s    c         C   s3   t  |  ƒ d k r" t |  d ƒ n t |  d ƒ d  S(   Ni    i   (   t   mol_is_displayedt   set_mol_displayed(   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   toggle_display_molS  s    c         C   s3   t  |  ƒ d k r" t |  d ƒ n t |  d ƒ d  S(   Ni    i   (   t   mol_is_activet   set_mol_active(   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   toggle_active_mol[  s    c            sK   t  ˆ  ƒ s t Sg  } d „  ‰ t ‡  ‡ f d †  t ˆ  ƒ ƒ g } | Sd  S(   Nc         S   sU   t  |  | | ƒ } t |  | | ƒ } t |  | | ƒ } | | | t |  | | | ƒ g S(   N(   t   resname_from_serial_numbert   seqnum_from_serial_numbert!   insertion_code_from_serial_numberR  (   R   R<   R  t   res_nameR=   R>   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   r_infoj  s    c            s1   ˆ  t  ‡  ‡ ‡ f d †  t t ˆ  ˆ ƒ ƒ ƒ g S(   Nc            s   ˆ ˆ ˆ  |  ƒ S(   N(    (   t   serial_number(   R<   R   R|  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   p  s    (   RØ   RW   t   chain_n_residues(   R<   (   R   R|  (   R<   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   p  s    (   RZ   R9   RØ   t	   chain_ids(   R   R‘   (    (   R   R|  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   python_representationd  s    	$c         C   sE   d „  } t  |  ƒ } t | ƒ t k rA | | ƒ t |  | ƒ n  d  S(   Nc         S   s   t  d „  |  ƒ d  S(   Nc         S   s
   |  j  ƒ  S(   N(   t   sort(   t   model(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   |  s    (   RØ   (   t
   chain_list(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   reorder_chains_in_model{  s    (   R€  R'   R   t   clear_and_update_molecule(   R   R„  t   p_rep(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   reorder_chainsu  s
    	
c         C   sF   g  } x, | D]$ } x | D] } | j  | ƒ q Wq Wt |  | Œ d  S(   N(   R   t   transform_molecule_by(   R   t   rtopR‘   R†   t   j(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   transform_coords_moleculeˆ  s
    c       	   G   sw  d  } d „  } t |  ƒ d k r^ | |  d |  d |  d |  d |  d |  d |  d	 ƒ } nt |  ƒ d k r· |  d } | | |  d |  d |  d |  d t | ƒ t | ƒ ƒ } n¼ t |  ƒ d k r|  d } | | t ƒ  |  d |  d |  d t | ƒ t | ƒ ƒ } nd t |  ƒ d k rj|  d } | |  d t ƒ  |  d t ƒ  |  d t | ƒ t | ƒ ƒ } n	 d
 G|  GH| S(   Nc         S   s£   t  |  | d | d | d | d | d | d | d | d | d	 | d | d | d | d | d | d | | | d | d | d | d | d | d ƒ S(
   Ni    i   i   i   i   i   i   i   i   (   t   transform_map_raw(   R   t   matt   transt   about_ptt   radiust   space_groupt   cell(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   tf   s    i   i    i   i   i   i   i   i   s3   arguments to transform-map incomprehensible: args: (   R¯   R   R‘  R’  RW  R˜   (   R   R   R“  R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   transform_map�  s$    	=
"
!
"	c          C   s8   d }  x+ t  ƒ  D]  } t | ƒ } | r | d Sq W|  S(   NR”   i    (   RŠ   t   ncs_master_chains(   R�   t   molst   ncs_masters(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   get_first_ncs_master_chainÇ  s    c         C   s¼   t  ƒ  t | | | | | | d ƒ t t t ƒ ƒ } t t ƒ } | oJ t sƒ d t t ƒ t | ƒ t t ƒ } d G| GHd } n5 t t | ƒ } t | | d | d |	 |
 | | ƒ } | S(   Ni   s!   Bad cell or symmetry for moleculeiÿÿÿÿi    (	   t   clear_lsq_matchest   add_lsq_matcht   symmetry_operators_to_xHMt   symmetry_operatorst   imol_refR’  Ru   t   apply_lsq_matchesR”  (   t	   imol_breft	   ref_chaint   ref_resno_startt   ref_resno_endt   imol_movt	   mov_chaint   mov_resno_startt   mov_resno_endt   imol_mapR�  R�  R‘  t   cell_paramst   messageR   R‰  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   transform_map_using_lsq_matrixØ  s    $		c         C   sÙ   d d l  m } t |  ƒ rÕ t |  ƒ } t | ƒ | k rÂ g  } xo t t | ƒ ƒ D][ } | j | | t | ƒ ƒ | | d k  r‘ d | | <qS | | d k rS d | | <qS qS Wt	 |  | Œ n	 d G| GHt
 ƒ  n  d  S(   Niÿÿÿÿ(   R   gš™™™™™©?g      ð?s   bad non-list current-colour (   R$   R   RY   t   map_colour_componentsR'   RW   R   R   t   floatt   set_map_colourt   graphics_draw(   R   t   scale_factorR   t   current_colourt   new_vR†   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   brighten_mapñ  s    	c           C   s   t  d „  t ƒ  ƒ d  S(   Nc         S   s   t  |  d ƒ S(   Ng      ô?(   R²  (   t   imap(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   	  s    (   RØ   R‡   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   brighten_maps  s    c           C   s   t  d „  t ƒ  ƒ d  S(   Nc         S   s   t  |  d ƒ S(   Ngš™™™™™é?(   R²  (   R³  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ     s    (   RØ   R‡   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   darken_maps  s    c         C   sC   g  } t  |  ƒ } x* t | ƒ D] } | j t |  | ƒ ƒ q W| S(   N(   t   n_chainsRW   R   R<   (   R   t   chain_id_ist   number_of_chainst   chain_no(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR    s
    c         C   s!   t  |  | ƒ d k r t St Sd  S(   Ni   (   t   is_solvent_chain_pR;   R9   (   R   R<   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   is_solvent_chain_qm  s     c         C   s   t  |  | ƒ d k S(   Ni   (   t   is_protein_chain_p(   R   R<   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   is_protein_chain_qm'  s    c         C   s   t  |  | ƒ d k S(   Ni   (   t   is_nucleotide_chain_p(   R   R<   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   is_nucleotide_chain_qm.  s    c         C   s   t  |  ƒ d k r t St Sd  S(   Ni   (   Rˆ   R;   R9   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRZ   4  s     c         C   s   t  |  ƒ d k r t St Sd  S(   Ni   (   R„   R;   R9   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRY   ;  s     c           C   s   t  t ƒ  ƒ S(   N(   RY   t   imol_refinement_map(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   valid_refinement_map_qmC  s    c         C   s   t  |  ƒ d k S(   Ni   (   R‹   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRŒ   J  s    c         C   s$   t  |  ƒ s t St |  ƒ d k Sd  S(   Ni   (   RY   R9   t   map_is_difference_map(   R§  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   is_difference_map_qmR  s    c         C   s   t  |  | | | ƒ d k S(   Ni   (   t   does_residue_exist_p(   R   R<   R  R>   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_exists_qm]  s    c         C   s   t  |  | | | ƒ d k S(   Ni   (   t   residue_has_hetatms(   R   R<   R=   R>   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_has_hetatms_qmc  s    c         C   sF   t  t |  ƒ ƒ } | d k r/ d G|  Gd GHt Sd |  | f GH| Sd  S(   Ni    s   molecule numbers   is not valids$   Centre of mass for molecule %s is %s(   t   evalt   centre_of_mass_stringR9   (   R   t   centre(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   centre_of_massj  s    c         C   s   t  |  | | | | | ƒ S(   N(   t   atom_info_string(   R   R<   R  R>   R?   R@   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt
   atom_specsz  s    c         C   s   |  d d d !S(   Ni   i    i   (    (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   atom_spec2residue_spec~  s    c          C   sM   t  ƒ  }  |  g  k r d Sx$ |  D] } t | ƒ d k r  | Sq  Wd GHd Sd  S(   Niÿÿÿÿi    s>   BL WARNING:: we couldnt find a non difference map for fitting!(   R‡   RÂ  (   R…   t   map_mol(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   guess_refinement_map†  s    	g      ð?c             s#  d „  ‰ ‡ f d †  }  d „  ‰  ‡  f d †  } |  ƒ  } d } xÝ | r| | ƒ } d G| GH| sg t  S| d k r| d GHt  S| t d	 k  r½ | t d
 k r½ d t t ƒ  ƒ } t | ƒ PnT t ƒ  } t | | } d | | | f GH| d k  rþ d G| GHn  t | ƒ |  ƒ  } | d 7} qB Wt S(   Nc         S   st   t  ƒ  } | s d GHt S| d d !} | d } t | | |  ƒ } | g } t | t ƒ rf | | 7} n  | | g Sd  S(   Ns   No active atomi   i   i    (   R%   R9   t   residues_near_residueR   R   (   R�  R"   t   centred_residueR   t   other_residuest   all_residues(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   sphere_residues¨  s    	
	c             s;   ˆ  d ƒ }  |  r3 t  t |  d |  d g ƒ } | St Sd  S(   Ng      @i    i   (   R   t   refine_residuesR9   (   t   srR   (   RÕ  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   refinement_func¹  s
    c         S   sD   g  } |  r@ x1 |  D]& } | d d k s | j  | ƒ q q Wn  | S(   Ni    s
   Non-bonded(   R   (   R‘   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   no_non_bondedÄ  s    c            sk   |  s
 t  Sˆ  |  d ƒ } g  | D] } | d ^ q! } t | ƒ } t | ƒ } | d k r_ t  S| | Sd  S(   Ni   i    (   R9   R   R¢   (   t   rrt   nnb_listR7  t   chi_squaresR  t   summ(   RÙ  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt$   weight_scale_from_refinement_resultsÐ  s    i    s	   av_rms_d:i   s2   BL INFO:: refinement did not converge, bailing outgš™™™™™ñ?gÍÌÌÌÌÌì?s   Success: Set weight matrix to s5   INFO:: setting refinement weight to %s from * %s / %si   s*   BL INFO:: not convering, weight to set wasi   (   R9   t   target_auto_weighting_valueRu   t   matrix_stateR&   t
   set_matrixR;   (   RØ  RÞ  t   resultst   n_trialst   av_rms_dRý   t   current_weightt
   new_weight(    (   RÙ  RÕ  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   auto_weight_for_refinement£  s:    					
	
	c         C   s(   x! t  |  ƒ D] } t |  | ƒ q Wd  S(   N(   R  t   print_sequence_chain(   R   t   chain(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   print_sequence  s    c         C   s^   d d  l  } | j j |  ƒ s" t Sy- t |  d ƒ } | j ƒ  } | j ƒ  | SWn t SXd  S(   NiÿÿÿÿR�   (   RC   RD   R    R9   R¡   t   readR£   (   t   pir_file_nameRC   R¥   Ru   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   pir_file_name2pir_sequence  s    
c         C   s2   t  | ƒ } | r% t |  | | ƒ n	 d G| GHd  S(   Ns*   WARNING:: associate-pir-file: bad text for(   Rí  t   assign_pir_sequence(   R   R<   Rì  t   seq_text(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   associate_pir_file  s    c         C   s2   t  | ƒ } | r% t |  | | ƒ n	 d G| GHd  S(   Ns,   WARNING:: associate-fasta-file: bad text for(   Rí  t   assign_fasta_sequence(   R   R<   Rì  Rï  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   associate_fasta_file%  s    c           C   s   d  S(   N(    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   graphics_comma_key_pressed_hook.  s    c           C   s   d  S(   N(    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   graphics_dot_key_pressed_hook2  s    c         C   s�   yl d d  l  } t | j j |  ƒ ƒ } | s: | d k rg t t |  ƒ ƒ } t | j j | ƒ ƒ } n  | SWn t |  ƒ SXd  S(   Niÿÿÿÿi † (   t   gtkt   intt   gdkt   keyval_from_namet   longt   ordt   unicode_to_keyvalt   key_sym_code(   t   key_val_nameRõ  t	   key_valuet   new_val(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt
   decode_key?  s    c   
      C   s©  d d l  m } m } g  } t rB g  t D] } | d ^ q) } n  g  t D] } | d ^ qI } g  t D] } | d ^ qf } | | k r” d | GHnt | ƒ | k rð | | k rÔ d G| GHt j | j | ƒ ƒ n  t j	 | | |  | g ƒ nµ t | ƒ | k rœt
 | ƒ }	 |	 | k r<d G| GHt j | j |	 ƒ ƒ n  d | k r[t
 | d ƒ }	 n  d | k st|	 d k r�t j	 |	 | |  | g ƒ q¥d	 | GHn	 d
 G| GHd  S(   Niÿÿÿÿ(   t   IntTypeR_   i   i    s:   INFO:: you shall not overwrite a standard key binding (%s)s'   INFO:: you are overwriting existing keys3   INFO:: you are overwriting existing key (from code)t   Control_s%   INFO:: key %s not found in code tables   BL WARNING:: invalid key(   R$   R  R_   t
   use_gui_qmt   std_key_bindingst   key_bindingsR'   t   popt   indexR   R   (
   RÓ   t   keyt   thunkR  R_   t   std_keyst   elemt   keyst   codest   code(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   add_key_bindingR  s0     		i    c         C   s)  | rc g  t  D]  } d | d k r | d ^ q } g  t  D]  } d | d k r: | d ^ q: } nZ g  t  D]  } d | d k rj | d ^ qj } g  t  D]  } d | d k r— | d ^ q— } |  | k rï | j |  ƒ } | | } t | ƒ n6 t ƒ  rt ƒ  rt d t |  ƒ d ƒ n  d |  GHd  S(   NR  i   i    i   s!   (graphics-general-key-press-hook t   )s)   Key %s not found in (python) key bindings(   R  R  t   applyt   coot_has_guilet
   is_windowst   run_scheme_commandRu   (   R  t   control_flagR  R  R   R  R
   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   graphics_general_key_press_hooks  s    -0--
c            sû   d d l  m ‰  d d l m } ‡  f d †  } t | ƒ } t |  d ƒ } | j ƒ  } | j ƒ  x‡ | D] } | j ƒ  } t	 | ƒ d k rg | | d ƒ }	 y t
 t | d d !ƒ }
 Wn d G| d d !GHd  SXt | |	 d	 |
 Œ qg qg Wt | d
 ƒ d  S(   Niÿÿÿÿ(   R_   (   RZ  c            sA   t  |  ƒ ˆ  k r |  St |  ƒ r9 |  d k r2 d Sd Sn d Sd  S(   Ni    t   whitet   red(   R'   t   isNumbertype(   t   obj(   R_   (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   colour_from_number˜  s    R�   i   i    s.   BL WARNING:: cannot make float from cordinatesi   i   (   R$   R_   RY  RZ  t   new_generic_object_numberR¡   t	   readlinesR£   R¼   R   RØ   R¬  t   to_generic_object_add_linet   set_display_generic_object(   t   filenamet   obj_nameRZ  R  R  R¥   t   linesRŸ   t   current_linet   colourt   coords(    (   R_   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   read_vu_file“  s&    
c   
      C   s³   t  |  ƒ } g  } g  } x† | D]~ } xu t t | |  ƒ ƒ D]^ } t |  | | ƒ } t |  | | ƒ } | | | | | ƒ }	 |	 r; | j | | | g ƒ q; q; Wq W| r« | St Sd  S(   N(   R  RW   R~  Ry  Rz  R   R9   (
   R   t   residue_test_funcRƒ  t   seq_residue_listt   alt_conf_residue_listR<   R}  R=   R>   R�   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residues_matching_criteria¾  s    !c         C   s   t  |  d „  ƒ S(   Nc         S   s   t  S(   N(   R;   (   R<   R  R>   RÁ   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   Ó  s    (   R*  (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÔ  Ò  s    c            s%   ‡ f d †  ‰  t  ˆ ‡  f d †  ƒ S(   Nc            s^   t  } t ˆ  |  | | ƒ } x< t t | ƒ ƒ D]( } | | d d } | r. t } Pq. q. W| S(   Ni    i   (   R9   R  RW   R   R;   (   R<   R=   R>   t   res_serial_noR�   t   atom_lsR†   t   alt_conf_str(   R   (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt	   alt_func1Ü  s    c            s   ˆ  |  | | | ƒ S(   N(    (   R<   R=   R>   R+  (   R.  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   æ  s    (   R*  (   R   (    (   R.  R   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residues_with_alt_confsØ  s    
c         C   ss   t  |  | | | ƒ } g  } | ro xK t t | ƒ ƒ D]4 } | | d d } | | k r4 | j | ƒ q4 q4 Wn  | S(   Ni    i   (   R  RW   R   R   (   R   R<   R=   R>   R,  t	   alt_confsR†   R-  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_alt_confsë  s    c         C   sE  g  } x8t  |  ƒ D]*} t | |  ƒ } xt | ƒ D]} t |  | | ƒ } t |  | | ƒ } t |  | | ƒ } t |  | | | ƒ } x° | D]¨ }	 |	 d d }
 |	 d d } |	 d d } |
 d k  r� t |  ƒ d | d t | ƒ d | } | r| d 7} | | 7} n  | j | |  | | | | | g ƒ q� q� Wq5 Wq W| S(   Ni   i    g{®Gáz„?Rå   (	   R  R~  RW   Rx  Ry  Rz  R  Ru   R   (   R   R�   R<   t
   n_residuesR}  R{  R=   R>   R  t	   atom_infot   occRÓ   R@   t   text(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   atoms_with_zero_occû  s&    *
1c         C   sB   |  s
 t  St |  ƒ d k r$ |  d St |  ƒ d k r> |  d St  S(   s   simple extraction functioni   i   i   i    (   R9   R   (   t   res_spec(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   res_spec2chain_id  s    c         C   sB   |  s
 t  St |  ƒ d k r$ |  d St |  ƒ d k r> |  d St  S(   s   simple extraction functioni   i   i   i   (   R9   R   (   R7  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   res_spec2res_no#  s    c         C   sB   |  s
 t  St |  ƒ d k r$ |  d St |  ƒ d k r> |  d St  S(   s   simple extraction functioni   i   i   (   R9   R   (   R7  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   res_spec2ins_code0  s    c   
      C   sÒ   d d l  m } t |  | | | ƒ } t } t | ƒ | k rÎ xZ t t | ƒ ƒ D]F } | | d d } | | d d }	 |	 d k rP |	 | g } PqP qP W| rÎ t | ƒ d k rÎ | d d d d !} qÎ n  | S(   Niÿÿÿÿ(   R   i    i   s    CA i   (   R$   R   R  R9   R'   RW   R   (
   R   R<   R=   R>   R   R,  t   centre_atom_name_alt_confR†   R-  t   atom(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   residue_spec2atom_for_centreC  s    c         C   s    t  t |  ƒ t |  ƒ d ƒ d  S(   Ns    CA (   t&   set_go_to_atom_chain_residue_atom_nameR8  R9  (   R7  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   set_go_to_atomY  s    		c          C   s   t  ƒ  }  |  r{ |  d } |  d } |  d } |  d } |  d } |  d } t ƒ  } t | ƒ t | ƒ t | | | ƒ n  d  S(   Ni    i   i   i   i   i   (   R%   t   go_to_atom_molecule_numbert   set_go_to_atom_moleculet1   update_go_to_atom_window_on_other_molecule_chosenR>  (   R"   R   R<   R  R>   R?   R@   t   go_to_atom_imol_current(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt#   update_go_to_atom_from_current_atom`  s    	





	

c          C   sY   t  ƒ  }  |  d } |  d } |  d } |  d } |  d } |  d } t | | | ƒ d  S(   Ni    i   i   i   i   i   (   R%   t   flip_ligand(   R"   R   R<   R  R>   R?   R@   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   flip_active_ligandq  s    	





c          C   s    t  ƒ  }  |  r t |  ƒ n  d  S(   N(   R%   t   delete_atom(   R"   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   delete_atom_by_active_residue  s    	c            s’   d „  ‰ ‡  ‡ ‡ ‡ ‡ f d †  } t  ƒ  } | d k r‡ t ƒ  } | sP d GHqŽ t | ƒ d k rj d GHn d GHt | d ƒ | ƒ  n | ƒ  d  S(	   Nc         S   s»   t  } x� t ƒ  D]v } t | ƒ } | d k r t | d ƒ } t | | ƒ } | d k r† t | | d ƒ } | |  k rƒ | } Pqƒ q† q q Wt |  ƒ } | s¤ | r® t |  ƒ Sd GH| Sd  S(   Ni   i    s&   we have dict and model for tlc already(   R9   RŠ   R¶  R<   R~  Rx  t   monomer_restraintst   get_monomer(   t   tlct   have_tlc_moleculeR   t   nct   ch_idt   nrt   rnt   have_dict_for_tlc(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   get_monomer_and_dictionary›  s     
c    
         s7  ˆ ˆ ƒ }  t  |  ƒ s5 d t ˆ ƒ } t | ƒ nþt |  d d d d ƒ t |  d d d d d ƒ t |  ˆ ˆ  ˆ ƒ t |  ˆ ˆ  ˆ ƒ t ˆ ˆ  ˆ d ƒ t |  g ˆ ƒ } d G| GH| d } | d k r.| d } t	 ˆ | d d ˆ d ƒ t
 ˆ | ˆ  d ˆ ˆ ƒ t ƒ  } t ƒ  } t d ƒ | d k rKt ˆ ˆ  ˆ ˆ d ƒ nµ d	 d
 d d g } i d d g d 6d d g d 6d d g d 6} ˆ | j ƒ  k r©| ˆ }	 n t }	 t ˆ ˆ  ˆ ˆ d ƒ |	 r t | ˆ ˆ  ˆ d |	 | ƒ t ˆ ˆ  ˆ ˆ d ƒ n  t ƒ  t | ƒ t |  d ƒ t |  d ƒ n d GHd  S(   Ns    Oops.  Failed to get monomer t   Ai   R”   s    OXTs   INFO:: new_chain_id_info: i    iÿÿÿÿs    P  s    O1Ps    O2Ps    O3Ps    CZ s    OH t   PTRs    CB s    OG t   SEPs    OG1t   TPOs   BL WARNING:: merge failed!?(   RZ   Ru   R&   t   delete_residue_hydrogensRG  t   overlap_ligandst   match_ligand_torsionst   delete_residuet   merge_moleculest   change_residue_numbert   change_chain_idR   RÀ  R   t   regularize_zoneR  R9   t   refine_zonet   spin_searchR   Rs  Rv  (
   t   imol_ligandRý   t   new_chain_id_infot   merge_statust   new_chain_idt   replacement_stateR§  t
   spin_atomst   phos_dirt	   dir_atoms(   t   chain_id_inRR  R   R  RK  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt	   mutate_it°  sL    	

		

iÿÿÿÿs1   BL WARNING:: no valid maps around! Cannot mutate.i   sa   BL INFO:: we use the first map! If you wanna use another one, please select from Model/Fit/Refines<   BL INFO:: no refinement map set, will set first one for you!i    (   RÀ  R‡   R   t   set_imol_refinement_map(   R   Ri  R  RK  Rj  R§  t   map_mols(    (   Ri  RR  R   R  RK  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   mutate_by_overlap•  s    	5		
c          C   sÄ   t  ƒ  }  |  d } |  d } |  d } |  d } t | | | | ƒ } | d k rh t | | | d ƒ nX | d k rŠ t | | | d ƒ n6 | d	 k r¬ t | | | d
 ƒ n d | } t | ƒ d  S(   Ni    i   i   i   t   TYRRT  t   SERRU  t   THRRV  s$   Can't Phosphorylate residue of type (   R%   R�   Rm  t   info_dialog(   R"   R   R<   R  t   inscodeR{  Rý   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   phosphorylate_active_residueú  s    	




c         C   sX   t  |  d | d t | ƒ ƒ } t | | | | ƒ } t | d ƒ t |  | d ƒ d  S(   Ns   //Rt   i    (   t   new_molecule_by_atom_selectionRu   RX  Rs  R‹  (   R£  t   chain_id_movt	   resno_movR�  t   chain_id_reft	   resno_reft	   imol_fragt   rtop_i(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   overlay_my_ligands  s
    c         C   s¦   x˜ t  |  ƒ D]Š } t |  | ƒ s t | |  ƒ } xc t d | ƒ D]O } t |  | | ƒ } t |  | | ƒ } t |  | | ƒ } t |  | | d ƒ qA Wq q Wt ƒ  d  S(   Ni    s    CA (	   R  R»  R~  Rœ   Rx  Ry  Rz  t   add_atom_labelR®  (   R   R<   R2  R}  R{  R=   R>   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   label_all_CAs  s    c         C   sm   d d  l  } t |  | | | ƒ } t | ƒ t k ri x) | D]! } t |  | | | d d ƒ q: Wt ƒ  n  d  S(   Niÿÿÿÿi    (   R$   R  R'   R   R|  R®  (   R   R<   R  Rr  R$   t	   atom_listR3  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   label_all_atoms_in_residue'  s    c          C   s’   t  ƒ  }  |  d } |  d } |  d } |  d } t | | | | ƒ } t | ƒ t k rŽ x) | D]! } t | | | | d d ƒ q_ Wt ƒ  n  d  S(   Ni    i   i   i   (   R%   R  R'   R   R|  R®  (   R"   R   R<   R  Rr  R~  R3  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   label_all_active_residue_atoms0  s    	



c         C   s1  d „  } |  d } |  d } |  d } |  d } g  } x» | D]³ } | d }	 |	 d }
 |	 d } | d k r> | | | ƒ } t  | ƒ d k r· | j | | | | |
 | d d g ƒ qñ | j | | | | |
 | d t | ƒ rä d	 pç d
 g ƒ q> q> W| g  k r-t | ƒ t ƒ  r-t | | | | ƒ q-n  d  S(   Nc         S   sm   |  d } | d } g  } x> | D]6 } | d } | d } | | k r! | j  | ƒ q! q! W| re | St Sd  S(   Ni    (   R   R9   (   t   atom_1R,  t   compound_name_1t   atom_name_1t   matchersR<  t   compound_name_2t   atom_name_2(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   name_match_qmD  s    



i    i   i   i   R”   s   alt-confR4  g      &@g      ð?(   R   R   RŒ   t   set_atom_attributesR  t   residue_info_dialog(   R3  R,  R‡  R   R<   R  Rr  t   atom_attribute_settingsR<  t   compound_nameR?   R@   R„  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   sanitise_alt_confsA  s*    	






)
	c         C   s>   |  | | | d d g } t  |  | | | ƒ } t | | ƒ d  S(   Nt   dummy(   R  RŒ  (   R   R<   R  Rr  R3  R,  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   sanitise_alt_confs_in_residuem  s    c          C   si   t  ƒ  }  |  re |  d } |  d } |  d } |  d } t | | | | ƒ } | re t |  | ƒ qe n  d  S(   Ni    i   (   R%   R  RŒ  (   R"   R   R<   R  Rr  R,  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt!   sanitise_alt_confs_active_residuev  s    	



c           C   s   t  d „  t ƒ  ƒ d  S(   Nc         S   s   t  d |  t |  ƒ f ƒ S(   Ns       %s    %s
(   t   printft   molecule_name(   t   molecule_number(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   …  s    (   RØ   R\   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   print_molecule_namesƒ  s    	c             s  d d  l  ‰  t ‡  f d † }  d } t ƒ  ˆ  j j | ƒ sI d | GHnÅ t d d ƒ } y | j ƒ  } Wn g  } n Xg  } xX | D]P } d | k r° d G| GH| j | ƒ q… d | k r… d G| GH| j | ƒ q… q… W| j ƒ  |  | ƒ } | t k r|  | d	 t	 ƒn  d  S(
   Niÿÿÿÿc            s@  d } t  } ˆ  j d k r$ d } n  | rŠ ˆ  j j ˆ  j | ƒ d ƒ } ˆ  j j | d ƒ } ˆ  j j | ƒ ss t  St | d ƒ } d GHnH ˆ  j j ˆ  j | ƒ d ƒ } ˆ  j j | ƒ s¾ t  St | d	 ƒ } d
 GH| r7| j d ƒ | j d ƒ | j d ƒ x |  D] } | j | ƒ qW| j d ƒ | j	 ƒ  n d GHd  S(   Nt   HOMERÍ   t	   COOT_HOMEs   .coot-preferencess   saved_dialog_positions.pyRâ   sQ   BL INFO:: writing dialog positions to .coot-preferences/saved_dialog_positions.pys   .coot.pyR™   s.   BL INFO:: writing dialog positions to .coot.pys<   # ----------------------------------------------------------s<   # the following were written by extraction from a state files   # -------------------------s%   BL ERROR:: no valid port to write to!(
   R9   RÓ   RD   RE   t   getenvRb   R¡   R    Ræ   R£   (   t	   positionst   preferencest   homet   portt   init_dirt	   init_fileR2  (   RC   (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   dump_positions_to_fileŽ  s8    				s   0-coot.state.pysI   Ooops %s does not exist (either guile enabled or problem writing the fileR�   t   _dialog_positions    Adding dialog position: t   set_go_to_atom_window_positionR˜  (
   RC   R9   t
   save_stateRD   R    R¡   R  R   R£   R;   (   R�  t
   state_fileRš  R"  R—  RŸ   t   write_init_status(    (   RC   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt"   save_dialog_positions_to_init_fileŠ  s.    #
		
c         C   s¾   | } t  j j | ƒ rT | r6 t | d ƒ } g  } qi t | d ƒ } | j ƒ  } n t | d ƒ } g  } t } x$ | D] } |  | k rv t } Pqv qv W| s° | j |  d ƒ n  | j ƒ  d  S(   NRâ   s   r+s   
(	   RC   RD   R    R¡   R  R9   R;   Ræ   R£   (   R•   R   t	   overwriteRœ  Rš  R"  t   string_writtenRŸ   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   save_string_to_fileÐ  s"    	c   
      C   só   | } t  j j | ƒ r@ t | d ƒ } | j ƒ  } | j ƒ  n d | GHg  } | rï t j |  d ƒ } t j	 | ƒ } g  } xE | D]= } | j
 | ƒ }	 t |	 ƒ t |  ƒ k sƒ | j | ƒ qƒ qƒ Wt | d ƒ } | j | ƒ } | j ƒ  n  d  S(   NR�   s+   BL INFO:: no %s file, so cannot remove linet   |Râ   (   RC   RD   R    R¡   R  R£   R•   RE   t   ret   compilet   findallR   R   t
   writelines(
   t   remove_str_lsR   Rœ  Rš  R"  Rm   t   re_pattt   tmp_lsRŸ   R›   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt    remove_line_containing_from_fileî  s$    	c         C   sà   d „  } d } d } d d d g } d } t  |  ƒ rÓ | sE d } n | } t |  ƒ } d Gt | ƒ GHxs t | ƒ D]Y }	 t |  ƒ }
 |	 t | ƒ } | | | | } t | | ƒ t | | | | ƒ Œ  qs Wn	 d	 |  GHd  S(
   Nc         S   s'   | d |  d |  d | d g } | S(   Nih  i   i   (    (   t   colRl  R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   rotate_colour_map	  s    #g      ð?g      @gš™™™™™É?gš™™™™™é?ih  i
   s   range n_col returns: s   BL INFO:: %s is not valid map(   RY   t	   map_sigmaRW   t   copy_moleculeR¬  t   set_last_map_contour_levelt   set_last_map_colour(   R   t	   n_coloursR±  t   startt   stopt   initial_colourt   colour_ranget   n_colt   sigmat   icolt   new_mapt   fract   contour_level_sigma(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   multi_chicken	  s$    		c           C   s   d S(   Ni   (    (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   BALL_AND_STICK,	  s    c      
      sÇ   t  ˆ ƒ rÃ t ˆ | | ƒ } t | ƒ } t ˆ | ƒ } d ‰  t ˆ ƒ ‰ t | d ƒ t d ƒ t | | ƒ t | | d | d | d | d t	 ƒ  ˆ  d ˆ ƒ	 t
 ‡  ‡ ‡ f d †  | ƒ n  d  S(   Ni   i    i   i   c      
      s5   t  ˆ |  d |  d |  d |  d t ƒ  ˆ  d ˆ ƒ	 S(   Ni    i   i   i   (   t'   additional_representation_by_attributesRÂ  (   R‚   (   t   bb_typet   draw_hydrogens_flagR   (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   H	  s   (   RZ   RÑ  Rw   Rt  t   draw_hydrogens_stateRv  t   set_show_environment_distancest&   set_molecule_bonds_colour_map_rotationRÃ  RÂ  RØ   (   R   Rv   t   hilight_colourR�  RÓ  t   atom_sel_strt   imol_new(    (   RÄ  RÅ  R   sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   hilight_binding_site1	  s&    
c            sÎ  d d  l  } g  ‰  d } ‡  f d †  } d „  } x‘t |  ƒ D]ƒ} t |  | ƒ s= t | |  ƒ } x\t | ƒ D]K} t |  | | ƒ } t |  | | ƒ }	 t |  | | ƒ }
 | d k sn | |	 |
 g } t |  | d ƒ } | r¹t	 | ƒ t
 k r¶t | ƒ d k r³| d } t | d ƒ | k rC| d	 k rC| | | d
 g ƒ n  t | d ƒ | k  r{| d k r{| | | d g ƒ n  | d	 k p�| d k s°| | | d | g ƒ q°q³q¶q¹qn qn Wq= q= Wt ˆ  ƒ d k rãt d ƒ nç g  } xÅ ˆ  D]½ } | d } | d } | |  | | ƒ } | d d t | d ƒ | d d | d d t |  ƒ d d d t | d ƒ d t | d ƒ d d t | ƒ d g g } | j | ƒ qðWt d d d g | d ƒ d  S(   Niÿÿÿÿg      @c            s   ˆ  j  |  ƒ d  S(   N(   R   (   R�   (   t   residue_list(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   add_questionablev	  s    c         S   sV   t  |  | d | d | d ƒ } | d d !d } | t d „  | ƒ k rN | S| Sd  S(   Ni    i   i   i   t   *c         S   s   |  d d S(   Ni    (    (   t   at(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   |	  s    (   R  RØ   (   R   t   residue_spect   pucker_atomR|  t   t_pucker_atom(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   get_ribose_residue_atom_namey	  s
    !t   HOHi   i   i    s    C2's.   Inconsistent phosphate distance for C2' puckers    C3's.   Inconsistent phosphate distance for C3' puckers   puckered atom:s   No bad puckers.Rå   i   s   : s   set_go_to_atom_molecule(R  s'   set_go_to_atom_chain_residue_atom_name(s   "s   ", s   , s   ")s   Non-pukka puckersir  iú   s	     Close  (   R$   R  R»  R~  RW   Rx  Ry  Rz  t   pucker_infoR'   R   R   Rø   Rq  Ru   R   t   dialog_box_of_buttons(   R   R$   t   crit_dRÎ  RÔ  R<   R2  R}  R{  R=   R>   RÑ  t   piRÒ  t   buttonst   residuet   at_nameR‘   (    (   RÍ  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   pukka_puckers_qmo	  s\    		
			(

-F	c         C   s   t  |  | ƒ S(   N(   t)   new_molecule_by_smiles_string_by_libcheck(   t   tlc_textt   smiles_text(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   new_molecule_by_smiles_string¹	  s    c         C   s¦   d d  l  } t | ƒ d k r™ t |  ƒ d k rK t |  ƒ d k  rK |  } n( t |  ƒ d k rm |  d d !} n d } t ƒ  r‰ t | | ƒ St | | ƒ Sn	 d GHt Sd  S(   Niÿÿÿÿi    i   i   t   DUMs/   BL WARNING:: no smiles text found. Bailing out.(   t   shutilR   t   enhanced_ligand_coot_pt(   new_molecule_by_smiles_string_by_pyrogenRÞ  R9   (   Rß  Rà  Rã  t   three_letter_code(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÞ  Á	  s    $		
c         C   sx  d d  l  } d t d } d d t d | d g } d t d	 } d
 t d } d
 t d } t | d ƒ } | j | ƒ | j ƒ  t t d d ƒ }	 |	 s¤ d GHnÐ t |	 g  | | t ƒ }
 |
 d k rkt	 j
 j d ƒ rt| j d | ƒ t ƒ  } t | d ƒ } t | ƒ r[t | ƒ } g  t t | ƒ ƒ D] } | | | | ^ q-} t | | Œ n  t | ƒ qtn	 d G|
 GHd  S(   Niÿÿÿÿs   coot-s   .smit   Ns   MON s   FILE_SMILE R”   s	   libcheck-s   .logt	   libcheck_s   .pdbs   .cifRâ   Rá   RÃ   s!    BL WARNING:: libcheck not found!i    s   libcheck.libs$   OOPs.. libcheck returned exit status(   Rã  Ræ  Rê   Ræ   R£   RÈ   t   libcheck_exeRR   R;   RC   RD   R    t   copyR˜   t'   handle_read_draw_molecule_with_recentreRˆ   RS  RW   R   RT  t   read_cif_dictionary(   Rß  Rà  Rã  t   smiles_filet   libcheck_data_linest   log_file_namet   pdb_file_namet   cif_file_namet   smiles_inputt   libcheck_exe_fileRT   t   scR   t   mcR†   t   sc_mc(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÞ  ×	  s6    	
	1c         C   sç   t  |  ƒ d k rã t  | ƒ d k rã t d ƒ rØ |  d } | d } | d } | d } d d d	 |  d
 d | g } t d ƒ rš d d	 |  d
 d | g } n  t d | g  | t ƒ } | d k rÝ t | ƒ t | ƒ qÝ qà d GHqã n  d  S(   Ni    t   pyrogens   -pyrogen-from-coots   .logs   .pdbs   .cifs   -Ms   -ns   -rs   -os   pyrogen-from-coott   moguls   Ooops - pyrogen not in path(   R   RÌ   RR   R;   t0   handle_read_draw_molecule_and_move_molecule_hereRì  (   t   comp_idt   smiles_stringt   stubRï  Rð  Rñ  R   RT   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRå  þ	  s    




c   	      C   s¢   d } d |  } | d } | d } d | d | d | g } d | d } t  d	 ƒ rž t d	 | g  | t ƒ } | d
 k r‘ t | ƒ t | ƒ qž t d ƒ n  d  S(   Ns   acedrg-in.smis   acedrg-s   .pdbs   .cifs   -is   -rs   -os   .logt   acedrgi    s,   Bad exit status for Acedrg
 - see acedrg log(   RÌ   RR   R;   Rù  Rì  Rq  (	   Rú  t
   smiles_strt   smi_fileRü  t   pdb_out_file_namet   cif_out_file_nameR   Rï  RT   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt'   new_molecule_by_smiles_string_by_acedrg
  s    



c         C   sÞ  t  |  d | d t | ƒ ƒ } t | d ƒ t | d ƒ d } t |  | | | ƒ } | rÚt | ƒ t j j | d ƒ } t j j | d | d ƒ } t j j | d | d ƒ }	 t j j | d	 ƒ }
 t	 | | | | d
 ƒ t	 |  | | | d
 ƒ t
 | | ƒ t | ƒ t d d d ƒ } | s2t d ƒ qÚd G| Gd G| Gd G| Gd G|	 GHt | d | d | d |	 g d d g |
 t ƒ } | d k rÚt |	 ƒ t | d ƒ } t |  | | | ƒ } t t | d
 d d d
 g ƒ t | |  | | ƒ t | |  | | ƒ t | |  | | ƒ t | d
 d d
 | ƒ t | d
 | d d d ƒ t | | d d | d ƒ t | d ƒ t | d ƒ t | | | |  | | ƒ } t |  ƒ } | d } t | | ƒ t | d ƒ t | d ƒ t ƒ  qÚn  d  S(   Ns   //Rt   i    s	   coot-ccp4s   prodrg-in.pdbs   prodrg-s   .pdbs   .cifs
   prodrg.logR”   t   cprodrgRá   RÃ   s;   Cannot find cprodrg, so no prodrg-ifying of ligand possibles   BL DEBUG:: now run prodrg withRP   RQ   t   LIBOUTs	   MINI PREPt   ENDi   i   (   Rt  Ru   Rv  Rs  R�   RG   RC   RD   RE   RW  RH   t   close_moleculeRÈ   Rq  RR   R;   Rì  Rë  R   R^  RX  RY  t   set_residue_nameR]  t   renumber_residue_ranget'   add_ligand_delete_residue_copy_moleculet&   get_molecule_bonds_colour_map_rotationRÈ  R®  (   R   R<   R=   R>   t   new_molt
   prodrg_dirR{  t   prodrg_xyzint   prodrg_xyzoutt
   prodrg_cift
   prodrg_logt
   prodrg_exeRT   RË  RP  t   imol_replacingR°  t   new_col(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt
   prodrg_ify,
  sf    

				

c         C   s?   t  ƒ  } |  g | } t j | ƒ t | d g Œ  t ƒ  d  S(   Ni    (   R˜   t   annotationsR   t
   place_textR®  (   R5  t   rct   ann(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   add_annotation_heret
  s
    	c         C   s    |  a  d „  } t d | ƒ d  S(   Nc          W   sW   t  } t |  d d d !Œ  } | g | d } t j | ƒ t | d g Œ  t ƒ  d  S(   Ni    i   i   i   (   t	   pass_textRÍ  R  R   R  R®  (   R   R5  R   R  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   add_here€
  s    i   (   R  t   user_defined_click(   R5  R  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   add_annotation_at_click}
  s    	c         C   s   t  t t ƒ |  t ƒ d  S(   N(   R¦  Ru   R  R;   (   R¤   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   save_annotationsŽ
  s    c         C   s­   t  j j |  ƒ r© d d l m } t |  d ƒ } | j ƒ  } | j ƒ  | j d ƒ } t	 | ƒ } t
 | ƒ | k r© | a x t D] } t | d g Œ  q� Wt ƒ  q© n  d  S(   Niÿÿÿÿ(   R   R�   s   
i    (   RC   RD   R    R$   R   R¡   t   readlineR£   Rç   RÈ  R'   R  R  R®  (   R¤   R   Rš  R‘   R  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   load_annotations—
  s    
c          C   si   t  ƒ  }  d } t ƒ  r d n d } t ƒ  rK d } t ƒ  rB d n d } n  | | d d |  d	 } | S(
   Ns0   http://www.biop.ox.ac.uk/coot/software/binaries/s   pre-releasest   releasess6   http://www.ysbl.york.ac.uk/~lohkamp/software/binaries/s   nightlies/pre-releaset   stableRt   s   type-binary-s   -latest.txt(   t   coot_sys_build_typeRV   R  (   t
   build_typet   hostt   pre_dirt   url(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   make_latest_version_url·
  s    		c            sð  ‡  ‡ f d †  } t  d „ } d „  ‰ d „  ‰  t j d ƒ } t j j | ƒ } | s` d GHt  Sd t ƒ  k }	 d }
 t ƒ  } | d	 k sÞ | d
 k sÞ | d k sÞ | d k sÞ | d k sÞ | d k sÞ | d k sÞ | d k rç |
 } n d } t ƒ  rÿ d } n  | } t ƒ  r| d 7} n | d | d 7} d } d | k rW|	 rNd } qld } n |	 rfd } n d } d | | | } | d } | d } | r¥| | ƒ n  d G| GH| rçt | | d ƒ t | | d ƒ t	 rÞt  Sd a	 n¦ d  d  l
 } ‡ f d! †  } y | j | | ƒ \ } } Wn d" G| GHt  SXy8 d# GHd$ | GH| j | | | ƒ \ } } d a	 d% GHWn  t	 d& k sˆd" G| GHn  t  SXt j j | ƒ s£t  St j j | ƒ s¹t  S| | | ƒ sÌt  S| | ƒ } | rèt } t St  Sd  S('   Nc            s§   t  j j |  ƒ s t St  j j | ƒ s5 d | GHt Sˆ | ƒ } t  j | ƒ ˆ  |  ƒ } | sm d | GHt S| s€ d | GHt S| | k sŸ d | | f GHt St Sd  S(   Ns   OOps! %s does not exists   OOps %s is not a strings0   Oops: md5sums do not match %s %s.  Doing nothing(   RC   RD   R    R9   Rì   R;   (   t   tar_file_namet   target_md5sum_file_namet   target_md5_stringt
   md5_string(   t   get_md5sum_stringt   get_target_md5_string(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   match_md5sumsÜ
  s&    			c         S   si  t  j d ƒ } t  j j | ƒ } | s+ t St | ƒ s; t St  j j | d ƒ } t  j j | ƒ sr t  j | ƒ n  t  j j | ƒ sˆ t St  j j	 |  ƒ } t  j
 ƒ  } t  j | ƒ d Gt  j
 ƒ  GH| rç t d d | g g  d t ƒ nm t ƒ  s"d d  l } | j | ƒ } | j ƒ  | j ƒ  n2 t  j j |  ƒ rDt  j |  ƒ n  t  j | |  ƒ t  j | ƒ t Sd  S(   Nt   COOT_PREFIXs   pending-installs   now current dir ist   tart   xzfs	   untar.logiÿÿÿÿ(   RC   R–  RD   R  R9   Rg   RE   Rb   R'  R$  t   getcwdt   chdirRR   R  t   tarfileR¡   t
   extractallR£   R    Rì   t   renameR;   (   R)  t   use_tarRf   t   pending_dirt   a_tar_file_namet   current_dirR5  R1  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   install_coot_tar_file   s8    	
c         S   s]   t  j j |  ƒ s t St |  d ƒ } | j ƒ  } | j ƒ  | d } | d | j d ƒ !Sd  S(   NR�   i    Rå   (   RC   RD   R    R9   R¡   R  R£   t   find(   R¤   R¥   R"  t
   first_line(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR.  ,  s    

c         S   s^   t  j j |  ƒ s t Sd d  l } t |  d ƒ } | j | j ƒ  ƒ j ƒ  } | j	 ƒ  | Sd  S(   Niÿÿÿÿt   rb(
   RC   RD   R    R9   t   hashlibR¡   t   md5Rë  t	   hexdigestR£   (   R¤   R@  R¥   t   md5sum(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR-  7  s    
R0  s   OOps! Can't find COOT_PREFIXs   -pres.   www.ysbl.york.ac.uk/~emsley/software/binaries/s   Linux-i386-fedora-3s   Linux-i386-fedora-3-pythons   Linux-i386-fedora-8-python-gtk2s   Linux-i386-fedora-8-gtk2s    Linux-i386-fedora-10-python-gtk2s   Linux-i386-fedora-10-gtk2s   Linux-i686-ubuntu-8.04.3s   Linux-i686-ubuntu-8.04.3-pythons)   www.biop.ox.ac.uk/coot/software/binaries/s/   www.ysbl.york.ac.uk/~lohkamp/software/binaries/s   .exes   -binary-s   .tar.gzs	   releases/s   ysbl.york.ac.uks   nightlies/pre-release/s   stable/s   pre-releases/s   http://s   .md5sums   INFO:: getting URL:i   t   fulliÿÿÿÿc            sÓ   t  |  | d | ƒ } t  | d ƒ d } | d k  rE | d 7} n  t j j d | d | ƒ t j j ƒ  ˆ  r™ ˆ  j d | ƒ ˆ  j | d ƒ n  t d	 k rÏ t j j d
 ƒ t j j ƒ  t j ƒ  n  d  S(   Nid   g      @t   =t   >s   Progress %d%%s	     |%-40s|s   Downloading %s %%g      Y@t	   cancelleds   
BL INFO:: stopping download
(	   Rö  Rº   R¨   Ræ   t   flusht   set_textt   set_fractiont   pending_install_in_placet   exit(   t   countt	   blockSizet	   totalSizet   percentt   dots(   t   progress_bar(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   progress_functionŠ  s    s   BL ERROR:: could not downloads   
s   Downloading: %ss   
DoneRG  (   R9   RC   R–  RD   R  RU   R#  R  t#   coot_get_url_and_activate_curl_hookRK  t   urllibt   urlretrieveR    R;   (   t   revisiont   version_stringt   pending_install_in_place_funct   set_file_name_funcRR  t   use_curlR/  R<  t   prefixt   pre_release_flagt   yst   binary_typet   host_dirR)  t   release_dirR'  t   md5_urlt   md5_tar_file_nameRU  RS  t   md5_url_local_file_namet   md5_url_infot   url_local_file_namet   url_infot   success(    (   R-  R.  RR  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   run_download_binary_curlÔ
  s˜    $,										

					c         C   sL   |  rH |  j  d ƒ } | d j d ƒ } y t | d ƒ SWqH t SXn  t S(   Ns   
i    t   -iÿÿÿÿ(   t   rsplitR¼   Rö  R9   (   t   strit   lssR‘   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   get_revision_from_stringÀ  s    c         C   s9   d d  l  } y | j |  ƒ j ƒ  } Wn t } n X| S(   Niÿÿÿÿ(   RU  t   urlopenRë  R9   (   t   my_urlRU  Rý   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   get_url_as_stringÏ  s    
c         C   s<   t  ƒ  s" |  |  j d ƒ d !} n |  |  j d ƒ d !} | S(   Nt   ciÿÿÿÿt   W(   R  R=  (   Rl  t   ls2(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   coot_split_version_stringß  s    	c         C   s@   t  j j |  ƒ s t St |  ƒ } | j ƒ  } | j ƒ  | Sd  S(   N(   RC   RD   R    R9   R¡   Rë  R£   (   R¤   R¥   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   file2stringç  s    
c          C   s8   d }  t  j j |  ƒ r4 t |  ƒ } t | d ƒ n  d  S(   Ns   default.seqgffffffî?(   RC   RD   R    Rv  t   align_to_closest_chain(   t   default_seqRý   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   load_default_sequenceú  s    c            s‡  d d  l  } d d  l } t a t ƒ  } ˆ r< t | ƒ } n t | ƒ } | sZ d | GHn)t | ƒ ‰ t ˆ ƒ ‰ t a	 d „  ‰ d „  ‰  t
 a ‡  ‡ ‡ ‡ ‡ f d †  } t | g  ƒ d } x¸ t rxt rIt t ƒ } | ru| d } | d }	 | j | ƒ rF| j |	 ƒ rC|	 | }
 d	 |
 d
 GH|
 d k r@t a q@qCqFquqÁ | d k r^t a qÁ | d 7} | j d ƒ qÁ Wt d ƒ d  S(   Niÿÿÿÿs8   BL INFO:: could not get string from URL %s, so no updatec         S   s
   |  a  d  S(   N(   t   file_name_for_progress_bar(   R¤   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRZ    s    c         S   s
   |  a  d  S(   N(   RK  (   t   val(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRY  #  s    c             s%   t  ˆ ˆ ˆ  ˆ d ˆ ƒ}  t a d  S(   NR[  (   Ri  R9   t   continue_status(   R   (   RY  RW  RZ  R[  RX  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   threaded_func)  s
    		i    s   content-length-downloads   size-downloads   %3.2f%%id   g+‡ÙÎ÷ï?iÜ  i   i   (   RY  Ri   R9   Rz  R(  t   coot_get_url_as_stringRq  Ru  Rn  RK  R;   R|  t   run_python_threadt   curl_progress_infoRZ  t   sleept   coot_real_exit(   R[  RY  Ri   R'  t   coot_urlR}  RM  t	   curl_infoRK  t   v2R	   (    (   RY  RW  RZ  R[  RX  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   update_self  sF    				


	
c           C   s   t  S(   N(   R[  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   use_curl_statusJ  s    c         C   s
   |  a  d  S(   N(   R[  (   RT   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   set_use_curlN  s    c            sp   d „  ‰  t  |  | | | ƒ } t | t j ƒ s4 t St ƒ  } t ‡  f d †  t | | ƒ Dƒ ƒ } | d k  Sd  S(   Nc         S   s   |  |  S(   N(    (   R7  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   squaref  s    c         3   s%   |  ] \ } } ˆ  | | ƒ Vq d  S(   N(    (   Rž   t   rcxt   scx(   R‰  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pys	   <genexpr>l  s    g      9@(   t   residue_centreR   R$   R   R9   R˜   R¢   t   zip(   R   R<   R=   R>   R  Rô  t   dist_sum_sq(    (   R‰  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt$   residue_is_close_to_screen_centre_qme  s    		%c            sY  d d  l  } d d l m } ‡  f d †  } t d „ ‰  t } t |  t ƒ rUt |  ƒ d k rU|  j ƒ  } d | d } | j | ƒ } | j	 | ƒ } ˆ  | d ƒ }	 t |	 t ƒ s*d	 G|	 GHˆ  | d
 ƒ }	 t |	 t ƒ sú d G|	 GH| | ƒ }
 t
 |
 ƒ Sd d |	 d } d |	 d } t | | ƒ qRd |	 d } |	 d } t | | ƒ qUn  | S(   Niÿÿÿÿ(   t   ElementTreec            s   ˆ  |  d t  ƒ S(   Ns	   #REDIRECT(   R;   (   t   xml(   t   parse_wiki_drug_xml(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   get_redirected_drug_namey  s    c   
      S   sð   t  j | ƒ } t } |  j d ƒ } | j d ƒ } t | ƒ d k rç | d j } | j d d ƒ } x… | j d ƒ D]l }	 | j	 |	 ƒ rt | t k rº |	 j d ƒ d } | sÝ t } qÝ qà |	 |	 j d	 ƒ d
 |	 j d ƒ !} qt qt Wn d GH| S(   Nt   queryt   revi    t   asciit   ignores   
Rå   iÿÿÿÿs   [[i   s   ]]s   Oops! len rev_text is 0(
   R¨  R©  R9   R=  t   getiteratorR   R5  t   encodeR¼   t   search(
   t   treeR  t   redirectt   key_ret   drug_bank_idt	   query_elet   rev_itert   rev_textt   decode_textRŸ   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR’  |  s     -i    sA   http://en.wikipedia.org/w/api.php?format=xml&action=query&titles=s   &prop=revisions&rvprop=contents   DrugBank  *= sB   BL WARNING:: mol_name not a string (DrugBank entry from wikipedia)s   PubChem  *= s9   BL WARNING:: mol_name not a string (pubchem entry either)s   http://pubchem.ncbi.nlm.nih.govs   /summary/summary.cgi?cid=s   &disopt=DisplaySDFs   pc-s   .molsB   http://www.drugbank.ca/structures/structures/small_molecule_drugs/(   t   urllib2t	   xml.etreeR�  R9   R   Ru   R   t   lowerRo  t   parset   get_drug_via_wikipediat   coot_get_url(   t   drug_name_inR£  R�  R“  R¤   t	   drug_nameR'  R‘  t   xml_treet   mol_namet   redirected_drug_namet
   pc_mol_urit
   db_mol_uri(    (   R’  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR§  s  s6    		

c         C   s[  t  |  t ƒ s t St |  ƒ } t  | t ƒ r2 | St j j d d |  d ƒ } d |  d } t d ƒ t j j | ƒ râ t j	 | ƒ j
 } | d k rÃ t | ƒ t |  ƒ } t  | t ƒ rß | Sqâ | d d } t | ƒ t Sn  d G| GHt | | ƒ } | d k r*d	 | d
 | d } t | ƒ t St | ƒ t |  ƒ } t  | t ƒ rS| St Sd  S(   Ns   coot-downloads   PDBe-s   .cifs;   ftp://ftp.ebi.ac.uk/pub/databases/msd/pdbechem/files/mmcif/i    s    exists but is empty.s   
Not overwriting.s   BL INFO:: getting url:s   Problem downloading
s   
 to file 
RÑ   (   R   Ru   R9   t   SMILES_for_comp_idRC   RD   RE   RG   R    t   statt   st_sizeRì  Rq  R¨  (   Rú  Rý   Rñ  R'  t   lt   s2t   msgt   state(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt    get_SMILES_for_comp_id_from_pdbe¿  sB    


	

c         C   s¯  d d l  } t j d ƒ } | s{ t ƒ  rW t j j t j j t j d d d ƒ ƒ } q{ t j j t j d d d d ƒ } n  t j j	 | ƒ r«t j j | |  ƒ } t j j
 | ƒ sÁ t d ƒ q«t j d	 ƒ } t ƒ  rë t j d
 ƒ } n  t | t ƒ r«t j j | d ƒ } t j j	 | ƒ s.t | ƒ n  t j j | |  ƒ } t j j | ƒ rpd | d } t | ƒ q¨| j | | ƒ t j j | ƒ r¨t | t ƒ  ƒ q¨q«n  d S(   s[   Copy the file filename from python pkgdatadir directory to
    prefereneces directory.
    iÿÿÿÿNt   COOT_PYTHON_DIRt   libs   site-packagest   coots	   python2.7s(   Missing reference template key bindings.R”  R•  s   .coot-preferencess   keybinding file s!    already exists. Not overwritten.(   Rã  RC   R–  R  RD   R  RE   Rº   R\  Rb   t   existsR&   R   Ru   RG   R    t   copyfilet   execfilet   globals(   R   Rã  t   coot_python_dirt   ref_pyR™  t   pref_dirt	   pref_fileRý   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   file_to_preferencesú  s4    	$	c          C   s=   t  }  t ƒ  r t d ƒ }  n  |  s9 t ƒ  j d ƒ }  n  |  S(   Ns   (defined? 'coot-main-menubar)t   coot_python(   R9   R  R  R¾  R   (   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt	   using_gui*  s    	c           C   s   t  d ƒ t ƒ  d  S(   Ni   (   t   set_do_GL_lightingt   do_GL_lighting_state(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   GL_light_on>  s    
c           C   s   t  d ƒ t ƒ  d  S(   Ni    (   RÆ  RÇ  (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   GL_light_offD  s    
c         C   sb   x[ t  |  ƒ D]M } t |  | d ƒ } t |  | t | |  ƒ d ƒ } t |  | | | | ƒ q Wd  S(   Ni    i   (   R  Ry  R~  t   set_b_factor_residue_range(   R   t   bvalR<   t	   start_rest   end_res(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   set_b_factor_moleculeM  s    c         C   se   x^ t  |  ƒ D]P } t |  | d ƒ } t |  | t | |  ƒ d ƒ } t |  | | | t ƒ  ƒ q Wd  S(   Ni    i   (   R  Ry  R~  RÊ  t   default_new_atoms_b_factor(   R   R<   RÌ  RÍ  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   reset_b_factor_moleculeV  s    c          C   sp   t  ƒ  }  |  s d GHnU |  d } |  d } |  d } |  d } |  d } |  d } t | | | | t ƒ  ƒ d  S(   Ns   No active atomi    i   i   i   i   i   (   R%   RÊ  RÏ  (   R"   R   R<   R=   R>   R?   R@   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   reset_b_factor_active_residue_  s    	





c            sª  d d  l  } d d  l } d  a t } | j j |  ƒ rF | j j |  ƒ S| j d k r� d d  l	 } | j
 d |  ƒ } | j j | ƒ r� | Sn  t | ƒ d k r¨ | } n d | j ƒ  g } g  }	 d g }
 |  ‰  | j d k r?t ƒ  }
 t |  ƒ ‰  t |  ƒ } | r| g }	 q?| j d j | j ƒ } t d	 „  | ƒ }	 n  d
 | k re| d
 re| d
 }	 qen  d | k r‚|	 | d 7}	 n  d | k r›| d } n  ˆ  g } |	 rÒt ‡  f d †  |	 ƒ } | ˆ  g 7} n  xû | D]ó } xê | D]â } | j j | ƒ r>| j j | | ƒ } | j j | ƒ rÈ| r7d G| GHn  | Sqæyn | j | } xZ | j | | j ƒ D]C } | j j | | ƒ } | j j | ƒ rd| r£d G| GHn  | SqdWWqæ| rÈd | GHqÈqæXqæWqÙWd | k ré| d } n t } t a t r| rt |  | ƒ a n  t r|xq |
 D]T } xK | j | ƒ D]: \ } } } | j j | |  ƒ } | j j | ƒ r7| Sq7Wq!Wn | rŽd Gˆ  GHn  | r¦d ˆ  ˆ  f GHn  t S(   Niÿÿÿÿt   posixs   which i    RÃ   Rt   RÍ   RÎ   c         S   s   |  d S(   Ni   (    (   RÏ   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   ²  s    RÆ   t   add_extensionRÇ   RÅ   c            s   ˆ  d |  S(   NRÑ   (    (   RÏ   (   t   program_name_noext(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÐ   ¿  s    s   BL INFO:: We found s   BL WARNING:: %s not defined!RÄ   s,   BL INFO:: we don't search the whole disk fors>   BL WARNING:: We cannot find %s anywhere! Program %s won't run!(   RC   R•   R¯   t   search_diskR;   RD   R    R$  RÓ   t   commandst	   getoutputR   R3  t   get_windows_drivesRÕ   RÔ   RÖ   R¼   R×   RØ   Rb   RE   R9   R  t   search_disk_dialogt   walk(   t   program_nameR   R³   RC   R•   t   infoRÖ  Rß   t   path_lsRÙ   t	   drives_lsRÚ   RÛ   RÜ   R¤   t   search_pathRÝ   RD   t	   no_searcht   driveR  Rl   Rê   (    (   RÔ  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRÈ   …  s�    			
		c         C   sF   d d  l  } y | j |  d d ƒ Wn d |  | j ƒ  f GHn Xd  S(   Niÿÿÿÿi   s5   BL WARNING:: Cannot open the URL %s in webbrowser %s!(   t
   webbrowserR¡   R®   (   R'  Râ  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   open_url÷  s
    c         C   s>   d d  l  } | j d ƒ } | j j | |  ƒ } t | ƒ d  S(   NiÿÿÿÿR¸  (   RC   R–  RD   RE   R½  (   RÓ   RC   RD   Rê   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   reload_module  s    c          G   s   x |  D]
 } | Gq Wd  S(   N(    (   R   R*   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR�    s    c         C   s   t  t |  ƒ d  S(   N(   RØ   R�  (   R‘   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   printl  s    c         C   sm  d d  l  } d d  l } d d  l } | j \ } }	 }
 } } d } t |  ƒ sc d G|  Gd GHd GHn t |  d d ƒ } | r\| d k r6|	 d	 k r6d d  l } | g | } | } | rÊ t | d
 ƒ } n  | j | d | j	 d | ƒ} | rx% | D] } | j
 j | d ƒ qõ Wn  | j } | r/| | f S| Sqi| j | j | | g | ƒ } | Sn d |  GHt Sd  S(   NiÿÿÿÿR”   s   command s    not found in $PATH!s5   BL INFO:: Maybe we'll find it somewhere else later...Rá   RÃ   i   i   Râ   Rã   R¨   s   
s8   WARNING:: could not find %s, so not running this program(   Rº   R•   RC   R»   RÌ   RÈ   R©   R¡   Rª   R«   Rã   Ræ   t   pidt   spawnvt   P_NOWAITR9   (   R·   R   Rí   t   logfileRï   Rº   R•   RC   R½   R¾   R¿   RÀ   RÁ   Rð   R©   Rò   Rñ   R´   Ró   Ræ  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   run_concurrently  s4    $	
	c          C   s-   d d  l  }  d |  j j ƒ  k r% t St Sd  S(   Niÿÿÿÿt   pygtk(   Rº   t   modulesR  R;   R9   (   Rº   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   coot_has_pygtkI  s    c          C   s-   d d  l  }  d |  j j ƒ  k r% t St Sd  S(   Niÿÿÿÿt   gobject(   Rº   Rì  R  R;   R9   (   Rº   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   coot_has_gobjectS  s    c         C   sî   d d  l  } d d  l } d d  l } | j d k rÄ yƒ | j \ } } } } } | d k rŽ | d k rŽ d d  l }	 |	 j d |  d t ƒ}
 n | j d |  ƒ }
 |
 d k r± t St	 SWqê t	 SXn& y | j
 |  | j ƒ t SWn t	 SXd  S(   NiÿÿÿÿRÍ   i   i   s   taskkill /F /PID %it   shelli    (   RC   Rº   t   signalRÓ   R»   R©   t   callR;   t   systemR9   t   killt   SIGKILL(   Ræ  RC   Rº   Rñ  R½   R¾   R¿   RÀ   RÁ   R©   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   kill_process^  s(    c          C   s*   t  ƒ  }  |  d k r t ƒ  n t ƒ  d  S(   Ni    (   t   stereo_mode_statet   hardware_stereo_modet	   mono_mode(   t   display_state(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   stereo_mono_toggle  s    	
c          C   s-   t  ƒ  }  |  d k r" t d ƒ n t ƒ  d  S(   Ni    (   R÷  t   side_by_side_stereo_modeRù  (   Rú  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   side_by_side_stereo_mono_toggle†  s    	c          C   s*   t  ƒ  }  |  d k r t ƒ  n t ƒ  d  S(   Ni    (   R÷  t   zalman_stereo_modeRù  (   Rú  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   zalman_stereo_mono_toggle�  s    	
c          C   s   d t  ƒ  }  t |  ƒ d  S(   Ng      ð¿(   t"   hardware_stereo_angle_factor_statet    set_hardware_stereo_angle_factor(   t   factor(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   switch_stereo_sides”  s    c         C   s5   |  r, |  j  ƒ  r t d ƒ q1 t d ƒ n d GHd S(   sx    Toggle between full screen and window mode

    Keyword arguments:
    widget -- can be passed from the toolbutton
    i   i    s   BL WARNING:: no widgetN(   t
   get_activet   full_screen(   t   widget(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   toggle_full_screen˜  s
    c       
   C   s;   t  ƒ  �, \ }  } } } } } t |  | | | ƒ Wd  QXd  S(   N(   R8   t   split_water(   R   R   R   R   R   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   split_active_water©  s    c         C   s   d d l  } t |  | j ƒ S(   sZ   
    helper function to test for a number
    returns True if number, otherwise False
    iÿÿÿÿN(   t   numbersR   t   Number(   t   numR
  (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   isNumber°  s    c         C   så   t  |  ƒ g  } x3 t |  ƒ D]% } t |  | ƒ r | j | ƒ q q Wt | ƒ d k rá | d } t | |  ƒ } xm | d D]^ } t | |  ƒ } t |  | d | | ƒ | d } | | } t |  | | d | | ƒ | } q| Wn  d  S(   Ni   i    (   t   renumber_watersR  R»  R   R   R~  R  R]  (   R   t   solvent_chainsR<   t   master_chaint   last_prev_waterR2  t	   new_startt   new_end(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   merge_solvent_chains»  s"    





c          G   sÃ   d d l  m } |  d } t | ƒ r6 |  d j } n t | ƒ } | d 7} xf |  d D]Z } t | ƒ | k r„ | d | d 7} n | t | ƒ 7} | |  d k sW | d 7} qW qW W| d 7} | S(	   Niÿÿÿÿ(   R_   i    t   (i   s   "s   , R  (   R$   R_   t   callableR4   Ru   R'   (   R   R_   R
   R   R*   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   cmd2strÕ  s    


c         C   sî   t  |  | | | ƒ } | d k rÕ t |  | | | ƒ } g  } x‰ t t | ƒ ƒ D]u } | | d d }	 | | d d }
 xH | D]@ \ } } |	 | k r€ | j |  | | | |
 |	 d | g ƒ q€ q€ WqO Wt | ƒ n d G|  G| G| G| GHd S(   s£   
    Function to change the occupancies of alternative conformations
    alt_conf_list is a list of alt_conf string and occ,
    e.g. [["A", 0.8], ["B", 0.2]]
    i   i    R4  s!   BL INFO:: no alt confs in residueN(   R1  R  RW   R   R   Rˆ  (   R   R<   R=   R>   t   alt_conf_listR0  R,  t   change_listR†   R-  R?   t   alt_conf_namet   alt_conf_occ(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   set_alt_conf_occì  s    c           C   s   t  j d k S(   NRÍ   (   RC   RÓ   (    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR    s    c          C   se   d d l  m }  g  } |  j j ƒ  } x9 t j D]. } | d @rS | j | d ƒ n  | d L} q/ W| S(   Niÿÿÿÿ(   t   windlli   s   :\(   t   ctypesR  t   kernel32t   GetLogicalDrivesR•   t	   uppercaseR   (   R  t   drivest   bitmaskt   letter(    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyRØ  	  s    
c         C   s6   t  |  ƒ t |  ƒ t |  ƒ t |  ƒ t |  ƒ d S(   sŠ   clean up pdb file (imol)
    a wrapper for fix_nomenclature errors, sort chains, residues, merge
    solvent chains, renumber waters, etc.N(   t   fix_nomenclature_errorsR  R  t   sort_chainst   sort_residues(   R   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt	   clean_pdb  s
    



c            s)   d t  j f ‡  ‡ ‡ f d †  ƒ  Y‰  d  S(   Nt   MyThreadc              s&   e  Z d  „  Z ‡  ‡ ‡ f d †  Z RS(   c         S   s   t  j j |  ƒ d  S(   N(   t	   threadingt   ThreadR/   (   R.   (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR/   9  s    c            sE   t  j ƒ  } | j ƒ  z ˆ ˆ Œ  a Wd  | j ƒ  ˆ  ƒ  j ƒ  Xd  S(   N(   R*  t   Lockt   acquiret   python_thread_returnt   releaseR·  (   R.   t   python_return_lock(   R)  R   t   function(    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   run;  s    

(   R4   R5   R/   R2  (    (   R)  R   R1  (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR)  8  s   	(   R*  R+  (   R1  R   (    (   R)  R   R1  sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyR  6  s    Rø  (    (    (    (Ð   R¨  R•   R  t    default_ball_and_stick_selectionR9   t
   have_mingwRC   R–  R;   t   user_defined_alert_smartsR   R   R,   R-   R7   R8   RB   RL   RN   RI   t   post_manipulation_scriptRV   R\   R^   Rg   Rs   Rw   Ry   Rz   R|   R}   R~   R€   Rƒ   R‡   RŠ   RŒ   R�   R“   R–   R˜   Rœ   R§   R¹   RÂ   R¯   RÌ   Rà   t   gtk_thread_return_valueRR   Rû   RÕ   RÔ   R  R  R  R  R  R  R  R  R  R!  R&  R)  R-  R.  R0  R6  RL  RN  RQ  RS  RV  t   move_molecule_hereRW  R]  Rm  Rq  Rt  Rw  R€  R‡  R‹  R”  R˜  Rª  R²  R´  Rµ  R  R»  R½  R¿  RZ   RY   RÁ  RÃ  RÅ  RÇ  RË  RÍ  RÎ  RÐ  Rß  Rç  Rê  Rí  Rð  Rò  Ró  Rô  R  R   R  R  R&  R*  RÔ  R/  R1  R6  R8  R9  R:  R=  R?  RD  RF  RH  Rm  Rs  R{  R}  R  R€  RŒ  RŽ  R�  R“  R£  R¦  R¯  RÁ  RÂ  RÌ  t   highlight_binding_siteRÝ  Rá  RÞ  Rå  R  R  R  R  R  R   RK  R(  Ri  Rn  Rq  Ru  Rv  Ry  R†  R‡  Rˆ  R�  R§  R·  RÃ  t   find_terminal_residue_typet   find_aligned_residue_typeRÅ  RÈ  RÉ  RÎ  RÐ  RÑ  RÈ   Rã  Rä  R�  Rå  Rê  Rí  Rï  Rö  Rû  Rý  Rÿ  R  R  R	  R  R  R  R  R  RØ  R(  t   merge_water_chainsR  R*  R.  R  t	   use_mogul(    (    (    sQ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/coot_utils.pyt   <module>   s¨  				>$		
	
																
	
	
	
					
		/H		
											
						
	2							,								*																					c								
		! 	+														e		
					,					F	!		!	J			'			H							è					?				L	;	.									&	r	
			,	
		!												