ó
Ö™xTc        2   @   sÖH  d  d l  m Z d  d l Z d  d l Z g  Z g  Z g  Z g  Z d d d d d d d d d d d d d g Z e j	 e ƒ g  Z
 d d d d d d d d d d d d d g Z e j	 e ƒ g  Z d d	 d	 d d
 d
 d d d d d d d g Z e j	 e ƒ g  Z d d	 d	 d d d d d d d d d d g Z e j	 e ƒ g  Z d d d d d d d d d d d d d g Z e j	 e ƒ g  Z d d	 d	 d d
 d d d d d d d d g Z e j	 e ƒ g  Z d d	 d	 d d d d
 d d d d d d g Z e j	 e ƒ g  Z d d d	 d d d d
 d d d d d d g Z e j	 e ƒ g  Z d d	 d d d d
 d d d d d d d g Z e j	 e ƒ g  Z d d d	 d d d d
 d d d d d d g Z e j	 e ƒ g  Z d d	 d d d d
 d d d d d d d g Z e j	 e ƒ g  Z d d d	 d d d d d d d d d d g Z e j	 e ƒ g  Z d d	 d d d d d d d d d d d g Z e j	 e ƒ g  Z d d d	 d d d d d d d d d d g Z e j	 e ƒ g  Z d d	 d d d d d d d d d d d  g Z e j	 e ƒ g  Z d d! d! d d" d" d d d d d d d g Z e j	 e ƒ g  Z d d! d! d d# d# d d d d d d d g Z e j	 e ƒ g  Z d d$ d$ d d% d% d d d d d d d g Z e j	 e ƒ g  Z d& d$ d$ d d d% d# d# d% d d d d g Z e j	 e ƒ g  Z d& d$ d! d d d% d# d# d" d d d d g Z e j	 e ƒ g  Z d& d! d$ d d d# d% d" d# d d d d g Z e j	 e ƒ g  Z d d$ d! d d d% d" d d d' d( d) d* g Z e j	 e ƒ g  Z d d! d$ d d d" d% d d d' d( d) d* g Z e j	 e ƒ g  Z  d& d$ d	 d d d# d d% d
 d+ d, d- d. g Z e j	 e ƒ g  Z! d& d	 d$ d d d d# d
 d% d/ d0 d1 d2 g Z e j	 e ƒ g  Z" d d d! d d d d" d d d3 d d4 d5 g Z e j	 e ƒ g  Z# d d! d d d d" d d d d3 d d4 d5 g Z e j	 e ƒ g  Z$ d d d! d d d d# d d d6 d7 d8 d9 g Z e j	 e ƒ g  Z% d d! d d d d# d d d d6 d7 d8 d9 g Z e j	 e ƒ g  Z& d d$ d	 d# d d d d d d: d; d< d= g Z e j	 e ƒ g  Z' d d	 d$ d d# d d d d d: d; d< d= g Z e j	 e ƒ g  Z( d d d! d d" d d d d d> d. d? d@ g Z e j	 e ƒ g  Z) d d! d d" d d d d d d> d. d? d@ g Z e j	 e ƒ g  Z* d d d! d d# d d d d dA dB dC dD g Z e j	 e ƒ g  Z+ d d! d d# d d d d d d dE dF dG g Z e j	 e ƒ g  Z, d d d$ d d d d% d d dH dI dJ dK g Z e j	 e ƒ g  Z- d d$ d d d d% d d d dL dM dN dO g Z e j	 e ƒ g  Z. d d d$ d d% d d d d d d d d g Z e j	 e ƒ g  Z/ d d$ d d% d d d d d d d d d g Z e j	 e ƒ g  Z0 d d	 d! d d" d
 d d d d d d d g Z e j	 e ƒ g  Z1 d d! d	 d" d d d
 d d d d d d g Z e j	 e ƒ g  Z2 d d	 d! d d# d
 d d d dP dQ dR dS g Z e j	 e ƒ g  Z3 d d! d	 d# d d d
 d d dT dU dV dW g Z e j	 e ƒ g  Z4 d d d$ d d d d# d d d d d d g Z e j	 e ƒ g  Z5 d d d$ d d d# d d d d d d d g Z e j	 e ƒ g  Z6 d d	 d$ d d% d d d d d d d d g Z e j	 e ƒ g  Z7 d d$ d	 d% d d d d d d d d d g Z e j	 e ƒ g  Z8 d d	 d	 d d d d d d d d d d g Z e j	 e ƒ g  Z9 d d d! d d d d# d d dX dY dZ d g Z e j	 e ƒ g  Z: d d! d d d d# d[ d d dX dY dZ d g Z e j	 e ƒ g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g2 Z d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d d€ d� d‚ dƒ d„ d… d† d‡ dˆ d‰ dŠ d‹ dŒ d� g2 Z; g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g2 Z< e= dŽ „ Z> d� „  Z? d� „  Z@ d‘ „  ZA d’ „  ZB d“ „  ZC d” „  ZD d• „  ZE d– „  ZF d— „  ZG d˜ „  ZH d™ „  ZI dš „  ZJ d› „  ZK dœ „  ZL d� „  ZM dž „  ZN dŸ „  ZO e? d  e jP d¡ ƒ ZQ eQ d¢ ZR g  eQ d¢ <d  d lS ZS eS jT ƒ  ZU d  d lV ZV eV jW d£ ƒ ZX eX jY eU ƒ ZZ g  Z[ x! eZ D] Z\ e[ j	 e\ j] ƒ  ƒ q¬WeU d¢ e[ e^ e[ ƒ d¡ d¡ !Z_ eU e[ e^ e[ ƒ d¡ d¡ e^ eU ƒ !Z` eV ja d¤ eR ƒ Zb eb jc ƒ  Zd eR d¢ ed !Ze d¡ Zf g  Zg d¥ Zh ei eh ƒ Zj eg j	 ef ƒ eg j	 ej d¢ d& !ƒ g  Zk d¦ Zl d§ Zm d¨ Zn g  Zo x» eh el k  rRef d¡ k rêeh en Zh ei eh ƒ Zj eg j	 ef ƒ eg j	 ej d¢ d& !ƒ n  g  Zp d© Gef Gdª Geh Gd« GHeF ef ƒ Zq er el ƒ Zs eN eQ e< eh ee ep eq ej ef eo ƒ	 ef d¡ Zf eh Zm q˜Wd¬ „  Zt d­ „  Zu d® „  Zv d¯ „  Zw d° GHg  Zx d± Zy d¡ Zz d² Z{ d³ Z| d³ Z} d´ Z~ xê
