예제 #1
0
def dcd_fit(filename_dcd, filename_dcd_out, natom_total, serials,
            filename_rmsd):
    f_out = open(filename_rmsd, 'w')

    # Coord1
    pdb = PdbFile('16SCD.cg.pdb')
    pdb.open_to_read()
    ref_chains = pdb.read_all()
    pdb.close()

    #num_atom = 0
    #for chain in ref_chains :
    #    for residue in chain.residues :
    #        num_atom += len(residue.atoms)

    ref = zeros((natom_total, 3), dtype=float64, order='C')

    i = 0
    for chain in ref_chains:
        for residue in chain.residues:
            for atom in residue.atoms:
                (ref[i][0], ref[i][1], ref[i][2]) = atom.xyz.get_as_tuple()
                i += 1

    mask = []
    for i in range(natom_total):
        # the serial ID starts from 1, thus i+1 is the serial ID
        if i + 1 in serials:
            mask.append(1)
        else:
            mask.append(0)

    dcd = DcdFile(filename_dcd)
    dcd.open_to_read()
    dcd.read_header()

    out_dcd = DcdFile(filename_dcd_out)
    out_dcd.open_to_write()
    out_dcd.set_header(dcd.get_header())
    out_dcd.write_header()

    #dcd.show_header()
    k = 0
    while dcd.has_more_data():
        k += 1
        coords_dcd = dcd.read_onestep_np()

        rmsd = superimpose(ref.T, coords_dcd.T, mask)

        f_out.write('{:8d} {:6.2f}\n'.format(k, rmsd))

        out_dcd.write_onestep(coords_dcd)

    dcd.close()
    out_dcd.close()
예제 #2
0
        chains_cg.append(c_cg)

    return chains_cg


if __name__ == '__main__':

    from cafysis.file_io.pdb import PdbFile

    if len(sys.argv) not in (3, 4):
        print(
            'Usage: SCRIPT [input aa PDB] [flag to start with P (Y/n)] [output cg PDB]'
        )
        sys.exit(2)

    flg_start_P = False
    if len(sys.argv) == 4:
        if sys.argv[2] == 'Y':
            flg_start_P = True

    aa = PdbFile(sys.argv[1], 'r')
    chains = aa.read_all()
    aa.close()

    chains_cg = aa2cg(chains, flg_start_P)

    cg = PdbFile(sys.argv[-1], 'w')
    cg.write_all(chains_cg)
    cg.close()
예제 #3
0
#!/usr/bin/env python

#from Superimpose_weight import superimpose
from Superimpose_mask import superimpose
from cafysis.file_io.pdb import PdbFile
from cafysis.util_pdb import chains_to_ndarray

NATOM = 1037
chains_ref = PdbFile('../16SCD.cg.pdb', 'r').read_all_and_close()
chains_que = PdbFile('./cg.pdb', 'r').read_all_and_close()

#weight = [1.0]*NATOM
weight = [0.0] * NATOM
for i in range(14, 43):
    weight[i] = 1.0

d_ref = chains_to_ndarray(chains_ref)
d_que = chains_to_ndarray(chains_que)

rmsd = superimpose(d_ref.T, d_que.T, weight)

print(rmsd)
예제 #4
0
            serials.append(3*(res-1)+1)  # S
        elif 848 <= i <= 913:
            res = i - 567
            serials.append(3*(res-1))  # P
            serials.append(3*(res-1)+1)  # S
        else:
            print("Error: resid {:d} should not be there".format(i))
            sys.exit(2)
    
    for cM in cMs:

        filename_dcd = 'cM{:s}.fit{:s}.dcd'.format(cM,name)
        filename_dx  = 'cM{:s}.fit{:s}.dx'.format(cM,name)
    
        nMg = 0
        c = PdbFile('../make_ninfo/16SCD.cM{:s}.cg.ion.pdb'.format(cM),'r').read_all_and_close()[0]
        for r in c.residues:
            if r.atoms[0].name.strip() == 'MG':
                nMg += 1
        
        dcd = DcdFile(filename_dcd)
        dcd.open_to_read()
        dcd.read_header()
        
        data = []
        
        mm = minmax()
        
        ''' Create target volume '''
        mm_target = minmax()
        c = PdbFile('./16SCD.cg.pdb','r').read_all_and_close()[0]
