도로시 호지킨 (Dorothy Hodgkins)

Image

며칠 전 (2014년 5월 12일) 구글 두들에는 이런 것이 올라왔음. 이게 뭘까? 오늘은 영국의 화학자인 도로시 호지킨 (Dorothy Hodkins, 1910-1994) 의 탄생일이다. 단백질 결정학을 주요 연구도구중의 하나로 사용하고 있는 사람으로써, 내가 사용하는 툴의 기틀을 닦은 양반에 대해서 뭔가 써야 할 의무감을 느껴서.

Image

1. 굇수

구조생물학을 하는 사람에게 있어서 가장 중요한 업적이라면? 당연히 생체물질의 구조를 규명하는 일이다. 구조를 규명한다면 기왕이면 생물학적으로 중요한 구조면 더욱 좋겠지? 평생 하나의 중요한 생체물질의 구조 정도만을 규명해도 이 바닥에서 “우와 무슨 무슨 구조를 푼 누구누구 짱짱맨~” 소리를 듣는다. 그러나 이 양반은 다음과 같은 구조를 혼자서 푸신 양반이다. 더 중요한 것은 이 양반이 이렇게 복잡한 화학물질의 구조를 X선 결정학을 이용하여 풀기 전까지는 그런 것이 가능하다라고 생각하지조차 못했다는 사실.

– 페니실린 G (1945)

Image

20세기 중반만 하더라도 X선 결정학은 일부 물리학자들이나 가지고 노는 실험방법이라고 간주되었고, 이것을 이용하여 복잡한 화학물질의 구조를 규명하는 것은 어불성실이라고 생각했던 모양이다. 도로시 호지킨이 X선 결정법에 의해서 베타락탐링을 가지는 페니실린의 구조를 발표했을때 이것이 그대로 받아들여지지 않았다. 이러한 구조는 너무 불안정해서 자연계에 존재할 수 없다나.. John Cornforth라는 사람은 심지어 이렇게 말했다고. “ㅋㅋ 저게 페니실린의 구조라면 난 걍 화학을 관두고 버섯이나 키울란다 ㅋㅋㅋㅋㅋ”  If that’s the formula of penicillin, I’ll give up chemistry and grow mushrooms”

그러나 도로시 눈화의 그 구조는 맞아버렸고, 뻔뻔스럽게도 ‘버섯가이’ 는 자기의 호언장담은 입싹씻고 그냥 화학연구를 계속했다. 독버섯은 기억상실증을 유도할수도 있습니다 연구하다가 심심했는지 도로시 눈화가 갔다온 10주년 기념으로 1975년 스웨덴에 관광도 가기도 하고.

비타민 B12 (1954)

Image

Image

이런 업적때문에 이 양반은 1964년 스웨덴에 갔다오셨다. 참고로 여성으로 노벨 화학상을 받은 것은 마리 퀴리와 그 딸 이레느 퀴리 이후 세번째. 즉 이름에 ‘퀴리’ 가 안 들어간 분으로는 최초라는 이야기다.

그런데 보통 노벨상 받은분들이면 걍 이제 퍼져노셔도 연구의 일선에서 떠나기 마련이지만 이 양반은 그 이후에도 연구에 전념.그리하여,

인슐린 (1969년)

Image

즉 이 양반은 한개를 풀어도 오오 스웨덴 어서오세염~ 할만한 일을 3인분을 하셨다는. 게다가 그 당시는 요즘처럼 결정을 만들면 슥 올려놓으면 자동으로 수백장의 데이터를 모아주고 자동적으로 회절이미지를 분석해주던 시기도 아니고, 결정 하나에 엑스레이 사진 한장 꽝 찍고, 그리고 이걸 디벨로퍼와 픽서를 가지고 현상~ 이걸 수백번 반복.  현상한 필름에서 나온 점들의 위치를 재고….등등을 반복하여 일일히 복잡한 계산을 하던 시가라는 것을 생각하면 더욱 ㅎㄷㄷ

2. 사회운동가

과학자로써도 초일류의 사람이었으나, 이 사람은 정치사회적 문제에 대해서 꽤 앞장서 발언을 하는 사람으로 유명했었다. 아마도 그 이유로는 이 사람의 멘터인 존 데스먼드 버날의 영향이었을 것이다. 이 사람은 X선 결정학의 발전과정에서 결정적인 공헌을 한 것으로도 유명하지만 정치적인 활동으로도 유명한 사람.

Image

로절린드 프랭클린을 Birbeck College로 스카우트해간 사람도 이사람.

여튼 도로시 호지킨은 남편인 라이오넬 호지킨과 함께 여러가지 사회정치적인 활동을 했는데, 객관적으로 볼때 좌파라고 볼 수 있는 스탠스를 가진 양반이었다. 소련쉴드 Pugwash conferences on Science and World Affairs 라는 세계평화를 위한 학자 단체의 회장도 오래하시고.