ey d± k r’d¢ Z e} d± k rÖdµ Z€ d¡ Zz n d¶ Z€ d· Ge{ Gd¸ Gez Gd¹ Ge~ Gdº GHx
e� e^ e< ƒ ƒ D]	
Z‚ e^ e< e‚ ƒ d¢ k rxç	e� e^ e< e‚ ƒ ƒ D]Ï	Zƒ d» e< e‚ eƒ k o’d¼ e< e‚ eƒ k o’d½ e< e‚ eƒ k o’d¾ e< e‚ eƒ k oÎd¿ e< e‚ eƒ k pÎdÀ e< e‚ eƒ k pÎdÁ e< e‚ eƒ k rx7	e� e^ e< ƒ ƒ D]#	Z„ e^ e< e„ ƒ d¢ k rx	e� e^ e< e„ ƒ ƒ D]éZ… d» e< e‚ eƒ k ojd¼ e< e„ e… k ojd½ e< e„ e… k ojd¾ e< e„ e… k o¦d¿ e< e„ e… k p¦dÀ e< e„ e… k p¦dÁ e< e„ e… k r e< e‚ eƒ d e< e‚ eƒ d& e< e‚ eƒ dÂ e< e‚ eƒ dÃ e< e„ e… d e< e„ e… d& e< e„ e… dÂ e< e„ e… dÃ g Z† eA e† ƒ Z‡ g  g  g  g Zˆ g  g  g Z‰ d³ Z| e< e‚ eƒ d e< e„ e… k o‘e< e‚ eƒ dÂ e< e„ e… k r�d± Z| n  e< e‚ eƒ d e< e„ e… k oÚe< e‚ eƒ dÂ e< e„ e… k ræd± Z| n  e| d± k rFdÄ e‡ d¢ e‡ d¡ dÅ e‡ d e‡ d& dÆ e< e‚ eƒ d¢ dÇ e‡ dÂ e‡ dÃ dÅ e‡ dÈ e‡ dÉ dÆ e< e„ e… d¢ dÊ e{ dË Z€ e€ GHet e< e‚ eƒ e< eh ƒ Zx ex d¢ e< e‚ eƒ <eˆ d¢ j	 ex d¡ dÂ ƒ et e< e„ e… e< eh ƒ Zx ex d¢ e< e„ e… <eˆ d¢ j	 ex d¡ dÂ ƒ dÌ Ge‡ d¢ Ge‡ d¡ GdÅ Ge‡ d Ge‡ d& GdÍ GeŠ eˆ d¢ d¢ dÂ ƒ GHdÌ Ge‡ dÂ Ge‡ dÃ GdÅ Ge‡ dÈ Ge‡ dÉ GdÍ GeŠ eˆ d¢ d¡ dÂ ƒ GHeu e< e‚ eƒ e< e„ e… e‡ d¢ e‡ d¡ e‡ d e‡ d& e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ ƒ
 eˆ d¡ <ev e< e‚ eƒ e< e„ e… e‡ d¢ e‡ d¡ e‡ d e‡ d& e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ ƒ
 eˆ d <n  e} d± k o°e< e‚ eƒ d e< e„ e… d k o°e< e‚ eƒ dÂ e< e„ e… dÂ k o°e‚ e„ k o¯eƒ e… k rÓd¢ d¢ g eˆ d¢ <dÎ e‡ d¢ e‡ d¡ dÅ e‡ d e‡ d& dÏ e< e‚ eƒ d¢ dÐ e< e„ e… d¢ Z€ e€ GHeu e< e‚ eƒ e< e„ e… e‡ d¢ e‡ d¡ e‡ d e‡ d& e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ ƒ
 eˆ d¡ <ev e< e‚ eƒ e< e„ e… e‡ d¢ e‡ d¡ e‡ d e‡ d& e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ ƒ
 eˆ d <n  eˆ g  g  g  g k rýdÑ Geˆ Geˆ d¢ d¢ eˆ d¡ d¢ eˆ d d¢ e‰ d¢ <eˆ d¢ d¡ eˆ d¡ d¡ eˆ d d¡ e‰ d¡ <dÒ Ge‰ GHg  Z‹ e{ d² k rNd³ ZŒ e‰ d¢ dÉ k rØew e< e‚ eƒ e< e„ e… e‡ d¢ e‡ d¡ e‡ d e‡ d& e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ e eŒ e} ƒ Z‹ ns e‰ d¡ dÉ k rKew e< e„ e… e< e‚ eƒ e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ e‡ d¢ e‡ d¡ e‡ d e‡ d& e eŒ e} ƒ Z‹ n  noe{ dÓ k r½e‰ d¢ e‰ d¡ k r×d³ ZŒ ew e< e‚ eƒ e< e„ e… e‡ d¢ e‡ d¡ e‡ d e‡ d& e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ e eŒ e} ƒ Z‹ nã e‰ d¢ e‰ d¡ k  rTd³ ZŒ ew e< e„ e… e< e‚ eƒ e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ e‡ d¢ e‡ d¡ e‡ d e‡ d& e eŒ e} ƒ Z‹ nf d± ZŒ ew e< e„ e… e< e‚ eƒ e‡ d¢ e‡ d¡ e‡ d e‡ d& e‡ dÂ e‡ dÃ e‡ dÈ e‡ dÉ e eŒ e} ƒ Z‹ n  e‹ g  k rúe‹ d¢ e< e‚ eƒ <e‹ d¡ e< e„ e… <e‹ d Z n  n  n  qWn  qäWn  q?Wn  qWdÔ Ge GHe} d± k r7d³ Zy n  e{ dÓ k oLe d¢ k r^d± Z} dÕ Z~ n  e{ d² k ose d¢ k r…dÓ Z{ d¢ Zz n  ez d¡ Zz q©Wd¢ Z� dÖ ZŽ eH e< e; ep e� eŽ ƒ d× GHg  Z� g  Z� d¡ Z‘ x¥e‘ d¢ k rsd¢ Z‘ xJe� e^ e< ƒ ƒ D]6Z‚ e^ e< e‚ ƒ d¢ k r*xe� e^ e< e‚ ƒ ƒ D]ü Zƒ e^ e< e‚ eƒ ƒ d¢ k r#dØ e< e‚ eƒ k r e‘ d¢ k r»d¡ Z’ eV ja dÙ e< e‚ eƒ d ƒ Z… e… j“ ƒ  Z” eE e” ƒ Z• e• e‚ eƒ g Z� d¡ Z‘ nb eV ja dÙ e< e‚ eƒ d ƒ Z… e… j“ ƒ  Z” eE e” ƒ Z– e– e� d¢ k re– e‚ eƒ g Z� n  e‘ d¡ Z‘ n  n  q'Wn  qôWe‘ d¢ k rpe� j	 e< e� d¡ e� d ƒ g  e< e� d¡ e� d <n  qÏWx# e� e^ e� ƒ ƒ D] Z‚ e� e‚ GHq‡WdÚ „  Z— dÛ „  Z˜ g  Z™ e™ j	 dÜ ƒ e™ j	 d¡ ƒ e™ j	 dÂ ƒ e™ j	 d& ƒ e™ j	 dÂ ƒ e™ j	 d& ƒ e™ j	 d¡ ƒ e™ j	 d ƒ e™ j	 d ƒ e™ j	 dÂ ƒ e™ j	 d ƒ e™ j	 d ƒ e™ j	 dÂ ƒ e™ j	 d ƒ e™ j	 d ƒ e™ j	 dÂ ƒ e™ j	 dÃ ƒ e™ j	 d& ƒ e™ j	 d& ƒ e™ j	 d& ƒ dÝ GHdÞ GHg  Z† e^ e� ƒ d¡ Zš e j› dÃ e^ e� ƒ ƒ jœ e^ e� ƒ dÃ ƒ Z� xÉeš d  k rÌ+dß ZŽ g  Zž e� eš d¡ d& k oA e� eš dÈ d k r6#dà Ge� eš d Gdá Ge� eš dÂ Gdâ GHdã ZŸ xÁe� e^ e; ƒ ƒ D]­Z‚ e; e‚ e� eš d¢ k r/#x=e� e^ e� eš ƒ ƒ D]%Zƒ e� eš eƒ g  k rÜ!eƒ dÉ k r)!ež j	 eƒ ƒ ež j	 e e‚ d& ƒ ež j	 eƒ d¡ ƒ ež j	 e e‚ dÂ ƒ Pn° eƒ dä k r�!ež j	 eƒ ƒ ež j	 e e‚ dÃ ƒ ež j	 eƒ d¡ ƒ ež j	 e e‚ dÈ ƒ PnX eƒ då k rÙ!ež j	 eƒ ƒ ež j	 e e‚ dÉ ƒ ež j	 eƒ d¡ ƒ ež j	 e e‚ dæ ƒ Pn  n  q· Wx e� e^ e e‚ ƒ ƒ D]è Z  e� eš d e e‚ e  d¢ k o:"e� eš dÂ e e‚ e  d& k rß"ež d¡ e e‚ e  d k or"ež d& e e‚ e  dÃ k rÜ"e e‚ e  d e� eš ež d¢ <e e‚ e  dÃ e� eš ež d <e e‚ e  dÈ e� eš ež d d¡ <dç ZŸ n  n  q÷!WeŸ dã k r,#dç e� eš ež d¢ <dç e� eš ež d <dè e� eš ež d d¡ <n  n  q‚ Wn  dè e� eš dé k oo#dè e� eš dê k oo#dè e� eš dë k r¸'e� eš då g  k r$dì Ge� eš GHdã e� eš då <dã e� eš dí <dî e� eš dé <e� eš d d … f e� eš dë e� eš dê d¢ e� eš dï e� eš dð g e� eš d d … f <n” dì Ge� eš GHe� eš d d … f e� eš dë e� eš dê e� eš dé e� eš dï e� eš dð g e� eš d d … f <er e� eš dé ƒ Z¡ e¡ dÃ  e� eš dé <er e� eš dë ƒ Z¢ e¢ dÃ  e� eš dë <er e� eš dê ƒ Z£ e£ dÃ  e� eš dê <er e� eš dï ƒ Z¡ e� eš dï dä k  r:%dñ e¡ dÃ  e� eš dï <n  e� eš dï dä k rc%e¡ dÈ  e� eš dï <n  er e� eš dð ƒ Z¤ e¤ dÈ  e� eš dð <e� eš d e� eš d& e� eš dÂ e� eš dÃ e� eš dÉ e� eš dÉ e� eš dæ e� eš dæ e� eš dä e� eš dä e� eš dÜ e� eš dÜ e� eš då e� eš då e� eš dí e� eš dí g Z† eA e† ƒ Z‡ e‡ d¢ e� eš d <e‡ d e� eš dÂ <e‡ dÃ e‡ dÂ e� eš dÉ <e‡ dÉ e‡ dÈ e� eš dæ <e‡ dë e‡ dæ e� eš dä <e‡ dÜ e‡ dä e� eš dÜ <e‡ då e‡ dê e� eš då <e‡ dé e‡ dí e� eš dí <e� eš då dî k rL'dò e� eš då <dò e� eš dí <dó e� eš dé <n  e� eš dÉ dè k p…'e� eš dä dè k p…'e� eš då dè k rµ'dô e� eš då <dô e� eš dí <dõ e� eš dé <n  n  xÜ e� d¢ dð ƒ D]Ë Z„ er e� eš e„ ƒ Z¥ e^ e¥ ƒ e™ e„ k  r(e— e¥ e™ e„ ƒ e� eš e„ <n e¥ e� eš e„ <ež g  k oM(e„ ež d d¡ k oM(eŸ dç k r}(e� eš ež d d¡ dö e� eš ež d d¡ <n  eŽ e� eš e„ dñ ZŽ qÈ'Wd¼ e� eš k p´(d½ e� eš k r)e— e� eš e^ e� eš ƒ d& e™ dð ƒ e� eš e^ e� eš ƒ d& <eŽ e� eš e^ e� eš ƒ d& dñ ZŽ nc e— e� eš e^ e� eš ƒ d e™ dð ƒ e� eš e^ e� eš ƒ d <eŽ e� eš e^ e� eš ƒ d dñ ZŽ d¼ e� eš k p�)d½ e� eš k rÇ)eŽ e� eš e^ e� eš ƒ d dñ ZŽ n$ eŽ e� eš e^ e� eš ƒ d¡ dñ ZŽ d¼ e� eš k p*d½ e� eš k p*d¾ e� eš k ro*dÂ Z¦ d¼ e� eš k r:*d÷ Z§ n2 d½ e� eš k rS*d½ Z§ n d¾ e� eš k rl*dø Z§ n  n d& Z¦ dß Z§ dù e� eš k r+dã er e� eš e^ e� eš ƒ e¦ ƒ k r¼*dú Z¥ n  dç er e� eš e^ e� eš ƒ e¦ ƒ k rí*dû Z¥ n  e� eš j	 e— e¥ e™ dï ƒ ƒ nˆ dã er e� eš e^ e� eš ƒ e¦ d¡ ƒ k rC+dú Z¥ n  dç er e� eš e^ e� eš ƒ e¦ d¡ ƒ k rx+dû Z¥ n  e� eš j	 e— e¥ e™ dï ƒ ƒ eŽ e� eš e^ e� eš ƒ d¡ e§ ZŽ eŽ GHeš d¡ Zš q WdÞ GHdü GHg  Z¨ g  Z© g  Zª g  ZŒ g  Z« g  g  g Z¬ eU dý ee dþ dÿ d Z­ e® e­ dƒ e¬ d¢ <deR ddee ddddddddZ¯ e¬ d¢ j° e¯ ƒ eU dý ee d	dÿ d Z± e® e± dƒ e¬ d¡ <deR ddee ddddddZŽ e¬ d¡ j° eŽ ƒ d