ID_DOM_INI = int(sys.argv[3]) - 1  # 重心を求める際に必要
ID_DOM_END = int(sys.argv[4]) - 1
ID_DOM_INI_FIT = int(sys.argv[5]) - 1  # 重心を求める際に必要
ID_DOM_END_FIT = int(sys.argv[6]) - 1
BOXSIZE = float(sys.argv[7])

BOXMAX = 0.5 * BOXSIZE
BOXMIN = -0.5 * BOXSIZE


### Files
dcd = DcdFile(sys.argv[1])
dcd.open_to_read()

pdb = PdbFile(sys.argv[2])
pdb.open_to_read()

dcd_out = DcdFile(sys.argv[-1])
dcd_out.open_to_write()


### Read the reference pdb
ref_chains = pdb.read_all()

num_atom = 0
for chain in ref_chains :
    num_atom += chain.num_atom()

ref = zeros((3, num_atom), dtype=float64, order='F')
i = 0
예제 #6
0

def apply_rot(chains, rot):

    for c in chains:
        for r in c.residues:
            for a in r.atoms:
                coords = a.xyz.get_as_list()
                coords = dot(rot, coords + [
                    1.0,
                ])[0:3]
                a.xyz.x = coords[0]
                a.xyz.y = coords[1]
                a.xyz.z = coords[2]


if __name__ == '__main__':

    import sys
    if len(sys.argv) != 3:
        print("Usage: SCRIPT [input reference PDB] [input query PDB]")
        sys.exit(2)

    chains_ref = PdbFile(sys.argv[1], 'r').read_all_and_close()
    chains_que = PdbFile(sys.argv[2], 'r').read_all_and_close()

    rmsd, rot = fit(chains_ref, chains_que)

    print(rmsd)
    print(rot)
예제 #7
0
#    print('       % SCRIPT [input DCD] [beginning (0)] [end] [stride] [reference PDB] [output movie]')
#    sys.exit(2)

#if args.flg_fit:
#    from Superimpose import superimpose

if args.frame_begin < 0:
    print('Error: Beginning frame must be > 0')
    sys.exit(2)

if args.frame_stride <= 0:
    print('Error: Frame stride must be > 0')
    sys.exit(2)

# Read the reference PDB
pdb = PdbFile(args.pdb)
pdb.open_to_read()
chains = pdb.read_all()
pdb.close()

# Output PDB
movie = PdbFile(args.out)
movie.open_to_write()

# Open DCD and read the header
dcd = DcdFile(args.dcd)
dcd.open_to_read()
dcd.read_header()

num_dcd_frames = dcd.count_frame()
예제 #8
0
    nt = nt12 - 11
    mp_domA.append(3 * (nt - 1))  # Use phosphate

mp_domA_0 = 3 * (110 - 11)
mp_domA_1 = 3 * (72 - 11)

mp_domB = []
for nt12 in list(range(42, 47 + 1)) + list(range(174, 178 + 1)) + list(
        range(130, 166 + 1)):
    nt = nt12 - 11
    mp_domB.append(3 * (nt - 1))  # Use phosphate

mp_domB_0 = 3 * (155 - 11)
mp_domB_1 = 3 * (130 - 11)

pdb = PdbFile(pdbfilepath)
pdb.open_to_read()
chains = pdb.read_all()
c = chains[0]
pdb.close()
'''
Domain A
'''
xyzs = []
for imp in mp_domA:
    xyzs.append(c.get_atom(imp - 1).xyz.get_as_list())

xyzs = np.array(xyzs)
com = np.sum(xyzs, axis=0) / float(xyzs.shape[0])
#print com
xyzs = xyzs - com
예제 #9
0
if len(sys.argv) < 5:
    print(('Usage: % SCRIPT [PDB filename] [DCD filename]'
            +'[serial ID begin] [serial ID end]'))
    sys.exit(2)
    
filename_pdb = sys.argv[1]
filename_dcd = sys.argv[2]

id_begin = []
id_end = []
for iarg in range(3, len(sys.argv)-1, 2) :
    id_begin.append(int(sys.argv[iarg]))
    id_end.append(int(sys.argv[iarg+1]))

# Coord1
pdb = PdbFile(filename_pdb)
pdb.open_to_read()
ref_chains = pdb.read_all()
pdb.close()

num_atom = 0
for chain in ref_chains :
    for residue in chain.residues :
        num_atom += len(residue.atoms)
    
ref = zeros((3, num_atom), dtype=float64, order='F')

i = 0
for chain in ref_chains :
    for residue in chain.residues:
        for atom in residue.atoms :
