이황화 결합 연구를 위한 생물정보학 데이터베이스 개발

게시 됨: 2022-03-11

PDB(Protein Data Bank) 생물정보학 데이터베이스는 단백질, 핵산 및 복잡한 어셈블리의 실험적으로 결정된 구조의 세계 최대 리포지토리입니다. 모든 데이터는 X선, 분광학, 결정학, NMR 등과 같은 실험적 방법을 사용하여 수집됩니다.

이 문서에서는 PDB에서 데이터를 추출, 필터링 및 정리하는 방법을 설명합니다. 이것은 차례로 생명의 다른 영역에서 단백질 이황화 결합의 발생 기사에서 설명된 분석 유형을 가능하게 합니다. 2014년 3월 1일, 65–72쪽.

PDB는 해상도, 방법, 돌연변이 등이 다른 많은 반복 구조를 가지고 있습니다. 동일하거나 유사한 단백질로 실험을 수행하면 모든 그룹 분석에서 편향이 발생할 수 있으므로 중복 집합 중에서 올바른 구조를 선택해야 합니다. . 그 목적을 위해 우리는 단백질의 비중복(NR) 세트를 사용해야 합니다.

정규화를 위해 3NF를 사용하거나 스타 스키마 및 차원 모델링을 사용하는 데이터베이스로 원자 이름을 가져오기 위한 화합물 사전을 다운로드하는 것이 좋습니다. (나는 또한 DSSP를 사용하여 문제가 있는 구조를 제거하는 데 도움을 주었습니다. 이 기사에서는 다루지 않겠지만 다른 DSSP 기능은 사용하지 않았다는 점에 유의하십시오.)

이 연구에 사용된 데이터에는 다른 종에서 가져온 하나 이상의 이황화 결합을 포함하는 단일 단위 단백질이 포함되어 있습니다. 분석을 수행하기 위해 모든 이황화 결합은 먼저 도메인(고세균, 원핵생물, 바이러스, 진핵생물 또는 기타) 및 길이별로 연속 또는 비연속으로 분류됩니다.

1차 및 3차 단백질 구조

단백질 접힘 전후의 1차 및 3차 단백질 구조.
출처: 이 기사의 시작 부분에서 언급한 단백질 공학, 설계 및 선택 .

산출

R, SPSS 또는 기타 도구에 대한 입력을 준비하려면 분석가는 다음 구조의 데이터베이스 테이블에 데이터가 있어야 합니다.

유형 설명
code character(4) 실험 ID(영숫자, 대소문자 구분, 0으로 시작할 수 없음)
title character varying(1000) 참조용 실험 제목(필드는 텍스트 형식일 수도 있음)
ss_bonds integer 선택한 사슬의 이황화 결합 수
ssbonds_overlap integer 겹치는 이황화 결합의 수
intra_count integer 같은 사슬 내에서 만들어진 결합의 수
sci_name_src character varying(5000) 염기서열을 따온 유기체의 학명
tax_path character varying Linnaean 분류 트리의 경로
src_class character varying(20) 최상위 유기체 클래스(진핵생물, 원핵생물, 바이러스, 고세균, 기타)
has_reactives7 boolean 시퀀스에 반응 중심이 포함된 경우에만 참
len_class7 integer 세트 7의 시퀀스 길이(blast에 의해 계산된 p-값 10e-7로 설정)

재료 및 방법

이 목표를 달성하기 위한 첫 번째 단계는 rcsb.org에서 데이터를 수집하는 것입니다. 해당 사이트에는 다양한 형식으로 다운로드 가능한 PDB 실험 구조가 포함되어 있습니다.

데이터가 여러 형식으로 저장되지만 이 예에서는 형식이 지정된 고정 공간으로 구분된 텍스트 형식(PDB)만 사용됩니다. PDB 텍스트 형식의 대안은 XML 버전인 PDBML이지만 때로는 형식이 잘못된 원자 위치 이름 지정 항목이 포함되어 있어 데이터 분석에 문제가 발생할 수 있습니다. 이전 mmCIF 및 기타 형식도 사용할 수 있지만 이 문서에서는 설명하지 않습니다.

PDB 형식

PDB 형식은 예를 들어 SQL 쿼리, Java 플러그인 또는 Perl 모듈로 쉽게 구문 분석할 수 있는 단편화된 고정 너비 텍스트 형식입니다. 파일 컨테이너의 각 데이터 유형은 해당 태그로 시작하는 행으로 표시됩니다. 다음 하위 섹션에서 각 태그 유형을 살펴보겠습니다. 행 길이는 80자 이하입니다. 여기서 태그는 6자 이하와 함께 8바이트를 차지하는 하나 이상의 공백을 사용합니다. 일반적으로 CONECT 태그의 경우 태그와 데이터 사이에 공백이 없는 경우도 있습니다.

TITLE

TITLE 태그는 분자 이름 및 특정 아미노산의 삽입, 돌연변이 또는 삭제와 같은 기타 관련 데이터를 포함하는 실험 제목(일부)인 줄을 표시합니다.

 12345678901234567890123456789012345678901234567890123456789012345678901234567890 TITLE A TWO DISULFIDE DERIVATIVE OF CHARYBDOTOXIN WITH DISULFIDE TITLE 2 13-33 REPLACED BY TWO ALPHA-AMINOBUTYRIC ACIDS, NMR, 30 TITLE 3 STRUCTURES

TITLE 레코드에 여러 줄이 있는 경우 제목을 연결해야 하며 연속 번호로 순서를 지정해야 합니다. 이 번호는 바이트 9와 10(이 줄 수에 따라 다름)에 오른쪽 정렬로 배치됩니다.

ATOM