Z² d¢ Z³ x+ e� e^ eg ƒ d ƒ D] Z´ ek j	 g  ƒ q-WxRe� e^ e� ƒ ƒ D]>Zµ d» e� eµ k o�-d¼ e� eµ k o�-d½ e� eµ k o�-d¾ e� eµ k o�-de� eµ k r¡-eB e� eµ eµ ee e² e¬ ƒ n  de� eµ k rÅ-e¨ j	 e� eµ ƒ nü d¼ e� eµ k r.e© j	 e� eµ ƒ e© e^ e© ƒ d¡ j	 eµ ƒ n½ d½ e� eµ k rC.eª j	 e� eµ ƒ eª e^ eª ƒ d¡ j	 eµ ƒ n~ d¾ e� eµ k r‚.eŒ j	 e� eµ ƒ eŒ e^ eŒ ƒ d¡ j	 eµ ƒ n? de� eµ k rÁ.e« j	 e� eµ ƒ e« e^ e« ƒ d¡ j	 eµ ƒ n  x¨ e� e^ ek ƒ ƒ D]” Z´ eg e´ d d¡ e� eµ k oC/d» e� eµ k oC/d¼ e� eµ k oC/d½ e� eµ k oC/d¾ e� eµ k oC/de� eµ k rh/ek e´ j	 e� eµ ƒ e³ d¡ Z³ n  qÔ.Wq.-WeC e¬ ƒ dGHdGe³ GdGHg  g  g Z¬ x©e� e^ eg ƒ d ƒ D]‘Z´ dGeg e´ d d¡ GHdGHdGHdGHdGHeU dý ee deg e´ d d¡ dÿ d Z± e® e± dƒ e¬ d¡ <deR ddee ddddddZŽ e¬ d¡ j° eŽ ƒ x·e� e^ ek e´ ƒ ƒ D]ŸZ¥ eB ek e´ e¥ e¥ ee e² e¬ ƒ ek e´ e¥ d¢ Gdß Gek e´ e¥ d Gdñ Gek e´ e¥ d& Gdñ Gek e´ e¥ dÂ Gdñ Gek e´ e¥ dÃ GdGek e´ e¥ d¡ GdGek e´ e¥ dÈ GdGek e´ e¥ dÉ Gdñ Gek e´ e¥ dæ Gek e´ e¥ dë GdGek e´ e¥ e^ ek e´ e¥ ƒ d& Gek e´ e¥ e^ ek e´ e¥ ƒ d¡ GHdGek e´ e¥ dä Gdñ Gek e´ e¥ dÜ Gek e´ e¥ dê GHdGek e´ e¥ då Gdñ Gek e´ e¥ dí Gek e´ e¥ dé GHqq0WdGHdGeg e´ d d¡ GdGe^ ek e´ ƒ GHq¯/WdGHeC e¬ ƒ e¨ g  k r„4g  g  g Z¬ eU dý ee ddÿ d Z± e® e± dƒ e¬ d¡ <deR ddee ddddddZŽ e¬ d¡ j° eŽ ƒ dZ¶ dß Z² dGHdGHdGHdGHdGHx_e� e^ e¨ ƒ ƒ D]KZ´ eB e¨ e´ e´ ee e² e¬ ƒ e¨ e´ d¢ Gdß Ge¨ e´ d Gdñ Ge¨ e´ d& Gdñ Ge¨ e´ dÂ Gdñ Ge¨ e´ dÃ GdGe¨ e´ d¡ GdGe¨ e´ dÈ GdGe¨ e´ dÉ Gdñ Ge¨ e´ dæ Ge¨ e´ dë GdGe¨ e´ e^ e¨ e´ ƒ dÂ Ge¨ e´ e^ e¨ e´ ƒ d GHdGe¨ e´ dä Gdñ Ge¨ e´ dÜ Ge¨ e´ dê GHdGe¨ e´ då Gdñ Ge¨ e´ dí Ge¨ e´ dé GHq3WdGHdÞ GHdGe^ e¨ ƒ GHeC e¬ ƒ n  e© g  k rµ6g  g  g Z¬ eU dý ee ddÿ d Z± e® e± dƒ e¬ d¡ <deR ddee ddddddZŽ e¬ d¡ j° eŽ ƒ dZ¶ dß Z² d GHdGHdGHdGHdGHx_e� e^ e© ƒ ƒ D]KZ´ eB e© e´ e´ ee e² e¬ ƒ e© e´ d¢ Gdß Ge© e´ d Gdñ Ge© e´ d& Gdñ Ge© e´ dÂ Gdñ Ge© e´ dÃ GdGe© e´ d¡ GdGe© e´ dÈ GdGe© e´ dÉ Gdñ Ge© e´ dæ Ge© e´ dë GdGe© e´ e^ e© e´ ƒ dÃ Ge© e´ e^ e© e´ ƒ d GHdGe© e´ dä Gdñ Ge© e´ dÜ Ge© e´ dê GHdGe© e´ då Gdñ Ge© e´ dí Ge© e´ dé GHq@5WdGHdÞ GHd!Ge^ e© ƒ GHeC e¬ ƒ n  eª g  k ræ8g  g  g Z¬ eU dý ee d"dÿ d Z± e® e± dƒ e¬ d¡ <deR ddee ddddddZŽ e¬ d¡ j° eŽ ƒ dZ¶ dß Z² d#GHdGHdGHdGHdGHx_e� e^ eª ƒ ƒ D]KZ´ eB eª e´ e´ ee e² e¬ ƒ eª e´ d¢ Gdß Geª e´ d Gdñ Geª e´ d& Gdñ Geª e´ dÂ Gdñ Geª e´ dÃ GdGeª e´ d¡ GdGeª e´ dÈ GdGeª e´ dÉ Gdñ Geª e´ dæ Geª e´ dë GdGeª e´ e^ eª e´ ƒ dÃ Geª e´ e^ eª e´ ƒ d GHdGeª e´ dä Gdñ Geª e´ dÜ Geª e´ dê GHdGeª e´ då Gdñ Geª e´ dí Geª e´ dé GHqq7WdGHdÞ GHd$Ge^ eª ƒ GHeC e¬ ƒ n  eŒ g  k r;g  g  g Z¬ eU dý ee d%dÿ d Z± e® e± dƒ e¬ d¡ <deR ddee ddddddZŽ e¬ d¡ j° eŽ ƒ dZ¶ dß Z² d&GHdGHdGHdGHdGHx_e� e^ eŒ ƒ ƒ D]KZ´ eB eŒ e´ e´ ee e² e¬ ƒ eŒ e´ d¢ Gdß GeŒ e´ d Gdñ GeŒ e´ d& Gdñ GeŒ e´ dÂ Gdñ GeŒ e´ dÃ GdGeŒ e´ d¡ GdGeŒ e´ dÈ GdGeŒ e´ dÉ Gdñ GeŒ e´ dæ GeŒ e´ dë GdGeŒ e´ e^ eŒ e´ ƒ dÂ GeŒ e´ e^ eŒ e´ ƒ d¡ GHdGeŒ e´ dä Gdñ GeŒ e´ dÜ GeŒ e´ dê GHdGeŒ e´ då Gdñ GeŒ e´ dí GeŒ e´ dé GHq¢9WdGHd'Ge^ eŒ ƒ GHdÞ GHeC e¬ ƒ n  e« g  k rH=g  g  g Z¬ eU dý ee d(dÿ d Z± e® e± dƒ e¬ d¡ <deR ddee ddddddZŽ e¬ d¡ j° eŽ ƒ dZ¶ dß Z² d)GHdGHdGHdGHdGHx_e� e^ e« ƒ ƒ D]KZ´ eB e« e´ e´ ee e² e¬ ƒ e« e´ d¢ Gdß Ge« e´ d Gdñ Ge« e´ d& Gdñ Ge« e´ dÂ Gdñ Ge« e´ dÃ GdGe« e´ d¡ GdGe« e´ dÈ GdGe« e´ dÉ Gdñ Ge« e´ dæ Ge« e´ dë GdGe« e´ e^ e« e´ ƒ dÂ Ge« e´ e^ e« e´ ƒ d¡ GHdGe« e´ dä Gdñ Ge« e´ dÜ Ge« e´ dê GHdGe« e´ då Gdñ Ge« e´ dí Ge« e´ dé GHqÓ;WdGHd*Ge^ e« ƒ GHd+GHeC e¬ ƒ n  g  Z† e j› dÜ e^ e; ƒ ƒ jœ e^ e; ƒ dÜ ƒ Z· x2e� e^ e; ƒ ƒ D]Z¥ g  Z¸ d¢ Z¹ x¬ e� e^ e� ƒ ƒ D]˜ Zº e; e¥ e� eº d¢ k o>d» e� eº k o>d¼ e� eº k o>d½ e� eº k o>d¾ e� eº k o>d,e� eº k rI>e¸ j	 e� eº d d … f ƒ e¹ d¡ Z¹ n  q±=We¸ g  k rª?e j» e¸ ƒ Z¸ e¸ jœ e¹ dÃ ƒ e j¼ e¸ d d … d¢ f ƒ e j½ e¸ d d … d¢ f ƒ e j¼ e¸ d d … d¡ f ƒ e j½ e¸ d d … d¡ f ƒ e j¼ e¸ d d … d f ƒ e j½ e¸ d d … d f ƒ e j¼ e¸ d d … d& f ƒ e j½ e¸ d d … d& f ƒ e j¼ e¸ d d … dÂ f ƒ e j½ e¸ d d … dÂ f ƒ e¸ j¾ d¢ g e· e¥ f <n  qŒ=Wd-GHxÇe� e^ e; ƒ ƒ D]³Z¥ e; e¥ Ger e· e¥ d¢ f ƒ er e· e¥ d¡ f ƒ er e· e¥ d f ƒ er e· e¥ d& f ƒ er e· e¥ dÂ f ƒ er e· e¥ dÃ f ƒ er e· e¥ dÈ f ƒ er e· e¥ dÉ f ƒ er e· e¥ dæ f ƒ er e· e¥ dë f ƒ er e· e¥ dä f ƒ g Z† e† d¢ d.k rtAd/GHd0Ge† d¢ dÃ  Gd1Ge† d¡ dÃ  Gd2Ge† d dÃ  Gd1Ge† d& dÃ  Gd3Ge† dÂ dÃ  Gd1Ge† dÃ dÃ  Gd4Ge† dÈ dÃ  Gd1Ge† dÉ dÃ  Gd5Ge† dæ dÃ  Gd1Ge† dë dÃ  Gd6Ge† dÉ d¡  GHn d7GHqÆ?Wg  Z† d8GHxe� e^ e; ƒ ƒ D]Z¿ d¢ ZÀ d¢ ZÁ xe� e^ e� ƒ ƒ D]ü Zµ eV ja d9e� eµ d¢ ƒ Z… er e… j“ ƒ  ƒ ZÂ e; e¿ eÂ k r¼BeÀ d¡ ZÀ eÀ d¡ k r/Bd:GHd;GHd<GHd:GHn  d» e� eµ k olBd¼ e� eµ k olBd½ e� eµ k olBd¾ e� eµ k r¹BeÁ d¡ ZÁ e˜ e� eµ d d … f e· e¿ d d … f e� eµ e e¿ ƒ Z† n  n  qÀAWeÁ d¢ k o	Cd» e� eµ k o	Cd¼ e� eµ k o	Cd½ e� eµ k o	Cd¾ e� eµ k rÖDer e· e¿ d¢ f ƒ er e· e¿ d¡ f ƒ er e· e¿ d f ƒ er e· e¿ d& f ƒ er e· e¿ dÂ f ƒ er e· e¿ dÃ f ƒ er e· e¿ dÈ f ƒ er e· e¿ dÉ f ƒ er e· e¿ dæ f ƒ er e· e¿ dë f ƒ g
 Z† d=Gd>Ge e¿ dë Gd?Ge e¿ dä Gd@Ge e¿ dÜ Gd?Ge e¿ dê GHdAGdBGe† d¢ dÃ  Gd1Ge† d¡ dÃ  GdCGe† d dÃ  Gd?Ge† d& dÃ  GdDGe† dÂ dÃ  Gd?Ge† dÃ dÃ  Gd>Ge† dÈ dÃ  Gd?Ge† dÉ dÃ  Gd@Ge† dæ dÃ  Gd?Ge† dë dÃ  GHdEGe; e¿ GdFGeÁ GdGHn  d¢ ZÃ x² e� e^ e© ƒ ƒ D]ž Zµ e; e¿ e© eµ d¢ k r�Eeµ d¢ k r-EdGGe; e¿ GdHGHn  eÃ d¡ ZÃ e˜ e� e© eµ e^ e© eµ ƒ d¡ d d … f e· e¿ d d … f e© eµ e e¿ ƒ Z† n  qïDWeÃ d¢ k r¹EdIGe; e¿ GdFGeÃ GdGHn  d¢ ZÄ x² e� e^ eŒ ƒ ƒ D]ž Zµ e; e¿ eŒ eµ d¢ k rpFeµ d¢ k rFdJGe; e¿ GdHGHn  eÄ d¡ ZÄ e˜ e� eŒ eµ e^ eŒ eµ ƒ d¡ d d … f e· e¿ d d … f eŒ eµ e e¿ ƒ Z† n  qÒEWeÄ d¢ k rœFdKGe; e¿ GdFGeÄ GdGHn  q›AWdGHdGHg  g  g Z¬ eU dý ee dLdÿ d Z± e® e± dƒ e¬ d¡ <deR ddee ddddddZŽ e¬ d¡ j° eŽ ƒ x’e� e^ ep ƒ ƒ D]~Z‚ g  ZŽ e^ ep e‚ ƒ dÂ k r³Hg  ZÅ g  Z† xJ e� e^ ep e‚ ƒ ƒ D]2 Zƒ ep e‚ eƒ g  k r¬GeÅ j	 ep e‚ eƒ ƒ n  qzGWxY e� e^ eÅ ƒ ƒ D]E ZÆ eÆ d d¢ k râGdÙ Za n dMZa eD eÅ eÆ ea ƒ ZÇ e† j	 eÇ ƒ qÃGWx¡ e� e^ e† ƒ d ƒ D]‰ ZÈ dNee dOe† eÈ d dZ€ e¬ d¡ j° e€ ƒ dPee dOe† eÈ d dZ€ e¬ d¡ j° e€ ƒ eŽ j	 e† eÈ d e† eÈ d d¡ ƒ q#HWn  q5GWdQGHd  d l Z e jÉ ƒ  d S(R  iÿÿÿÿ(   t   divisionNi   t   At   N1t   N6t   NAt   N7t   Gt   O6t   N2t   N3gÃõ(\�B)@g+‡Ùî?gffffff(@g)\�Âõ(Ì?g+‡™3@g\�Âõ(\ñ?g×£p=