3. 멘터
그런데 도로시 호지킨은 옥스포드대학에서 있을때 학부생들을 데리고 일을 많이 했었음. 성품이 괜찮으신 듯해서 많은 학생들이 따랐다고 함. 이중 마거릿 로버츠 (Margaret Hilda Roberts) 라는 학생이 있었는데, 이 학생은 1947년 학부 4학년때 도로시 호지킨의 지도하에 그라미디신 (Gramidicin)이라는 항생제의  결정 실험을 하고 이것으로 학사 졸업논문을 썼다고 함 그리고 학부 졸업한 후 전공 살려 취직했음.그런데 이 학생은 연구직에 얼마 안 있고, 새로운 진로를 모색하게 되는데..그게 바로 정치. 그리고 결혼한 후 남편 성을 따랐음.

Screenshot 2014-05-15 01.22.13

요 사람이 장차

Screenshot 2014-05-15 00.48.56

Margaret Thatcher 이 됩니다.

정치적으로는 좌파라고 볼 수 있는 도로시 호지킨의 제자가 신자유주의의 화신과 같은 마거릿 대처라는 사실은 참 아이러니칼한 일이지만, 이러한 정치노선의 차이에도 불구하고 마거릿 대처는 도로시 호지킨의 밑에서 연구를 했다는 것을 자랑스럽게 여겼다고. 또한, 이학사를 가진 최초의 영국수상이라는 사실에 대해 최초의 여자수상이라는 것보다도 저 자랑스럽게 여겼다나. 이것은 이과부심…보다 정확히 말하지면 N모상 수상자 제자부심? ㅎ

공학사를 가진 최초의 한국대통령은 Carbon dioxide를 ‘이산화가스’ 라고 이야기하시지만...뭐 전자과라서 그렇다고 하고…그렇다면 전자기학이 출동하면 어떨까?

게다가 이 사람의 경우 실제로 학생으로, 그리고 회사의 연구원으로 연구를 해 본 경험에 의해서 과학 연구에 대해서는 실제로 연구를 하는 과학자들이 제일 잘 판단할 수 있다 라는 믿음을 정치가가 되서도 버리지 않았다고 함. 그전까지 영국의 과학 정책은 소위 ‘Haldane Principle’, 즉 어떤 연구에 얼마나 투자할지는 관료가 아닌 실제 연구를 하는 과학자가 결정해야 한다는 1917년의 원칙에 의해 움직이고 있었지만 1970년, 이러한 영국의 과학정책을 수정하여 보다 시장중심적으로 바꾸어야 한다는 주장이 있었다고 함. 그때 이러한 제안에 (흔히 ‘시장주의의 화신’ 이라고 생각되던 이미지와는 달리) 동의하지 않고 과학은 과학자에게 맡겨두어야 한다는 소신을 마거릿 대처는 잃지 않았다고 함. 아마 이것도 어느정도는 마거릿 대처에게 ‘과학이란 어떤 것이다’ 를 보여줬던 도로시 호지킨의 덕일지도.

로절린드 프랭클린에 대한 짦은 이야기

로절린드 프랭클린 (Rosalind Franklin, 1920-1958) 이라고 들어보셨음?

KRBBHK

물론 모르는 분은 모르시겠지만, 이 블로그에 들락거릴 분이라면 어디선가 이름을 들어봤을 것이다. DNA 발견 히스토리에 대해서 좀 알고 계신 분이라면 “아~ DNA 구조사진 찍었는데 왓슨이 훔쳐가서 노벨상 못타고 몇년후에 요절한 눈화?” 정도로 기억할수도 있다.

Screenshot 2014-02-26 00.40.10

이런 사진을 이 눈화가 찍었는데

Screenshot 2014-02-26 00.41.56

얘내들이 훔쳐가서 이 누나는 분노속에 화병도져 요절했다?

글쎄, 로절린드 프랭클린은 그정도로 기억되어야 하는 인물일까? 이러한 대중 속의 이미지와 실제 로절린드 프랭클린이 그닥 길지 않은 인생동안 남긴 족적과는 큰 차이가 있다. 여기에 대해서 조금 글을 쓰도록 하자.

1. 로절린드 프랭클린이 살아있었으면 노벨상을 받았을까?

나의 대답은 “예” 이다. 그러나 한가지 의외로 느낄지도 모르겠지만, 나는 이 사람은 왓슨과 크릭 (그리고 모리스 윌킨스) 이 노벨상을 받을때 같이 노벨상을 받았으리라고 생각하지는 않는다. 그렇다면? 이 사람은 그 이후에 별도의 업적으로 노벨상을 받았을 것이라고 생각한다.

1982년 노벨 화학상은 Aaron Klug 이라는 사람이 받았다.

Screenshot 2014-02-26 00.46.57

그럼 이 사람이 한 일이 뭔데? N모상 홈페이지에 가보면 이렇게 나와있다.

Prize motivation: “for his development of crystallographic electron microscopy and his structural elucidation of biologically important nucleic acid-protein complexes” 결정학적 전자현미경과 생물학적으로 중요한 핵산 – 단백질 복합체의 구조결정

