ó
ÉÝ{Tc           @   sØ   d  Z  d d l Z d d l Td d l Td d l Z d d l Td d l Td d l Td d l Z d d l Z d d l	 Z	 d d l
 Z
 d d l Z d d l Z d e f d „  ƒ  YZ d f  d „  ƒ  YZ d f  d	 „  ƒ  YZ d S(
   s™  
     python/ui/Superpose.py: CCP4MG Molecular Graphics Program
     Copyright (C) 2001-2008 University of York, CCLRC
     Copyright (C) 2009-2010 University of York
     Copyright (C) 2012 STFC

     This library is free software: you can redistribute it and/or
     modify it under the terms of the GNU Lesser General Public License
     version 3, modified in accordance with the provisions of the 
     license to address the requirements of UK law.
 
     You should have received a copy of the modified GNU Lesser General 
     Public License along with this library.  If not, copies may be 
     downloaded from http://www.ccp4.ac.uk/ccp4license.php
 
     This program is distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU Lesser General Public License for more details.
iÿÿÿÿN(   t   *t	   Superposec           B   sP  e  Z dK Z i d  d 6d d 6d d 6d d 6d d 6d d	 6d
 d 6d d 6d d 6d d 6d d 6d d 6d d g d 6d d 6d d 6d d 6d d 6Z d d d d  d! g Z d d" d# d$ d% g Z i  d& „ Z d' „  Z d( „  Z	 d) „  Z
 d* „  Z d+ „  Z d, „  Z d- „  Z d. „  Z d/ „  Z d0 „  Z d1 „  Z d d2 „ Z d3 „  Z d4 „  Z d d d5 „ Z i  d6 „ Z d d7 „ Z d d8 „ Z d d d d d9 „ Z g  d: „ Z d; „  Z d d< „ Z d d d= „ Z d> „  Z d? „  Z  d@ „  Z! dA „  Z" dB „  Z# dC „  Z$ d dD „ Z% d dE d d d d d d d d dF „
 Z& dG „  Z' d dH „ Z( dI „  Z) dJ „  Z* RS(L   t   ssmt   methodt    t   fixedt   show_equiv_moli    t   show_equivalentsi   t   show_distancest	   show_masks    CA t   close_atoms_central_atomg       @t   close_atoms_res_cutoffg      ð?t   close_atoms_cutofft   close_atoms_initial_globalt   monomer_keep_matchest   catracet   selected_atoms_modet   CAt   CBt   selected_atoms_selectiont   apply_interactive_allt   blackt   conn_colourt   yellowt   fixed_mask_colourt   magentat   moving_mask_colours
   main chains   nucleic P,C1's   all equivalents   user definedt   maint   nucleict   allt   userc         K   s¦   |  t  _ i  |  _ x- t  j j ƒ  D] \ } } t |  | | ƒ q" Wt j |  d ƒ d d d g j |  j	 ƒ s„ |  j
 i d d 6ƒ n  |  j
 i d d 6ƒ |  j ƒ  d  S(   NR   R   t   closet   interactiveR   t	   submethod(   R   t   instst   supModelt   initialisationt   itemst   setattrt   Applicationt   __init__t   countR   t	   setparamst   initiallise_status(   t   selft   paramst   keywordst   keyt   value(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR(   H   s    		c         C   s‹   |  j  ƒ  xF |  j j ƒ  D]5 \ } } t | ƒ } | s | j ƒ  |  j | =q q Wx' t d d ƒ D] } |  j | j ƒ qc W|  j ƒ  d  S(   Nt   object_typet   MolData(	   t   set_default_fixedR#   R%   t   datat   deletet   get_dataobjt   add_MolDatat   namet   set_show_equiv_mol(   R,   t   modelR#   t   molobj(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR+   Y   s    

c         C   s¾   d d  l  } t | ƒ } | s. | j d k r2 d S|  j j | ƒ sf t |  | |  j d ƒ |  j | <n  |  j | d g |  j g ƒ |  j | d g |  j	 g ƒ |  j | d g |  j
 g ƒ d S(   NiÿÿÿÿR2   i   R5   t   renamet	   transformi    (   R:   R4   R1   R#   t   has_keyt   SuperposeModelR   t   add_dependencyt   handle_delete_MolDatat   handle_rename_MolDatat   handle_transform_MolData(   R,   t   molR:   R;   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR7   j   s     "c         C   s   |  j  j | d  ƒ S(   N(   R#   t   gett   None(   R,   R8   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   GetSuperposeModely   s    c         C   sN   |  j  j | d  ƒ } | rJ | d k rJ | t | j ƒ k  rJ | j | Sn  d  S(   Ni    (   R#   RE   RF   t   lent   matches(   R,   R8   t   imatcht   sm(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   GetSuperposeModelMatch|   s
    !c         C   sE   x' |  j  j ƒ  D] \ } } | j ƒ  q W|  j ƒ  t j |  ƒ d  S(   N(   R#   R%   t   handle_close_applicationt   drawR'   R   (   R,   R:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR   †   s    
c         C   sX   |  j  |  j ƒ |  j |  j ƒ x' |  j j ƒ  D] \ } } | j ƒ  q0 W|  j ƒ  d  S(   N(   t   set_show_equivalentsR   t   set_show_maskR	   R#   R%   t   handle_unclose_applicationRN   (   R,   R:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   unclose�   s
    c         C   s.   x' |  j  j ƒ  D] \ } } | j ƒ  q Wd  S(   N(   R#   R%   t   save_matches(   R,   R:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   Exitš   s    c         C   sN   x' |  j  j ƒ  D] \ } } | j ƒ  q Wg  t _ t j |  ƒ |  j ƒ  d  S(   N(   R#   R%   R5   R   R"   R'   t   delete_graphobj(   R,   R:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR5       s
    	c         C   s�   d d  l  } i  } x* t j j ƒ  D] } t |  | ƒ | | <q" Wi  | d <x1 |  j j ƒ  D]  \ } } | j ƒ  | d | <qY W| S(   Niÿÿÿÿt   superposeModels(   t   typesR   R$   t   keyst   getattrR#   R%   t	   getparams(   R,   RW   t   parsR/   R:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRZ   ª   s    