—)@gÑ"Ûù~jÌ?g!°rh‘m.@gP�—nƒÐ?g/Ý$�•#@g=
×£p=Ú?g
×£p=
0@gþÔxé&1ô?g /Ý$#@gð§ÆK7‰Ù?gfffffæ.@g‰A`åÐ"õ?g²�ï§Æ#@g°rh‘í|×?t   Ut   O4t   O2t   Ct   N4i   gX9´ÈV1@gR¸…ëQà?gÉv¾Ÿï!@gbX9´Èâ?g…ëQ¸ž2@gR¸…ëQò?g=
×£p½%@g�•C‹lçÛ?g¤p=
×ã1@g�Âõ(\�ò?gáz®Ga%@gö(\�ÂõØ?gö(\�Âu2@gÁÊ¡E¶s%@gHáz®GÑ?g{®Gáº0@gV-²�ï @gq=
×£ð%@g�•C‹lç»?g�•C‹lg1@g¢E¶óýÔü?g33333³$@g‘í|?5^Ú?gHáz®Ç%@gÑ"Ûù~j @g¤p=
×£Ð?g{®Gáz(@g¬Zd;ñ?gÕxé&1ˆ#@g=
×£p=Ê?gL7‰A`åø?gTã¥›Ä`#@gÇK7‰A`Õ?g
×£p=
*@g?5^ºIê?g…ëQ¸…&@gÉv¾Ÿ/Í?g333333*@gœÄ °rhû?g{®Gáz&@gßO�—nÃ?g33333s2@gyé&1¬ì?gáz®Gá$@g\�Âõ(\Ï?gáz®Ga2@gmçû©ñÒé?g{®Gáú$@gÝ$�•CË?gþÔxé&ñ0@g¤p=
×£à?g+‡ÙÎ7&@t   N62t   I_AAt   II_AAt   III_GGt   IV_GGt   V_AAt   VI_GGt   VII_GGt   VIII_AGt   VIII_GAt   IX_AGt   IX_GAt   X_AGt   X_GAt   XI_AGt   XI_GAt   XII_UUt   XIII_UUt   XIV_CCt   XV_CCt   XVII_CUt   XVII_UCt   XVIII_CUt   XVIII_UCt	   XIX_CG_WCt	   XIX_GC_WCt   XX_AU_WCt   XX_UA_WCt   XXI_AUt   XXI_UAt   XXII_CGt   XXII_GCt   XXIII_AUt   XXIII_UAt   XXIV_AUt   XXIV_UAt   XXV_ACt   XXV_CAt   XXVI_ACt   XXVI_CAt   XXVII_GUt   XXVII_UGt	   XXVIII_GUt	   XXVIII_UGt   XXIX_ACt   XXIX_CAt   XXX_GCt   XXX_CGt   XXXI_GGt   XXXIV_A_PSUt   XXXIV_PSU_Ac         C   s-  x&t  | ƒ D]\ } } | | }	 | |	 }
 | |	 } | j } | j } xÙ | j ƒ  D]Ë \ } } | | } | | } | | } | j } | j } xŒ | D]„ } | r¸ | j ƒ  r¸ q™ n  | | } | j |
 | ƒ } | j ƒ  | j ƒ  k r™ |  j | j ƒ  | | | j ƒ  | | | g ƒ q™ q™ WqV Wq Wd  S(   N(   t	   enumeratet   resnamet   namet   itemst
   is_unit_mxt   distancet   residt   append(   t   mastert	   unit_cellt	   pdb_atomst
   sites_fract   pair_sym_tablet   reindexing_arrayt   omit_symmetry_interactionst   table_i_seqt   pair_sym_dictt   i_seqt   site_it   atom_it	   resname_it	   atmname_it   table_j_seqt   sym_opst   j_seqt   site_jt   atom_jt	   resname_jt	   atmname_jt   sym_opt   site_jiRG   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   pair_sym_table_as_antons_masterV  s4    


		


		
		c         C   s³  t  |  ƒ d k s t ‚ d d  l } | j j d |  d ƒ } | j ƒ  } | j ƒ  j ƒ  } | d  k	 rv | j	 ƒ  } n@ d d l
 m } m } | j d | ƒ } | j d | d d	 ƒ } | j ƒ  | } d d
 l m }	 | j ƒ  j d d d | ƒ j ƒ  }
 | j ƒ  } |  d g } t d | d | d | d | d |
 d |	 j | j ƒ  ƒ ƒ | j ƒ  j ƒ  d k } | j ƒ  j d d d | j | ƒ ƒ j ƒ  } t d | d | d | d | d | d | j ƒ  ƒ | j ƒ  j ƒ  d k } | j ƒ  j d d d | j | ƒ ƒ j ƒ  } t d | d | d | d | d | d | j ƒ  ƒ | j ƒ  j ƒ  d k } | j ƒ  j d d d | j | ƒ ƒ j ƒ  } t d | d | d | d | d | d | j ƒ  ƒ | S(   Ni   iÿÿÿÿt	   file_namei    (   t   crystalt   uctbxt
   sites_cartRK   t   space_group_symbolt   P1(   t   flext   distance_cutoffg      @RM   RJ   RL   RN   RO   s    P  g      9@s    C1*g      6@s    C1'(   t   lent   AssertionErrort	   iotbx.pdbt   pdbt   inputt   crystal_symmetryt   atomst   extract_xyzt   NoneRK   t   cctbxRc   Rd   t   non_crystallographic_unit_cellt   symmetryt   fractionalization_matrixt   cctbx.array_familyRh   t   special_position_settingst   pair_asu_tablet   extract_pair_sym_tablet   atoms_with_labelsRa   t   size_t_ranget   sizet   extract_namet   selectt
   iselection(   t   argst   iotbxt   pdb_inpRo   Re   RK   Rc   Rd   RM   Rh   RN   RL   RJ   t   p_selectiont   p_pair_sym_tablet   c1_selection_1t   c1_pair_sym_tablet   c1_selection_2(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   run{  sv    	c   
      C   s;  d } g  } d d g } t  |  ƒ d k r? | | | | g } nk xh t t  |  ƒ ƒ D]T } | |  | k r | d } | | d <n  | |  | k rR | d } | | d <qR qR W| d k rÝ t  |  ƒ d k rÝ | | | | g } n  | d k r| | | | g } d | k r2| d | d k  r2| d | d g } n  xà t t  | ƒ ƒ D]É }	 | |	 d k rExŸ t t  |  | |	 ƒ d ƒ D] } | |  | |	 | d k rz| |  | |	 | d k rz| j |  | |	 | d ƒ | j |  | |	 | d d ƒ qzqzWg  |  | |	 <qEqEWn  t  | ƒ d k r7|  j | ƒ n  |  S(   Ni    t   nonei   i   (   Rj   t   rangeRI   (
   t   controlt   resid1t   resid2t   base1t   base2t   countt   collectt   position_controlt   jt   i(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   CONTROLÒ  s8    

 %8(c         C   sÞ   d } g  } x' t  t |  ƒ ƒ D] } | j g  ƒ q Wd } x› | t | ƒ k rÙ |  | g  k rÌ t j d |  | ƒ } | j ƒ  | | <t j d |  | d ƒ } | j ƒ  | | d <| d } | d } q? | d } q? W| S(   Ni   i    s   \d+s   \wi   (   R‹   Rj   RI   t   ret   searcht   group(   t   listR‘   RH   R•   t   resid_countt   mt   n(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   CONVERTÿ  s    
c         C   s9  g  } | d d d k r# d } n] | d d d k r@ d } n@ | d d d k r] d } n# | d d d k rz d	 } n d
 } x²t  t | ƒ ƒ D]ž} | | g  k r“ x…t  d d ƒ D]q} | d k r¢t j d |  d | ƒ }	 |	 j ƒ  }
 t |
 ƒ } d | d | d | d d | d | d g d | d | d | d d | d | d g g } xÂ t  t | | ƒ ƒ D] } | | j | | | ƒ q|Wq¹ t j d |  d | ƒ }	 |	 j ƒ  }
 t |
 ƒ } d | d | d | d } | | j | ƒ d | d | d } | | j | ƒ q¹ Wq“ q“ Wd  S(   Ni   i   i   t   bluei   t   cyani   t   forestt   purplet   yellowt	   basepairss   \d+s   color s   , /s   /*/*/s   
s   hide sticks, /s   show sticks, /(   R‹   Rj   R—   R˜   R™   t   strt   write(   Rš   t   ht   pdb_file_maint   Fromt   filet   linet   colort   kt   aRœ   RH   t   RESIDt   lt   line1(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   PYMOL_OUTPUT  s6    				h c         C   sB   x; t  t |  ƒ ƒ D]' } |  | g  k r |  | j ƒ  q q Wd  S(   N(   R‹   Rj   t   close(   Rª   R§   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   CLOSEI  s    c         C   s"   t  j | |  ƒ } | j ƒ  } | S(   N(   R—   R˜   R™   (   t   stringR˜   Rœ   t   SEARCH(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyR¶   Z  s    c         C   sy   d } |  d d k r) d } |  d }  n d } x? t  d t |  ƒ ƒ D]( } | d t |  | ƒ t d ƒ } qE W| | S(   s   Converts a string to an integeri    t   -iÿÿÿÿi   i
   t   0(   R‹   Rj   t   ord(   t   in_strt   out_numt
   multipliert   x(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   to_intj  s    &c         C   s�   d } d } |  d k  r( d } |  }  n  x< |  d d k rf t  t d ƒ |  d ƒ | } |  d }  q+ Wt  t d ƒ |  d ƒ | } | | S(   s   Converts an integer to a stringt    i    R·   i
   R¸   (   t   chrR¹   (   t   in_intt   out_strt   prefix(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt	   to_string‚  s    
c         C   sŒ   |  } t  | ƒ } | } t  | ƒ } |  d } t  | ƒ } | d } t  | ƒ } |  d } t  | ƒ } | d } t  | ƒ } | | | | g S(   Ni   (   RÄ   (   t   SEARCH1t   SEARCH2R   t   BR®   t   bt   ct   d(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   ADDš  s    



c         C   sÇ  d } d GH| d k rØ d G| GHx¤ t  t |  ƒ ƒ D]� } d | | } | GHxt t  t |  | ƒ ƒ D]\ } d } xH t  t |  | | ƒ ƒ D], }	 t |  | | |	 ƒ }
 | |
 d } qŠ W| GHqc Wq3 Wd G| GHd	 GHn  d
 GHd G| GHd } | g  k rZd } g  } g  } d } d }
 x,t  t | ƒ ƒ D]} x} t  t | | ƒ d ƒ D]a } | | | d g  k rJ| d } | j | | | d ƒ | j | | | d d ƒ qJqJWt | ƒ d k r;| d } t | ƒ } xE t  t | ƒ ƒ D]1 } |
 | | }
 | d d k rê|
 d }
 qêqêW|
 } | j | ƒ d }
 n  g  } q)Wd } d } d } n  | d k rzd } | GHd } nD d G| GHx3 t  t | ƒ ƒ D] } d G| d Gd G| | GHq–Wd GHd GH| S(   Ni   sd   
##################################################
##### SEQUENTIAL OUTPUT READOUT        BEGINNINGi    s2   ##### LINES CARRYING POSSIBLE BASEPAIR INFORMATIONs   Basepairing scheme: R¿   t    s1   #####LINES CARRYING POSSIBLE BASEPAIR INFORMATIONs2   ##################################################s1   #################################################s1   ####LIST OF BASES WITH MULTIPLE POSSIBLE CONTACTSi   i   sc   NO BASES DETECTED WITH MULTIPLE POSSIBLE CONTACTS
#################################################sA   ##### GROUPS OF BASES DETECTED WITH MULTIPLE POSSIBLE CONTACTS = t   GROUPs     sc   ####LIST OF BASES WITH MULTIPLE POSSIBLE CONTACTS
#################################################s”   ##################################################
###### SEQUENTIAL OUTPUT READOUT          END
##################################################
(   R‹   Rj   R¥   RI   Rž   (   t   LIST1t   LIST2t   LIST3t   print_controlt   line2t   control_controlR•   R±   R­   R°   R®   t   count1t   line3t   list1Rš   R‘   R”   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   SEQUENTIAL_READOUT¸  st    !!
$
	
			c         C   s"  xt  t | ƒ ƒ D]} d } t | | ƒ d k rf |  d | | k s] |  d | | k rf d } n  d | k r,|  d d k r¯ |  d d k r¯ |  j d ƒ |  j d ƒ n  |  d d k rì |  d d k rì |  j d	 ƒ |  j d ƒ n  |  d d k r|  d d k r|  j d	 ƒ |  j d ƒ qq |  d | | k sT|  d | | k r |  d |  d k r…|  j d ƒ |  j d ƒ n  |  d d k rÎ|  d d k rÎ| | k rÎ|  j d	 ƒ |  j d ƒ q|  d d k r|  d d k r| | k r|  j d ƒ |  j d ƒ qq q W|  S(
   NR¸   i   i   t   1i   i   i   t   yest   no(   R‹   Rj   RI   (   RÎ   RÏ   t
   max_cutofft   cutoffR�   RI   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   FIRST_APPEND  s2    >	   (,,c         C   s9  |  d | d k rg |  d | d k rg | d | d <| d | d <| d | d <| d	 d | d	 <nÎ |  d
 | d k rÎ |  d	 | d k rÎ | d | d <| d | d <| d | d <| d	 d | d	 <ng |  d | d k r5|  d | d k r5| d | d <| d | d <| d | d <| d	 d | d	 <n  | S(   Ni   i    i   i   i   i   i   i	   i   i   i
   i   i   i   i   i   (    (   RÎ   RÏ   RÐ   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   BOND_PLACING9  s     (((c   	      C   s0  d GH|  d g  k r* |  d | d } n | d |  d <d } |  d | d } d | | d | | d	 |  d
 d t  |  d ƒ d t  |  d ƒ d t  | d ƒ d t  | d ƒ d t  | d ƒ d t  | d ƒ } | GHt | ƒ d | d k r|  j d ƒ d GHn  t | ƒ g |  d d +|  S(   Ns(   
...using the C1'-C1' distance criterioni   i	   R   i   i   s    The basepair formed by residues t   :s    displays a i    s!    geometry with a P-P distance of s    and a C1'-C1' distance of sK   .
     Empirically determined average C1'-C1' distance for this geometry = s    + SD = i   sF   
     Empirically determined average P-P distance for this geometry = i
   i   t   REMOVEDsË   The C1'-C1' distance for this candidate basepair is more than 3 times the recorded standard deviation for this geometry. The basepair will be prevented from further processing by apending it as 'REMOVED'i   (   R¥   t   absRI   (	   RÎ   RÏ   t   A0t   A1t   A2t   A3t   diffP_Pt	   diffC1_C1R«   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   C1_C1_DISTANCEe  s    ’c       	   C   s»  d } t  | ƒ } d } d } d }	 xŠ| d k r°| d } d } t | ƒ }
 d |
 d } | GHg  } xEt t |  ƒ ƒ D]1} x(t t |  | ƒ ƒ D]} d } |  | | d d k rî |  | | d d k rî t d d !| d d !k sd	 |  | | k rd
 } n  t |  | ƒ d k r˜ d |  | | k r¨d |  | | k r¨| d k r¨t j d |  | | d ƒ } | j ƒ  } t | ƒ } t j d |  | | d ƒ } | j ƒ  } t | ƒ } |  | | d |  | | d |  | | d |  | | d g } t	 | ƒ } t
 | | ƒ } d | d | d d | d | d d | d d | d d | d d | d } | GHd } t |  | d | d | d | d | ƒ } d } xÑt d d ƒ D]À} | | g  k rÄ| d } t  | | d ƒ t  | | d ƒ | d k r| d } d | d | d d | d | d d | | d d | | d d | d | d d | d | d d } | GH|  | | j d ƒ |  | | j d ƒ |  | | d |  | | d g } | j | ƒ t | ƒ } |  | | j | d d !ƒ n  | d k r„d | d | d d | d | d d | | d d | | d d } | GHq„qÄqÄW| d k r¥d } | GHq¥q¨q˜ q˜ Wq{ Wt  | ƒ } t  |
 ƒ } |	 | }	 d | d |
 } | GHg  } |	 d k r§d } t  | ƒ } d Gt Gd  G| d d !Gd! GHt |  | | d | d | | | ƒ } | d }  | d } | d } | } d" } | GHt  | ƒ } | d# } | GHd$ } | GHn  d% } q' W|  | g S(&   Ni    i   s…   ##################################