ATOM 라인에 저장된 데이터는 실험에서 각 원자에 대한 좌표 데이터입니다. 때때로 실험에는 삽입, 돌연변이, 대체 위치 또는 여러 모델이 있습니다. 결과적으로 동일한 원자를 여러 번 반복합니다. 올바른 원자를 선택하는 것은 나중에 설명합니다.

 12345678901234567890123456789012345678901234567890123456789012345678901234567890 ATOM 390 N GLY A 26 -1.120 -2.842 4.624 1.00 0.00 N ATOM 391 CA GLY A 26 -0.334 -2.509 3.469 1.00 0.00 C ATOM 392 C GLY A 26 0.682 -1.548 3.972 1.00 0.00 C ATOM 393 O GLY A 26 0.420 -0.786 4.898 1.00 0.00 O ATOM 394 H GLY A 26 -0.832 -2.438 5.489 1.00 0.00 H ATOM 395 HA2 GLY A 26 0.163 -3.399 3.111 1.00 0.00 H ATOM 396 HA3 GLY A 26 -0.955 -2.006 2.739 1.00 0.00 H

위의 예는 실험 1BAH 에서 가져온 것입니다. 첫 번째 열은 레코드 유형을 표시하고 두 번째 열은 원자의 일련 번호입니다. 구조의 모든 원자에는 고유한 일련 번호가 있습니다.

일련 번호 옆에는 4바이트를 차지하는 원자 위치 레이블이 있습니다. 그 원자 위치에서 원소의 화학 기호를 추출하는 것이 가능합니다. 원소의 화학 기호는 고유한 별도 열의 레코드 데이터에 항상 존재하지는 않습니다.

원자 이름 뒤에 세 글자로 된 잔여 코드가 있습니다. 단백질의 경우 그 잔기는 아미노산에 해당합니다. 다음으로, 체인은 하나의 문자로 코딩됩니다. 사슬 이란 간극이 있거나 없는 단일 아미노산 사슬을 의미하지만 때로는 리간드가 사슬에 할당될 수 있습니다. 이 경우는 다음 열에 있는 아미노산 서열의 매우 큰 간격을 통해 감지할 수 있습니다. 때때로 동일한 구조가 포함된 돌연변이로 스캔될 수 있으며, 이 경우 시퀀스 열 다음의 추가 열에서 삽입 코드를 사용할 수 있습니다. 삽입 코드에는 영향을 받는 잔류물을 구별하는 데 도움이 되는 문자가 포함되어 있습니다.

다음 세 개의 열은 옹스트롬(Å)으로 측정된 각 원자의 공간 좌표입니다. 이 좌표 옆에는 0에서 1의 일반적인 척도로 원자가 그 장소에 있을 확률을 나타내는 점유 열이 있습니다.

두 번째 마지막 열은 Ų 단위로 측정된 결정의 무질서에 대한 정보를 전달하는 온도 계수입니다. 60Ų보다 크면 무질서, 30Ų보다 작으면 자신감을 나타냅니다. 실험 방법에 따라 달라지기 때문에 PDB 파일에 항상 존재하는 것은 아닙니다.

다음 열(기호 및 전하)은 일반적으로 누락됩니다. 화학 기호는 위에서 언급한 것처럼 원자 위치 열에서 수집할 수 있습니다. 전하가 있는 경우 기호 뒤에 + 또는 - 가 오는 정수로 접미어가 붙습니다(예: N1+ ).

TER

이것은 체인의 끝을 표시합니다. 이 선이 없어도 사슬이 끝나는 곳을 쉽게 구별할 수 있습니다. 따라서 종종 TER 행이 누락됩니다.

MODELENDMDL

MODEL 라인은 구조물의 모델이 시작되는 위치를 표시하며 모델의 일련 번호를 포함합니다.

해당 모델의 모든 원자 라인 ENDMDL 라인으로 끝납니다.

SSBOND

이 라인은 시스테인 아미노산 사이의 이황화 결합을 포함합니다. 이황화 결합은 다른 잔기 유형에 존재할 수 있지만 이 기사에서는 아미노산만 분석하므로 시스테인만 포함됩니다. 다음 예제는 코드 132L 을 사용한 실험에서 나온 것입니다.

 12345678901234567890123456789012345678901234567890123456789012345678901234567890 SSBOND 1 CYS A 6 CYS A 127 1555 1555 2.01 SSBOND 2 CYS A 30 CYS A 115 1555 1555 2.05 SSBOND 3 CYS A 64 CYS A 80 1555 1555 2.02 SSBOND 4 CYS A 76 CYS A 94 1555 1555 2.02

이 예에는 두 번째 열에 시퀀스 번호가 있는 파일에 태그가 지정된 4개의 이황화 결합이 있습니다. 이 모든 결합은 시스테인(3열과 6열)을 사용하며 모두 A 사슬(4열과 7열)에 있습니다. 각 사슬 뒤에는 펩티드 사슬에서 결합의 위치를 ​​나타내는 잔기 시퀀스 번호가 있습니다. 삽입 코드는 각 잔기 서열 옆에 있지만 이 예에서는 해당 영역에 삽입된 아미노산이 없기 때문에 존재하지 않습니다. 마지막 열 앞의 두 열은 대칭 작업을 위해 예약되어 있으며 마지막 열은 Å 단위로 측정된 황 원자 사이의 거리입니다.

잠시 시간을 내어 이 데이터에 대한 컨텍스트를 제공하겠습니다.

rcsb.org NGL 뷰어를 사용하여 찍은 아래 사진은 실험 132L 의 구조를 보여줍니다. 특히 리간드가 없는 단백질을 보여줍니다. 첫 번째 그림은 스틱 표현을 사용하며 CPK 색상은 황과 황의 결합을 노란색으로 표시합니다. V 자형 황 연결은 메티오닌 연결을 나타내고 Z 자형 연결은 시스테인 사이의 이황화 결합입니다.

이황화황 결합을 노란색으로 표시하는 CPK 착색이 있는 스틱 표현

다음 그림에서 백본 시각화 라고 하는 단순화된 단백질 시각화 방법은 시스테인이 노란색인 아미노산으로 표시됩니다. 이는 측쇄가 제외되고 펩티드 그룹의 일부만 포함된 동일한 단백질을 나타냅니다(이 경우 단백질 백본). N-말단, C-알파 및 C-말단의 세 가지 원자로 구성됩니다. 이 그림은 이황화 결합을 보여주지 않지만 단백질의 공간적 배열을 보여주기 위해 단순화되었습니다:

