ó
©%�Tc           @   sC   d  „  Z  d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   c          C   s(   x! t  ƒ  D] }  t |  ƒ r
 |  Sq
 Wd  S(   N(   t   molecule_number_listt   valid_model_molecule_qm(   t   molecule(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   find_first_model_molecule   s    c   	         s/  d d  l  ‰ d „  ‰ ‡  ‡ ‡ f d †  ‰  d „  } t ƒ  } t ƒ  } | | | ƒ } t | ƒ d } | sr d GHn  ˆ  | | | ƒ } | } xž | | k s*| s­ t d ƒ Pq� | | k s× t | t ƒ  t ƒ  d ƒ } n  | d k rø ˆ  | | | ƒ } q� d } |  d k rd	 } n  t | | | | ƒ Pq� Wd  S(
   Niÿÿÿÿc         S   sS   t  | ƒ d k  r t S| j |  ƒ } | t  | ƒ d k rC | d S| | d Sd  S(   Ni   i   i    (   t   lent   Falset   index(   t   this_chain_idt   chain_id_listt   current_chain_index(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   skip_to_chain_internal'   s    c            sR   ˆ | | ƒ } t  | ƒ ˆ j k	 r( | St |  | ƒ rJ ˆ  |  | | ƒ n | Sd  S(   N(   t   typet
   StringTypet   is_solvent_chain_qm(   t   imolR   R   t   chain_guess(   t   skip_to_chainR
   t   types(    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyR   8   s    c         S   sK   t  |  ƒ } | s t |  ƒ Sx | D] } | | k r# | Sq# Wt |  ƒ Sd  S(   N(   t   ncs_chain_idst	   chain_ids(   R   R   t   attt   attempt(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   get_chain_id_listG   s    
i    s=   BL WARNING:: empty set of chains!!! This should never happen.s   No 'NCS Next Chain' foundt   forwardi   (	   R   t   go_to_atom_molecule_numbert   go_to_atom_chain_idt   make_ncs_ghosts_maybet   add_status_bar_textt0   set_go_to_atom_chain_residue_atom_name_no_redrawt   go_to_atom_residue_numbert   go_to_atom_atom_namet/   apply_ncs_to_view_orientation_and_screen_centre(	   t	   directionR   R   R   t   chainst   found_atom_statet
   next_chaint   try_next_chaint   forward_flag(    (   R   R
   R   sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   skip_to_next_ncs_chain   s<    				

		c         C   sš   t  |  ƒ } t ƒ  t | | | | | | d ƒ t | | ƒ } t | ƒ | sV d GHn@ t |  ƒ t |  d ƒ |  | | g | d | d } t | Œ  d  S(   Ni    s   Failed to get matching matrixi   (   t   copy_moleculet   clear_lsq_matchest   add_lsq_matcht   apply_lsq_matchest   close_moleculet   clear_ncs_ghost_matricest   set_draw_ncs_ghostst   add_ncs_matrix(   R   t   resno_startt	   resno_endt	   ref_chaint
   peer_chaint	   imol_copyt   rtopt   args(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   single_manual_ncs_ghostsŒ   s    

c   
   	   C   s  d d l  m } t | ƒ | k rt | ƒ d k rt |  ƒ t |  ƒ } x¨ | d D]œ } t ƒ  t | | | d | | | d ƒ t |  | ƒ } | s£ d G| GHqU | d } d | | | f GH| rU |  | | g | d | d }	 t	 |	 Œ  qU qU Wt
 | ƒ t |  d ƒ qn  d  S(   Niÿÿÿÿ(   t   ListTypei   i    s!   Failed to get LSQ matching matrixs   chain_id %s master %s rtop: %s(   R   R7   R   R   R,   R'   R(   R)   R*   R.   R+   R-   (
   R   R/   R0   R   R7   R3   t   chain_idR4   t   masterR5   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   manual_ncs_ghosts¡   s&    


c          C   sˆ  t  ƒ  �y\ }  } } } } } t |  ƒ } t | t ƒ r~| d } t | t ƒ r~t |  ƒ x| d D]} t |  ƒ }	 t |	 d ƒ t |	 d ƒ t ƒ  | | | g }
 t	 |  |
 d ƒ } |
 | g } x: | D]2 } t
 | ƒ } t | | | d | | | d ƒ qÎ Wt |  |	 ƒ } t |	 ƒ | s/d G| GHqg | d } t | t ƒ rg |  | | g | d | d } t | Œ  qg qg Wq~n  Wd QXd S(   s¦   Update NCS ghosts based on local environment (residues within 6A of
    (and including) the active residue).
    
    Typically one would bind this function to a key.i    i   i   s!   Failed to get LSQ matching matrixN(   t   UsingActiveAtomR   t
   isinstancet   listR,   R'   t   set_mol_displayedt   set_mol_activeR(   t   residues_near_residuet   residue_spec2res_noR)   R*   R+   t   strR.   (   t   aa_imolt   aa_chain_idt	   aa_res_not   aa_ins_codet   aa_atom_namet   aa_alt_conft   ghost_ncs_chain_idst   ghost_chain_id_listR8   R3   t   active_residue_spect   near_residuest   sphere_residuest   residue_spect   res_noR4   R9   R5   (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt!   update_ncs_ghosts_by_local_sphereÀ   s:    

	

c         C   st   d d l  m } t |  ƒ } t | ƒ | k	 r2 t St | ƒ d k rH t S| d } t | ƒ d k rh t S| d Sd  S(   Niÿÿÿÿ(   R7   i    (   R   R7   R   R   R   R   (   R   R7   t   cids_lst   cids(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   ncs_master_chain_idê   s    
c            s<  d „  } t  |  ƒ } | r8d | d t | ƒ d t | ƒ } t | | ƒ }	 t |  ƒ }
 x´ | D]¬ } | d | k rc | d t | ƒ !} d ‰  xz | D]o } | |
 | ƒ } | sÆ d GHt d ƒ q™ t |	 ƒ } t | t | ƒ ƒ t	 | t | ƒ d	 ˆ  d
 | ƒ q™ Wqc qc W‡  f d †  ‰ t
 ‡ f d †  ƒ n  d  S(   Nc         S   s-   x& |  D] } | d | k r | d Sq Wt  S(   Ni   i   (   R   (   t   ghostsR8   t   ghost(    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   rtop_from_ghost_with_chain_id  s    s   //t   /t   -i    i   s   Candidate NCS-related ligands'   Opps - ncs-ligand: Missing ghost rt-op!s   : s    to protein chain c            sa   t  |  ƒ s t St |  ƒ } ˆ  | k rY | g } x! t |  ƒ D] } | j | ƒ q> W| St Sd  S(   N(   R   R   t   molecule_namet   molecule_centret   append(   R   t   namet   lst   i(   t   candidate_name(    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt	   test_func&  s    	c            s
   ˆ  |  ƒ S(   N(    (   R   (   R`   (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   <lambda>2  s    (   R   RB   t   new_molecule_by_atom_selectiont
   ncs_ghostsR   t   info_dialogR'   t   transform_coords_moleculet   inverse_rtopt   set_molecule_namet   molecules_matching_criteria(   t   imol_proteinRS   t   imol_ligandt   chain_id_ligandt   resno_ligand_startt   resno_ligand_stopRV   t   chain_ids_from_ncst   ligand_selection_stringt   imol_ligand_fragmentRT   R   t   peer_chainst   chain_id_proteinR4   t   new_lig_mol(    (   R_   R`   sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt
   ncs_ligand   s,    	&N(   R   R&   R6   R:   RP   RS   Rt   (    (    (    sJ   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/ncs.pyt   <module>   s   		m			*	