ó
©%�Tc           @   s|   d  a  d a 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 S(   t   pisas   v1.13c         C   s½   t  ƒ  } | s* d t d } t | ƒ n� t d |  ƒ \ } } } t | d d | g g  d t ƒ } | d k r| t d ƒ n= t | d d	 d g g  | t ƒ } | d k r¹ t |  | ƒ n  d  S(
   Ns-   Your pisa version it too old.  Need at least t   .t
   assembliesR    s   -analyses   pisa.logi    sB   Ooops PISA failed to deliver the goods!

(Go for a curry instead?)s   -xml(   t   pisa_new_enough_qmt   pisa_min_versiont   info_dialogt   prep_for_pisat   popen_commandt   Falset   pisa_assemblies_xml(   t   imolt   pisa_exet   msgt   pdb_file_namet   pisa_configt   pisa_xml_file_namet   status_1t   status_2(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   pisa_assemblies   s    	c         C   s’   d d l  m } d d  l } | j j | ƒ rŽ d G| GH| ƒ  } t | ƒ } | rŽ | j | ƒ | | k r{ | j | ƒ n  t |  | ƒ qŽ n  d  S(   Niÿÿÿÿ(   t   ElementTreet   opened(	   t   xml.etree.ElementTreeR   t   ost   patht   isfilet   clean_xml_filet   parset   removet   parse_pisa_assemblies(   R
   t	   file_nameR   R   t   smt   xml_file(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyR	   (   s    		c         C   s7  t  j j |  ƒ r/t |  d ƒ } | j ƒ  } | j ƒ  d | d d d !k se d | d d d !k ri |  Sg  } d } xz | D]r } d | d d !k s¨ d | d d !k rµ | d 7} n  | d k rÑ | j | ƒ n  | d k r| | j | ƒ Pq| q| W| r(d	 } t | d
 ƒ } | j | ƒ | j ƒ  | St Sn t Sd  S(   Nt   rs   <pisa_i    i   s   <pdb_i   i   i   s   xml-tmp.xmlt   w(	   R   R   R   t   opent	   readlinest   closet   appendt
   writelinesR   (   t   filenamet   fint   linest	   new_linest   start_writet   linet   tmp_filet   fout(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyR   :   s4    

c            s�   d „  ‰ d „  ‰ t  d ƒ \ ‰ ‰  ‡  ‡ f d †  } ‡  ‡ f d †  } ‡ ‡ ‡ ‡ ‡ f d †  } ˆ d k s{ ˆ d k r… | ˆ ƒ St Sd  S(	   Nc         S   s¸   d |  k r¬ |  |  j  d ƒ d } d | k r´ | | j  d ƒ d } | d | j  d ƒ !} |  d |  j  d ƒ !} | d k r“ d | d | } n d | d | } | Sn d |  Sd  S(	   Nt   ]i   t   :i    t   -s   // /t   /s   //(   t   find(   t   chain_id_rawt   st   residue_stringt   chain_stringt   element_stringt   atom_selection_string(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   pisa_make_atom_selection_stringm   s    
c         S   sn   g  } xa |  D]Y } t  d „  | Dƒ ƒ } | d s@ d | d <n  t | d ƒ d k r | j | ƒ q q W| S(   Nc         s   s!   |  ] } | j  | j f Vq d  S(   N(   t   tagt   text(   t   .0t   ele(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pys	   <genexpr>�   s    t   ins_codet    t   bsagš™™™™™¹?(   t   dictt   floatR%   (   t   residues_xmlt   residuest   residuet   res_dic(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   handle_residues�   s    
i   c            s†  t  d „  |  Dƒ ƒ } d  } | ˆ k rC d d  l } | j ƒ  } n( | ˆ  k rg d d  l } | j } n t S| j d | d ƒ | j d | d ƒ | j d | d ƒ | j d	 | d
 ƒ | j d | d ƒ | j d | d ƒ | j d | d ƒ | j d | d ƒ | j d | d ƒ | j d | d ƒ | j d t |  j d ƒ ƒ ƒ | ˆ k r‚| j	 ƒ  } | j
 ƒ  n  | S(   Nc         s   s!   |  ] } | j  | j f Vq d  S(   N(   R;   R<   (   R=   R>   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pys	   <genexpr>Ÿ   s    iÿÿÿÿs   [molecule: id %s
t   ids    molecule: chain-id %s
s   chain-ids    molecule: class %s
t   classs    molecule: symop %s
t   symops    molecule: symop-no %s
s   symop-nos    molecule: natoms %s
t   natomss    molecule: nres %s
t   nress    molecule: area %s
t   areas    molecule: solv-en %s
s   solv-ens    molecule: pvalue %s
t   pvalues    molecule: with %s residues]
RE   (   RB   t   Nonet   StringIOt   syst   stdoutR   t   writet   lent   getiteratort   getvalueR$   (   t
   record_xmlt   portt   rec_dict   retRQ   t   outRR   (   t   STDOUTt   STRING(    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   print_molecule�   s0     c            s'  t  d „  |  Dƒ ƒ } d  } | ˆ k rC d d  l } | j ƒ  } n( | ˆ  k rg d d  l } | j } n t S| j d | d ƒ | j d | d ƒ | j d | d ƒ | j d	 | d
 ƒ | j d | d ƒ | j d | d ƒ | j d | d ƒ | ˆ k r#| j ƒ  } | j ƒ  n  | S(   Nc         s   s!   |  ] } | j  | j f Vq d  S(   N(   R;   R<   (   R=   R>   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pys	   <genexpr>À   s    iÿÿÿÿs   [residue: ser-no %s,
s   ser-nos
    name %s,
t   nams    seq-num %s,
s   seq-nums    ins-code %s,
s   ins-codes	    asa %s,
t   asas	    bsa %s,
RA   s    solv-en %s]
s   solv-en(	   RB   RP   RQ   RR   RS   R   RT   RW   R$   (   RX   RY   RZ   R[   RQ   R\   RR   (   R]   R^   (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   print_residue¾   s(    c            s‰  t  d „  ˆ Dƒ ƒ } d d d d d d d d	 d
 d d d g } d d g } g  } d } d } | d } ˆ | ƒ } | | k r� d | } n | } x+ | D]# } | j | t | | ƒ g ƒ qš W| j d ƒ rò ˆ j d ƒ }	 ˆ  |	 ƒ | d <n  t | ƒ d k st St d „  | ƒ }
 d t ˆ ƒ d | } t	 ˆ | | |
 d d d g Œ } ˆ d k rd| Sˆ d k r�| | d | g St Sd  S(   Nc         s   s!   |  ] } | j  | j f Vq d  S(   N(   R;   R<   (   R=   R>   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pys	   <genexpr>ß   s    t   rxxt   rxyt   rxzt   ryxt   ryyt   ryzt   rzxt   rzyt   rzzt   txt   tyt   tzRO   RE   s   //R@   t   chain_ids   chain RF   i   c         S   s   |  d S(   Ni   (    (   t   sym(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   <lambda>  s    s   Symmetry copy of s    using i    R   t
   interfacesRK   (
   RB   R%   RC   t   has_keyRV   RU   R   t   mapt   strt,   new_molecule_by_symmetry_with_atom_selection(   t   molecule_xmlt   mol_dict   rtop_symbolst   extra_symbolst   ass_rtop_symbolsR9   t   symm_name_partR4   t   symbolRE   t   matt   new_molecule_namet
   new_mol_no(   RH   R
   t   moleculeR:   t   pisa_results_type(    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   process_molecule_internalÛ   s@    
!
R   Rr   (   t   rangeR   (   R
   R�   R‚   R_   Rb   Rƒ   (    (   R]   R^   RH   R
   R�   R:   R‚   sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   pisa_handle_xml_moleculeh   s    	 	!D
c            sü   d d „ ‰ t  d ƒ \ ‰ ‰  ‡  ‡ f d †  } d „  } ‡ f d †  ‰ ‡ ‡ f d †  } t } t } | j d ƒ } xT | D]L } | | ƒ \ }	 }
 | s¬ | |
 ˆ ƒ } n  | rÂ t |	 d	 ƒ q| t } q| W| rè d
 G| GHd | } n d } t | ƒ d  S(   NR@   c         S   sZ   |  s
 t  St |  d ƒ } t | ƒ s* t  S|  d } t | | ƒ t | d | ƒ | Sd  S(   Ni    i   s   Assembly Set (   R   t   copy_moleculet   valid_model_molecule_qmt   merge_moleculest   set_molecule_name(   t   assembly_set_molecule_numberst   assembly_set_numbert
   first_copyt   rest(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   create_assembly_set_molecule\  s    
i   c            sV  |  } d  } | ˆ k r3 d d  l } | j ƒ  } n( | ˆ  k rW d d  l } | j } n t S| j d | d ƒ | j d | d ƒ | j d | d ƒ | j d | d	 ƒ | j d
 | d ƒ | j d | d ƒ | j d | d ƒ | j d | d ƒ | j d | d ƒ | j d | d ƒ | ˆ k rR| j ƒ  } | j ƒ  n  | S(   Niÿÿÿÿs   assembly id: %s
RI   s   assembly size: %s
t   sizes   assembly symm-number: %s
t	   symNumbers   assembly asa: %s
Ra   s   assembly bsa: %s
RA   s   assembly diss_energy: %s
t   diss_energys   assembly entropy: %s
t   entropys   assembly diss_area: %s
t	   diss_areas   assembly int_energy: %s
t
   int_energys   assembly components: %s
R�   (   RP   RQ   RR   RS   R   RT   RW   R$   (   t   recordRY   RZ   R[   RQ   R\   RR   (   R]   R^   (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   print_assemblyo  s.    c         S   s   |  S(   N(    (   t   assembly_molecule_numbers(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   create_assembly_molecule‘  s    c            s–   g  } t  d „  |  Dƒ ƒ } |  j d ƒ } x- | D]% } t ˆ  | d ƒ } | j | ƒ q2 W| | d <x* | D]" } t | ƒ rl t | d ƒ ql ql W| S(   Nc         s   s!   |  ] } | j  | j f Vq d  S(   N(   R;   R<   (   R=   R>   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pys	   <genexpr>›  s    R�   R   i    (   RB   RV   R…   R%   R‡   t   set_mol_displayed(   t   assemblyR—   t   assembly_dict	   moleculesR�   t   mol_no(   R
   (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   handle_assembly™  s    
c            sB   |  j  d ƒ } ˆ | ƒ } | d } ˆ  | | d ƒ } | | f S(   NRš   R�   RI   (   R3   (   t   assembly_sett   assembly_recordst   assembly_recordt   assembly_set_moleculest   new_mol(   RŽ   Rž   (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   handle_assembly_set­  s    
t   asm_seti    s   top assembly-set:
s   top assembly-set: 

s   no assembly-sets found(   R„   R   RV   R™   t   TrueR   (   R
   t   entityR–   R˜   R¤   t*   first_assembly_set_is_displayed_already_qmt   top_assembly_setR   t   asst   molecule_numbert   assembly_record_setR5   (    (   R]   R^   RŽ   Rž   R
   sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyR   X  s*    "	
	c         C   s6  t  j d ƒ } t  j j | ƒ r2d t  j j | d d ƒ g d t  j j | d d ƒ g d t  j j | d d ƒ g d |  g d	 t  j j | d d ƒ g d
 t  j j | d d ƒ g d t  j j | d d ƒ g d d g g } t | d ƒ } x8 | D]0 } | j | d d ƒ | j | d d ƒ qñ W| j ƒ  n  d  S(   Nt   CCP4t	   DATA_ROOTt   shareR    t   SRS_DIRt   ccp4srst   PISTORE_DIRt   PISA_WORK_ROOTt
   MOLREF_DIRt
   RASMOL_COMt   bint   rasmolt
   CCP4MG_COMt   ccp4mgt   SESSION_PREFIXt   pisa_R!   i    s   
i   (   R   t   getenvR   t   isdirt   joinR"   RT   R$   (   t   pisa_coot_dirt   config_file_nameR5   t   lsR(   t	   item_pair(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   make_pisa_configÑ  s    	c         C   s×   d „  } t  | ƒ rÓ d } | | ƒ } t j j | | d ƒ } t j j | | d ƒ } t j j | | d t |  ƒ d ƒ } t | ƒ t | | ƒ t | | ƒ t j j | ƒ rÃ | | | f St	 t	 t	 f Sn  d  S(   Nc         S   s   t  t j j t |  ƒ ƒ ƒ S(   N(   t   strip_extensionR   R   t   basenamet   molecule_name(   R
   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   make_stubbed_name÷  s    s	   coot-pisas   .pdbs	   -pisa.cfgR1   s   .xml(
   R‡   R   R   R¾   Ru   t   make_directory_maybeRÃ   t   write_pdb_fileR   R   (   t   modeR
   RÇ   R¿   t   stubbed_nameR   R   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyR   ô  s    	'
c         C   s   t  S(   N(   R   (   t   dir(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   cached_pisa_analysis  s    c          C   s½   t  s d a  n  t t  d d ƒ }  |  rµ d } t |  g  g  | ƒ } t | d ƒ } | j ƒ  } | j ƒ  t j | ƒ xB | D]3 } d | k r{ | j ƒ  d t	 k r§ |  St
 Sq{ q{ Wn t
 Sd  S(   NR    t   CCP4_BINt   PATHs   pisa-version.logR    s    vi    (   t   pisa_commandt   find_exeR   R"   R#   R$   R   R   t   splitR   R   (   R   R-   t   processR(   R)   R,   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyR     s     	
c         C   sË   t  ƒ  } | s* d t d } t | ƒ n� t d |  ƒ \ } } } | rÇ t | ƒ sÇ t | d d | g g  d t ƒ } | d k rÄ t | d d d g g  | t ƒ } | d k rÁ t |  | ƒ qÁ qÄ qÇ n  d  S(	   Ns,   Your pisa version it too old.  Need at leastR   Rr   R    s   -analyses   pisa-analysis.logi    s   -xml(   R   R   R   R   RÍ   R   R   t   pisa_interfaces_xml(   R
   R   R   R   R   R   R   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   pisa_interfaces/  s$    	c         C   s†   t  j j | ƒ s d | GHnd d d l m } | ƒ  } t | ƒ } | r‚ | j | ƒ | | k rr t  j | ƒ n  t |  | ƒ n  d  S(   Ns3   WARNING:: in pisa_interfaces_xml: %s does not existiÿÿÿÿ(   R   (	   R   R   R   R   R   R   R   R   t   parse_pisa_interfaces(   R
   R   R   R   R   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyRÔ   I  s    	c            sd   d „  ‰ ‡  ‡ f d †  ‰ ‡ f d †  } | j  d ƒ } x$ | D] } | | ƒ } t | ƒ q@ Wd  S(   Nc         S   sn   d „  } g  } |  j  } |  j d ƒ } x@ | D]8 } | | ƒ } | r. | j d | ƒ | j | ƒ q. q. W| S(   Nc   
      S   sä   t  d „  |  Dƒ ƒ } | d } | d } | d } | d } | d } | d } | d } | d	 }	 | o‡ | o‡ | o‡ | o‡ | o‡ |	 sŽ t S| s� d
 } n  | s¬ d
 } n  | t | ƒ | | d
 g | t | ƒ | |	 d
 g g Sd  S(   Nc         s   s!   |  ] } | j  | j f Vq d  S(   N(   R;   R<   (   R=   R>   (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pys	   <genexpr>Ô  s    s   chain-1s   chain-2s   seqnum-1s   seqnum-2s	   inscode-1s	   inscode-2s   atname-1s   atname-2R@   (   RB   R   t   int(
   t   bond_descriptiont   bond_dict
   chain_id_1t
   chain_id_2t   res_no_1t   res_no_2t
   ins_code_1t
   ins_code_2t   atom_name_1t   atom_name_2(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt
   parse_bondÒ  s&    







		t   bondi    (   R;   RV   t   insertR%   (   R§   Râ   t	   ret_bondst	   bond_typet   bondsRã   t
   atom_specs(    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   molecule_bondsË  s    		c   
         sâ   g  } g  } x? |  j  d ƒ D]. } t ˆ  | d ƒ } | r | j | ƒ q q Wx3 d d d d g D] } | ˆ |  j | ƒ ƒ 7} qa W|  j d ƒ j } |  j d ƒ j } |  j d	 ƒ j } |  j d
 ƒ j }	 | | | | | |	 g S(   NR�   Rr   s   h-bondss   salt-bridgess   ss-bondss	   cov-bondsRO   t   int_areat   int_solv_ent   stab_en(   RV   R…   R%   R3   R<   (
   t   interface_entityRœ   Rç   R�   t   molecule_infoRæ   RO   RN   t   solv_enRì   (   R
   Ré   (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   pisa_handle_xml_interfaceö  s    c            sF   g  } x9 |  j  d ƒ D]( } ˆ  | ƒ } | r | j | ƒ q q W| S(   Nt	   interface(   RV   R%   (   t   pdb_entry_entityRr   t   interface_xmlRñ   (   Rð   (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   pisa_handle_pdb_entry
  s    t	   pdb_entry(   RV   t   handle_pisa_interfaces(   R
   t
   xml_entityRô   t   pdb_entriest   pdb_entry_xmlRõ   (    (   R
   Ré   Rð   sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyRÖ   Ã  s    	+
N(   RÐ   R   R   R	   R   R…   R   RÃ   R   RÍ   R   RÕ   RÔ   RÖ   (    (    (    sU   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/parse_pisa_xml.pyt   <module>   s   	"		.	ð	y	#					z