음 이게 뭔데? 그런데 이 사람은 1953년 영국의 Birbeck College라는 곳에서 처음 연구를 시작하였는데, 이때 이 사람은 바로 다름아닌 로절린드 프랭클린과 함께 연구를 한 사람이다. 이 사람과 로절린드 프랭클린의 연구주제는 담배모자익 바이러스 (Tobacco Mosaic Virus) 의 구조결정. 로절린드 프랭클린은 킹스칼리지에서 DNA 연구를 마치고 Birbeck College 로 옮겨서 담배모자익 바이러스의 구조가 어떻게 생겼는지에 대해서 X선 회절에 의해서 연구를 시작했다. 이때 같이 참여한 사람이 Aaron Klug 즉 이 아저씨는 로절린드의 부사수였는데 나중에 N모상 득템.

로절린드 프랭클린이 DNA 연구 이후에 1958년 요절하기 이전까지 어떤 업적을 이루었는지는 요기 혹은 죠기 를 뒤벼보면 잘 나온다. 그러나 간단히 요약해보자.

1. 기존에도 JD Bernal 과 같은 사람들에 의해서 TMV 바이러스에 대한 X선 회절실험이 이루어진적이 있었다. 그러나 X-ray 덕후녀였던 프랭클린 눈화는 기존보다 더 나은 아래와 같은 회절사진을 찍었으며

Screenshot 2014-02-26 00.55.18

이전의 DNA 사진과는 비교가 안되는 알흠다운 사진

2. 이러한 데이터를 해석하여, 1955년, 최초로 TMV의 구조 – 이자 최초의 바이러스 구조 – 를 제시하게 되었다. 그리고 자연에 논문을 꽝 이 누님은 자연쯤에는 내고 싶을 때 논문을 내는 여자라고!

Screenshot 2014-03-23 20.51.12

Screenshot 2014-03-23 20.56.02 Screenshot 2014-03-23 20.56.55

즉 이런식으로 단일가닥의 RNA가 나선형으로 말려있고 캡시드 단백질이 차곡차곡 쌓여있는 모델을 제시하였다.  결국 이 모델은 후학들에 의해서 좀 더 자세하게 만들어졌으며 근본적으로 프랭클린이 1955년에 제시하였던 모델이 맞다는 것이 증명되었다. 이것은 인류 최초의 바이러스 구조 규명인 셈이다.

Screenshot 2014-03-23 20.54.19

3. 이후에 이 눈화는 다른 바이러스 구조, 즉 TMV와는 다른 모양인 폴리오 바이러스 (Polio Virus), 튤립 옐로우 모자익 바이러스 (TYMV) 등의 구조규명에 노력을 다했다. 그러나 안타깝게도 1958년 4월에 난소암으로 37세의 젊은 나이로 세상을 떴다 ㅠ.ㅠ

Screenshot 2014-03-23 21.08.41

Tomato shunt mosaic Virus와 Turlip Yellow Mosaic Virus의 단일결정 회절사진.

이 눈화는 죽기 한달전까지도 새로운 프로젝트를 구상하고 있었다. 바이러스 (Potato virus X) 라는 바이러스의 구조를 알아보기 위하여 협력연구자에게 샘플을 요청할 정도로..

어쨌든 요점은 이 눈화는 굳이 DNA 가지고 스웨덴에 가지 않더라도 충분히 그정도의 업적은 쌓았고, 요절하지 않았더라면 훨씬 더 대단한 발견을 했을 것이다. 부사수가 같은 토픽 가지고 계속 연구해서 노벨상 탔대니깐 뭔 말이 필요하냐. 글니까 연구자 여러분들은 건강 잘 챙기삼. 아무리 대단한 발견을 해도 죽으면 노벨상이건 뭐건 국물도 없음.

2. DNA 이중나선 모델은 로절린드 프랭클린의 것인데 왓슨 크릭이 훔쳐갔다?

아뇨.

많은 사람들이 로절린드 프랭클린을 “왓슨크릭에게 데이터 뺏기고 요절한 불운의 과학자” 정도로 생각한다. 그러나 요절했으니까 불운한 과학자일수는 있고, 왓슨-크릭이 그 구조모델을 만드는데 프랭클린의 데이터를 훔쳐본 것에 기여하긴 했지만 사실 프랭클린의 관점에서 그 데이터는 사실 너무 꾸려서 모델을 만들 시도도 안했을 뿐이다가 좀 더 정확한 이야기이다.
실제로 왓슨-크릭의 논문이 실린 ‘자연’ 이라는 잡지의 같은 호에는 (왓슨이 훔쳐본) 로절린드 프랭클린의 X-ray fiber diffraction 사진에 대한 프랭클린의 해석에 관련한 논문이 실려있다.
Screenshot 2014-03-23 21.30.24
“우리는 요 사진에 대해서 너무 과대해석을 하지는 않겠지만 다음과 같은 결론을 내릴 수 있음.
– 구조는 아마 나선형일 것이고,
– 인산그룹은 구조의 밖으로 위치해서 나선에서 20A 의 직경으로 존재할 것이다.
– 아마 나선은 두개의 수직으로 대칭된 분자로 구성될 것임
즉 우리생각은 이전에 왓슨 & 크릭 이친구들이 제시한 모델과 불일치하지는 않음.”
Thus our general ideas are not inconsistent with the model proposed by Watson and Crick in the preceding communication
걔내들이 말하는게 우리 아이디어와 일치하지 않는건 아냐. 글타고 걔내들이 말하는게 다 맞는지 아닌지는 내가 알바가 아니고ㅋ 정도의 이야기. 사실 위 논문의 모든 내용은 프랭클린이 왓슨 크릭이 모델을 구축한 것을 보기 전에 쓴 이야기이고, 단지 왓슨 크릭의 모델을 본 다음에  “흥 뭐 걔내가 뭐라고 하는 모델과 내생각이 딱히 불일치한것은 아냐 흥” 하고 한마디 덧붙였다고 한다 츤데레가 요기잉네?
사실 왓슨 크릭 모델의 가장 핵심이라고 할 수 있는 염기간 베이스 페어링 (A-T, G-C) 에서는 당연히 아무런 말이 없는데, 그 당시 프랭클린이 뽑은 데이터만으로는 절대 베이스 페어링에 대한 이야기를 할수 없으므로, 프랭클린은 아마도 이 데이터 가지고 이런 구체적인 모델을 만드는 것이 너무 오버라고 생각했을지도 모른다.
실제로 구조생물학적으로 왓슨 & 크릭의 DNA 이중나선, 염기쌍 구조가 원자수준에서 규명된 것은 이보다 훨씬 이후인 1981년의 일이다.