예제 #10
0
from cafysis.file_io.dcd import DcdFile
from cafysis.file_io.pdb import PdbFile

if len(sys.argv) != 5:
    print(
        'Usage: % SCRIPT [PDB filename] [DCD filename] [out PDB filename] [out bfactor file]'
    )
    sys.exit(2)

filename_pdb = sys.argv[1]
filename_dcd = sys.argv[2]
filename_outpdb = sys.argv[3]
filename_out = sys.argv[4]

# Coord1 fron input PDB
pdb = PdbFile(filename_pdb)
pdb.open_to_read()
chains = pdb.read_all()
pdb.close()

num_atom = 0
for chain in chains:
    num_atom += chain.num_atom()

#i = 0
#for chain in ref_chains :
#    for residue in chain.residues:
#        for atom in residue.atoms :
#            (ref[0][i], ref[1][i], ref[2][i]) = atom.xyz.get_as_tuple()
#            i += 1
#
예제 #11
0
    print('Usage: SCRIPT [PDB]')
    print('')
    print('Returns: %5i %6.3f %6.3f %6.3f % (N, Rg, D, S)')
    print('    N  = number of particles (atoms)')
    print('    Rg = radius of gyration')
    print('    D  = Sphericity (0 <= D <= 1)')
    print('          D = 0 --> perfect sphere')
    print('          D > 0 --> anisotropic')
    print('    S  = Spheroidal shape (-1/4 <= S <= 2)')
    print('          S < 0 --> oblate')
    print('          S > 0 --> prolate')
    sys.exit(2)


# Read PDB coordinates
pdb = PdbFile(sys.argv[1])
pdb.open_to_read()
chains = pdb.read_all()
xyzs = []
for c in chains:
    for r in c.residues:
        for a in r.atoms:
            xyzs.append(a.xyz.get_as_list())

'''
xyzs for N-atom PDB
 [ [ 1x, 1y, 1z],
   [ 2x, 2y, 2z],
   [ 3x, 3y, 3z],
   [ 4x,  .
          .
예제 #12
0
(ignore Hydrogen atom)
'''

import sys
from cafysis.file_io.pdb import PdbFile
from cafysis.elements.coord import Coord
from cafysis.elements.pdb import Chain, Residue, Atom

element2mass = {'P': 30.973761, 'O': 15.9994, 'C': 12.0107, 'N': 14.0067}

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print('Usage: %SCRIPT [input PDB file] [output PDB]')
        sys.exit(2)

pdb_in = PdbFile(sys.argv[1])
pdb_in.open_to_read()
chains = pdb_in.read_all()
pdb_in.close()

pdb_out = PdbFile(sys.argv[2])
pdb_out.open_to_write()
pdb_out.write_remark('Generated using cafysis/pdb_rna_nucleotide_com.py')
import time
import datetime
pdb_out.write_remark('At %s' % (datetime.datetime.fromtimestamp(
    time.time()).strftime('%Y%m%d %H:%M%S'), ))

chains_com = []

from . import elements
예제 #13
0
#!/usr/bin/env python
'''
@author: Naoto Hori
'''
import sys
from cafysis.file_io.pdb import PdbFile

if len(sys.argv) != 5:
    print('\n Usage: SCRIPT [list file] [input PDB1] [input PDB2] [output]\n')
    sys.exit(2)

f_list = open(sys.argv[1], 'r')

f_pdb = PdbFile(sys.argv[2])
f_pdb.open_to_read()
chains1 = f_pdb.read_all()
f_pdb.close

f_pdb = PdbFile(sys.argv[3])
f_pdb.open_to_read()
chains2 = f_pdb.read_all()
f_pdb.close

f_out = open(sys.argv[4], 'w')

if len(chains1) != len(chains2):
    print(("Error: len(chains1)(=%i)  !=  len(chains2)(=%i)" %
           (len(chains1), len(chains2))))
    sys.exit(2)
# !!! current version is for only single chain !!!
if len(chains1) != 1 or len(chains2) != 1:
예제 #14
0
import sys
import math

from cafysis.file_io.pdb import PdbFile
from cafysis.elements.coord import Coord

if len(sys.argv) not in (2, 3):
    print('Usage: SCRIPT [PDB]  (score cutoff = 0.5)')
    print('  or : SCRIPT [PDB] [score cutoff]')
    sys.exit(2)

SCORE_CUT = 0.5
if len(sys.argv) > 2:
    SCORE_CUT = float(sys.argv[2])

