ó
ÉÝ{Tc           @   s¢  d  Z  d d l Td d l Td d l Z d d l Z d d l Z d d l Z d d l Td d l Td d l Td d l	 Td d l
 Td d l Td d l Td d l Z d d l Td d l Td d l Z d d l Z d d l Td d l Z d d l Z d d l m Z d d d i  d „ Z d e e e f d	 „  ƒ  YZ d
 „  Z d d d „ Z d e f d „  ƒ  YZ d d „ Z d d d „ Z d „  Z  i  d „ Z! d d „ Z" d „  Z# d S(   s•  
     python/ui/model.py: CCP4MG Molecular Graphics Program
     Copyright (C) 2001-2008 University of York, CCLRC
     Copyright (C) 2009-2011 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ÿÿÿÿ(   t   *N(   t   QtCoret    s   bonds:all_atomsc   
      K   s°  d d  l  } t |  d ƒ } | sC t ƒ  j d |  ƒ d d |  g S| j ƒ  } | j ƒ  | j d | ƒ rè |  j ƒ  j d ƒ s• |  j ƒ  j d ƒ rè d GH| j d	 | ƒ s¾ d d
 |  d g St	 d |  ƒ } | d rè d | d g Sn  t
 d |  d | ƒ }	 |	 j | ƒ |	 j d d ƒ } d G| GH| d d k sH| d t
 j k r¦|	 j ƒ  | d t
 j k rˆt ƒ  j d |  d | d ƒ n  | d d |  d | d g Sd |	 g S(   Niÿÿÿÿt   rs   Error opening file i   t   htmlt   pdbs   pdb.gzs
   found htmlt   HEADERs   Error reading file: s%   
 the file appears to be an html filet   filenamei    t   namet   warningst   rvs   
s   Error loading file: (   t   ret   openFilet   MGGUIt   WarningMessaget   readt   closet   searcht   lowert   endswitht   strip_html_from_PDBt   MolDatat   setCustomResCIFFilest   loaddatat   NO_ATOMS_IN_CIF_FILEt   delete(
   R   R   t   drawing_stylet   customResCIFFilest   keywordsR   t   ft   lR
   t   m(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   openpdbfile0   s2    
<

 	#
#R   c           B   sÿ  e  Z d  Z i  Z d Z i  Z d e d <d d d d d d	 d
 g Z d d d d d d	 d
 g Z e e	 e
 e e e e g Z d d d d d d d g Z d d d d d d d g Z e e e e e e e g Z d d d d d d d g Z d d  d! d" d# d$ d% g Z e e e e e e e g Z g  d i  d d& „ Z d' „  Z d( „  Z d) „  Z  d d* „ Z! d+ „  Z" d, „  Z# d- „  Z$ d d. i  d e% d/ „ Z& d d d e' g  e% d0 „ Z( d1 d2 „ Z) d3 „  Z* d4 „  Z+ d5 „  Z, d d6 „ Z- d e' d d1 d7 „ Z. d1 d1 d1 d8 „ Z/ d9 „  Z0 d: „  Z1 d; „  Z2 g  d d< „ Z3 d d d= „ Z4 d> „  Z5 d1 d? „ Z6 d@ „  Z7 dA d1 d d i  i  i  i  dB „ Z8 g  dC „ Z9 dD „  Z: d d d dE „ Z; d dF „ Z< dG d d dH dI „ Z= dJ „  Z> dK „  Z? d dL „ Z@ e' dA dM „ ZA d d d d d d d d d d d d d d dN „ ZB dO „  ZC d d dP „ ZD dQ „  ZE dR „  ZF d1 e' dS „ ZG dT „  ZH dU „  ZI dV „  ZJ dW „  ZK dX „  ZL d d dY „ ZM dZ „  ZN d[ „  ZO e' e' d\ d d] „ ZP d d d1 g  d^ „ ZQ d d_ „ ZR d` da db „ ZS dc „  ZT dd „  ZU RS(e   iñØÿÿi    R   t   bymols
   amino acids   nucleic acidt
   saccharidet   solventt   solutet   monomert   metalt
   amino_acidt   nucleic_acidt   Nt   St   Bt   3t   4t   5t   Ht   Es   T 3s   T 4s   T 5s   No structures   Beta strands
   Beta bulges   3-turns   4-turns   5-turns   Alpha helixt   nonet   strandt   bulget   3turnt   4turnt   5turnt   helixc         K   s®  i  |  _  d |  _ t | d ƒ r= | j d ƒ r= | d } n  t j |  d d | d d d | d | ƒt j |  ƒ t j |  ƒ d	 |  _ d
 |  _	 d
 |  _
 t ƒ  |  _ t ƒ  |  _ d
 |  _ g  |  _ g  |  _ d
 |  _ d
 |  _ t j d t _ d d  l } | j t j ƒ |  _ d
 |  _ d
 |  _ d	 |  _ d  |  _ | |  _ d d  l } | j |  j ƒ |  _ | j d ƒ r„|  j j  | d ƒ n  t |  d ƒ sž|  j! rªd	 |  _! n  d  S(   Ni   t   has_keyR   R   t   modulet   modelR   t
   dataparamsR   i    iÿÿÿÿt   model_symmetryt
   mol_colour("   R   t   show_aromatic_ringst   hasattrR8   t   DataObjt   __init__t   ModelAnalysist   EditHistoryt   molHndt   spline_selHndt   worm_selHndt
   SplineInfot   splineinfo_ribbont   splineinfo_wormt   do_update_all_bonded_atomst   changedSplinest   changedConnectedt   all_bonded_atomst   all_bonded_atoms_splineR   t   last_MolData_numbert   copyt   deepcopyt   MolData_numbert   charge_loadedt   movingt   masterCrystalt   Nonet	   treeModelt   saved_dataparamsR<   R   t	   setParamsR=   (   t   selfR   R   R;   t   restore_from_versiont   kwRP   R<   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRA   t   s@    															c         C   s;   |  j  |  _  |  j ƒ  |  j ƒ  d d  l } | j ƒ  d  S(   Niÿÿÿÿ(   R>   t   GetMolBondst   redraw_all_objectst   rebuildt   UpdateDisplay(   RZ   R_   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   toggleAromaticity©   s
    

c         C   s   | |  _  d  S(   N(   R   (   RZ   R   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR   ²   s    c         C   s…   |  r� |  j  ƒ  } |  j ƒ  | r� xY | D]N } t d | ƒ } | rU | d j ƒ  q) t d | ƒ } | r) | j ƒ  q) q) Wq� n  d  S(   NR   i    (   t   getDependentsForDeletionR   t   get_dataobjt   get_dispobj(   RZ   t
   dependentst   dept
   dep_target(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt	   deleteAll·   s    
c         K   s  |  j  r |  j ƒ  n  t ƒ  j d |  j d |  j ƒ d } x> t d d ƒ D]- } | |  k rK | j |  j k rK d } qK qK W| s› t ƒ  j d |  j ƒ n  t j	 |  ƒ t
 |  d d  ƒ } | r| j ƒ  | j ƒ  t j j d ƒ rò d	 G| GHn  d | _ d
 d  l } | j | ƒ n  ~  d  S(   Nt   setR   i    t   object_typeR   i   RD   t   CCP4MG_DEBUG_MEMORYt   deliÿÿÿÿ(   RT   t   movet	   MODELINFOt   savet
   name_labelR   Rc   R   R@   R   t   getattrRV   t   DeleteAllSelectionst   FreeFileMemoryt   ost   environR8   t   thisownt   _mmutt   delete_CMMANManager(   RZ   R   R   t	   duplicatet   objRD   Rw   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR   Ë   s(    	  

	c         C   s	   d GHd  S(   Ns3   MolData.__del__ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(    (   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   __del__å   s    c         C   s5   g  } t  ƒ  j |  j ƒ } | r1 | j | ƒ n  | S(   N(   t   CRYSTALMANAGERt
   getCrystalR   t   append(   RZ   t   xtl_listt   xtl(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRb   é   s
     c         C   s8   t  d ƒ j d ƒ r- t |  j ƒ d |  j S|  j Sd  S(   Nt   atom_label_paramst   show_number_labels   ) (   t   PMt   gett   strRR   Rp   (   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt	   get_labeló   s    iÿÿÿÿc   
      C   s)  | r | r t  ƒ  j } n  | d k r; |  j r; d } n  | d k r} g  } x- |  j D] } | j sW | j | ƒ qW qW Wn  i |  j d 6} t  ƒ  j d | d | d | d | d	 | d
 | ƒ }	 |	 d rï |  j s|  j d d d d ƒ qn- | d k rx | D] } | j	 ƒ  qW~ n  | |  _
 |	 S(   Nt	   all_atomss   bonds:trace_and_ligandsi    t   MolData1R   t   chosen_dataobjt   chosent   keep_display_objectst
   mgpic_filet   force_recolour_bymolRj   t   MolDispt   visiblei   (   t   PICTUREWIZARDt   default_drawing_stylet   ca_onlyt   objinstst   master_applicationR~   R   t   create_picturet
   add_objectR   t   lastWizardRun(
   RZ   R   R‹   RŠ   RŒ   R�   t   togoRz   t   dobjR
   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   applyDrawingStyleü   s(    		 3
	 	c   7      C   s±  t  j ƒ  } d d g j | ƒ ro d d  l } | j | ƒ } | d k rQ d } n | d k rf d } n  d } n  | d k r)g  }	 t |  d ƒ r× |  j r× xD t |  j |  j d	 ƒ D] }
 |	 j	 d
 t
 |
 ƒ ƒ q³ Wn	 d g }	 |  j j ƒ  } x3 | D]+ } |	 j	 | d |  j j | d	 ƒ ƒ qö W|	 S| d k rËg  }	 t |  d ƒ r‘|  j r‘xD t |  j |  j d	 ƒ D] }
 |	 j	 d
 t
 |
 ƒ ƒ qmWn	 d g }	 |  j j ƒ  } x | D] } |	 j	 | ƒ q°W|	 S| d k rug  }	 | d k rõ|  j } nH | d k r|  j } n0 | d k r%|  j } n | d k r=|  j } n  x1 | D]) } | r`|	 j	 | ƒ qD|	 j	 d ƒ qDW|	 S| d k rt d ƒ } x! t d d ƒ D] } d | | <q�Wd	 | d	 <d	 | d <|  j j | ƒ } t j | d ƒ }	 |	 d s |	 j ƒ  n  |	 S| d k r4g  }	 t |  j ƒ d k r0| rt | ƒ d k rt | d ƒ d k r|  j j ƒ  } |  j j ƒ  } |  j j | t d | d j d
 ƒ j ƒ  t d t d d d d d t  ƒ t  j ƒ  } t! j" |  j | | ƒ } | j# ƒ  } |  j j$ | t | | d d t  ƒ xÖ |  j D]Ë } |  j j ƒ  } |  j j | t | t  ƒ |  j j | t | t% ƒ t  j ƒ  } t! j" |  j | | ƒ } | j# ƒ  } | d k rÕ| Gd G| d j d
 ƒ j ƒ  Gd G| GH|	 j	 | ƒ n  |  j j& | ƒ qW|  j j& | ƒ |  j j& | ƒ q0x! |  j D] } |	 j	 | ƒ qWn  |	 S| d k ród d  l } g  } d } d d d g j | ƒ ryd } n t' j( d  d | ƒ } | d! k rÅg  }	 x |  j D] } |	 j	 | ƒ qªW|	 S| d k rã| j | ƒ } n´ | d k r| d" t) ƒ  j* d# d$ d% |  j+ ƒ d& } n{ | d k rU| d" t) ƒ  j* d# d' d% |  j+ ƒ d& } nB | d k rs| j | ƒ } n$ |  j, | ƒ t- d s—t- d	 } n  |  j j ƒ  } |  j j | t. | t  ƒ | rñ|  j j | t. | t% ƒ |  j j& t/ ƒ n  xz | D]r } |  j j ƒ  } |  j j | t. d | t d t d d d d d t  ƒ |  j j | t. | t% ƒ |  j j& | ƒ qøWt  j ƒ  } t0 ƒ  } t! j1 |  j | | ƒ } | j# ƒ  } | d k rßx) t d | ƒ D] }  t2 | |  ƒ }! qÃWn  |  j j& | ƒ | Sd( d) g j | ƒ rÄ	g  }" |  j j ƒ  } t' j( d  d | ƒ } |  j j | t | t  ƒ t3 ƒ  } t! j" |  j | | ƒ } | j# ƒ  }# | d) k r–t4 |# d	 ƒ }# n  |# d k r°	t5 | d ƒ }$ t
 |$ j6 ƒ  ƒ }% |% sÖ|% d k rßd* }% n  |% d
 t
 |$ j7 ƒ  ƒ }& |$ j8 ƒ  }' |' r	|& d+ |' }& n  |& d" |$ j9 ƒ  d& }& xy t d |# ƒ D]e }( t5 | |( ƒ }$ t j t
 |$ j: ƒ ƒ }) |$ j; ƒ  }* |* r”	|) d, |* }) n  |" j	 |& d
 |) ƒ qD	Wn  |  j j& | ƒ |" S| d- k rŽ
t) ƒ  j< d% |  j+ g d. d/ ƒ \ }+ }, |, j= ƒ  }- d } xB |  j> d0 d1 ƒ D]. }. | d	 } |- j	 t
 | ƒ d, |. j? ƒ q
W|, j= ƒ  }/ |/ j@ |  jA ƒ g  }0 |0 j	 |/ ƒ |0 j	 |- ƒ |0 S| d2 k rÀ|  jB sª
| r¹tC ƒ  jD d d3 d4 d5 g ƒtE jF d6 <tE jF d6 |  _B tG d0 d7 ƒ }1 d } tH }2 x¼ |2 rµ| d8 k  rµtI }2 xš |1 D]’ }3 | r>|3 j: |  j: k r>Pn  |3 j: |  j: k r|3 jB |  jB k rtH }2 tC ƒ  jD |3 jB d3 d4 d5 g ƒtE jF d6 <tE jF d6 |  _B | d	 } PqqWqý
Wn  |  jB S| d9 k rÓ|  jJ S| d: k rEt) ƒ  j< d% |  j+ d. d; d# d< ƒ \ }4 }5 |4 r>|5 jK d< ƒ r>|5 d< jK d= ƒ r>|5 d< d= Sg  Snh | d> k r­| r­t  j d8 ƒ } x t d8 ƒ D] } d | | <qsWd	 | d? <|  j jL | | ƒ }6 |6 Sn  d S(@   Nt   peptide_listt   strand_listiÿÿÿÿt   peptidet   nucleict
   chain_listt
   model_listt
   nmr_modelsi   t   /s   /1t    t   model_number_listR#   R   s   // /t   secstr_listi   i    i   s   
t   monomer_listR    g        g      @s   in chains    and monomert   res_lists   ' 't   UNNAMEDs   /1//s   /0t   monomerst   (t   keyR'   Ri   t   )R(   t	   atom_listt
   first_atoms   // t   .t   :t   selobj_listt   infot   user_selectionRj   RŽ   t   molecule_colourt   excludet   blackt   whiteR!   R   i   R’   t   element_listt   selection_protocolst   elementt   ORDERt   energy_typei
   (M   t
   pygl_coordt   intpt   countRP   RQ   R?   R¡   t   ranget   first_nmr_modelR~   R…   R<   t   get_symmetry_modelst
   modelSymidt   peptidest   nucleicst   solvent_chainst   chainst   intaRD   t   ListSecStructuret   stringt   splitt   popt   lenR©   t   NewSelectiont   Selectt
   STYPE_ATOMt   rstript   stript   ANY_RESt   SKEY_NEWt   mmutt   GetAtomSelIndext   valuet   SelectNeighbourst   SKEY_ANDt   DeleteSelectionR   t   subRn   t   get_names_stringRp   t   parse_selectionR
   t   STYPE_RESIDUEt   qualifier_selHndt   newPPCResiduet   GetResidueSelIndext   getPCResiduet
   newPPCAtomt   mint	   getPCAtomt
   GetChainIDt	   GetSeqNumt
   GetInsCodet
   GetResNameR   t	   GetAltLoct   get_infot   keysRd   t   selection_labelt   extendt   objnamesR=   t   MGCOLOURt   nextR   t   colour_counterRc   t   Truet   FalseR’   R8   t	   AtomLabel(7   RZ   t   attbt   parent_selectiont	   qualifiert   PAtomRÇ   R�   t	   selindexpRP   t   mmt   modt
   sym_modelst   itemt   sourcet   chaint   maskt   it   outputt   chainSelt	   neighbSelt   selAtomst	   nSelAtomst   ppt   monSelR§   t   qualifer_selHndt   selt   selHndt   cht   chselHndt   selResiduest   nselRest   irt   pcresR­   t   nselAtomt   pcatmt   chnidt   resnamet   inscodet   iaR   t   altt   retvalR³   t   selobj_labelsRz   R±   t   rett   dobjst   inUseR™   t   statust	   protocolst
   text_label(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   get_attribute  s–   			  	)  	 


 .G"(	 --
 4		  	  
"%$(
) 
i   c         C   s  t  j |  ƒ } |  j j ƒ  } | r1 | | d <n  |  j j ƒ  | d <|  j j ƒ  ro |  j j ƒ  } | | d <n  t |  d ƒ r� |  j	 r� |  j	 j
 ƒ  | d <n  t |  d ƒ r¼ |  j | d <n  t |  d ƒ rÛ |  j | d <n  t |  d ƒ rú |  j | d <n  t |  d	 ƒ r|  j | d	 <n  | S(
   Nt   symmetry_matesR<   t   transform_matrixt	   animationt   load_animationt	   DSSP_fileR=   R—   R>   (   R@   R;   R<   t   getSymmetryMatest	   getParamsRD   t   GetIsTransformedt   GetTransformR?   R%  t   paramsR'  R=   R—   R>   (   RZ   t   allt   datapart	   sym_matest   tmat(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR;   3  s&     c         C   sæ  d d  l  } t | t ƒ r* | j ƒ  } n	 | j } | j |  j ƒ  | ƒ \ } } } | j d ƒ rGd d  l } t |  d ƒ r	| j d ƒ s™ | d r© |  j j	 ƒ  qD|  j j
 | d d k rÚ |  j j | d ƒ qD|  j j	 ƒ  | j d |  d | d ƒ |  _ qx| j d ƒ rx| d rx| j d |  d | d ƒ |  _ qxn1 | j d ƒ rxt |  d ƒ rx|  j j	 ƒ  qxn  | j d ƒ rž|  j j | d ƒ n" | j d ƒ rÀ|  j j g  ƒ n  | j d ƒ ryg  } g  }	 d	 }
 xo t d	 d
 ƒ D]^ } x6 t d	 d
 ƒ D]% } | j | d |
 ƒ |
 d }
 qW|	 j | d |
 ƒ |
 d }
 qñW|  j j | |	 t ƒ |  j d ƒ n/ | j d ƒ r¨|  j j t ƒ |  j d ƒ n  t j |  | ƒ } | sÆ| râ|  j j d g ƒ d } n  | S(   NiÿÿÿÿR&  R%  R   t   parentR,  R#  R$  i    i   i   t	   transformt   update(   t   utilst
   isinstanceR   R;   t
   dict_diffsR8   t	   AnimationR?   R%  R   R   t   update_data_statusR<   RÀ   R~   RD   t   SetTransformRó   t   update_dependentst   UnSetTransformR@   t
   update_gui(   RZ   t
   shadowdispR4  t   other_dataparsR
   t   diffst   undiffsR7  t   vtmatt   vtrant   iiR  t   j(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR8  T  s^    	!
	c         C   s£   g  } g  } d } xg t  d d ƒ D]V } x2 t  d d ƒ D]! } | j | | ƒ | d } q8 W| j | | ƒ | d } q" W|  j j | | t ƒ |  j d ƒ d  S(   Ni    i   i   R2  (   RÀ   R~   RD   R9  Ró   R:  (   RZ   t   input_matrixRA  RB  RC  R  RD  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   update_matrix�  s    c   
      C   sè  |  j  r" |  j r" |  j r" d Sd } |  j  s: |  j rC d } n> x; |  j D]0 } |  j d | ƒ } | rM | j j ƒ  } qM qM Wt |  d ƒ rµ |  j d k rµ |  j j	 |  j ƒ n  d |  _ t |  d ƒ rò |  j
 d k rò |  j j	 |  j
 ƒ n  d |  _
 d } g  } g  } xÒ |  j d d	 ƒ D]¾ } | j r | j r t | d
 d ƒ r t j j | j ƒ sm| d } n  t j j | j ƒ s—| j j t j ƒ rÞ| j d k s»| j j t j ƒ rË| j | ƒ qÛ| j | ƒ qÞq q W| d k r“| r?|  j j ƒ  |  _
 x6 | D]+ } |  j j |  j
 t | j j ƒ  t ƒ qWn  | r“|  j j ƒ  |  _ x6 | D]+ } |  j j |  j t | j j ƒ  t ƒ q^Wq“n  |  j s±|  j j ƒ  |  _ n  |  j sÏ|  j j ƒ  |  _ n  t } xµ |  j d d	 ƒ D]¡ } | j rè| j rèt | d
 d ƒ rèt j  j | j ƒ r‰|  j j |  j t | j j ƒ  | ƒ t } | r†| j j ƒ  d k r†d | _! d | _" q†q‰qèqèW|  j d k s«|  j
 d k rÉ|  j j ƒ  }	 |  j d k r8|  j j |	 t |  j t ƒ |  j j |	 t d t# ƒ |  j j |  j t |	 t ƒ t$ |  j |  j t% ƒ |  _& n  |  j
 d k r¶|  j j |	 t |  j
 t ƒ |  j j |	 t d t# ƒ |  j j |  j t |	 t ƒ t$ |  j |  j
 t' ƒ |  _( n  |  j j	 |	 ƒ n  g  |  _  g  |  _ d |  _ d S(   s’   
    Update the selection handle which flags all selected atoms in all
    visible bonded MolDisp objects. Unset for only one visible MolDisp
    Ni    i   R   RF   iÿÿÿÿRE   Rj   RŽ   t	   SelHandlet   WORMs   /*/*/*.*/CA:*()   RK   RL   RJ   Rd   t   Connectivityt   GetNumberOfExternalBondsR?   RF   RD   RÚ   RE   R�   R”   Rq   RV   RŽ   t   no_connectivityR¿   t   stylet   spline_stylest
   startswitht   custom_spline_style_prefixR~   RÎ   RÏ   RÐ   RG  t	   getSelHndt   SKEY_ORRM   RN   RÔ   t   connected_stylest   do_redraw_externalt   do_update_connectivityRÙ   t   GetRibbonOrWormSplineInfoRô   RI   Ró   RH   (
   RZ   t   changed_externally_bondedt   objnameRz   t   nvist   spline_objectst   worm_objectst
   spline_objt   modet
   tmp_selHnd(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   update_all_bonded_atoms   s‚     	 		% *$,/		%			c         C   s  d d g j  | ƒ rw |  j ƒ  xU |  j D]G } | j d k r) d d d d g j  | j ƒ r) |  j d d	 ƒ Pq) q) Wn  d
 d d g j  | ƒ rú xh |  j D]Z } | j d | d |  ƒ | j d k r™ | j j d | d |  ƒ | j ƒ  d	 | _	 q™ q™ Wn  t
 j |  | ƒ d S(   sl   
    Intercept Dependency.update_dependents in order to prompt
    all display objects to handle moving
    t   reconfiguret   editRŽ   t   atom_sast   res_sast   atom_buriedt
   res_buriedt   reapplyi   R2  t	   attributet   masterN(   R¿   t   apply_edit_secstrR“   Rj   t   colourt   update_sasareat   handle_moving_datat   labelt
   set_extentt	   do_redrawt
   DependencyR:  (   RZ   Rf  Rz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR:    s    

c         C   s¡  d d  l  } | r' |  j j | ƒ } n  | r,|  j | ƒ } | r,| d rY | d } n t j d ƒ rq d } n  | r½ |  j d ƒ j | ƒ r½ | } | r&|  j d | ƒ }	 | d }
 q&q)t j | ƒ r)|  j d | ƒ } | j | d ƒ r&| d } | r#|  j d | ƒ }	 | d }
 q#q&q)q,n  d	 d
 |  j g d | j | ƒ g d | g d | g g } | r�| j	 d |
 g ƒ n  | r�| j	 d | g ƒ n  | S(   Niÿÿÿÿi   R£   R¦   R­   i   R§   i   t	   CONFIGUREt   molt	   selectionR   t   rest   atomR%   (
   R4  RD   t   AtomLabel_atom1t   splitAtomIDRŸ   R¿   R"  R   t   tclSafeR~   (   RZ   t   CIDt   pAtomt
   if_monomert   if_atomR4  t   idR   R%   R­   Rt  R§   Rs  t   config(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   initialise_MoleculeSelection"  s@    
	
	  c      	   K   s  g  } d |  j  d d |  _ t t ƒ  j t ƒ  j ƒ |  _ d } d } t ƒ  } | j t	 ƒ | j t
 ƒ | j t ƒ | j t ƒ | j t ƒ t j | |  j  d ƒ }	 |	 d k rÉ | j d ƒ } n  t ƒ  }
 |
 j t	 ƒ |
 j t
 ƒ |
 j t ƒ |
 j t ƒ t j |
 |  j  d ƒ }	 |	 d k r=|
 j d ƒ } n  | | k rXt |  j _ n t |  j _ |  j j t	 ƒ |  j j t ƒ |  j j t ƒ t j |  j |  j  d ƒ } | d k rÖ| j | ƒ t ƒ  } |  j j | ƒ } t | ƒ d t | j ƒ  ƒ d | d |  _ |  j d	 |  j d
 |  _ |  j j t ƒ |  j j t ƒ |  j j t ƒ |  j j t ƒ |  j j t ƒ |  j j t  ƒ t j |  j |  j  d ƒ } | d k rY|  j d |  _ d |  j g Snƒ |  j j! ƒ  } | d k rY|  j d |  _ |  j  d j" ƒ  j# d ƒ s9|  j  d j" ƒ  j# d ƒ rI|  j$ |  j g S| j d ƒ n  |  j j% t& d ƒ } | d k r’|  j j' t& d ƒ } n  | | k r´|  j j( | d ƒ n |  j j( | d ƒ t) ƒ  j* d |  j+ d |  j  d d d d ƒ |  j, ƒ  |  j- ƒ  | rT|  j j. t/ j0 |  j1 ƒ ƒ |  j2 ƒ  } | rT|  j d | |  _ qTn  |  j j3 ƒ  s†|  j j4 d ƒ |  j d |  _ n§ |  j j5 ƒ  } d d g j6 | ƒ r-|  j j7 ƒ  } t8 | d d ƒ d k  r-t8 | d d ƒ d k  r-t8 | d d ƒ d k  r-|  j j4 d  ƒ |  j d! |  _ q-n  |  j9 j: |  j  d ƒ } | d rk|  j d | d |  _ n  t; | ƒ d k r‘| j | d ƒ n  t< |  d" ƒ s²|  j= ƒ  |  _> n  t) ƒ  j? d |  j+ d# d$ ƒ \ } } |  j@ ƒ  tA d% ƒ jB |  jC ƒ |  jD ƒ  |  jC d& d ƒ } | d r7|  j d | d |  _ n  d- |  _F | rst; tG d' d( ƒ ƒ d k rsd tH d) ƒ _I n  t< |  d* ƒ r#g  } g  } d } xm tJ d d ƒ D]\ } x5 tJ d d ƒ D]$ } | j |  jK | ƒ | d } qºW| j |  jK | ƒ | d } q¤W|  j jL | | t ƒ |  `K n  t< |  d+ ƒ rn|  jM rnd, d- lN } | jN d. |  d/ |  jM ƒ |  _O |  `M n  |  jP ƒ  |  jQ d ƒ |  jR jS d0 ƒ r±|  j9 jT |  jR d0 ƒ n  |  jR jS d1 ƒ rÝ|  j9 jU |  jR d1 ƒ n  |  j röd |  j | g Sd d2 g Sd- S(3   s7   
    Load data from PDB file and analyse structure
    s   Loading file: i   s   
i    i   s   
At line numbers   :
s5   
 ***This may lead to problems with atom selection***s*   
*****Error loading coordinate file******
s*   
****************************************
s   
FAILED to load files   
No atoms in the files   .cifs   .cif.gziÉ   t   duplicate_chain_idsRi   R   t   overridet   creates   
Matching residues to library

t   P1s'   
No space group in file - setting to P1t   R3s   R 3i   iZ   g�íµ ÷Æ°>i   i   ix   s   H 3s#   
***Space group R 3 reset to H 3***t   originalSymmetryR²   R¹   t   SecStr_paramt   applyRj   R   t   mainviewR$  R&  iÿÿÿÿNR1  R,  R<   R#  R   (V   R   t   load_warningst   CMMANManagert	   RESOURCESt   SRSt   CMolBondParamsRD   t   Managert   SetFlagt   MMDBF_AutoSerialst   MMDBF_IgnoreRemarkst   MMDBF_IgnoreBlankLinest   MMDBF_IgnoreHasht   MMDBF_EnforceUniqueChainIDR4  t   ReadCoorFilet   GetNumberOfChainsRó   t   duplicateChainIDSRô   R~   R¾   t   GetInputBuffert   GetErrorDescriptionCharR…   R×   t   load_errorst   MMDBF_IgnoreNonCoorPDBErrorst   MMDBF_IgnoreDuplSeqNumt   MMDBF_IgnoreSegIDt   MMDBF_IgnoreElementt   MMDBF_IgnoreCharget   MMDBF_IgnoreUnmatcht   GetNumberOfAtomsR   R   R   t   GetUDDHandlet   UDR_HIERARCHYt   RegisterUDIntegert	   PutUDDataRn   t   restoreRp   t   updateCustomResTypest   updateCustomLinksR   RÕ   t   map_string_stringR   R]   t   isSpaceGroupt   SetSpaceGroupt   GetSpaceGroupR¿   t   GetCellInfot   absR<   t   check_symmetryRÍ   R?   t   getMolHndCellR„  Rë   t   analyseRƒ   t   add_dependentRh  t   update_ModelInfo_secstrRV   t   CSASAreaRc   t   VWt   recentreRÀ   R$  R9  R&  R7  R%  t   loadTreeModelR:  RX   R8   RY   t   setSymmetryMates(   RZ   Rµ  R	   t
   find_bondsR   t   errorst   nChains1t   nChains2t   test1t   RCt   test2t   RC1t
   n_err_linet   err_linet   RC2t   natt   udd_duplchidsR  t   spgpt	   cell_infoR
   R  t   dataRA  RB  RC  R  RD  R7  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR   Q  sò    			%

8

N
  


 	! 		
	c         C   s)   |  j  j t |  j ƒ ƒ } |  j ƒ  | S(   N(   RD   R]   t   boolR>   t   apply_edit_bonds(   RZ   R  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR]     s    
c         C   s(   d d  l  } | j |  j |  ƒ |  _ d  S(   Niÿÿÿÿ(   t
   mgTreeViewt   AbstractMolDataRD   RW   (   RZ   RÊ  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR¶    s    c         C   sÑ  d d l  } d d l } d d l } d } |  j j ƒ  } | sL t d d ƒ S| j ƒ  } | j ƒ  } | j ƒ  } | j ƒ  }	 | j ƒ  }
 | j ƒ  } | j ƒ  } | j ƒ  } |  j j | | | |	 |
 | | | ƒ } | sæ t d d ƒ S| j	 ƒ  } | j	 ƒ  } | j	 ƒ  } |	 j	 ƒ  | j
 d } |
 j	 ƒ  | j
 d } | j	 ƒ  | j
 d } | j	 ƒ  } | j	 ƒ  } | d | j
 } | d | j
 } | d | j
 } t d d d | | | | | | g d | d	 | d
 | ƒ S(   sO   
    Return list of reciprocal cell length, angles, volume and orthog code
    iÿÿÿÿNi    R  i   g     €f@t   cellt   sgt   volumet   code(   t   matht   mmdb2R½   RD   R«  t   dictt   doublepR¾   t   GetCellR×   t   pi(   RZ   RÐ  t   mmdbR½   R  RÍ  t   xptrt   yptrt   zptrt   aptrt   bptrt   gptrt   volptrt   codeptrR
   t   xpt   ypt   zpt   apt   bpt   gpt   volpt   codept   at   bt   g(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR¯  !  s<     ' c         C   s�   t  |  d ƒ s! |  j ƒ  |  _ n  | rd |  j j | d | d | d | d | d | d d ƒ n  | r} |  j j | ƒ n  d  S(   NR„  i    i   i   i   i   i   (   R?   R¯  R„  RD   t   SetCellRª  (   RZ   RÌ  RÍ  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   setMolHndSymmetryI  s     	4 c         C   s´   | |  j  k s | r° | |  _  | rL t d | ƒ } |  j | j | j ƒ n@ |  j j d d ƒ sŒ |  j |  j j d ƒ |  j j d ƒ ƒ n  x! |  j D] } | j | ƒ q– Wn  d  S(   NR   R  i   RÌ  RÍ  (	   RU   Rd   Rë  RÌ  RÍ  R„  R„   R“   t   setMasterCrystal(   RZ   t   crystalt   forceR€   Rz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRì  U  s    	+c         C   s$   t  |  d ƒ r |  j St d ƒ Sd  S(   Nt	   SASAreaPMt   SASArea_param(   R?   Rï  Rƒ   (   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   getSASAreaPMh  s    c         K   sk  |  j  s¦ d } |  j ƒ  j d ƒ } | d k rr |  j d | ƒ } | d d k rr | d d k rr | d } qr n  |  j j | ƒ |  _  |  j ƒ  j |  j ƒ d } n  | rg|  j  rg|  j ƒ  j |  j  j	 ƒ |  j
 rï |  j  j d t ƒ } n |  j  j d t ƒ } | r|  `  d  |  _  nG xD |  j d d ƒ D]0 } d	 d
 d d g j | j ƒ r/d | _ q/q/W| Sd  S(   Niÿÿÿÿt   limit_selectionR-  t   commandi    i   Rj   RŽ   Rb  Ra  Rd  Rc  i   (   R³  Rñ  R„   RÝ   RD   t
   GetSASAreaR±  Rj  R3  t	   SetParamsR¡   t	   CalculateRó   Rô   RV   Rd   R¿   Ri  t   do_recolour(   RZ   Re  R   R  t   seleR
   Rz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRj  p  s,    	  		c         K   s	  t  j j |  j d ƒ s4 t  j j |  j d ƒ rS t ƒ  j d |  j d ƒ d  S| r¢ t | d ƒ r¢ | j	 d ƒ r¢ t
 d |  j d |  j ƒ  d | d ƒ } n t
 d |  j d |  j ƒ  ƒ } | j ƒ  } | d d k rt ƒ  j d	 |  j d ƒ | j ƒ  d  S| S(
   Ni   s   File no longer exists R8   R   R   R;   i    i   s   ERROR loading data from file (   Rt   t   patht   existsR   t   isfileR   R   RV   R?   R8   R   R;   R   R   (   RZ   R   R   R
   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   clone–  s    $+
RŽ   c	         K   sN  d  }
 | d k rB t |  j d | d | d | d | d | ƒ}
 n  | d k r{ d d  l } | j |  j d d	 d | ƒ}
 nÏ | d
 k rÀ d d  l } | j |  j d | d | d | d | ƒ}
 nŠ | d k rd d  l } | j |  j d | d | d | d | ƒ}
 nE | d k rJd d  l } | j |  j d | d | d | d | ƒ}
 n  |
 S(   NRŽ   R�   R,  t	   selparamst	   colparamst   styleparamst
   Annotationiÿÿÿÿi   t   HBondst   Contactst   SurfaceDispobj(   RV   RŽ   R   R   R  R  R  (   RZ   Rj   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/model.pyR–   «  s     0!---c         C   sG   |  j  r |  j  j ƒ  n  d d  l } | j d |  d | ƒ |  _  |  j  S(   NiÿÿÿÿR1  t   filelist(   R%  R   R7  (   RZ   R  R7  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   add_animationÂ  s
    	c         C   sQ   t  ƒ  j d |  j d |  j ƒ t |  d ƒ rM |  j j rM |  j j j ƒ  n  d S(   s"   
    Tidy up on  program exit
    Ri   R   R%  N(   Rn   Ro   Rp   R   R?   R%  t
   legend_objR   (   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   handle_program_exitÌ  s    c   	      K   sº   | r° t  d | ƒ } | s) d d | g St j ƒ  } | j | ƒ | r� g  } x |  j D] } | j | ƒ qX Wx | D] } | j ƒ  qv Wn  t j j |  | d | ƒd d g Sd d g S(   s/  
    This is left in as reminder of v1.0 option to load picture style from
    pickle file
    if filename:
      status = HISTORY().load_pickle_file(filename=filename,DIR_filename=DIR_filename)
      #print "load_pickle_file status",status
      if not status or not status.has_key('Data_list') :
        MGGUI().WarningMessage('No model status found in the file')
        return 1
      if len(status['Data_list'])==1:
        copy_dataobj = status[status['Data_list'][0]]
        shadow = 1
      else:
        model_menu = []
        for item in status['Data_list']:
          if status.has_key(item) and status[item].object_type == 'MolData':
            model_menu.append(item)
        MGGUI().CreateGUIWindow ('copy_from_file_model',self, [
            ['TITLE','Copy display from status file'],
            ['OFFSET','display_table'],
            ['RETURN_METHOD','copy_display',
               ['RETURN_LIST','file_model']],
            ['PARAM','file_model',
               ['TYPEDEF','menu',model_menu,model_menu]],
            ['DISPLAY','WINDOW',       
               ['LINE',
                 ['LABEL','Copy from model'],
                 ['WIDGET','file_model']],
               ['BUTTONS',['ok',['LABEL','Apply']],['dismiss','CLOSE']]
            ] ])
        self.copy_from_status = status
        return
    R   i   s   Error finding data object t   cleari    R   (	   RÇ  t   dataobjt   DataObjShadowRo   R“   R~   R   R@   R8  (	   RZ   t	   copy_fromR   R  R   t   copy_dataobjt   copy_dataobj_shadowt   del_listRz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   copy_displayÛ  s    %   
c         C   s~   t  j j | ƒ d d k r1 |  j j | ƒ } n, t  j j | ƒ d d } |  j j | ƒ } |  j | ƒ |  j j t ƒ | S(   Ni   s   .cifi    s   .pdb(	   Rt   Rù  t   splitextRD   t   WriteCIFASCIIt   WritePDBASCIIt   setFilenameR;  Rô   (   RZ   R   R
   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt	   save_file  s    R-  t   PDBc         K   s\  | d k r d } n d } | d k rc t  j j |  j d ƒ | k rc t j |  d |  j d ƒnõd d g j | ƒ r|  j j ƒ  } | d k rá |  j	 d	 d
 ƒ } xj | D]. }	 |	 j
 r¬ |  j j | t |	 j t ƒ q¬ q¬ WqF|  j j | d d t d t d d d d d t ƒ n1 |  j	 d | ƒ }	 |	 s7d d g S|	 j j ƒ  } t |  d ƒ sad |  _ n  |  j d |  _ d d l }
 | r˜|
 j | | ƒ } n@ t  j j |
 j ƒ  |
 j |  j d ƒ d t |  j ƒ | ƒ } t  j j | ƒ rút  j | ƒ n  |  j j | | | ƒ } d d g j | ƒ r:|  j j | ƒ n  | rNd d | g Sd | g Sd S(   sá   
    list_data = 'visible' => list only the atoms in visible display objects
    list_data = MolDisp.name => list only the atoms MolDisp
    or if filename is set then list the data in that file
    or list self.filename
    R  s   .pdbs   .cifR-  i   R   i   R�   Rj   RŽ   i    R    R   s   ERROR in MolData.list_data_filet   list_data_file_indexiÿÿÿÿNt   _sele_s   ERROR writing temporary file (   Rt   Rù  R  R   R@   t   list_data_fileR¿   RD   RÎ   Rd   R�   RÏ   RÐ   R  RQ  t   SelectAtomsRÓ   RG  RP  R?   R  R4  t   get_filenamet   joint   environScratcht   fileRootR…   Rú  t   removet   WriteSelectionRÚ   (   RZ   t	   list_dataR   t   DIR_filenamet   file_formatR   t   save_extR  t   dispobj_listt   dispobjR4  R½  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR  "  sD    		+	& 
 .  c   
   	   C   s   d d l  } d d l } | j ƒ  d k rp | j ƒ  } d d d d d d d d d g	 } |  j j | | t ƒ nœ | j ƒ  j ƒ  } d d d g } g  } d } xV d d d g D]E } x2 d d d g D]! }	 | d } | j	 | | ƒ qÃ W| d } q­ W|  j j | | t ƒ |  j
 d	 d
 ƒ d S(   s1   
    Handle mouse input to translate objects
    iÿÿÿÿNt	   translateg      ð?g        i    i   i   Rf  R2  (   R½   R4  t   transformDeltaModet   worldTranslateRD   R9  Rô   t   worldRotatet   matrixVectorR~   R:  (
   RZ   t   glwidgetR½   R4  t   vtranst   vrott   vrotmatRC  R  RD  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR2  `  s&    		
c         C   s+   x$ |  j  D] } d | _ | j ƒ  q
 Wd  S(   Ni   (   R“   Rn  t   draw(   RZ   Rz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR/  •  s    	c         K   sd  | r¯d d l  m } t ƒ  j d ƒ \ } } } | d k r¼ | d ƒ } x! t d d ƒ D] } d | | <qY Wd d  l }	 |	 j |  j j | | ƒ ƒ }
 |
 r³ |	 j	 |
 ƒ d } qAd } n… | d	 ƒ } d d d d d d d d d g	 } x% t d d	 ƒ D] } | | | | <qù W| j j
 | | ƒ } ~ |  j d
 | d | ƒ } | sKd  S|  j j ƒ  } |  j j | t | t ƒ | |  _ |  j j d d d d g | ƒ |  j j | ƒ d  St ƒ  j d ƒ \ } } } | |  k rãd d d g Sd |  j ƒ  d g d d d d g d d d d d d d g d d d d d g g d d g g g } d d g g } d | | g Sd  S(   Niÿÿÿÿ(   RÈ   Rt  t   SSEi   i    i   R   i	   t   outt   atomIDg        g      ð?t   RETURNs   .handle_transform_popupt   PARAMt   transform_selectt   LABELs   Rotate around thist   TYPEDEFt   menut   residueR   R-  t   INITIALt   pr(   t	   atom_utilRÈ   t   ATOMPICKINGt   get_last_pickedRÀ   RÊ   RÒ   RD   RÉ   RË   t   AtomLabel_maskt   convertAtomIDRÎ   RÏ   RÐ   RÔ   t   transform_centreR9  RÚ   t   name_string(   RZ   R5  R   RÈ   t   molobjR%  t   atomptrR  R  RÊ   RÛ   R  t   py_maskt   selected_atomR  R,  t   display(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   handle_transform_popupœ  sN     	! 	 	 	c         C   s‡   d } d } |  j d | ƒ } xb | r‚ | t | ƒ k  r‚ | | j j ƒ  } | d k ru | j | ƒ ru | | } n  | d } q! W| S(   so   
    Find the first MolDisp containing the atom atm_ptr
    Used when need to stick a label on the display
    i    Rj   i   N(   RV   Rd   RÍ   RG  RP  t   isInSelection(   RZ   t   atm_ptrRj   R%  RC  t	   dobj_listR  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   findDispobjContainingAtomØ  s     c   $      K   s°  d d  l  } | d k rwd } g  } g  }	 g  } t ƒ  j d |  j d d ƒ \ } } | s¡ xD | j ƒ  D]3 \ } } | j | ƒ |	 j | ƒ | j d ƒ qg Wn  t ƒ  j d |  j d d ƒ \ } } | s~x¡ t j D]– } | j | ƒ rÕ | | j d	 ƒ rÕ xk | | d	 D]X } | j	 | ƒ r=| j
 | ƒ } | | | <q| j | ƒ | j | ƒ |	 j d ƒ qWqÕ qÕ Wt | ƒ } n  | s�| d k r´d g } d g }	 d g } d
 } n  t ƒ  j d |  j |  d d |  j g d d g d d g d d d d d d g g d d d g g d d d g g g g d d d d d  d! g g d d d" d! g g d d d# d! g g d$ d% d& d d' g d d( g d d) g g d* | g d+ d, d- g d. | g d/ |	 g d) | g g d0 d) d1 d2 t j t j g d3 t j d g g d0 d. d4 d5 g d3 d g g d0 d/ d4 d5 g d3 d g g d d d6 d. g d6 d/ g d6 d) g g g g	 d7 d8 d d9 g g d: d; g g g g ƒ n5t | | j ƒ r	| d8 k r	i  } x) t j D] } i  | | <g  | | d	 <q¥WxY t t | ƒ ƒ D]E } | | | d	 j	 | | ƒ sÚ| | | d	 j | | ƒ qÚqÚWxr t j D]g } | | d	 rrt ƒ  j d |  j d d d< | d= | | ƒ } q-t ƒ  j d |  j d d d< | ƒ q-Wt ƒ  j d |  j d d d< d> ƒ xc t t | ƒ ƒ D]O } | | rÍ|	 | rÍt ƒ  j d |  j d d d< | | d= |	 | ƒ } qÍqÍW|  j ƒ  |  j ƒ  t ƒ  j d |  j d d? ƒ \ } } | j d@ ƒ r˜d d  l } | j | d@ d | d@ d
 ƒ }
 n d }
 |  j j |
 ƒ } |  j dA | |  _ |  j ƒ  |  j dB dC ƒ } xÉ|  j dB dC ƒ D] } d
 | _ qóWn£| dD k rìt ƒ  j d |  j d d? ƒ \ } } | j d@ ƒ ryd d  l } | j | d@ d | d@ d
 ƒ }
 n d }
 t ƒ  j dD |  d d g d dE g dF dG g d0 dD d4 dH g d3 |
 g g d dI dJ dD dK dL dM dN g g g ƒ nÀ|
 ru| dO k rud d  l } t ƒ  j d |  j d d? d< d@ d= | |
 g ƒ } | j | |
 ƒ }  |  j j |  ƒ } |  j dP | |  _ n7| dQ k r¬|  j j  dR ƒ |  j j! ƒ  }! d d  l" }" |" j# |! dS ƒ }# t ƒ  j dQ |  d dT g d dU g d dV g d d dW dX g g dY dZ d4 d[ g d d dW dX g g d+ d\ d] g d^ d_ g d` |  j g da db g dc |# g g g d d dd g de g  d d df d! g g g g dg dZ g d7 dh d; d di g g g g g ƒ n  d  S(j   Niÿÿÿÿt   restypei    Ri   R²   t   residue_aliasesR   R¹   R»   i   t   edit_restype_t   TITLEs!   Edit residue type assignment for t   ICONt   Editt   HELPs   atom_typing#residue_typest   RETURN_METHODt   handle_editt   RETURN_LISTs   edit_restype::rest   ALIASt   restype_ress   edit_restype::aliast   restype_aliass   edit_restype::typet   restype_typet   DISPLAYt   WINDOWt   LINER6  s/   For residue types not recognised by the monomers   -italics,   library enter the name of residue and eithers3   the equivalent library name and/or the residue typet   EXTENDING_FRAMEt   edit_restypet
   TITLE_LINEt   Names   library namet   typet   LENGTHRp  t	   gui_labels   residue typeRs  t   aliasR4  R7  R8  R:  t   TYPEt   _textt   WIDGETt   BUTTONSt   okt   Applyt   dismisst   CLOSER«   R×   R    t   monomer_libraryR   s'   
Reassigning atom types and bonding..

Rj   RŽ   t   monlibs   Select monomer library filet   OFFSETt   display_tablet	   _cif_filet
   SELECTFILEt   FILEs   -formatt   CIFs   -filters   *.cift   1s   

Revised atom typing...

t   list_chargest   surface_potential_charges   
s   Assigned chargess   surfaces#charge_assignmentt   Datat   MODEt   GUIt   OBJECTRÇ  t   ListDatat   heightt   20t   widtht   60t   pick_dataobjt   fontt   fixedt	   text_listt   MESSAGEt   SUBFRAMEs+   Double click on atom name to centre on atomt   DRAWt   dismiss0t   Close($   t   typesRn   Rë   Rp   t   itemsR~   R   RY  R8   R¿   t   indexRÍ   R   t   CreateGUIWindowR   t   restype_menuR5  t   ListTypet	   SelectionRÀ   t   add_infot   delete_infoR¦  Rh  R4  R  RD   R]   Rˆ  R°  Rd   t   reapply_selectiont
   LoadCharget   PrintChargesRÊ   RË   ($   RZ   t   _editt   exitt   nsecstrt   edit_secstr_secstrt   edit_secstr_firstt   edit_secstr_lastRX  RZ  RY  Ro  t
   DIR_monlibt   dsspfilet   DIR_dsspfilet
   secstrfileR   R‹  t   lengthR  Re  R«   R×   t   sel_protRb  Rþ   RC  R  RÇ  R4  R  t   obj_listRz   t   filnt   textRÊ   t   textlist(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRU  ð  s4   "															
$$

%
%				"							c      	   K   sb  t  ƒ  } | j d ƒ \ } } } | |  k r: d d d g S|  j ri |  j |  j d | ƒ } | d } n |  j | ƒ } d |  j ƒ  d g d d d	 d
 t j t j g d d g d d | d g g g } d d g g }	 |  j rUt j t j j |  j d ƒ }
 | j	 d d d d g d d g d d | d d |
 g g ƒ |	 j	 d d g ƒ n  d | |	 g S(   NRt  R   i    i   R3  s   .handle_edit_secstr_popupR4  t   start_rangeR7  R8  R:  R6  s   Set sec structure for s    toR;  i   t	   end_rangeRf  t   _logicals   Set R£   t   com(
   R=  R>  t   interactive_edit_secstrt   getResidueIDRB  R   t   secstr_menut   secstr_aliasR�  R~   (   RZ   R   t   at_pickRC  R%  RD  RÀ   t
   last_residR,  RG  t   sse(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   edit_secstr_popupÌ  s0    	 					 		 c      
   K   s2  t  ƒ  } | j d ƒ \ } } } |  j | ƒ } | |  k rI d d d g Sd }	 g  }
 g  } g  } xD |  j D]9 } |
 j | d ƒ | j | d ƒ | j | d ƒ qk W| r| | g |  _ |
 d rê | d rê | |
 d <| | d <qi|
 j | ƒ | j d ƒ | j | ƒ d }	 nO | ri|
 d |  j |  j d ƒ k r]| d d k r]| | d <n  g  |  _ n  g  |  _ xV t t | ƒ ƒ D]B } |
 | sŸ| | r…|  j j |
 | | | | | g ƒ q…q…W|  j d d ƒ t	 ƒ  j
 d |  j d	 d
 d d t |	 ƒ g d | g d |
 g d | g g g g ƒ d  S(   NRt  R   i    i   i   iÿÿÿÿR†  t   edit_secstr_R|  t   edit_secstrRp  t   addt   secstrs   first::selections   last::selection(   R=  R>  R¬  R´  R~   R«  RÀ   RÍ   Rh  R   t   UpdateGUIWindowR   R…   (   RZ   R§  R¨  R   R¯  RC  R%  RD  t   residRµ  R›  Rœ  Rš  Rþ   R  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   handle_edit_secstr_popupù  sL    	   
	0			c      	   C   sI  t  ƒ  j d |  j d d d d ƒ \ } } | rE| j d ƒ rEg  } g  } d d  l } xl | D]d } |  j | d | d ƒ } | j | d ƒ | s® t j j	 | d ƒ r² Pn  | j | d ƒ q_ W| r t  ƒ  j
 d |  j d d d d	 d
 | ƒ t  ƒ  j
 d |  j d d d d d
 | ƒ n  t  ƒ  j d |  j d d d d ƒ n  d  S(   NRi   R²   R´  R«   iÿÿÿÿi    i   i   t   selection_commandR×   R¶  (   Rn   Rë   Rp   R8   t   model_selectiont   interpretRangesR~   R   R®  R¿   R’  R“  (   RZ   R  RÇ  t   seli_commandR¶  R»  Rþ   t	   seli_list(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR²  -  s    * (+c         C   s   | |  _  |  j ƒ  d  S(   N(   R'  Rh  (   RZ   R¤  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   setDSSPFileB  s    	c         K   sð  t  |  d ƒ s d  St j ƒ  } d } t  |  d ƒ r• |  j GHt |  j d |  j d ƒ |  j d <t j j |  j d ƒ r• |  j |  j d ƒ } q• n  d } | r| d k rt	 d ƒ j
 d } t ƒ  j d d	 d
 |  j ƒ } t	 d ƒ }	 |	 r|	 j
 j d ƒ r|	 j
 d }
 n d }
 xì t d |  j j ƒ  d ƒ D]Ë } |  j j | ƒ r5|  j d d t | ƒ d | ƒ } | d sË|  j j | ƒ j t | ƒ | d ƒ |  j j | |
 ƒ |  j j | d ƒ q |  j j | ƒ j t | ƒ ƒ |  j j | |
 ƒ q5q5Wn  |  j j t ƒ |  j j t ƒ |  j j t ƒ d k rW|  j j |  j ƒ } n  d } | rg  } t ƒ  j d
 |  j d d ƒ \ } } | rÉ| j d ƒ rÉ| j d ƒ rÉ| d } | d } n  | r|  j j  ƒ  } t! ƒ  } xt t" | ƒ ƒ D]} t# j$ j% | | ƒ sPn  |  j d | | ƒ \ } } | r@Pn  |  j j& | t' | t( ƒ t) j* |  j | | ƒ } | j+ ƒ  } | d k rñt, d ƒ } t# j- t# j$ j. | | ƒ } | | } x2 t d | ƒ D] } t/ | | ƒ } | | _0 qÌWn  |  j j | ƒ qúW|  j j | ƒ qn  x´ |  j1 d d ƒ D]  } t  | d ƒ r§d d d g j% | j2 j3 ƒ r§| j2 j4 j5 d ƒ t6 d | j7 ƒ | _7 t6 d | j7 ƒ | j2 _7 q§n  d d d g j% | j8 ƒ r.d | _9 q.q.W| râd d g Sd d g Sd  S(   NRD   i   R'  i    i   R…  t	   flagBulgeR«   R'   Ri   t   min_helix_lengthi   Ró  R¢   s   /*/R²   R´  Rº  R¶  Rj   RŽ   t   model_colourt   rulest   blendt   SPLINERH  t   FATWORMsB   WARNING: The model secondary structure has been edited by the userR   (:   R?   R½   R¾   R'  R  Rt   Rù  Rú  t   LoadDSSPRƒ   R,  Rn   RÜ   Rp   R8   RÀ   RD   t   GetNumberOfModelst   GetModelRÝ   R…   t   CalcSecStructureRÈ  t   RemoveSmallHelicesRÚ   t   GetNumberOfSecStructuret
   SSE_Strandt	   SSE_Bulget	   SSE_Helixt   ApplyPDBSecStructureRÁ   Rë   RÎ   Rà   RÍ   R   R®  R¿   RÏ   RÞ   RÔ   RÕ   Rá   R×   RÈ   t   secstr_enumR�  Râ   R0  Rd   RÂ  t   colour_modet
   CMolColourt   SetModet   maxR÷  RL  Rn  (   RZ   R†  t   ParamsManagerR   Rú   t   load_errt   npdbsecsRÀ  R'   t   pmt   minHelixResiduesR:   R
   t   nChangedR¶  R  RÇ  Rº  t	   resSelHndR  RC  R  R  R0  R  R  Rz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRh  H  sˆ     $#$
&8$%
	  
 
c   
      C   s…  t  ƒ  j d |  j d d d d ƒ \ } } | s@ | j d ƒ rD d  St |  d ƒ rh |  j rh |  j } n g  } x¿ | D]· } | d j | ƒ su |  j |  | d d d ƒ} |  j |  | d d d ƒ} | s)| r× q,| d	 d
 k r |  j j	 d | | ƒ q,| d	 d k r,|  j j	 d | | ƒ q,qu qu Wg  } x| d D]û } | j | ƒ s/|  j |  | d d d ƒ} |  j |  | d d d ƒ} d } | sªd G| d GHnl | sÀd G| d GHnV | d	 d k rë|  j j	 d | | ƒ } n+ | d	 d
 k r|  j j	 d | | ƒ } n  | s<| j
 | ƒ q<qA| j
 | ƒ qAWd |  _ x, |  j d d ƒ D] }	 d |	 _ d |	 _ q\W| |  _ d  S(   NRi   R²   t
   edit_bondsR«   t   current_edit_bondsi    t   force_one_atomi   i   R   Rµ  iÿÿÿÿs)   Attempting to edit bonds - no atom calledRj   RŽ   (   Rn   Rë   Rp   R8   R?   RÞ  R¿   t   interpretAtomIDRD   t	   EditBondsR~   RJ   Rd   RT  Rn  (
   RZ   R  RÝ  RÞ  Rþ   t   p_atom1t   p_atom2t   new_edit_bondsR
   Rz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRÉ  §  sP       			c         C   s\  t  ƒ  j d |  j d d ƒ \ } } | sÉ t } x– t t t j ƒ ƒ D]| } t j | } | j | ƒ rF | | j d ƒ rF xD | | d D]1 } |  j	 j
 | t t j | ƒ | ƒ } t } qŠ WqF qF Wn  t  ƒ  j d |  j d d ƒ \ } } | sX| r=t } xS | j ƒ  D]* \ }	 }
 |  j	 j |	 |
 | ƒ } d } qWqX|  j	 j d d t ƒ } n  d  S(   NRi   R²   R¹   R»   RN  i    R   (   Rn   Rë   Rp   Ró   RÀ   RÍ   R   RY  R8   RD   t   SetCustomRestypet   intt   restype_codeRô   RŒ  t   SetCustomResSynonym(   RZ   R  R¢  R  R  RM  Rþ   R
   Re  R«   R×   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR¦  á  s&    "%c         C   s$   |  j  ƒ  |  j ƒ  } |  j ƒ  d  S(   N(   R§  R]   R^   (   RZ   R  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   apply_edit_linksÿ  s    
c         C   s�   t  ƒ  j d |  j d d d d ƒ \ } } | j d ƒ r} xA | d D]2 } t ƒ  j j | d | d | d | d ƒ qD Wn  d  S(	   NRi   R²   t
   edit_linksR«   i    i   i   i   (   Rn   Rë   Rp   R8   RŠ  t   CMGSBaset   AddLink(   RZ   R  Rê  Rþ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR§    s
    c         C   s   d  S(   N(    (   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   set_save_format  s    c   	      C   sÝ   | d k rg |  j  d  | g ƒ } | d d k rT | d d k rT d } | d } qm | sm d d g Sn d } |  j | ƒ \ } } | r’ d d	 g Sg  } x8 d d d g D]' } | j | | | | d d ƒ q¨ Wd | g S(
   NR   i    i   g        i   i   g       @(   g        g        g        (   g        g        g        (   RÝ   RV   t
   get_extentR~   (	   RZ   Rr  R  R
   t   if_del_selhndR  t   extentRª  RC  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt
   get_centre   s       
%c         C   sL   |  j  j | ƒ } t d ƒ } | j | ƒ } | r< d } n d } | | g S(   Ni   i    (   RD   t   Extentt   doubleat   frompointer(   RZ   R  t	   extentptrt   tmpRð  R  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRî  :  s    	c   
      C   s   |  j  j | ƒ d k rC |  j  j | ƒ } |  j | } | j } n  t ƒ  j d |  j d d d | ƒ \ } } | rü | j | ƒ rü | | } t	 |  j  ƒ d k r« d } qü d } x) |  j D] }	 | |	 j
 k r» |	 } q» q» W| d k rü |  j d } qü n  d  S(	   Ni   Ri   R²   R³   R«   i    i   R   (   Rï   R¿   R�  R“   R  Rn   Rë   Rp   R8   RÍ   Re  (
   RZ   t   selobjRC  Rz   R  R  R³   Rr  R  R™   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   interpret_selobjG  s     
	  g        c         K   s¥  t  |  d ƒ rl d d  l } | d k rl |  j j ƒ  | j ƒ  j d ƒ rY |  j d ƒ qi |  j d ƒ ql n  | r|| r|| j j d ƒ sœ | j j d ƒ r|| j j d ƒ r¾ | j d } n6 d d	 d	 d	 d	 d d	 d	 d	 d	 d d	 d	 d	 d	 d g } | j j d ƒ r| j d } n6 d d	 d	 d	 d	 d d	 d	 d	 d	 d d	 d	 d	 d	 d g } | | k rid d  l	 }	 |	 j
 |	 j d
 d
 | ƒ ƒ }
 |	 j
 |	 j d
 d
 | ƒ ƒ } |
 d | | | j ƒ  } |	 j d
 d
 d	 d	 d	 d | | d | | d d	 d	 d	 d | | d | | d d	 d	 d	 d | | d | | d d	 d	 d	 d	 g ƒ } | | } |  j j | t ƒ n  |  j d ƒ q|n  t j |  d | d | d | d | ƒd  S(   NR%  iÿÿÿÿi    t   update_propertiesR_  R2  R$  g      ð?g        i   i   i   i   t   initial_statust   final_statust   fractiont   step(   R?   R7  R%  t
   next_framet   AnimationParamsManagerR„   R:  R;   R8   R½   t   Quatt   matrixt	   getMatrixRD   R9  Ró   R@   t   movie_interpolation(   RZ   Rú  Rû  Rü  Rý  R   R7  t   ivMatt   fvMatR½   t   iQuatt   fQuatt   rotMatt   transMat(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR  ^  sJ    $$$
c      
   C   so  t  |  d ƒ rJ|  j rJ|  j j d k rc t j j |  j j d ƒ rð | j |  j j d ƒ qð n� |  j j d k rð xx t |  j j	 d |  j j	 d ƒ D]P } |  j j
 d t | ƒ |  j j
 d } t j j | ƒ r™ | j | ƒ q™ q™ Wn  | rJt j j | t j j |  j j d ƒ d ƒ } |  j j d | | g |  j _ qJn  t j |  d | d | d	 | d
 | ƒS(   NR%  t
   NMR_modelsi   t   multiple_PDBsi    i   t   projectt   dirt	   overwritet   extra_files(   R?   R%  R"  Rt   Rù  Rú  R   R~   RÀ   t   frame_ranget   filebaseR…   R  RË   R@   t   copy_data_files(   RZ   R  R  R  R  t   iframeRù  t   newfile(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR  “  s    * /%c         K   sæ  d d  l  } t j ƒ  } t | d ƒ } | s1 d S| j ƒ  } t | ƒ d k  r] | j ƒ  d Sd } d } x[ | d k rÆ | t | ƒ k  rÆ | j | | d ƒ d k r¹ d } | d } ql | d } ql W| t | ƒ k rÝ d S|  j j	 d ƒ }	 xæ| t | ƒ k  r×t | | ƒ d k  r*| d } qò n  t
 | j | | d d	 !ƒ d
 ƒ }
 | j | | d	 ƒ } | j | | d ƒ } | | d } | | d } | d k rØ| d k sÇ| d k sÇ| d k rØ| d | } n  |
 d
 k rÊ|  j j | ƒ rÊt ƒ  } |  j j ƒ  } |  j j | t d | |
 | |
 | d d d d t ƒ t j |  j | | ƒ } | j ƒ  } d  } | d k rŠt | d ƒ } n  | rÊt j j | ƒ rÊt j t j j | ƒ } | | _ qÊn  | d } qò W| j ƒ  d S(   NiÿÿÿÿR   i   i    s   RESIDUE AA STRUCTUREi   i   i   i
   iüÿÿi   i   i   t   TR,   R-   R.   R£   R    t   CAt   C(   RÊ   R½   R¾   R   t	   readlinesRÍ   R   t   findRD   RÉ  t   safeIntRÒ   RÇ   R¿   Rà   RÎ   RÏ   RÞ   RÔ   RÕ   Rá   R×   RV   Râ   R   t   secstr_code_dsspt   secstr_enum_dsspR�  R0  (   RZ   R   R   RÊ   Rú   R   t   linesRC  t   matcht   pMdlR¸  t   insR   t   dsspt	   dssp_qualt   residuesRÜ  t   nSelRest   pResR±  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRÇ  ¦  sZ     
! 
#0	4
R³   t   genericc         C   sÛ   g  } | d k r× xÂ |  j  D]´ } d g j | j ƒ rF | j g } n6 d d d g j | j ƒ rv | j | j g } n g  } xQ | D]I } | j d d k rƒ | j | j d ƒ sÌ | j | j d ƒ qÌ qƒ qƒ Wq Wn  | S(   NR³   RŽ   R  R  R  t   selectt   selection_scheme(   R“   R¿   Rj   RG  t
   SelHandle1t
   SelHandle2Rý  R~   (   RZ   R²   t   contextt   schemesRz   t   selhandle_listt   selh(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   get_open_schemesà  s    %c         C   sG   |  j  ƒ  } x! | D] } | j ƒ  d | _ q Wd |  _ |  j ƒ  d  S(   Ni   (   Rd   t   set_reapply_selectionRT  RJ   R^  (   RZ   R$  Rz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR^   ú  s    
	c         C   sZ   xS |  j  D]H } x? d d d g D]. } t | | d  ƒ } | r  | j d ƒ q  q  Wq
 Wd  S(   NRG  R)  R*  iÿÿÿÿ(   R“   Rq   RV   t	   setSelHnd(   RZ   Rz   Rþ   R.  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   resetSelHandles	  s
     (V   t   __name__t
   __module__R   t   class_dependentsRO   Rò   R�  RY  t   RESTYPE_PEPTIDEt   RESTYPE_NUCLt   RESTYPE_SACHt   RESTYPE_SOLVENTt   RESTYPE_SOLUTEt   RESTYPE_NONPOLYt   RESTYPE_METALRç  t   secstr_codeR  t   SSE_NoneRÍ  t	   SSE_3Turnt	   SSE_4Turnt	   SSE_5TurnRÏ  R  R­  R®  RÎ  RÑ  RA   Ra   R   Rh   R   R{   Rb   R†   Rô   Rš   RV   R"  R;   R8  RF  R^  R:  R~  R   R]   R¶  R¯  Rë  Rì  Rñ  Rj  Rü  R–   R  R  R  R  R  R2  R/  RH  RL  RU  R²  R¹  R²  R¿  Rh  RÉ  R¦  Ré  R§  Rí  Rñ  Rî  Rø  R  R  RÇ  R/  R^   R2  (    (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR   Z   s    
	5						
		ÿ !	<		g.¼			(	&	!
	8	=	5	<			Ø	-4		_	:							4:	c          C   s¤   d d  l  }  |  j d d d d d d d d	 d
 g d i d d	 6d d
 6d i t d t d d d d ƒ d	 6t d t d d d d d d d d d d ƒ d
 6d d ƒ } | S(   NiÿÿÿÿR   R…  t   titles   Secondary structuret   picture_definitioni   t   guiRÀ  RÁ  t   defaulti   t
   definitionRb  Rl  s   Show beta bulgesRL  t   checkboxs   Min. residues per alpha helixt   spinboxRÕ  g      i@Rä   i    Rý  t   helps   analysis#secstr(   t   servicesRÖ  RÒ  Ræ  (   RJ  RÙ  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   SecStructureParamsManager	  s    		Rð  c         C   s»  d d  l  } | j d |  d d d | d d d d	 d
 d d d d d d d g d i d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d i t d t d d d d d  d! d" d# d$ d% ƒ d 6t d t d d& d d d  d' d" d( d$ d) ƒ d 6t d t d d* d d d  d+ d" d# d$ d ƒ d 6t d t d d, d d- ƒ d 6t d t d d. d d- ƒ d 6t d t d d/ ƒ d 6t d t d d/ ƒ d 6t d t d d0 d d1 d2 d3 d4 d5 g d6 d7 d d8 g ƒ d 6ƒ S(9   NiÿÿÿÿR   RC  i   R  RI  s   analysis#sasRB  s   Solvent accessible surface areaRD  t   HOHradt   point_densityt   brick_margint   exclude_solventt   list_selection_1t   list_selection_2Rò  RE  gffffffö?g      ð?g      @t   exclude_non_polymert   polar_atomsR   R'   RF  Rb  Rl  s   Water radiusRL  RH  RÕ  g      $@Rä   g        Rý  g      à?s   Point densityg       @g{®Gáz„?gš™™™™™©?s   Brick marging      4@s   Exclude solventRG  s   Exclude non-polymers!   List total SAS for selected atomss   Apply SAS calculation tot   comboboxR8  s   all non-solventR�   s   nucleic acidRe  R-  Rž   (   RJ  RÖ  RÒ  t   floatRæ  R…   (   R   R  RJ  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   createSASAreaPM8	  s0    	

1..RŽ   c           B   sh  e  Z d  d d d d d g Z d d d g Z d	 Z d
 d d d d d d g Z i  Z d Z d d d d d d d d d d d d d d d  d! d" g 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 6d0 d 6d( d 6d/ d1 6d- d2 6Z	 d
 d d d d d  d d d d d d d d d d1 d2 g Z
 i  Z i d
 d3 6d4 d5 6Z d6 d7 d8 g Z e j e j e j g Z d9 „  Z d: „  Z d; „  Z d< d4 dg d4 i d= d> 6i  i d
 d3 6i  d? d@ „	 Z dA „  Z dB „  Z d< d< dC „ Z dD „  Z dE „  Z d4 dF „ Z dG „  Z dH „  Z dI „  Z  dJ „  Z! d4 dK „ Z" dL „  Z# dM „  Z$ d4 dN „ Z% d4 dO „ Z& dP „  Z' d4 dQ „ Z( i  dR „ Z) dS „  Z* d4 dT „ Z+ d< dU dV „ Z, d< d? d? dW „ Z- d4 dX „ Z. dg i  dY „ Z/ dZ „  Z0 d< d< d[ „ Z1 d\ „  Z2 d] „  Z3 d^ „  Z4 d_ „  Z5 d` „  Z6 da „  Z7 db „  Z8 d< d< dc „ Z9 dd „  Z: dg de „ Z; df „  Z< RS(h   t   SPHERESt   SURFACEt   NUCLEICBASEPAIRSt   NUCLEICBASEBLOCKSt   LIPIDSt   ANISOURÅ  RH  RÆ  t   VARIABLEWORMt   BONDSt   FATBONDSt	   THINBONDSt	   BALLSTICKt	   CYLINDERSt   CIRCLESt   IMPOSTER_SPHERESRq  t   Bondss	   Fat bondss
   Thin bondss   Ball and stickt	   Cylinderst   Spherest   Ribbonst   Worms   Worms/tubess   Base pair stickss   Nucleic base blockss   Lipid Cartoons   Thermal ellipset   Circless   Perfect spherest   Bloboidss   Sugar blockss	   bonds.svgs   fatbonds.svgs   thinbonds.svgs   ballandstick.svgs   cylinders.svgs   spheres.svgs   ribbons.svgs	   worms.svgs   wormstubes.svgs   basepairsticks.svgs   baseblocks.svgs   lipidcartoons.svgs   thermalellipse.svgs   circles.svgt   BLOB_ELLIPSOIDSt   SUGAR_BLOCKSt
   style_modei   t   inter_dispobj_bondt   axest   solidt	   solidaxesc         C   sÆ   |  j  |  _  t |  d ƒ rÂ t |  j d ƒ rÂ t |  j j d ƒ rÂ |  j  rb |  j j j g  ƒ n  |  j  |  j _  |  j j j d ƒ t t ƒ  d ƒ r© t ƒ  j j ƒ  n  d d  l	 } | j
 ƒ  n  d  S(   Nt   graphmodRz   t   SetSymmetryMatricesi   t   glWidgetiÿÿÿÿ(   t   doBiomoleculeR?   Rs  Rz   Rt  t   SetDrawSymmetryt
   MAINWINDOWRu  t   SetupSymmetryR_   R`   (   RZ   R_   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   toggleBiomolecule€	  s    6	c         C   s¯   |  j  |  _  t |  d ƒ r« t |  j d ƒ r« t |  j j d ƒ r« |  j  |  j _  |  j  rm |  j |  j _ n  t t ƒ  d ƒ r’ t ƒ  j j ƒ  n  d d  l } | j	 ƒ  n  d  S(   NRs  Rz   Rt  Ru  iÿÿÿÿ(
   t
   doSymmetryR?   Rs  Rz   t   doCentralSymmetryRx  Ru  Ry  R_   R`   (   RZ   R_   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   toggleSymmetryStatusŒ	  s    6	c         C   s”   |  j  |  _  t |  d ƒ r� t |  j d ƒ r� t |  j j d ƒ r� |  j  |  j _  t t ƒ  d ƒ rw t ƒ  j j ƒ  n  d d  l } | j ƒ  n  d  S(   NRs  Rz   Rt  Ru  iÿÿÿÿ(	   R|  R?   Rs  Rz   Rx  Ru  Ry  R_   R`   (   RZ   R_   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   toggleCentralSymmetryStatus—	  s    6R   R-  Ró  i    c         K   sý  t  j |  d | | d | d | d | d |	 ƒt |  _ t |  _ t |  _ g  |  _ g  |  _ d d  l	 } | j	 d ƒ d |  _
 d	 |  _ g  |  _ d	 |  _ d |  _ d |  _ g  |  _ i  |  _ i  |  _ i  |  _ i  |  _ d  |  _ d  |  _ d |  _ d |  _ t |  _ t |  _ t ƒ  |  _ |
 rQ|
 d	 d k rQ|
 d d
 k  rQt j | ƒ } n  t |  j  j! d | ƒ|  _ t" d ƒ j# t$ ƒ |	 j% d ƒ r­|  j& d |	 d d d ƒ } n |  j& ƒ  } | j# |  j' ƒ d d  l( } t) j* d ƒ |  _+ x„ d d g D]v } | j( d | d t" d ƒ ƒ } | j, d |  j  j- d |  j d t. ƒ  j/ d ƒ | j, d |  j+ ƒ t0 |  | | ƒ qôW|  j1 ƒ  d |  _2 x- t3 j4 j5 ƒ  D] \ } } t0 |  | | ƒ q‘Wd |  _6 d |  _7 |  j8 d | ƒ t9 j9 d | d |  j  d |  j ƒ |  _9 t: |  j  j- |  j j; ƒ  ƒ |  _: d  |  _< t= d  |  j! d! |  j  j! d |	 j> d" i  ƒ ƒ |  _< |	 j% d# ƒ r…|	 d# |  _ |  j |  j? _ n  |	 j% d$ ƒ rÒ|	 d$ |  _ |  j |  j? _ |  j rÒ|  j? j@ jA d ƒ qÒn  |	 j% d% ƒ r |	 d% |  _ |  j |  j? _ n  |  jB d& ƒ |  jC rˆt3 jD jE |  j6 ƒ rˆt3 jF jE |  j6 ƒ sV|  j6 jG t3 jH ƒ ro|  j  jI jJ |  j! ƒ qˆ|  j  jK jJ |  j! ƒ n  |  j  jL ƒ  } x@ | D]8 } tM | d' ƒ rž| j2 d k rž|  jN | j2 ƒ PqžqžW|  j rù|  j? j@ jO g  ƒ n  d  S((   NRŽ   R�   R”   t   display_table_visibleR,  iÿÿÿÿt   initializeStylePlugini   i    il   Rý  t   render_qualityR   R   t   customi   Rs  t   external_bonds_graphmodt
   parameterst   global_parametersRD   RI  t   diagnostic_timingt   timingt	   atomRadiiR   R^  Rÿ  Rþ  R   RG  R1  Rq  t   label_paramsR|  Rv  R{  R�  RU   (P   t   DispObjRA   Ró   R{  R|  Rô   Rv  Rª  t   origint   loadPluginsR”  t   redraw_picked_labelst   connectivity_defnst   update_atomRadiiRT  t   update_surfacet   builtt   pickedAtomst   pickedAtomsMatricest   pickedAtomsUserMoveMatricest   pickedAtomsLabelRV   t   pick_label_graphmodRƒ  Rn  RS  t   ignore_other_dispobjst   ignore_symmetryRI  R»  t   fix_v108RG  R1  R   Rƒ   R±  t   handleRenderParamsManagerR8   t   getDrawingStylePMt   handleDrawingStylePMt   moleculargraphicsmodelR½   t   DoubleVectorRˆ  t	   setparamsRD   t   HISTORYt
   diagnostict   setattrRm  RU   RŽ   t   style_initialisationRŒ  RL  Rn  t	   set_styleRÂ  t   CMgAppUtilsRP  Rl  t   MolLabelR„   Rs  Rz   Rw  R:  R�   RK  R¿   RM  RN  RO  RK   R~   RL   Rd   R?   Rì  Rt  (   RZ   R1  R   R�   R”   R  Rý  Rþ  Rÿ  R,  R[   R   RŒ  RÙ  R�  t	   gobj_namet   gobjR«   R×   t   dispobjsR%  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRA   ¡	  s¦    																						&		
			'!		*	c         C   s–   |  j  ƒ  } | j |  j ƒ t |  d ƒ r4 |  ` n  |  j  ƒ  } | j |  j ƒ x? d d g D]1 } t |  | ƒ r] t |  | ƒ j d | ƒ q] q] Wd  S(   Nt   drawingStylePMRs  Rƒ  R„  (   R›  t   remove_dependentRœ  R?   Rª  R±  Rq   RŸ  (   RZ   RÙ  R§  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   removeCustomDrawingStyle%
  s    	c         K   sŒ  |  j  r{ t j j |  j ƒ r{ t j j |  j ƒ sI |  j j t j ƒ rb |  j j	 j
 |  j ƒ q{ |  j j j
 |  j ƒ n  t |  d ƒ r© |  j r© |  j j ƒ  |  ` n  t j |  ƒ xO d d g D]A } t |  | d  ƒ } | rÃ t ƒ  j | ƒ t ƒ  j | ƒ qÃ qÃ Wt |  d ƒ r |  ` n  t |  d ƒ r8|  ` n  t |  d ƒ rP|  ` n  t |  d ƒ rr|  j d d	 ƒ n |  j ƒ  j |  j ƒ d  S(
   NRl  R–  Rƒ  RI  R¥  RG  Rª  t   reseti    (   R�   RŽ   RK  R¿   RL  RM  RN  RO  R1  RK   R~   R   RL   R?   Rl  t   delete_labelsRŠ  R   Rq   RV   Rx  t   removeGLDisplayObjectt   BUILDt	   deletemodRI  R¥  RG  t   closeDrawingStylePMR›  R«  Rœ  (   RZ   R   R§  R¨  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR   2
  s,    *	 	 	 	c         K   sÏ   t  j |  d | d | ƒx> d d g D]0 } t |  | d  ƒ } | r& |  j | j _ q& q& Wt j j |  j	 ƒ sË t j
 j |  j	 ƒ s™ |  j	 j t j ƒ r² |  j j j |  j ƒ qË |  j j j |  j ƒ n  d  S(   Nt   toggle_visibilityt
   visibilityR–  Rƒ  (   RŠ  t   set_visibilityRq   RV   R�   Rz   RŽ   RK  R¿   RL  RM  RN  RO  R1  RK   R~   R   RL   (   RZ   R³  R´  R   R§  R¨  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRµ  P
  s     *c         C   s   |  j  j | ƒ d |  _ d  S(   Ni   (   RG  t
   setCommandR”  (   RZ   Ró  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   set_selection`
  s    c         C   s$   |  j  j d | ƒ |  j d ƒ d  S(   Nt
   one_colourRi  (   RÂ  t
   set_colourR:  (   RZ   Ri  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR¹  g
  s    c         C   s   | |  _  d  S(   N(   R”  (   RZ   R\  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR0  m
  s    c         C   s   |  j  r d |  j  _ n  d  S(   Ni   (   Rl  Rn  (   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   set_redraw_textq
  s    	 c         C   s   d S(   Ni   (    (   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   canBeTransparentv
  s    c         C   s   d S(   Ni   (    (   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   isLegendPossible{
  s    c         C   s   |  j  j ƒ  S(   N(   RÂ  t	   getLegend(   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR½  €
  s    c         C   sé   t  j |  d | ƒ} |  j j ƒ  | d <| d s< | d =n  t |  d ƒ r[ |  j | d <n  t |  d ƒ rz |  j | d <n  t |  d ƒ r™ |  j | d <n  t |  d ƒ r» |  j j | d <n  x' d g D] } t	 |  | d	 ƒ | | <qÅ W| S(
   NR-  R‰  R|  Rv  R{  Rª  R   t   contact_MolDispR   (
   RŠ  R,  Rl  R?   R|  Rv  R{  Rª  R   Rq   (   RZ   R-  t   parsRþ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR,  …
  s    
 
c         C   s
   |  j  j S(   N(   RÂ  t   colour_label(   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   get_colour_label˜
  s    c         C   s
   |  j  j S(   N(   RÂ  t   colour_icon(   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   get_colour_icon›
  s    c         C   s   |  j  j d | ƒ S(   NR-  (   RG  t   getSaveParams(   RZ   R-  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRý   
  s    c         C   s   |  j  j d | ƒ S(   NR-  (   RÂ  Rþ  (   RZ   R-  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRþ  ¦
  s    c         C   sã  d |  _  d g j |  j ƒ r4 |  j j d d ƒ n  |  j j j d ƒ } g  |  _ d d g j | ƒ s |  j j ƒ  j d ƒ rŠd } d	 } |  j	 ƒ  j d
 ƒ } |  j
 j rF|  j j d d  | g d  d | d |  j
 j d d g g | g ƒ x“ |  j
 j d D]= } |  j j d d  | g d  d | d | g g | g ƒ qWqô| d k rk|  j j g  | g ƒ qô|  j j d  d g | g ƒ nj d g j | ƒ s´|  j j ƒ  j d ƒ rô|  j
 j d ƒ } |  j	 ƒ  j d
 ƒ } |  j j g  | g ƒ n  |  j ƒ  t d |  j ƒ |  _ d |  _ d |  _ |  j j j |  j j ƒ  ƒ d |  j _ |  j red |  j _ n  d |  _ t j j |  j ƒ sßt j j |  j ƒ s­|  j j t j  ƒ rÆ|  j
 j! j |  j" ƒ qß|  j
 j# j |  j" ƒ n  d S(   Ni    RX  R   g{®Gáz„?t   atomtypet   catraces   CA+sideR'   R  t   trace_cutofft   ands   /*/*/*/R°   t   ,i   t   tracei   ($   R”  R¿   Rn  RG  t   cleanSelectionRý  R„   RŽ  t
   getCommandR›  R1  t   alt_locsR~   RV   t   expand_selection_aliasRm  RÕ  R÷  RT  R�  RÂ  RÓ  t   SetSelHandleRP  Rl  Rn  R�  RŽ   RK  RL  RM  RN  RO  RK   R   RL   (   RZ   RÅ  t   trace_selectiont
   trace_atomRÇ  R  t	   trace_sel(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   apply_selection«
  sD    		-E>*
			 	*c         C   s­   i  } | rN xš t  j j ƒ  D]+ } t |  | ƒ r t |  | ƒ | | <q q Wn[ xX t  j j ƒ  D]G } t |  | ƒ r^ t |  | ƒ t  j | k r^ t |  | ƒ | | <q^ q^ W| S(   N(   RŽ   R£  Rì   R?   Rq   (   RZ   R-  t   styRþ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRÿ  è
  s     +c         K   se  | j  | ƒ | r�| j d |  j ƒ |  j k r= d |  _ n  | j d |  j ƒ |  j k rg d |  _ n  x( | j ƒ  D] } t |  | | | ƒ qt W|  j rPt j	 j
 |  j ƒ sÇ t j	 j
 |  j ƒ rPt j j
 |  j ƒ t j j
 |  j ƒ k r
|  j j j |  j ƒ n  t j	 j
 |  j ƒ t j	 j
 |  j ƒ k rP|  j j j |  j ƒ qPn  d d d d g j
 |  j ƒ r�|  j |  j k r�d |  _ q�n  d d  l } | j |  j ƒ |  _ d  |  _ |  j |  j k rC|  j |  j |  _ t j j t j j t j d	 d
 d d |  j ƒ ƒ rCt j j t j d	 d
 d d |  j ƒ |  _ qCn  t |  j |  j |  j ƒ |  _  d  S(   NRo  i   Rn  RW  Ra  Rc  Rd  iÿÿÿÿt   CCP4MGt   qticonst   disptabRL  (!   R3  R„   Ro  Rn  Rn  Rì   R¢  R�   RŽ   RK  R¿   RL  RM  R1  RK   R~   R   RL   R�  RP   RQ   RV   t
   style_icont   style_commands_iconsRt   Rù  Rú  R  Ru   t   equivKeywordt   style_commandst
   style_menut   style_label(   RZ   Rÿ  R\   Rþ   RP   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR¤  ø
  s0     **0 	41c         K   s   t  d ƒ j d |  g ƒ d  S(   NR‡  R%  (   R´  t   centreModels(   RZ   R   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt	   centre_on  s    c      
   K   sq   |  j  d k r d } n	 |  j } |  j ƒ  } |  j ƒ  } |  j ƒ  } t |  j j d | d | d | d | ƒd  S(   NRX  i    R�   Rý  Rþ  Rÿ  (	   RL  R�   Rý  Rþ  Rÿ  RŽ   R1  R   RV   (   RZ   Rü  R   R�   Rý  Rþ  Rÿ  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRü  !  s    		t   queryc         K   s   |  j  j d |  j ƒ S(   NR   (   R1  R  R   (   RZ   R   R  R   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR   1  s    c         C   s  | ró t  |  d ƒ ró | s, d |  j } n  t d ƒ j |  j ƒ t d | d d ƒ |  _ |  j j |  j ƒ xj d d g D]\ } t |  | d  ƒ } | r® | j
 d |  j ƒ n  t ƒ  } | rz | j t j d ƒ ƒ qz qz W| ró t ƒ  j ƒ  qó n  t  |  d ƒ r	|  j St d ƒ Sd  S(	   NRª  t   model_drawing_styleR   R  Rs  Rƒ  R„  t   CustomDrawingStyleChanged(   R?   R   Rƒ   R«  Rœ  t   createDrawingStylePMRª  R±  Rq   RV   RŸ  t   DISPLAYTABLEt   emitR   t   SIGNALR   t   autoSave(   RZ   R   R‚  t	   auto_saveR§  R¨  t   dt(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR›  7  s$      	  c         C   s£   t  |  d ƒ rŸ |  j j |  j ƒ |  j j ƒ  |  ` | rŸ xE d d g D]7 } t |  | d  ƒ } | rH | j d t d ƒ ƒ qH qH Wt d ƒ j	 |  j ƒ qŸ n  d  S(   NRª  Rs  Rƒ  R„  Rá  (
   R?   Rª  R«  Rœ  R   Rq   RV   RŸ  Rƒ   R±  (   RZ   R­  R§  R¨  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR²  L  s     c         K   sÑ   d |  _  | j d ƒ rk |  j d k s6 |  j d k rk | d d k rk | d d k  rk d |  _  d |  _ n  | j d ƒ rÍ |  j d k s˜ |  j d	 k rÍ | d d k rÍ | d d k  rÍ d |  _  d |  _ n  d  S(
   Ni   t   ball_radii_scaleRa  Rc  gü©ñÒMbP?g      $@t   sphere_radii_scaleRW  Rd  (   Rn  R8   RL  R�  (   RZ   RÖ  t   updatedR   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRœ  Z  s    	- 	- 	c   	      C   sÁ  |  j  s d  S|  j j ƒ  \ } } t j ƒ  } |  j j ƒ  | d k rK d  S|  j r‘ |  j j |  j	 j
 |  j j ƒ  | | |  j	 j |  j	 j ƒ n. |  j j |  j	 j
 |  j j ƒ  | | d d ƒ xò |  j D]ç } | d r�|  j	 j | d ƒ \ } } | rÿ Pn  |  j	 j
 j | t |  j j ƒ  t ƒ t ƒ  } t j |  j	 j
 | | ƒ } | j ƒ  } |  j j |  j	 j
 | | | d ƒ |  j	 j
 j | ƒ qÉ |  j j |  j	 j
 | | | d ƒ qÉ Wd |  _  d  S(   Ni    i   (   RT  RG  t   getSelIndexR½   R¾   RI  t   ClearRo  t   AddBondsR1  RD   RP  RM   RN   RŽ  RÝ   RÏ   RÐ   RÙ   Rã   RÕ   RÖ   R×   t   AddTraceRÚ   (	   RZ   R  R  Rú   t   defnR  t   selHnd1t	   selAtoms1t
   nSelAtoms1(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   update_connectivityn  s2    	  	
 %	#'c         K   s   d |  _  d  S(   Ni   (   Rn  (   RZ   R˜  t	   max_atomsR   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   set_do_redrawž  s    c         C   s   |  j  ƒ  |  j ƒ  d  S(   N(   t	   draw_textt   draw_pick_text(   RZ   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   unthreadedDraw£  s    
c         C   s¢   d } |  j  d k r$ |  j ƒ  } n  |  j r… |  j j r… |  j ss d d  l } | j ƒ  |  _ t ƒ  j |  j ƒ n  |  j j ƒ  } n  | rž |  j	 j d ƒ n  | S(   Ni    iÿÿÿÿt   label_graphmod(
   R”  RÓ  Rl  Rn  Rû  t   graphicsmodelR°  R~   R/  t   do_rebuildGL(   RZ   R_   t   selection_changedRü  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRø  ª  s    	 c         C   sp   d d  l  } x9 |  j j ƒ  D]( \ } } | j |  j j | j ƒ  ƒ q Wi  |  _ i  |  _ i  |  _ i  |  _	 d  S(   Niÿÿÿÿ(
   t   cprimR•  RŒ  t   DeleteTextLabelR–  Rz   t   GetIDR’  R“  R”  (   RZ   Rÿ  t   uidt   label_ob(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   clearPickedAtoms¼  s     			c         C   sn  d d  l  } d d  l } d d  l } |  j s1 d Sx9 |  j j ƒ  D]( \ } } | j |  j j | j	 ƒ  ƒ qA Wi  |  _ t
 ƒ  j d ƒ } |  j sÂ d d  l } | j ƒ  |  _ t ƒ  j |  j ƒ n  xŒ|  j j ƒ  D]{\ } } | j | j | j | j ƒ }	 |  j j | ƒ r/|  j | r/|  j | |	 }	 n  |  j j | ƒ rb|  j | rb|  j | |	 }	 n  t ƒ  j | ƒ }
 | j |
 |	 |	 | ƒ } t ƒ  d } | r-t | d ƒ r-t | j ƒ r-| j ƒ  } | d d | d d | d d	 } | d
 k  r| j d d d d ƒ q-| j d d d d ƒ n  | |  j | <|  j j j | ƒ qÒ Wd |  _ |  j  j d ƒ d S(   Niÿÿÿÿi    t   pick_atom_labelt   getBackgroundg‰A`åÐ"Ó?i   gbX9´Èâ?i   gÉv¾Ÿ/½?g      à?R–  (!   R½   Rÿ  t	   TextLabelR�  R•  RŒ  R   R–  Rz   R  t   FONTMANAGERt   getFontRü  R°  R~   R’  t	   Cartesiant   xt   yt   zR“  R8   R”  t	   PICKLABELt   getAtomLabelt   CreateTextLabelt	   GLWIDGETSR?   t   callableR  t	   SetColourt   add_text_primitiveRý  (   RZ   R½   Rÿ  R  R  R  Rƒ  Rü  RJ  t   posR!  Ru  t   bgcolt   bright_y(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRù  Ç  s>    $	  		$&	c          C   sv  t  j  ƒ  } d } d } |  j ƒ  } |  j d k rT |  j ƒ  } | rT d |  _ qT n  |  j r’ |  j j s‚ |  j j s‚ |  j j	 r’ |  j j
 ƒ  n  |  j r¨ |  j ƒ  n  |  j j rÏ |  j j ƒ  } d |  _ n  d d d d g j |  j ƒ rø|  j rø|  j j ƒ  d k rø|  j r|  ` n  |  j d k s;|  j d k rM| j d ƒ } n0 |  j d k sk|  j d k r}| j d ƒ } n  |  j j j |  j j ƒ  t | ƒ |  _ xB d	 d
 g D]4 } t |  | d ƒ } | r±| j d |  j ƒ q±q±Wd |  _ qøn  d g j |  j ƒ rÕ|  j r|  ` n  t j t j  j! | j d ƒ ƒ } d } |  j j j |  j j ƒ  t | ƒ |  _ xd d	 d
 g D]S } t |  | d ƒ } | r{| j d | d | j d ƒ ƒ | j d |  j ƒ q{q{Wn  |  j sç|  j" rá|  j j# d d ƒ \ }	 }
 |  j j d d ƒ } |  j j$ d k r2d } n t% ƒ  j! |  j j$ ƒ } d d l& } d } xP d	 d | j' g d
 d | j( g g D]* \ } } } t) | t |  | d ƒ ƒ } q�Wx/d	 d | j' g d
 d | j( g g D]\ } } } t |  | d ƒ } | rÔ| rÚ| j d | ƒ | j d | d |
 d |	 d |  j* d |  j+ d |  j d |  j, d |  j- d |  j j. d  |  j j/ d! | d" |  j j0 d# |  j j1 d$ |  j j2 d% |  j j3 ƒ |  j4 j | ƒ sKt5 ƒ  j6 | ƒ | j7 j8 |  j9 ƒ |  j4 j6 | ƒ |  j: rÄ|  j; j7 j< g  ƒ |  j= sHx0 t> ƒ  j? D] } | j@ | jA | jB ƒ  ƒ qWqHqÄny | jC ƒ  | j7 j8 |  j9 ƒ |  j= s¤x0 t> ƒ  j? D] } | j@ | jA | jB ƒ  ƒ q~Wn  |  jD d& d ƒ |  jD d& d ƒ |  jE j6 | ƒ qÚqÔqÔWn  |  jF rWxj d	 d
 g D]Y } t |  | d ƒ } | r÷| j7 j8 |  j9 ƒ |  jE j | ƒ sP|  jE j6 | ƒ qPq÷q÷Wn  d |  _ d |  _" d |  _F d S('   s\   
    Called at end of each cycle of a command loop
    Redraw the graphmod if necessary
    i    i   RW  Ra  Rc  Rd  Rë  Rê  Rs  Rƒ  Rˆ  R\  t   anisou_styleg      ð?t   anisou_scalet   alwayst   ATOMiÿÿÿÿNRn  RS  t   stick_colourR  R  R  Rª  R‹  RL  R�   R�  t   atomColourVectort   ifColourContinuoust   external_bonds_modet   side_to_ribbont   side_to_wormRH   RI   R³  (G   t   timeR›  R”  RÓ  Rn  R—  R1  RJ   RK   RL   R^  RT  Rõ  RÂ  R÷  t   apply_colourR¿   Rn  R�  RG  RP  Rˆ  R„   RL  RD   t   GetAtomRadiit	   VDWRADIUSRq   RV   RŸ  RŽ   t   anisou_style_codet   anisou_style_aliasR�  RS  Rí  R  Rð   Rÿ  t   DRAW_INTERNAL_BONDSt   DRAW_EXTERNAL_BONDSRÕ  Rª  R‹  R�   R�  R  R  RE   RF   RH   RI   R‘  R°  R~   Rz   t   SetAlphat   opacityRv  Rs  Rt  R˜  Rx  t	   glWidgetsRy  t   rpost   extentsR_   Rµ  Rý  t   do_update_opacity(   RZ   t
   start_timeRþ  t   colour_changedRÙ  t   scaleR§  R¨  t
   style_codeR  R  R  t   stick_colour_codeRÿ  Rn  t   do_redraw_nameR  t   gl(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR/  ù  sÈ     .		 	' 	 	"'	""							&
	 	 			c         C   s   d d d d d d g |  _  |  j j ƒ  d k r¶ |  j j j |  j j ƒ  ƒ } t d ƒ } | j | ƒ } | r© g  |  _  x. t	 d d ƒ D] } |  j  j
 | | ƒ qˆ Wn  t | ƒ n  |  j  d |  j  d d |  j  d |  j  d d |  j  d |  j  d	 d g |  _ d d d g |  _ d  S(
   Ng        i    i   i   i   g       @i   i   i   (   Rð  RG  t   getNofAtomsR1  RD   Rò  RP  Ró  Rô  RÀ   R~   t   delrpR‹  Rª  (   RZ   t   extptrRö  t   extR  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRm  ˆ  s    	 "c         C   sI   t  j |  ƒ } |  j r* | |  j j _ n  |  j rE | |  j j _ n  | S(   N(   RŠ  t   set_graphmod_visibilityR–  Rz   R�   Rƒ  (   RZ   t   vis(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR;  �  s    	 	 c         K   sO   |  j  d k rB | d k r' d |  _ qK | d k rK d |  _ qK n	 d |  _ d  S(   NRX  R2  i   R_  (   RL  R”  Rn  (   RZ   Rf  Rg  R   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRk  ¥  s    c         C   sr  d d  l  } d } g  } | j |  j ƒ  | j ƒ d } | rb |  j j | j ƒ d |  _ d } n  | j |  j ƒ  | j ƒ d } | r£ |  j j d | ƒ d } n  | j |  j	 ƒ  | j	 ƒ d } | rê |  j
 d | ƒ d |  _ d } n  | j |  j ƒ  | j ƒ \ } } } | rï| j d ƒ r@|  j j | d ƒ d } n  | j d ƒ rï|  j d | d d	 d ƒ } | j |  j ƒ x? d
 d g D]1 }	 t |  |	 d  ƒ }
 |
 rˆ|
 j d | ƒ qˆqˆWd |  _ t ƒ  j j d | d g ƒ d } qïn  | j d ƒ r7t ƒ  j j d | d g ƒ |  j ƒ  d |  _ d } n  | rS|  j j d g ƒ n  t | t j |  | ƒ ƒ } | S(   Niÿÿÿÿi    i   Rþ  Rÿ  R‰  R   R   R‚  Rs  Rƒ  R„  t   add_PMt	   delete_PMR3  (   R4  R6  Rý  RG  t   setSelParamsR”  Rþ  RÂ  R¹  Rÿ  R¤  Rn  R,  R8   Rl  R8  R›  R±  Rœ  Rq   RV   RŸ  R   R<  R~   R²  RÕ  RŠ  t   update_data_status0(   RZ   R=  R4  R
   t   edited_listR?  t   rv0R@  RÙ  R§  R¨  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR8  ²  sR    					$	 	
		 c         C   sâ   | j  | j | j } } } x› |  j j ƒ  D]Š \ } } | j  | j | j }	 }
 } t | |	 ƒ d k  r- t | |
 ƒ d k  r- t | |
 ƒ d k  r- d GH|  j | ƒ d |  _ | Sq- W| |  j | <| |  j | <d |  _ d S(   Ngñhãˆµøä>s   Already have a pick label herei   i    (	   R  R  R  R’  RŒ  R­  t   removePickedAtomR�  R“  (   RZ   R  RJ  R  R  R  R  t   uid1t   pat   x1t   y1t   xz(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   addPickedAtomé  s    B		c         C   s¸   d d  l  } |  j j | ƒ rN | j |  j j |  j | j ƒ  ƒ |  j | =n  |  j j | ƒ rm |  j | =n  |  j j | ƒ rŒ |  j | =n  |  j	 j | ƒ r« |  j	 | =n  d |  _
 d  S(   Niÿÿÿÿi   (   Rÿ  R•  R8   R   R–  Rz   R  R“  R”  R’  R�  (   RZ   R  Rÿ  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRC  ù  s    #N(=   R3  R4  RK  RM  RO  RR  R5  t
   gui_offsetRÜ  RÙ  RÛ  t   custom_style_methodsR£  R'  Rÿ  t   SPHEROID_AXESt   SPHEROID_SOLIDt   SPHEROID_SOLIDAXESR&  Rz  R}  R~  RV   RA   R¬  R   Rµ  R·  R¹  R0  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/  Rm  R;  Rk  R8  RI  RC  (    (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRŽ   \	  s€   *&#4
			
	�											=#		0				2	�			7c         C   s   d d  l  } t |  | j ƒ rN t j j |  ƒ rG t j t j j |  ƒ Sd Sn- t j j |  ƒ rw t j t j j |  ƒ Sd Sd  S(   NiÿÿÿÿiþÿÿÿR£   (   R‹  R5  t
   StringTypeR   R­  R¿   RÑ  R�  (   t   inpR‹  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   convertSecstrCode  s    c      +   C   sç  d d  l  } d d  l } d | j d d |  ƒ } | j d |  d d d | d	 d
 d d d | d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* g d+ i  d, d 6d- d 6d d 6d. d 6d/ d 6d0 d 6d1 d 6d2 d 6d2 d 6d3 d 6d3 d4 6d. d 6d5 d  6d5 d% 6d5 d& 6d5 d! 6d5 d" 6d d# 6d d$ 6d5 d 6d5 d 6d5 d) 6d6 d 6d. d 6d d7 6d5 d 6d8 d 6d0 d9 6d: d' 6d; d( 6d< d* 6d. d 6d= i  t d> t d? d@ dA dB dC d dD dE ƒ d 6t d> t d? dF dA dB dC d dD dE ƒ d 6t d> t d? dG dA dB dC d dD dE ƒ d 6t d> t d? dH dA dI ƒ d 6t d> t d? dJ dA dB dD d; dC dK dL dM ƒ d 6t d> t d? dN dA dB dD dO dC dK dL dM ƒ d 6t d> t d? dP dA dB dD dO dC dK dL dM ƒ d 6t d> t d? dQ dA dB dD dO dC dK dL dM ƒ d 6t d g d 6t d> t d? dR dA dS dT dU dV dW g dX d5 d d, g ƒ d  6t d> t d? dY dA dS dT dU dV dZ d[ g dX d5 d d, d\ g ƒ d! 6t d> t d? d] dA dS dT d^ d_ g dX d5 d g ƒ d% 6t d> t d? d` dA dS dT d^ da g dX d5 d g ƒ d& 6t d> t d? db dA dB dD dO dC dK dL dM ƒ d 6t d> t d? dc dA dB dD dO dC dK dL dM ƒ d 6t d> t d? dd dA dB dD de dC dK dL dM ƒ d 6t d> t d? df dA dB dD de dC dK dL dM ƒ d 6t d> t d? dg dA dB dD de dC dK dL dM ƒ d 6t d> dh d? di dA dI ƒ d" 6t d> t d? dj dA dB dD d; dC dK dL dM ƒ d# 6t d> dh d? dk dA dI ƒ d$ 6t d> t d? dl dA dI ƒ d 6t d> t d? dm dA dI ƒ d 6t d> t d? dn dA dB dD de dC dK dL dM ƒ d 6t d> t d? do dA dB dD de dC dK dL d. ƒ d 6t d> t ƒ d7 6t d> t d? dp dA dB dD de dC dK dL dM ƒ d9 6t d> t d? dq dA dS dT dr ds dt g dX du dv d: g ƒ d' 6t d> t d? dw dA dB dD de dC dK dL dx ƒ d( 6t d> dh d? dy dA dI ƒ d) 6t d> t d? dz dA dB dD d{ dC dK dL d; ƒ d* 6t d> t d? d| dA dB dD de dC dK dL dx ƒ d 6ƒ 	} | S(}   Niÿÿÿÿs   Model drawing style Rá  R   R   RC  i   R  RI  t   drawing_stylest   c_accessRB  RD  t
   bond_widtht   fat_bond_widtht   thin_bond_widtht   dashed_bondst   dashed_bond_lengtht   show_multiple_bondst
   deloc_ringt   cylinder_widtht   ballstick_stickRê  Rë  t   nucleic_stick_widtht   base_block_thicknesst   alpha_helix_widtht   ribbon_widtht   arrow_widtht
   worm_widtht   helix_tube_diametert   ribbon_stylet   helix_stylet   flatten_loopt	   loop_fract   flatten_betat   two_colour_ribbont   grey_ribbon_edgeR  R  t   anisou_scale_byvdwRÇ  RE  i   i   gš™™™™™É?gš™™™™™Ù?gš™™™™™¹?g      @g      ø?gš™™™™™@t   arrow_lengthi    gš™™™™™é?t   spline_beta_flatg333333Ó?t   pyramid_sizeRr  g      ð?g333333@RF  Rb  Rl  s
   Bond widthRL  RH  Rä   RÕ  i
   s   Fat bond widths   Thin bond widths   Dashed bondsRG  s   Dash length for dashed bondsg        Rý  g{®Gáz”?s   Sphere radius = VDW radii xg      @s   Ball radius = VDW radii xs   Ball cylinder thicknesss    Nucleic acid/strand ribbon styleRT  R8  t   Ovalt   Flats
   Flat/roundRe  s   Helix ribbon styles
   Flat/Roundt   Fancyi   s   Helix colouringt   Normals   Inside greys   Ribbon colourings
   Edges greys   Cylinder thickness (Angstrom)s    Nucleic base stick thickness (A)s   Protein ribbon widthg      $@s   Beta strand arrrow widths   Nucleic acid ribbon widthRÈ  s   Shorten loopss   Degree of loop shortening (0-1)s   Smooth beta-sheetss   Show multiple-bondss$   Draw deloc. circle in aromatic ringss
   Worm widths   Helix tube diameters   Pyramid sizes   Thermal ellipse stylet   Axest   Solids
   Solid&AxesRp  Rq  s   Thermal ellipse scalegš™™™™™©?s   Scale ellipses by VDW radiis   'CA' trace cutoff distanceg      4@s   Base block thickness(	   RJ  R   RÛ   RÖ  RÒ  Ræ  RU  RÈ  R…   (   R   R  RJ  R   RB  RÙ  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRã    sÚ    			
((""c          C   s  d d  l  }  |  j d d d d d d d d	 d
 d d d d d d g d i d d 6d d 6d d 6d d 6d i t d t d d d d d d d d g d d d d g ƒ d 6t d t d d d d ƒ d 6t d t d d  d d ƒ d 6t d t d d! d d ƒ d 6ƒ } | S("   NiÿÿÿÿR   R�  RC  i   RI  s   drawing_styles#render_qualityRB  s   Drawing qualityRS  RD  t   solid_qualityt   smooth_linet   use_vbot   force_use_vaRE  i    RF  Rb  Rl  s   Solid objects drawing qualityRL  RT  R8  t   Fastt   Smootht   DeluxeRe  i   s   Anti-alias linesRG  s   Use vertex buffer objectss"   Force Vertex Arrays on Win32/Intel(   RJ  RÖ  RÒ  Ræ  RÈ  (   RJ  RÙ  (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   createRenderParamsManager›  s,    		

("c         K   s-   x& t  d d d d ƒ D] } d | _ q Wd S(   NRj   RŽ   R\  R-  i   i    (   Rd   Rn  (   Rì  R   t   disp(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyRš  ·  s    c   	      C   s  d d l  } d d l } d d l } | j |  |  d ƒ y t |  d d ƒ } Wn d d |  d g SX| j ƒ  } | j ƒ  | j d | | j ƒ } | s© d d	 |  g S| j	 ƒ  d } | j
 | d
 ƒ } | d k rç | d | !} n | } | j d | | j ƒ } x@ | rG| j	 ƒ  d | j	 ƒ  d } | j d | | j ƒ } qW| j d | | j ƒ } x@ | r¢| j	 ƒ  d | j	 ƒ  d } | j d | | j ƒ } qcWyK t |  d ƒ } | d k rÙ| j | | | ƒ n | j | ƒ | j Wn d d |  g SXd d g S(   se   
  Strip html tags from PDB that might have come from doing 'Save to'
  in web browser viewing EBI
  iÿÿÿÿNs   .htmlR   i   s   Error opeing file: s   (.+)<pre>(.+)</pre>(.+)i   s-   Error attempting to find <pre> tags in file:
s   
ATOMi    s   (.+)</a>(.+)s   (.+)<a href(.+)>(.+)t   wi   s+   Error attempting to write cleaned up file:
R   (   R   RÊ   Rt   t   renamet   openR   R   R   t   DOTALLt   groupsR  t   write(	   R   R   RÊ   Rt   R   R   t   tt   nt   l1(    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyR   ¿  sF    
		c          C   sT   xM t  j D]B }  d G|  j GHt |  j d d ƒ r
 |  j d j d d GHq
 q
 Wd  S(   Ns   **i    t   colour_rulesi   (   R   t   instsR   R?   R“   R‡  (   Rz   (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   list_user_colour_rulesþ  s    ($   t   __doc__t   point_funcsR4  Rt   RÊ   R   t   mgappRÑ  RÕ   R	  R»  R�  t	   resourcest   buildR¦  RC   R½   t   global_definitionsRÂ  R"  t   PyQt4R   R    R@   RB   R   RK  RV  RŠ  RŽ   RQ  Rã  R|  Rš  R   R‰  (    (    (    s<   /opt/xtal/ccp4-6.5-linux32/lib/py2/ccp4mg/python/ui/model.pyt   <module>   sX   











*ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ È	$ÿ ÿ ÿ ·}	?