"Attempting to find additional basepairs by the CONTINUITY OF HELICITY CRITERION"       Attempt # s#   
##################################t   yi   i   i   Rà   R�   RÚ   RÙ   s   \d+i   i   sx   
Basepair tagged for its involvement in MULTIPLE CONTACTS has been detected!!!!!!.
  The basepair is formed by residues s    and s­   
    Attempting to determine whether it could be used to expand the length of an identified helical segment.
      Searching for the following possible basepair candidates: s    or t   Loops;        #####
     !!!!Found an adjacent basepair to residues s*   
     This basepair is formed by residues s   
     #####
    Assigning sB    as a legitimate basepair by the CONTINUITY OF HELICITY CRITERION
t   MHsA        #####
     !!!!Found a second adjacent basepair to residues s   
     #####
s4                        Neither basepair was found!!!!!sP   ###### Number of basepairs identified by the CONTINUITY OF HELICITY CRITERION = s         Attempt # s€   
##############################
 REMOVING the newly identified basepairs from the list of bases with possible mutliple contacts.s    Distance Cutoff = s!   
##############################
 s   

##### Semi-Bulk Removals9    additional basepairs have been identified by ELIMINATIONs   ##### Semi-Bulk RemovalR¿   (   R¥   RÄ   R‹   Rj   t   MAX_CUTOFF_strR—   R˜   R™   R¾   Rž   RË   t   HELICITYRI   t   reprt   run_number_strt   REMOVAL(    t   MASTER_Basepairs_summaryRŒ   t   loop_controlt   CUTOFFt	   positionst   new_basepairst
   CUTOFF_strR‰   t   count_foundt   total_countt   run_strR±   t	   transientR•   R”   t   MH_yesRœ   t   search1RÅ   t   search2RÆ   Rš   t   convertt   addt
   where_fromt   helicityt   count_helicityt   tR®   RÈ   t   removalt   mode_removal(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   loop‡  sœ    
^	4BZ+

v$N
&




c         C   s-  t  | ƒ } d } g  }	 d }
 g  } g  } xñ t t | ƒ ƒ D]Ý } t | | ƒ d k r= x¾ t t | | ƒ d ƒ D]Ÿ } | | | d g  k rt x~ t t | ƒ ƒ D]g } | | | d | | k r¥ d | | | d d } g  | | | d <g  | | | d d <q¥ q¥ Wqt qt Wq= q= Wxá t t | ƒ ƒ D]Í } g  } | g  k r1g  | | k rþxs t t | | ƒ d ƒ D]W } | | | d g  k rt| j | | | d ƒ | j | | | d d ƒ qtqtW| g  k rû| j | ƒ | j | ƒ qûqþq1q1Wxt t | ƒ ƒ D]} t | | ƒ d k rg  | | | d <t | | ƒ } d | d | d d	 | d | d
 d } | GHd } d } d } t |  | | d | | d | | | ƒ } d } | d g  k r	|  | d d | d d d d
 k rL|  | d d | d d d d k rLt d d
 !| d d
 !k rLd } nŒ |  | d d | d d j d ƒ |  | d d | d d j d ƒ t  | ƒ } |  | d d | d d j | d d
 !ƒ | d } d | d | d d	 | d | d
 d } n d } | GH| GHqqW|  | | g S(   Ni    i   i   t   ResiduesH   has been removed from the list of residues involved in MULTIPLE CONTACTSi   i   sX   
#####
Found a lone pair of bases after removing newly identified basepairs. Bases are:
s    and i   s&   
Matching against basepair list
##### Rð   t   iiiiiiiiR¿   i   s˜   However, this is a 3-base basepairs for which only 2 bases have been so far identified, final assignment will await until final distance CUTTOFF is usedRÙ   t   ELIs5        #####
     Found!!! A basepair between residues s?    has been identified by the 'ELIMINATION' criterion
     #####
s   No basepair was identified(   Rî   R‹   Rj   RI   Rž   Rí   Rì   (   RÎ   RÏ   t   base_at   base_bRó   R  Rô   Rö   Rõ   t   ACTUALt   output_controlRš   t   control_removedR  t   uR®   R±   R°   Rœ   R•   Rþ   R   RÈ   R  R«   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyRð     sd    !+!$.+j	%%,
1c	   +   2   C   s   g  }	 g  }
 g  } xç t  t |  ƒ ƒ D]Ó } |  | g  k r% |  | t |  | ƒ d d k  rq |	 j |  | ƒ n  d |  | d k r­ d |  | d k r­ |
 j |  | ƒ n  d d g } |  | d | k rø |  | d | k rø | j |  | ƒ qø q% q% W|	 }  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g  g2 } d | d | d	 d
 !d } | GHg  } xt  d t |  ƒ ƒ D]h} |  | d	 |  | d
 k rÜxCt  t | ƒ ƒ D],} t | d |  | d k rt | d |  | d k rd	 } t | d
 d !} xÔt  t | ƒ d ƒ D]¹} | d | |  | d k rN| d | d |  | d k rN|  | d t k rN|  | d | k rN|  | d	 |  | d |  | d |  | d
 |  | d |  | d |  | d g } | | j | ƒ nØ | d | |  | d k r&| d | d |  | d k r&|  | d | k r&t d	 d
 !| d	 d
 !k r&|  | d	 |  | d |  | d |  | d
 |  | d |  | d |  | d t | g } t | j | ƒ n  | d } g  } q}WqqWqÜqÜWd | d | d	 d
 !d } | GHx9t  t | ƒ ƒ D]%} t | | ƒ d	 k r}xt  t | | ƒ ƒ D]ë} g  g  g } g  g  g  g } t j	 d | | | d	 ƒ } t
 | j ƒ  ƒ | d	 <t j	 d | | | d
 ƒ } t
 | j ƒ  ƒ | d <t j	 d | | | d ƒ } t | j ƒ  ƒ | d	 <t j	 d | | | d ƒ } t | j ƒ  ƒ | d <| | | d | d <| d | d	 d k sç| d | d	 d k  r°t | | ƒ d	 k réd	 } x’t  t | | ƒ ƒ D]È} | | | d	 | | | d k rî| | | d
 | | | d k rîd } | d	 | | | d k râ| d	 | | | d k râ| d	 | | | d k rât t | | | | | ƒ | | | <qâq| d	 k r| t | | ƒ d k rt | t | d	 | | | d	 | | | d | | | d
 | | | d d	 g  g  g  g  g  g  g  g  g  g  g  g } | | j | ƒ t t | | | t | | ƒ d | ƒ | | t | | ƒ d <qqWq›t | t | d	 | | | d	 | | | d | | | d
 | | | d d	 g  g  g  g  g  g  g  g  g  g  g  g } | | j | ƒ t t | | | d	 | ƒ | | d	 <q°q°Wq}q}Wd G| Gd G| d	 d
 !Gd GHx³t  t | ƒ ƒ D]Ÿ} t | | ƒ d	 k rÕx€t  t | | ƒ ƒ D]e} d } | | | g  k rR