3. 왓슨 & 크릭과 프랭클린은 사이가 나빴다?

그닥 나쁘지는 않았는데염?
왓슨 & 크릭이 모델을 구축할때 프랭클린의 사진에서 결정적인 힌트를 얻은 것처럼, 프랭클린 역시 DNA 구조를 해석할 때 크릭이 제시한 이론에 의해 큰 영향을 받았다. 이것은 프랭클린 버전의 구조해석 논문에도 잘 나와있음.
Screenshot 2014-03-23 21.33.41

사실 왓슨과 크릭과 이사람과의 사이도 나쁘지 않았음. 왓슨은 프랭클린이 TMV 구조푸니까 “오오 눈화 미쿡와서 제발 톡해주세염~구조좀 보여주세염~ 현기증난단 말이예여” 하고 편지를 몇번 썼고 프랭클린이 미쿡에 오니까 직접 운전기사해서 동부에서 서부까지 모셨다는..(근데 프랭클린 눈화가 돌아가시니 뒷담화하는 책을 써…)
사실 프랭클린이 TMV연구를 하기 전에 왓슨은 TMV에 대해서도 좀 발을 담근 적이 있는데 사실 TMV의 capsid 단백질이 helical 한 구조를 하고 있다는 것을 처음 실험적, 이론적으로 규명한 것은 왓슨이었다. 논문 재미있게도 왓슨은 DNA 이중나선 구조에 대해서는 전혀 실험을 한 적이 없는데, TMV에 대해서는 직접 실험을 했다는..사실 왓슨이 프랭클린의 사진을 한번 보고서 ‘오오 이것은!’ 하고 힌트를 얻게 된 결정적인 이유라면 같이 나선구조를 가진 TMV에 대해서는 자기가 실험을 해 본 이유일수도 있다. 어쨌든 프랭클린의 연구 자체는왓슨의 선행연구에 영향을 받았고, 이 둘은 서로 연구결과를 토의하는 사이었지 세간에 알려진 것처럼 그리 사이가 나쁜 상황이 아니었다.
사실 이러한 오해가 나오게 된 것은 어떻게 보면 왓슨의 책임이 큰데, 그는 1968년에 출판된 자신의 저서 (라고 쓰고 디스모음집이라고 읽는다) 인 ‘이중나선’ (Double Helix)에서 프랭클린을 좀 괴팍한 여자 정도로 묘사했다. 그런데 이 책이 베스트셀러가 되어 버렸어! 그러다 보니 이 사람의 이미지가 그런 식으로 고착된 점이 크다. 

4. 프랭클린의 유산

프랭클린이 죽고 나서 프랭클린과 같이 연구를 하던 동료들은 캠브리지의 MRC 로 옮겨가서 그녀가 수행하던 바이러스 구조연구들을 계속 수행하였다. Aron Klug 은 이 연구를 계속해서 스웨덴에 갔다는 것은 이야기했고..

그녀의 대학원생으로 Kenneth Holmes라는 사람이 있었다. 이 사람은 Aron Klug 과 함께 바이러스 연구를 같이했고, 이 연구가 어느정도 마무리된 다음에는 독일의 막스플랑크 연구소로 옮겨서 다른 생체고분자, 그리고 역시 나선의 성질을 가진 구조를 연구했는데, 이게 바로…

Screenshot 2014-03-23 22.04.28

액틴 필라멘트 모델이다. 참고로 이 모델은 DNA 구조와 TMV 에 사용된 방법인 Fiber diffraction 을 이용하여 결정되었다. 즉 고해상도의 구조를 결정할때 사용되는 단일결정에 의한 X-ray Crystal Diffraction 이 아니라는 것이다.