시스테인이 노란색인 아미노산으로 착색된 단순화된 단백질 백본

파이프는 펩티드 결합 원자를 C-알파 원자와 결합하여 생성됩니다. CPK 착색법에서 시스테인의 색은 황의 색과 같다. 시스틴이 충분히 가까워지면 황이 이황화 결합을 생성하여 구조를 강화합니다. 그렇지 않으면 이 단백질이 너무 많이 결합하고 그 구조가 더 높은 온도에서 덜 안정적일 것입니다.

CONECT

이 레코드는 원자 간의 연결에 태그를 지정하는 데 사용됩니다. 때로는 이러한 태그가 전혀 존재하지 않는 반면 다른 경우에는 모든 데이터가 채워집니다. 이황화 결합을 분석하는 경우 이 부분이 유용할 수 있지만 반드시 필요한 것은 아닙니다. 이 프로젝트에서는 거리를 측정하여 태그가 지정되지 않은 본드를 추가하므로 오버헤드가 되고 확인도 해야 하기 때문입니다.

SOURCE

이 기록에는 분자가 추출된 근원 유기체에 대한 정보가 포함되어 있습니다. 여기에는 분류 체계에서 더 쉽게 위치를 지정할 수 있는 하위 레코드가 포함되어 있으며 제목 레코드에서 본 것과 동일한 여러 줄 구조가 있습니다.

 SOURCE MOL_ID: 1; SOURCE 2 ORGANISM_SCIENTIFIC: ANOPHELES GAMBIAE; SOURCE 3 ORGANISM_COMMON: AFRICAN MALARIA MOSQUITO; SOURCE 4 ORGANISM_TAXID: 7165; SOURCE 5 GENE: GST1-6; SOURCE 6 EXPRESSION_SYSTEM: ESCHERICHIA COLI; SOURCE 7 EXPRESSION_SYSTEM_TAXID: 562; SOURCE 8 EXPRESSION_SYSTEM_STRAIN: BL21(DE3)PLYSS; SOURCE 9 EXPRESSION_SYSTEM_VECTOR_TYPE: PLASMID; SOURCE 10 EXPRESSION_SYSTEM_PLASMID: PXAGGST1-6

NR 형식

이것은 비중복(NR) 체인 PDB 세트의 목록입니다. 스냅샷은 ftp.ncbi.nih.gov/mmdb/nrtable/에서 찾을 수 있습니다. 그 목적은 단백질 유사성으로 인한 불필요한 편견을 피하는 것입니다. NR에는 모든 PDB 구조의 비교에 의해 생성된 서로 다른 ID p-값 수준을 가진 3개의 세트가 있습니다. 결과는 나중에 설명할 텍스트 파일에 추가됩니다. 이 프로젝트에 모든 열이 필요한 것은 아니므로 중요한 열만 설명합니다.

처음 두 열에는 위의 ATOM 레코드에 대해 설명한 대로 고유한 PDB 실험 코드와 체인 식별자가 포함됩니다. 6열, 9열, C열은 BLAST로 계산된 서열의 유사도 수준인 p-값 표현성에 대한 정보를 담고 있다. 해당 값이 0이면 집합의 일부로 허용되지 않습니다. 값이 1이면 입니다. 언급된 열은 p-값 컷오프가 각각 10e-7, 10e-40 및 10e-80인 집합의 수용을 나타냅니다. p-값 컷오프가 10e-7인 세트만 분석에 사용됩니다.

마지막 열은 a 는 허용되고 n 은 허용되지 않는 구조의 허용 가능성에 대한 정보를 포함합니다.

 #--------------------------------------------------------------------------------------------------------------------------- # 1 2 3 4 5 6 7 8 9 ABCDEFGHIJKLMNOPQ #--------------------------------------------------------------------------------------------------------------------------- 3F8V A 69715 1 1 1 1 1 1 1 1 1 9427 1 1 0.00 0.00 0.00 0.00 1.08 1 6 5 164 X a 3DKE X 68132 1 2 0 1 2 0 1 2 0 39139 1 1 0.00 0.00 0.00 0.00 1.25 1 11 7 164 X a 3HH3 A 77317 1 3 0 1 3 0 1 3 0 90 1 0 0.00 0.00 0.00 0.00 1.25 1 5 4 164 X a 3HH5 A 77319 1 4 0 1 4 0 1 4 0 90 2 0 0.00 0.00 0.00 0.00 1.25 1 4 4 164 X a

데이터베이스 구축 및 데이터 파싱

이제 처리해야 할 작업과 수행해야 하는 작업에 대한 아이디어를 얻었으므로 시작하겠습니다.

데이터 다운로드

이 분석에 대한 모든 데이터는 다음 세 주소에서 찾을 수 있습니다.

  • ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/
  • ftp.ncbi.nih.gov/mmdb/nrtable/
  • ftp.ncbi.nih.gov/pub/taxonomy/taxdmp.zip

처음 두 링크에는 아카이브 목록이 포함되어 있습니다. 해상도나 품질 부족으로 인한 문제를 방지하려면 각각의 최신 아카이브를 사용해야 합니다. 세 번째 링크에는 최신 분류 아카이브가 직접 포함되어 있습니다.

데이터 파싱

일반적으로 PDB 파일의 구문 분석은 Java, Perl 또는 Python의 플러그인 또는 모듈에 의해 수행됩니다. 본 연구의 경우 미리 작성된 PDB 파싱 모듈을 사용하지 않고 맞춤형 Perl 애플리케이션을 작성했습니다. 그 이유는 많은 양의 데이터를 파싱할 때 내 경험상 실험 데이터를 사용할 때 가장 흔한 문제는 데이터의 오류이기 때문입니다. 때때로 좌표, 거리, 선 길이, 있으면 안 되는 위치의 주석 등에 오류가 있습니다.