pf = PdbFile(sys.argv[1])
pf.open_to_read()
chains = pf.read_all()
pf.close()

coms = []
normals = []
locations = []

## Suppose all residues have a base

nres = 0
for ic, c in enumerate(chains):
    for ir, r in enumerate(c.residues):

        nres += 1
예제 #15
0
## If residues in the original PDB are
# DT5, DA, DC ...., then
SEQ_POSITION = 1
# T5, A, C ...., then
#SEQ_POSITION = 0

ATOMS_P = ('P', 'OP1', 'OP2', "O5'")  # "O3'" from the previous nucleotide
ATOMS_P_AMBER = ("P", "O1P", "O2P", "O5*")
ATOMS_S = ("C5'", "C4'", "C3'", "C2'", "C1'", "O4'")
ATOMS_S_AMBER = ("C5*", "C4*", "C3*", "C2*", "C1*", "O4*")
ATOMS_A = ("N9", "C8", "N7", "C5", "C6", "N6", "N1", "C2", "N3", "C4")
ATOMS_G = ("N9", "C8", "N7", "C5", "C6", "O6", "N1", "C2", "N2", "N3", "C4")
ATOMS_C = ("N1", "C2", "O2", "N3", "C4", "N4", "C5", "C6")
ATOMS_T = ("N1", "C2", "O2", "N3", "C4", "O4", "C5", "C7", "C6")

aa = PdbFile(sys.argv[1])
aa.open_to_read()
chains = aa.read_all()

cg_chains = []

atom_id = 0
for c in chains:
    c_cg = Chain()
    xyz_O3 = None
    res_id = 0

    for ir, r in enumerate(c.residues):

        xyz_P = Coord()
        nP = 0
예제 #16
0
#!/usr/bin/env python

import sys
import math

from cafysis.file_io.pdb import PdbFile
from cafysis.file_io.ninfo import NinfoFile
from cafysis.para.rnaAform import ARNA
from cafysis.para.rnaDT13 import DT13
from cafysis.elements.ninfo import NinfoSet, BondLength, BondAngle, BaseStackDT, HBondDT

if len(sys.argv) != 4:
    print('Usage: SCRIPT [cg pdb] [hb list file] [output ninfo]')
    sys.exit(2)

f_in = PdbFile(sys.argv[1])
f_in.open_to_read()
chains = f_in.read_all()
f_in.close()

if len(chains) > 1:
    print('%i chains' % len(chains))

n_nt = []
for ic, c in enumerate(chains):
    n_nt.append(c.num_res())
    print('#nt (chain %i): ', ic + 1, n_nt)

seq = []
for ic, c in enumerate(chains):
    s = []
예제 #17
0
            assembly_units.append(mtx_id)

        if row == 3:
            row_pre = 0
        else:
            row_pre = row

#TEST
#for mtx_id in assembly_units:
#    print (mtx_id)
#    matrices[mtx_id].show()
#sys.exit(1)

filename_pdb = sys.argv[1]
''' Read inpout PDB '''
pdb = PdbFile(filename_pdb)
pdb.open_to_read()
chains = pdb.read_all()
pdb.close()

_, ext = os.path.splitext(filename_pdb)
filename_base = os.path.basename(filename_pdb)[:-len(ext)]
''' Rotate and output each assembly unit '''
for mtx_id in assembly_units:

    newchains = copy.deepcopy(chains)

    for c in newchains:
        for r in c.residues:
            for a in r.atoms:
                #print ('###')
예제 #18
0
atoms_AU = 'N6 O4 N1 N3 TER'
atoms_GC = 'N1 N3 N2 O2 O6 N4 TER'
atoms_GU = 'N1 O2 O6 N3 TER'

if len(sys.argv) != 4:
    print(
        "Usage: SCRIPT [input cg.pdb (for seq)] [input hb.native.dat] [output hbond.dat]"
    )
    sys.exit(2)

filepath_pdb = sys.argv[1]
filepath_hb = sys.argv[2]
filepath_out = sys.argv[3]

pdb = PdbFile(filepath_pdb)
pdb.open_to_read()
chains = pdb.read_all()

if len(chains) != 1:
    print("Error: len(chains) != 1, not supported")
    sys.exit(2)

seq = ''
for r in chains[0].residues:
    seq += r.atoms[0].res_name.strip()[-1]

nseq = len(seq)
print(seq)
print('length = %i' % nseq)
예제 #19
0
'''
Created on 2013/08/06
@author: Naoto Hori
'''