어쨌든 지금 프랭클린 눈화의 박사과정 학생이 푼 구조를 가지고 또 찝적거리는 찌그레기 1인인 본 블로그 주인의 경우에는 결국 구조생물학에서의 족보를 따져보면 로절린드 프랭클린 눈화까지 올라가게 되는 셈이다. 그러니까 우리눈화 가지고 괜히 설레발 떨지말라구..ㅋ

XDS.INP for Pohang Accelator Laboratory 7A

최근에 포항방사광가속기 beamline 7A에서 데이터 컬렉션을 해왔음. 포항에서 데이터 컬렉션을 한것은 처음인데, 비록 규모는 APS나 Spring-8과 같은 공룡빔라인에 비해서 작지만 비교적 잘 관리되고 업데이트된 곳이라고 생각함.

근데 대개의 빔라인이 그렇듯이 Data Reduction은 HKL2000를 사용하고 있고 HKL2000용 Site.def는 제공되고 있음. 그렇다면 열라비싼 상용프로그램인 HKL2000을 사용하지 않는 사람은 사이트에서 Data Reduction 해가야 되겠네? 이런 경우에는 무료로 제공되는 XDS를 이용하면 편함. 그러나 이건 GUI가 그닥 제대로 되어있지 않지? ㅋㅋㅋ 이런 것을 위해서 한번 XDS.INP를 만들어 보았음.

참고로 여기서 사용하는 Detector는 ADSC의 Q270. 기존의 ADSC용 XDS.INP를 조금 고치면 됨.

DETECTOR=ADSC  MINIMUM_VALID_PIXEL_VALUE=1  OVERLOAD= 65000
DIRECTION_OF_DETECTOR_X-AXIS= 1.0 0.0 0.0
DIRECTION_OF_DETECTOR_Y-AXIS= 0.0 1.0 0.0
TRUSTED_REGION=0.0 1.05 !Relative radii limiting trusted detector region

MAXIMUM_NUMBER_OF_JOBS=2  !Speeds-up COLSPOT & INTEGRATE on a Linux-cluster
MAXIMUM_NUMBER_OF_PROCESSORS=2!0)

X-RAY_WAVELENGTH=0.979          !Angstroem
INCIDENT_BEAM_DIRECTION=0.0 0.0 1.0
FRACTION_OF_POLARIZATION=0.90 !default=0.5 for unpolarized beam;0.90 at DESY;
POLARIZATION_PLANE_NORMAL= 0.0 1.0 0.0
AIR=0.001                     !Air absorption coefficient of x-rays
SPACE_GROUP_NUMBER=0  !0 for unknown crystals; cell constants are ignored.
UNIT_CELL_CONSTANTS= 59.57  69.69  56.97        90  90 90

!FRIEDEL'S_LAW=FALSE !Default is TRUE.
!STARTING_ANGLE=  0.0      STARTING_FRAME=1
!used to define the angular origin about the rotation axis.
!Default:  STARTING_ANGLE=  0 at STARTING_FRAME=first data image
!RESOLUTION_SHELLS=10 6 5 4 3 2 1.5 1.3 1.2
!STARTING_ANGLES_OF_SPINDLE_ROTATION= 0 180 10

!TOTAL_SPINDLE_ROTATION_RANGES=30.0 120 15
!REFERENCE_DATA_SET= CK.HKL   !Name of a reference data set (optional)

INCLUDE_RESOLUTION_RANGE= 40.0 2.0
!==================== SELECTION OF DATA IMAGES ==============================
!Generic file name, access, and format of data images
 NAME_TEMPLATE_OF_DATA_FRAMES=../crystal1_1_1_???.img  SMV DIRECT
 DATA_RANGE=1  360      !Numbers of first and last data image collected
 BACKGROUND_RANGE=1 6  !Numbers of first and last data image for background

!====================== INDEXING PARAMETERS =================================
!Never forget to check this, since the default 0 0 0 is almost always correct!
!INDEX_ORIGIN= 0 0 0          ! used by "IDXREF" to add an index offset

!Additional parameters for fine tuning that rarely need to be changed
!INDEX_ERROR=0.05 INDEX_MAGNITUDE=8 INDEX_QUALITY=0.8
!SEPMIN=6.0 CLUSTER_RADIUS=3
!MAXIMUM_ERROR_OF_SPOT_POSITION=3.0


!================== CRITERIA FOR ACCEPTING REFLECTIONS ======================
 VALUE_RANGE_FOR_TRUSTED_DETECTOR_PIXELS= 6000 30000 !Used by DEFPIX
                   !for excluding shaded parts of the detector.
!INCLUDE_RESOLUTION_RANGE=20.0 0.0 !Angstroem; used by DEFPIX,INTEGRATE,CORRECT

!used by CORRECT to exclude ice-reflections
!EXCLUDE_RESOLUTION_RANGE= 3.93 3.87 !ice-ring at 3.897 Angstrom
!EXCLUDE_RESOLUTION_RANGE= 3.70 3.64 !ice-ring at 3.669 Angstrom
!EXCLUDE_RESOLUTION_RANGE= 3.47 3.41 !ice-ring at 3.441 Angstrom
!EXCLUDE_RESOLUTION_RANGE= 2.70 2.64 !ice-ring at 2.671 Angstrom
!EXCLUDE_RESOLUTION_RANGE= 2.28 2.22 !ice-ring at 2.249 Angstrom