c         C   sþ   t  d d ƒ } g  } x | D] } | j | j ƒ q W| j |  j ƒ r[ | j |  j ƒ n	 d |  _ | j |  j ƒ r‰ | j |  j ƒ n	 d |  _ |  j rÎ t | ƒ d k rÎ | d |  _ | j |  j ƒ n  |  j rú t | ƒ d k rú | d |  _ n  d  S(   NR1   R2   R   i    (   R6   t   appendR8   R)   R   t   removeR   RH   (   R,   t   objlistt   namelistt   obj(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR3   º   s     		 c         C   s¤   x9 |  j  j ƒ  D]( \ } } | |  j k r | j ƒ  q q W| r— | |  j k r— | |  _ |  j ƒ  x0 |  j  j ƒ  D] \ } } | j |  j ƒ qt Wn  d |  _ d  S(   Ni   (   R#   R%   R   RS   R3   t	   set_fixedt	   do_redraw(   R,   R   R:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRa   Ð   s    	
c         C   s¨   | r% | |  j  k r d S| |  _ n  x| |  j j ƒ  D]k \ } } | j t |  j o_ | |  j k ƒ ƒ | j t |  j o� |  j  |  j g j	 | ƒ ƒ ƒ d | _
 q5 Wd  S(   Ni   (   R   R   R#   R%   t   set_show_connectivityt   intR   RP   R	   R)   Rb   (   R,   R   R:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR9   ß   s     %1c         C   sF   | |  _  |  j rB |  j |  j j |  j  ƒ d |  j |  j _ n  d  S(   Ni   (   R   R   R#   Rc   Rb   (   R,   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRO   ë   s    		c         C   sG   | |  _  x7 |  j |  j f D]# } | r |  j | j | ƒ q q Wd  S(   N(   R	   R   R   R#   RP   (   R,   R	   R:   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRP   ô   s    	 c         C   s3   t  |  | | ƒ |  j r/ d |  j |  j _ n  d  S(   Ni   (   R&   R   R#   Rb   (   R,   t   modet   colour(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt
   set_colourü   s    	c         K   s  | j  | ƒ d G| GHxQ | j ƒ  D]C \ } } d d g j | ƒ r# t | ƒ rf t |  | | ƒ qf q# q# Wx¢| j ƒ  D]”\ } } | d k rx)| d j ƒ  D]i \ } } t | ƒ } | r  |  j j | ƒ sò t |  | |  j d ƒ |  j | <n  |  j | j	 | ƒ q  q  Wn«| d k r¯| |  j
 k r¯|  j
 d k rgx* |  j j ƒ  D] \ } } | j ƒ  qJWn  | |  _
 |  j
 d k r»x* |  j j ƒ  D] \ } } | j ƒ  q�Wq»n| d k rüd	 d  l }	 t | |	 j ƒ ré|  j | ƒ q»t |  | | ƒ n¿ | d
 k rž| j ƒ  d d !}
 t |
 ƒ d k r:d |
 }
 q»t |
 ƒ d k r]d |
 d }
 q»t |
 ƒ d k r€d |
 d }
 q»t |
 ƒ d k r»d }
 q»n d G| G| GHt |  | | ƒ d d g j | ƒ rw |  j
 d k rw x) |  j j ƒ  D] \ } } d | _ qïWqw qw Wd  S(   Ns   Superpose.setparamsR   R   RV   i   R   R    R   iÿÿÿÿR
   i    i   t    i   s     s    CA t   setR   (   t   updateR%   R)   R4   R&   R#   R>   R?   R   R*   R   t   clear_Connectivity2t   update_Connectivity2RW   t
   isinstancet
   StringTypet   set_user_selected_atomst   stripRH   Rb   (   R,   R-   t   kwR/   R0   R:   R[   R;   R#   RW   t   atnam(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR*     sT    	 "	$c         K   s   |  j  j | ƒ s d  Sd  S(   N(   R#   R>   (   R,   t   masterR.   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRB   ?  s     c         K   s\   |  j  j | ƒ r0 |  j  | j ƒ  |  j  | =n  |  j |  j g j | ƒ rX |  j ƒ  n  d  S(   N(   R#   R>   R5   R   R   R)   R3   (   R,   Rs   R.   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRA   E  s
    c         K   s/   |  j  j |  j ƒ r+ d |  j  |  j _ n  d  S(   Ni   (   R#   R>   R   Rb   (   R,   Rs   t   mol1t   mol2t   hideR.   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRC   R  s    c         C   s   d  S(   N(    (   R,   t
   saved_list(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   handle_saved_filesZ  s    c   
      K   sµ  |  j  s t ƒ  j d ƒ d Sd } d } d } |  j d k ré xj|  j j ƒ  D]” \ } } | |  j  k rN | j rN |  j d k rš | j ƒ  d d g } n | j	 ƒ  } | d d k rÃ | d } qâ d } } | | d d } qN qN WnÂ|  j d	 k r{x°|  j j ƒ  D]l \ } } | |  j  k r| j r| j
 ƒ  } | d d k rU| d } qt| d } | | d d } qqWn0|  j d
 k r«|  j j |  j d  ƒ } | s¬d  S|  j rc| j ƒ  }	 xä |  j j ƒ  D]‹ \ } } | |  j  k rÑ| j rÑ| |  j k r| j |	 ƒ n  | j ƒ  } | d d k r=| d } q\| d } | | d d } qÑqÑWq«| j ƒ  } | d d k rŒ| d } q«| d } | | d d } n  | | g S(   Ns   Need to select a fixed modeli   i    R   R   t   gesamtt   OKs   
R   R    (   R   t   MGGUIt   WarningMessageR   R#   R%   t   onR!   t   superpose_Gesamtt   superpose_SSMt   superpose_CloseRE   R   RF   R   t   get_matchest   set_matchest   superpose_Matched(
   R,   Rq   t   nMovedt   output_textt   rvR:   R#   t   rct   movingSupModelRI   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   apply`  s\    	


 	 

c         C   sP   d |  _  | r | g } n |  j j ƒ  } x | D] } |  j | j ƒ  q1 Wd  S(   NR   (   t   gesamt_matchesR#   RX   t   superpose_undo(   R,   RD   t   mollist(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   undoš  s    	c         C   s‚   d d  l  } |  j j | ƒ s" d  S| d k rB |  j | j ƒ  n< | d k ra |  j | j } n  |  j | j d t | ƒ ƒ d  S(   NiÿÿÿÿR�   t   bestt   match(   R:   R#   R>   R‹   t
   best_matchR   Rd   (   R,   RD   R0   R:   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   handle_change_match¦  s      c         C   s'   |  j  j | ƒ s d S|  j  | j ƒ  S(   NR   (   R#   R>   t   getRMS(   R,   RD   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR’   µ  s     c         K   s‰  g  } d d g j  |  j ƒ rí xÈ |  j j ƒ  D]· \ } } | |  j k r. | j r. t | ƒ r. t | j ƒ } t | j ƒ } i | j d 6| j d 6| j	 j
 ƒ  d 6} | j	 j ƒ  rË | j	 j
 ƒ  | d <n
 d  | d <| j | ƒ q. q. W| S|  j d k r…x‚|  j j ƒ  D]q\ } } | |  j k r| j rt | ƒ rt | j ƒ } t | j ƒ } i | j d 6| j d 6| j	 j
 ƒ  d 6} | d j ƒ  } g  }	 x! | D] }
 |	 j t |
 ƒ ƒ q¡Wd d  l } | j d	 d	 |	 ƒ } | j d	 d	 d
 d d d	 d d d d d d d d d d d d g ƒ } | | | j ƒ  r>qn  | j	 j ƒ  rc| j	 j
 ƒ  | d <n
 d  | d <| j | ƒ qqW| Sd  S(   NR   R   R   t   movingt   matrixt	   fixMatrixR    iÿÿÿÿi   i   i   i   i   i   i   i   i	   i
   i   i   i   i   i   i   (   R)   R   R#   R%   R   R}   R4   t   fixed_MolData_namet   MolData_namet   molHndt   GetTransformStringt   GetIsTransformedRF   R\   t   splitt   floatt
   pygl_coordR”   t   isNull(   R,   R.   t   resultsR:   R#   t   fixed_MolDatat   moving_MolDatat
   thisResultt   matt   matvalst   valR�   t   mt   tm(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   get_data¼  s@    $*
$*E
c   	      K   s-  d } d d g j  |  j ƒ rx x|  j j ƒ  D]C \ } } | |  j k r. | j r. t | ƒ r. | | j ƒ  } q. q. Wn±|  j d k r)g  } |  j rí x| |  j j ƒ  D]@ \ } } | |  j k r¦ | j r¦ t | ƒ r¦ | j	 | ƒ q¦ q¦ Wn( |  j
 r| j	 |  j j |  j
 ƒ ƒ n  x| D]} | j j t ƒ d } t |  j ƒ j d d !} t |  j
 ƒ j d d !} | d | | d d	 t | ƒ !| | d d	 t | ƒ !| j ƒ  d
 } | | j j ƒ  } | d t | j ƒ j j ƒ  } t |  j ƒ j j ƒ  r| d t |  j ƒ j j ƒ  } qqWn  | S(   NR   R   R   R    s                          i    i   s3   Fixed model          Moving model         Distance
i   s   

s-   

Transformation applied to the moving model
s-   NOTE: The fixed model is also transformed by
(   R)   R   R#   R%   R   R}   R4   t   PrintR   R\   R   RE   t   conn2t   UpdateCoordinatest   Truet
   name_labelRH   R’   R—   R˜   R™   Rš   (	   R,   R.   t   textR:   R#   t   supModel_listt   spacest   fxdt   mov(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt	   list_dataã  s0    $	$	J *c         C   s3   |  j  j |  j ƒ } | s g  S| j d | ƒ Sd  S(   NR;   (   R#   RE   R   t   get_unmatched_menu(   R,   R;   t   MP(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR´   	  s    c         C   s3   |  j  j |  j ƒ } | s g  S| j d | ƒ Sd  S(   NR;   (   R#   RE   R   t   get_unfinished_range(   R,   R;   Rµ   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR¶     s    c         C   sD   |  j  s d S|  j  d } x# |  j  d D] } | d | } q( W| S(   NR   i    i   t   ,(   R   (   R,   t   txtt   item(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   get_user_selected_atoms  s    	 c         C   sF   | j  d ƒ } g  } x! | D] } | j | j  ƒ  ƒ q W| |  _ d  S(   NR·   (   R›   t   extendR   (   R,   t   selection_textt
   sele_list0t	   sele_listR¹   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRo   )  s
    iÿÿÿÿc      	   K   s  d } |	 r t  |	 ƒ } n d  } | rN |
 rN | j d | d |
 d d ƒ } n d  } |  j j |  j ƒ } | ss d  Sd } | r³ | } | d k rï | j d | d | d	 | ƒ qï n< | rï | j d	 | d | d
 | ƒ } | d k rï d } qï n  | d k r7| j d	 | d | d | d
 | ƒ } | d k r7d } q7n  | rm| j	 d | d	 | d | ƒ } | smd } qmn  | r¡t
 |  d ƒ r‹|  ` n  | j ƒ  d |  _ n  | rÒt
 |  d ƒ r¿|  ` n  | j ƒ  d } n  | rñ| j d d ƒ d } n  | r| j ƒ  n  | S(   NiÿÿÿÿRD   t	   atom_namet   force_one_atomi   i    R�   t   atomptrR;   Re   R¹   t   select_ranget   restore(   R4   RF   t   interpretAtomIDR#   RE   R   t	   end_ranget	   new_matcht	   add_matchR�   t   hasattrRÂ   t   clear_unmatchedRb   t	   clear_allt   stackRl   (   R,   t   selectR�   RÅ   Re   R�   RÉ   RÊ   t	   undo_lastR—   t   atomIDR.   RJ   R;   RÁ   Rµ   t   update_connR†   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   handle_atom_popup4  sV    ! " $   	
 	
		c         C   s:   d d  l  } x' |  j j ƒ  D] \ } } | j ƒ  q Wd  S(   Niÿÿÿÿ(   t   cprimR#   R%   RN   (   R,   RÑ   R:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRN   q  s    c         C   s!  d d  l  } t j j | ƒ s( d d g S| j ƒ  } | j | ƒ } | rp t | ƒ } d G| G| GHd d | g Sg  } t d ƒ } | j d ƒ } | r@| j	 ƒ  }	 d }
 x” |
 |	 k  r<d } d } | j
 d	 |
 | ƒ } | j
 d
 |
 | ƒ } t d d d | ƒ } | r| j | d ƒ n d d | d g S|
 d }
 q¬ Wn  ~ | j d ƒ } | sbd d g S| j	 ƒ  }	 d }
 g  } xš|
 |	 k  rd } d } | j
 d |
 | ƒ } | d sá| j
 d |
 | ƒ } t d d d | ƒ } n  | j
 d |
 | ƒ } | d s-| j
 d |
 | ƒ } t d d d | ƒ } n  | r	| r	| d j d | d d | ƒ } | d j d | d d | ƒ } |  j d k ró|  j | | d d ƒ} | r| r| r| | j j k rÚ| j j | | ƒ qð| j j | | ƒ qq	| j | | g ƒ n  |
 d }
 q}Wd d g S(   Niÿÿÿÿi   s   No vector file specifieds   Error reading vectors CIFs   Error reading file: t   _modeli    R   t   idt   filenameR1   R2   R8   s   Vectors in file for: s.    does not correspond to currently loaded modelt   _vectors   No vectors defined in filet
   start_atomt   start_model_idt   end_atomt   end_model_idRD   R¿   R    t   create(   t   mmdb2t   ost   patht   existst   Datat   ReadMMCIFDatat   GetErrorDescriptiont   intat   GetLoopt   GetLoopLengtht	   GetStringR6   R\   RÄ   R   t   get_MolPairRt   R8   t   Connectivity2t   AddConnection(   R,   RÔ   t   mmdbt   CIFt   RCt   errt   molobj_listt   RC_ptrt   Loopt   maxVt   rowRÓ   t   filnR;   t   failed_interpretAtomIDRÖ   RØ   Rt   t   molobj1Ru   t   molobj2t   pAtom1t   pAtom2Rµ   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   import_matches{  sn     
 


  c         C   s*   t  ƒ  j | ƒ } | s d S| j ƒ  d S(   s¸    The model MolData_name has been transformed and we need to ensure
    gui for that model is updated.  Superpose is not a QtObject so can not emit
    signal so call method in GMolDataN(   t   DISPLAYTABLEt
   getDataObjt   updateGuiAfterTransformation(   R,   R—   R`   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   emitUpdateSignalÇ  s     c         C   s°   g  } xH |  j  j ƒ  D]7 \ } } | j r | j ƒ  d k r | j | ƒ q q W|  j  j |  j d ƒ r¬ |  j  |  j j r¬ |  j  |  j j ƒ  d k r¬ | j |  j ƒ n  | S(   Ni   R   (   R#   R%   R}   t   nofModelsSelectedR\   RE   R   (   R,   t   multiModelsR:   R#   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   checkForMultiModelsÒ  s    ,N(+   t   __name__t
   __module__RF   R"   R$   t   selected_atoms_mode_menut   selected_atoms_mode_aliasR(   R+   R7   RG   RL   R   RR   RT   R5   RZ   R3   Ra   R9   RO   RP   Rg   R*   RB   RA   RC   Rx   R‰   R�   R‘   R’   R¨   R³   R´   R¶   Rº   Ro   RÐ   RN   Rø   Rü   Rÿ   (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR   ,   sv   
				
					
						;	:		'	&	
		;	
L	R?   c           B   su  e  Z d; d  d  d i  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d	 d
 „ Z
 g  d	 d	 d „ Z d „  Z i  d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z d „  Z d  d „ Z d  d „ Z d	 d „ Z d „  Z d d „ Z d  d „ Z d  d „ Z d „  Z d „  Z d  „  Z d! „  Z d; d; d" d	 d# „ Z  d; d; d d$ „ Z! d; d; d d  d% „ Z" d; d; d& „ Z# d; d; d' „ Z$ d( „  Z% d d) „ Z& d" d; d; d* „ Z' d  d; d; d+ „ Z( d	 d, „ Z) d- „  Z* d. „  Z+ d/ „  Z, d0 „  Z- d	 d	 d	 d1 „ Z. d2 „  Z/ d d d3 „ Z0 d4 „  Z1 d5 „  Z2 d6 „  Z3 d7 „  Z4 d8 „  Z5 d9 „  Z6 d  d	 g  d: „ Z7 RS(<   R   i   c   
      K   s  d d  l  } d d  l } d d  l }	 | |  _ | |  _ | |  _ d |  _ | |  _ d |  _ d |  _	 | j
 | j d d ƒ |  _ | j ƒ  |  _ t ƒ  j |  j ƒ d  |  _ d |  _ | j | ƒ g  |  _ |  j ƒ  d  |  _ d |  _ d |  _ d |  _ d |  _ g  |  _ d |  _ d  S(   NiÿÿÿÿR   i    i   R   (   t   mmutt   VectorsDispobjR:   t   parentR—   R–   t	   selectionR}   t	   show_connR	   Rç   t   CONN_ATOM_ATOMRª   t   Vectorsgraphicsmodelt   graphobjt   BUILDR\   RF   t   MolDispRb   Rj   RI   t   restore_matchest   MGAlignt   nof_matchesR�   t   displayed_matcht   last_rmst
   list_stackRŠ   (
   R,   R  R—   R–   R}   R-   Rq   R  R  R:   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR(   å  s.    $										
						c         C   sh   |  j  ƒ  |  ` |  j rB t ƒ  j |  j ƒ t ƒ  j |  j ƒ n  |  j r[ |  j j ƒ  n  d  |  _ d  S(   N(
   RS   Rª   R  t
   MAINWINDOWt   removeGLDisplayObjectR  t	   deletemodR  R5   RF   (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR5     s    
		 c         C   sS   | |  j  k r d  St j | ƒ |  _  |  j j ƒ  |  j ƒ  |  j ƒ  d |  _ d  S(   Ni   (   R–   t   copyt   deepcopyRª   t   ClearRÊ   R  Rb   (   R,   R   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRa     s     

c         C   s   |  j  d ƒ |  j d ƒ d  S(   Ni    (   Rc   RP   (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRM   $  s    c         C   s   d |  _  d  S(   Ni   (   Rb   (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRQ   *  s    c         C   s�   |  j  |  j k r‰ t ƒ  j d |  j d d d |  j  d |  j ƒ  d d ƒ t ƒ  j d |  j  d d d |  j d |  j d d ƒ d d ƒ n  d  S(	   NRi   t   infot   superpose_matchesR/   R0   t   savei   t   swap_selections(   R–   R—   t	   MODELINFOt   add_infoR�   (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRS   0  s
    c         C   sß   |  j  |  j k rÛ t ƒ  j d |  j d d d |  j  ƒ \ } } | ro | j |  j  ƒ ro |  j | |  j  ƒ n  t ƒ  j d |  j  d d d |  j ƒ \ } } | rÛ | j |  j ƒ rÛ |  j | |  j d d d d ƒqÛ n  d  S(   NRi   R  R  R/   R\   i   R  (   R–   R—   R  t   get_infoR>   R‚   (   R,   t   statusR  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR  :  s    i    c         C   s7   g  } x* |  j  D] } | j | j d | ƒ ƒ q W| S(   NR  (   RI   R\   RZ   (   R,   R  t
   match_infoR�   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR�   G  s    c   	      C   sÊ   | s g  |  _  n  x± | D]© } t ƒ  } | rc | j d d ƒ } | j d d ƒ | d <| | d <n  | j | ƒ d } |  j  r© x' |  j  D] } | | j | ƒ } q‰ Wn  | s |  j  j | ƒ q q Wd  S(   Nt   sele1R   t   sele2i    (   RI   t   SuperposeMatchRE   R*   t   isSameR\   (	   R,   R"  R\   R  R  RÆ   R#  t   samet	   old_match(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR‚   P  s     		c         C   s?   i |  j  d 6|  j d 6|  j d 6|  j d 6|  j ƒ  d 6} | S(   NR—   R–   R}   R  RI   (   R—   R–   R}   R  R�   (   R,   R[   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRZ   f  s    



c         K   s…   | j  | ƒ | j d ƒ r1 | j d ƒ |  _ n  | j d ƒ r^ | j d ƒ |  _ d |  _ n  | j d ƒ r� |  j | d ƒ n  d  S(   NR}   R  i   RI   (   Rj   R>   RE   R}   R  Rb   R‚   (   R,   R-   Rq   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR*   q  s     c         C   s   t  |  j ƒ S(   N(   RH   RI   (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt
   nofMatches}  s    c         C   s   |  j  S(   N(   R  (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR’   �  s    c         C   sD   i t  |  d ƒ d 6t  |  d ƒ d 6t  |  d ƒ d 6t  |  d ƒ d 6S(   NR  R�   R  R  t   rms(   RY   (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   getmatchesinfo…  s    c         C   s1   | |  j  k r d |  _ n  | |  _  d |  _ d  S(   Ni   (   R  Rb   (   R,   R  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRc   �  s     	c         C   s1   | |  j  k r d |  _ n  | |  _  d |  _ d  S(   Ni   (   R	   Rb   (   R,   R	   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRP   ”  s     	i   c         C   sC   g  } x6 |  j  D]+ } | j | ƒ } | r | j | ƒ q q W| S(   si   
    Extract any selection on either this model (=2) or the fixed
    model (=1) that is not matched
    (   RI   t   getUnmatchedR\   (   R,   R:   t	   unmatchedR�   R  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   extract_unmatchedœ  s     c         C   s«  |  j  j } |  j  j } d d l } d } xH| D]@} d d d g j | d ƒ rh | | d d	 } q1 d
 d d d g j | d ƒ r¬ | d | d d | d d } q1 d g j | d ƒ r1 | d k sæ | d k rû | d k rû | | d d	 } qq| d k rP| d } x | D] } | | d } qW| d d !d | d d } qq| d | d | d d } q1 q1 Wt | ƒ d k r§| d d k r§| d d !} n  | S(   s†   
     Convert a list of unmatched groups into a parseable selection command
     This method is independent of the MolData object
    iÿÿÿÿNR   t   atomt   residuet   monomeri    i   s    or R   t   sidet   baset   backbones   { s    and s    } or t   rangeR   R   s   { /1/*/*,*/R·   i   iýÿÿÿs   or (   R  R   R   t   stringR)   RH   (   R,   t   unmatched_listR   R   R6  t   seleR-  t   atm(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   get_unmatched_selection_command­  s*    %$
  %" c         C   sß   t  |  j ƒ j d | d d ƒ } | d r¼ | d r¼ |  j sL |  j ƒ  n  t |  j d ƒ sb d  S|  j j j | ƒ | rŽ |  j j | ƒ n  d |  j _	 |  j j
 d d ƒ d |  j _ n |  j rÛ |  j j
 d d ƒ n  d  S(   Nt   commandt   testi   i    t	   SelHandlet
   visibility(   R4   R—   t   parse_selectionR  t   create_MolDispRY   R=  t
   setCommandRg   Rb   t   set_visibilityt   reapply_selection(   R,   R;  Rf   R†   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   draw_unmatchedÌ  s    !	   	c         C   s´   d d g j  |  j j ƒ  ƒ r@ |  j r° |  j j d d ƒ q° np |  j sV |  j ƒ  n  |  j j j |  j ƒ | r… |  j j | ƒ n  d |  j _	 |  j j d d ƒ d |  j _
 d  S(   NR   R   R>  i    i   (   R)   R  Rp   R  RB  R@  R=  RA  Rg   Rb   RC  (   R,   Rf   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt	   draw_maskà  s    		  c         C   s{  |  j  r | r d  S|  j ƒ  |  j j j |  j d  ƒ } |  j r|  j j d k rØ |  j	 d ƒ } |  j
 | ƒ } |  j | d |  j j ƒ| r|  j	 d ƒ } |  j
 | ƒ } | rÕ | j | d |  j j ƒqÕ qqn|  j d |  j j ƒ | rn| j d |  j j ƒ qnn^ |  j rn|  j j d d ƒ |  j j ƒ  | rn| j rn| j j d d ƒ | j j ƒ  qnn  d |  _  d  S(   NR    i   Rf   i   R>  i    (   Rb   t   draw_matchedR  R#   RE   R–   RF   R	   R   R.  R:  RD  R   R   RE  R  RB  RN   (   R,   t   forceR   R7  R;  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRN   ð  s0     
	 " 	c   	      C   sx  |  j  j ƒ  } |  j j j ƒ  |  j j j ƒ  | d k rT|  j rT|  j  j t ƒ d d  l	 } d d  l
 } d d  l } t ƒ  j |  j j ƒ } | j | ƒ } |  j j r· | j } n	 | j } | j |  j j |  j  j | | j | j	 j | |  j j ƒ t ƒ  j d ƒ } |  j j j t | d ƒ t | d ƒ t | d ƒ | d | d ƒ n  |  j j ƒ  t ƒ  j |  j ƒ d  S(	   Ni    iÿÿÿÿt
   atom_labelt   familyt   weightt   slantt   sizet	   underline(   Rª   t   GetNofConnectionsR  R`   t   clear_primst
   DeleteTextR  R«   R¬   R  R�   RÑ   t   MGCOLOURt   RGBR  R   t   DoubleVectorR   t   LABELLEDCENTREt   NOTLABELLEDt   DrawSimpleConnectiont	   connectedt   DASHLINEt
   line_widtht   FONTMANAGERt   getFontt   SetTextFontt   strt   rebuildR  t   rebuildGLDisplayObject(	   R,   t   nconnR  R�   RÑ   t   colt   colvt
   label_modet   font(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRF    s$    $	&"iÿÿÿÿc         C   s¥   g  } | d k r3 | t  |  j ƒ k  r3 | g } n t t  |  j ƒ ƒ } xV | D]N } | j |  j | j d |  j | j |  j | j |  j | j f g ƒ qO W| S(   Ni    s   %-8s %-12s %-12s(   RH   RI   R5  R\   R}   Re   R$  R#  (   R,   t   iMatcht   menut   rngt   ii(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   get_match_menu5  s    !Lc         C   s“   g  } | j  |  j k r! d } n d } xe t t |  j ƒ ƒ D]N } |  j | j d | ƒ } x, | D]$ } | j | | d | d g ƒ qc Wq= W| S(   s@   
    Return a menu of the unmatched items in the match list
    i   i   R:   i    (   R8   R—   R5  RH   RI   t   getUnmatchedMenuR\   (   R,   R;   Rf  R:   Rh  t   menu_item_listt	   menu_item(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR´   B  s    	 &c         C   sŽ   g  } | j  |  j k r! d } n d } x` t t |  j ƒ ƒ D]I } |  j | j d | d d ƒ } x! | D] } | j | | g ƒ qi Wq= W| S(   sB   
    Return a menu of the unfinished ranges in the match list
    i   i   R:   t   start(   R8   R—   R5  RH   RI   Rj  R\   (   R,   R;   Rf  R:   Rh  Rk  Rl  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR¶   U  s    	 c         C   sâ   xl t  d t |  j ƒ ƒ D]R } |  j | d k r d d d d g j |  j | d d !ƒ r d |  j | <q q Wxl t  d t |  j ƒ ƒ D]R } |  j | d k rˆ d d d d g j |  j | d d !ƒ rˆ d |  j | <qˆ qˆ Wd  S(	   Ni    R   t   rangR0  R   R2  i   R   (   R5  RH   t   list2R)   t   list1(   R,   Rh  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt	   set_closeh  s    <<c         C   s^   g  } x? |  j  D]4 } | j d ƒ r | j d ƒ r | j | ƒ q q W| |  _  d |  _ d  S(   NR#  R$  i   (   RI   RE   R\   Rb   (   R,   RI   R�   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRÉ   s  s    	c         C   s   g  |  _  d |  _ d  S(   Ni   (   RI   Rb   (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRÊ   ~  s    	c         C   s2   | d k r. | t  |  j ƒ k  r. |  j | =n  d  S(   Ni    (   RH   RI   (   R,   R�   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   delete_match…  s    !R/  c         C   sî   | rÊ | rÊ |  j  d | d | d | ƒ } | s4 d S|  j ƒ  d d g j | ƒ rb d } d } n d } | j |  j k r¢ |  j j t d | d	 | d
 | ƒ ƒ qÝ |  j j t d | d | d
 | ƒ ƒ n |  j j t ƒ  ƒ t |  j ƒ d S(   NRe   R;   RÁ   iÿÿÿÿR5  Rm  t   firstR   R#  t	   qualifierR$  i   (	   t   labelRË   R)   R8   R–   RI   R\   R%  RH   (   R,   R;   RÁ   Re   t   match_closestRu  Rt  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRÆ   ‹  s     
	((c         C   s  | d k  s! | t  |  j ƒ k r% d S| j |  j k rV |  j | j d ƒ } d } n |  j | j d ƒ } d } |  j d | d | d	 | ƒ } | sš d S|  j ƒ  | d k rá |  j | j d | ƒ |  j | j d
 d ƒ n. |  j | j d | ƒ |  j | j d
 d ƒ | S(   Ni    iÿÿÿÿR#  i   R$  i   t	   start_resR;   RÁ   Rt  R   (   RH   RI   R8   R–   RE   t
   rangelabelRË   Ri   (   R,   R;   RÁ   R�   Rw  R:   Ru  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRÅ      s"    !	 
c   	      C   sŽ  d d  l  } | d k  s- | t |  j ƒ k r1 d S| j |  j k rL d } n | j |  j k rg d } n  |  j d | d | d | ƒ } | s� d S|  j ƒ  | d k r¿ |  j | j d | ƒ n |  j | j d	 | ƒ d
 d g j	 | ƒ rj|  j | j
 d ƒ d k r�|  j | j | |  j |  j ƒ } | d rM|  j | j d | ƒ qg|  j | j d d ƒ q�n |  j | j d d ƒ d |  _ | S(   Niÿÿÿÿi    i   i   Re   R;   RÁ   R#  R$  Rm  t   endRt  Rs  R   (   R6  RH   RI   R8   R–   R—   Ru  RË   Ri   R)   RE   t   setEndOfRangeRb   (	   R,   R;   RÁ   R�   Re   R6  R:   Ru  R†   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRÇ   »  s.    !		 
"
	c         C   s–   d d g j  | ƒ r nz d d  l } | j | d ƒ } | d k rŽ | t |  j ƒ k rŽ |  j ƒ  |  j j | ƒ |  j j | ƒ d |  _ d Sd Sd  S(   NR/  R0  iÿÿÿÿi    i   (	   R)   t   utilst   safeIntRH   Rp  RË   t   popRo  Rb   (   R,   R¹   R;   RÁ   R{  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR�   ò  s    !
	c   
      C   s  | j  |  j k r |  j } n | j  |  j k r< |  j } n  d } |  j d d d | d | ƒ } | j d | ƒ r‰ | j d | ƒ } ny|  j d d d | d | ƒ } xN d d d	 d
 d g D]7 } | j | d | ƒ r½ | j | d | ƒ } q½ q½ W| d k  r|  j d d d | d | ƒ } | j d | ƒ rK| j d | ƒ } n  | d k  rd d  l } | j	 j
 ƒ  } xw t d t | ƒ ƒ D]` }	 | |	 d d !d k rˆ| j	 j | | j | |	 d | j ƒ | j | ƒ rè|	 } PqèqˆqˆW| j	 j | ƒ qn  | d k r| | Sd Sd  S(   NiÿÿÿÿRe   R/  R;   RÁ   s   atom R0  R   R2  R4  R3  Rh   i    Rm  s   start i   Rn  i   R   (   R8   R–   Rp  t   MolDaa_nameRo  Ru  R)   t   indexRÛ   R˜   t   GetSelectionR5  RH   t   Selectt
   STYPE_ATOMt   SKEY_NEWt   isInSelectiont   DeleteSelection(
   R,   R;   RÁ   t   listRh  Ru  Re   Ré   t   selHndt   jj(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   get_listitem  s:      'c         C   s    d |  _  |  j j g  t ƒ d  S(   Ni   (   Rb   Rª   t   DeleteConnectionsR¬   (   R,   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRk   4  s    	c   )      C   s	  |  j  s d  Sd d  l } d d  l } | d k  s@ | |  j k rn t d t |  j ƒ ƒ } |  j j g  t ƒ n | g } |  j j | t ƒ g  } d } |  j	 j
 d k rÃ d d d d g } d } ny |  j	 j
 d k rç d g } d } nU |  j	 j
 d	 k rd
 d d g } d } n+ |  j	 j
 d k r<|  j	 j } | d } n  d |  _ t |  j  ƒ } t |  j ƒ } x«| D]£}	 |  j |	 j d ƒ }
 |
 rj|  j |	 j d ƒ } |  j |	 j d ƒ } |  j |	 j d ƒ } |  j |	 j d ƒ } |  j |	 j d ƒ } | d k rp| r
	| r
	| j | | d d ƒ} | j | | d d ƒ} | rm| rm|  j j | | d |	 ƒ qmq
	q	d g j | ƒ r<| r
	| r
	| j d ƒ d d k r
	| j d ƒ d d k r
	| j | ƒ \ } } | j | ƒ \ } } | r9| r9| r9| r9|  j j | d | d d |	 d t |  j	 j ƒ ƒ q9q
	q	d d d d d g j | ƒ r%d d g j | ƒ r| j d  } n | j d  } | j | ƒ \ } } | j | ƒ \ } } | d k r
	| d k r
	d d  l } d d g d d g d d g d d g d d g g d d d d d g j | ƒ } | j ƒ  } t ƒ  } | j ƒ  } t ƒ  } t j | | ƒ } t j | | ƒ } x¨ t | j  ƒ  ƒ D]‘ } t! | | ƒ } | | j | j" | j# ƒ ƒ rŠxZ t | j  ƒ  ƒ D]C } t! | | ƒ }  | j# |  j# k rÑ|  j j | |  d |	 ƒ qÑqÑWqŠqŠWq
	q	| d! k r²|  j |	 j$ | |  j  ƒ }! |  j |	 j$ | |  j ƒ }" t |! ƒ d" k rÁt |" ƒ d" k rÁ|  j j% |! d |! d |" d |" d | |	 ƒ }# q
	| r8t |! ƒ d" k r8t |" ƒ d k r8|  j j& d |! d |! d t |  j ƒ j' |  j	 j( |  j	 j) | | |	 ƒ	 }# q
	| r
	t |! ƒ d k r
	t |" ƒ d" k r
	|  j j& d" |" d |" d t |  j  ƒ j' |  j	 j( |  j	 j) | | |	 ƒ	 }# q
	q	| d# k rPd d  l } | j' j* ƒ  }$ | j' j+ |$ | j, | | j- ƒ | j' j* ƒ  }% | j' j+ |% | j, | | j- ƒ |  j j. | j' |$ | j' |% | |	 ƒ }# q	d$ d% g j | ƒ r	d }$ d }% | r¬t |  j  ƒ j/ d& | ƒ }& |& d s¬|& d }$ q¬n  | rçt |  j ƒ j/ d& | ƒ }' |' d sç|' d }% qçn  | d% k r_|$ d k s|% d k r_|  j j0 t |  j  ƒ j' |$ t |  j ƒ j' |% |  j	 j( |  j	 j) |  j	 j1 d ƒ }( nX | d$ k r·|$ d k r·|% d k r·|  j j2 t |  j  ƒ j' |$ t |  j ƒ j' |% ƒ n  |$ d k rßt |  j  ƒ j' j3 |$ ƒ n  |% d k r
	t |  j ƒ j' j3 |% ƒ q
	q	qjqjWd  S('   Niÿÿÿÿi    R   R   t   Nt   Ot   CR   R   t   Ps   C1's   C1*s   C1',C1*R   i   R}   R#  R$  Re   R   Rt  R/  RÀ   R   R1  t   /gÍÌÌÌÌÌì?R0  R2  R4  R3  t   ORDERR5  i   t   range_same_seqidR  t   selection_closeR;  (4   R–   R6  t   selection_protocolsRI   R5  RH   Rª   RŠ  R¬   R  R   R   Rb   R4   R—   RE   RÄ   Rè   R)   R›   t   interpretResidueIDt   MatchGraphst   boolR   t   backbone_atomst
   main_chainRÛ   R  t
   newPPCAtomt   intpR  t   GetAtomTableR0   t	   getPCAtomRp   R8   t   getResPointerst   AddRangeConnectionst   AddCloseRangeConnectionsR˜   R   R   t   NewSelectionR�  t   STYPE_RESIDUERƒ  t   AddRangeWithSameIdConnectionsR?  t   AddCloseAtomsR
   t   AddContactFromSelHandleR…  ()   R,   R�   R6  R“  t   mrngt
   atnam_listt   centralAtomRt   Ru   Rh  R}   R#  R$  Re   R   Rt  Rö   R÷   t   nr1t   pRes1t   nr2t   pRes2R˜  Ré   R8  t	   resAtoms1t   p1t	   resAtoms2t   p2t   it   atomptr1t   jt   atomptr2t   pres1t   pres2t   nct   selHnd1t   selHnd2t   rv1t   rv2t   nClose(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRl   :  sÔ    	 						">:O		-$4*)$*)'
 
 $T$  c      	   C   s(  t  d ƒ } d d d d d d g j | d d	 !ƒ rX d d
 d
 d
 d
 d
 d d d g	 } n• d g j | d d	 !ƒ r• d d
 d
 d
 d
 d d d d g	 } nX | d d	 !d k rÌ d d d d
 d
 d d d d g	 } n! d d
 d
 d
 d
 d
 d
 d
 d g	 } x% t d d ƒ D] } | | | | <qý W| j j | | ƒ S(   Ni	   t   resiR2  R   t   monot   backR3  i    i   i   t   starRn  (   Râ   R)   R5  R˜   t   AtomLabel_mask(   R,   Re   R;   RÁ   t   maskt   py_maskR°  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRu  Ù  s    ($$$! c         C   s¶   d } | j  | ƒ } | d d k rj | d j ƒ  | j ƒ  k  rj | d |  j d d d | d | ƒ } nH d d  l } |  j d d	 d | d | ƒ d | j | d
 ƒ d } d } | S(   Ni    i   t   -Re   R5  R;   RÁ   iÿÿÿÿRm  R�  (   R”  t   GetResidueNoRu  R6  R›   (   R,   Rw  R;   RÁ   t   reverseR´  Ru  R6  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRx  ð  s    ,"6c         C   s¤   | sF g  } x$ |  j  D] } | j | j ƒ  ƒ q W|  j j | ƒ nZ t |  j ƒ d k r  |  j j ƒ  } g  |  _  x* | D] } |  j  j t d | ƒ ƒ qz Wn  d  S(   Ni    R-   (   RI   R\   RZ   R  RH   R}  R%  (   R,   RÃ   t   match_params_listR�   R-   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRË   ÿ  s    	c         C   sp   d |  _  t |  j ƒ } | j j t ƒ | j d ƒ |  j j |  j ƒ d |  _	 d |  _
 d |  _ d |  _ d  S(   NR   R=   i    i   iÿÿÿÿ(   RŠ   R4   R—   R˜   t   UnSetTransformR¬   t   update_dependentsR  Rü   R�   R  Rb   R  (   R,   R;   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR‹     s    				c         C   s’  d } d } d } g  } xÖt  t t | ƒ ƒ | ƒ D]¸\ } } | j d ƒ r| d t | ƒ k  r| j g  | | d j ƒ  D] } t | ƒ ^ q� ƒ | j g  | | d j ƒ  D] } t | ƒ ^ qµ ƒ | j g  | | d j ƒ  D] } t | ƒ ^ qé ƒ | j d d d d g ƒ n  | j d	 ƒ rPt | t d	 ƒ j ƒ  d
 ƒ } n  | j d ƒ r‚t | t d ƒ j ƒ  d
 ƒ } n  | j d ƒ rž| d } n  | j d ƒ rº| d } n  | j d ƒ sØ| j d ƒ r5 | d k r5 | } q5 q5 Wg  }	 | d k ry| | k ryxgt | | ƒ D]S} | | j d ƒ d d !\ }
 } } t | j ƒ  ƒ d
 k sd } d } |
 j ƒ  d j ƒ  } | j ƒ  d j ƒ  } | d j ƒ  r¿| d } | d  } n  | d j ƒ  ræ| d } | d  } n  t	 | ƒ t | j ƒ  d d !ƒ t	 | ƒ } } } |
 d } | d } |
 d d !} | d d !} |	 j
 | | | | | | | | | f	 ƒ qqWn  i | d 6| d 6|	 d 6S(   sQ   
    Parse gesamt (output as list of lines) to get matrix, rmsd and matches.
    g        iÿÿÿÿs,           Rx         Ry         Rz           Ti   i   i   i   g      ð?s
    at RMSD =i    s        r.m.s.d:s    Residue alignment:s   $TEXT:Residue alignment:i   s   `-------------s    `-------------t   |i   R   iüÿÿÿiýÿÿÿi   R=   t   rmsdRI   (   t   zipR5  RH   t
   startswithR»   R›   Rœ   Rp   t   isalphaRd   R\   (   R,   t   linesRÊ  t   match_startt	   match_endR£   t   ilt   lt   xRI   t   qt   dt   tt   i1t   i2t   r1at   r2at   r1t   distt   r2t   c1t   c2t   rn1t   rn2(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   parseGesamtOutput  sT    )%444##*#

3

2c         C   s  d d  l  } d |  j d |  j |  j d |  j |  j g } | GHt j t j	 ƒ } t
 j d d d d t t j ƒ  ƒ d t ƒ } t j | d	 | d
 t d t j d | d t ƒ} d  |  _ d d  l } | j ƒ  } x" |  j d  k ró | j ƒ  |  _ qÒ W| j } | j ƒ  t | ƒ }	 |	 j ƒ  }
 |	 j ƒ  d G| j ƒ  | GHd G|  j GHd G|  j GHt |  j ƒ } t |  j ƒ } t |  j ƒ } | j ƒ  } | j ƒ  t | ƒ d k r{|  j |
 ƒ } | j  d d | d ƒ } | j! j" | t ƒ | j# d ƒ |  j$ j% |  j ƒ d |  _& g  } g  } g  } g  } g  } g  } g  } x� | d D]ƒ } | j' | d ƒ | j' | d ƒ | j' | d ƒ | j' | d ƒ | j' | d ƒ | j' | d ƒ | j' t | d ƒ ƒ qBW|  j( j) ƒ  |  j( j* | j! | j! | | | | | | | ƒ	 d |  _+ xH | d D]< } |  j+ d | d | d | d | d | d f 7_+ qWd | d |  j( j, ƒ  f |  _- n  d  S(    NiÿÿÿÿRy   s   -dt   suffixs   _gesamt_out.txtt   prefixt   ccp4mgR5   t   stdoutt   universal_newlinest   stderrt   envt   shells   time for gesamtt   Writtent   Movingi   i   R=   i   RI   i    i   i   i   s#   
== Moving == Fixed == Distance ==
s   %4d(%3s)%4d(%3s)%12.3f
i   i   s   %.2f/%iRÊ  (.   R�   t   gesamt_file1t	   gesamt_d1t   gesamt_file2t	   gesamt_d2t   gesamt_output_fileR  R  RÜ   t   environt   tempfilet   NamedTemporaryFileR]  t   getpidt   Falset
   subprocesst   PopenR¬   t   STDOUTRF   t   retvalt   timet   pollR8   R   t   opent	   readlinesR—   R4   R–   RH   Râ  R”   R˜   t   SetTransformRÈ  R  Rü   Rb   R\   Rª   R  t   AddConnectionsFromMatchesRŠ   RN  R  (   R,   R�   R;  Ré  t   gesamt_txt_outputt   procRû  t   t1t   outnamet   fot   progoutRu   Rt   t   fcheckt   outlinest   pgoR£   t   m1t   m2RÞ  Rß  R×  RØ  t   labelsR�   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt	   runGesamtP  sh    -.0		


	.	:c         C   sT  t  |  j ƒ } t  |  j ƒ } | j d } | j d } t j j | ƒ rPt j j | ƒ rP| |  _ | |  _ t	 j
 d d d d t t j ƒ  ƒ d t ƒ } | j |  _ | j ƒ  |  j ƒ  } |  j j |  j j ƒ  } | j j | ƒ |  _ | j j | ƒ |  _ t |  j ƒ d k r"d |  _ n  t |  j ƒ d k rCd |  _ n  |  j ƒ  n  d  S(	   Ni   Rã  s   _gesamt_out.pdbRä  Rå  R5   i    R    (   R4   R–   R—   RÔ   RÜ   RÝ   t   isfileRí  Rï  Ró  Rô  R]  Rõ  Rö  R8   Rñ  R   t
   get_selHndR  R#   R˜   t   SelectionToSCOPRî  Rð  RH   R  (   R,   Ru   Rt   t   f1t   f2t   gesamt_outputt   mask_selHnd1t   mask_selHnd2(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR~   ˆ  s&    $		.
c      	   C   s)  |  j  s d d g St |  j  ƒ } t |  j ƒ } | s? | rI d d g S|  j ƒ  } |  j j |  j  j ƒ  } | d k  r„ d d g S| d k  rš d d g St ƒ  } | j j ƒ  }	 | j j	 t
 ƒ | j | j | j d d | | | d |  j ƒ }
 d G| j G|
 GH|
 d k rÏ| |  _ | d k r9t j | ƒ |  _ n> |  j j ƒ  d |  _ |  j j ƒ  |  _ |  j j ƒ  d |  _ d	 |  j j ƒ  |  j j ƒ  f |  _ | j d
 ƒ |  j j |  j ƒ d |  _ d d g Sd d  l } | j | j d d |	 ƒ ƒ j ƒ  } | j j | t
 ƒ d |  j  |
 ƒ g Sd  S(   Ni   s   Error with fixed models   Error - possibly model deleted?i    s%   Error selecting mask for moving models$   Error selecting mask for fixed modeli   s   Superpose status (0=success)s   %.2f/%iR=   R   iÿÿÿÿi   (!   R–   R4   R—   R  R  R#   t   CMGAlignR˜   t   GetTransformRÇ  R¬   R  Rª   R­   R  R  R  t   GetMatchNumbert   GetNumberofSSEMatchesR  R�   t   GetRMSDRN  R  RÈ  Rü   Rb   R�   t   QuatR”   t   getInvMatrixRÿ  t   ssm_error_message(   R,   R�   R�   RŽ   Rt   Ru   R  R  t   new_MGAlignt   current_transformRë   R�   t   rotmat(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR   Ÿ  sF    	 
 
 
 
		%	
$c         C   s  d d  l  } t |  j ƒ } t |  j ƒ } d | j d | j d t | ƒ d } | t k rx | d | j d } nŽ | t k rœ | d | j d } nj | t k rÀ | d | j d } nF | t	 k rä | d | j d } n" t
 t g j | ƒ r| d	 } n  d
 G| GH| S(   Niÿÿÿÿs   Superposing s    onto s    FAILED error code=s   

s5   No secondary structure elements in the selection for s+   No matching secondary structures found for s3   Can not superpose the apparently matching SSEs for s}   Failed to create graphs.
Possibly model does not have secondary structure.
Possibly program error.
Contact ccp4mg@ccp4.ac.uk
s   Superpose error:(   R:   R4   R—   R–   R8   R]  t   SPSN_noVerticest   SPSN_noVertices2t   SPSN_noHitst   SPSN_noSPSNt   SPSN_noGrapht   SPSN_noGraph2R)   (   R,   Rë   R:   R¡   R    R…   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR  Ë  s     *	c         C   s5  d d  l  } |  j j d k r- d } d } n‘ |  j j d k rN d } d } np |  j j d k ro d } d	 } nO |  j j d
 k r” d } d } } n* |  j j d k r¾ d } |  j j ƒ  } n  t |  j ƒ } | sÝ d d g S| j j ƒ  } | rt ƒ  j	 d | d | j
 ƒ } n d } t j j | | j d d | j d | j d | | d d t ƒ | d k r„| j j | | j | | j ƒ n  t ƒ  }	 t ƒ  }
 t j | j | |	 ƒ }
 |	 j ƒ  } | d k  rï| j j | ƒ d d | d | j
 g St |  j ƒ } | j j ƒ  } t ƒ  } t j | j | |	 ƒ } |	 j ƒ  } | rat ƒ  j	 d | d | j
 ƒ } n d } | j j | | j d d | j d | j d | | d d t ƒ | d k rÒ| j j | | j | | j ƒ n  t j | j | |	 ƒ } |	 j ƒ  } | d k  r;| j j | ƒ | j j | ƒ d d | d t j
 g S| | k rŸ| j j | ƒ | j j | ƒ d d | j
 d t | ƒ d | j
 d t | ƒ g S| j j | | |
 ƒ } | j j | | |
 ƒ } d | | f |  _ | j d ƒ |  j j |  j ƒ d |  _ | j j | ƒ | j j | ƒ d d g S(   NiÿÿÿÿR   s   CA,N,O,Ct
   amino_acidR   R   R   s	   P,C1',C1*t   nucleic_acidR   R    R   R   s   Error with fixed modelR/   Ri   i    i   i   s$   Less than three residues containing s    selected for s1   Different number of residues selected for models
s    has s   
s   %.2f/%iR=   (    RÛ   R  R   Rº   R4   R–   R˜   R   R  t   get_names_stringR­   t   fixed_olobjR�  R‚  t   ANY_RESRƒ  t   SKEY_ANDRš  R™  R  t   GetAtomSelIndexR0   R…  R—   R“   R]  t   TransformToSuperposeAtomst   AtomicRMSDistanceR  RÈ  Rü   R  (   R,   t   fixed_selHndt   moving_selHndRé   t   central_atomt   res_typet   fixed_molobjt   fixedHndt   fx_amino_acidt	   selindexpt
   fixed_atomt	   fixed_natt   moving_molobjt	   movingHndt   moving_atomt
   moving_natt   mv_amino_acidR†   R*  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   superpose_LSQä  s„    			 
!%"			!%"5	c   	   	   C   s–  d d  l  } t |  j ƒ } t |  j ƒ } | s8 | rB d d g S|  j ƒ  } | d k  rk d d | j g S|  j j |  j j ƒ  } | d k  r¡ d d | j g S|  j j	 ƒ  |  j j
 | j | | j | |  j j |  j j |  j j d ƒ } | d k  rd d g S| d k  rd d g S|  j j d	 ƒ |  j j ƒ  } |  j j ƒ  } d
 | | f |  _ | j d ƒ |  j j |  j ƒ d |  _ d	 |  _ d d g S(   Niÿÿÿÿs   Fixed model not definedi    iþÿÿÿs   Error selecting atoms for s   Error serching for close atomsi   s!   Less than three close atoms foundi   s   %.2f/%iR=   R   (   RÛ   R4   R–   R—   R  R­   R  R#   Rª   R  R£  R˜   R   R   R
   R   R  RN  R  RÈ  Rü   R  Rb   (	   R,   Ré   R   R“   R1  R0  R»  R*  R=  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR€   C  s6     
  $

		c         C   s—   |  j  ƒ  |  j j ƒ  d k  r) d d g S|  j j d ƒ |  j j ƒ  } d | |  j j ƒ  f |  _ |  j j |  j ƒ t	 |  j ƒ j
 d ƒ d d g S(	   Ni   iÿÿÿÿs   Less than three matched atomsi   s   %.2f/%iR=   i    R   (   Rl   Rª   RN  R   R  R  R  Rü   R—   R4   RÈ  (   R,   R*  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRƒ   e  s    

c         C   s^   |  j  j ƒ  |  _  |  j  r' |  j  } n d } t |  j ƒ j d | ƒ } | d sZ | d Sd S(   NR   R;  i    i   iÿÿÿÿ(   R  Rp   R4   R—   R?  (   R,   R8  R†   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR  w  s    	
 c         C   sÝ   t  |  j ƒ } | j d k r= t | j j ƒ  ƒ d k r= d S|  j ƒ  } | d k  rY d Sd d  l } t ƒ  } | j	 j
 ƒ  } | j	 j | | j | | j ƒ t ƒ  } t j | j	 | | ƒ } | j ƒ  } | j	 j | ƒ | S(   Ni   i    iÿÿÿÿ(   R4   R—   t
   nmr_modelsRH   t   model_symmetryt   get_symmetry_modelsR  RÛ   Rš  R˜   R   R�  t   STYPE_MODELRƒ  t   newPPCModelR  t   GetModelSelIndexR0   R…  (   R,   R;   R‡  Ré   R7  t   model_selHndt   pModelst   nModels(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRý   †  s      		c         C   sÌ   d d  l  } t |  j ƒ } |  j sÈ | j d | d |  j d d |  j ƒ |  _ |  j j d d ƒ |  j j |  j j ƒ d d	 d
 g j |  j	 ƒ sÈ |  j j
 |  j	 ƒ |  j j j d d d d ƒ qÈ n  d  S(   NiÿÿÿÿR  R8   t
   _superposet   master_applicationt
   style_modet   PYRAMIDSR   R   Rh   R;  t   one_atomt   opt   and(   R:   R4   R—   R  R  t	   set_styleRg   R   R)   R  t   set_selectionR=  t   mergeSelection(   R,   R:   R;   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR@  ž  s    	c         C   s¸  t  |  j ƒ } t  |  j ƒ } | s/ d |  j S|  j j d k rU d | j d } n d | j d |  j d } | d | j d |  j j |  j j d } |  j rÅ | d	 t	 |  j ƒ d
 } n  |  j
 rA|  j j d k rA| d
 d t	 |  j ƒ d t	 |  j ƒ d t	 |  j ƒ d |  j
 j |  j |  j ƒ d } n  |  j rt|  j j d k rtd
 | |  j d
 } n  | d | j j ƒ  } | j j ƒ  r´| d | j j ƒ  } n  | S(   Ns   Fixed model not set for: R   s   Superposing s1    (atoms close to those selected for fixed model)
s   Moving: s    (s   )
s   Fixed:  s   
RMS of selected atoms: s   

R   s   Match number s    of s    (best result is number s   )

s   


Ry   s-   

Transformation applied to the moving model
s-   NOTE: The fixed model is also transformed by
(   R4   R—   R–   R  R   R­   R  R#   R  R]  R  R!   R  R  R�   R©   RŠ   R˜   R™   Rš   (   R,   R¡   R    R…   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR©   ¯  s$     -	ac         C   s1  d d  l  } |  j r5 |  j j ƒ  d k  r5 d d g S|  j j t ƒ d } |  j j ƒ  } xœ t d | ƒ D]‹ } |  j j | d ƒ } |  j j | d ƒ }	 | rj |	 rj | d |  j d | d	 d |  j d |	 d
 d |  j j	 | ƒ d } qj qj Wd d d | j
 | j | j  ƒ  ƒ ƒ d }
 |
 d }
 x  | D] } |
 d | d }
 q8W|
 d }
 |
 d }
 |
 |  j d t |  j ƒ j ƒ  d }
 |
 |  j d t |  j ƒ j ƒ  d }
 |  j j t j k rÖd } n d } |
 d | d }
 |
 d | } | r'd d  l } | j d | d | ƒ n  d | g S(   Niÿÿÿÿi    i   s   No matches definedsd   loop_
_vector.start_model_id
_vector.start_atom
_vector.end_model_id
_vector.end_atom
_vector.label
i   t   "s   "  "s   " s   "  s   " 
s/   #Definition of vectors for display with CCP4mg
s!   # Matched atoms in Superposition
s   #Created on s   
s   
data_VECTORS
s   # s   

s    loop_
_model.id
_model.filename
s     s   "label centre"s
   "no label"s°   

loop_
_display_objects.line_colour
_display_objects.line_style
_display_objects.line_width
_display_objects.label_mode
_display_objects.label_colour
"complement" "dashed"  2 s    "complement"

RÔ   R®   (   Rû  Rª   RN  R«   R¬   R5  t	   GetAtomIDR–   R—   t   GetLabelt   asctimet	   localtimeR4   t   getFilenameR  R   RÑ   RT  R{  t   saveFile(   R,   RÔ   R   t   commentsRû  R®   t   nVt   iVt   atom1t   atom2t   headR¹   t   labmoR{  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   export_matchesÐ  s:    
S.

((	N(8   R   R  RF   R(   R5   Ra   RM   RQ   RS   R  R�   R‚   RZ   R*   R)  R’   R+  Rc   RP   R.  R:  RD  RE  RN   RF  Ri  R´   R¶   Rq  RÉ   RÊ   Rr  RÆ   RÅ   RÇ   R�   R‰  Rk   Rl   Ru  Rx  RË   R‹   Râ  R  R~   R   R  R?  R€   Rƒ   R  Rý   R@  R©   Ra  (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR?   á  sj   '					
									'					7$	Ÿ		8	8	,	_	"					!R%  c           B   sÂ   e  Z i d  d 6d d 6d d 6d d 6d d 6d d	 6Z i  d  d d d d d d
 „ Z d „  Z d „  Z d „  Z d d „ Z d „  Z d d „ Z	 d d d „ Z
 d d d d „ Z d d d „ Z RS(   R5  Re   i    R   i   R}   R   R#  R$  Rt  c         C   sG   | |  _  | |  _ | |  _ | |  _ | |  _ | |  _ |  j | ƒ d  S(   N(   Re   R   R}   R#  R$  Rt  R*   (   R,   R-   Re   R   R#  R$  Rt  R}   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR(      s    						c         C   s   t  |  | | ƒ d  S(   N(   R&   (   R,   R/   R0   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRi   *  s    c         C   s   t  |  | d ƒ S(   NR   (   RY   (   R,   R/   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRE   -  s    c         C   s’   |  j  | j  k s6 |  j | j k s6 |  j | j k r: d S|  j | j k rb |  j | j k rb d S|  j | j k rŠ |  j | j k rŠ d Sd Sd  S(   Ni    i   iÿÿÿÿ(   Re   R   Rt  R#  R$  (   R,   t   other(    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR&  0  s    6$$c         C   si   i  } x' t  j D] } t |  | d ƒ | | <q W| re t |  d d ƒ | d <t |  d d ƒ | d <n  | S(   NR   R$  R#  (   R%  t
   initialiseRY   (   R,   R  R[   R/   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRZ   :  s    c         C   s1   x* | j  ƒ  D] \ } } t |  | | ƒ q Wd  S(   N(   R%   R&   (   R,   R-   R/   R0   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR*   C  s    c         C   sT   | d k r& |  j  r& |  j |  j g S| d k rL |  j rL |  j |  j  g Sg  Sd  S(   Ni   i   (   R$  Re   R#  (   R,   R:   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR,  H  s
    c         C   sS  i  } | r~ |  j  d k rw |  j d k rw | d k rM |  j rM d |  j g S| d k rp |  j rp d |  j g Sg  SqOg  SnÑ |  j | ƒ } | rK| d d k rë d d | d g g } |  j d k rç | j d	 d
 | d g ƒ n  | S| j | d ƒ r'| | d | | d d | d g g S| d | d d | d g g Sn g  Sd  S(   NR5  Rs  i   s   End range from i   i    Rm  s   Start of range Ry  s   End of range Rh   (   Re   Rt  R#  R$  R,  R\   R>   (   R,   R:   Rm  t   conversionsR-  Rk  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRj  Q  s*     )$Rm  c         C   sÎ  | d k r d } n d } |  j  |  j | ƒ } |  j  |  j | ƒ } d } d } d }	 d }
 t | ƒ d k rÆ | d j ƒ  j ƒ  | d j ƒ  j ƒ  k r¥ d d g S| d j ƒ  | d j ƒ  }	 n  t | ƒ d k r/| d j ƒ  j ƒ  | d j ƒ  j ƒ  k rd d g S| d j ƒ  | d j ƒ  }
 n  |	 r^|
 r^|	 |
 k rQd d g Sd d	 g Snf|	 rv|
 rvd d
 g S|	 rt | ƒ r¶| d j ƒ  j | d j ƒ  | |	 ƒ } n  | sÆd d g S| d k  rñt | ƒ j	 | | d ƒ } n t | ƒ j	 | d | ƒ } | d |  _ n§ |
 rÄt | ƒ r]| d j ƒ  j | d j ƒ  | |
 ƒ } n  | smd d g S| d k  r˜t | ƒ j	 | | d ƒ } n t | ƒ j	 | d | ƒ } | d |  _ n  d d	 g S(   NRy  iÿÿÿÿi   i    i   sB   The selected residues in the fixed model are not in the same chainsC   The selected residues in the moving model are not in the same chains6   The selected ranges have different numbers of residuesR   s   No range selected yetsL   The selected range in the fixed model can not be matched in the moving modelsL   The selected range in the moving model can not be matched in the fixed model(
   R�  R#  R$  RH   t   GetChaint
   GetChainIDRÄ  t
   GetResidueR4   t   getResidueID(   R,   Re   R–   R—   t	   directionR´  Rµ  t   pr1t   pr2t   irdif1t   irdif2R†   (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyRz  y  sT    	, 
!, 
!

.
.
c   
      C   s  t  | ƒ } d d  l } | j d ƒ } | d k  r7 g  S| j d ƒ } g  } | d k  rŽ | j | ƒ } | d d k r| j | d ƒ qn„ | j | d | !ƒ } | j | d | d !| | d ƒ }	 | d d k rî | j | d ƒ n  |	 d d k r| j |	 d ƒ n  | S(   NiÿÿÿÿR�  i    RÃ  i   (   R4   R6  t   rfindR”  R\   (
   R,   R8  R—   R;   R6  t   pslasht   pdashR†   RÛ  RÝ  (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR�  °  s$      &  (   R   R  Rc  R(   Ri   RE   R&  RZ   R*   R,  Rj  Rz  R�  (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyR%    s    


			
			(7(   t   __doc__t   syst   mgappR  t   dataobjR'   t   global_definitionsRÑ   R  RÜ   Ró  R÷  R�   R   R?   R%  (    (    (    s@   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/Superpose.pyt   <module>   s.   





ÿ ÿ ·ÿ ÿ ÿ ÿ ÿ 8