ó
©%�Tc           @   sj   d  „  Z  d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 d	 „ Z
 d
 „  Z d S(   c         C   sô   t  | ƒ t | |  ƒ k r> d Gt | |  ƒ Gd Gt  | ƒ GHn² t |  ƒ t |  ƒ } t |  ƒ d } x@ | D]8 } t | | |  t | ƒ } | d k rk | d 7} qk qk Wd t  | ƒ | f GHt |  ƒ | d k rß t	 |  ƒ n  t
 |  ƒ t ƒ  d  S(   Ns   sequence mismatch: molecules   new sequences:i    i   s*   multi_mutate of %s residues had %s baddies(   t   lent   chain_n_iresiduest   chain_n_residuest   make_backupt   backup_statet   turn_off_backupt&   mutate_single_residue_by_serial_numbert   sequence_listt   set_have_unsaved_changest   turn_on_backupt'   update_go_to_atom_window_on_changed_molt   graphics_draw(   t   imolt   chain_idt   sequencet   backup_modet   baddiest   irest   res(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   mutate_chain   s     #



c         C   s•   t  | ƒ d k rŒ d } xv t t  | ƒ ƒ D]Z } |  | | d | | | | ƒ } | d k rj | d 7} n  d Gt  | ƒ Gd G| Gd GHq+ Wn d GHd  S(   Ni    t    i   s   multi_mutate ofs   residues hadt   errorss8   BL WARNING:: no sequence or sequence of no length found!(   R    t   range(   t   mutate_functionR   t   start_res_noR   R   R   R   t   result(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   multi_mutate.   s     "c         C   s­   d G|  GHt  |  ƒ | | d } t | ƒ | k rI d Gt | ƒ G| GHn` t |  ƒ } t |  ƒ t t |  | | | ƒ t |  ƒ | d k r˜ t |  ƒ n  t |  ƒ t	 ƒ  d  S(   Ns   backing up molecule number i   s   sequence length mismatch:(
   R   R    R   R   R   t   mutate_single_residue_by_seqnoR   R	   R
   R   (   R   R   R   t   stop_res_noR   t
   n_residuesR   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   mutate_residue_range>   s    	

	

c      
   C   sê   t  |  | | | | ƒ t ƒ  } | d k rá t |  ƒ } t |  ƒ x� t t | ƒ ƒ D]m } d } d }	 d }
 | | } d G| G|	 G|
 G| G|  G| G| GHt | |	 |
 | |  | | d ƒ } d G| GHqT W| d k ræ t |  ƒ qæ n d GHd  S(   Ni    i   R   s   auto-fit-best-rotamer g      à?s      Best score: s/   WARNING:: no map set for refinement.  Can't fit(   R   t   imol_refinement_mapR   R   R   R    t   auto_fit_best_rotamerR	   (   R   R   R   R   R   t   mol_for_mapR   R   t   clasht   altloct   inscodet   resnot   score(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt    mutate_and_autofit_residue_rangeV   s     	

!!c      	   C   s9   t  | | |  d | ƒ t |  d d | | | d d ƒ d  S(   NR   i    g      à?(   t   mutateR    (   t   residue_numberR   t   molR!   t   residue_type(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   mutate_and_auto_fitn   s    c          G   s   t  |  Œ  d  S(   N(   R,   (   t   args(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   mafv   s    c         C   s¸   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 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6} | j  |  ƒ r® | |  } n d } | S()   Nt   At   ALAt   Rt   ARGt   Nt   ASNt   Dt   ASPt   Ct   CYSt   Qt   GLNt   Et   GLUt   Gt   GLYt   Ht   HISt   It   ILEt   Lt   LEUt   Kt   LYSt   Mt   METt   Ft   PHEt   Pt   PROt   St   SERt   Tt   THRt   Wt   TRPt   Yt   TYRt   Vt   VAL(   t   has_key(   R+   t   dic_type_1lct   res_type_1lc(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   three_letter_code2single_letter{   s    c         C   sã   d d l  m } d „  } t | ƒ | k	 rC d } t | ƒ | GHnœ | | d } t | ƒ }	 | |	 k s� d } t | ƒ | GHn^ t | | ƒ }
 xL t d  t | | d ƒ |
 ƒ D]+ \ } } | r° t |  | | d | ƒ q° q° Wd  S(   Niÿÿÿÿ(   t
   StringTypec         S   s9   d d d d d g } |  j  ƒ  } | | k r1 | St Sd  S(   NR/   R7   R=   RO   t   U(   t   uppert   False(   t   lettert   ntt   up(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt#   nucleotide_letter2three_letter_code’   s
    s   sequence must be a stringi   s(   residue range must equal sequence lengthR   (	   t   typesR[   t   typet   info_dialogR    t   mapt   NoneR   t   mutate_base(   R   R   t   resno_startt	   resno_endR   R[   Rb   t   st   residue_range_lengtht
   seq_lengtht   residue_typest   res_not   res_type(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   mutate_nucleotide_rangeŠ   s     	

,c         C   sÔ   | } 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 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6} | j  | ƒ r´ | | } n d } t | | |  d) | ƒ d  S(*   NR/   R0   R1   R2   R3   R4   R5   R6   R7   R8   R9   R:   R;   R<   R=   R>   R?   R@   RA   RB   RC   RD   RE   RF   RG   RH   RI   RJ   RK   RL   RM   RN   RO   RP   RQ   RR   RS   RT   RU   RV   R   (   RW   R(   (   R)   R   R   R+   t   insertion_codet   ins_codeRX   RY   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   mutate_residue_redundant·   s    c   	      C   s5  t  |  ƒ r(t |  ƒ t |  ƒ } t ƒ  } t |  ƒ i d d 6d d 6d d 6d d 6} | r¶ t | ƒ d k rŠ | | j ƒ  k rŠ | } q¼ | j | ƒ r¦ | | } q¼ d | GHd  Sn d	 } xM t |  ƒ D]? } t	 | |  ƒ } x' t
 | ƒ D] } t | | |  | ƒ që WqÉ W| d k r1t |  ƒ q1n	 d
 G|  GHd  S(   NRM   RN   t   SerR=   R>   t   Glyi   s/   BL WARNING:: unrecognised residue name %s givenR/   s$   BL WARNING:: no valid model molecule(   t   is_valid_model_moleculeR   R   R   R   R    t   valuesRW   t	   chain_idsR   R   R   R	   (	   R   Rp   R   t   imol_mapt   dic_sgt   single_letter_codeR   R   t   serial_number(    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   poly_alaÔ   s0    
	
"$		c         C   s4   x- t  | | ƒ D] } t |  | | d d ƒ q Wd  S(   NR   i    (   t   number_listt   delete_residue_sidechain(   R   R   Ri   Rj   R%   (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   delete_sidechain_rangeú   s    N(   R   R   R   R'   R,   R.   RZ   Rq   Rt   R^   R~   R�   (    (    (    sM   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/mutate.pyt   <module>   s   								-	&