2016-06-21 2 views
0

PyMol에서 상호 작용 이름을 변경하기위한 루프를 만들고 싶습니다. 그러나 하나의 선택 루프가 끝나면 충돌이 발생하고 작동하지 않습니다. 상호 작용의 기본 이름은 dist01, 02 인 파이 몰에서pymol 이름 바꾸기 루프를 만드는 방법

def get_dists(interactions): # interactions=([1,2], [3,4]) 

    for i in interactions: 
     a = "////" + str(i[0]) + "/C2'" 
     b = "////" + str(i[1]) + "/C2'" 
     cmd.distance("(" + a + ")", "(" + b + ")") 

     for j in range(1, 599): 
      x = "dist" + "0" + str(j) 
      y = str(i[0]) + " " + str(i[1]) 
      cmd.set_name(str(x), str(y)) 

, 03

나는, 1_3에 5_59, 4_8, (잔류 물 사이의 상호 작용을)이을 변경하고 싶습니다.

답변

0

코드는 한 가지를 제외하면 완전히 괜찮습니다. PyMol이 set_name에 성공하지 못하면 전체 스크립트가 중단됩니다. 당신이 그것을 변경하는 경우, 그것을 작동합니다 :

try: 
    cmd.set_name(str(x), str(y)) 
except: 
    print('failed to rename') 

일부 추가 의견 :

  • y = str(i[0]) + " " + str(i[1])이 줄은 패딩 제로 x = "dist" + "0" + str(j) 대한 아마 y = str(i[0]) + "_" + str(i[1])
  • 해야한다. 이것은 j 한 자리 때만 필요 달리 거리 오브젝트의 이름이나 dist20
  • cmd.set_name(str(x), str(y))dist123xcmd.set_name(x, y) 때문에 단순화 될 수 있고, 이미 ystrings이다이다.