이를 처리하는 가장 효과적인 방법은 처음에 데이터베이스의 모든 것을 원시 텍스트로 저장하는 것입니다. 공통 파서는 사양을 완전히 준수하는 이상적인 데이터를 처리하도록 작성되었습니다. 그러나 실제로 데이터는 이상적이지 않으며 Perl 가져오기 스크립트가 있는 필터링 섹션에서 설명합니다.

데이터베이스 구축

데이터베이스를 구축할 때 이 데이터베이스는 데이터 처리를 위해 구축되었음을 유의하십시오. 나중에 분석은 SPSS 또는 R에서 수행될 것입니다. 여기서 우리의 목적을 위해 최소 버전 8.4에서 PostgreSQL을 사용하는 것이 좋습니다.

테이블 구조는 약간의 변경만으로 다운로드한 파일에서 직접 복사됩니다. 이 경우 레코드 수가 너무 적어 정규화에 시간을 할애할 가치가 없습니다. 언급했듯이 이 데이터베이스는 일회용입니다. 이 테이블은 웹사이트에서 제공되도록 구축되지 않았습니다. 데이터 처리를 위해 존재합니다. 작업이 완료되면 다른 연구원이 프로세스를 반복하기 위해 삭제하거나 보충 데이터로 백업할 수 있습니다.

이 경우 최종 결과는 SPSS 또는 R과 같은 일부 통계 도구와 함께 사용하기 위해 파일로 내보낼 수 있는 하나의 테이블이 됩니다.

테이블

ATOM 레코드에서 데이터를 추출하려면 HEADER 또는 TITLE 레코드에 연결해야 합니다. 데이터 계층은 아래 그림에 설명되어 있습니다.

세 번째 정규 형식의 데이터베이스를 생성하는 이황화 결합 데이터의 자연 계층 구조

이 그림은 제3정규형(3NF)의 데이터베이스를 단순화한 것이기 때문에 우리의 목적상 너무 많은 오버헤드를 포함합니다. 이유: 이황화 결합 감지를 위해 원자 사이의 거리를 계산하려면 조인을 수행해야 합니다. 이 경우 테이블 자체에 두 번 조인되고 보조 및 기본 구조에도 각각 두 번씩 조인되므로 매우 느린 프로세스입니다. 모든 분석에 2차 구조 정보가 필요한 것은 아니므로 데이터를 재사용하거나 더 많은 양의 이황화 결합을 분석해야 하는 경우 다른 스키마가 제안됩니다.

2차 구조(3NF)를 사용하지 않는 데이터베이스 스키마의 보다 상세한 모델

이황화 결합은 다른 공유 결합만큼 자주 발생하지 않으므로 창고 모델은 사용할 수 있지만 필요하지 않습니다. 아래의 스타 스키마 및 차원 모델링은 개발하는 데 너무 많은 시간이 걸리고 쿼리가 더 복잡해집니다.

스타 스키마 및 차원 모델링을 사용한 데이터베이스 레이아웃

모든 채권을 처리해야 하는 경우에는 스타 스키마를 권장합니다.

(그렇지 않으면 이황화 결합이 다른 결합만큼 흔하지 않기 때문에 필요하지 않습니다. 이 작업의 경우 이황화 결합의 수가 30,000에 가깝고 3NF에서 충분히 빠를 수 있지만 통해 처리하기로 결정했습니다. 정규화되지 않은 테이블이므로 여기에는 표시되지 않습니다.)

모든 공유 결합의 예상 총 수는 3차 구조의 원자 수의 최소 두 배이며, 이 경우 3NF는 매우 느릴 것이므로 스타 스키마 형식을 사용한 비정규화가 필요합니다. 해당 스키마에서 일부 테이블에는 두 개의 외래 키 검사가 있습니다. 이는 두 원자 간에 결합이 생성되기 때문에 각 원자에는 자체 primary_structure_id , atom_name_idresidue_id 가 있어야 하기 때문입니다.

d_atom_name 차원 테이블을 채우는 두 가지 방법이 있습니다. 데이터에서, 다른 소스에서 앞서 언급한 화학 성분 사전입니다. 형식은 PDB 형식과 유사합니다. CONECT RESIDUE 유용합니다. 이는 RESIDUE 의 첫 번째 열에 3자리의 잔여 코드가 포함되어 있고 CONECT 에는 원자 이름이기도 한 원자의 이름과 연결이 포함되어 있기 때문입니다. 따라서 이 파일에서 모든 원자 이름을 구문 분석하여 데이터베이스에 포함할 수 있지만 데이터베이스에 나열되지 않은 원자 이름이 포함될 가능성을 허용하는 것이 좋습니다.

 RESIDUE PRO 17 CONECT N 3 CA CD H CONECT CA 4 NC CB HA CONECT C 3 CA O OXT CONECT O 1 C CONECT CB 4 CA CG HB2 HB3 CONECT CG 4 CB CD HG2 HG3 CONECT CD 4 N CG HD2 HD3 CONECT OXT 2 C HXT CONECT H 1 N CONECT HA 1 CA CONECT HB2 1 CB CONECT HB3 1 CB CONECT HG2 1 CG CONECT HG3 1 CG CONECT HD2 1 CD CONECT HD3 1 CD CONECT HXT 1 OXT END HET PRO 17 HETNAM PRO PROLINE FORMUL PRO C5 H9 N1 O2

이 프로젝트에서 코딩 속도는 실행 속도와 스토리지 소비보다 더 관련이 있습니다. 나는 정규화하지 않기로 결정했습니다. 결국 우리의 목표는 서론에서 언급한 열로 테이블을 생성하는 것입니다.

이 부분에서는 가장 중요한 테이블만 설명합니다.

