ó
Í%�Tc           @   s*  d  d l  Z  d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l	 Z	 d  d l
 Z d  d l Z d  d l m Z d  d l Z d  d l Td a e a e a d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d „  Z" d „  Z# d „  Z$ d „  Z% d „  Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d „  Z- d  „  Z. d! „  Z/ d" „  Z0 d# „  Z1 e2 d$ k r&d% „  Z3 d& „  Z4 e d' d( d) d* ƒ Z5 e5 j6 d+ d, d- d. d/ d0 d1 d2 ƒe5 j6 d3 d4 d- d5 d/ d6 d1 d2 ƒe5 j6 d7 d8 d- d9 d: d: d/ d; ƒe5 j6 d< d= d- d> d: e d/ d? d@ dA dB ƒe5 j6 dC dD d- dE d: e d/ dF dA dB ƒe5 j6 dG dH d- dI d: e dA dJ d/ dK ƒe5 j6 dL dM d- dN d: e d/ dO ƒe5 j6 dP dQ d- dR d: e dA dB ƒe5 j6 dS dT d- dU d: e dA dB d/ dV ƒe5 j6 dW dX d- dY d/ dZ d: d[ ƒe5 j6 d\ d] d: d^ d- d_ d/ d` ƒe5 j6 da db d- dc d/ dd dA dB d: e ƒe5 j6 de df d- dg d: e dA dB d/ dh ƒe5 j6 di dj d- dk d: e dA dB d/ dl ƒe5 j6 dm dn dA dJ d- do d: e d/ dp ƒe5 j7 ƒ  \ Z8 Z9 e8 j: rHdq t Gdr Ge	 j; ƒ  GHn  e8 j< Z< e8 j< d: k rids Z< n  e8 j= d k r“e8 j< d: k r“dt Z< q“n  e< du e8 j? dv Z@ e< du e8 j? dw ZA e< du e8 j? ZB e8 jC e k ræe a n  t rDeD e8 jE ƒ dx k rDe8 jE dx du k r1dy Ge8 jE Gdz GHeF d{ ƒ n  e3 e8 jE ƒ qDn  e8 jG sVe8 jH rwe ZI eD e9 ƒ dx k r–e9 dx ZJ e4 eJ ƒ ZK e jL eK ƒ ZI n� e8 jM d k rºe jN e8 jM ƒ ZI nl e8 j= d k r&e jO e8 j= ƒ ZP d| GeP GHx? eP D]4 ZQ e jR e8 j= eQ ƒ ZS e1 eS eQ e8 j? e8 jT ƒ qëWn  eI r#e8 jG rQe1 eI e< e8 j? e8 jT ƒ n  e8 jH rte jU eI ƒ ZV eV GHqtq#q&e8 j= r$e- e8 j= e< e8 jE e8 j? e8 jW e8 jX e8 jY ƒ ZZ xpeZ D]f Z[ e[ \ ZI Z< eI s×d} GHq·e8 jT r·e j\ eI d~ e ƒZ] e j^ e] ƒ Z_ e) e] e_ e< e8 j? ƒ q·q·Wq&e8 jM d k r‘e, e8 jM e< e8 jE eB e@ eA e8 jW e8 jX e8 jY ƒ	 \ ZI Z` e8 jT r#e) eI d  e< e8 j? ƒ q#q&eD e9 ƒ dx k r&e9 dx ZJ e4 eJ ƒ ZK e+ eK e< e8 ja e8 jE eB e@ eA e8 jW e8 jX e8 jY ƒ
 Zb e8 jT r#e jL eK ƒ ZI e) eI d  e< e8 j? ƒ q#q&n  d S(   iÿÿÿÿN(   t   call(   t   Chem(   t   AllChem(   t   OptionParser(   t   *s   0.0-prec         C   sÏ   t  |  d ƒ } | rË | j d ƒ | j | ƒ | j d ƒ | j d ƒ | j | ƒ | j d ƒ | j d ƒ | j d ƒ | j d ƒ | j d ƒ | j d	 ƒ | j d
 ƒ | j d ƒ | j ƒ  n  | S(   Nt   ws   mogul molecule file s   
s   mogul output   file s!   mogul output distribution all on
s	   bond all
s
   angle all
s   config output format CSV
s]   config output items fragment_type atom_indices query_value nhits mean median sd z-score dmin
s*   config search all filter exclude_solvents
s(   config output invalid_fragments exclude
(   t   opent   writet   close(   t   mogul_ins_file_namet   mogul_out_file_namet   sdf_file_namet   f(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   make_mogul_ins_file   s"    c         C   sL   t  | | |  ƒ } | rD t r= t d d | g ƒ } | d k St Sn t Sd  S(   Nt   moguls   -insi    (   R   t	   run_mogulR    t   False(   R   R	   R
   R   t   state(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   execute_mogul3   s    
c         C   s   |  } | t  | ƒ 7} | S(   N(   t   str(   t   elementt   countt   name(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt&   atom_name_from_atomic_number_and_count?   s    c   	      C   sã   i  } g  } xÐ |  j  ƒ  D]Â } y  | j d ƒ } | j | ƒ Wq t k
 rÚ | j ƒ  } | | k r| | | d | | <n
 d | | <| j ƒ  j ƒ  } t | | | ƒ } t | | ƒ } | j	 d | ƒ | j | ƒ q Xq W| S(   NR   i   (
   t   GetAtomst   GetPropt   appendt   KeyErrort   GetAtomicNumt	   GetSymbolt   upperR   t   pad_atom_namet   SetProp(	   t   molt   nzt
   atom_namest   atomt   nt   zt   eleR   t   p_name(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   add_atom_namesD   s"    
c         C   s    d } |  t  j j j k r$ d } n  |  t  j j j k rB d } n  |  t  j j j k r` d } n  |  t  j j j k r~ d } n  |  t  j j j k rœ d } n  | S(   Nt   singlet   aromatict   doublet   triplet   deloc(   R   t   rdchemt   BondTypet   SINGLEt   AROMATICt   DOUBLEt   TRIPLEt   ONEANDAHALF(   t
   rdkit_typet   out_type(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   convert_to_coot_bond_typeX   s    					c         C   s´   |  } t  | ƒ d k r] t  |  ƒ d k r; d |  d } n  t  |  ƒ d k r] d |  } q] n  t  | ƒ d k r° t  |  ƒ d k rŽ |  d } n  t  |  ƒ d k r° |  d } q° n  | S(   Ni   i   t    i   s     (   t   len(   R   R   t   padded(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyR   f   s    c         C   s7   |  j  d ƒ } t | ƒ d k r/ | d d k St Sd  S(   Nt   .i   t   smi(   t   rsplitR:   R   (   t	   file_namet   bits(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   is_smiles_fileu   s    c         C   s   t  |  ƒ d k S(   Ni   (   R:   (   t   comp_id(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt
   is_comp_id|   s    c         C   se   |  j  d ƒ } t | ƒ d k  r% t St | ƒ d } | | d k rI t S| | d k r] t St Sd  S(   NR<   i   i   R!   t   mdl(   R>   R:   R   t   True(   R?   R@   t   idx(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   is_mdl_file   s    c         C   s   t  |  ƒ } | j ƒ  S(   N(   R   t   read(   R?   R   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt	   read_file�   s    c         C   sç   i  } g  } x„ |  j  ƒ  D]v } | j ƒ  } t | ƒ } | j ƒ  } | j ƒ  } | j d ƒ } | j d ƒ }	 | |	 | d d g }
 | j |
 ƒ q W| | d <|  j d ƒ |  j d ƒ |  j d ƒ d |  j ƒ  |  j ƒ  d g | d <| S(   NR   g      ð?t   _chem_comp_bondRB   s   non-polymerR<   t
   _chem_comp(   t   GetBondst   GetBondTypeR8   t   GetBeginAtomt
   GetEndAtomR   R   t   GetNumAtoms(   R!   t
   restraintst	   bond_listt   bondt   typet   coot_bond_typet   at_1t   at_2t   name_1t   name_2t   item(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   make_restraints_for_bond_orders”   s(    
		c         C   sá   y¥ |  | } y | j  | ƒ j d ƒ } Wnx t k
 r£ | j  | ƒ j d | ƒ | j  | ƒ j d ƒ } t r¤ d t | ƒ j d ƒ t | ƒ t | ƒ f GHq¤ n XWn5 t k
 rÜ x% | D] } t	 |  | | | ƒ q¼ Wn Xd  S(   Nt	   atom_typeR   s3       set atom number %s having name %s with type %s i   (
   t   GetAtomWithIdxR   R   R    R   R   t   rjustt   reprt	   TypeErrort   set_atom_type(   t   matcht   match_atom_indexR!   R\   t	   this_atomt   current_typeR   t
   match_atom(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyRa   ®   s    
#c         C   s   |  j  ƒ  d |  d d f S(   Nt   [t   ]i    (   R   (   t   v(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   ele_to_smart½   s    c       R   C   s	  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' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR gR }  t  t |  ƒ S(S   Nt   Het   Lit   Bet   Bt   Net   Nat   Mgt   Alt   Art   Kt   Cat   Sct   Tit   Vt   Crt   Mnt   Fet   Cot   Nit   Cut   Znt   Gat   Get   Ast   Set   Krt   Rbt   Srt   Yt   Zrt   Nbt   Mot   Tct   Rut   Rht   Pdt   Agt   Cdt   Int   Snt   Sbt   Tet   It   Xet   Cst   Bat   Lat   Cet   Prt   Ndt   Pmt   Smt   Eut   Gdt   Tbt   Dyt   Hot   Ert   Tmt   Ybt   Lut   Hft   Tat   Wt   Ret   Ost   Irt   Ptt   Aut   Hgt   Tlt   Pbt   Bit   Pot   Att   Rnt   Frt   Rat   Act   Tht   Pat   U(   t   mapRj   (   t   eles(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   smarts_by_elementÁ   s    $'***c      b   C   s»  d³ d´ dµ d¶ d
 d d· f d
 d d¸ f d¹ dº d» d¼ d½ d d d¾ f d¿ d d dÀ f dÁ d d dÂ f d  d! dÃ f d d" dÄ f d  d# dÅ f 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ê dd de dë f dì dí dî dï dð dñ dò dó dô dõ dy dz dö f 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` } | } x t  ƒ  D] } | j | ƒ q�Wx” | D]Œ } | \ } } } t j | ƒ } |  j | ƒ r®|  j | ƒ }	 t rd« G| GHd¬ G| Gd­ G|	 GHn  x$ |	 D] }
 t |
 | |  | ƒ qWq®q®Wxv |  j ƒ  D]h } y | j	 d® ƒ } WqKt
 k
 r²| j ƒ  } | j ƒ  } d¯ G| j	 d° ƒ Gd± G| Gd² G| GHt SXqKWt S(  Nt   O2s   [OX2;H0]i    t   OPs   O~Pt   OSs   O~St   OBs   O~Bt   OCs
   *C(=O)[OH]i   i   s   *C(=O)Ot   OH1s   [OH1]s   [oX2;H0]t   Os   O=*t   CSP1s   [H][C]#*i   t   CSPs   [C]#[C]s   [C]#*t   CR56t   c12aaaac1aaa2i   t   c12aaaan1aaa2t   CR66t   c12aaaac1aaaa2t   CR6t   c12ccccc1OCO2t   c12aaaac1AAAA2s   c12caccc1***2t   CR16s   [cr6;H1]s   [cr6;H0]t   CR15s   [cr5;H1]t   CR5s   [cr5;H0]s   [CR5;H0]t   C1s   [CX3;H1]t   C2s
   [CX3;H2]=*t   Cs   [CX3;H0;^2]s   [CX3]=[OX1]s   [$([CX2](=C)=C)]t   CTs   [CX4H0]t   CH3s	   [C;H3;^3]t   CH2s	   [C;^3;H2]t   CH1s   *[C;H1](*)*s   [CH2]s   [C,c]t   HCH1s   [H][CH1]t   HCH2s   [H][C;H2^3]t   HCH3s   [H][CH3]t   HNC1s   [H][N;H1;^2]~C(~N)~Nt   HNC2s   [H][NX3;H2;^2]t   HNC3s   [H][NX3;H3;^2]t   HNT1s   [H][NX4;H1;^3]s   [H][NX3;H1;^3]t   HNT2s   [H][NX3;H2;^3]t   HNT3s   [N^3;H3][H]t   HNH2s   [H][NH2;^2]t   HNH1s   [H][NX3;H1;^2]t   HCR6s   [H][cr6;H1]t   HCR5s   [H][cr5;H1]t   HNR5s   [H][nr5;H1]s   [H][Nr5;H1]t   HNR6s   [H][nr6;H1]s   [H][NR6;H1]t   HCR1s   [H]cs   [H][NH1]t   HOH1s   [H][OH1]t   HOH2s   [H][OH2][H]t   Hs   [H]t   NT1s   [NX4;H1;^3]s   [NX3;H1;^3]t   NT2s   [NX3;H2;^3]t   NT3s   [NX4;H3;^3]t   NTs   [NX3;H0;^3]t   NR66t   c12aaaan1aaaa2t   NR56t   NR55t   c12aaan1aaa2i   t   NC2s
   [NX3;H2^2]t   NH2s   [NX3^2][CX3^2]=[N^2;X3+]t   NR15s   [nr5;X3;H1]t   NR5s   [nr5;X3;H0]s   [NR;X3;H0;^2]t   NRD5s   [nr5;X2;H0]s   C1(=O)[C,c][C,c]C=N1t   NR16s   [nr6;H1]t   NRD6s   a:[nr6;X2;H0]:at   NR6s   [nr6]t   NC1s   [NX3;H1;^2]C(~N)~Ns   [NX2;H1;^2]t   NH1s   [NX3;H1;^2]s   [NX3;H2;^2]s   *n1~[o]~[o]1t   NSs   [N^1]t   Ns   [N,n]t   Pt   CLs   [Cl]t   Fs   [F]t   BRs   [Br]t   SH1s   [SH1]t   STs   [SX4]t   S1s   [S]=*t   S2s	   [SX2,sX2]t   S3s	   [SX3,sX3]t   Ss   [S,s]t   SI1s   [Si;X4]t   SIs   [Si]s   SMARTS s     s   : R\   s   Error:: Missing type for atom "R   s   " is_aromatic: s    hybridization: (   RÀ   s   [OX2;H0]i    (   RÁ   s   O~Pi    (   RÂ   s   O~Si    (   RÃ   s   O~Bi    (   i   i   (   i   i   (   RÅ   s   [OH1]i    (   RÀ   s   [oX2;H0]i    (   RÆ   s   O=*i    (   RÆ   RÆ   i    (   RÇ   s   [H][C]#*i   (   i    i   (   RÈ   s   [C]#*i    (   i    i   (   RÉ   RË   i    (   i    i   (   i    i   (   i    i   (   i    i   (   RÑ   s   [cr6;H1]i    (   RÎ   s   [cr6;H0]i    (   RÒ   s   [cr5;H1]i    (   RÓ   s   [cr5;H0]i    (   RÓ   s   [CR5;H0]i    (   RÔ   s   [CX3;H1]i    (   RÕ   s
   [CX3;H2]=*i    (   RÖ   s   [CX3;H0;^2]i    (   RÖ   s   [CX3]=[OX1]i    (   RÖ   s   [$([CX2](=C)=C)]i    (   R×   s   [CX4H0]i    (   RØ   s	   [C;H3;^3]i    (   RÙ   s	   [C;^3;H2]i    (   RÚ   s   *[C;H1](*)*i   (   RÙ   s   [CH2]i    (   RÖ   s   [C,c]i    (   RÛ   s   [H][CH1]i    (   RÜ   s   [H][C;H2^3]i    (   RÝ   s   [H][CH3]i    (   RÞ   s   [H][N;H1;^2]~C(~N)~Ni    (   Rß   s   [H][NX3;H2;^2]i    (   Rà   s   [H][NX3;H3;^2]i    (   Rá   s   [H][NX4;H1;^3]i    (   Rá   s   [H][NX3;H1;^3]i    (   Râ   s   [H][NX3;H2;^3]i    (   Rã   s   [N^3;H3][H]i   (   Rä   s   [H][NH2;^2]i    (   Rå   s   [H][NX3;H1;^2]i    (   Ræ   s   [H][cr6;H1]i    (   Rç   s   [H][cr5;H1]i    (   Rè   s   [H][nr5;H1]i    (   Rè   s   [H][Nr5;H1]i    (   Ré   s   [H][nr6;H1]i    (   Ré   s   [H][NR6;H1]i    (   Rê   s   [H]ci    (   Rå   s   [H][NH1]i    (   Rë   s   [H][OH1]i    (   i    i   (   Rí   s   [H]i    (   Rî   s   [NX4;H1;^3]i    (   Rî   s   [NX3;H1;^3]i    (   Rï   s   [NX3;H2;^3]i    (   Rð   s   [NX4;H3;^3]i    (   Rñ   s   [NX3;H0;^3]i    (   Rò   Ró   i   (   Rô   RË   i   (   Rõ   Rö   i   (   R÷   s
   [NX3;H2^2]i    (   i    i   (   Rù   s   [nr5;X3;H1]i    (   Rú   s   [nr5;X3;H0]i    (   Rú   s   [NR;X3;H0;^2]i    (   Rû   s   [nr5;X2;H0]i    (   Rû   s   C1(=O)[C,c][C,c]C=N1i   (   Rü   s   [nr6;H1]i    (   Rý   s   a:[nr6;X2;H0]:ai   (   Rþ   s   [nr6]i    (   Rÿ   s   [H][N;H1;^2]~C(~N)~Ni   (   Rÿ   s   [NX3;H1;^2]C(~N)~Ni    (   Rÿ   s   [NX2;H1;^2]i    (   R   s   [NX3;H1;^2]i    (   Rø   s   [NX3;H2;^2]i    (   Rñ   s   *n1~[o]~[o]1i   (   R  s   [N^1]i    (   R  s   [N,n]i    (   R  R  i    (   R  s   [Cl]i    (   R  s   [F]i    (   R  s   [Br]i    (   R  s   [SH1]i    (   R  s   [SX4]i    (   R	  s   [S]=*i    (   R
  s	   [SX2,sX2]i    (   R  s	   [SX3,sX3]i    (   R  s   [S,s]i    (   R  s   [Si;X4]i    (   R  s   [Si]i    (   R¿   R   R   t   MolFromSmartst   HasSubstructMatcht   GetSubstructMatchesR   Ra   R   R   R   t   GetIsAromatict   GetHybridizationRE   (   R!   t   smarts_listt	   full_listRZ   t   smarts_infoR\   t   smartsRc   t   patternt   matchesRb   R$   t   is_aromatict   hybrid(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   set_atom_typesÍ   sî    				"	c          C   s6   t  r. t d ƒ }  |  d  k r' d GHt St Sn t Sd  S(   NR   s   mogul not found in path(   R   t   whicht   NoneR   RE   (   t	   mogol_exe(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   test_for_mogul‘  s    c         C   s   t  s t d ƒ n  t  |  S(   Ns
   smiles.tab(   t   smiles_dictt   read_smiles_tab(   RB   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   get_smiles_from_comp_idž  s    c         C   s|   y[ i  a  t |  ƒ } | j ƒ  } x2 | D]* } | j ƒ  j ƒ  } | d t  | d <q( Wt SWn t k
 rw } t a  t SXd  S(   Ni   i    (   R!  R   t	   readlinest   rstripR>   RE   t   IOErrorR   (   R?   R   t   linest   lineR@   t   e(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyR"  §  s    c         C   s   t  |  ƒ } | j ƒ  } | S(   N(   R   t   readline(   R?   R   R=   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   get_smiles_from_fileµ  s    c         C   s&   | d | d } t  |  | | ƒ d  S(   Nt   -s   .png(   t   make_picture_to_file(   R!   t   conf_idRB   t   output_postfixt   output_file_name(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   make_pictureº  s    c         C   s   yA d d l  m } d d  l } | j |  d d	 d | d | ƒ} Wn7 t k
 r_ } d G| GHn t k
 rz } d G| GHn Xd  S(
   Niÿÿÿÿ(   t   Drawt   sizei,  t   fileNamet   confIds   ImportError:s   ValueError in make_picture():(   i,  i,  (   t
   rdkit.ChemR2  t   Imaget	   MolToFilet   ImportErrort
   ValueError(   R!   R.  R0  R2  R7  R   R)  (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyR-  ¿  s    %c
      
   C   s`   t  ƒ  s t d ƒ n  t j |  ƒ }
 | r> |
 j d | ƒ n  t |
 | | | | | | | |	 ƒ	 S(   Ni   t   _Name(   R   t   exitR   t   MolFromSmilesR    t   make_restraints(   t   smiles_stringRB   t   compound_namet	   mogul_dirt	   name_stubt   pdb_out_file_namet   mmcif_dict_namet   quartet_planest   quartet_hydrogen_planest   use_mmfft   m(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   make_restraints_from_smilesÐ  s    	c	         C   s{   t  ƒ  s t d ƒ n  t j j |  ƒ s> d G|  GHt d ƒ n  d }	 t j |  ƒ }
 |
 t |
 | | | | | | | | ƒ	 f S(   Ni   s   No such file:R<   (   R   R<  t   ost   patht   existsR   t   MolFromMolFileR>  (   t   mol_file_nameRB   RA  RB  RC  RD  RE  RF  RG  R@  RH  (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   make_restraints_from_mdlÜ  s    		c      	   C   s¦   t  ƒ  s d g S| d k rw t j |  ƒ } g  } x? | D]7 }	 t |  |	 | | | | | ƒ }
 | j |
 |	 f ƒ q8 W| St |  | | | | | | ƒ } | | f g Sd  S(   Nt   TRY_ALL_COMP_IDS(   NN(   R   R  t   pyswt   types_from_mmcif_dictionaryt&   make_restraints_from_mmcif_dict_singleR   (   t   cif_file_name_inRB   RA  R/  RE  RF  RG  t   typest   lRT   t   t_molRH  (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   make_restraints_from_mmcif_dictï  s    	c      
   C   s¥  t  ƒ  s d g S| d k rt t j |  ƒ } g  } x< | D]4 }	 t |  |	 | | | | ƒ }
 | j |
 |	 f ƒ q8 W| S| d | } | d } | d } t j |  | ƒ } t r.x} | j	 ƒ  D]l } y; | j
 d ƒ } | j
 d ƒ } d G| Gd G| Gd G| GHWq» t k
 r&} d	 G| Gd
 G| Gd GHq» Xq» Wn  | j ƒ  d k rMd G| GHt Sd } y | j
 d ƒ } Wn t k
 r~d GHn Xt | | | | | | | | | ƒ	 Sd  S(   NRP  R,  s   .pdbs   .cifR   t   _CIPCodes    atomt   chirs   pyrogen.py:: atoms    with name s    has no _CIPCode propertyi    s   No atoms for comp_idt    R;  sI   caught KeyError in make_restraints_from_mmcif_dict() trying GetProp _Name(   NN(   R   R  RQ  RR  RX  R   t   pyrogen_boostt   rdkit_mol_chem_comp_pdbxR   R   R   R   RP   R>  (   RT  RB   RA  R/  RE  RF  RG  RU  RV  RT   RW  t   file_name_stubRC  t   cif_restraints_file_nameRH  R$   R   RZ  R)  (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyRS  	  sD    	

		c         C   s@   d } x3 |  j  ƒ  D]% } | j ƒ  d k r | d 7} q q W| S(   Ni    i   (   R   R   (   R!   t   n_HR$   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   n_hydrogens=  s
    c	   *   
   C   sß  t  }	 y |  j d ƒ }
 Wn* t k
 r2 d }
 n t k
 rE } d  SX|  } t |  ƒ d k rp t j |  ƒ } n  |	 rˆ t j | ƒ } n | } t j	 | ƒ } | r¹t j
 | d | ƒt rÌt j | ƒ } | j ƒ  } | d k r?xY t | ƒ D]H } | j | ƒ } | j ƒ  G| j ƒ  G| j ƒ  G| j ƒ  G| j ƒ  GHqð Wn  | j ƒ  } | d k r¶xY t | ƒ D]H } | j | ƒ } | j ƒ  G| j ƒ  G| j ƒ  G| j ƒ  G| j ƒ  GHqdWq¶qÌn t j | d | ƒt | ƒ } t | ƒ } | t  k rôt S| j d | ƒ | j d |
 ƒ | d } t j j | | d ƒ } t j j | | d	 ƒ } t j j | | d
 ƒ } t  j j! | ƒ t j" | ƒ } t j j# | ƒ sÞt$ | ƒ t j j# | ƒ r t  j% | ƒ } t& | d ƒ | IJq n" t  j% | ƒ } t& | d ƒ | IJt' | ƒ } t } | r d GHn  xå | j( ƒ  D]× }  |  j d ƒ }! |  j d ƒ }" yˆ |  j d ƒ }# |  j) ƒ  }$ |  j* ƒ  }% t+ |! ƒ }& | rØd |" |  j, ƒ  |# j- d ƒ t. |$ ƒ j- d ƒ t. |% ƒ j/ d ƒ |& f GHn  Wq-t k
 rd G|" G|  j, ƒ  G|! GHq-Xq-Wt }' | rt  }' n  t0 | | | ƒ }( |( rut1 j2 | | |
 | | | | | |' ƒ	 }) t1 j3 | |) | | ƒ nb t4 t k rÍt1 j5 | |
 | | | | |' ƒ }) |) d  k r·d GHt  St1 j7 | | | ƒ n
 t8 d ƒ | Sd  S(   NR;  R<   i    R5  RB   R   s   .sdfs
   -mogul.sdfs
   -mogul.inss
   -mogul.outR   s   --- Atom Props ---t   _GasteigerChargeR\   s8     atom: %s %s type: %s arom: %s hybrid: %s charge: %6.3fi   i   i   t   misss   No restraintsi   (9   RE   R   R   t   AttributeErrorRa  R   t   AddHsR\  t   hydrogen_transformationst   EmbedMoleculet   MMFFOptimizeMoleculeR   t   mmff_bonds_and_anglest
   bonds_sizet   ranget   get_bondt	   get_idx_1t	   get_idx_2t   get_typet   get_resting_bond_lengtht	   get_sigmat   angles_sizet	   get_anglet	   get_idx_3t   get_resting_anglet   UFFOptimizeMoleculeR)   R  R    RJ  RK  t   joinR   t   ComputeGasteigerChargest   mogulifyt   isdirt   checked_mkdirt   MolToMolBlockt   fileR[   R   R  R  t   floatR   t   ljustR   R^   R   RQ  t   mogul_out_to_mmcif_dict_by_molt   regularize_and_write_pdbR   t   mmcif_dict_from_molR  t   write_pdb_from_molR<  (*   RH  RB   RA  R^  RC  RD  RE  RF  RG  t   do_hydrogen_atoms_shiftR@  R)  t   m_Ht
   sane_H_molR.  t   bat   n_bondst   i_bondRS   t   n_anglest   i_anglet   angleR#   t   all_sett   sd_localR   R	   R
   t   moguled_molt   mbt   bort   print_atom_propsR$   t   chargeR   R\   R  R  t   f_charget    replace_with_mmff_b_a_restraintst   mogul_stateRQ   (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyR>  G  sº    	"

				
c         C   s/  t  j |  ƒ } xt t | ƒ ƒ D]} | | } t j | ƒ } d G| Gd G| Gd Gt  j | ƒ GH| r" | d t | ƒ } | d t j	 d 7} | j
 ƒ  }	 d }
 |	 d k rÂ t j | ƒ }
 n  | j |
 ƒ } | j ƒ  rt j | d t ƒ} t j | ƒ } t | | | ƒ q't | d	 | ƒ q" q" Wd  S(
   Ns	   comp_id :s   : SMILESs   score:s
   -tautomer-R,  s   .pngi    t   implicitOnlyiÿÿÿÿ(   t   tautomert   enumerate_tautomersRk  R:   R   t   MolToSmilest   tautomer_scoreR   t   optionsR/  t   GetNumConformersR   t   Compute2DCoordst   GetConformert   Is3Dt   RemoveHsR   R-  (   R!   RB   R/  t   do_drawingst   resultst   iRH  t   sR?   R%   R.  t   conft   mol_for_drawingt	   conf2D_id(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   score_and_print_tautomersá  s$    
"t   __main__c         C   sH   t  j j |  ƒ s" t  j |  ƒ n" t  j j |  ƒ r7 n d G|  Gd GHd  S(   Ns   Stop:: Files   exists but is not a directory(   RJ  RK  RL  t   makedirsRz  (   t   dirname(    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyR{  ú  s
    c         C   sM   t  j j |  ƒ d } d } | d k s4 | d k rC t |  ƒ } n |  } | S(   Ni   R[  s   .smis   .smiles(   RJ  RK  t   splitextR+  (   t   smi_rawt	   extensionR?  (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   smiles_from  s    t   usages    pyrogen [options] file-or-SMILESs<   
       if file-or-SMILES has extension ".smi" or ".smiles" s   then it is treated as a files   -cs   --mmcift   destt
   mmcif_filet   helps%   Make restraints from input mmcif FILEt   metavart   FILEs   -ms   --molt   sdf_files'   Make restraints from input sdf/mol FILEs   -rs   --residue-typeRB   t   defaults/   Create restraints for this type. Default is LIGs   -4s   --quartet-planesRE  s1   Use 4-atom plane restraints,
                    s   forces --quartet-hydrogenst   actiont
   store_trues   -Hs   --quartet-hydrogensRF  s$   Use 4-atom hydrogen plane restraintss   -ns
   --no-mogult	   use_mogult   store_falses7   Don't run CSD Mogul to update bond and angle restraintss   -Ns   --nameR@  s   Compound names   -Ss   --smilest   show_smiless   -ts   --tautomerst   show_tautomerss4   Show SMILES for tautomers, don't generate restraintss   -ds   --directoryRA  s?   Directory into which the tmp files (e.g. for mogul) are writtens   pyrogen-moguls   -os   --output-postfixt   pyrogenR/  s8   string to add to output file names, default is "pyrogen"s   -ps	   --picturet   drawings*   Additionally output a chemical diagram PNGs   -vs	   --versiont   show_versions   Print version informations   -Ms   --MMFFt	   use_mmcifs'   Use MMFF fallbacks for bonds and angless   -qs   --quiett   verboses   print less messagess   pyrogen-t   revisiont   LIGRP  R,  s   .pdbs   .cifi    s/   Stop:: you probably didn't mean that you wanteds   as your tmp directory.i   s#   -- tautomer mode: mmcif file types:s   No moleculeR—  (c   t   sysRJ  t   copyt
   subprocessR    t   rdkitR   R6  R   t   coot_svn_repo_revisiont   pyrogen_swigRQ  R\  t   optparseR   R˜  t   jay_utilt   pyrogen_versionRE   R   R   R!  R   R   R   R)   R8   R   RA   RC   RG   RI   R[   Ra   Rj   R¿   R  R   R#  R"  R+  R1  R-  RI  RO  RX  RS  Ra  R>  R©  t   __name__R{  R°  t   parsert
   add_optiont
   parse_argsRœ  t   argsRÁ  t   revision_numberRB   R³  R  R/  RC  R_  R^  R»  R:   RA  R<  R¾  R½  R!   R®  t   smilesR=  R·  RM  RR  RU  RT   R]  t	   mol_localRÀ  Rš  R¥  RE  RF  RÂ  t	   mol_pairst   mol_infoR¡  R§  Rž  R¨  R£  R@  t   status(    (    (    sN   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/python2.7/site-packages/coot/pyrogen.pyt   <module>   sH  
															Ä											4	
	š					
				
	 				 		
		