ó
˜™xTc        
   @   sÉ  d  d l  m Z d  d l m Z d  d l Z d  d l m Z d  d l m 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 m Z d  d l Z d  d
 l m Z d  d l Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z d  d l m Z m Z m Z m Z d  d l m Z d  d l  m! Z! m" Z" m# Z# d  d l$ m% Z% d  d l& Z& d  d l' Z' d  d l( Z( d  d l) Z) d  d l* Z* d j+ ƒ  Z, d e- f d „  ƒ  YZ. d Z/ d Z0 d Z1 d Z2 d e3 ƒ  Z4 e j5 j6 d e4 d e7 ƒ Z8 d Z9 d „  Z: d Z; d  e3 ƒ  Z< d! „  Z= d" „  Z> d# d$ „ Z? d% e- f d& „  ƒ  YZ@ d' „  ZA d( „  ZB d) e- f d* „  ƒ  YZC eD d+ eD d, „ ZE eD e7 g  d- „ ZF d. „  ZG d/ e- f d0 „  ƒ  YZH d1 eH f d2 „  ƒ  YZI d3 eH f d4 „  ƒ  YZJ d5 e# f d6 „  ƒ  YZK d7 e# f d8 „  ƒ  YZL d9 e- f d: „  ƒ  YZM d; e- f d< „  ƒ  YZN d= „  ZO eP d> „ ZQ d? „  ZR g  d@ „ ZS dA e- f dB „  ƒ  YZT dC e- f dD „  ƒ  YZU dE e- f dF „  ƒ  YZV dG e- f dH „  ƒ  YZW dI e- f dJ „  ƒ  YZX dK e- f dL „  ƒ  YZY eP dM „ ZZ dN „  Z[ dO e- f dP „  ƒ  YZ\ dQ e- f dR „  ƒ  YZ] d  dS l^ m_ Z_ dT e_ f dU „  ƒ  YZ` dV „  Za dW e- f dX „  ƒ  YZb eD e7 eP eP eD e7 dY dZ eD d[ „	 Zc ed d\ k rÅec e' je d] ƒ n  d S(^   iÿÿÿÿ(   t   division(   t   pdbN(   t   server(   t	   cif_types(   t   rna_sugar_pucker_analysis(   t!   conformation_dependent_restraints(   t   ramachandran(   t   geometry_restraints(   t   crystal(   t   sgtbx(   t   flex(   t   dicts(   t   show_string(   t	   flat_listt   Sorryt   user_plus_sys_timet   plural_s(   t   format_exception(   t   Autot
   group_argst   slots_getstate_setstate(   t   StringIOsœ   ZN CA MG CL NA MN K FE CU CD HG NI CO BR XE SR CS PT BA TL PB SM AU RB YB LI
KR MO LU CR OS GD TB LA F AR AG HO GA CE W SE RU RE PR IR EU AL V TE SB PD
U I
t   ad_hoc_single_atom_residuec           B   s   e  Z d  „  Z RS(   c         C   s@  | j  ƒ  j ƒ  } | t k r4 | |  _ | |  _ d  S| j  ƒ  j ƒ  } t | ƒ d k rŒ | | j  ƒ  k rŒ | t k rŒ | |  _ | |  _ d  S| d k r¤ | d k sÅ t | ƒ d k rÛ | j d ƒ rÛ d |  _ d |  _ d  S| d k ró | d k st | ƒ d k r*| j d ƒ r*d |  _ d |  _ d  Sd  |  _ d  |  _ d  S(   Ni    t   NH3t   Nt   CH4t   C(   t   stript   uppert(   ad_hoc_single_atom_residue_element_typest   scattering_typet   energy_typet   lent
   startswitht   None(   t   selft   residue_namet	   atom_namet   atom_element(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   __init__%   s4    				!		!			(   t   __name__t
   __module__R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR   #   s   s·     dihedral_function_type = *determined_by_sign_of_periodicity                             all_sinusoidal                             all_harmonic
    .type=choice
    .optional=False
s5    clash_guard
    .short_caption = Clash guard
    .style = noauto box auto_align
    .expert_level=2
  {
    nonbonded_distance_threshold = 0.5
      .type = float
    max_number_of_distances_below_threshold = 100
      .type = int
    max_fraction_of_distances_below_threshold = 0.1
      .type = float
  }
só     conformation_dependent_restraints_ideal = True
    .type = bool
  conformation_dependent_restraints_esd = True
    .type = bool
  conformation_dependent_restraints_default = True
    .type = bool
  cdl_interpolation = False
    .type = bool
s7    altloc_weighting
    .expert_level = 2
    .style = box noauto auto_align
  {
    weight = False
      .type = bool
    bonds = True
      .type = bool
    angles = True
      .type = bool
    factor = 1.
      .type = float
    sqrt = False
      .type = bool
    min_occupancy = 0.5
      .type = float
  }
s¦(    rdl = False
    .type = bool
  rotamer_data_version = *500 8000
    .type = choice
  cdl = False
    .type = bool
    .short_caption = Use Conformation-Dependent Library
    .help = Use Conformation Dependent Library (CDL)       for geometry minimization restraints
    .style = bold
  cdl_weight = 1.
    .type = float
  correct_hydrogens = True
    .type = bool
    .short_caption = Correct the hydrogen positions trapped in chirals etc
  automatic_linking
    .style = box auto_align
    .caption = Automatic covalent linking
  {
    link_all = False
      .type = bool
      .short_caption = Automatic ligand linking
      .help = If True, bond restraints will be generated for any appropriate         ligand-protein or ligand-nucleic acid covalent bonds. This includes         sugars, amino acid modifications, and other prosthetic groups.
      .style = bold renderer:draw_automatic_linking_control
    link_metals = False
      .type = bool
    metal_coordination_cutoff = 3.5
      .type = float
      .short_caption = Maximum distance for automatic linking of metals
    amino_acid_bond_cutoff = 1.9
      .type = float
      .short_caption = Distance cutoff for automatic linking of aminoacids
    link_residues = False
      .type = bool
    inter_residue_bond_cutoff = 2.2
      .type = float
      .short_caption = Distance cutoff for automatic linking of other residues
    buffer_for_second_row_elements = 0.5
      .type = float
      .short_caption = Distance to add to intra_residue_bond_cutoff if one         or more element is in the second (or more) row
    link_carbohydrates = False
      .type = bool
    carbohydrate_bond_cutoff = 1.99
      .type = float
  }
  use_neutron_distances = False
    .type = bool
    .short_caption = Use the nuclear distances for X-H/D
    .help = Use neutron X-H distances (which are longer than X-ray ones)
  resolution_dependent_restraints
    .short_caption = Load restraints based on resolution range
  {
    load = False
      .type = bool
      .short_caption = Load restraints based on resolution range
    resolution = Auto
      .type = float
      .short_caption = Resoltion to use where determining resolution range
    resolution_range = high *med low
      .type = choice
    high_resolution_range_limit = 1.5
      .type = float
      .short_caption = Resolutions better than limit load "high" resolution                        restraints
    low_resolution_range_limit = 3.0
      .type = float
      .short_caption = Resolutions worse than limit load "low" resolution                        restraints
  }
  apply_cif_modification
    .optional = True
    .multiple = True
    .short_caption = Modify CIF
    .style = noauto auto_align
  {
    data_mod = None
      .type = str
    residue_selection = None
      .type = atom_selection
  }
  apply_cif_link
    .optional = True
    .multiple = True
    .short_caption = Add link to CIF
    .style = noauto auto_align
  {
    data_link = None
      .type = str
    residue_selection_1 = None
      .type = atom_selection
    residue_selection_2 = None
      .type = atom_selection
  }
  disulfide_bond_exclusions_selection_string = None
    .type = str
  exclusion_distance_cutoff = 3
    .type = float
    .help = If SG of CYS forming SS bond is closer than this distance to an             atom that it may coordinate then this SG is excluded from SS bond.
  link_distance_cutoff = 3
    .type=float
    .optional=False
  disulfide_distance_cutoff = 3
    .type=float
    .optional=False
  add_angle_and_dihedral_restraints_for_disulfides = True
    .type = bool
    .optional = False
  peptide_nucleotide_distance_cutoff = 3
    .type=float
    .optional=False
  %(dihedral_function_type_params_str)s
  chir_volume_esd = 0.2
    .type=float
    .optional=False
    .short_caption = Chiral volume E.S.D.
  peptide_link
    .short_caption = Peptide link settings
    .style = box auto_align noauto
  {
    ramachandran_restraints = False
      .type = bool
      .help = Restrains peptide backbone to fall within allowed regions of         Ramachandran plot.  Although it does not eliminate outliers, it can         significantly improve the percent favored and percent outliers at         low resolution.  Probably not useful (and maybe even harmful) at         resolutions much higher than 3.5A.
      .expert_level = 2
      .short_caption = Ramachandran restraints (not recommended)
    cis_threshold = 45
      .type = float
      .optional = False
      .short_caption = Threshold (degrees) for cis-peptides
    discard_omega = False
      .type = bool
    discard_psi_phi = True
      .type = bool
      .optional = False
      .short_caption = Ignore monomer library Phi/Psi restraints
    omega_esd_override_value = None
      .type = float
      .short_caption = Omega-ESD override value
    include scope mmtbx.geometry_restraints.ramachandran.master_phil
  }
  nucleic_acid_restraints
    .short_caption = Nucleic Acid restraints settings
  {
    enabled = False
      .type = bool
      .short_caption = Enable set of nucleic acid (DNA/RNA) restraints
      .help = If true special set of restraints for DNA/RNA nucleobases will         be generated. This includes hydrogen bonds for basepairing         interactions, planarity for basepairs and parallelity restraints for         simulate stacking interactions.
    bonds {
      enabled = True
        .type = bool
        .short_caption = Enable hydrogen bonds between basepairing nucleobases
      bond_distance_cutoff = 3.4
        .type = float
        .short_caption = Distance cutoff for hydrogen bonds
      target_value = 2.89
        .type = float
      sigma = 0.08
        .type = float
      slack = 0.00
        .type = float
      angle_between_bond_and_nucleobase_cutoff = 35.0
        .type = float
        .short_caption = Angle between bond and nucleobase cutoff for           hydrogen bonds
        .help = If angle between supposed hydrogen bond and           basepair plane (defined by C4, C5, C6 atoms) is less than this           value (in degrees), the bond will not be established.
      }
    basepair_planarity {
      enabled = True
        .type = bool
        .short_caption = Enable planarity restraints for basepairing           nucleobases
      sigma = 0.176
        .type = float
    }
    stacking {
      enabled = True
        .type = bool
        .short_caption = Enable parallelity restraints for stacking nucleobases
      find_automatically = True
        .type = bool
      sigma = 0.027
        .type = float
      skip_additional_distance_checking = False
        .type = bool
        .short_caption = Additional distance check
        .help = Measure distances between 'C2', 'C4', 'C5', 'C6', 'C1*' atoms           of both nucleobases (if exist).           result = max(distances)-min(distances) < 2.5 and max(distances) < 8           Probably this function will be deleted soon.
    }
    base_pair
      .multiple = True
      .optional = True
      .help = Here user should define by phenix selections at least one         atom in each residue. One of the convinient ways to do so is to         use "resid 15" to define 15th residue.
    {
      base1 = None
        .type = str
      base2 = None
        .type = str
    }
    stacking_pair
      .multiple = True
      .optional = True
      .help = Here user should define by phenix selections at least one         atom in each residue. One of the convinient ways to do so is to         use "resid 15" to define 15th residue.
    {
      base1 = None
        .type = str
      base2 = None
        .type = str
    }
  }
  max_reasonable_bond_distance = 50.0
    .type=float
  nonbonded_distance_cutoff = None
    .type=float
  default_vdw_distance = 1
    .type=float
    .optional=False
    .short_caption = Default VDW distance
  min_vdw_distance = 1
    .type=float
    .optional=False
    .short_caption = Minimum VDW distance
  nonbonded_buffer = 1
    .type=float
    .optional=False
    .help = **EXPERIMENTAL, developers only**
    .expert_level = 3
  nonbonded_weight = None
    .type = float
    .short_caption = Nonbonded weight
    .help = Weighting of nonbonded restraints term.  By default, this will be       set to 16 if explicit hydrogens are used (this was the defaault in       earlier versions of Phenix), or 100 if hydrogens are missing.
  nonbonded_clashscore = False
    .type = bool
    .short_caption = Display the clashscore determined from nonbonded       interactions
  const_shrink_donor_acceptor = 0.6
    .type=float
    .optional=False
    .expert_level=3
    .help = **EXPERIMENTAL, developers only**
  vdw_1_4_factor = 0.8
    .type=float
    .optional=False
    .short_caption = Scale factor for 1-4 VDW interactions
  min_distance_sym_equiv = 0.5
    .type=float
    .short_caption = Min. symmetry-equivalent distance
  custom_nonbonded_symmetry_exclusions = None
    .optional = True
    .type = atom_selection
    .multiple = True
  translate_cns_dna_rna_residue_names = None
    .type=bool
    .optional=False
    .short_caption = Translate CNS DNA/RNA names
  proceed_with_excessive_length_bonds = False
    .type=bool
  rna_sugar_pucker_analysis
    .short_caption = RNA sugar pucker analysis
    .style = box noauto auto_align menu_item parent_submenu:advanced
  {
    include scope mmtbx.monomer_library.rna_sugar_pucker_analysis.master_phil
  }
  show_histogram_slots
    .style = box auto_align noauto
    .expert_level = 2
  {
    bond_lengths = 5
      .type=int
    nonbonded_interaction_distances = 5
      .type=int
    bond_angle_deviations_from_ideal = 5
      .type=int
    dihedral_angle_deviations_from_ideal = 5
      .type=int
    chiral_volume_deviations_from_ideal = 5
      .type=int
  }
  show_max_items
    .expert_level = 2
    .style = box auto_align noauto
  {
    not_linked = 5
      .type=int
    bond_restraints_sorted_by_residual = 5
      .type=int
    nonbonded_interactions_sorted_by_model_distance = 5
      .type=int
    bond_angle_restraints_sorted_by_residual = 5
      .type=int
    dihedral_angle_restraints_sorted_by_residual = 3
      .type=int
    chirality_restraints_sorted_by_residual = 3
      .type=int
    planarity_restraints_sorted_by_residual = 3
      .type=int
    residues_with_excluded_nonbonded_symmetry_interactions = 12
      .type=int
    fatal_problem_max_lines = 10
      .type=int
  }
  %(clash_guard_params_str)s
t   input_stringt   process_includess¬  excessive_bond_distance_limit = 10
  .type = float
bond
  .optional = True
  .multiple = True
  .short_caption = Bond
  .style = auto_align
{
  action = *add delete change
    .type = choice
  atom_selection_1 = None
    .type = atom_selection
    .input_size = 400
  atom_selection_2 = None
    .type = atom_selection
    .input_size = 400
  symmetry_operation = None
    .help = "The bond is between atom_1 and symmetry_operation * atom_2,"
            " with atom_1 and atom_2 given in fractional coordinates."
            " Example: symmetry_operation = -x-1,-y,z"
    .type = str
  distance_ideal = None
    .type = float
  sigma = None
    .type = float
  slack = None
    .type = float
}
angle
  .optional = True
  .multiple = True
  .short_caption = Angle
  .style = auto_align
{
  action = *add delete change
    .type = choice
  atom_selection_1 = None
    .type = atom_selection
    .input_size = 400
  atom_selection_2 = None
    .type = atom_selection
    .input_size = 400
  atom_selection_3 = None
    .type = atom_selection
    .input_size = 400
  angle_ideal = None
    .type = float
  sigma = None
    .type = float
}
planarity
  .optional = True
  .multiple = True
  .short_caption = Planarity
  .style = auto_align
{
  action = *add delete change
    .type = choice
  atom_selection = None
    .type = atom_selection
    .multiple = True
    .input_size = 400
  sigma = None
    .type = float
}
parallelity
  .optional = True
  .multiple = True
  .short_caption = Parallelity
  .style = auto_align
{
  action = *add delete change
    .type = choice
  atom_selection_1 = None
    .type = atom_selection
    .multiple = True
    .input_size = 400
  atom_selection_2 = None
    .type = atom_selection
    .multiple = True
    .input_size = 400
  sigma = 0.027
    .type = float
  target_angle_deg = 0
    .type = float
}
scale_restraints
  .multiple = True
  .optional = True
  .help = Apply a scale factor to restraints for specific atom selections,     to tighten geometry without changing the overall scale of the geometry     target.
{
  atom_selection = None
    .type = atom_selection
  scale = 1.0
    .type = float
  apply_to = *bond *angle *dihedral *chirality
    .type = choice(multi=True)
}
c         C   sH  x¶ t  |  j ƒ D]¥ \ } } d  | j | j g k rK t d d | ƒ ‚ q | j d  k r€ t d d | | j | j f ƒ ‚ q | j d  k r t d d | | j | j f ƒ ‚ q q WxÈ t  |  j ƒ D]· \ } } d  | j | j | j	 g k r
t d d | ƒ ‚ qÉ | j
 d  k rEt d d	 | | j | j | j	 f ƒ ‚ qÉ | j d  k rÉ t d
 d	 | | j | j | j	 f ƒ ‚ qÉ qÉ Wxn t  |  j ƒ D]] \ } } | j d  k rÂt d | ƒ ‚ q”| j d  k r”t d d | | j f ƒ ‚ q”q”WxL t  |  j ƒ D]; \ } } d  | j | j g k rt d d | ƒ ‚ qqWt S(   Ns:   A custom bond definition (#%d in the list) is incomplete; s!   two atom selections are required.s7   The ideal distance for custom bond #%d is not defined. s   (Atom selections: %s, %s)s.   The sigma for custom bond #%d is not defined. s/   A custom angle definition (#%d in the list) is s-   incomplete; two atom selections are required.s5   The ideal angle for custom angle #%d is not defined. s   (Atom selections: %s, %s, %s)s/   The sigma for custom angle #%d is not defined. s7   The atom selection for custom plane #%d is not defined.s6   The sigma for custom plane #%d is not defined.  (Atom s   selection: '%s')s5   A custom parallelity definition (#%d in the list) is (   t	   enumeratet   bondR"   t   atom_selection_1t   atom_selection_2R   t   distance_idealt   sigmat   anglet   atom_selection_3t   angle_idealt	   planarityt   atom_selectiont   parallelityt   True(   t   paramst   kR-   R2   t   planeR7   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   validate_geometry_edits_params%  sH    s�  angles=None
  .optional=True
  .type=str
  .multiple=True
  .input_size=400
dihedrals=None
  .optional=True
  .type=str
  .multiple=True
  .input_size=400
chiralities=None
  .optional=True
  .type=str
  .multiple=True
  .input_size=400
planarities=None
  .optional=True
  .type=str
  .multiple=True
  .input_size=400
parallelities=None
  .optional=True
  .type=str
  .multiple=True
  .input_size=400
s^  pdb_interpretation
  .alias = refinement.pdb_interpretation
  .short_caption = Model interpretation
{
  %(master_params_str)s
}
geometry_restraints
  .alias = refinement.geometry_restraints
{
  edits
    .short_caption = Custom geometry restraints
  {
    %(geometry_restraints_edits_str)s
  }
  remove {
    %(geometry_restraints_remove_str)s
  }
}
c         C   s;   |  d  k	 r7 t |  d d  ƒ } | d  k	 r7 | ƒ  q7 n  d  S(   Nt   flush(   R"   t   getattr(   t   logR=   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt	   flush_log|  s     c         C   s.   x' |  D] } | j  ƒ  j d k r t Sq Wt S(   Nt    (   t   parentt   altloct   FalseR8   (   t   atomst   atom(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   all_atoms_are_in_main_conf�  s     i    c         C   s@   y |  j  d | ƒ SWn% t k
 r; } t t | ƒ ƒ ‚ n Xd  S(   Nt   suppress_segid(   t   id_strt
   ValueErrorR   t   str(   t   residueRH   t   e(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   residue_id_str†  s    t   countersc           B   s   e  Z d  „  Z RS(   c         C   sL   | |  _  d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d  S(   Ni    (   t   labelt#   corrupt_monomer_library_definitionst#   already_assigned_to_first_conformert   unresolved_non_hydrogent   unresolved_hydrogent	   undefinedt   resolvedt&   discarded_because_of_special_positions(   R#   RP   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   Ž  s    							(   R(   R)   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRO   Œ  s   c         C   s5   |  d  k r t Sx | D] } | |  k r t Sq Wt S(   N(   R"   RD   R8   (   t   special_position_indicest   i_seqst   i_seq(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   involves_special_positions˜  s     c         C   sƒ   |  d  k r t St | ƒ } x` t t | ƒ d ƒ D]H } x? t | d t | ƒ ƒ D]$ } | | | | f |  k rS t SqS Wq3 Wt S(   Ni   (   R"   RD   t   sortedt   xrangeR    R8   (   t   broken_bond_i_seq_pairsRY   t   it   j(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   involves_broken_bondsŸ  s      t   source_info_serverc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         C   s   | | |  _  |  _ d  S(   N(   t   m_it   m_j(   R#   Rc   Rd   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   ª  s    c         C   s@   |  j  d  k r  d |  j j ƒ  Sd |  j j ƒ  |  j  j ƒ  f S(   Ns   residue: %ss   residues: %s + %s(   Rd   R"   Rc   t   residue_altloc(   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   labels­  s
    c         C   s?   |  j  d  k r t |  j j ƒ St |  j j ƒ t |  j  j ƒ S(   N(   Rd   R"   R    Rc   t   expected_atoms(   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   n_expected_atoms´  s    (   R(   R)   R'   Rf   Rh   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRb   ¨  s   		RA   c         C   s“   | d  k r t j } n  xt t | ƒ D]f \ } } | | k rs t | ƒ | d k rs | | d t | ƒ | IJPn  | | |  | j ƒ  IJq% Wd  S(   Ni   s   ... (remaining %d not shown)(   R"   t   syst   stdoutR,   R    t   quote(   t	   pdb_atomsRY   t   outt   prefixt	   max_linest   i_lineRZ   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   _show_atom_labelsº  s     "
c         C   sò   t  ƒ  } | | IJx | D] } | d I| IJq W| d  k	 rx x5 t | ƒ D]$ \ }	 }
 | d |	 d |
 f IJqM Wn  | rž | d t |  | ƒ j ƒ  IJn  | d t t | ƒ ƒ d IJt d |  j d | d | d	 d
 d d ƒ | j	 ƒ  d  S(   Nt    s     %d. definition from: %si   s     s	     atom%s:Rl   RY   Rm   Rn   s       Ro   i
   iÿÿÿÿ(
   R   R"   R,   Rb   Rf   R   R    Rq   Rl   t   getvalue(   Rc   Rd   RY   t   base_messaget   source_labelst   show_residue_namest   linest   st   lineR_   RP   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   format_exception_messageÃ  s    	
 "c         C   s†   d d d d d d d d d	 d
 d d d d d d d d d d d g } |  j  | k rX t S|  j  d d k r‚ |  j  d  | k r‚ t St S(   Nt   GLYt   VALt   ALAt   LEUt   ILEt   PROt   METt   PHEt   TRPt   SERt   THRt   TYRt   CYSt   ASNt   GLNt   ASPt   GLUt   LYSt   ARGt   HISt   MSEi   s   %COO(   R$   R8   RD   (   t   mmt   trusted_library_definitions(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt&   discard_conflicting_pdb_element_columnÙ  s    	 t   type_symbol_registry_basec           B   s_   e  Z d  „  Z d „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z d d	 „ Z	 d
 „  Z
 RS(   c         C   sˆ   | d k s t  ‚ | |  _ | |  _ | |  _ d |  _ t j | j ƒ  ƒ |  _ t j	 | j ƒ  d ƒ |  _
 t j	 | j ƒ  d ƒ |  _ d  S(   Nt
   scatterings   nonbonded energyi    iÿÿÿÿ(   R”   s   nonbonded energy(   t   AssertionErrort
   type_labelt   symbolst   strict_conflict_handlingt   n_resolved_conflictsR
   t
   std_stringt   sizeRu   t   intt   source_n_expected_atomst   charges(   R#   R–   R—   R˜   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   æ  s    				c         C   s   d  |  _ d  |  _ d  S(   N(   R"   Ru   R�   (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   discard_tablesð  s    	c         C   s   | |  j  | <d  S(   N(   R—   (   R#   RZ   t   symbol(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   assign_directlyô  s    i    c         C   s   | |  j  | <d  S(   N(   Rž   (   R#   RZ   t   charge(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   assign_charge÷  s    c         C   sà  | j  } xÐ| j j ƒ  D]¿\ } } | j } |  j d k ru | | j } | d k r‚ |  j | d k r‚ d } q‚ n | | j } | d  k r” q n  | j	 ƒ  } t
 | j ƒ }	 |  j | }
 |  j | } |  j | } t } t } |
 d k s	|  j d k r|
 d k rt } nÀ |
 j ƒ  | j ƒ  k rÒ|  j r<t } qÒ|  j d k r‡| |	 k r`t } qÏ|  j d 7_ | |	 k  rÏt } qÏqÒ|  j d k rÒ| d k rÆt | ƒ rÆ|  j d 7_ t } qÏt } qÒn  | oÛ| såt ‚ | r!| |  j | <| |  j | <|	 |  j | <|  j d k rØ| j d	 t ƒ } | d  k	 r¶t
 | ƒ d
 k r¶d
 } d | k rt | j d d ƒ ƒ } n' d | k r¦t | j d d ƒ ƒ } n  | |  j | <qt
 | j ƒ d k r| j j ƒ  | j j ƒ  k r| j j ƒ  | | j j ƒ  k rd |  j | <qqØq | r d | } | d k r[|  j d k sRt ‚ d } n# | | k rtd | } n  d | } t t d | d d  d | g d d |  j d t d d |
 | f d | | f g ƒ ƒ ‚ q q Wd  S(   NR”   t   Ht   DRA   t   Qt   Xs   nonbonded energyi   R   i    t   -t   +ic   s   with residue name %ss   from pdb element columns   also Rc   Rd   RY   Rt   s   Conflicting %s type symbols:Rv   Rw   s   initial symbol: "%s" (%s)s       new symbol: "%s" (%s)(   R¦   R§   (   t   monomer_atom_dictRg   t   itemsRZ   R–   t   type_symbolR—   t   type_energyR"   Re   R    Ru   R�   RD   R8   R   R˜   R™   R’   R•   t   charge_tidyRœ   t   replaceRž   R$   R   t   nameR   Rz   (   R#   t   conf_altlocR�   t	   atom_dictt   atom_idRF   RZ   R    t   source_labelR�   t   prev_symbolt   prev_source_labelt   prev_source_n_expected_atomst   assignt   raise_conflictt
   charge_strR¢   t   sourcet   prev_source(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   assign_from_monomer_mappingú  sŠ    		 					"
	
		c         C   s   |  j  j d ƒ S(   NRA   (   R—   t   count(   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   n_unknown_type_symbolsF  s    c         C   s   d |  j  S(   Ns,   Number of atoms with unknown %s type symbols(   R–   (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   report_unknown_messageI  s    i
   c         C   s©   |  j  ƒ  } | d k rv | d | |  j ƒ  | f IJ|  j d k j ƒ  } t d | d | d | d | d d	 | ƒ n  |  j d k r¥ | d
 | |  j |  j f IJn  d  S(   Ni    s   %s%s: %dRA   Rl   RY   Rm   Rn   s     Ro   s1   %sNumber of resolved %s type symbol conflicts: %d(   R¿   RÀ   R—   t
   iselectionRq   R™   R–   (   R#   Rl   R?   Rn   Ro   t	   n_unknownRY   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   reportL  s    c         C   s>   |  j  ƒ  } | d k r: |  j d k j ƒ  } | j | ƒ Sd  S(   Ni    RA   (   R¿   R—   RÁ   t   select(   R#   Rl   RÂ   RY   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   get_unknown_atomsY  s    (   R(   R)   R'   RŸ   R¡   R£   R½   R¿   RÀ   RÃ   RÅ   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR“   ä  s   	
			L		t   scattering_type_registryc           B   s   e  Z d  „  Z RS(   c         C   s#   t  j |  d d d | d | ƒd  S(   NR–   R”   R—   R˜   (   R“   R'   (   R#   t   scattering_typesR˜   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   a  s    (   R(   R)   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÆ   _  s   t   nonbonded_energy_type_registryc           B   s   e  Z d  „  Z RS(   c         C   s,   t  j |  d d d t j | ƒ d | ƒd  S(   NR–   s   nonbonded energyR—   R˜   (   R“   R'   R
   Rš   (   R#   t   n_seqR˜   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   i  s    (   R(   R)   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÈ   g  s   t   monomer_mapping_summaryc        
   B   sG   e  Z d  d d d d d d d d d	 g
 Z d
 „  Z d „  Z d „  Z RS(   R±   R$   Rg   t   unexpected_atomst   duplicate_atomst   ignored_atomst   classificationt   incomplete_infot   is_terminust
   is_unusualc         K   s4   x- t  j D]" } t |  | | j | d  ƒ ƒ q
 Wd  S(   N(   RÊ   t	   __slots__t   setattrt   getR"   (   R#   t   keyword_argst   key(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   }  s    c         C   s}   t  j g  |  j D] } | j ^ q g  |  j D] } | j ^ q, g  |  j D] } | j ^ qI g  |  j D] } | j ^ qf ƒ S(   N(   R
   t   size_tRg   RZ   RË   RÌ   RÍ   (   R#   t   a(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   all_associated_i_seqs�  s    c         C   s   |  S(   N(    (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   summaryˆ  s    (   R(   R)   RÒ   R'   RÙ   RÚ   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÊ   o  s   			t   monomer_mappingc        #   B   sC  e  Z 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# Z d9 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 d0 „  Z d1 „  Z d2 „  Z e d3 „ Z d4 „  Z d5 „  Z d6 „  Z d7 „  Z d8 „  Z RS(:   t   active_atomst   angle_counterst   atom_name_interpretationt   atom_names_givent   bond_counterst   chem_mod_idst   chirality_countersRÎ   R±   t   dihedral_countersRÌ   Rg   t   i_conformerRÍ   RÏ   t   is_first_conformer_in_chaint   is_rna2pt
   is_rna_dnaRÐ   RÑ   t   lib_linkt   missing_hydrogen_atomst   missing_non_hydrogen_atomst   mon_lib_namest   mon_lib_srvt   monomerRª   Rl   t   pdb_residuet   pdb_residue_id_strt   planarity_counterst   parallelity_countersR$   RË   t   chainidc      	   C   sÉ  | |  _  | |  _ | |  _ | |  _ |	 |  _ |
 |  _ | |  _ t | d d ƒ|  _ | j	 |  _
 |  j ƒ  } |  j j d |  j
 d |  j d | d | ƒ \ |  _ |  _ |  j d  k rÀ d  |  _ n |  j j ƒ  |  _ |  j d  k rDi  |  _ i  |  _ i  |  _ x0 t |  j |  j ƒ D] \ } } | |  j | <qWd  |  _ d  |  _ nLt ƒ  |  _ |  j d | d | ƒ |  j ƒ  xE | D]= } x4 | j | g  ƒ D]  } |  j d	 |  j j | ƒ q�WqwW|  j  ƒ  d  |  _ |  j j! ƒ  |  j d  k	 rtt" |  j d
 d  ƒ } | d  k	 rt|  j j } |  j d	 | d ƒ | d k rK|  j d	 | d ƒ qq| d k rq|  j d	 | d ƒ qqqtn  |  j d  k r�|  j# ƒ  n  |  j | k rÅ| |  j j$ |  j g  ƒ j% |  ƒ n  d  S(   NRH   iÿÿÿÿR$   t
   atom_namest#   translate_cns_dna_rna_residue_namest   resolution_rangeR9   t   next_pdb_residuet
   mod_mod_idt   d_aa_residue_names   PEPT-Dt   DILt   DIL_chir_02_botht   DTHt   DTH_chir_02_both(&   Rò   Rl   Rì   Rä   Rå   R±   Rî   RN   Rï   t   resnameR$   t   _collect_atom_namest-   get_comp_comp_id_and_atom_name_interpretationRß   Rí   RÞ   R"   Rë   Rg   RË   RÌ   t   zipRÜ   RÏ   RÐ   t   setRá   t   _rna_sugar_pucker_analysist   _get_mappingsRÔ   t	   apply_modt   mod_mod_id_dictt   _set_incomplete_infot   set_classificationR>   t   resolve_unexpectedt
   setdefaultt   append(   R#   Rl   Rì   Rô   t    rna_sugar_pucker_analysis_paramst   apply_cif_modificationst   apply_cif_links_mm_pdbres_dictt   i_modelRä   Rå   R±   Rî   Rö   Rò   Rõ   t   atom_id_str_pdbres_listRF   R%   RI   t   apply_data_modt   d_aa_rnt   mmid(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   ³  sj    												"		
	
	c         C   s;   | d k r$ | r$ d s! t  ‚ q$ n  t j |  | | ƒ d  S(   NRè   i    (   R•   R   t   __setattr__(   R#   t   attrt   value(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   __setattr1__þ  s     c         C   sÇ   i  |  _  g  |  _ g  |  _ t ƒ  } x– |  j j ƒ  D]… } | j | j d t ƒ ƒ | j	 j
 ƒ  d k rŠ |  j  j | j g  ƒ j | ƒ q4 |  j j | ƒ |  j j | j j d d ƒ ƒ q4 Wt | ƒ S(   Nt   pdbresR¦   Rr   RA   (   RÍ   RÜ   Rß   R  Rî   RE   t   addRI   R8   t   elementR   R	  R°   R
  R¯   R\   (   R#   t   atom_id_str_pdbres_setRF   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRþ     s    				"#c      	   C   sª  t  |  _ d  |  _ |  j j ƒ  r% d  Sd d l m } |  j j	 } | d |  j j
 ƒ  d | j ƒ } | j d  k	 ru d  St |  _ | j s‹ d  Sd  } | d  k	 r² | j d d ƒ } n  t j d | d | j d	 | j d
 | ƒ } | j |  _ t j j j d | ƒ } |  j r<| d k rd }	 ql| d k r3d }	 qld }	 n0 | d k rQd }	 n | d k rfd }	 n d }	 |  j j d |  j d |	 f ƒ \ |  _ }
 |  j d |
 ƒ d  S(   Niÿÿÿÿ(   t   residue_analysist   residue_atomst   distance_toleranceR°   s    P  R9   t   residue_1_deoxy_ribo_atom_dictt   residue_1_c1p_outbound_atomt   residue_2_p_atomRý   s     As     Gt	   rna2p_purs     Cs     Ut	   rna2p_pyrt   rna2pt	   rna3p_purt	   rna3p_pyrt   rna3pt   comp_comp_idt   mod_idsRá   (   s     As     G(   s     Cs     U(   s     As     G(   s     Cs     U(   RD   Rç   R"   Ræ   Rí   t
   is_peptidet   iotbx.pdb.rna_dna_detectionR  Rî   Rý   RE   t!   bond_detection_distance_tolerancet   problemsR8   t   is_rnat   find_atom_byR   t   evaluatet   deoxy_ribo_atom_dictt   c1p_outbound_atomt   is_2pt   mmtbxt   torsion_restraintst   utilst   modernize_rna_resnameRì   t   get_comp_comp_id_modt   _track_mods(   R#   R9   Rö   R  Rý   t   ra1R   t   anat   mod_resnamet   primary_mod_idRá   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR    sP    		  		 												c         C   s:  |  j  j ƒ  |  _ } d  } i  } i  |  _ i  |  _ i  |  _ |  j d  k	 rU t } n� |  j	 sm |  j  j	 ƒ  rv t
 } n| d } d } xU |  j D]J } | j d ƒ d k r´ | d 7} n  | j d ƒ d k rŒ | d 7} qŒ qŒ W| d k oï | d k } d j g  | j ƒ  D] } | ^ qƒ } | j ƒ  | k p;| j ƒ  | k }	 d  }
 x§t |  j ƒ D]–\ } } |  j | } |	 r‚| j ƒ  } n  |  j d  k rš| } n" |  j | } | d  k r¼| } n  t | ƒ d k r¶| j | ƒ r¶g  } | d t j k r| j | d | d ƒ n2 | d t j k rE| j | d | d d !ƒ n  | rÝ| j d d ƒ } | | k rÝ| j | ƒ | d t j k r¥| j | d | d ƒ qÚ| d t j k rÚ| j | d | d d !ƒ qÚqÝn  xÖ | D] } | j | ƒ räPqäqäW| j d | ƒ | d  k r/|  j  j ƒ  } n  x„ | D]% } | j | ƒ } | d  k	 r6Pq6q6WxT | D]C } |  j j j |  j  j j  i  ƒ j | d  ƒ } | d  k	 rfPqfqfW| } n  t | ƒ d k rz| j | ƒ rz|  j	 sí|  j  j! rzt" j# } |
 d  k rDi  }
 x9 | D]. } | j | ƒ } | d  k	 r| |
 | <qqWn  | j | ƒ } |
 j | ƒ } | d  k	 rz| } qzn  | j | ƒ } | d  k rÎ| | | <| j | ƒ r¾| |  j | <qê| |  j | <qT|  j j$ | g  ƒ j | ƒ qTW|  j  j% ƒ  r,|  j d  k r,|  j& d | k ƒ |  j' ƒ  n  |  j( ƒ  d  S(   Ni    t   'i   t   *RA   iÿÿÿÿt   OXT()   Rí   R²   Rª   R"   Rg   RË   RÌ   RÞ   RD   Rç   R8   Rß   t   findt   joint   keysR   t   lowerR,   RÜ   Rë   R    t   has_keyt   stringt   digitsR
  R¯   t   insertt   hydrogen_deuterium_aliasesRÔ   Rì   t   comp_synonym_atom_list_dictt	   chem_compt   idt   normalized_rna_dnaR   t#   rna_dna_atom_names_backbone_aliasesR	  R)  t   _rename_ot1_ot2t   _auto_alias_h_h1t   _set_missing_atoms(   R#   R²   t   deuterium_aliasest   processed_atom_namest   replace_primest   n_primest   n_starsR%   t   _t   handle_case_insensitivet   rna_dna_bb_cif_by_reft   i_atomRF   t   atom_name_givent   auto_synomymst   aliasest   cif_namet   ref_namet	   prev_atom(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR  ;  s¬    					  ($		"%  ! 		
 c         C   s¹   |  j  j d ƒ sP |  j j d d  ƒ } | d  k	 rP | |  j  d <|  j d =qP n  | rb |  j  } n	 |  j } | j d ƒ sµ |  j j d d  ƒ } | d  k	 rµ | | d <|  j d =qµ n  d  S(   Nt   Ot   OT1R?  t   OT2(   Rg   RD  RË   RÔ   R"   (   R#   t   oxt_in_atom_dictRZ   t   oxt_dict(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRN  •  s    	
c         C   sÈ   |  j  j d ƒ d  k r d  S|  j } | j d ƒ sC | j d ƒ rG d  S|  j } | j d ƒ } | j d ƒ } d } | d  k r� d } | } n | d  k	 r¤ d  } n  | d  k	 rÄ | | d <| | =n  d  S(   Nt   H1t   D1R¤   R¥   (   Rª   RÔ   R"   Rg   RD  RË   (   R#   RM   t   ut   ht   dRÖ   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRO  ¥  s"    				
c         C   sw   i  |  _  i  |  _ x^ |  j j D]P } |  j j | j ƒ s | j d k r\ | |  j  | j <qo | |  j | j <q q Wd  S(   NR¤   (   Rê   Ré   Rí   t	   atom_listRg   RD  R³   R¬   (   R#   RF   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRP  ¸  s    		c         C   sî   t  |  j ƒ d k rê t  |  j ƒ d k rê |  j j ƒ  r¤ |  j j ƒ  } | j ƒ  d j | ƒ } | d k rq d S| d k r� d S| d k r‘ d S| d	 k rç d
 Sqê |  j	 s¼ |  j j	 ƒ  rê d j |  j j ƒ  ƒ } | d k rç d Sqê n  d  S(   Ni    Rr   t   CAt   c_alpha_onlys   C CA Nt   n_c_alpha_c_onlys   C CA N Ot   backbone_onlys   C CA CB N Ot   truncation_to_alaninet   Pt   p_only(   R    RË   Rê   Rí   R)  Rg   RB  t   sortRA  Rç   R"   (   R#   t   atom_ids(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   _get_incomplete_infoÂ  s&    
     
c         C   s   |  j  ƒ  |  _ d  S(   N(   Rt  RÏ   (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR  Ò  s    c         C   s4  |  j  j } g  } |  j } |  j } |  j j d k r| d  k	 r» i  } xg t | j |  j	 ƒ D]P \ } } | j
 | ƒ } | d  k r‹ q^ n  | d  k r¤ | | | <q^ | | | <q^ W| } n  d | k rÛ | j | d ƒ n  d | k rû | j | d ƒ n  |  j j j d k r3d | k rk| j | d ƒ qkn8 |  j j j d	 k rkd
 | k rk| j | d ƒ qkn  d „  }	 | d  k	 rzg  }
 x0 | j ƒ  D]" } | d. k r“|
 j | ƒ q“q“Wd  } t |
 ƒ d k r |  j j
 d ƒ d  k	 rî| j | d ƒ qînî t |
 ƒ d k r{|  j j j d k r4| d } n+ | j
 d ƒ } | d  k r_|	 d d ƒ n  | j | ƒ d d g } ns t |
 ƒ d k rî|  j j j d k r¯| d } n& | d } | d  k rÕ|	 d d ƒ n  | j | ƒ d g } n  | d  k	 rd } xY t |  j	 ƒ D]H \ } } | | k r.qn  | d/ k r| | |  j	 | <| d 7} qqW| t | ƒ k swt ‚ qqd | k s’d | k rñd | k sªd | k rñd | k sÂd  | k rñ|  j j
 d ƒ d  k	 r| j | d ƒ qqd | k s	d! | k r5d | k s!d" | k r5| j | d ƒ qd | k rU| j | d ƒ qd | k s�d | k s�d | k s�d | k s�d | k s�d  | k rÌ|  j j
 d ƒ d  k	 r| j | d ƒ qqd | k süd! | k süd | k süd" | k r| j | d ƒ qnü |  j j d0 k r| d  k	 r‹| j rN| j | d% ƒ n | j sk| j | d& ƒ n  | j r| j | d' ƒ qqd( | k r«| j | d% ƒ nA |  j } d) | k rìd* | k rìd+ | k rì| j | d& ƒ n  d, | k r| j | d' ƒ qn  x | D] } |  j d- | ƒ qWd  S(1   Nt   peptidet   HXTt   COOHR?  t   COOR‹   t   HE2s   ACID-GLURŠ   t   HD2s   ACID-ASPc         S   s   t  d |  |  | f ƒ ‚ d  S(   Nsù   A modified version of the monomer library is required to correctly
handle N-terminal hydrogens. The mod_%sNOTPRO modification is missing.
This is a copy of mod_%s, but without the %s-N-CD angle.
Please contact cctbx@cci.lbl.gov for more information.(   t   RuntimeError(   RK  Rh  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   raise_missing_notproð  s    Re  t   H2t   H3i   R¤   R   i   R€   t   NH2t	   NH2NOTPROt   HN2t   HN1i   t   NH1t	   NH1NOTPROt   HNi    t   1Ht   2Ht   3Ht   1HNt   2HNt   RNAt   DNAs   p5*ENDs   5*ENDs   3*ENDt   O3TRp  t   OP1t   OP2s   HO3*R÷   (   s   H1R}  R~  (   s   H1R}  R~  (   R‹  RŒ  (   Rì   R  RÞ   RË   Rí   RÎ   R"   R   Ró   Rë   RÔ   R
  RJ  RK  RB  R    Rª   R,   R•   t   have_op3_or_hop3t   have_phosphatet   have_ho3primeRg   R  (   R#   t   mod_dictt   mod_mod_idst   aniRg  t	   u_mon_libt
   given_namet   mon_lib_nameRZ   R|  t   nitrogen_hydrogensR°   t   nitrogen_hydrogen_translationR÷   R`   R_   RM   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR  Õ  sÄ    		 		
 				c         C   s8   x1 | D]) } |  j  j | ƒ |  j d | 7_ q Wd  S(   Nt   %(   Rá   R  R$   (   R#   Rá   t   chem_mod_id(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR8  C  s    c         C   s3  | j  j |  j k r d  Sy |  j j | ƒ } Wnƒ t k
 r´ } d d  l } | j ƒ  j ƒ  } | j	 d d t
 |  j ƒ d |  j j j d | j  j g ƒ t d j | ƒ ƒ ‚ n X|  j d | j  j g ƒ |  j j | _ | |  _ | j  j d  k	 r%| j  j j ƒ  j d ƒ d	 k r%t |  _ n  |  j ƒ  d  S(
   Niÿÿÿÿs   apply_mod failure:s     %ss     comp id: %ss     mod id: %ss   
Rá   t   terminusi    (   t   chem_modRK  Rá   Rí   R  t	   Exceptiont	   tracebackt
   format_exct
   splitlinest   extendRN   Rî   RJ  R   RA  R8  RÎ   R°   R"   RC  R@  R8   RÐ   R  (   R#   R÷   t   mod_monRM   R   t   msg(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR  H  s(    	!c         C   s0   |  j  } |  j d k r, | d |  j 7} n  | S(   NRA   s   , conformer "%s"(   R$   R±   (   R#   t   result(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRe   _  s    	c         C   sM   |  j  } | d  k r t S| j ƒ  r) t S| j ƒ  r9 t S| j ƒ  rI t St S(   N(   Rí   R"   R8   R)  RD   Rç   t   is_water(   R#   t   m(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÑ   e  s    	    c         C   s£   |  j  d  k r d  } n |  j  j } t d |  j d |  j d |  j j ƒ  d |  j j ƒ  d t	 |  j
 j ƒ  ƒ d |  j j ƒ  d | d |  j d	 |  j d
 |  j ƒ  ƒ 
S(   NR±   R$   Rg   RË   RÌ   RÍ   RÎ   RÏ   RÐ   RÑ   (   Rí   R"   RÎ   RÊ   R±   R$   Rg   t   valuesRË   R   RÌ   RÍ   RÏ   RÐ   RÑ   (   R#   RÎ   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÚ   m  s    					c         C   sF   t  d t d d ƒ d |  d |  d |  j j d | d | ƒ j |  _ d  S(	   NRO   RP   R-   Rc   Rd   t	   bond_listt   bond_simple_proxy_registryt   use_neutron_distances(   t   add_bond_proxiesRO   Rí   Rª  Rà   (   R#   R«  R¬  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR­  ~  s    c         C   sF   t  d t d d ƒ d |  d d  d |  j j d | d | ƒ j |  _ d  S(	   NRO   RP   R2   Rc   Rd   t
   angle_listt   angle_proxy_registryRX   (   t   add_angle_proxiesRO   R"   Rí   R®  RÝ   (   R#   RX   R¯  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR°  Š  s    c         C   sR   t  d t d d ƒ d |  d d  d |  j j d | d d  d	 | d
 | ƒ j |  _ d  S(   NRO   RP   t   dihedralRc   Rd   t   tor_listt   dihedral_function_typet   peptide_link_paramst   dihedral_proxy_registryRX   (   t   add_dihedral_proxiesRO   R"   Rí   R²  Rã   (   R#   R³  RX   Rµ  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR¶  “  s    c         C   sL   t  d t d d ƒ d |  d d  d |  j j d | d | d	 | ƒ j |  _ d  S(
   NRO   RP   t	   chiralityRc   Rd   t	   chir_listt   chirality_proxy_registryRX   t   chir_volume_esd(   t   add_chirality_proxiesRO   R"   Rí   R¸  Râ   (   R#   RX   R¹  Rº  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR»  ¡  s    c         C   sI   t  d t d d ƒ d |  d d  d |  j j ƒ  d | d | ƒ j |  _ d  S(	   NRO   RP   R5   Rc   Rd   t
   plane_listt   planarity_proxy_registryRX   (   t   add_planarity_proxiesRO   R"   Rí   t
   get_planesRð   (   R#   RX   R½  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR¾  ­  s    c         C   sI   t  d t d d ƒ d |  d |  d |  j j ƒ  d t d | ƒ j |  _ d  S(	   NRO   RP   R7   Rc   Rd   R¼  R½  RX   (   t   add_parallelity_proxiesRO   Rí   R¿  R½  Rñ   (   R#   RX   t   parallelity_proxy_registry(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÀ  ·  s    N(   R(   R)   RÒ   R"   R'   R  Rþ   R  R  RN  RO  RP  Rt  R  R  R8  R  Re   RÑ   RÚ   RD   R­  R°  R¶  R»  R¾  RÀ  (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÛ   ‹  sr   	=			*	Z			
			n					
					
t   link_match_onec           B   s   e  Z d  „  Z d „  Z RS(   c         C   sr  | t  j k r d } n | t  j k r0 d } n  | d k s` | d  k	 r“ | j ƒ  | j ƒ  k r“ t |  _ | d  k r� d |  _ q¥ t | ƒ |  _ n t	 |  _ d |  _ | d k sÕ | d  k	 r| j ƒ  | j ƒ  k rt |  _
 | d  k rö d |  _ qnt | ƒ |  _ nf | d k r\|  j rG|  j d k rGt |  _
 t | ƒ |  _ qnt	 |  _
 d |  _ n t	 |  _
 d |  _ d  S(	   NRu  s   DNA/RNARA   i    iÿÿÿÿ(   NRA   (   NRA   (   NRA   (   R   t   peptide_comp_groupst   dna_rna_comp_groupsR"   RC  R8   t   is_comp_id_matcht   len_comp_id_matchR    RD   t   is_group_matcht   len_group_match(   R#   t   chem_link_comp_idt   chem_link_group_compt   comp_idt
   comp_group(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   Ã  s8    									c         C   s   |  j  o |  j S(   N(   RÅ  RÇ  (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   is_matchè  s    (   R(   R)   R'   RÍ  (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÂ  Á  s   	%t
   link_matchc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c   	      C   s¥   d  |  _ | j } t | j | j | | ƒ } | j ƒ  s= d  St | j | j | | ƒ } | j ƒ  sh d  S| |  _ | j	 |  _
 | j |  _ | j	 |  _ | j |  _ d  S(   N(   R"   t   link_link_idt	   chem_linkRÂ  t	   comp_id_1t   group_comp_1RÍ  t	   comp_id_2t   group_comp_2RÆ  t   len_comp_id_match_1RÈ  t   len_group_match_1t   len_comp_id_match_2t   len_group_match_2(	   R#   RÏ  RÑ  t   comp_group_1RÓ  t   comp_group_2RÐ  t   match_1t   match_2(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   í  s"    		  	c         C   s:   |  j  d k p9 |  j d k p9 |  j d k p9 |  j d k S(   Ni    (   RÕ  RÖ  R×  RØ  (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   is_proper_matchÿ  s    c         C   s  |  j  | j  k  r d S|  j  | j  k r, d S|  j | j k  rB d S|  j | j k rX d S|  j | j k rn d S|  j | j k  r„ d S|  j | j k rš d S|  j | j k  r° d S|  j | j k rÆ d S|  j | j k  rÜ d S|  j | j k rò d S|  j | j k  rd Sd S(   Niÿÿÿÿi   i    (   t   n_unresolved_bondst   n_unresolved_anglesRÕ  R×  RÖ  RØ  (   R#   t   other(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   __cmp__  s2                (   R(   R)   R'   RÝ  Rá  (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÎ  ë  s   		c         C   s[   d } | j  j d d  ƒ d  k	 r. d | } n" | j j j d k rP d | } n  |  j | S(   Nt   TRANSt   CNt   NMR€   Rp  (   Rg   RÔ   R"   Rí   RJ  RK  t   link_link_id_dict(   Rì   Rc   Rd   t   link_id(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   get_lib_link_peptide  s    c            s–  ˆ j  j ƒ  s ˆ j  j ƒ  r" d  Sˆ j  j ƒ  r^ ˆ j  j ƒ  r^ | rN d GHn  t |  ˆ ˆ ƒ Sˆ j sv ˆ j  j ƒ  rÉ ˆ j sŽ ˆ j  j ƒ  rÉ ˆ j r° | r¥ d GHn  |  j d S| r¾ d GHn  |  j d Sˆ j  j j	 } ˆ j  j j	 } |  j
 | ƒ } |  j
 | ƒ } | j j } | j j }	 g  }
 xÒ|  j D]Ç} | j ‰  ˆ  j t j k rTq-n  ˆ  j d k r´ˆ  j d k r´ˆ  j d k r´ˆ  j d k r´ˆ  j d k r´ˆ  j d k r´q-n  t | | | | |	 ƒ ‰ ˆ j d  k	 r-‡  ‡ ‡ ‡ f d †  } d ˆ _ xb ˆ j j D]T } | d | j | j ƒ | d | j | j ƒ g } d  | k r	ˆ j d 7_ q	q	Wd ˆ _ xw ˆ j j  D]i } | d	 | j | j ƒ | d	 | j | j ƒ | d	 | j! | j" ƒ g } d  | k rwˆ j d 7_ qwqwW|
 j# ˆ ƒ q-q-Wt$ |
 ƒ d k rd  S|
 j% ƒ  g  } d
 „  } xK |
 D]C } | rG| | ƒ n  t& | |
 d ƒ d k rdPn  | j# | ƒ q.W| d ‰ ˆ j' ƒ  s�d  Sˆ j S(   Ns   peptide-peptideR#  R&  RA   c      	      s’   d  } | d k r ˆ j } n  | d k r6 ˆ j } n  | d  k r| t d t ˆ j j ƒ ˆ  j ˆ  j |  | |  | f ƒ ‚ n  | j | d  ƒ } | S(   Ni   i   s‰   Corrupt CIF link definition:
  source info: %s
  link id: %s
  link name: %s
  %s atom atom_id: %s
  %s atom comp_id: %d (must be 1 or 2)(	   R"   Rª   R   RK   RÏ  t   source_infoRK  R°   RÔ   (   t   restrRË  R³   t   adRF   (   RÐ  Rc   Rd   t   match(    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   get_atom;  s      i    R-   i   R2   c         S   si   d d GH|  j  j GH|  j  j j ƒ  x5 d d d d d d g D] } | Gt |  | d  ƒ GHq= Wd	 d
 GHd  S(   Ns   match i
   RÞ  Rß  RÕ  R×  RÖ  RØ  RV  iP   (   RÏ  Rè  RÐ  t   showR>   R"   (   Rë  R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   _show_matcha  s    	((   Rí   R§  R"   R)  Rç  Rç   Ræ   Rå  RJ  RK  t   get_comp_comp_id_directt   groupt   link_link_id_listRÐ  R°   R   t   non_chain_linksRÑ  t   mod_id_1RÒ  RÓ  t   mod_id_2RÔ  RÎ  RÏ  RÞ  Rª  t   atom_1_comp_idt	   atom_id_1t   atom_2_comp_idt	   atom_id_2Rß  R®  t   atom_3_comp_idt	   atom_id_3R
  R    Rr  t   cmpRÝ  (   Rì   Rc   Rd   t   verboseRÑ  RÓ  t   comp_1t   comp_2t   group_1t   group_2t   matchesRÏ  Rì  R-   RE   R2   t   best_matchesRî  R¨  (    (   RÐ  Rc   Rd   Rë  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   get_lib_link  s‚      	  	  		 
	  
c         C   sŸ   i  } |  r› |  j  | d <|  j } | j r› d | d <|  j j t k rˆ | j | j k rf d | d <q• | j | j k r• d | d <q• q˜ | j | d <q› n  | S(   NR¬  t   medt   resolution_dependent_restraintst   hight   low(   R¬  R  t   loadt
   resolutionR   t   high_resolution_range_limitt   low_resolution_range_limitRõ   (   R9   t   rct   rdr(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   get_restraints_loading_flagsx  s    		
c   	      C   sÄ   | j  rL t t d | d | d | d d |  d | j d t d | ƒ ƒ ‚ n  | j } g  | D] } | | ^ q\ } | j rÀ t d	 | ƒ rÀ t t d | d | d | d d
 |  d | ƒ ƒ ‚ n  d  S(   NRc   Rd   RY   Rt   s   Conflicting %s restraints:Ru   Rv   Rw   RE   s   Duplicate %s restraints:(   t   is_conflictingR   Rz   t   conflict_source_labelsRD   Rl   t   is_newRG   (	   t   proxy_labelRc   Rd   RY   t   registry_process_resultRw   Rl   RZ   RE   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt    evaluate_registry_process_resultˆ  s&    		
		
	
R­  c           B   s   e  Z d d e d  „ Z RS(   c	         C   sO  | j  d k r9 | j  d k r9 | j  | j  k s9 t ‚ n  | |  _ t ƒ  |  _ d }	 xô| D]ì}
 | r‹ d }	 t |
 d d  ƒ r‹ d }	 q‹ n  | j j |
 j	 ƒ s· | j j |
 j
 ƒ rA| j j |
 j	 j d d ƒ ƒ r,| j j |
 j
 j d d ƒ ƒ r,|
 j	 j d d ƒ |
 _	 |
 j
 j d d ƒ |
 _
 qA| j d 7_ q[ n  | j j |
 j	 d  ƒ | j j |
 j
 d  ƒ f } d  | k rÓ| j |
 j	 j d k s¯| j |
 j
 j d k rÁ| j d 7_ qG| j d 7_ q[ t |
 |	 ƒ d  k s÷|
 j d k r	| j d 7_ q[ | j d 7_ g  | D] } | j ^ q} t j d | d	 t |
 |	 ƒ d
 d |
 j d ƒ } t } | d  k	 rÇt j d | d | ƒ } | j | k rÇt } |  j j t t | ƒ ƒ ƒ qÇn  | s[ | j røt  d | ƒ rø| j! d 7_! qG| j" d t# d | d | ƒ d | ƒ } t$ d d d | d | d | d | ƒ q[ q[ Wd  S(   Ni    t
   value_distt   value_dist_neutronR=  R>  i   R¤   RY   R0   t   weighti   t
   sites_cartt   proxyRE   Rè  Rc   Rd   R  t   bond_simpleR  (   Ni    (%   Rä   R•   RO   R  R^   R>   R"   Rª   RD  Rö  Rø  R¯   RQ   Rg   RÔ   R¬   RT   RS   t   value_dist_esdRU   RV   RZ   R   t   bond_simple_proxyRD   R-   t   distance_modelR8   R  t   tupleR\   Rå   RG   RR   t   processRb   R  (   R#   RO   Rc   Rd   Rª  R«  R  t   distance_cutoffR¬  R  R-   RE   RF   RY   R  t   is_large_distancet   rR  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   £  sd    
	!!	"
		N(   R(   R)   R"   RD   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR­  ¡  s   R°  c           B   s   e  Z d d  „ Z RS(   c         C   s�  | |  _  | d  k r, | | | } }	 }
 n9 | j d k re | j d k re | j | j k se t ‚ n  x$| D]} | d  k	 rÃ g  | j | j | j f D] } | | f | d ^ q— \ } }	 }
 n  | j j | j	 ƒ s|	 j j | j
 ƒ s|
 j j | j ƒ rÈ| j j | j	 j d d ƒ ƒ r³|	 j j | j
 j d d ƒ ƒ r³|
 j j | j j d d ƒ ƒ r³| j	 j d d ƒ | _	 | j
 j d d ƒ | _
 | j j d d ƒ | _ qÈ| j d 7_ ql n  | j j | j	 d  ƒ |	 j j | j
 d  ƒ |
 j j | j d  ƒ f } d  | k rˆ| j | j	 j d k sd|	 j | j
 j d k sd|
 j | j j d k rv| j d 7_ qˆ| j d 7_ ql | j d  k s¦| j d k r¸| j d 7_ ql | j d 7_ g  | D] } | j ^ qÎ} t | | ƒ r| j d 7_ ql t | | ƒ rql | j d t d | d | ƒ d	 t j d
 | d | j d d | j d ƒ ƒ } t d d d | d | d
 | d | ƒ ql Wd  S(   Ni    i   R=  R>  R¤   Rè  Rc   Rd   R  RY   R4   R  i   R  R2   R  (   Ni    (    RO   R"   Rä   R•   Rõ  R÷  Rù  Rª   RD  Rö  Rø  Rú  R¯   RQ   Rg   RÔ   R¬   RT   RS   t   value_anglet   value_angle_esdRU   RV   RZ   R[   RW   Ra   R  Rb   R   t   angle_proxyR  (   R#   RO   Rc   Rd   R®  R¯  RX   R^   t   m_1t   m_2t   m_3R2   RË  RE   RF   RY   R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   é  s^    	B!!!			N(   R(   R)   R"   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR°  ç  s   	R¶  c           B   s   e  Z d d d d  „ Z RS(   c         C   sg  | |  _  |
 |  _ |
 d& k r' d  }	 n  | d  k rT | | | | f \ } } } } n9 | j d k r� | j d k r� | j | j k s� t ‚ n  xÓ| D]Ë} | d  k	 rô g  | j | j | j | j f D] } | | f | d ^ qÅ \ } } } } n  | j	 j
 | j ƒ sL| j	 j
 | j ƒ sL| j	 j
 | j ƒ sL| j	 j
 | j ƒ rH| j	 j
 | j j d d ƒ ƒ r3| j	 j
 | j j d d ƒ ƒ r3| j	 j
 | j j d d ƒ ƒ r3| j	 j
 | j j d d ƒ ƒ r3| j j d d ƒ | _ | j j d d ƒ | _ | j j d d ƒ | _ | j j d d ƒ | _ qH| j d 7_ q” n  | j j | j d  ƒ | j j | j d  ƒ | j j | j d  ƒ | j j | j d  ƒ f } d  | k r6| j	 | j j d k s| j	 | j j d k s| j	 | j j d k s| j	 | j j d k r$| j d 7_ q_| j d 7_ q” | j d  k sT| j d' k rf| j d 7_ q” | j d 7_ g  | D] } | j ^ q|} d d d d	 d
 d g } t | | ƒ rÊ| j d 7_ q” t | | ƒ rÜq” | j d( k r|  j | k r| j rq” | j d k r0|  j | k r0| j  r0q” | d k rH| j! } nV | d k rit" d | j! ƒ } n5 | d k rˆt# | j! ƒ } n t$ d t% | ƒ ƒ ‚ y= t& | j' ƒ d k r¿d  } n t( t) | j' j* d ƒ ƒ } Wn t+ k
 rôd  } n Xt, j- d | d | j d d | j d d | d | ƒ } |	 d  k	 rý| j d k rýt# | j d ƒ d k  sgt ‚ | j. d  k	 r¢| j. d k s‹t ‚ d | j. d | _/ n  t, j0 d |	 d | ƒ } t# | j1 ƒ d | j2 k rý|  j j d d	 ƒ |  _ d | _3 qýn  | j4 d t5 d | d  | ƒ d | ƒ } t6 d! d" d | d  | d | d# | d$ d% t% | j ƒ g ƒ q” Wd  S()   NRâ  t   PTRANSt   NMTRANSi    i   R=  R>  R¤   t   CISt   PCISt   NMCISt   psit   phit   omegat!   determined_by_sign_of_periodicityt   all_sinusoidalt   all_harmonics"   Unknown dihedral_function_type: %st   ,RY   R4   R  i   t   periodicityt   alt_angle_idealsi´   g�íµ ÷Æ°>R  R  Rè  Rc   Rd   R  R±  R  Rw   s   tor id: (   s   TRANSR)  R*  (   Ni    (   R.  R/  (7   RO   t   chem_link_idR"   Rä   R•   Rõ  R÷  Rù  t   atom_4_comp_idRª   RD  Rö  Rø  Rú  t	   atom_id_4R¯   RQ   Rg   RÔ   R¬   RT   RS   R#  R$  RU   RV   RZ   R[   RW   Ra   RK  t   discard_psi_phit   discard_omegat   periodt   maxt   absR{  RK   R    t   alt_value_anglet   mapt   floatt   splitRŸ  R   t   dihedral_proxyt   omega_esd_override_valueR  R±  t   deltat   cis_thresholdR4   R  Rb   R  (   R#   RO   Rc   Rd   R²  R³  R´  Rµ  RX   R  R7  R^   R&  R'  R(  t   m_4t   torRË  RE   RF   RY   t   trans_cis_idsR5  R?  R  R"  R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   '  sÂ    			!9!!!!				
						N(   R(   R)   R"   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR¶  %  s   R»  c           B   s   e  Z d d d  „ Z RS(   c
         C   sÜ  | |  _  t j d ƒ |  j  _ | d  k rK | | | | f \ }
 } } } n9 | j d k r„ | j d k r„ | j | j k s„ t ‚ n  xQ| D]I} | d  k	 rë g  | j | j | j	 | j
 f D] } | | f | d ^ q¼ \ }
 } } } n  | j } | d  k	 r| d  j ƒ  } n  | d k r8| j | c d 7<q‹ n  |
 j j | j ƒ s�| j j | j ƒ s�| j j | j ƒ s�| j j | j ƒ rŒ| j j | j j d d ƒ ƒ rw| j j | j j d d ƒ ƒ rw| j j | j j d d ƒ ƒ rw|
 j j | j j d d ƒ ƒ rw| j j d d ƒ | _ | j j d d ƒ | _ | j j d d ƒ | _ | j j d d ƒ | _ qŒ| j d 7_ q‹ n  |
 j j | j d  ƒ | j j | j d  ƒ | j j | j d  ƒ | j j | j d  ƒ f } d  | k rz|
 j | j j d	 k sV| j | j j d	 k sV| j | j j d	 k sV| j | j j d	 k rh| j d 7_ qÔ| j d 7_ q‹ | d  k s’| d k r¤| j d 7_ q‹ | d  k rÅ| j j | ƒ } n | j | j | j | ƒ } | d  k rþ| j d 7_ q‹ | j d 7_ g  | D] } | j ^ q} t | | ƒ rJ| j  d 7_  q‹ t! |	 | ƒ r\q‹ | j" d
 t# d | d | ƒ d t$ j% d | d | d | d k d d | d ƒ ƒ } t& d d d | d | d | d | ƒ q‹ Wd  S(   Ni    i   i   t   posit   negat   bothR=  R>  R¤   Rè  Rc   Rd   R  RY   t   volume_idealt
   both_signsR  i   R  R·  R  (   RJ  RK  RL  (   Ni    ('   RO   R   t   with_default_valuet   unsupported_volume_signR"   Rä   R•   t   atom_centre_comp_idRõ  R÷  Rù  t   volume_signRC  Rª   RD  t   atom_id_centreRö  Rø  Rú  R¯   RQ   Rg   RÔ   R¬   RT   RS   RU   Rí   t   get_chir_volume_idealRV   RZ   R[   RW   Ra   R  Rb   R   t   chirality_proxyR  (   R#   RO   Rc   Rd   R¸  R¹  RX   Rº  Rè   R^   t   m_cR&  R'  R(  t   chirRË  RR  RE   RM  RF   RY   R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   ž  sŠ    
	!9	!!!!		N(   R(   R)   R"   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR»  œ  s   
R¾  c           B   s   e  Z d d  „ Z RS(   c         C   s   | |  _  t j d ƒ |  j  _ | d  k	 rc | j d k rc | j d k rc | j | j k sc t ‚ n  x–| D]Ž} t }	 g  }
 g  } x§| j D]œ} | d  k r§ | } n, | j	 d k s¼ t ‚ | | f | j	 d } | j
 j | j ƒ s9| j
 j | j j d d ƒ ƒ r$| j j d d ƒ | _ q9| j d 7_ qŒ n  | j j | j d  ƒ } | d  k r | j
 | j j d k rˆ| j d 7_ q(| j d 7_ t }	 qŒ | j d k rÁ| j d 7_ qŒ | j d 7_ | j } | d  k	 r| | k r| j d 7_ qŒ |
 j | ƒ | j d | j d ƒ qŒ Wt |
 ƒ d k  r`|	 rø| j | j c d 7<qøqj t | |
 ƒ rrqj | j d t d	 | d
 | ƒ d t  j! d t" j# |
 ƒ d t" j$ | ƒ ƒ ƒ } t% d d d	 | d
 | d |
 d | d d t& | j ƒ g ƒ qj Wd  S(   Ni    i   i   R=  R>  R¤   i   Rè  Rc   Rd   R  RY   t   weightsR  R5   R  Rw   s
   plane id: (   i   i   (   Ni    ('   RO   R   RO  t   less_than_four_sitesR"   Rä   R•   RD   t   plane_atomst   atom_comp_idRª   RD  R³   R¯   RQ   Rg   RÔ   R¬   RT   RS   R8   t   dist_esdRU   RV   RZ   RW   R
  R    t   plane_idRa   R  Rb   R   t   planarity_proxyR
   R×   t   doubleR  RK   (   R#   RO   Rc   Rd   R¼  R½  RX   R^   R;   t&   this_plane_has_unresolved_non_hydrogenRY   RX  t
   plane_atomt   m_xRF   RZ   R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   ö  s`    		!				N(   R(   R)   R"   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR¾  ô  s   	RÀ  c           B   s   e  Z d d  d „ Z RS(   gš™™™™™©?c         C   sá  | d k r t  d ƒ ‚ n  | |  _ | d  k	 ri | j d k ri | j d k ri | j | j k si t ‚ n  | j d 7_ g  } g  }	 xš | | f |	 | f g D]€ \ }
 } xq | j j ƒ  D]` } xW | j D]L } | j	 j
 | j d  ƒ } | d  k	 rÉ | j |
 k rÉ |
 j | j ƒ qÉ qÉ Wq¹ Wq� Wt | | |	 ƒ r7n¦ t | ƒ d k  sÝt |	 ƒ d k  r^n | j d t d | d | ƒ d t j d	 t j | ƒ d
 t j |	 ƒ d | ƒ ƒ } t d d d | d | d	 | d | d d g ƒ d  S(   Ni    s/   Weight for parallelity restraint should be > 0.i   i   Rè  Rc   Rd   R  RY   t   j_seqsR  R  R7   R  Rw   s
   plane id: s   ???s   plane id: ???(   R   RO   R"   Rä   R•   RV   Rí   R¿  RZ  Rg   RÔ   R³   RZ   R
  Ra   R    R  Rb   R   t   parallelity_proxyR
   R×   R  (   R#   RO   Rc   Rd   RÁ  RX   R^   R  RY   Rc  t   seqsR¨  t   pRa  RF   R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   7  s:    	%$		N(   R(   R)   R"   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÀ  5  s   c         C   s´  t  j d | d d d | d | d | ƒ } | r(i g  d 6g  d 6} xZ |  j D]O }	 |	 j d k si t ‚ |	 j d k rŒ | d j |	 ƒ qN | d j |	 ƒ qN W| r¶ d d g }
 n d d g }
 xc |
 D]X } xO | | D]C }	 |	 j |	 j g } | j ƒ  |	 j	 | j
 j | d ƒ | d	 <qÚ WqÉ Wn  | r>d
 d } } n d d
 } } xb|  j j ƒ  D]Q\ } } t | ƒ d k rq[n  t | | ƒ } | d  k r¬t | | ƒ } n  | d  k	 rÈ| | j | <n  t | d ƒ } | d  k	 ró| | j | <n  t | d ƒ d k rd | j | <q[t | d ƒ d k r=d	 | j | <q[t | d ƒ d k rbd | j | <q[t | d ƒ d k r‡d | j | <q[t | d ƒ d k r[d | j | <q[q[W| S(   Nt   factor_1_4_interactionst   const_shrink_1_4_interactionsi    t   default_distancet   minimum_distancet   const_shrink_donor_acceptorRA   Rh  i   t   vdwh_radiust
   vdw_radiust
   ion_radiust   hb_typeR   R¥   t   Ai   t   Bi   R¤   i   (   RA   Rh  (   R   t   nonbonded_paramst   lib_vdwt   H_flagR•   R
  t   atom_type_1t   atom_type_2Rr  t
   radius_mint   distance_tableR	  t   lib_atomR«   R    R>   R"   t   radius_tablet   ionic_radius_tablet   donor_acceptor_table(   t   ener_libt   assume_hydrogens_all_missingRg  Ri  Rj  Rk  t   use_lib_vdwR9   t   tablest   vdwt   reverse_prefst   codet
   atom_typest   pref1t   pref2t	   atom_typet   energy_lib_atomR"  t   r_ionic(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   ener_lib_as_nonbonded_paramsb  s\    		
, c         C   sl   | | } xQ t  d | ƒ D]@ } |  | | k r6 q n  | j d | | ƒ r | |  | <t Sq W| |  | <t S(   Ni    Rà  (   R]   t   is_identical_hierarchyR8   RD   (   t   model_type_indicesR  t   modelsRc   t   j_model(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   is_same_model_as_before�  s    
 

t   build_chain_proxiesc           B   s   e  Z d d  d „ Z RS(   i
   c!   V          sh  | d  k r i  } n  d d  l }! |! j j j ƒ  |  _ | |  _ t j d ƒ }" t j d ƒ ‰  t j d ƒ }# g  }$ d }% t j d ƒ }& t j d ƒ }' t j d ƒ }( t j d ƒ }) t j d ƒ }* t j d ƒ }+ t j d ƒ }, g  }- d }. d }/ d }0 d }1 d }2 d }3 d }4 t j d ƒ }5 d }6 d }7 d }8 d }9 d }: d }; t j d ƒ }< d }= d }> t j d ƒ }? d }@ d }A d  ‰ d  ‰ d  }B | j ƒ  ‰ xÔ
t ˆ ƒ D]Æ
\ ‰ ‰ ‡ ‡ f d †  }C t	 d | d | d | d | d | d	 | d
 | d | d | d | j
 d ˆ d |C ƒ  d ˆ j ƒ  j ƒ  j d | j d d  ƒ ƒ ‰ ˆ j rsˆ j j rsˆ j j |  j d ˆ j <n  ˆ j d  k rÌ‡  ‡ ‡ ‡ ‡ ‡	 f d †  }D |D ƒ  s¿|" ˆ j c d 7<n  |/ d 7}/ n'ˆ d  k	 rïˆ j rï|/ d 7}/ nˆ d  k	 róˆ j d  k	 rót d | d ˆ d ˆ ƒ ˆ _ ˆ j d  k r]|, d  c d 7<|- j ˆ ˆ f ƒ qó‡ ‡ ‡ ‡
 f d †  }E ˆ j j j }F |F de k rÃ|E ƒ  rÃ| j |F }G ˆ j d |G ƒ ˆ j ƒ  n  ˆ j j j }F |F df k r|E ƒ  r| j |F }G ˆ j d |G ƒ ˆ j ƒ  n  t d t d d ƒ d ˆ d ˆ d ˆ j j d | j d  ˆ
 d! ˆ ƒ }H |6 |H j j  7}6 |. |H j j! 7}. |H j" }I |/ t# |I ƒ 7}/ t$ d t d d" ƒ d ˆ d ˆ d# ˆ j j% d$ | j& d% | d& |I ƒ }H |0 |H j j! 7}0 t' d t d d' ƒ d ˆ d ˆ d( ˆ j j( d) |
 d* | d+ | j) d% | d  ˆ
 d, ˆ j j j d& |I ƒ }H |1 |H j j! 7}1 |, |H j* c d 7<t+ d t d d- ƒ d ˆ d ˆ d. ˆ j j, d/ | j- d% | d0 | d1 ˆ j d& |I ƒ 	}H |2 |H j j! 7}2 t. d t d d2 ƒ d ˆ d ˆ d3 ˆ j j/ ƒ  d4 | j0 d% | d& |I ƒ }H |3 |H j j! 7}3 | j1 ró| j2 j1 rót# |I ƒ d k rðˆ j3 rðˆ j3 rðd5 „  }J | j2 j4 rí| j2 j5 s’|J ˆ ˆ ƒ rít6 d t d d6 ƒ d ˆ d ˆ d7 | j7 d% | d& |I d8 | j2 j8 ƒ }H |4 |H j j! 7}4 qíqðqón  ˆ j d  k	 rÒˆ j9 ƒ  r$|# ˆ j c d 7<n  ˆ j: t; k rkˆ d k rkˆ | j< ƒ  d k  rk|$ j t= ˆ ƒ ƒ n  |% t# ˆ j> ƒ 7}% x2 ˆ j? j@ ƒ  D]! }K |& ˆ j d9 |K c d 7<qŽWx> ˆ jA jB ƒ  D]- \ }K }L |' ˆ j d9 |K c t# |L ƒ 7<qÃWx> ˆ jC jB ƒ  D]- \ }K }L |( ˆ j d9 |K c t# |L ƒ 7<qWˆ jD d  k	 rZ|+ ˆ jD c d 7<n  ˆ j jE d  k	 r…|) ˆ j jE c d 7<n  x! ˆ jF D] }M |* |M c d 7<q�Wˆ	 jG d | j
 d: ˆ ƒ ˆ jG d | j
 d: ˆ ƒ ˆ j d | j d; | j d; d  ƒ ƒ |6 ˆ jH j  7}6 ˆ jH jI d k r>	|5 ˆ j c ˆ jH jI 7<n  |7 ˆ jH j! 7}7 ˆ j$ d% | d$ | j& ƒ ˆ jJ jI d k r•	|5 ˆ j c ˆ jJ jI 7<n  |8 ˆ jJ j! 7}8 |9 ˆ jJ jK 7}9 ˆ j' d) |
 d% | d+ | j) ƒ ˆ jL jI d k r