주요 테이블은 다음과 같습니다.

  • proteins : 실험명과 코드가 있는 표.
  • ps : sequence , chain_idcode 를 포함할 기본 구조 테이블.
  • ts : 원시 데이터에서 추출되어 ATOM 레코드 형식으로 변환된 3차/4차 구조를 포함하는 테이블입니다. 이것은 준비 테이블로 사용되며 추출 후에 삭제할 수 있습니다. 리간드는 제외됩니다.
  • sources : 실험 데이터가 파생된 유기체의 목록입니다.
  • tax_names , taxonomy_path , taxonomy_paths : NCBI 분류 데이터베이스의 리네아 분류 이름으로, sources 에 나열된 유기체에서 분류 경로를 가져오는 데 사용됩니다.
  • nr : NR 세트에서 추출한 NCBI 비중복 단백질 목록.
  • pdb_ssbond : 주어진 PDB 파일의 이황화 결합 목록입니다.

데이터 필터링 및 처리

데이터는 RCSB PDB 저장소의 스냅샷에서 검색됩니다.

각 파일은 Perl 스크립트를 사용하여 PostgreSQL 데이터베이스의 단일 테이블 raw_pdb 로 가져옵니다. 스크립트는 청크당 10,000개의 삽입 트랜잭션을 사용합니다.

raw_pdb 의 구조는 다음과 같습니다.

유형 수정자
암호 다양한 캐릭터(20) null이 아님
line_num 정수 null이 아님
line_cont 다양한 캐릭터(80) null이 아님

가져오기 스크립트는 다음과 같습니다.

 #!/usr/bin/perl -w use FindBin '$Bin'; use DBI; $dbName = 'bioinf'; $dbLogin = 'ezop'; $dbPass = 'XYZ'; $conn = DBI->connect("DBI:Pg:database=$dbName;host=localhost", "$dbLogin", "$dbPass", {'RaiseError' => 1, 'AutoCommit' => 0}); die "./pdb_lines_unos.pl <table> <file>" if not defined($ARGV[0]); $recordCount = 0; $table = $ARGV[0]; $fName = $ARGV[1]; open F, "zcat $fName|"; while (<F>) { chomp; $linija = $_; $recordCount += 1; $sql = "insert into $table (code, line_num, line_cont) values (?, ?, ?)"; $conn->do($sql, undef, $fName, $recordCount, $linija); $conn->commit() if ($recordCount%10000 == 0); } close F; $conn->commit(); 1;

라인을 가져온 후 아래에서 정의할 함수를 사용하여 구문 분석됩니다.

raw_pdb 데이터에서 해당 레코드를 구문 분석하여 ts , ps , proteins , sources , sources_organelass_bond 테이블을 생성합니다.

ps 테이블에는 chain , lengthsequence 의 세 가지 중요한 열이 있습니다. 단백질 서열은 각 사슬과 잔기 서열에 의해 정렬된 각 잔기에 대해 C-알파 원자를 사용하여 생성되며, 첫 번째 삽입과 첫 번째 대체 위치만 취합니다. chainTS.chain 열에서 가져오고 length 는 단순히 sequence 문자열의 미리 계산된 길이입니다. 이 기사는 단일 사슬과 사슬 내 연결만을 분석하기 위한 것이므로 다중 사슬 단백질은 여기에서 분석을 건너뜁니다.

SSBOND 레코드 내에서 모든 이황화 결합은 pdb_ssbond_extended 테이블에서 상속되는 pdb_ssbond 테이블에 저장됩니다. pdb_ssbond 는 다음과 같습니다.

유형 널 입력 가능 기본 설명
ID 정수 null이 아님 nextval('pdb_ssbond_id_seq'::regclass)
암호 캐릭터(4) 4자리 코드
ser_num 정수 ssbond의 일련 번호
잔여물1 캐릭터(3) 결합의 첫 번째 잔기
chain_id1 캐릭터(1) 결합의 첫 번째 사슬
res_seq1 정수 첫 번째 잔기의 일련 번호
i_code1 캐릭터(1) 첫 번째 잔기의 삽입 코드
잔류물2 캐릭터(3) 결합의 두 번째 잔기
chain_id2 캐릭터(1) 결합의 두 번째 사슬
res_seq2 정수 두 번째 잔기의 연속 번호
i_code2 캐릭터(1) 두 번째 잔기의 삽입 코드
sym1 캐릭터(6) 첫 번째 대칭 연산자
심2 캐릭터(6) 두 번째 대칭 연산자
거리 숫자(5,2) 원자 사이의 거리
is_reactive 부울 null이 아님 거짓 반응성 표시(설정 예정)
is_conecutive 부울 null이 아님 진실 연속 채권에 대한 표시(설정 예정)
담당자 7 부울 null이 아님 거짓 set-7 구조에 대한 표시(설정 예정)
담당자 40 부울 null이 아님 거짓 set-40 구조에 대한 표시(설정 예정)
담당자 80 부울 null이 아님 거짓 set-80 구조에 대한 표시(설정 예정)
is_from_pdb 부울 진실 PDB에서 소스로 가져옵니다(설정 예정).

또한 다음 색인을 추가했습니다.

 "pdb_ssbond_pkey" PRIMARY KEY, btree (id) "ndxcode1" btree (code, chain_id1, res_seq1) "ndxcode2" btree (code, chain_id2, res_seq2)

컷오프 전 이황화 결합의 분포는 가우시안(KS-test 등으로 테스트하지 않음)으로 가정하므로 동일한 단백질의 시스테인 사이의 거리별로 표준편차를 계산하여 허용된 결합 길이 범위를 파악하고 비교 컷오프까지. 컷오프는 계산된 평균 플러스 마이너스 3 표준 편차와 동일했습니다. 우리는 SSBOND 행의 PDB 파일에 포함되지 않았지만 ATOM 레코드 간의 거리를 계산하여 직접 삽입한 더 많은 가능한 이황화 결합을 도입하기 위해 범위를 확장했습니다. ssbonds에 대해 선택된 범위는 ssbonds 에서 2.48801947642267 Å이며, 이는 평균(2.05)에 4개의 표준 편차를 더한 값입니다.

 select count(1) as cnt , stddev(dist) as std_dev , avg(dist) as avg_val , -stddev(dist) + avg(dist) as left1 , stddev(dist) + avg(dist) as right1 , -2 * stddev(dist) + avg(dist) as left2 , 2 * stddev(dist) + avg(dist) as right2 , -3 * stddev(dist) + avg(dist) as left3 , 3 * stddev(dist) + avg(dist) as right3 , -4 * stddev(dist) + avg(dist) as left4 , 4 * stddev(dist) + avg(dist) as right4 , min(dist) , max(dist) from pdb_ssbond_tmp where dist > 0 and dist < 20;