!WFAC1=1.0  !This controls the number of rejected MISFITS in CORRECT;
        !a larger value leads to fewer rejections.


!============== INTEGRATION AND PEAK PROFILE PARAMETERS =====================
!Specification of the peak profile parameters below overrides the automatic
!determination from the data images
!Suggested values are listed near the end of INTEGRATE.LP
!BEAM_DIVERGENCE=  0.473  !arctan(spot diameter/DETECTOR_DISTANCE)
!BEAM_DIVERGENCE_E.S.D.=   0.047 !half-width (Sigma) of BEAM_DIVERGENCE
!REFLECTING_RANGE=  1.100 !for crossing the Ewald sphere on shortest route
!REFLECTING_RANGE_E.S.D.=  0.169 !half-width (mosaicity) of REFLECTING_RANGE

!NUMBER_OF_PROFILE_GRID_POINTS_ALONG_ALPHA/BETA=9 !used by: INTEGRATE
!NUMBER_OF_PROFILE_GRID_POINTS_ALONG_GAMMA= 9     !used by: INTEGRATE

!CUT=2.0    !defines the integration region for profile fitting
!MINPK=75.0 !minimum required percentage of observed reflection intensity
!DELPHI= 5.0!controls the number of reference profiles and scaling factors

!PATCH_SHUTTER_PROBLEM=TRUE         !FALSE is default
!STRICT_ABSORPTION_CORRECTION=FALSE !TRUE  is default


!=========== PARAMETERS DEFINING BACKGROUND AND PEAK PIXELS =================
!STRONG_PIXEL=3.0                              !used by: COLSPOT
!A 'strong' pixel to be included in a spot must exceed the background
!by more than the given multiple of standard deviations.

!MAXIMUM_NUMBER_OF_STRONG_PIXELS=1500000       !used by: COLSPOT

!SPOT_MAXIMUM-CENTROID=3.0                     !used by: COLSPOT

!MINIMUM_NUMBER_OF_PIXELS_IN_A_SPOT=6          !used by: COLSPOT
!This allows to suppress spurious isolated pixels from entering the
!spot list generated by "COLSPOT".

!NBX=3  NBY=3  !Define a rectangle of size (2*NBX+1)*(2*NBY+1)
!The variation of counts within the rectangle centered at each image pixel
!is used for distinguishing between background and spot pixels.

!BACKGROUND_PIXEL=6.0                          !used by: COLSPOT,INTEGRATE
!An image pixel does not belong to the background region if the local
!pixel variation exceeds the expected variation by the given number of
!standard deviations.

!SIGNAL_PIXEL=3.0                              !used by: INTEGRATE
!A pixel above the threshold contributes to the spot centroid


!================= PARAMETERS CONTROLLING REFINEMENTS =======================
!REFINE(IDXREF)=BEAM AXIS ORIENTATION CELL !DISTANCE
!REFINE(INTEGRATE)=!DISTANCE BEAM ORIENTATION CELL !AXIS
!REFINE(CORRECT)=DISTANCE BEAM ORIENTATION CELL AXIS

사실 여기서 제일 중요한 게 다른것보다는 ORGX=2133.0 ORGY=2080.0 !Detector origin (pixels). ORGX=NX/2; ORGY=NY/2
이걸 정하는건데 대충 NX, NY (이미지의 X Width, Y Height) 의 절반이라고 나와있지만 사실 빔센터가 항상 정확한게 아님. ㅋ

제일 좋은 방법은 빔센터를 직접 확인하는 것인데, adxv와 같은 뷰어로 img 파일을 불러보면
Screen Shot 2013-10-21 at 2.30.12 AM
요런식으로 빔센터의 X,Y Pixel 좌표를 찍어서 이것을 ORGX, ORGY로 잡으면 적절함.

여러개의 PDB 파일을 한꺼번에 렌더링하기 : PyMOL Batch Renderer

단백질 구조를 가지고 놀다보면 디렉토리에 PDB 파일이 쌓이게 되고..가끔은 이 파일이 무슨 구조의 파일인지조차 헷갈리는 경우가 있다.

물론 일일히 PyMOL과 같은 프로그램으로 열어보든지 아니면 PDB 사이트에서 검색을 해보셈…할수도 있겠으나 한두개면 모르겠는데 갯수가 늘어나면 난감하기 마련.

“디렉토리에 들어있는 PDB 파일을 한번에 몽땅 그림으로 보여주는 방법이 없을까?”

그런 방법 별로 생각이 안나네염.ㅋㅋ 그러나 이제 생겼음.

#!/usr/bin/python
#
# Batch Pymol Renderer
# Require Python 2.7 (argparse) and Pymol
#
#

import sys, subprocess, re, os, glob
import argparse

def pdbparsing(filename, regex):
#
# Parse pdb content and extract using regex
#
	if os.path.exists(filename):
		pdb = open(filename)
		pdbcontent = pdb.readlines()
		matched = ''
		matchedcount=0
		reg = re.compile(regex)
		for line in pdbcontent:
			match = reg.match(line)
			if match:
				if matchedcount==0:
					gap = " "
				else:
					gap = ""
				matched = matched+gap+match.group(1).strip()
		return (matched)
	else:
		print "{0} is not found!".format(filename)
		sys.exit()