| | | d g  k rR
xs t  t |
 ƒ ƒ D]_ } |
 | d	 | | | k rS	|
 | d
 | | | d k rS	|
 | d | | | d <qS	qS	Wd } x~ t  t | ƒ ƒ D]j } | | d	 | | | k rÏ	| | d
 | | | d k rÏ	| | d | k  r9
| | d } q9
qÏ	qÏ	W| | | | d <n  | | | d d k r	d | | | k r	t | d d k r"| | | d | | | d
 | | | d | | | d g } t | ƒ } t | | | t | | d	 | d | d | d
 ƒ | | | <n  t | | | | d | | | d | | | d
 | | | d ƒ } q	q	WqÕqÕWx³ t  t | ƒ ƒ D]Ÿ }  x– t  t | |  ƒ ƒ D]~ } d | |  | k r¨d | |  | k r¨d | |  | k r¨t | |  | | t d	 d
 !| d	 d
 !ƒ }! |! | |  | <q¨q¨Wq‹Wd  | d | d	 d
 !} d	 }" t | t | |" | ƒ }# g  } d	 }$ d! G| Gd G| d	 d
 !Gd" Gt Gd# GHg  } t d	 d
 !| d	 d
 !k r×d$ Gt d	 d
 !Gd% G| d	 d
 !GHn  | d	 d
 !t d	 d
 !k rd% G| d	 d
 !Gd$ Gt d	 d
 !GHn  xot  t | ƒ ƒ D][} d& Gt | GHxEt  t | | ƒ ƒ D]-} t | | ƒ d	 k rPd | | | k rPd | | | k rPd | | | k rPd | | | k rP| | | d d
 k r| | | d d
 k r| | | d | | | d
 | | | d | | | d g } t | ƒ } d' | d | d	 d( | d
 | d GHt | | | ƒ d }% | | | j d ƒ | | | j | d	 d
 !ƒ | | | d | | | d g } | j | ƒ |$ d }$ d) | | | k rzd* GHqzq}| | | d d
 k rM| | | d d k rMt d	 d
 !| d	 d
 !k rMd+ | | | k rz| | | d | | | d
 | | | d | | | d g } t | ƒ } d, | d | d	 d( | d
 | d GH| | | j d ƒ | | | j | d	 d
 !ƒ | | | d | | | d g } | j | ƒ |$ d }$ qzq}| | | d d k r}| | | d d k r}d+ | | | k rz| | | d | | | d
 | | | d | | | d g } t | ƒ } d- | d | d	 d( | d
 | d GH| | | j d ƒ | | | j | d	 d
 !ƒ | | | d | | | d g } | j | ƒ |$ d }$ qzq}qPqPWq&Wd. G| Gd G| d	 d
 !Gd# GH|$ d	 k rŠ|# d k rŠd/ G| Gd G| d	 d
 !GHd	 }& t | | | d	 | d | |& | ƒ }' |' d	 } |' d } |' d }$ t |$ ƒ } d0 | d1 | d | d	 d
 !} | GHd2 GHd3 | d | d	 d
 !}( d	 }" t | t | |" |( ƒ n] |$ d	 k rÆ|# d k rÆd4 Gd5 G| Gd G| d	 d
 !GHd2 GHn! d6 Gd5 G| Gd G| d	 d
 !GHd2 GH|# d k r€d7 G| Gd G| d	 d
 !GHg  }) d }* t | | |* | | ƒ }) |) d	 } |) d } d8 | d | d	 d
 !}( d	 }" t | t | |" |( ƒ d# GHn d9 G| Gd G| d	 d
 !Gd# GHd  S(:   Ni   i   s    P  i   s    C1's    C1*sQ   ####################################
First sorting of basepair candidates: Run # s    Distance Cutoff = i    i   s&   
#####################################i   i	   i   sR   ####################################
Second sorting of basepair candidates: Run # s   \d+s   \S+iÿÿÿÿi   i
   i   s_   #####################################
Searching for bases with possible MULTIPLE CONTACTS Run #R¸   i   i   i   Rà   R   t   DRë   R	  sA   AFTER SEARCHING FOR BASES WITH POSSIBLE MULTIPLE CONTACTS: Run # sG   ##############################
##### Initial Basepair Assignment. Run #t   PREV_CUTOFFs   
##############################s   MAX_CUTOFF_str[0:3] s   CUTOFF_str[0:3] s   Basepairing scheme:s9   ----->High confidence 3-bond basepair formed by residues s    and RÚ   sµ       The bases in this basepair may be participating in an interaction with other bases. However, the detection of 3 bonds, makes its assignment as a 3-bond basepair highly probable.RÙ   sY   ----->At least 2 bonds identified out of 3 expected for the base pair formed by residues s4   ----->2-bond basepair identified formed by residues s/   ##### END of Initial Basepair Assignment. Run #sm   
##############################
##### Searching for additional basepairs by the ELIMINATION criterion. Run # sA   ##### Number of additional basepairs identified by ELIMINATION = s     Run # s   ############################## s   AFTER Bulk Removal: Run # s‚   ##############################
 NO newly identified basepairs to be removed from the list BASES WITH POSSIBLE MULTIPLE CONTACTS.
 s   Run # s¶   ##############################
 NO BASES WITH POSSIBLE MULTIPLE CONTACTS have been identified.
Assignement of furhter additional basepairs by the ELIMINATION criterion not possible
 s~   
##############################
##### SEARCHING FOR ADDITIONAL BASEPAIRS BY USING THE CONTINUITY OF HELICITY CRITERIUM /nRun #s^   AFTER SEARCHING FOR ADDITIONAL BASEPAIRS BY USING THE CONTINUITY OF HELICITY CRITERIUM: Run # sƒ   
##############################
BYPASSING THE SEARCH FOR ADDITIONAL BASEPAIRS BY USING THE CONTINUITY OF HELICITY CRITERIUM /nRun #(   R‹   Rj   RI   t   MASTER_Basepairs_bondsR  Rì   t   MASTER_Basepairs_schemest   MASTER_Basepairs_excludedR—   R˜   t   intR™   R¥   RÞ   Rž   Rè   R–   RÝ   R×   Rð   R  (+   t
   First_ListRñ   Ró   R¨   RŒ   Rï   Rö   t
   run_numberRô   t   First_List_smallert   First_List_Pt   First_List_C1R®   t   C1t   MASTER_BasepairsR±   R’   R•   R”   R‘   Rú   R­   RH   t   atomRœ   t   foundRI   t   rt
   C1_comparet   sRš   Rþ   R°   t   first_appendRÑ   RÓ   Rõ   t   length_1R  R  RÒ   t   loop_outputRò   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   programp  sP   "((œ8dSjZ
!0HT,&xLx4,<!<,BBV	<+7$""f0B)$
JB)$0B)$&