TS 표에는 모든 원자의 좌표가 포함되어 있지만 시스테인만 사용되며 황 이름은 " SG " 입니다. 따라서 검색할 레코드 수를 줄여 프로세스 속도를 높이기 위해 " SG " 황 원자만 있는 또 다른 준비 테이블이 생성됩니다. 황만 선택할 때 조합의 수는 모든 원자의 경우보다 훨씬 적습니다. 전자의 경우 194,574개, 후자의 경우 122,761,100개입니다. 자신과 결합된 이 테이블 내에서 거리는 유클리드 거리를 사용하여 계산되고 결과는 pdb_ssbond 테이블로 가져오지만 거리가 이전에 계산된 정의된 길이 사이인 경우에만 가져옵니다. 이 속도를 높이는 이유는 전체 프로세스를 다시 실행하는 시간을 줄이기 위해(확인 목적으로) 하루 안에 유지하기 위한 것입니다.

이황화 결합을 청소하기 위해 다음 알고리즘을 사용합니다.

  • 연결의 양쪽이 동일한 아미노산을 가리킬 때 삭제
  • 길이가 1.6175344456264에서 2.48801947642267 사이가 아닌 채권을 삭제합니다.
  • 삽입 제거
  • 대체 원자 위치로 인해 발생하는 결합을 제거하지만 첫 번째 위치는 그대로 둡니다.

이에 대한 코드( pdb_ssbond 테이블을 첫 번째 인수로 사용)는 다음과 같습니다.

 CREATE OR REPLACE FUNCTION pdb_ssbond_clean2( clean_icodes boolean, clean_altloc boolean, mark_reactive boolean, mark_consecutive boolean) RETURNS void AS $$ declare _res integer; BEGIN delete from pdb_ssbond b where exists ( select a.id from pdb_ssbond a where a.code = b.code and a.id > b.id and ( ( a.chain_id1 = b.chain_id1 and a.res_seq1 = b.res_seq1 and a.chain_id2 = b.chain_id2 and a.res_seq2 = b.res_seq2) or ( a.chain_id1 = b.chain_id2 and a.res_seq1 = b.res_seq2 and a.chain_id2 = b.chain_id1 and a.res_seq2 = b.res_seq1) ) ) ; delete from pdb_ssbond where chain_id1 = chain_id2 and res_seq1 = res_seq2 and i_code1 = i_code2; update pdb_ssbond set is_consecutive = true , is_reactive = false; delete from pdb_ssbond where not dist between 1.6175344456264 and 2.48801947642267; if clean_icodes then delete from pdb_ssbond where i_code1 not in ('', ' ', 'A') or i_code2 not in ('', ' ', 'A') ; end if; if clean_altloc then delete from pdb_ssbond a where exists ( select 1 from pdb_ssbond b where b.code = a.code and b.chain_id1 = a.chain_id1 and b.res_seq1 = a.res_seq1 and b.i_code1 = a.i_code1 and b.ser_num < a.ser_num ) ; delete from pdb_ssbond a where exists ( select 1 from pdb_ssbond b where b.code = a.code and b.chain_id2 = a.chain_id2 and b.res_seq2 = a.res_seq2 and b.i_code2 = a.i_code2 and b.ser_num < a.ser_num ) ; end if; if mark_reactive then update pdb_ssbond set is_reactive = false ; update pdb_ssbond set is_reactive = true where exists ( select 1 from pdb_ssbond b where b.code = pdb_ssbond.code and b.chain_id1 = pdb_ssbond.chain_id1 and b.res_seq1 = pdb_ssbond.res_seq1 and b.i_code1 = pdb_ssbond.i_code1 and b.ser_num < pdb_ssbond.ser_num ) ; update pdb_ssbond set is_reactive = true where exists ( select 1 from pdb_ssbond b where b.code = pdb_ssbond.code and b.chain_id2 = pdb_ssbond.chain_id2 and b.res_seq2 = pdb_ssbond.res_seq2 and b.i_code2 = pdb_ssbond.i_code2 and b.ser_num < pdb_ssbond.ser_num ) ; update pdb_ssbond set is_reactive = true where (code, chain_id1, res_seq1, i_code1) in ( select code, chain_id1 as c, res_seq1 as r, i_code1 as i from pdb_ssbond intersect select code, chain_id2 as c, res_seq2 as r, i_code2 as i from pdb_ssbond ) ; update pdb_ssbond set is_reactive = true where (code, chain_id2, res_seq2, i_code2) in ( select code, chain_id1 as c, res_seq1 as r, i_code1 as i from pdb_ssbond intersect select code, chain_id2 as c, res_seq2 as r, i_code2 as i from pdb_ssbond ); end if; if mark_consecutive then update pdb_ssbond set is_consecutive = false; update pdb_ssbond set is_consecutive = true where not exists ( select 1 from pdb_ssbond a where a.code = pdb_ssbond.code and ( (a.chain_id1 = pdb_ssbond.chain_id1 and a.chain_id2 = pdb_ssbond.chain_id2) or (a.chain_id1 = pdb_ssbond.chain_id2 and a.chain_id2 = pdb_ssbond.chain_id1) ) and ( (a.res_seq1 between pdb_ssbond.res_seq1 and pdb_ssbond.res_seq2) or (a.res_seq2 between pdb_ssbond.res_seq1 and pdb_ssbond.res_seq2) or (pdb_ssbond.res_seq1 between a.res_seq1 and a.res_seq2) or (pdb_ssbond.res_seq2 between a.res_seq1 and a.res_seq2) ) and not ( a.code = pdb_ssbond.code and a.chain_id1 = pdb_ssbond.chain_id1 and a.chain_id2 = pdb_ssbond.chain_id2 and a.res_seq1 = pdb_ssbond.res_seq1 and a.res_seq2 = pdb_ssbond.res_seq2 ) ); end if; END; $$ LANGUAGE plpgsql;