def htmlout(description):
#
# Generate render.html which display rendered png files
#
#
	htmlheader = """
<!DOCTYPE html>
<html>
	<head>
    	<title>List</title>
 		<meta charset='utf-8'>
	</head>
	<style>
	</style>
	<body>
"""
	imgtag = """
		<img src="./{0}">
		<p><a href="http://www.rcsb.org/pdb/explore/explore.do?structureId={1}">{2}</a></p>
"""

	htmlfooter = """
	</body>
</html>
"""
	htmloutput = open('render.html','w')
	htmloutput.write(htmlheader)
	for pdb,desc in description.items():
		htmloutput.write(imgtag.format(pdb[:-4]+".png", pdb[:len(pdb)-4], pdb[:len(pdb)-4]+":"+desc))
	htmloutput.write(htmlfooter)
	htmloutput.close()


def main(arglist):
#
# PyMol executable path
# In cases of MacPymol, It assumed that pymol is installed in 'Application' folder.
# Other cases, plase set up the exact location of PyMOL executable
#
	PyMOLPath = '/Applications/MacPyMOL.app/Contents/MacOS/MacPyMol'
	if len(arglist.file)>0:
		subjectList = arglist.file
	else:
		subjectList = glob.glob('*.pdb')
	if len(subjectList)>0 :
		pymolLoadingFile = open('render.pml','w')
		pymolLoadingFile.write('bg_color white\n')
		description = {}

		style = "cartoon" #Defaults
		if arglist.ribbon :
			style = "ribbon"
		if arglist.line :
			style = "line"
		if arglist.stick :
			style = "stick"

		if arglist.view:
			if os.path.exists(arglist.view):
				f = open(arglist.view)
				view = f.readlines()
				if re.match("^set_view",view[0]):
					for line in view:
						pymolLoadingFile.write(line)

		for pdb in subjectList:	
			if os.path.exists(pdb):			
				print pdb
				pymolLoadingFile.write("load {0}/{1}\n".format(os.getcwd(),pdb))
				pymolLoadingFile.write("hide all\n")
				pymolLoadingFile.write("show {0}, {1}\n".format(style, pdb[:-4]))
				if arglist.cbc:
					pymolLoadingFile.write("util.cbc\n")
				else:
					pymolLoadingFile.write("spectrum count,rainbow,{0}\n".format(pdb[:-4]))
				if arglist.surface:
					pymolLoadingFile.write("show surface,{0}\n".format(pdb[:-4]))
				if not arglist.view:	
					pymolLoadingFile.write("orient {0}\n".format(pdb[:-4]))
				if arglist.ray:
					pymolLoadingFile.write("ray\n")
				pymolLoadingFile.write("png {0}.png\n".format(pdb[:-4]))
				description[pdb]=pdbparsing(pdb, '^TITLE    [ \d](.*)$')
		pymolLoadingFile.close()
		print "Running PyMol..."
		p = subprocess.Popen([PyMOLPath,'-c','render.pml'],
							  stdout=subprocess.PIPE)
		p_stdout = p.stdout.read()
		htmlout(description)
	else:
		print "Usage : render.py"
		sys.exit()		


if __name__ == "__main__":
	parser = argparse.ArgumentParser()
	parser.add_argument('-r', '--ribbon', action='store_true', dest='ribbon',default=False,
	                    help='Draw as ribbon')
	parser.add_argument('-l', '--line', action='store_true', dest='line',default=False,
	                    help='Draw as Line')
	parser.add_argument('-t', '--stick', action='store_true', dest='stick',default=False,
	                    help='Draw as Stick')
	parser.add_argument('-s', '--surface', action='store_true', dest='surface',default=False,
	                    help='Draw as Surface')
	parser.add_argument('-c', '--color_by_chain', action='store_true', dest='cbc',default=False,
	                    help='Color by Chain')
	parser.add_argument('-rt', '--ray_trace', action='store_true', dest='ray',default=False,
	                    help='Ray tracing')
	parser.add_argument('-f', '--files', nargs='*', dest='file',default=[],
	                    help='File to process')
	parser.add_argument('-v', '--fixed_view', action='store', dest='view')
	results = parser.parse_args()
	main(results)

위 스크립트를 render.py 등으로 저장하고 실행권한을 준다음 PATH가 설정되어 있는 디렉토리에 넣든 pdb 가 디글거리는 파일에 넣든지 하시고,

Python 2.7에서 지원되는 argparse 모듈을 사용하고 있으므로 Python 2.7 이상을 사용하든지 argparse를 설치. 
그리고 PyMol 이 설치되어 있어야 하고, MacPyMol 이 아닌 경우에는 75라인의 
PyMOLPath = '/Applications/MacPyMOL.app/Contents/MacOS/MacPyMol' 
을 자신의 PyMol 설치경로로 바꾸어 주어야 한다 

실행옵션을 보면

./render.py -h
usage: render.py [-h] [-r] [-l] [-t] [-s] [-c] [-rt]