import sys
from cafysis.file_io.dcd import DcdFile
from cafysis.file_io.ts import TsFile
from cafysis.file_io.pdb import PdbFile

if len(sys.argv) != 5:
    print('Usage: % SCRIPT [input DCD] [ts file] [reference PDB] [output movie]')
    sys.exit(2)

# Read the reference PDB
pdb = PdbFile(sys.argv[-2])
pdb.open_to_read()
chains = pdb.read_all()
pdb.close()

# Output PDB
pdb = PdbFile(sys.argv[-1])
pdb.open_to_write()

# Open DCD and read the header
dcd_filename = sys.argv[1]
dcd = DcdFile(dcd_filename)
dcd.open_to_read()
dcd.read_header()

# Open TS and read the header
예제 #20
0
'''
RN20:107
Ste7のPDBについて、位置と配向を揃える
'''

from cafysis.elements.coord import Coord
from cafysis.mtx_coord_transform import mtx_crd_transform
from cafysis.file_io.pdb import PdbFile
import sys
from math import hypot, atan2

if len(sys.argv) != 2:
    print('Usage: SCRIPT [file]')
    sys.exit(2)

pdb = PdbFile(sys.argv[1])
pdb.open_to_read()
chains = pdb.read_all()

#DEBUG from math import sqrt
#DEBUG Q = Coord(-2,-2*sqrt(3.0), - 4*sqrt(3.0))
# QにSte7のQ189:CAの座標を代入
Q = Coord()
for atom in chains[1].residues[188].atoms:
    if atom.name.find("CA") != -1:
        #(Q.x,Q.y,Q.z) = atom.xyz.get_as_tuple()
        Q = atom.xyz
N = Coord()
for atom in chains[1].residues[200].atoms:
    if atom.name.find("CA") != -1:
        N = atom.xyz
예제 #21
0
SEP_B_B = 3  # residue (i) and residue (i+3)
SEP_B_S = 2  # residue (i) and residue (i+2)
SEP_S_S = 2  # residue (i) and residue (i+2)

import sys
from cafysis.file_io.pdb import PdbFile
from cafysis.file_io.ninfo import NinfoFile
from cafysis.elements.ninfo import NinfoSet, Fene, LJ
from cafysis.para.BetancourtThirumalai import BTmatrix

if len(sys.argv) != 3:
    print('Usage: SCRIPT [input PDB] [output ninfo]')
    sys.exit(2)

p = PdbFile(sys.argv[1])
p.open_to_read()

chains = p.read_all()

ns = NinfoSet()

a_BB_pre = None

for ic, c in enumerate(chains):
    for r in c.residues:

        num_a = len(r.atoms)
        a_BB = None
        a_SC = None
예제 #22
0
import sys
from cafysis.file_io.pdb import PdbFile

if len(sys.argv) < 5:
    print(
        'Usage: % SCRIPT [average file] [input pdb] [ev file] [,ev file ....] [output PC file]'
    )
    sys.exit(2)

data_ave = []
for line in open(sys.argv[1], 'r'):
    data_ave.append(float(line.strip()))

print(("#Dimension: %s" % len(data_ave)))

f_pdb = PdbFile(sys.argv[2])
f_pdb.open_to_read()

f_out = open(sys.argv[-1], 'w')

# Read eigen values
num_ev = len(sys.argv) - 4
ev = []
for i in range(num_ev):
    f_ev = open(sys.argv[i + 3], 'r')
    ev_tmp = []
    for line in f_ev:
        if line.find('#') != -1: continue
        ev_tmp.append(float(line.strip()))
    ev.append(ev_tmp)
    f_ev.close()
예제 #23
0
from cafysis.file_io.dcd import DcdFile
from cafysis.file_io.pdb import PdbFile
from Superimpose_mask import superimpose
from numpy import zeros, asarray, float64
import sys

id_begin = []
id_end = []
for iarg in range(4, len(sys.argv)-1, 2) :
    id_begin.append(int(sys.argv[iarg]))
    id_end.append(int(sys.argv[iarg+1]))

NATOM_TOTAL = 5594

# Coord1
pdb = PdbFile('16SCD.cg.pdb')
pdb.open_to_read()
ref_chains = pdb.read_all()
pdb.close()

num_atom = 0
for chain in ref_chains :
    for residue in chain.residues :
        num_atom += len(residue.atoms)
    
#ref = zeros((3, NATOM_TOTAL), dtype=float64, order='F')
ref = zeros((NATOM_TOTAL, 3), dtype=float64, order='C')