이를 통해 중복되지 않은 단백질 세트를 psproteins 테이블에 결합된 nr 테이블로 가져오고 세트를 표시합니다( set7 , set40set80 ). 결국 단백질 양에 따라 한 세트만 분석됩니다. PDB와 NR 간의 일치하지 않는 체인은 분석에서 제거됩니다.

이황화 결합이 없는 단백질은 어떤 세트에도 속하지 않는 단백질과 함께 연구에서 제외됩니다. 데이터는 DSSP로 처리되며, 해상도에 문제가 있거나 처리할 원자가 너무 많은 파일도 제외됩니다. ssbond 테이블에서 서로 다른 사슬을 가진 연결의 수를 세어 쉽게 계산할 수 있지만 사슬간 연결이 유지되지 않았기 때문에 단일 사슬을 가진 단백질만 분석 결과로 사용합니다.

나머지 단백질의 경우 총 결합 수와 중첩 결합 수에 대해 업데이트가 수행되며 이는 각 집합에 대해 수행됩니다.

소스 유기체는 SOURCE 레코드에서 추출됩니다. 불명, 합성, 설계, 인공, 잡종인 경우 연구에서 제외된다. 저해상도 단백질은 측쇄가 보이지 않는 경우에만 제외됩니다.

SOURCE 레코드는 분류 행이 포함된 sources 테이블에 저장됩니다. 어떤 경우에는 분류 체계가 누락되었거나 올바르지 않습니다. 이러한 경우 전문가의 수동 수정이 필요합니다.

NCBI에서 다운로드한 소스 및 분류에서 클래스는 각 기본 구조에 할당됩니다. 클래스를 할당할 수 없는 경우 분석 목록에서 해당 단백질이 제거됩니다. 생물학적 데이터베이스가 사용되고 있다는 사실을 알고 있기 때문에 모든 출처 기록과 NCBI 분류 클래스에 대한 추가 검사는 생물학자가 수행하는 것이 좋습니다. 그렇지 않으면 다른 도메인 간의 분류에 문제가 있을 수 있습니다. 소스 셀룰러 위치를 분류 ID와 일치시키기 위해 소스 테이블의 데이터가 모든 데이터가 코드, 태그 및 값으로 작성되는 테이블 sources_organela 로 추출됩니다. 형식은 다음과 같습니다.

 select * from sources_organela where code = '1rav';
암호 mol_id 꼬리표
1라브 0 MOL_ID 1
1라브 7 CELLULAR_LOCATION 세포질(백색)

사용하려는 분류 아카이브는 7개의 덤프 파일이 포함된 ZIP 파일입니다. 이 파일들 중에서 가장 중요한 두 가지는 names.dmpmerged.dmp 입니다. 두 파일 모두 문서에 자세히 설명된 대로 CSV 탭 파이프로 구분된 파일입니다.

  • 병합된 merged.dmp 파일에는 이전 분류 ID 목록과 각각이 병합된 현재 분류 ​​ID가 포함되어 있습니다.
  • names.dmp 에는 다음과 같은 중요한 열이 순서대로 포함되어 있습니다.
    • tax_id : 분류 ID
    • name_txt : 종의 이름 및 해당하는 경우 고유한 이름(종이 여러 이름으로 발견될 수 있는 경우 모호성을 없애는 데 도움이 됨)
  • division.dmp 에는 클래스로 사용할 최상위 도메인의 이름이 포함되어 있습니다.
  • nodes.dmp 는 분류 ID를 사용하는 유기체의 계층 구조를 포함하는 테이블입니다.
    • 여기에는 names.dmp 에서 찾을 수 있는 외래 키인 상위 분류 ID가 포함되어 있습니다.
    • 여기에는 관련 상위 도메인 데이터를 올바르게 저장하는 데 중요한 부서 ID도 포함되어 있습니다.

이 모든 데이터와 수동 수정(올바른 삶의 영역 설정)으로 우리는 taxonomy_path 테이블의 구조를 만들 수 있었습니다. 데이터 샘플링은 다음과 같습니다.

 select * from taxonomy_path order by length(path) limit 20 offset 2000;
세금 아이디 is_viral is_진핵생물 is_archaea is_other is_원핵생물
142182 세포 유기체; 박테리아; Gemmatimonadetes 에프 에프 에프 에프
136087 세포 생물;진핵생물;말라위모나다과 에프 에프 에프 에프
649454 바이러스, 미분류 파지, 시아노파지 G1168 에프 에프 에프 에프
321302 바이러스, 분류되지 않은 바이러스, 텔리나 바이러스 1 에프 에프 에프 에프
649453 바이러스, 미분류 파지, 시아노파지 G1158 에프 에프 에프 에프
536461 바이러스, 미분류 파지, 시아노파지 S-SM1 에프 에프 에프 에프
536462 바이러스, 미분류 파지, 시아노파지 S-SM2 에프 에프 에프 에프
77041 바이러스;분류되지 않은 바이러스;스텔스 바이러스 4 에프 에프 에프 에프
77042 바이러스, 분류되지 않은 바이러스, 스텔스 바이러스 5 에프 에프 에프 에프
641835 바이러스, 미분류 파지, 비브리오 파지 512 에프 에프 에프 에프
1074427 바이러스, 분류되지 않은 바이러스, 마우스 로사바이러스 에프 에프 에프 에프
1074428 바이러스;분류되지 않은 바이러스;마우스 모사바이러스 에프 에프 에프 에프
480920 기타 서열; 플라스미드; IncP-1 플라스미드 6-S1 에프 에프 에프 에프
2441 기타 서열; 플라스미드; 플라스미드 ColBM-Cl139 에프 에프 에프 에프
168317 기타 서열; 플라스미드; IncQ 플라스미드 pIE723 에프 에프 에프 에프
536472 바이러스, 미분류 파지, 시아노파지 Syn10 에프 에프 에프 에프
536474 바이러스, 미분류 파지, 시아노파지 Syn30 에프 에프 에프 에프
2407 기타 시퀀스;트랜스포존;트랜스포존 Tn501 에프 에프 에프 에프
227307 바이러스;ssDNA 바이러스;서코바이러스과;자이로바이러스 에프 에프 에프 에프
687247 Viruses;unclassified phages;Cyanophage ZQS-7 에프 에프 에프 에프