optional arguments:
  -h, --help            show this help message and exit
  -r, --ribbon          Draw as ribbon
  -l, --line            Draw as Line
  -t, --stick           Draw as Stick
  -s, --surface         Draw as Surface
  -c, --color_by_chain  Color by Chain
  -rt, --ray_trace      Ray tracing

일단 아무 옵션 없이 render.py 를 실행시켜보면 render.pml 이라는 파일이 생성되고 자동적으로 스크립트내에서 PyMOL 을 실행시킨후 디렉토리내에 있는 모든 PDB를 하나씩 부른후 이를 png 로 저장한다.

그게 다가 아니라 render.html 이라는 html 형식의 카탈로그를 만들어줌. 설명을 클릭하면 rcsb pdb의 해당 pdb 페이지로 이동.

링크

여러가지 옵션을 제공하는데 (디폴트는 cartoon 방식의 렌더링이고, 색 지정은 N말단 – 청색 C말단 – 적색의 스펙트럼)

./render.py -r

Ribbon 으로 렌더링

./render.py -t
stick 으로 렌더링

./render.py -t
line으로 렌더링

./render.py -s
surface로 렌더링 (다른 표현방식에 비해 장시간이 걸리는 것에 유의)


./render.py -c
color by chain (chain별로 다른 color지정하여 렌더링)방식으로 색지정 변환.

./render.py -c -s
surface로 rendering하면서 color by chain

./render.py -rt
Raytracing (고품질의 렌더링이 가능하나 시간이 매우 오래 걸림에 유의)

추가로 부연설명하면

1. PyMol을 Python Script에서 제어하는 방법으로 가장 속편한 방법이라면 여기서 쓰는 방법처럼 PyMol script (위의 예에서는 Render.pml) 를 만들고 PyMol을 수행하여 작업을 수행하는 것임. 이렇게 생성된 스크립트를 대충 살펴보면

bg_color white
#바탕색 하얀색
load /Users/suknamgoong/Dropbox/pdbsearch/S_1G9O.pdb
#로딩. 
hide all
#몽땅지우고
show cartoon, S_1G9O
#S_1G9O이라는 pdb를 cartoon으로 그림
util.cbc
#color by chain
orient S_1G9O
#최적의 위치로 카메라위치 옮김
png S_1G9O.png
#S_1G90.png라는 이름으로 그림 png로 저장
.....반복

2. PyMol 을 커맨드 라인에서 수행하려면

PyMol -c script.pml

와 같은 방식으로 수행하면 편함.

R-factor tracking during PHENIX refinement

During typical refinement process using PHENIX, you will end up with bunch of pdb files with different R-factors. How we can track R-factors of each version of pdb more easily?

$ ls *.pdb 
2A41.pdb              MR.1_refine_009.pdb   MR.1_refine_019.pdb   MR.1_refine_029.pdb
MR.1.pdb              MR.1_refine_010.pdb   MR.1_refine_020.pdb   MR.1_refine_030.pdb
MR.1_refine_001.pdb   MR.1_refine_011.pdb   MR.1_refine_021.pdb   MR.1_refine_031.pdb
MR.1_refine_002.pdb   MR.1_refine_012.pdb   MR.1_refine_022.pdb   MR.1_refine_032.pdb
MR.1_refine_003.pdb   MR.1_refine_013.pdb   MR.1_refine_023.pdb   MR.1_refine_033.pdb
MR.1_refine_004.pdb   MR.1_refine_014.pdb   MR.1_refine_024.pdb   NAG.pdb
MR.1_refine_005.pdb   MR.1_refine_015.pdb   MR.1_refine_025.pdb   Peptide.pdb
MR.1_refine_006.pdb   MR.1_refine_016.pdb   MR.1_refine_026.pdb   new_refine_020_ed.pdb
MR.1_refine_007.pdb   MR.1_refine_017.pdb   MR.1_refine_027.pdb
MR.1_refine_008.pdb   MR.1_refine_018.pdb   MR.1_refine_028.pdb

Each of pdb files contain informations about R factors.

REMARK ******************** REFINEMENT SUMMARY: QUICK FACTS *******************
REMARK Start: r_work = 0.2790 r_free = 0.2820 bonds = 0.008 angles = 1.116
REMARK Final: r_work = 0.2606 r_free = 0.2913 bonds = 0.008 angles = 1.186
REMARK ************************************************************************

The following script extracts r-work and r-free values from pdb files and plot using gnuplot

grep "REMARK Final: r_work" *.pdb | awk 'BEGIN { OFS="\t" }{print $1, $5, $8}' | sed -e 's/:REMARK//' -e 's/^MR.1_refine_0//' -e 's/.pdb//' ; data.txt
gnuplot -p -e "plot 'data.txt' using 1:2 with lines title 'R-work', 'data.txt' using 1:3 with lines title 'R-free'"

* If your pdb files have different naming conventions, you should modify ‘MR.1_refine_0’ part to match your pdb files. Of course.

These script generate data.txt files.

01      0.2606  0.2913
02      0.2602  0.2923
03      0.2599  0.2914

Then you will have a plot like this.