|5 ˆ j c ˆ jL jI 7<n  |: ˆ jL j! 7}: |; ˆ jL jK 7}; ˆ j+ d% | d/ | j- d0 | ƒ ˆ jM jI d k ro
|5 ˆ j c ˆ jM jI 7<n  x0 ˆ jM jN jB ƒ  D] \ }N }O |< |N c |O 7<q‚
W|= ˆ jM j! 7}= |> ˆ jM jK 7}> ˆ j. d% | d4 | j0 ƒ ˆ jO jI d k r	|5 ˆ j c ˆ jO jI 7<n  x; ˆ jO jP jB ƒ  D]' \ }P }O |? ˆ j d< |P c |O 7<qW|@ ˆ jO j! 7}@ |A ˆ jO jK 7}A ˆ j jQ j d= k rÒˆ j> j d> d  ƒ }Q |Q d  k	 rÏ|Q jR | k rÏ| j |Q jR ƒ | j ˆ ƒ qÏqÒn  tS jT r-tS jU d$ | j& d+ | j) d? |B ˆ ˆ f d@ t; dA t; d  ˆ
 ƒ }R |  j j |R ƒ n  | rC| j ˆ ƒ n | j ˆ jV ƒ  ƒ ˆ }B ˆ ‰ d  ˆ _ q¥W| r,| d  k	 r,| dB | j< ƒ  |% tW jX tW jY |& jZ ƒ  ƒ ƒ f IJt# |" ƒ d k rÜ| dC I|" IJn  t# ˆ  ƒ d k r| dD Iˆ  IJn  t# |# ƒ d k r&| dE I|# IJn  t# |$ ƒ d k rK| dF I|$ IJn  t# |& ƒ d k rp| dG I|& IJn  t# |' ƒ d k r•| dH I|' IJn  t# |( ƒ d k rº| dI I|( IJn  t# |) ƒ d k rß| dJ I|) IJn  t# |* ƒ d k r| dK I|* IJn  t# |+ ƒ d k r,| dL I|+ IJq,n  | d  k	 r2t# |, ƒ d k r2| dM I|, IJt# |, ƒ d k r/|	 d  k r‡t# |- ƒ }S n |	 }S t[ d t# |- ƒ |S ƒ }T |T d k rÅ|S d 7}S d }T n  xD |- |S  D]8 }U | dN IJx% |U D] ‰ | dO t= ˆ j\ ƒ IJqçWqÐW|T d k r,| dP |T IJq,q/q2n  | rf| d  k	 rf|. d k rf| dQ I|. IJqfn  | d  k	 r”|/ d k r”| dR I|/ IJq”n  | r§| d  k	 r§|0 d k rÅ| dS I|0 IJn  |1 d k rä| dT I|1 IJn  |2 d k r| dU I|2 IJn  |3 d k r"| dV I|3 IJn  |4 d k rA| dW I|4 IJn  t# |5 ƒ d k rf| dX I|5 IJn  |7 d k r…| dY I|7 IJn  |8 d k r§| dZ I|8 IJq§n  | d  k	 rÕ|9 d k rÕ| d[ I|9 IJqÕn  | r	| d  k	 r	|: d k r	| d\ I|: IJq	n  | d  k	 r7|; d k r7| d] I|; IJq7n  | r�| d  k	 r�t# |< ƒ d k rn| d^ I|< IJn  |= d k r�| d_ I|= IJq�n  | d  k	 r¾|> d k r¾| d` I|> IJq¾n  | r| d  k	 rt# |? ƒ d k rõ| da I|? IJn  |@ d k r| db I|@ IJqn  | d  k	 rd|A d k rB| dc I|A IJn  |6 d k rd| dd I|6 IJqdn  d  S(g   Niÿÿÿÿi    c             s(   ˆ  d }  |  t  ˆ ƒ k r  d  Sˆ |  S(   Ni   (   R    R"   (   R`   (   t	   i_residuet   pdb_residues(    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   _get_next_residue÷  s    
 Rl   Rì   Rô   R  R  R  R  Rä   Rå   R±   Rî   Rö   Rò   Rõ   R  s   comp_%sc             sé   ˆ j  ƒ  d k s' t ˆ j ƒ d k r+ t Sˆ j d }  t d ˆ j d |  j d |  j ƒ } | j d  k ro t Sˆ j
 j | j d  ƒ } | d  k r— t S|  j } ˆ j d | d | j ƒ ˆ j d | d | j ƒ ˆ  ˆ j c d 7<t S(   Ni   i    R$   R%   R&   RZ   R    (   t
   atoms_sizeR    RÜ   RD   R   Rý   R°   R  R   R"   Ry  RÔ   R   RZ   R¡   R$   R8   (   RF   t   ad_hoct   entryRZ   (   t   ad_hoc_single_atom_residuesR}  R�   RÈ   RL   RÆ   (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt9   use_scattering_type_if_available_to_define_nonbonded_type	  s(     		  			i   Rc   Rd   c    	         s  t  }  ˆ j d  k r |  Sxå ˆ j j D]× } ˆ j j | j d  ƒ ˆ j j | j d  ƒ f } g  | D] } | j ^ qc } ˆ | d } ˆ | d } d d  l	 } | j
 | d | d d | d | d d | d | d d ƒ } | ˆ  k rü t }  n  |  SWd  S(   Ni    i   iÿÿÿÿi   (   R8   Rè   R"   Rª  Rg   RÔ   Rö  Rø  RZ   t   matht   sqrtRD   (	   R¦  R-   RE   RF   RY   t   s1t   s2R™  t   link_distance(   t   link_distance_cutoffR�   t   prev_mmR  (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   within_linking_cutoff3	  s     A 	RA   R÷   RO   RP   t	   link_bondRª  R«  R  R   t
   link_angleR®  R¯  RX   R^   t   link_dihedralR²  R³  R´  Rµ  R7  t   link_chiralityR¸  R¹  Rº  Rè   t   link_planarityR¼  R½  c         S   s:  | j  j d d  ƒ } g  } xx d d d d d g D]a } |  j  j | d  ƒ } | j  j | d  ƒ } | d  k	 r1 | d  k	 r1 | j | j | ƒ ƒ q1 q1 Wd } } }	 t | ƒ d k rÿ t | ƒ } t | ƒ } t | ƒ t | ƒ }	 |	 d k  où | d k  }
 n t }
 |
 s6d	 G|  j	 G| j	 Gd
 |	 | | f Gd GHn  |
 S(   Nt   C2t   C4t   C5t   C6s   C1*i    g      @i   s   Rejecting parallelity for s   %5.2f %5.2f %5.2fs7    in additional check (skip_additional_check_on_dna_rna)(
   Rg   RÔ   R"   R
  t   distanceR    R=  t   minRD   Rï   (   Rc   Rd   RF   t	   distancest   anamet   a1t   a2t   max_distt   min_distt	   diff_distR¦  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   additional_checkŒ	  s&    t   link_parallelityRÁ  R  R4  R�   R¬  t   :R‡   t   SGt   monomer_mappingst   connectivity_i_jt   connectivity_j_ks)           Number of residues, atoms: %d, %ds             Unknown residues:s&             Ad-hoc single atom residues:s             Unusual residues:s2             Inner-chain residues flagged as termini:s             Unexpected atoms:s             Ignored atoms:s             Duplicate atoms:s             Classifications:s             Modifications used:s             Incomplete info:s             Link IDs:s               Not linked:s                 %ss(               ... (remaining %d not shown)s!             Unresolved chain links:s             Chain breaks:s'             Unresolved chain link angles:s*             Unresolved chain link dihedrals:s,             Unresolved chain link chiralities:s,             Unresolved chain link planarities:s.             Unresolved chain link parallelities:s.             Corrupt monomer library definitions:s(             Unresolved non-hydrogen bonds:s)             Unresolved non-hydrogen angles:s8             Angles discarded because of special positions:s,             Unresolved non-hydrogen dihedrals:s;             Dihedrals discarded because of special positions:s'             Unsupported chir.volume_sign:s.             Unresolved non-hydrogen chiralities:s=             Chiralities discarded because of special positions:s0             Planarities with less than four sites:s.             Unresolved non-hydrogen planarities:s=             planarities discarded because of special positions:s;             bond proxies already assigned to first conformer:(   NRA   (   NRA   (]   R"   t   iotbx.cif.modelt   cift   modelt&   conformation_dependent_restraints_listR   RO  t   residuesR,   RÛ   RC   RB   RK  RÔ   Rí   t
   cif_objectRý   R$   t   link_to_previousR  Rè   R
  RÐ  Ró  R  R  R  Rô  R­  RO   Rª  R  RR   RS   R^   R    R°  R®  R2   R¶  R²  R±  R7  R»  R¸  R·  R¾  R¿  R5   t   enabledt   stackingRç   t   find_automaticallyt!   skip_additional_distance_checkingRÀ  R7   R1   RÑ   RÐ   R8   t   residues_sizeRN   Rg   RË   RB  RÍ   R«   RÌ   RÏ   RÎ   Rá   R½   Rà   RQ   RÝ   RW   Rã   Râ   RP  Rð   RY  RJ  RZ   R   t   is_availablet*   build_conformation_dependent_angle_proxiesRÚ   R
   t   sumt   longR©  R=  Rî   (V   R#   Rì   R}  Rô   t	   na_paramsR  R  R  Rž  t   not_linked_show_maxR³  Rº  R´  t   pdb_hierarchyRl   R  RX   t   keep_monomer_mappingst   all_monomer_mappingsRÆ   RÈ   t   geometry_proxy_registriest   cystein_sulphur_i_seqst   cystein_monomer_mappingst   is_unique_modelR  Rä   Rå   t	   conformerR½  R?   t   restraints_loading_flagst   fatal_problem_max_linest   iotbxt   unknown_residuest   unusual_residuest'   inner_chain_residues_flagged_as_terminiRh   RË   RÍ   RÌ   t   classificationst   modifications_usedt   incomplete_infost   link_idst   mm_pairs_not_linkedt   n_unresolved_chain_linkst   n_chain_breakst   n_unresolved_chain_link_anglest!   n_unresolved_chain_link_dihedralst#   n_unresolved_chain_link_chiralitiest#   n_unresolved_chain_link_planaritiest%   n_unresolved_chain_link_parallelitiesRQ   t2   n_bond_proxies_already_assigned_to_first_conformert   n_unresolved_non_hydrogen_bondst    n_unresolved_non_hydrogen_anglest/   n_angles_discarded_because_of_special_positionst#   n_unresolved_non_hydrogen_dihedralst2   n_dihedrals_discarded_because_of_special_positionst   unsupported_chir_volume_signt%   n_unresolved_non_hydrogen_chiralitiest4   n_chiralities_discarded_because_of_special_positionst%   planarities_with_less_than_four_sitest%   n_unresolved_non_hydrogen_planaritiest4   n_planarities_discarded_because_of_special_positionst   prev_prev_mmR“  R˜  R   t   mod_idR÷   t   link_resolutionR^   R³  R%   RY   Rœ  Rx   t   nRf  t   sulphur_atomt   cdrt   show_maxt   n_not_shownt   pair(    (   R—  R}  R‘  Rž  R�   RÈ   R’  RŸ  RL   RÆ   R  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   ©  s   # 																			%%					
	
			
						&
	
	
	


	
	
	
	
	
	
	


	

	
	N(   R(   R)   R"   R'   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR�  §  s   "t$   geometry_restraints_proxy_registriesc           B   s,   e  Z d  „  Z d „  Z d „  Z d „  Z RS(   c         C   sˆ   t  j d | d | ƒ |  _ t  j d | ƒ |  _ t  j d | ƒ |  _ t  j d | ƒ |  _ t  j	 d | ƒ |  _
 t  j d | ƒ |  _ d  S(   NRÉ   R˜   (   R   R«  R  R¯  R2   Rµ  R±  R¹  R·  R½  R5   RÁ  R7   (   R#   RÉ   R˜   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   ”
  s    						c         C   sR   |  j  j ƒ  |  j j ƒ  |  j j ƒ  |  j j ƒ  |  j j ƒ  |  j j ƒ  d  S(   N(   R  t   initialize_tableR2   R±  R·  R5   R7   (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   initialize_tables¤
  s    c         C   sR   |  j  j ƒ  |  j j ƒ  |  j j ƒ  |  j j ƒ  |  j j ƒ  |  j j ƒ  d  S(   N(   R  t   discard_tableR2   R±  R·  R5   R7   (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRŸ   ¬
  s    c         C   s  |  j  j d k r- | | d |  j  j IJn  |  j j d k rZ | | d |  j j IJn  |  j j d k r‡ | | d |  j j IJn  |  j j d k r´ | | d |  j j IJn  |  j j d k rá | | d |  j j IJn  |  j j d k r| | d |  j j IJn  d  S(   Ni    s/   Number of resolved bond restraint conflicts: %ds0   Number of resolved angle restraint conflicts: %ds3   Number of resolved dihedral restraint conflicts: %ds4   Number of resolved chirality restraint conflicts: %ds4   Number of resolved planarity restraint conflicts: %ds6   Number of resolved parallelity restraint conflicts: %d(   R  R™   R2   R±  R·  R5   R7   (   R#   Rn   R?   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÃ   ´
  s0    (   R(   R)   R'   Rý  RŸ   RÃ   (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRû  ’
  s   			(   t   linking_mixinst   build_all_chain_proxiesc           B   s	  e  Z e e e e e e e e e e e e e e e e d  „ Z d e d d „ Z e e d „ Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e e d „ Z e e d „ Z d „  Z d „  Z d e e d „ Z d e d „ Z e d „ Z e d „ Z e e e e d „ Z e e e d „ Z d „  Z d „  Z d „  Z d „  Z  d „  Z! d  „  Z" d! „  Z# d" „  Z$ d# „  Z% e d$ „ Z& e d% „ Z' d& „  Z( d' „  Z) e e e e e e e e e e e e d( „ Z* d) d* „ Z+ RS(+   c   A   D      s®  d d  l  } | j j j ƒ  ˆ _ | d  k r< t | ƒ } n  | ˆ _ | d  k sc |	 d  k sc t ‚ | d  k r~ t j ƒ  } n  | ˆ _	 | rŸ t
 ˆ j	 j _ n  t ƒ  } d  ˆ _ | d  k	 rÖ | d  k	 rÖ | | IJn  | d  k	 r | d  k sô t ‚ | ˆ _ n¨ | d  k	 r6| d  k st ‚ t j d | ƒ ˆ _ nr t | t ƒ rWt j | ƒ } n6 t | t j ƒ s�| d  k	 s{t ‚ t j | ƒ } n  t j d d  d | ƒ ˆ _ ˆ j j ƒ  ˆ _ | d  k	 r&ˆ j j ƒ  j | ƒ } ˆ j j | ƒ j ƒ  } t j d d  d | ƒ ˆ _ ˆ j j ƒ  ˆ _ n  ˆ j j ƒ  ˆ _ ˆ j j ƒ  ˆ j j  ƒ  ˆ _! ˆ j! j" ƒ  ˆ j! j# ƒ  ˆ j! j$ ƒ  ˆ j! j% ƒ  | d  k	 rÖ| d IJ| d It& | j' ƒ IJ| d Iˆ j j( ƒ  IJn  d  ˆ _) d  ˆ _* d  ˆ _+ d  ˆ _, d  ˆ _- | d  k	 rEˆ j j( ƒ  | k rE| d  k	 rE| d | IJd  Sn  ˆ j j. ƒ  ˆ _+ ˆ j j/ ƒ  ‰ | d  k	 r‹| d	 It0 ˆ ƒ IJn  ˆ j j( ƒ  ‰ ‡ ‡ ‡ f d
 †  } | ƒ  i  ‰  ‡  ‡ ‡ f d †  } | ƒ  g  ‰ ‡ ‡ ‡ f d †  } | ƒ  ‡ ‡ f d †  } | ƒ  | d  k rC|	 d  k	 rC|	 j) d | j1 ƒ } n  ˆ j j) d | d | j1 d |
 ƒ ˆ _) ˆ j) d  k	 rîˆ j) j2 ƒ  d  k	 rîˆ j) j2 ƒ  j3 ƒ  t j4 ˆ j j ƒ  j5 ƒ  ƒ d k  rîd } t6 | ˆ j) j2 ƒ  j7 ƒ  ƒ ‚ n  ˆ j) d  k	 r3ˆ j) j2 ƒ  d  k s'ˆ j) j8 ƒ  d  k r3d  ˆ _) n  ˆ j) d  k rr| rrt9 j: d ˆ j+ ƒ j) d | j1 ƒ ˆ _) n  ˆ j) d  k r�d  ˆ _; n ˆ j< ƒ  j; ƒ  ˆ _; ˆ j= d | d | ƒ ˆ j> d | d | ƒ g  ˆ _? d g t0 ˆ ƒ } g  ˆ _@ tA d ˆ j jB d tC ƒ d | ƒ ˆ _A tD d ˆ j j( ƒ  d | ƒ ˆ _D tE d ˆ j j( ƒ  d | ƒ ˆ _F t jG ƒ  ˆ _H g  ˆ _I d } x§
tJ ˆ ƒ D]™
\ } } | d  k	 r³| d | jK IJn  tL | | ˆ ƒ }  |  rÙ| d 7} n* | d  k	 r| d Iˆ | | jK IJn  |  r.| d  k	 r.| d I| jM ƒ  IJn  ˆ jF jN ƒ  tO ˆ jP ƒ }! x1| jQ ƒ  D]#}" |" jR ƒ  }# |  rÅ| d  k	 rÅ| d |" jK IJ| d  I|" jS ƒ  IJ| d! It0 |# ƒ IJtT | ƒ n  x²tJ |# ƒ D]¤\ }$ }% |  r| d  k	 r| d" |% jU IJtT | ƒ n  ˆ  |% jU }& tV d | d# | d$ ˆ j	 jW d% ˆ j	 jX d& ˆ j	 jY d' ˆ jZ d( |! d) ˆ j	 j[ d* ˆ j	 j\ j] d+ ˆ j	 j^ d, ˆ j	 j_ d- ˆ j	 j d. ˆ j d/ ˆ j d ˆ j+ d0 ˆ j; d1 | d2 ˆ j@ d3 ˆ jA d4 ˆ jD d5 ˆ jF d6 ˆ jH d7 ˆ jI d8 |  d9 | d: |& d; |$ d k d< |% d= ˆ j? d> | d? ˆ j	 j\ j` d | ƒ  }' ˆ j ja |' j ƒ |' j? ˆ _? ~' tT | ƒ qÒWqWWt jG ƒ  ˆ _b ˆ jH j( ƒ  d k r–
| jc d  k	 rØ	ˆ j j ƒ  j | jc ƒ jd ƒ  ˆ _b q–
d@ dA dB dC dD dE dF dG dH g	 }( g  }) x” ˆ j D]† }* |* je jf ƒ  jg ƒ  }+ |+ |( k r	
x\ ˆ jH D]N }, ˆ j |, }- |- jh |* ƒ | ji k  r:
|) jj |- ƒ ˆ jb jj |- jk ƒ q:
q:
Wq	
q	
Wn  ˆ jb j( ƒ  d k r2| J| dI IJ| dJ IJxe ˆ jb D]Z }. ˆ j |. }/ | dK |/ jl ƒ  IJ|/ jm ƒ  jf ƒ  jg ƒ  }+ |+ dC k rÍ
t6 dL ƒ ‚ qÍ
qÍ
W| Jn  t jG ƒ  }0 x0 ˆ jH D]% }. |. ˆ jb k rH|0 jj |. ƒ qHqHW|0 ˆ _H d }1 d }2 d }3 d }4 d }5 xÑˆ jn D]Æ‰ ˆ jo rÍˆ jp r¢| dM IJq¢q¢n  g  }6 x" ˆ jq D] }7 |6 jj |! |7 ƒ qÝWxm|6 d jr ƒ  D][}8 t0 |8 ƒ d k s't ‚ |8 d }9 ‡ f dN †  }: |9 js d  k r_|: dO d ƒ n  x|6 d jr ƒ  D]ð}; t0 |; ƒ d k sŽt ‚ |; d }< |< js d  k r·|: dO d ƒ n  |9 jt d k rí|< jt d k rí|9 jt |< jt k ríqpn  tC ˆ _o ‡ f dP †  }= | ju jv ˆ jw t
 ƒ s¼tx ˆ dQ t
 ƒ rWˆ jy ˆ |9 |< ƒ }> |> | ju ˆ jw <qptx ˆ dR t
 ƒ r‘ˆ jy ˆ |9 |< ƒ }> |> | ju ˆ jw <qpˆ jy ˆ |9 |< ƒ }> |> | ju ˆ jw <qpn  | ju ˆ jw }> tz ˆ dS ƒ rFtz ˆ dT ƒ rFˆ j{ jk ˆ j| jk g }? ˆ jF j} j~ dU |? ƒ rFˆ jp rC| dV d� ˆ jw f IJqpqCqFn  t dY t€ dZ d[ ƒ d\ |9 d] |< d^ |> j� d_ ˆ jF j} d ˆ j+ d` ˆ j	 j[ ƒ }@ |= |@ ƒ |1 |@ j€ j‚ 7}1 tƒ dY t€ dZ da ƒ d\ |9 d] |< db |> j„ dc ˆ jF j… d0 ˆ j; ƒ }@ |= |@ ƒ |2 |@ j€ j‚ 7}2 t† dY t€ dZ dd ƒ d\ |9 d] |< de |> j‡ d+ ˆ j	 j^ d- ˆ j	 j df ˆ jF jˆ d0 ˆ j; d ˆ j+ dg |> j‰ jK ƒ 
}@ |= |@ ƒ |3 |@ j€ j‚ 7}3 tŠ dY t€ dZ dh ƒ d\ |9 d] |< di |> j‹ dj ˆ jF jŒ d0 ˆ j; d, ˆ j	 j_ dk |> ƒ }@ |= |@ ƒ |4 |@ j€ j‚ 7}4 t� dY t€ dZ dl ƒ d\ |9 d] |< dm |> jŽ ƒ  dn ˆ jF j� d0 ˆ j; ƒ }@ |= |@ ƒ |5 |@ j€ j‚ 7}5 qpWq	Wq¢W| d  k	 r‡|1 d k r—| do I|1 IJn  |2 d k r¶| dp I|2 IJn  |3 d k rÕ| dq I|3 IJn  |4 d k rô| dr I|4 IJn  |5 d k r| ds I|5 IJn  tT | ƒ q‡q‡Wx? ˆ jn D]4 ‰ ˆ jo s.t� dt ˆ jw t ˆ jq ƒ f ƒ ‚ q.q.W| r˜du GHtz | dv ƒ sˆdw GHq˜| j‘ ˆ ƒ n  | d  k	 rW| d k rÃ| dx I| IJn  t0 ˆ ƒ d k r| dy It0 ˆ ƒ IJt’ dz ˆ d | d{ d| d} ˆ j	 j\ j“ ƒ n  ˆ jF j” d | d{ d~ ƒ ˆ j• d{ d~ d | d ˆ j	 j\ j` ƒ n  ˆ j– d | d€ t0 ˆ ƒ ƒ | j— ƒ  ˆ _ ˆ j) d  k	 rªˆ j j˜ ˆ j™ ƒ  ƒ n  d  S(‚   Niÿÿÿÿt	   file_nameRè  Rw   s     Monomer Library directory:s      s     Total number of atoms:s$     More than %d atoms: no processing.s     Number of models:c             ss   t  j ˆ ˆ ƒ ˆ _ x9 t ˆ  ƒ D]+ \ }  } ˆ j j | j ƒ  j ƒ  |  ƒ q" Wˆ j j ˆ ƒ d k so t ‚ d  S(   Ni    (	   R
   R×   t   model_indicesR,   t   set_selectedRE   t   extract_i_seqR¾   R•   (   R  R¼  (   R�  RÉ   R#   (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   set_model_indices"  s    #c             s·   t  j ˆ d ƒ ˆ _ ˆ j j ƒ  }  d |  k r9 d } n d } t |  j ƒ  ƒ } xU t | ƒ D]G \ } } | d k r| q^ n  ˆ j j |  | | | ƒ | | ˆ  | <q^ Wd ˆ  d <d  S(   Ni    RA   i   (	   R
   R×   t   conformer_indicesRÌ  t   altloc_indicesR\   RB  R,   R  (   R  Rf  t   altlocsR_   RC   (   t   altloc_i_conformerRÉ   R#   (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   set_conformer_indices)  s     	 c             sƒ   t  j ˆ  d ƒ ˆ _ xg ˆ j j ƒ  D]V }  |  j ƒ  } | j ƒ  j d ƒ r% ˆ j |  ƒ ˆ j j	 | j
 ƒ  t ˆ ƒ ƒ q% q% Wd  S(   Ni    g      ð?(   R
   R×   t   sym_excl_indicesRÌ  t   residue_groupsRE   t   extract_occt   all_ltR
  R  R  R    (   t   rgt   rg_atoms(   RÉ   R#   t   sym_excl_residue_groups(    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   set_sym_excl_indices6  s    	c             sh   t  j ˆ  d ƒ ˆ _ d }  xF ˆ j j ƒ  D]5 } | j ƒ  } ˆ j j | j ƒ  |  ƒ |  d 7}  q+ Wd  S(   Ni    i   (   R
   R×   t   donor_acceptor_excl_groupsRÌ  R  RE   R  R  (   t   counterR  R  (   RÉ   R#   (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   set_donor_acceptor_excl_groups?  s    	t   min_distance_sym_equivt   special_position_settingst   weak_symmetryi   s¯   Unit cell volume is incompatible with number of atoms.
  Unit cell parameters: %8.3f %8.3f %8.3f %8.3f %8.3f %8.3f
  Check CRYST1 record or other sources of crystal symmetry.
R  Rì   R?   RÇ   R   R˜   RÉ   i    s     Model: "%s"i   s       Same as models       Number of chains:s       Chain: "%s"s         Number of atoms:s         Number of conformers:s         Conformer: "%s"R}  Rô   RÊ  R  R  R  Rž  RË  R³  Rº  R´  RÌ  Rl   RX   RÍ  RÎ  RÆ   RÈ   RÏ  RÐ  RÑ  RÒ  R  Rä   Rå   RÓ  R½  RÔ  RÕ  R¤   R¥   t   Tt   SR`  Rp  R   R   t   SEs4   List of CYS excluded from plausible disulfide bonds:s+     (reason: may participate in coordination)s     %ssB   disulfide_bond_exclusions_selection_string must select CYS sulfur.s+     Automatic links duplication of user inputc            s0   t  d d t ˆ  j ƒ d ˆ  j |  ƒ ‚ d  S(   Ns!   Error processing apply_cif_link:
s     data_link: %s
s"     Missing CIF file for residue: %s(   R   R   t	   data_linkt   pdbres_pair(   t   i_pair(   t   apply(    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   raise_missing_cifø  s    R  c            sy   |  j  } | j d k ru t d | j d t ˆ  j ƒ d ˆ  j d d ˆ  j d d d d	 d
 d d ƒ ‚ n  d  S(   Ni    s   Error processing %s:
s     data_link: %s
s     residue 1: %s
s     residue 2: %s
i   s7     Possible problems giving rise to this error include:
s9       - residue selections in apply_cif_link block swapped
s"       - corrupt CIF link definition
sE       - corrupt or missing CIF modifications associated with this link
s*     If none of this applies, send email to:
s       bugs@phenix-online.org(   RO   RQ   R   RP   R   R  R  (   Rô  RO   (   R  (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   raise_if_corrupt
  s    	t   possible_peptide_linkt   possible_rna_dna_linkt   atom1t   atom2RY   s   %sDuplicate links ignored : %sRr   i   RO   RP   t   apply_cif_link_bondRc   Rd   Rª  R«  R   t   apply_cif_link_angleR®  R¯  t   apply_cif_link_dihedralR²  Rµ  R7  t   apply_cif_link_chiralityR¸  R¹  Rè   t   apply_cif_link_planarityR¼  R½  s*             Unresolved apply_cif_link bonds:s+             Unresolved apply_cif_link angles:s.             Unresolved apply_cif_link dihedrals:s0             Unresolved apply_cif_link chiralities:s0             Unresolved apply_cif_link planarities:s   Unused apply_cif_link: %s %ss    
  Calling carbohydrate callbackt   pdb_interpretation_callbacks1       No PDB interpretation callback found, skippeds     Number of unique models:s9     Residues with excluded nonbonded symmetry interactions:R  Rn   s       t	   max_itemss     Ro   t   curr_sym_excl_indexs         (š   Rº  R»  R¼  R"   R  Rì   R•   t   master_paramst   extractR9   RD   t   peptide_linkR:  R   t   time_building_chain_proxiest   pdb_inpR   t   inputt
   isinstanceRK   R
   t   split_linesRš   t   construct_hierarchyRÌ  t   atom_selection_cachet	   selectionRÄ   t   as_pdb_stringRE   Rl   t   reset_i_seqt   overall_countst   countstJ   raise_residue_groups_with_multiple_resnames_using_same_altloc_if_necessaryt$   raise_improper_alt_conf_if_necessarytB   raise_chains_with_mix_of_proper_and_improper_alt_conf_if_necessaryt(   raise_duplicate_atom_labels_if_necessaryR   t	   root_pathR›   R  t   _site_symmetry_tableR  t   _sites_cart_exactt   use_cdlt   extract_xyzR�  R    R  t	   unit_cellt   volumeRÈ  R  R   t
   parameterst   space_group_infoR   t   non_crystallographic_symmetryRX   t   site_symmetry_tablet   process_apply_cif_modificationt   process_apply_cif_linkR½  RÎ  RÆ   t   extract_elementR8   RÈ   Rû  RÏ  R×   RÐ  RÑ  R,   RK  R�  t   chains_sizeRý  t   dictt$   empty_apply_cif_links_mm_pdbres_dictt   chainst
   conformersR”  R@   RC   R�  Rô   t   nucleic_acid_restraintsR   R  Rž  t   show_max_itemst
   not_linkedR³  Rº  RÕ  t   updatet#   disulfide_bond_exclusions_selectiont*   disulfide_bond_exclusions_selection_stringRÁ   R  R   R   Rª  t   exclusion_distance_cutoffR
  RZ   t   format_atom_recordt!   determine_chemical_element_simplet   apply_cif_linkst   was_usedt	   automaticR  R©  Rí   Rä   Rå  RÔ   R  R>   t   create_linkt   hasattrR$  R%  R  t   is_proxy_setR­  RO   Rª  RS   R°  R®  R2   R¶  R²  R±  RÐ  R»  R¸  R·  R¾  R¿  R5   R{  R+  t   show_residue_groupst6   residues_with_excluded_nonbonded_symmetry_interactionsRÃ   t   fatal_problems_reportt,   process_custom_nonbonded_symmetry_exclusionst   elapsedt   adopt_xray_structuret   extract_xray_structure(A   R#   Rì   R}  R9   R  t   raw_recordsR2  t   atom_selection_stringR  t   crystal_symmetryt   force_symmetryt6   substitute_non_crystallographic_unit_cell_if_necessaryR˜   RÍ  t	   max_atomsR?   t   for_dihedral_referencet   carbohydrate_callbackRÔ  RÖ  t   timert   selt   temp_stringR  R
  R  R  R¥  RŒ  t   n_unique_modelsR  R¼  RÒ  R  t   chainRS  t   j_conformerRÓ  Rä   t   chain_proxiest   exclusion_listt   cystein_sulphur_atoms_excludeRF   RM   t   cs_i_seqt   csaRZ   RØ   t   tmpt!   n_unresolved_apply_cif_link_bondst"   n_unresolved_apply_cif_link_anglest%   n_unresolved_apply_cif_link_dihedralst'   n_unresolved_apply_cif_link_chiralitiest'   n_unresolved_apply_cif_link_planaritiest   mmsR  t   m_i_listRc   R   t   m_j_listRd   R!  t   linkRY   Rô  (    (   R	  R  R�  RÉ   R#   R  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   Ò
  sâ   	 			
							%"				
													!$

			

					
	
			
			

						#		RA   i
   c      	   C   sT   |  j  j d |  j d | d | d | ƒ |  j j d |  j d | d | d | ƒ d  S(   NRl   R?   Rn   Ro   (   RÆ   RÃ   Rl   RÈ   (   R#   Rn   R?   Ro   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRe  ­  s    c         C   sà   d g } xm |  j  | f |  j | f g D]M \ } } | s( | j ƒ  } | d k ru | j d | j ƒ  | f ƒ qu q( q( Wt | ƒ d k r� d  S| j d d d d g ƒ |  j  j ƒ  d k rÓ | j d	 d
 g ƒ n  d j | ƒ S(   Ns'   Fatal problems interpreting model file:i    s   %s: %di   sD     Please edit the model file to resolve the problems and/or supply as:     CIF file with matching restraint definitions, along withsA     apply_cif_modification and apply_cif_link parameter definitionss     if necessary.s4     It is best practice to define the element names ins      columns 77-78 of the PDB file.s   
  (	   RÆ   RÈ   R¿   R
  RÀ   R    R"   R£  RA  (   R#   t   ignore_unknown_scattering_typest%   ignore_unknown_nonbonded_energy_typesR¦  t   regt   ignoreRÂ   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   fatal_problems_message³  s,    	' 
c         C   s   |  j  j ƒ  S(   N(   R2  t   extract_secondary_structure(   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRŒ  Ì  s    c         C   ss   |  j  d  k rl |  j d  k	 s$ t ‚ |  j d  k	 s9 t ‚ |  j j d |  j d |  j j ƒ  d k ƒ |  _  n  |  j  S(   NR  t$   unconditional_general_position_flagsi   (   RB  R"   R  R•   R  RK  Rl   R  (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRK  Ï  s    	c         C   sF   |  j  d  k r? |  j ƒ  j d |  j j ƒ  d |  j ƒ |  _  n  |  j  S(   NRF  R  (   RC  R"   RK  t   apply_symmetry_sitesR  RF  R  (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   sites_cart_exactÚ  s
    c         C   s[   t  j |  j j ƒ  t ƒ } x9 |  j D]. } | j | k r% | j | j ƒ  t	 ƒ q% q% W| S(   N(
   R
   t   boolRl   R›   RD   RÎ  RÎ   R  RÙ   R8   (   R#   RÎ   R¦  RÚ   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   sel_classificationá  s
    c         C   sã   t  j |  j j ƒ  t ƒ } xÁ |  j D]¶ } | j d k rƒ xž | j D]8 } | j j	 ƒ  d k ro | | | j
 <qD | | | j
 <qD Wq% | j d  k r% xF | j D]8 } | j j	 ƒ  d! k rÇ | | | j
 <qœ | | | j
 <qœ Wq% q% W| S("   NRu  R   Rk  R   R`  R‹  RŒ  Rp  t   O1Pt   O2Ps   O3's   O5'RŽ  R�  s   O3*s   O5*s   O2*s   O2's   O4's   C1's   C2's   C3's   C4's   C5's   O4*s   C1*s   C2*s   C3*s   C4*s   C5*(   R   s   CAR   R`  (   s   RNAs   DNA(   Rp  R’  R“  s   O3's   O5's   OP1s   OP2s   O3*s   O5*s   O2*s   O2's   O4's   C1's   C2's   C3's   C4's   C5's   O4*s   C1*s   C2*s   C3*s   C4*s   C5*(   R
   R�  Rl   R›   RD   RÎ  RÎ   Rg   R°   R   RZ   (   R#   t   backbone_flagt   sidechain_flagR¦  RÚ   RF   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   sel_backbone_or_sidechainè  s$        	c         C   s   |  j  t t ƒ S(   N(   R–  R8   RD   (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   sel_backbone   s    c         C   s   |  j  t t ƒ S(   N(   R–  RD   R8   (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   sel_sidechain  s    c         C   s~   t  j |  j j ƒ  t ƒ } x\ |  j D]Q } | j d k r% x9 | j D]+ } | j j	 ƒ  d k rD t
 | | j <qD qD Wq% q% W| S(   NR‹  RŒ  Rp  R’  R“  s   O3's   O5'RŽ  R�  s   O3*s   O5*(   s   RNAs   DNA(	   Rp  s   O1Ps   O2Ps   O3's   O5's   OP1s   OP2s   O3*s   O5*(   R
   R�  Rl   R›   RD   RÎ  RÎ   Rg   R°   R   R8   RZ   (   R#   R¦  RÚ   RF   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   sel_phosphate  s     	c         C   s~   t  j |  j j ƒ  t ƒ } x\ |  j D]Q } | j d k r% x9 | j D]+ } | j j	 ƒ  d k rD t
 | | j <qD qD Wq% q% W| S(   NR‹  RŒ  s   O4's   C1's   C2's   C3's   C4's   C5's   O2's   O4*s   C1*s   C2*s   C3*s   C4*s   C5*s   O2*(   s   RNAs   DNA(   s   O4's   C1's   C2's   C3's   C4's   C5's   O2's   O4*s   C1*s   C2*s   C3*s   C4*s   C5*s   O2*(   R
   R�  Rl   R›   RD   RÎ  RÎ   Rg   R°   R   R8   RZ   (   R#   R¦  RÚ   RF   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt
   sel_ribose  s     	c         C   sa   | d k s t  ‚ |  j d  k	 s' t  ‚ t j d |  j j d | d |  j ƒ d | ƒ j d | ƒ S(   Ni    t   asu_mappingst   buffer_thicknessR  R   t   primary_selection(   R•   R  R"   R   t   neighbors_fast_pair_generatorR›  R  t   neighbors_of(   R#   t   radiusR�  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt
   sel_within  s    	c         C   s  | j  j ƒ  } | d k r7 | j |  j d d ƒ ƒ nß| d k r_ | j |  j d d ƒ ƒ n·| d k r‡ | j |  j d d ƒ ƒ n�| d k r¯ | j |  j d d ƒ ƒ ng| d k rç | j |  j d d ƒ |  j d d ƒ Bƒ n/| d k r	| j |  j ƒ  ƒ n| d k r+| j |  j ƒ  ƒ në | d k rM| j |  j ƒ  ƒ nÉ | d k ro| j |  j ƒ  ƒ n§ | d k r| j ƒ  j  d k s–t	 ‚ t
 | j ƒ  j  ƒ } | j ƒ  j  d k sÆt	 ‚ |  j j ƒ  j d | d |  j d t ƒ } | j |  j d | d | ƒ ƒ n t St S(   NRu  t   proteinRÎ   t   rnaR‹  t   dnaRŒ  t   watert
   nucleotidet   nuct   backbonet	   sidechaint	   phosphatet   riboset   withint   (R4  t   word_iteratort   callbackt&   expect_nonmatching_closing_parenthesisR   R�  (   s   peptideR¢  (   R¦  R§  (   R  RC  R
  R‘  R—  R˜  R™  Rš  t   popR•   RA  RÌ  R7  t   selection_parsert   _selection_callbackR8   R¡  RD   (   R#   t   wordR®  t   result_stackt   lwordR   Rs  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR³  &  s@    		"c         C   s=   | d  k r |  j j ƒ  } n  | j d | d | d |  j ƒ S(   NRE  t   optionalR¯  (   R"   RÌ  R7  R8  R³  (   R#   RE  t   cacheR·  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR8  I  s     	c         C   s8   |  j  d | d | d | ƒ } | d  k r. d  S| j ƒ  S(   NRE  R¸  R·  (   R8  R"   RÁ   (   R#   RE  R¸  R·  R¦  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRÁ   P  s    c         C   sd  i  |  _  |  j } d  } xE|  j j D]7} | j d  k r@ q% n  | d IJ| d I| j IJ| j j | j ƒ } | d  k r  | Jt d | j d d ƒ ‚ n  | d I| j	 IJ| d  k rÑ |  j
 j ƒ  } n  |  j d | d | d	 d
 ƒ j ƒ  } t ƒ  } x+ | D]# }	 | j | |	 j d t ƒ ƒ qWx- | D]% }
 |  j  j |
 g  ƒ j | j ƒ q3Wq% Wd  S(   Ns     apply_cif_modification:s       data_mod:s&   Missing CIF modification: data_mod_%s
s<     Please check for spelling errors or specify the file name
s2     with the modification as an additional argument.s       residue_selection:R¸  t   scope_extractR  t   residue_selectionR  (   R  Rl   R"   R9   t   apply_cif_modificationt   data_modR  RÔ   R   Rº  RÌ  R7  t   phil_atom_selectionRÁ   R  R  RI   R8   R	  R
  (   R#   Rì   R?   RE   t	   sel_cacheR  t   modRÁ   t
   pdbres_setRZ   R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRL  V  s4    		 
		!c      	   C   sJ  g  |  _  i  |  _ |  j } d  } x"|  j j D]} | j d  k rI q. n  | d IJ| d I| j IJ| j j | j ƒ } | d  k r© | Jt	 d | j d d ƒ ‚ n  g  } x¨ d d g D]š } t
 | j | ƒ }	 |	 d k ré d  }	 n  | j |	 ƒ |	 d  k	 r¼ | d	 | I|	 IJ| j j |	 ƒ }
 |
 d  k rV| Jt	 d
 |	 d d ƒ ‚ qVq¼ q¼ Wg  d d g D] } d | ^ qg} g  } x+| D]#} | d | It
 | | ƒ IJ| d  k rË|  j j ƒ  } n  |  j d | d | d | ƒ j ƒ  } t ƒ  } t ƒ  } xP | D]H } | | } | j | j d t ƒ ƒ | j | j d t d t ƒ ƒ qWt | ƒ d k r–t | ƒ d k r‡t	 d ƒ ‚ n  t	 d ƒ ‚ n  | j t | ƒ d ƒ qŠWxH t | | ƒ D]7 \ } }	 |	 d  k	 rÁ|  j j | g  ƒ j |	 ƒ qÁqÁW|  j  j t d | d | j d t ƒ ƒ x | D] } i  |  j | <q+Wq. Wd  S(   Ns     apply_cif_link:s       data_link:s   Missing CIF link: data_link_%s
s<     Please check for spelling errors or specify the file name
s*     with the link as an additional argument.Ró  Rô  RA   s	         %s:s&   Missing CIF modification: data_mod_%s
s2     with the modification as an additional argument.t   1t   2t   residue_selection_s       %s:R¸  R¹  R  R  RH   i   s!   Not exactly one residue selected.s;   Selected residue has multiple segid. This is not supported.i    R  R  R^  (   R]  RQ  Rl   R"   R9   t   apply_cif_linkR  Rå  RÔ   R   R>   RÐ  R
  R  RÌ  R7  R½  RÁ   R  R  RI   R8   R    t   listR   R  R	  R   RD   (   R#   Rì   R?   RE   R¾  R  R†  R(  t   mod_attrRó  R¿  Rõ  t	   sel_attrsR  R  RÁ   RÀ  t   pdbres_set_no_segidRZ   RF   R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRM  s  st    			 
 	#			
##	
i   c            s�  d d  l  } d d l m } d d l m }	 m }
 d d l m } m } d d l m	 } |	 d |
 ƒ  ƒ } | ƒ  } d | _
 | j j j ƒ  | _ d | _ | j j j ƒ  | _ | d k r&d	 | _ | | j j | j j ƒ | _ | j d  k r&| | j | j | j ƒ ƒ | _ | r#d
 GHq#q&n  d | _ | rGd GH| j ƒ  n  | j j | j j g } |  j j j d | ƒ r{t St d t d d ƒ d | d | d | g d |  j j d |  j  d |  j! j" ƒ } | j# j$ | ƒ g  } g  } x‘ |  j j j% D]€ } | j j | j& k r+| j j | j& k r+qõn  | j j | j& k rP| j$ | ƒ qõ| j j | j& k rõ| j$ | ƒ qõqõWd „  ‰  ‡  f d †  } d „  } | d k r­t' | ƒ d k r»n  t' | ƒ d k rÐn  t r­|  j( j) ƒ  } g  } xœ | D]” } | j& G| | j& d j* ƒ  G| | j& d j* ƒ  G| j+ GH| | | j ƒ } | d  k rUqòn  | j j ƒ  d$ k rpqòn  | j$ | j j ƒ  ƒ qòW| j, ƒ  | | | d ƒ } q­n  | s·t- Sg  } xÀ | D]¸ } | | | j ƒ } | d  k rîqÄn  | ƒ  } d | _
 | j j ƒ  | _ d | _ | j j j ƒ  | _ d | _. | j j j ƒ  | _/ | d k rfd | _0 n  d | _1 | j$ | ƒ qÄWxÀ | D]¸ } | | | j ƒ } | d  k r±q‡n  | ƒ  } d | _
 | j j ƒ  | _ d | _ | j j j ƒ  | _ d | _. | j j j ƒ  | _/ | d k r)d | _0 n  d | _1 | j$ | ƒ q‡Wt2 d t d d  ƒ d | d | d! | d" |  j j3 d# |  j4 ƒ } | | _5 | S(%   Niÿÿÿÿ(   Rš  (   RÏ  RJ  (   t   chem_link_bondt   chem_link_angle(   t   get_default_bondlengtht   customi   i   t   singles   bond will be maintainedg{®Gáz”?s   Link createdRY   RO   RP   R&  Rc   Rd   Rª  R«  R  R   c         S   sF   | j  |  j d k r! |  j d S| j  |  j d k rB |  j d Sd S(   Ni    i   iÿÿÿÿ(   RZ   RY   (   t   bRØ   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt
   _get_otherñ  s
    c            sI   ˆ  |  | ƒ } x3 | j  ƒ  j  ƒ  j ƒ  D] } | j | k r( | Sq( Wd  S(   N(   RB   RE   RZ   R"   (   RÎ  RØ   RZ   RF   (   RÏ  (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt	   get_otherø  s
     c         S   sª   d d l  m } m } m } | ƒ  } d |  j | f | _ | j ƒ  | d | ƒ } | ƒ  } d | _ d | | _ | j ƒ  | j	 j
 | ƒ | j ƒ  |  j | ƒ } | S(   Niÿÿÿÿ(   R÷   Rž  t   chem_mod_atoms	   DEL_%s_%sRÌ  t   deletes   %s(   t   mmtbx.monomer_library.cif_typesR÷   Rž  RÑ  R$   RK  Rí  t   functionR³   Rj  R
  R  (   Rb  R%   R÷   Rž  RÑ  t   cmt   mmit   mod_atom(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   remove_atomþ  s    	
		

i   i    R¤   R¥   gffffff[@g       @R'  R®  R¯  RX   (   R¤   R¥   (6   t   linking_utilsR™  Rš  RÓ  RÏ  RJ  RÉ  RÊ  t)   mmtbx.monomer_library.bondlength_defaultsRË  Rõ  R$  R°   R   Rö  R÷  R%  Rø  t   typeR  R  R"   t   get_distance2R  Rí  RZ   RÏ  R  Rb  RD   R­  RO   R  R9   Rž  Rª  R
  t   proxiesRY   R    RÌ  RE   Rk   R0   Rr  R8   Rù  Rú  R#  R$  R°  R2   RX   R®  (   R#   R  Rc   Rd   t   ordert   anglesRü  RÙ  Rš  RÏ  RJ  RÉ  RÊ  RË  R†  R-   RY   Rô  t   bonds1t   bonds2RÐ  RØ  RE   Ró   Rà  R®  R2   (    (   RÏ  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR`  ²  sÞ    				 				 		9  
  					 						c         C   s„  d d  l  } d } | j | d ƒ }	 | j | d ƒ }
 t } |	 j sP |
 j rŽ | d j j ƒ  d k rŽ | d j j ƒ  d k rŽ t } qŽ n  t } |	 j s¦ |
 j rä | d j j ƒ  d k rä | d j j ƒ  d k rä t } qä n  t d
 | d | d t d t d | d | d | d d | d ƒ } d } d } xk t	 |  j
 ƒ D]Z \ } } d } | j | k ro| d 7} n  | j | k r‹| d 7} n  | | k rAPqAqAW| | k r·t | _ n x | D] } i  |  j | <q¾W|  j
 j | ƒ | j j | j ƒ } | d  k r