Before any analysis, to avoid biases, sequences have to be checked for their level of identity. Although the NR set contains sequences which are already compared between each other, an extra check is always recommended.

For each disulfide bond's prior statistical analysis, data is marked if it is reactive or overlapping. After marking overlaps, that information automatically reveals how many consecutive and non-consecutive bonds are inside each protein, and that data is stored in the proteins table from which all protein complexes are excluded in final result.

Each disulfide bond is marked also for its association to sets, by checking both bond sides to see if they belong to the same NR set. Where that is not the case, the disulfide bond is skipped for that set analysis.

To analyze the quantity of bonds by their variance, each length has to be put in a specific class. In this case, only five classes are chosen as written in the function below.

 CREATE OR REPLACE FUNCTION len2class(len integer) RETURNS integer AS $BODY$ BEGIN return case when len <= 100 then 1 when len > 100 and len <= 200 then 2 when len > 200 and len <= 300 then 3 when len > 300 and len <= 400 then 4 else 5 end; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100;

Most of the protein sizes are less than 400 amino acids, so length classification is done by splitting lengths into five ranges, each taking 100 amino acids, except the last one which takes the rest. Below you can see how to use this function to extract data for analysis:

 SELECT p.code, p.title, p.ss_bonds, p.ssbonds_overlap, p.intra_count, p.sci_name_src, p.len, p.tax_path, p.pfam_families, p.src_class, ( SELECT s.id FROM src_classes s WHERE s.src_class::text = p.src_class::text) AS src_class_id, p.len_class7, ( SELECT s.val FROM sources_organela s WHERE s.code = p.code::bpchar AND s.tag::text = 'EXPRESSION_SYSTEM_CELLULAR_LOCATION'::text) AS expression_system_cellular_location, ( SELECT s.val FROM sources_organela s WHERE s.code = p.code::bpchar AND s.tag::text = 'CELLULAR_LOCATION'::text) AS cellular_location, ps.sequence, ps.uniprot_code, ps.accession_code, ps.cc, ps.seq_uniprot, ps.chain_id FROM proteins p JOIN nr n ON n.code::text = p.code::text AND n.rep7 = true JOIN ps ps ON ps.code::text = n.code::text AND ps.chain_id = n.chain_id AND ps.het = false WHERE p.is_excluded = false AND p.chain_cnt = 1 AND p.is_set7 = true AND p.reactive_cnt7 = 0 ORDER BY p.code;

An example result with corrected titles and some manually added columns is shown below.

PDB 코드 총 SS-본드 수 비연속 SS채권 수 PDB 길이/아미노산 도메인 타겟P 1.1 태피 1.0 시그널P 4.1 클로로P 1.1 TMHMM 2.0 막횡단 도메인 수 빅파이 nucPred 넷네스 1.1 PSORTb v3.0 시크릿톰P 2.0 록트리2 합의 현지화 예측
1akp 2 0 114 박테리아 ND 문신 신호 신호 펩타이드 없음 ND 0 ND ND ND 알려지지 않은 ND 섬유소 알려지지 않은
1부 2 0 102 박테리아 ND 문신 신호 신호 펩티드 ND 1 ND ND ND 알려지지 않은 ND 분비 알려지지 않은
1c75 0 0 71 박테리아 ND 문신 신호 신호 펩타이드 없음 ND 0 ND ND ND 세포질막 비고전적 분비물 주변 세포질 알려지지 않은
1c8x 0 0 265 박테리아 ND 문신 신호 신호 펩티드 ND 1 ND ND ND 알려지지 않은 ND 분비 알려지지 않은
1cx1 1 0 153 박테리아 ND 문신 신호 신호 펩티드 ND 1 ND ND ND 세포외 ND 분비 알려지지 않은
1dab 0 0 539 박테리아 ND 문신 신호 신호 펩티드 ND 0 ND ND ND 외막 ND 외막 알려지지 않은
1dfu 0 0 94 박테리아 ND 문신 신호 신호 펩타이드 없음 ND 0 ND ND ND 세포질의 ND 세포질 알려지지 않은
1e8r 2 2 50 박테리아 ND 문신 신호 신호 펩티드 ND 0 ND ND ND 알려지지 않은 ND 분비 분비
1esc 0 302 박테리아 ND 문신 신호 신호 펩티드 ND 1 ND ND ND 세포외 ND 주변 세포질 알려지지 않은
1g6e 1 0 87 박테리아 ND 문신 신호 신호 펩티드 ND 1 ND ND ND 알려지지 않은 ND 분비 알려지지 않은

처리 중개자로서의 PostgreSQL

이 작업에서는 데이터 가져오기에서 분석까지 데이터를 처리하는 방법을 보여주었습니다. 과학 데이터로 작업할 때 정규화가 필요할 때도 있고 필요하지 않을 때도 있습니다. 다른 분석에 재사용되지 않을 소량의 데이터로 작업할 때 처리 속도가 충분히 빠른 경우 비정규화 상태로 두는 것으로 충분합니다.

이 모든 것이 하나의 생물정보학 데이터베이스에서 수행된 이유는 PostgreSQL이 여러 언어를 통합할 수 있기 때문입니다. 여기에는 데이터베이스 내에서 직접 통계 분석을 수행할 수 있는 R이 포함됩니다. 이는 생물정보학 도구에 대한 향후 기사의 주제입니다.


귀중한 자문을 제공한 Toptal 동료 Stefan Fuchs와 Aldo Zelen에게 특별한 감사를 전합니다.