두 개의 서로 다른 사슬에 속한 두 개의 원자가 '결합 된'것으로 간주되는지 아닌지를 찾으려고합니다. 이것은 주어진 x, y, z 좌표를 통해 찾을 수있는 거리 (euclidian)가 두 원자의 반 데르 발스 (van der Waals)에 0.5A를 더한 값보다 더 짧으면 경계로 간주된다는 사실에 근거합니다. 문제는 각 원자에 대한 반 데르 발스 (Van der Waals)를 계산하는 방법을 이해하지 못했다는 것입니다. PDB에서 원자 이름은 CB1, CA 등과 같으므로 단일 원자가 아닙니다. 예를 들어 N에 대해 Waals 반경을 알고 있습니다. 원자 사이의 원자 거리를 계산하는 코드를 작성할 수는 있지만 필수적인 반 데르 발스 부분을 수행하지 못했습니다. 나는 그 두 체인 사이의 루프 만들고만큼의 거리를 비교할 수 있습니다아미노산 결합 부위 발견, 단백질 데이터베이스
http://www.rcsb.org/pdb/explore.do?structureId=3KUD
a = open('3kud.pdb', 'r') # opening the PDB file
b = a.readlines() # reading the file line by line
c = [x.strip('\n') for x in b] # extracting '\n' from each line
d = []
# Creating a function that extract information from the given PDB list(only the ATOM parts)
def pdbread():
global C# calling c in order to define d based on c.
global d # empty list that contains all the atoms in the list
for i in range(len(c)):
if c[i].startswith('ATOM'):
d.append(c[i])
else:
continue
return d
print 'The atom part of the given PDB file', pdbread()
w = [] # I, then, splitted the given whole atom list part so that each column could be read on the file.
for i in range(len(d)):
line = d[i].split()
w.append(line)
Chain_A = []
Chain_B = []
for z in w:
if z[4] == 'A':
Chain_A.append(z)
if z[4] == 'B':
Chain_B.append(z)
print 'Splitted form of the atom part of the PDB file', w
print 'Chain A :', Chain_A
print 'Chain B:', Chain_B
: 여기에 내가 두 체인의 정보와 PDB에 대한 링크를 추출하기 위해 작성한 코드입니다 서로 상호 작용할 수있는 두 원자 사이의 반 데르 발스 반경을 계산하는 방법을 얻습니다.
EDIT : CB, OG1이 각각 탄소와 산소이고 첫 번째 문자가 각 원자라고 가정하여 앞으로 나아 가기로 결정했고, 그것들의 반 데르 발스 가치를 취할 것입니다. 그럼에도 불구하고, 나는 여전히 두 체인 사이의 루프 생성하는 코드를 작성하고 의 형태로 거리를 계산하기 위해 고군분투 'vanderWaalsOfatomOfChainA + vanderWaalsOfatomOfChainB + 0.5'> '유클리드 공식에 따라 그들의 거리'같은 경우 등
편집이 : 나는 Chain_A 여기 Chain_B의 각 목록에 반 데르 발스 반경을 추가하는 관리되는 코드입니다
for z in w:
if z[2][0] == 'N':
z.append(1.55)
if z[2][0] == 'O':
z.append(1.52)
if z[2][0] == 'C':
z.append(1.7)
if z[2][0] == 'S':
z.append(1.8)
if z[2][0] == 'H':
z.append(1.2)
하지만이 필요로하는 모든이의 모두 루프를 작성하는 방법을 찾는 것입니다 쇠사슬. 나는 A와 B의 모든 원자를 비교해야한다는 것을 의미합니다. 12. 각 목록의 슬롯은 반 데르 발스 반경을 제공하고 A의 각 목록의 12 번째와 B의 각 목록의 12 번째를 더한 0.5를 계산하여 비교해야합니다 euclidian 공식!
최종 편집 :이 코드를 작성했지만 작동하지 않습니다! 이 아이디어를 바탕으로 Chain_A의 각 요소를 Chain_B와 비교해야합니다.
A_binding = []
B_binding = []
for x,y in zip(Chain_A, Chain_B):
if x[12] + y[12] + 0.5 > sqrt((float(x[6])-float(y[6]))**2 + (float(x[7])-float(y[7]))**2 + (float(x[8])-float(y[8]))**2):
A_binding.append(x)
B_binding.append(y)
print A_binding
print B_binding
무거운 짐을 싣기 위해 화학 정보학 라이브러리를 사용하지 않는 이유는 무엇입니까? – Hristo
스크립트를 작성해야하기 때문입니다. 나는 실제 코드에 대해 더 많은 수정을 할 것이고, 나는 무언가를했고 그것은 효과가있을 것이다. – aleatha