!


c         C   s¦  t  | ƒ } t  | ƒ } t  | ƒ } t  | ƒ } d | d | } | GHd | k rx d | k rx | | d | d } n  g  } g  } g  }	 xt t |  ƒ ƒ D]ø}
 xït t |  |
 ƒ ƒ D]×} t j d |  |
 | d ƒ } | j ƒ  } t j d |  |
 | d ƒ } | j ƒ  } d | k r“d	 |  |
 | k r“d
 |  |
 | k r“| | k r`| | k sx| | k r“| | k r“| | g } |
 | g }	 qº d | k rd	 |  |
 | k rd
 |  |
 | k r| | k rß| | k s÷| | k r| | k r| | g } |
 | g }	 qº d | k rº d	 |  |
 | k rº d |  |
 | k rº | | k r^| | k sv| | k rº | | k rº | | g } |
 | g }	 qº qº Wq� W| | |	 g S(   Ns>               Searching for possible basepairs between residues s    and t   iiiiiiiiiiiiiiis   
s   \d+i   i   Rê   Rà   RÙ   Rð   RÚ   (   R¥   R‹   Rj   R—   R˜   R™   (   t   LISTt   a0t   a1t   a2t   a3R   R±   t   match_found1t   match_found2t   match_positionR  R!  Rœ   t   match1t   match2(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyRí     s6    dddR�   i   i    s   \/+s   \.g      @gÍÌÌÌÌÌ@g        gš™™™™™É?sÈ   
############################################################################################
############################################################################################
###### Run # s   DISTANCE CUTOFF = s»   
############################################################################################
############################################################################################
c         C   s¡  t  j d |  d ƒ } | j ƒ  } t | ƒ } t  j d |  d ƒ } | j ƒ  } t | ƒ } |  d |  d |  d |  d g } t | ƒ }	 t | | ƒ }
 d |	 d |	 d d	 |	 d |	 d } | GHd
 |	 d |	 d d	 |	 d |	 d d |
 d d	 |
 d d |
 d d	 |
 d } | GHd } t | |
 d |
 d |
 d |
 d | ƒ } d } xt d d ƒ D]} | | g  k rn| d } t | | d ƒ t | | d ƒ | d k rd |	 d |	 d d	 |	 d |	 d d | | d d	 | | d d } | GHn  | d k ryd |	 d |	 d d	 |	 d |	 d d | | d d	 | | d d } | GHqyqnqnW| d k r—d } | GHn  |  | g S(   Ns   \d+i   i   i   i   s=   
...using the CONTINUITY OF HELICITY CRITERION criterion for i    i   s    and s2   
Checking whether the basepair formed by residues sf    could be involved in a helical element
    Searching for the following possible basepair candidates: s    or Rê   s;        #####
     !!!!Found an adjacent basepair to residues s*   
     This basepair is formed by residues s   
     #####
sA        #####
     !!!!Found a second adjacent basepair to residues s        
     #####
s4                        Neither basepair was found!!!!!(	   R—   R˜   R™   R¾   Rž   RË   Rí   R‹   R¥   (   t   MASTER_Basepairs_summary_lineRñ   Ró   Rœ   Rü   RÅ   Rý   RÆ   Rš   Rþ   Rÿ   R«   R±   R   R  R  R  (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   CONTINUITY_HELICITY_CRITERIONÂ  s>    "*Z+
NNc
         C   s  d d g }
 d GHt  |  t |  ƒ d d ƒ t  |  t |  ƒ d d ƒ d } t  | t | ƒ d d ƒ t  | t | ƒ d d ƒ d } d | | d | | d |  d d	 |  t |  ƒ d d
 | | d | |	 d | d d	 | t | ƒ d } | | k  rv| GHd | | d | | d |  d d | | d | |	 d | d d } | GHd d g }
 nŠ | | k ré| GHd | | d | |	 d | d d | | d | | d |  d d } | GHd d g }
 n d | t | ƒ d GH|
 S(   Ni    s   
...using the CUTOFF criterioni   i   i
   s&   
     The basepair formed by residues Rß   s    and with a s,    geometry was assigned at a CUTOFF value of s)    whereas the basepair formed by residues s   and with a s             therefore the s    basepair, with a s!    geometry, fares better than the s!    geometry by the CUTOFF criterionsD   
     Both basepairs have been assigned at the same CUTOFF value of (   t   floatRj   (   RÎ   RÏ   Râ   Rã   Rä   Rå   t   A4t   A5t   A6t   A7t   scoret   float_1t   float_2R«   R±   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   CUTOFF_CRITERIONï  s"    >>vNNc
         C   sI  d d g }
 d GH|  d | d k rr d | | d | | d | | d | |	 d } d |
 d <d |
 d <ng |  d | d k  rÓ d | | d | |	 d | | d | | d } d |
 d <d |
 d <n d	 } t  |  d ƒ } t  | d ƒ } | d
 | | d | | d | d
 | | d | |	 d } | GH| GH|
 S(   Ni    s   
...using the BOND criterioni   s        therefore the Rß   sF    basepair fares better under the 'NUMBER-OF-BONDS CRITERION' than the s	   basepair.i   s]        therefore the 'NUMBER-OF-BONDS CRITERION' cannot be used to sort out basepair legitimacys$    bonds have been identified for the s    basepair and s
    basepair.(   R¥   (   RÎ   RÏ   Râ   Rã   Rä   Rå   R4  R5  R6  R7  R8  R«   R   RÇ   R±   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   BOND_CRITERION  s"    6
6
Bc         C   sŽ  | d k rÕ | d k rR d | | d | |	 d | d d } | j  d ƒ n7 d | | d | |	 d | d d } | j  d	 ƒ | GHd | | d | | d |  d d
 } | GHd GHd g |  d d +n¢ d t d t d d t d t d d t t t d d t d t d d t d t d d t t t d d } | GHd GH|  j  d ƒ | j  d ƒ |
 d }
 |  | |
 g S(   NR�   s    The basepair formed by residues Rß   s    and with geometry i    s„    will be assigned as 'FALSE'. Please inspect this basepair and its surroundings for the presence of additional misassigned basepairst   FALSEs„    will be assigned as 'WRONG'. Please inspect this basepair and its surroundings for the presence of additional misassigned basepairst   WRONGs!    will be assigned as 'LEGITIMATE's   ################t
   LEGITIMATEi   s   
Basepairs, i   i   i   s    with geometry s    and i   i   i   i   sX    cannot be deconvoluted. Their assignment as legitimate basepairs remains 'UNDETERMINED't   UNDETERMINED(   RI   Rþ   Rñ   R•   R”   R°   Rœ   (   RÎ   RÏ   Râ   Rã   Rä   Rå   R4  R5  R6  R7  t   removedt   undeterminedt   two_base_sharedR«   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt	   DECISSION:  s$    
***~
s,   SEARCHING FOR ERRONEOUSLY ASSIGNED BASEPAIRSRé   t   HIGHR�   s   Single base sharings5   deconvoluting candidate basepairs sharing both bases
s3   deconvoluting candidate basepairs sharing one base
sv   #######################################################
#####SEARCHING FOR ERRONEOUSLY ASSIGNED BASEPAIRS: STRINGENCY s    Run =s   
MODE =s9   
#######################################################
Rà   R=  R>  R@  R  Rë   R	  i   i   s   
################
Basepair, Rß   s    with geometry s    and basepair i   i   sI    share one base!!!!!!
Attempting to deconvolute these two basepairs with s    stringency bys5   Number of helical elements continuous with basepair, s    = sE   
################
Two possible geometries for the basepair formed by s   , i.e.: s    and s   CALCULATING SCOREs   CALCULATING scoret   LOWs$   Number of succesful deconvolutions =s   Two base sharings#    AFTER DETECTION OF FALSE BASEPAIRSs§   
##########################################################################
ORDERING OUTPUT
##########################################################################
RÙ   s   \d+c         C   s(   | t  |  ƒ } d } | | |  }  |  S(   NRÌ   (   Rj   (   t   STRINGt   NUMt   resultt   space(    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt
   ADD_SPACES3	  s    c         C   sô  t  |  d | d ƒ } t  |  d | d ƒ } t  |  d | d ƒ } | d d k r‹ t  |  d | d ƒ } t  |  d | d ƒ } n0 t  |  d | d	 ƒ } t  |  d | d
 ƒ } | d	  | d	  | d	  | d	  | d	  g }	 d }
 x— t t |	 ƒ ƒ D]ƒ } |	 | d k r d |	 | <n  |	 | d d k rPd |	 | d d !|	 | <n  t |	 | ƒ |
 k  rý t |	 | |
 ƒ |	 | <qý qý Wt | d ƒ d k r¯| d d | d <n  t | d ƒ d k rÚ| d d | d <n  t | d ƒ d k r| d d | d <n  | d Gd G| d Gd G| d Gd G| d Gd G| d Gd G| d Gd G| d	 Gd G| d Gd G| d
 G| d G|	 d G| d G|	 d G| d G|	 d GHd G| d Gd G| d G| d G|	 d GHd G| d Gd G| d G| d G|	 d GH|	 S(   Ni    i   i   i   i	   R   i   i   i   i   i   s   0.0s   0.000R·   RÌ   i   i   R¿   s       s     i   i   i   s5                                                        i
   i   i   (   R¥   R‹   Rj   RK  (   t   ARR1t   ARR2RÎ   RÏ   t   diff_1t   diff_2t   diff_3t   diff_P_distt   diff_C1_distRš   t   keyR°   (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt	   DIFF_CALC@	  s6    )™))i   s…   ######################################
##########ORDERED RAW OUTPUT##########        BEGINNING
######################################s^   ############### '*' notes bonds with length larger tan maximum distance cutoff ###############R¿   s   Basepair formed by residuess    ands/   is missing one bond. Searching for missing bondR¸   i
   i   i   RØ   t   11i   i   i	   s   new_list_end[count_for]i   t   00i   i   RÌ   s   --s     -- t   NFs     NF t   *s    FALSEs    UNDETERMINEDs     Dt   NOt   YESs~   ######################################
##########ORDERED RAW OUTPUT##########       END
######################################t   /s   _all-basepairs_REVERSEDt   _PYMOLs   _script.pmlt   ws   load s   
s   color white, /s   /*s   set stick_ball, ons   set stick_ball_ratio, 2.00000s   show stickss   _all-basepairsR¤   s    missR?  sª   

#######################################################
##################### STATISTICS ######################
#######################################################
s   ###### A total ofs   basepairs has been identifieds2   

BASEPAIRS FULLY IDENTIFIED AT DISTANCE CUTOFF = sO   ===============================================================================sO      Scheme   Resid  Base  Resid  Base Expect. Found ATOM ATOM  DIST. Method M.I.s;                #1     #1    #2     #2   Bonds  Bonds  #1   #2s   _basepairs-at-cutoff_s       s     s5                                                        s*   Number of basepairs identified at CUTOFF =t   issZ   ############### notes bonds with length larger tan maximum distance cutoff ###############s   _LEGITIMATED-basepairst   REDsS   

LIST OF LEGITIMATE BASEPAIRS FOUND TO SHARE BASES WITH FALSELY ASSIGNED BASEPAIRSsU   Number of LEGITIMATE BASEPAIRS FOUND TO SHARE BASES WITH FALSELY ASSIGNED BASEPAIRS =s   _FALSE-basepairss   

LIST OF FALSE BASEPAIRSs&   Number of FALSELY ASSIGNED BASEPAIRS =s   _WRONG-basepairss'   

LIST OF BASEPAIRS WITH WRONG GEOMETRYs)   Number of BASEPAIRS WITH WRONG GEOMETRY =s   _UNDETERMINED-basepairss<   

LIST OF BASE-SHARING BASEPAIRS THAT CANNOT BE DECONVOLUTEDs>   Number of BASE-SHARING BASEPAIRS THAT CANNOT BE DECONVOLUTED =s   _MISSING-BOND-basepairss    

LIST OF MISSING-BOND BASEPAIRSs"   Number of MISSING-BOND BASEPAIRS =s9   ############### 'NF' notes Not-found bond ###############t   misss   n
s   0.0s.   STATISTICAL VALUES CALCULATED WITHIN STRUCTUREs   Bond1: MEAN =s   SD =s   Bond2: MEAN = s   Bond3: MEAN =s   P-to-P distance =s   C1'-to-C1' distance =s   No Basepairs =s(   No basepairs of this geometry were founds'   

LIST OF BASEPAIRS ORDERED BY GEOMETRYs   \S+sg   =======================================================================================================sg      Scheme   Resid  Base  Resid  Base Expect. Found  ATOM ATOM  DIST.  DIFF.  DIST   DIFF.  DIST   DIFF.sa                #1     #1    #2     #2   Bonds  Bonds   #1   #2    BOND         P-P          C1'-C1's   PRECALCULATED STATISTICAL DATA:s   
P-to-P distance =s    SD =s   
C1'-to-C1' distance =s(   STATISTICAL DATA FROM CURRENT STRUCTURE:s   
Bond1: MEAN =s   
Bond2: MEAN =s   
Bond3: MEAN =s   NUMBER OF BASEPAIRS WITHs
   geometry =s   LIST FALSE BASEPAIRS WITHs	   geometry:s   NUMBER OF FALSE BASEPAIRS WITHs#   LIST OF UNDETERMINED BASEPAIRS WITHs%   NUMBER OF UNDETERMINED BASEPAIRS WITHs   _UNASSIGNABLE-basepairss   \w+s   color red, /s   /*/*/s   show sticks, /sª   ########################################################
#################### END OF PROGRAM ####################
########################################################(Ê   t
   __future__R    t   syst   numpyR  R  R  R   t   bondsRI   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R    R!   R"   R#   R$   R%   R&   R'   R(   R)   R*   R+   R,   R-   R.   R/   R0   R1   R2   R3   R4   R5   R6   R7   R8   R9   R:   R;   R<   R=   R>   R?   R@   RA   R  Rñ   t   TrueRa   R‰   R–   Rž   R²   R´   R¶   R¾   RÄ   RË   R×   RÝ   RÞ   Rè   R  Rð   R%  Rí   t   argvR  t   pdb_filet   ost   getcwdt   dirR—   t   compilet   mat   finditert   iteratort   aaat   matcht   spanRj   t	   directoryt   FILER˜   t   mmt   startt   STARTR¨   R  t
   run_cutoffRó   Rî   Rö   t   run_cutoff_LISTSt
   MAX_CUTOFFR  t	   incrementRô   RŒ   Rï   R¥   Rì   R2  R;  R<  RD  t$   CONTINUITY_HELICITY_CRITERION_outputt   while_controlt	   run_whilet
   stringencyt   single_base_sharedRC  t   MODERA  R«   R‹   R•   R”   R°   Rœ   Rš   Rþ   t   SCORER8  R  t	   decissionRB  RÑ   R±   t   new_list_endt   maxt	   yes_countR‘   R™   Rü   t
   compare_toRú   RK  RT  RS  t	   count_fort   zerost   reshapet   new_list_end_floatst   missingt   missing_controlR­   R+  R)  R*  t   a4R®   t   placet   endingt   LEGITIMATE_taggedt   falsely_assignedt   wrongly_assignedt   missing_bondRª   t   pymol0t   opent   line0R¦   t   pymol1R©   t   basepair_countR§   RÈ   R¬   t   STATSt   SUMt   countert   et   arrayt   meant   stdt   shapeRÉ   t   geometry_countert   geometry_counter_realt   schemet   false_countert   undetermined_countert   processed_controlR  t	   formattedt   vt   exit(    (    (    sA   /public2/ftp/pub/ccp4/6.5/ccp4-6.5/lib/py2/mmtbx/pdb_distances.pyt   <module>   sä  m--------------------------------------------------œœœ#	W	-		,						S	.	,	"	‘	X	ÿ �	=

%
"

7	-	&	%	%	ŒŒ~@	@	†CC[^mR[^**	cfccc,							*+(%@8"#
<\a¶<,- ?'?$ '$0		(	(	!,	,	$6.Pl
*.ÿ 
9=+
.Ñ-1.Ñ-1.Ñ-1.Ñ-1.Ñ-1+hÿ 7×´	
@
GLÄE¥
Z
Z .	0