| St t g } | j j ƒ  j d k r;t | d <n  | j j ƒ  j d  k r`t | d <n  g  } xÌ t	 d d g ƒ D]¸ \ } } | | r•qyn  t | j | ƒ } | d k r¼d  } n  | j | ƒ | d  k	 ry| d d | | | f 7} | j j | ƒ } | d  k r1| GHt d | d d ƒ ‚ q1qyqyWxH t | | ƒ D]7 \ } } | d  k	 rE|  j j | g  ƒ j | ƒ qEqEW| S(!   NiÿÿÿÿRA   i    i   R   R   s   O3's   O3*Rp  R  R  R^  R_  R"  R#  R$  R%  i   t   BGCRó  Rô  s	   %s%s: %s
Rr   s&   Missing CIF modification: data_mod_%s
s<     Please check for spelling errors or specify the file name
s2     with the modification as an additional argument.(   R   (   R   (   s   O3's   O3*(   Rp  (   Râ  (   Râ  (   RÙ  t   get_classesRD   t   common_amino_acidR°   R   R8   t   common_rna_dnaR   R,   R]  R  R  R^  RQ  R
  Rå  RÔ   R"   R$  RB   Rý   R>   RÐ  R  R   R   R  R	  (   R#   Rì   R  R  RE   t   indentRü  RÙ  t   outlt   classes1t   classes2R"  R#  t   gaR¾   R  R_   R  R  R†  t   ignore_modsR(  t   mod_iRÆ  Ró  R¿  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   process_custom_linksL  s‚    
    
  	#c         C   so  |  j  d  k	 r' |  j  j |  j ƒ } n  |  j j |  j ƒ } |  j j |  j ƒ } |  j j |  j ƒ } |  j j d | ƒ } |  j	 j |  j ƒ } | j
 d | d |  j ƒ  j |  j ƒ ƒ t j d | ƒ }	 t j d | d | d | d | d	 t j d
 d ƒ d t j | j ƒ  ƒ d t j | j ƒ  d ƒ d | d d d |	 g ƒ 
}
 g  |  j D] } |  j | j ƒ  ^ qL} x! |
 j D] } |	 j | j ƒ quWx |
 j D] } |	 j | ƒ q™W|	 j ƒ  } | d  k	 rCd \ } } x: | j ƒ  D], } | j j ƒ  r| d 7} qá| d 7} qáW| d | | f IJ| d k r:d } qCd } n  d } | j ƒ  j  } | j ƒ  j! } xû | j ƒ  D]í } t j" | | j# | | j | | | j$ ƒ ƒ g d d d d ƒj% } t& | | ƒ } | d  k	 rt| j j ƒ  röd | } n d } | d t' | g g  | j ƒ  D] } | | ^ q| g ƒ I| j j ƒ  sZ| | j In  | JqtqtW| | f S(   NRœ  t   original_sitesRK  R›  R  R  R  R  Rr  Ri  i   t   nonbonded_typest   nonbonded_chargesi    t%   nonbonded_distance_cutoff_plus_buffert   min_cubicle_edgei   t   shell_asu_tabless.     Number of disulfides: simple=%d, symmetry=%dRA   s     R0   R  s   Simple disulfide:%ss   Symmetry disulfide:s       %s %s - %s distance=%.2f(   i    i    ((   R  R"   RÄ   RÐ  R  R  R  R  R›  R  t   process_sites_cartRK  R   t   pair_asu_tableR   t   nonbonded_sorted_asu_proxiesRr  R
   Rš   R›   Rœ   Rl   RI   t   simplet   add_pairRY   t   asut   extract_pair_sym_tablet   iteratort   rt_mx_jit
   is_unit_mxRF  t   fractionalizet   orthogonalizeR-   RZ   t   j_seqR  R=  R  (   R#   t   disulfide_distance_cutoffR?   R  R  R  R  R›  t   sulphur_sites_cartRõ  t   nonbonded_proxiesRZ   Rf   R  t   pair_sym_tablet   n_simplet
   n_symmetryt   sym_pairt   blankst   max_distance_modelt   fract   orthR  t   disulfide_type(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   create_disulfides¡  s„    								& 		
#
5c         C   si   y |  j  d | d | ƒ SWnH t k
 r0 ‚  n5 t k
 rd } t ƒ  } t d | | | f ƒ ‚ n Xd  S(   NRE  R¸  s(   Invalid atom selection:
  %s="%s"
  (%s)(   R8  t   KeyboardInterruptRŸ  R   R   (   R#   t   parameter_nameRE  R¸  RM   t   fe(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR6   é  s     	c            s9  ‡  ‡ f d †  } | d  k r0 t ˆ ˆ  ƒ } n  | d  k r\ | rF d  St d | ƒ  ƒ ‚ n, | t k rˆ | rr t St d | ƒ  ƒ ‚ n  y |  j d | d | ƒ }	 WnQ t k
 rº ‚  n> t k
 r÷ }
 t ƒ  } t d | ƒ  t | ƒ | f ƒ ‚ n X| r5|	 j	 t
 ƒ d k r5t d | ƒ  t | ƒ f ƒ ‚ n  |	 S(	   Nc              s   ˆ j  d ˆ  ƒ S(   Nt   object_name(   t   __phil_path__(    (   R  R¹  (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR  ú  s    s(   Atom selection cannot be None:
  %s=Nones(   Atom selection cannot be Auto:
  %s=AutoRE  R¸  s&   Invalid atom selection:
  %s=%s
  (%s)i    s   Empty atom selection:
  %s=%s(   R"   R>   R   R   R8  R  RŸ  R   R   R¾   R8   (   R#   R¸  R¹  R  RE  t
   allow_nonet
   allow_autot   raise_if_empty_selectionR  R¦  RM   R  (    (   R  R¹  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR½  ò  s2        	 c            sN  g  } ‡  ‡ f d †  } t  ˆ ˆ  ƒ }	 x |	 D]}
 |
 d  k r` | rJ d  St d | ƒ  ƒ ‚ n, |
 t k rŒ | rv t St d | ƒ  ƒ ‚ n  y) | j |  j d |
 d | ƒ j ƒ  ƒ WnQ t k
 rË ‚  n> t k
 r} t	 ƒ  } t d | ƒ  t
 |
 ƒ | f ƒ ‚ n X| r. | j t ƒ d k r. t d | ƒ  t
 |
 ƒ f ƒ ‚ q. q. W| S(	   Nc              s   ˆ j  d ˆ  ƒ S(   NR  (   R  (    (   R  R¹  (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR    s    s(   Atom selection cannot be None:
  %s=Nones(   Atom selection cannot be Auto:
  %s=AutoRE  R¸  s&   Invalid atom selection:
  %s=%s
  (%s)i    s   Empty atom selection:
  %s=%s(   R>   R"   R   R   R
  R8  RÁ   R  RŸ  R   R   R¾   R8   (   R#   R¸  R¹  R  R  R  R  R¦  R  t   string_listRE  RM   R  (    (   R  R¹  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   phil_atom_selection_multiple  s4      ) 	  c      
   C   sÇ   g  } xº | D]² } |  j  d | d | d | d t ƒ j ƒ  } | j ƒ  d k r® t | | ƒ } | j ƒ  d k r‰ t d t | ƒ ƒ ‚ q® t d t | ƒ | j ƒ  f ƒ ‚ n  | j | d ƒ q W| S(	   NR¸  R¹  R  R  i   i    s   No atom selected: %ss>   More than one atom selected: %s
  Number of selected atoms: %d(   R½  RD   RÁ   R›   R>   R   R   R
  (   R#   R¸  R¹  RÇ  R¦  R  RÁ   t   atom_sel(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   phil_atom_selections_as_i_seqs1  s     	c      
   C   s¸   g  } x« | D]£ } |  j  d | d | d | d t ƒ } t | | ƒ } xg t | ƒ D]Y \ } }	 |	 j ƒ  d k rŽ t d t | | ƒ ƒ ‚ n  x |	 D] }
 | j |
 ƒ q• WqS Wq W| S(   NR¸  R¹  R  R  i    s   No atom selected: %s(   R  RD   R>   R,   R›   R   R   R
  (   R#   R¸  R¹  RÇ  R¦  R  RÁ   R  R_   t   i_selRF   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt'   phil_atom_selections_as_i_seqs_multipleE  s    		c      
   C   si  | j  ƒ  d } | } |  j j ƒ  } x= | j D]2 } | j d |  j d | d d | d | ƒ ƒ q/ Wx= | j D]2 } | j d |  j d | d d | d | ƒ ƒ qo Wx= | j D]2 } | j	 d |  j d | d d | d | ƒ ƒ q¯ Wx= | j
 D]2 } | j d |  j d | d	 d | d | ƒ ƒ qï Wx= | j D]2 } | j d |  j d | d
 d | d | ƒ ƒ q/Wd  S(   Nt   .R8  R  Rß  RE  R¸  t	   dihedralst   chiralitiest   planaritiest   parallelities(   R  RÌ  R7  Rß  t   remove_angles_in_placeR6   R  t   remove_dihedrals_in_placeR  t   remove_chiralities_in_placeR  t   remove_planarities_in_placeR   t   remove_parallelities_in_place(   R#   R9   t   geometry_restraints_managert   patht   grmR¸  R6   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt"   process_geometry_restraints_removeX  s$    c            sè  g  } d } t  | j ƒ d k r4 t d | d | ƒ Sˆ d IJ|  j } |  j j ƒ  } |  j j ƒ  } | j ƒ  d }	 |	 }
 | j } | d  t
 g k r· | d k r· | |
 k  r· | }
 n  d } g  d d g D] } d | ^ qÊ ‰ x| j D]t‰  ‡  ‡ ‡ f d	 †  } ˆ  j } | d  k s&| d k  r/d } n  ˆ  j d  k rRˆ d
 IJ| ƒ  qê ˆ  j d k  r†ˆ d IJ| ƒ  ˆ d ˆ  j IJqê ˆ  j d  k rºˆ d IJ| ƒ  ˆ d ˆ  j IJqê ˆ  j d k rˆ d IJ| ƒ  ˆ d ˆ  j IJˆ d ˆ  j IJˆ d | IJqê ˆ  j d k r;t d ˆ  j d d ƒ ƒ ‚ qê |  j d | d ˆ  d ˆ ƒ } ˆ  j d  k rqd } n	 ˆ  j } t j d | d | j ƒ  ƒ } t j d | d ˆ  j d t j d ˆ  j ƒ d | d  | ƒ } | j | ƒ t j d! | d" |  j d# | ƒ } ˆ d$ IJx= d d% g D]/ } ˆ d& | d% I| | j | j ƒ  IJqWˆ d' It | j ƒ IJ| j d( | j ƒ s«t d) t | j ƒ |  j j  ƒ  j! ƒ  f ƒ ‚ n  ˆ d* | j" IJˆ d+ | j IJˆ d, | j# IJˆ d- | j IJˆ d. | j$ IJˆ d/ t j% d | j& ƒ IJ| | j" k  r8| j" } n  | j" |
 k rê ˆ d0 IJ| d% 7} qê qê W| d k r¿|
 |	 k r‹ˆ d1 |	 IJn! ˆ d2 | j d3 ƒ IJˆ d4 IJt d5 | ƒ ‚ n  ˆ d6 It  | ƒ IJt d | d | ƒ S(7   Ni    t   bond_sym_proxiest   bond_distance_model_maxs     Custom bonds:g      à?RÁ  RÂ  t   atom_selection_c       
      s;   x4 ˆ D], }  ˆ d |  t  t ˆ  |  d  ƒ ƒ f IJq Wd  S(   Ns         %s = %s(   R   R>   R"   (   R  (   R-   R?   RÇ  (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   show_atom_selections�  s    s6       Warning: Ignoring bond with distance_ideal = None:s3       Warning: Ignoring bond with distance_ideal < 0:s         distance_ideal = %.6gs-       Warning: Ignoring bond with sigma = None:s+       Warning: Ignoring bond with sigma <= 0:s         sigma = %.6gs         slack = %.6gR  s   %s = %s not implemented.R  t   actionR¸  R¹  RÇ  s   x,y,zR    t   t_denRY   R0   R  R1   t   slackRü  RF  R  R  s	       bond:i   s         atom %d:s         symmetry operation:t   smxsG   The bond symmetry operation "%s" is not compatible with space group %s.s         distance_model: %7.3fs         distance_ideal: %7.3fs         ideal - model:  %7.3fs         slack:          %7.3fs         delta_slack:    %7.3fs         sigma:          %8.4fs-         *** WARNING: EXCESSIVE BOND LENGTH. ***ss     Excessive bond length limit at hard upper bound: length of shortest vector between unit cell lattice points: %.6gs     %s = %.6gt   excessive_bond_distance_limits@       Please assign a larger value to this parameter if necessary.sO   Custom bonds with excessive length: %d
  Please check the log file for details.s!       Total number of custom bonds:('   R    R-   R   Rl   R  RF  t   space_groupt   shortest_vector_sqR2  R"   R   R0  R0   R1   R.  R   t   __phil_path_and_value__R  t   symmetry_operationR	   t   rt_mxR/  R   t   bond_sym_proxyt   sigma_as_weightR
  R  RY   Rk   RK   Rü  t   containsRI  t   symbol_and_numberR  RE  t   delta_slackt   weight_as_sigmaR  (   R#   R¾  R9   R?   R*  R+  RE   RF  R3  t   uc_shortest_vectort   max_bond_lengtht   ebdlt   n_excessiveRõ  R-  R0  RY   Rx   Rü  Rf  RÎ  R_   (    (   R-   R?   RÇ  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt&   process_geometry_restraints_edits_bondn  s¾    
		*	#		




									
-

c      
      sö  g  } t  | j ƒ d k r | S|  j d  k r7 g  } n	 |  j } ˆ d IJ|  j } g  d d d g D] } d | ^ qc ‰ x`| j D]U‰  ‡  ‡ ‡ f d †  } ˆ  j d  k rÁ ˆ d IJ| ƒ  qƒ ˆ  j d  k rõ ˆ d	 IJ| ƒ  ˆ d
 ˆ  j IJqƒ ˆ  j d  k sˆ  j d k rIˆ d IJ| ƒ  ˆ d
 ˆ  j IJˆ d ˆ  j IJqƒ ˆ  j d k rtt d ˆ  j	 d ƒ ƒ ‚ qƒ |  j
 d | d ˆ  d ˆ ƒ }	 t j d |	 d ˆ  j d t j d ˆ  j ƒ ƒ }
 t j d |  j d |
 ƒ } ˆ d IJd } xf t |
 j ƒ D]U \ } } ˆ d | d I| | j ƒ  I| | k rN| d 7} ˆ d In  ˆ JqýWˆ d | j IJˆ d | j IJˆ d | j IJˆ d  t j d | j ƒ IJ| d k rËt d! t | ƒ ƒ ‚ n  | j |
 ƒ qƒ Wˆ d" It  | ƒ IJ| S(#   Ni    s     Custom angles:RÁ  RÂ  t   3R,  c       
      s;   x4 ˆ D], }  ˆ d |  t  t ˆ  |  d  ƒ ƒ f IJq Wd  S(   Ns         %s = %s(   R   R>   R"   (   R  (   R2   R?   RÇ  (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR-  ã  s    s4       Warning: Ignoring angle with angle_ideal = None:s.       Warning: Ignoring angle with sigma = None:s         angle_ideal = %.6gs,       Warning: Ignoring angle with sigma <= 0:s         sigma = %.6gR  s   %s = %s not implemented.R.  R¸  R¹  RÇ  RY   R4   R  R1   R  R  s
       angle:s         atom %d:i   s   # SPECIAL POSITIONs         angle_model: %7.2fs         angle_ideal: %7.2fs         ideal - model:  %7.2fs         sigma: %.6gsU   Custom angle involves %d special position%s:
  Please inspect the output for details.s"       Total number of custom angles:(   R    R2   RX   R"   Rl   R4   R1   R.  R   R5  R  R   R%  R9  R  R,   RY   Rk   t   angle_modelRE  R=  R  R   R
  (   R#   R¾  R9   R?   R¦  RX   RE   Rõ  R-  RY   Rf  RØ   t	   n_specialR_   RZ   (    (   R2   R?   RÇ  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt'   process_geometry_restraints_edits_angleØ  sn     		
	&



						
"
c         C   sL  g  } t  | j ƒ d k r | S|  j d  k r7 g  } n	 |  j } d g } | d IJxÜ | j D]Ñ } | j d  k s� | j d k r” t d d ƒ ‚ n  |  j d | d | d | ƒ } g  }	 x* | D]" }
 |	 j t j	 d	 | j ƒ ƒ q¿ Wt j
 d
 | d t j |	 ƒ ƒ } t j d |  j d | ƒ } | j | ƒ q] W| d It  | ƒ IJ| S(   Ni    R6   s     Custom planarities:s7   Custom planarity sigma is undefined or zero/negative - s'   this must be a positive decimal number.R¸  R¹  RÇ  R1   RY   RX  R  R  s'       Total number of custom planarities:(   R    R5   RX   R"   R1   R   R  R
  R   R9  R^  R
   R_  R  (   R#   R¾  R9   R?   R¦  RX   RÇ  R5   RY   RX  RZ   R  R;   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt+   process_geometry_restraints_edits_planarity  s6     			
					c      
   C   s8  g  } t  | j ƒ d k r | S| d IJxò | j D]ç } | j d  k sW | j d k rj t d d ƒ ‚ n+ | j d k r• t d | j d ƒ ƒ ‚ n  |  j d | d	 | d
 d g ƒ } |  j d | d	 | d
 d g ƒ } | j } | j }	 t	 j
 d | d | d | d |	 ƒ }
 | j |
 ƒ q3 W| d It  | ƒ IJ| S(   Ni    s     Custom parallelities:s9   Custom parallelity sigma is undefined or zero/negative - s'   this must be a positive decimal number.R  s   %s = %s not implemented.R.  R¸  R¹  RÇ  R.   R/   RY   Rc  R  t   target_angle_degs)       Total number of custom parallelities:(   R    R7   R1   R"   R   R.  R5  R  RH  R   Rd  R
  (   R#   R¾  R9   R?   R¦  R7   RY   Rc  R  RH  R  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt-   process_geometry_restraints_edits_parallelity6  s2    
						c      
   C   si  |  j  j ƒ  } g  } g  } t | j ƒ d k rJ | d t | j ƒ IJn  x| j D]} | j d k  rx t d ƒ ‚ n  |  j d | d | d d d t ƒ } xT t | | ƒ D]C \ } }	 | | @j	 t
 ƒ s¬ t d	 d
 d | j |	 f ƒ ‚ q¬ q¬ W| j | ƒ | j | j ƒ |  j j j |  j j j |  j j j |  j j j g }
 d d d d g } g  } x t |
 ƒ D]ò \ } } | | | j k r�qkn  xÊ t | ƒ D]¼ \ } } x­ | j D]¢ } | | r³| | f | k r,| d | | | f IJ| d IJx, | j D]! } | d |  j | j ƒ  IJqWq³n  | j | j 9_ | j | | f ƒ Pq³q³Wq�WqkWqT Wd S(   s"  
    Scale the weights for selected basic geometry restraints for given
    atom selections.  This allows geometry to be manually tightened or
    loosened for problematic atoms, without making global changes to the
    geometry target weight or editing CIF files.  Since this is still somewhat
    dangerous, atom selections are checked for overlap, and each restraint
    proxy will be modified no more than once.

    Note that planarity proxies are currently left alone, since they have
    an array of weights instead of a scalar value.
    i    s+   Scaling restraint weights for %d selectionss-   scale_restraints.scale must be at least zero.R¸  R¹  R  R6   R  s3   Error scaling selected restraint weights: the atom s;   selection "%s" overlaps with at least one other previously s   defined atom selection ("%s").R2   R±  R·  R-   s4     skipping %s restraint proxy #%d - already modifieds     atoms involved:s       %sN(   RÌ  R7  R    t   scale_restraintst   scaleR   R½  R8   R   t   all_eqRD   R6   R
  RÏ  R2   RÝ  R±  R·  R  R,   t   apply_toRY   Rl   RI   R  (   R#   R9   R?   R¾  t   other_selectionst   other_selection_strst   scale_paramsR8  Rà  t	   other_strt   proxy_listst   proxy_typest   modified_proxiesR:   RÝ  R`   R  RZ   t   i_seq_2(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt!   process_geometry_restraints_scaleV  sZ    		


c         C   s”   |  j  j ƒ  } |  j d | d | d | ƒ } |  j d | d | d | ƒ | _ |  j d | d | d | ƒ | _ |  j d | d | d | ƒ | _ | S(   NR¾  R9   R?   (	   RÌ  R7  RB  RF  t   angle_proxiesRG  t   planarity_proxiesRI  t   parallelity_proxies(   R#   R9   R?   R¾  R¦  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt!   process_geometry_restraints_edits‘  s    				c            s‹  |  j  ‰  ‡  f d †  } |  j j ƒ  } |  j j ƒ  } | j ƒ  d } | } d }	 d }
 g  } xÔ| j ƒ  D]Æ} | j | j g } | j } | d  k s¤ | d k  r­ d } n  | j
 d  k rÖ | d IJ| | | ƒ qk | j
 d k r| d IJ| | | ƒ | d | j
 IJqk | j d  k rJ| d IJ| | | ƒ | d | j
 IJqk | j d k r£| d IJ| | | ƒ | d | j
 IJ| d	 | j IJ| d
 | IJqk t j d d d | j ƒ  ƒ } t j d | d | j
 d t j d | j ƒ d | d | ƒ } | j | ƒ t j d | d |  j d | ƒ } | j | k rQ| d IJ|	 d 7}	 n  | r| d IJx= d d g D]/ } | d | d Iˆ  | j | j ƒ  IJqnW| d | j IJ| d | j
 IJ| d | j IJ| d | j IJ| d | j IJ| d  t j d | j ƒ IJn  |
 | j k  rk | j }
 qk qk W|	 d k rb| d! | IJt d" |	 ƒ ‚ n  | d# It | ƒ IJt d$ | d% |
 ƒ S(&   Nc            s3   x, |  D]$ } | d ˆ  | j  ƒ  j ƒ  IJq Wd  S(   Ns        %s(   t   fetch_labelsRk   (   RY   R?   RZ   (   RE   (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt
   show_atoms   s    g      à?i    s6       Warning: Ignoring bond with distance_ideal = None:s4       Warning: Ignoring bond with distance_ideal <= 0:s         distance_ideal = %.6gs-       Warning: Ignoring bond with sigma = None:s+       Warning: Ignoring bond with sigma <= 0:s         sigma = %.6gs         slack = %.6gR    s   x,y,zR/  RY   R0   R  R1   R0  Rü  RF  R  R  s-         *** WARNING: EXCESSIVE BOND LENGTH. ***i   s       hydrogen bond:s         atom %d:s         distance_model: %7.3fs         distance_ideal: %7.3fs         ideal - model:  %7.3fs         slack:          %7.3fs         delta_slack:    %7.3fs         sigma:          %8.4fss     Excessive bond length limit at hard upper bound: length of shortest vector between unit cell lattice points: %.6gsQ   Hydrogen bonds with excessive length: %d
  Please check the log file for details.s!     Total number of hydrogen bonds:R*  R+  (   Rl   R  RF  R3  R4  t   get_bond_restraint_datat   donor_i_seqt   acceptor_i_seqR0  R"   R0   R1   R	   R7  R/  R   R8  R9  R
  R-   R  R  RY   Rk   RE  R<  R=  R  R   R    R   (   R#   t   bonds_tableR?   Rü  R\  RF  R3  R>  R?  RA  R+  R*  R-   RY   R0  Rü  Rf  RÎ  R_   (    (   RE   sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   process_hydrogen_bondsž  sŠ    			



						

-c         C   s  |  j  j ƒ  } t j d d d | j ƒ  ƒ } t } xÈ | D]À \ } }	 | rj | rj | J| d IJt } n  | r¡ | d |  j | j ƒ  |  j |	 j ƒ  f IJn  y | d j	 | |	 | ƒ Wq: t
 k
 rù }
 | d IJ| d IJ| d	 t |
 ƒ IJq: Xq: Wd  S(
   NR    s   x,y,zR/  s.     Custom nonbonded exclusions (H-bonds, etc.):s
       %s  %si   s-       WARNING: could not process nonbonded pairs       Original error:s         %s(   R  R3  R	   R7  R/  RD   R8   Rl   RI   Rø  R{  RK   (   R#   R?   t   exclude_pair_indicesRó  Rü  R3  Rü  t   have_headerRZ   R   RM   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt#   process_custom_nonbonded_exclusionsé  s"    
	

c      
   C   sÇ  t  } d  } d  } x¡|  j j D]“} | d  k r7 q n  | d  k rj |  j j ƒ  } |  j j ƒ  d k } n  |  j d | d |  j d d d | ƒ } | d  k	 r | j	 ƒ  } | sÆ | J| d IJt
 } n  | d I| IJ| d	 I| j ƒ  IJ|  j j | ƒ }	 | j ƒ  |	 j d
 ƒ }
 |
 d
 k rŽ|
 d k r8d } n d } | d |
 | | f IJ| j |	 d
 k ƒ d
 } | d I|  j | j ƒ  IJn  | j | ƒ } | j t
 ƒ } | d
 k rÿ| d t | ƒ IJ| j | ƒ d
 } | d I|  j | j ƒ  IJn  t t |  j ƒ j t | ƒ ƒ ƒ } t | ƒ d
 k r’t | ƒ d k rT| d IJn | d t | ƒ IJ| d
 } | d I|  j | j ƒ  IJn  | d 7} |  j j | | ƒ q q W| rÃ| Jn  d  S(   Ni   R¸  R¹  R  t$   custom_nonbonded_symmetry_exclusionsRE  s'     Custom nonbonded symmetry exclusions:s       Atom selection:s         Number of atoms selected:i    RA   Rx   s?         WARNING: %d atom%s in previous symmetry exclusion group%ss           Example:s,         WARNING: %d atom%s with full occupancys-         WARNING: one atom at a special positions,         WARNING: %d atoms at special positions(   RD   R"   R9   Re  RÌ  R7  Rl   R  R½  RÁ   R8   R›   R  RÄ   R¾   RI   R   R\   R  RX   t   intersectionR    R  (   R#   R?   R-  Rc  R¾  t   sel_full_occt
   sel_stringRs  t   iselt   prev_sym_excl_indicest   n_prevRx   RZ   t   sel_sel_full_occt
   n_full_occt   sp(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRf  þ  sh    			
	 	  $
 
c         C   s÷   d d l  m } g  } | | j | j ƒ  j ƒ  d t ƒ} |  j j | j ƒ } | j	 ƒ  } g  | D] } t
 | j ƒ ^ qb } | j t | ƒ ƒ }	 x^ | |	 j D]O }
 |
 j } | j d d ƒ } | j | ƒ }
 |
 d k	 r  | j |
 j ƒ q  q  W| S(   sA    Return i_seqs of atoms in planar groups for given atom_group r. iÿÿÿÿ(   t(   residue_name_plus_atom_names_interpretert   return_mon_lib_dna_nameR>  R=  N(   t	   iotbx.pdbRo  Rý   RE   t   extract_nameR8   Rì   Rï  t   work_residue_nameR¿  R    RZ  t   indexR=  R³   R¯   Rì  R"   R
  RZ   (   R#   R"  Ro  RY   t   rnpaniR¿  t   planest   xt   plengthst   nmaxRØ   R­  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   get_i_seqs_from_na_planes5  s     !	"	c   `   1   C   s¬  |  j  d  k	 s t ‚ t ƒ  } | d  k	 r= |  j | | ƒ n  t j d |  j j ƒ  d |  j	 j
 j ƒ } t j d |  j d |  j	 j
 j ƒ } | j ƒ  d k r¶| |  j  j ƒ  j ƒ  d k j ƒ  } | j ƒ  d k r¶|  j j s—|  j } |  j	 j
 j } | d IJxy | D]q } | | } t j d |  j d | ƒ } | d	 | j | j f IJx) | j D] } | d
 | | j ƒ  IJqXWq	Wt d | j ƒ  ƒ ‚ q³t j | ƒ d |  j _ q¶n  |  j d |  j j d | ƒ \ } } d  } d  } | j ƒ  rFt j j  j! ƒ  } t j j  j" d d™ ƒ } | j# dš ƒ | j$ | ƒ | |  j d <n  | } | j ƒ  d k ryt | t j | ƒ ƒ } n  | d  k rŽd  }  n* |  j% d  | d | ƒ }  t | |  j& ƒ } |  j  j' d! | d" ƒ }! |! j( d# |  j d$ |  j) ƒ  ƒ t* j+ d% |! ƒ }" t j, |" |  j	 j
 j ƒ | j- d }# |# j. d  k	 s=t ‚ |# j. d k sRt ‚ |# j/ d  k	 sgt ‚ |# j/ d k s|t ‚ t0 }$ xZ| j1 ƒ  D]L}% |  j2 |% j3 } |  j2 |% j4 }& | j5 d& | d' |& d  t j6 d( |# j. d) d* |# j/ d ƒ ƒ |" j7 d& | d' |& d+ |% j8 ƒ t9 |% j8 ƒ }' |' s.d, }' n  |  j j: r“|' d- k r“|  j | }( |  j |& }) |( j; ƒ  }* |) j; ƒ  }+ |* j< d. ƒ }, |+ j< d. ƒ }- |, d  k	 s¨t ‚ |- d  k	 sºt ‚ d* d› }. t j= d0 |, j3 | |& g d1 d2 d) |. ƒ } |  j	 j> j? d | ƒ t j= d0 | |& |- j3 g d1 d2 d) |. ƒ } |  j	 j> j? d | ƒ t j@ d0 |, j3 | |& |- j3 g d1 d3 d) d4 d5 d ƒ } |  j	 jA j? d | ƒ n  | d  k	 r�| j# d |  j | jB ƒ  |  j |& jB ƒ  |' f ƒ tC }$ q�q�W|$ r9t j j  j! ƒ  } t j j  j" d dœ ƒ } | j# d� ƒ | j$ | ƒ | |  j d <n  |  d  k	 r9xp |  jD D]e } | jE d k rjqOn  | j \ } }& | j5 d& | d' |& d  | ƒ |" j7 d& | d' |& d+ | j8 ƒ qOWx' |  jF D] } |  j	 j> j? d | ƒ qÂWx' |  jG D] } |  j	 jH j? d | ƒ qìWx* |  jI D] } |  j	 jJ j? d | ƒ qWn  |  j jK }/ |  j jL }0 g  }1 |  jM jN ƒ  }2 xí |0 jO D]â }3 |3 jP d  k	 rp|3 jQ d  k	 rp|  j |2 j |3 jP ƒ d }( |  j |2 j |3 jQ ƒ d }) |( j; ƒ  }* |) j; ƒ  }+ tR |* ƒ }4 tR |+ ƒ }5 d* |0 jS jT d }6 t jU d0 t jV |4 ƒ d6 t jV |5 ƒ d) |6 ƒ } |1 jW | ƒ qpqpWx$ |1 D] } |  j	 jJ j? d | ƒ q]Wg  }7 t0 }8 d7 d8 d9 g }9 |/ jX rËx' |9 D] }: tY |/ |: tC ƒ tC }8 q¨Wn  x* |9 D]" }: tZ |/ |: t0 ƒ rÒtC }8 PqÒqÒW|0 j[ r	|0 j\ j[ r	tC }8 n  |8 r‹	|  j] | |" |  j	 d: |0 d7 |/ j^ d8 |/ j_ d9 |/ j` d; |/ ja d< |/ jb d= |/ jc d> |/ jd d? |/ je d | ƒ
}7 n  |7 d k r|
|0 jf j[ r|
|0 j[ r|
d@ dA lg mh }; dB |0 jf jT d }6 x¦ |7 D]› }< |  j |< d j; ƒ  }* |  j |< d* j; ƒ  }+ g  }4 |4 |  jR |* ƒ 7}4 |4 |  jR |+ ƒ 7}4 t ji d0 |4 dC |6 g tj |4 ƒ ƒ } |  j	 jH j? d | ƒ q×	Wq|
n  tj |7 ƒ d k r—
d  }7 n´ t0 rKtk dD dE ƒ }= x� |7 D]‡ }> |  j |> d jl ƒ  }? |  j |> d* jl ƒ  }@ dF |? dG dH !|? dI dJ !|? dK dL !|@ dG dH !|@ dI dJ !|@ dK dL !f }A |= jm |A ƒ q³
W|= jn ƒ  n  g  }B dB |0 jf jT d }6 xö|0 jo D]ë}C |C jP d  k	 ro|C jQ d  k	 ro|  j |2 j |C jP ƒ d }( |  j |2 j |C jQ ƒ d }) |( j; ƒ  }* |) j; ƒ  }+ |  jR |* ƒ }4 |  jR |+ ƒ }5 t ji d0 |4 |5 dC |6 g tj |4 |5 ƒ ƒ } |  j	 jH j? d | ƒ |* jp G|+ jp GH|* jp dM k s‘|* jp dN k s‘|* jp dO k s‘|* jp dP k r¦|* }D |+ }* |D }+ n  |+ jp dM k sÄ|+ jp dO k rÖdž dŸ d  g }E n d¡ d¢ g }E xu |E D]j \ }F }G |* j< |F ƒ }( |+ j< |G ƒ }) |( d  k	 ré|) d  k	 ré|B jW tq tr |( j3 |) j3 g ƒ ƒ ƒ qéqéWqoqoWdB |0 j\ jT d }H tj |B ƒ d k r™|7 d  k r™g  }7 n  x® |B D]¦ }I |I |7 k r |7 jW |I ƒ t js d0 |I d( |0 j\ jt d) |H dY |0 j\ ju ƒ } | j5 d& |I d d' |I d* d  | ƒ |" j7 d& |I d d' |I d* d+ tv jw dZ d- ƒ ƒ q q W|  j	 jx ƒ  |  jy jx ƒ  |  jz jx ƒ  d  |  j	 j
 _ t* j{ j| d[ |" d\ d" ƒ }J | d  k	 rÆ|  j} d | d] | d^ |J ƒ n  g  |J D] }K |K j~ ƒ  ^ qÍ}L d  }M d  }N |  j j j€ r[|  j j j� s"t d_ d` ƒ ‚ n  t‚ jƒ |  jM da | d | ƒ}M t‚ j„ d  |  j j ƒ }N n  t… j j† db |M dc |N dd | de | df | dg | ƒ }O t‡ dh | di |	 dj |  j jˆ dk |  j j‰ dl |  j jŠ dm |  j j‹ ƒ }P |  j jŒ d  k rýdn }Q |	 r	dn }Q q	n |  j jŒ }Q t j† j† do |  j  dp |  j� dq |  jŽ dr |  j� ds |  j� d$ |  j) ƒ  dt | du |L dv |P dw |  jz j‘ dx |  jz j’ dy t j“ dz |Q ƒ d{ |  j j” d| |  j j• d} |  j	 j> j d~ |  j	 jA j d |  j	 j– j d€ |  j	 jH j d� |  j	 jJ j d‚ |O dƒ |
 d„ |  j j d… | d† |7 ƒ }R | d  k	 r9|  j— d  | d‡ |R ƒ n  | j˜ ƒ  |  _™ |  j jš }S |S t› k rK|  jœ j� ƒ  dˆ k r½x½ |  jœ jž ƒ  D]+ }T |T jŸ d‰ ƒ r…dŠ |T k r…tC }S Pq…q…Wt0 }S nx |  jœ j� ƒ  d‹ k r/x` |  jœ j  j¡ ƒ  D]= \ }U } | j¢ dŒ ƒ }V |V d  k	 rådŠ |V k råtC }S PqåqåWt0 }S n t0 }S |S rK| d� IJqKn  |S rúd@ dŽ l£ m¤ }W d@ d� l£ m¥ }X d@ d  l¦ }Y d@ d� l§ m¨ }Z |Y j¦ ƒ  }[ |W |R ƒ }\ |X |  jM |R d‘ |\ d | d’ tC ƒtC |  _© |Y j¦ ƒ  |[ }] | d“ |Z jª |] ƒ IJn  tZ |  j d” t0 ƒ r¨d@ d• l£ m« }^ d@ d  l¦ }Y d@ d� l§ m¨ }Z |Y j¦ ƒ  }[ d  }_ |^ j¥ |  jM |R d– |_ d— |  j j¬ d | d’ tC ƒ|Y j¦ ƒ  |[ }] | d˜ |Z jª |] ƒ IJn  |R S(£   NRÉ   t   bond_simple_proxiesR  RÝ  i    g      à?s     Bonds with excessive lengths:R  s&       Distance model: %.6g (ideal: %.6g)s         %ss*   Number of bonds with excessive lengths: %di   R  R?   t   headers   _chem_link_bond.link_ids   _chem_link_bond.atom_1_comp_ids   _chem_link_bond.atom_id_1s   _chem_link_bond.atom_2_comp_ids   _chem_link_bond.atom_id_2s   _chem_link_bond.types   _chem_link_bond.value_dists   _chem_link_bond.value_dist_esdt   SSRÁ  R¶  RÂ  RÍ  s   2.031s   0.020t   link_SSR9   Rœ  i   Rî  RK  R›  RZ   R   R0   R  i   Rü  R  s   x,y,zt   CBgÍÌÌÌÌÌü?RY   R4   g33333óY@g     €V@g{®Gáz„?R5  Rc  t   link_metalst   link_residuest   link_carbohydratesRÊ  t   amino_acid_bond_cutofft   metal_coordination_cutofft   carbohydrate_bond_cutofft   inter_residue_bond_cutofft   second_row_bufferiÿÿÿÿ(   Ro  g      ð?RX  s
   dashes.pmlt   wsL   dist chain "%s" and resi %s and name %s, chain "%s" and resi %s and name %s
i   i   i   i   i   i   R   Rp  s    DCs    DAt   N2t   O2t   N1t   N3t   O6t   N4t   O4t   N6R0  R    Rõ  t	   max_shellRb  Ró  s-   You may not use Ramachandran restraints when s   discard_phi_psi=False.R6   t   ramachandran_proxiest   ramachandran_lookupt   hydrogen_bond_proxiest   reference_managert   hydrogen_bond_paramst   den_managerR}  R~  Rg  Ri  Rj  Rk  id   Rl  R  R  R  R  t   bond_params_tablet   shell_sym_tablesRr  Rï  Rð  t   nonbonded_functiont   c_rept   nonbonded_distance_cutofft   nonbonded_bufferRW  t   dihedral_proxiest   chirality_proxiesRX  RY  t   generic_restraints_managert   external_energy_functiont   max_reasonable_bond_distancet   plain_pairs_radiust   hbonds_in_bond_listR&  R   s
   REMARK   3t   CDLt   mmcifs*   _refine.pdbx_stereochemistry_target_valuess-     Switching to conformation-dependent library(   t   setup_restraints(   t   update_restraints(   R5  t   cdl_proxiesRü  sM     Conformation dependent library (CDL) restraints added in %0.1f %sseconds
  t   rdl(   t   rotamerst   rdl_proxiest   data_versionsH     Rotamer dependent library (RDL) restraints added in %0.1f %sseconds
  (   s   _chem_link_bond.link_ids   _chem_link_bond.atom_1_comp_ids   _chem_link_bond.atom_id_1s   _chem_link_bond.atom_2_comp_ids   _chem_link_bond.atom_id_2s   _chem_link_bond.types   _chem_link_bond.value_dists   _chem_link_bond.value_dist_esd(   R}  RÁ  s   SGRÂ  s   SGs   singles   2.031s   0.020gìQ¸…ë	@(   s   _chem_link_bond.link_ids   _chem_link_bond.atom_1_comp_ids   _chem_link_bond.atom_id_1s   _chem_link_bond.atom_2_comp_ids   _chem_link_bond.atom_id_2s   _chem_link_bond.types   _chem_link_bond.value_dists   _chem_link_bond.value_dist_esd(   R}  RÁ  s   SGRÂ  s   SGs   singles   2.031s   0.020(   R‰  RŠ  (   R‹  RŒ  (   R�  RŽ  (   RŒ  R‹  (   R�  R�  (­   R  R"   R•   R   RV  R   t   extract_bond_paramsR  R›   RÏ  R  RÝ  t   bond_distances_modelRF  R4  RÁ   R9   t#   proceed_with_excessive_length_bondsRl   R-   R  R0   RY   R[  R   R
   R=  R¢  R  R  RÖ  R»  R¼  t   blockt   loopt   add_rowt   add_loopRZ  R+  R›  Rô  RK  R   Rõ  t	   add_pairsRª  R  R  RD   Rû  RÐ  RZ   R   RW  t   bond_paramsRø  Rü  RK   t0   add_angle_and_dihedral_restraints_for_disulfidesRB   Rì  R%  R2   t   add_if_not_duplicatedRC  R±  t   pdb_label_columnsR8   R*  R  RW  RX  R5   RY  R7   t   automatic_linkingRT  RÌ  R7  t   stacking_pairt   base1t   base2Rz  RÂ  R1   Rd  R×   R
  t   link_allRÓ   R>   RÁ  t   bondst   process_nonbonded_for_linksR€  R�  R‚  Rƒ  R„  R…  R†  t   buffer_for_second_row_elementst   basepair_planarityRq  Ro  R^  R    t   openRI   t   writet   closet	   base_pairRý   R  R\   R  t   target_valueR0  R	   R7  RŸ   RÆ   RÈ   t   coordination_sequencesRó  Rd  Rú  R0  t   ramachandran_restraintsR:  R   t   extract_proxiest   lookup_managerR3  t   managerRŠ  t   vdw_1_4_factort   default_vdw_distancet   min_vdw_distanceRk  t   nonbonded_weightR  R  R  R  R—   Rž   t   prolsq_repulsion_functionRœ  R�  R·  R)  Rg  t)   time_building_geometry_restraints_managert   cdlR   R2  t	   file_typet   remark_sectionR!   t	   cif_modelt	   iteritemsRÔ   t$   mmtbx.conformation_dependent_libraryR§  R¨  t   timet   libtbxR5  RD  t
   greek_timeR«  t   rotamer_data_version(`   R#   R}  t   disulfide_linkR£  t   params_editst   params_removeR”  R–  t   custom_nonbonded_exclusionsR~  R¡  t   ramachandran_atom_selectionR—  R•  R?   Rr  R˜  R¯  t   excessive_bondsRE   RÝ  t   i_proxyR  R-   RZ   t   disulfide_sym_tablet   max_disulfide_bond_distancet   disulfide_cif_blockt   disulfide_cif_loopt	   cif_blockR²  t   max_bond_distancet   processed_editsR›  t   bond_asu_tablet   disulfide_bondt   addedR  R   t   sym_strR®  R¯  t   r1t   r2t   cb1_atomt   cb2_atomt   angle_weightt	   al_paramsRÊ  t   user_parallelity_proxiest   selection_cacheRn  RY   Rc  R  R¤  t	   any_linkst
   link_attrsR  Ro  t	   bond_seqst   dashesRú  R›  Rœ  t   pst
   new_hbondst   bpt   tt   link_atom_names_listt   n1t   n2t   bond_weightt   hbRó  t   shell_asu_tableR™  R’  R“  R   Rr  RÐ  R¦  RD  Ry   t   cif_keyt   targetR§  R¨  RÙ  R5  t   t0R©  t   cdl_timeR«  R¬  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt%   construct_geometry_restraints_managerH  s    					

	 	       	
								
	
							
       	 																	9	
	3		
	

		
															t   ?c         C   sÈ  d d l  m } d d l  m } d d l m } |  j d  k	 sE t ‚ | j d |  j ƒ } | j	 ƒ  j
 d |  j ƒ  ƒ } |  j ƒ  } | d  k	 r· | j ƒ  j ƒ  | j ƒ  k s· t ‚ n  |  j j } | d  k rä |  j d t ƒ } n  d  }	 x×t | ƒ  |  j | | ƒ D]º\ }
 } } } | j |
 k s-t ‚ d d l m } | d	 | d
 t d t ƒ } | d  k	 rÎ| j d t ƒ } | d  k	 rÎt | ƒ d k rÎ| d	 | | d
 t d t ƒ } | d  k	 rË| } qËqÎn  | d  k r| d  k rt d | j d t ƒ ƒ ‚ n  | } n  | j ƒ  s/| j | j ƒ } n | j  | j	 ƒ  | j! ƒ } | d  k	 rk| j" d |
 ƒ }	 n  | j# d | j$ d	 | j% ƒ  d | d | d | j& d | d | j' d | j( ƒ d |	 ƒ qW| S(   Niÿÿÿÿ(   t   xray(   t   adptbx(   R¾   R  R  t   strip_symbols(   t   get_standard_labelRP   t   exactR·  R   i    s   Unknown scattering type: %st   cut_after_label_columnsRZ   t	   scatterert   siteRg  t	   occupancyR   t   fpt   fdpt   site_symmetry_ops()   t   cctbxR  R  t	   itertoolsR¾   R  R"   R•   t	   structureRF  Rþ  R�  RK  t   indicesR›   RÆ   R—   t   get_element_symbolsR8   R   Rl   RZ   t   cctbx.eltbx.xray_scatteringR  R®   R    RD   R{  R[  t   uij_is_definedt   b_as_uRÎ  t   u_cart_as_u_start   uijRÔ   t   add_scattererR  RI   t   occR  R  (   R#   t"   unknown_scattering_type_substituteR  R  R¾   R¦  t
   sites_fracRK  RÇ   R  RZ   RF   t	   site_fracR   R  R¢   t   scattering_type_with_chargeRg  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRi  ?  sh    	'					(,   R(   R)   R"   RD   R8   R'   Re  R‹  RŒ  RK  R�  R‘  R–  R—  R˜  R™  Rš  R¡  R³  R8  RÁ   RL  RM  R`  Rí  R  R6   R½  R  R  R  R)  RB  RF  RG  RI  RV  RZ  Ra  Rd  Rf  Rz  R	  Ri  (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR   Ð
  s˜   ÿ É										
	#		C™OH				j	>	 	 	;	L	7	ÿ êc            s2  t  |  ƒ | d k r# | d 7} n  x× |  |  D]Ë } | j ƒ  j ƒ  d k r] ˆ  ˆ d IJn ˆ  ˆ d IJ| j ƒ  ‰ ‡  ‡ ‡ f d †  } | d ƒ ˆ j ƒ  } | d k rÇ ˆ  ˆ d | d IJn | d k rà | d ƒ n  | d k r. | d	 ƒ q. q. Wt  |  ƒ | } | d k r.ˆ  ˆ d
 | IJn  d  S(   Ni   s   residue:s   residue group:c            s/   ˆ |  } ˆ  ˆ d | j  ƒ  | j f IJd  S(   Ns     %s occ=%.2f(   RI   R"  (   R_   RØ   (   R?   Rn   R  (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt	   show_atom  s    
i    i   s     ... (%d atoms not shown)i   iÿÿÿÿs   ... (remaining %d not shown)(   R    t   unique_resnamesR›   RE   (   R  R?   Rn   R,  R  R'  Rõ  (    (   R?   Rn   R  sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRc  v  s&    
R  c           B   s¶   e  Z d	 d	 d	 d	 d	 e d	 d	 e e e d	 d	 e d	 d	 d  „ Z d	 d	 d	 d	 d	 d	 e e e d d d d	 d	 d	 d	 d „ Z d d d „ Z e d „ Z d	 d	 d d „ Z	 d	 d d „ Z
 RS(
   c      %   C   s  | |  _  | |  _ | |  _ | |  _ t d | d | d | d | d | d | d | d |	 d	 |
 d
 | d | d | d | d | d | d | d | d | ƒ |  _ | d  k	 rú |  j j d  k	 rú | d |  j j |  j j d t d |  j j	 j
 ƒ  ƒ f IJn  d  |  _ d  |  _ d  S(   NRì   R}  R9   R  Rj  R2  Rk  R  Rl  Rm  Rn  R˜   RÍ  Ro  R?   Rp  Rq  RÔ  s9     Time building chain proxies: %.2f, per 1000 atoms: %.2fiè  i   (   Rì   R}  R?   Rp  R   t   all_chain_proxiesR"   R1  R=  Rl   R›   t   _geometry_restraints_managert   _xray_structure(   R#   Rì   R}  R9   R  Rj  R2  Rk  R˜   R  Rl  Rm  Rn  RÍ  Ro  R?   Rp  Rq  RÔ  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR'   �  s>    					0	gü©ñÒMbP?g      à?c   #         s6  ˆ  j  j d  k	 r/ˆ  j  j d  k	 r/ˆ  j d  k r/ˆ  j  j d ˆ  j d ˆ  j j d d | d | d | d | d | d	 | d
 | d | d | d | d | d ˆ  j	 ƒ ˆ  _ ˆ  j	 d  k	 r/ˆ  j	 d ˆ  j  j
 IJˆ  j	 J‡  f d †  } | ƒ  ˆ  j	 Jt ˆ  j	 ƒ g  ˆ  j  j D] } | j ƒ  ^ q} ˆ  j j d ˆ  j  j ƒ  d | ƒ } ˆ  j  j } | j j d ˆ  j  j ƒ  d | j j d ˆ  j	 d d d ˆ  j j ƒ | j j d d d ˆ  j  j ƒ  d | d ˆ  j	 d d d | j j d ˆ  j j ƒ } | d  k	 r |
 d  k	 r | |
 k  r t d |
 ƒ ‚ n  ˆ  j	 Jˆ  j j j d ˆ  j  j ƒ  d | j j d ˆ  j	 d d ƒ ˆ  j j j d d d ˆ  j  j ƒ  d | d ˆ  j	 d d d | j j ƒ ˆ  j	 Jˆ  j j j d ˆ  j  j ƒ  d | j j d ˆ  j	 d d ƒ ˆ  j j j d d d ˆ  j  j ƒ  d | d ˆ  j	 d d d | j j  ƒ ˆ  j	 Jˆ  j j! j d ˆ  j  j ƒ  d | j j" d ˆ  j	 d d ƒ ˆ  j j! j d d d ˆ  j  j ƒ  d | d ˆ  j	 d d d | j j# ƒ ˆ  j	 Jˆ  j j$ j d d d ˆ  j  j ƒ  d | d ˆ  j	 d d d | j j% ƒ ˆ  j	 J| j& j d ˆ  j  j ƒ  d | j j' d ˆ  j	 d d ƒ | j& j d d d ˆ  j  j ƒ  d | d ˆ  j	 d d d | j j( ƒ ˆ  j	 J| ƒ  t ˆ  j	 ƒ | rˆ  j	 Jt) ƒ  } ˆ  j j* d ˆ  j  j ƒ  ƒ } | j+ d ˆ  j	 d d ƒ ˆ  j	 d | j, ƒ  IJt ˆ  j	 ƒ n  ˆ  j- s4ˆ  j. d | d  | ƒ n  |	 r,ˆ  j } ˆ  j/ ƒ  } | j ƒ  } | j0 ƒ  } | j1 d | d | d! | ƒ } | j2 } | j3 } | j4 }  | j5 }! ˆ  j	 d" IJd# }" ˆ  j	 |" j6 | ƒ IJd$ }" ˆ  j	 |" j6 | ƒ IJd% }" ˆ  j	 |" j6 |  ƒ IJd& }" ˆ  j	 |" j6 |! ƒ IJq,q/n  ˆ  j S('   NR}  RÝ  R}  R£  RÞ  Rß  R”  R–  Rà  R~  R¡  Rá  R—  R•  R?   s9     Time building geometry restraints manager: %.2f secondsc              s   ˆ  j  d IJd  S(   Nsg     NOTE: a complete listing of the restraints can be obtained by requesting
        output of .geo file.(   R?   (    (   R#   (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   note_geoó  s    R  t   site_labelst   n_slotst   fRn   s     t   excludet   by_valuet   residualR,  si   Bond restraint model distance < %.6g:
  Please inspect the output above and correct the input model file.RE  s>     Time first energy calculation (mainly nonbonded setup): %.2ft   hard_minimum_nonbonded_distancet   nonbonded_distance_thresholdt   hd_sels   
  Nonbonded clashscoresE       Without symmetry operation and solvent-solvent clashes:   {0:.2f}sE       Due to symmetry operation:                                {0:.2f}sE       Solvent-solvent:                                          {0:.2f}sF       Total:                                                    {0:.2f}
(7   R)  R  R"   R  R*  R	  R}  Rì   Rå  R?   RÒ  R@   Rl   RI   t   pair_proxiesR�  R9   t   bond_proxiest!   show_histogram_of_model_distancest   show_histogram_slotst   bond_lengthsR¤  t   show_sortedRU  t"   bond_restraints_sorted_by_residualR   RW  t   show_histogram_of_deltast    bond_angle_deviations_from_idealt(   bond_angle_restraints_sorted_by_residualRž  t$   dihedral_angle_deviations_from_idealt,   dihedral_angle_restraints_sorted_by_residualRŸ  t#   chiral_volume_deviations_from_idealt'   chirality_restraints_sorted_by_residualRX  t'   planarity_restraints_sorted_by_residualR  t   nonbonded_interaction_distancest/   nonbonded_interactions_sorted_by_model_distanceR   t   energies_sitesRí  Rg  Rp  t   clash_guardt   xray_structuret   hd_selectiont   get_nonbonded_clashscoret   nb_clashscore_simplet   nb_clashscore_due_to_sym_opt   nb_clashscore_solvent_solventt   nb_clashscore_all_clashest   format(#   R#   R£  RÞ  Rß  R”  R–  Rà  R~  t   show_energiest   show_nonbonded_clashscoret    hard_minimum_bond_distance_modelR3  R4  R¡  Rá  R—  R•  R,  RF   R-  R6  R9   t   smallest_distance_modelRr  t   energiesR(  t   xrsR  R5  t   nb_clash_infot   clashscore_simplet   clashscore_due_to_sym_opt   clashscore_solvent_solventt   clashscore_all_clashesRx   (    (   R#   sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR&  Ê  s.   	"													
	
							c         C   s7  |  j  j j } | d k r' | | _ n  | j d  k r: d  S|  j } | j ƒ  | j k  j t ƒ } | j	 d  k	 r | | j	 k s¶ | j
 d  k	 rä | t d | j ƒ  j ƒ  ƒ | j
 k rä | j ƒ  } t d | | j | | f ƒ ‚ n  | j ƒ  | k  j t ƒ } | d k r3| j d k r3t d | | f ƒ ‚ n  d  S(   Ng      à?i   s5  %s failure:
  Number of nonbonded interaction distances < %.6g: %d
    Please inspect the histogram of nonbonded interaction distances above
    (or in the log window).
    To disable this error, run the same command again with the following
    additional argument:
      %s.nonbonded_distance_threshold=Nonei    s‘   Number of nonbonded interaction distances < %.6g: %d
  Please inspect the output above (or in the log window) and correct the input
  model file.(   R)  R9   RH  R4  R"   R*  t   nonbonded_model_distancesR¾   R8   t'   max_number_of_distances_below_thresholdt)   max_fraction_of_distances_below_thresholdR=  t    sites_cart_used_for_pair_proxiesR›   R  R   (   R#   R3  R4  R9   t   geot   n_below_thresholdt	   phil_patht'   n_below_hard_minimum_nonbonded_distance(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRH  �  s8     				c         C   sð   |  j  } |  j j d  k	 ré |  j j d  k	 ré |  j d  k ré |  j j ƒ  |  _ |  j j d d g ƒ | d  k	 ré | ré |  j j d | d d ƒ |  j j	 d |  j j d | d d ƒ |  j j ƒ  j
 d t d | d d ƒ t | ƒ qé n  |  j S(	   Nt'   types_without_a_scattering_contributionR
  R/  Rn   s     t   sites_cart_originalRm   t   show_gaussians(   R?   R)  R  R"   R  R+  Ri  RÆ   t   show_summaryt   show_special_position_shiftsRí  RD   R@   (   R#   Rg  R?   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyRI  ¹  s     	
RA   c         C   sÖ   | d  k r t j } n  | d  k	 rF x | D] } | | | IJq+ Wn  |  j j j d | ƒ } | j ƒ  } t | ƒ d k r‘ | d  k	 r‘ d } n  | d k r­ | j | ƒ n% x" | j	 ƒ  D] } | | | IJqº Wd  S(   NR6   i    s     None
RA   (
   R"   Ri   Rj   R)  RÌ  RÄ   R9  R    RÄ  R¢  (   R#   R8  t   header_linesRm   Rn   Ry   t   sub_hierarchyRx   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   show_selected_atomsË  s     		c      	   C   sK   |  j  d | j d |  j j j ƒ  ƒ d d g d | d | ƒ d „  } d  S(   NR8  RÉ   Ri  s   Atoms without NCS restraints:Rm   Rn   c         S   s   d S(   Ns   Clash Score(    (   R#   (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   clash_scoreê  s    (   Rk  t   selection_restrainedR)  Rl   R›   (   R#   t   ncs_restraints_groupsRm   Rn   Rl  (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt!   show_atoms_without_ncs_restraintsß  s    			N(   R(   R)   R"   RD   R'   R8   R&  RH  RI  Rk  Ro  (    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyR  Ž  sP   (´*gü©ñÒMbP?g      à?c
         C   sá  |	 d  k r t j }	 n  t j ƒ  }
 t j ƒ  } g  } g  } xò |  D]ê } t j j | ƒ st t d t	 | ƒ ƒ ‚ n  t
 j j d | ƒ r™ | j | ƒ qC y t j d | ƒ } Wn: t k
 rÅ ‚  qC t k
 rë t d t	 | ƒ ƒ ‚ qC X|	 d t	 | ƒ IJx* |
 | g D] } | j d | d | ƒ qWqC Wg  } xƒ | D]{ } t d |
 d | d | d | d	 | d
 | d | d |	 ƒ } | j d | d | d | ƒ | j ƒ  | r>| j | ƒ q>q>W| rÇ| St | ƒ d k rÝ| Sd  S(   Ns   No such file: %sR  s   Unknown file format: %ss   Processing CIF file: %sR¿  Rì   R}  R9   R˜   Rn  Ro  R?   R~  R3  R4  i    (   R"   Ri   Rj   R   R}  t   osR'  t   isfileR   R   RÖ  R   t   is_pdb_fileR
  t   read_cifR  RŸ  t   process_cif_objectR  R&  RI  R    (   t   argsR9   R˜   Rn  t   return_all_processed_pdb_filesRo  R~  R3  R4  R?   Rì   R}  t   pdb_file_namest   cif_file_namest   argR¿  t   srvt   all_processed_pdb_filesR  t   processed_pdb_file(    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   runí  sV      		
t   __main__i   (f   t
   __future__R    RÖ  R   t
   iotbx.philt   mmtbx.monomer_libraryR   R   R   R   t   mmtbx.geometry_restraintsR   R3  t   mmtbx.torsion_restraints.utilsR  R   t!   cctbx.geometry_restraints.managerR   t$   cctbx.crystal.coordination_sequencesR	   t   cctbx.array_familyR
   t   scitbx.python_utilsR   t   libtbx.str_utilsR   t   libtbx.utilsR   R   R   R   R   RÚ  R   R   R   t	   cStringIOR   RE  Ri   Rp  RÙ  R™  RB  R   t   objectR   t!   dihedral_function_type_params_strt   clash_guard_params_strt   test_cdl_paramst   altloc_weighting_paramst   varst   master_params_strt   philt   parseR8   R.  t   geometry_restraints_edits_strR<   t   geometry_restraints_remove_strt   grand_master_phil_strR@   RG   RN   RO   R[   Ra   Rb   R"   Rq   Rz   R’   R“   RÆ   RÈ   RÊ   RÛ   RÂ  RÎ  Rç  RD   R  R  R  R­  R°  R¶  R»  R¾  RÀ  RŠ  R�  R�  Rû  t$   mmtbx.monomer_library.linking_mixinsRÿ  R   Rc  R  R}  R(   t   argv(    (    (    sV   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/monomer_library/pdb_interpretation.pyt   <module>   sÈ   "$ÿ D	g	@						{ÿ ÿ 8**	[	F>wXA44	
ÿ ì<ÿ ÿ ÿ ÿ ÿ ÿ ÿ ÿ ®	ÿ b.