i = 0
for chain in ref_chains :
    for residue in chain.residues:
예제 #24
0
'''
@author: Naoto Hori
'''

import sys
from cafysis.file_io.pdb import PdbFile

if len(sys.argv) != 5:
    print('')
    print(
        ' Usage: SCRIPT [input PDB] [The residue number of the first a.a.] [output PDB] [log file]'
    )
    print('')
    sys.exit(2)

pdb_in = PdbFile(sys.argv[1])
pdb_in.open_to_read()
chains = pdb_in.read_all()
pdb_in.close()

res_id = int(sys.argv[2])
f_log = open(sys.argv[4], 'w')
f_log.write('#original -> new\n')
for c in chains:
    print(sys.argv[1], '#residues', len(c.residues))
    for r in c.residues:
        f_log.write('%i %s -> %i\n' %
                    (r.atoms[0].res_seq, r.atoms[0].ins_code, res_id))
        for a in r.atoms:
            a.res_seq = res_id
            a.ins_code = '    '
예제 #25
0
from cafysis.elements.ninfo import NinfoSet
from cafysis.file_io.ninfo import NinfoFile
from cafysis.file_io.pdb import PdbFile

if len(sys.argv) != 4:
    print ("Usage: SCRIPT [ninfo file] [pdb file] [output file]")
    sys.exit(2)

file_ninfo = NinfoFile(sys.argv[1])
file_ninfo.open_to_read()
ns = NinfoSet()
file_ninfo.read_all(ns)
ns.update_info()
file_ninfo.close()

file_pdb = PdbFile(sys.argv[2])
file_pdb.open_to_read()
chains = file_pdb.read_all()

xyz = []
for c in chains:
    for i in range(c.num_atom()):
        xyz.append(c.get_atom(i).xyz)
    
print(("## Confirmation: number of atoms = %i" % len(xyz)))
        
f_out = open(sys.argv[-1],'w')

f_out.write('#Contacts\n')
for con in ns.contacts:
    conid = con.id
예제 #26
0
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''
@author: Naoto Hori
'''
import sys
from cafysis.file_io.pdb import PdbFile

if len(sys.argv) != 6:
    print(
        '\n Usage: SCRIPT [bfactor file] [PDB file] [scale] [Upper] [output PDB file]\n'
    )
    sys.exit(2)

f_bf_in = open(sys.argv[1], 'r')
f_pdb = PdbFile(sys.argv[2])
f_pdb.open_to_read()
chains = f_pdb.read_all()
f_pdb.close()

f_pdb_out = PdbFile(sys.argv[-1])
f_pdb_out.open_to_write()
f_pdb_out._file.write('RECORD # SCRIPT: bfactor_write_to_pdb.py\n')
f_pdb_out._file.write('RECORD # argv[1]: ' + sys.argv[1] + '\n')
f_pdb_out._file.write('RECORD # argv[2]: ' + sys.argv[2] + '\n')
f_pdb_out._file.write('RECORD # argv[3]: ' + sys.argv[3] + '\n')
f_pdb_out._file.write('RECORD # argv[4]: ' + sys.argv[4] + '\n')
f_pdb_out._file.write('RECORD # argv[5]: ' + sys.argv[5] + '\n')

scale = float(sys.argv[3])
upper = float(sys.argv[4])
#!/usr/bin/env python

from cafysis.elements.pdb import Chain, Residue
from cafysis.file_io.pdb import PdbFile
from cafysis.pdb_aa2cg import aa2cg
from cafysis.bestfit_pdb_chains import fit, apply_rot

# Reference structure
chains_1j5e_cg = PdbFile('../16SCD.cg.pdb', 'r').read_all_and_close()
'''
4y4o-pdb-bundle1.pdb
4y4o-pdb-bundle2.pdb  <=== A 562-913 = 16SCD
4y4o-pdb-bundle3.pdb
4y4o-pdb-bundle4.pdb  <=== A 562-913 = 16SCD
'''

DISTANCE_MG = 6.0


def check_distance(chain_ref, atom_query):
    for r in chain_ref.residues:
        for a in r.atoms:
            if atom_query.xyz.distance(a.xyz) <= DISTANCE_MG:
                return True
    return False


for ibundle_16SCD, ibundles_Mg, modelname in ((2, (1, 2), '1a'), (4, (3, 4),
                                                                  '2a')):

    # Read 16SCD  (Turn on HETATM to read Mg)