ジスルフィド結合研究のためのバイオインフォマティクスデータベースの開発
公開: 2022-03-11Protein Data Bank(PDB)バイオインフォマティクスデータベースは、実験的に決定されたタンパク質、核酸、および複雑なアセンブリの構造の世界最大のリポジトリです。 すべてのデータは、X線、分光法、結晶学、NMRなどの実験方法を使用して収集されます。
この記事では、PDBからデータを抽出、フィルタリング、およびクリーンアップする方法について説明します。 これにより、「さまざまな生命領域におけるタンパク質ジスルフィド結合の発生:タンパク質工学、設計および選択、第27巻、第3号に掲載された、タンパク質データバンクのタンパク質の比較」の記事で説明されているタイプの分析が可能になります。 2014年3月1日、65〜72ページ。
PDBには、解像度、方法、変異などが異なる多くの繰り返し構造があります。同じまたは類似のタンパク質で実験を行うと、グループ分析に偏りが生じる可能性があるため、重複セットの中から正しい構造を選択する必要があります。 。 そのためには、非冗長(NR)タンパク質セットを使用する必要があります。
正規化の目的で、3NFを使用するデータベース、またはスタースキーマと次元モデリングを使用するデータベースに原子名をインポートするための化合物辞書をダウンロードすることをお勧めします。 (問題のある構造を排除するためにDSSPも使用しました。この記事ではそれについては説明しませんが、他のDSSP機能は使用しなかったことに注意してください。)
この研究で使用されたデータには、異なる種から得られた少なくとも1つのジスルフィド結合を含む単一ユニットのタンパク質が含まれています。 分析を実行するために、すべてのジスルフィド結合は、最初に、ドメイン(古細菌、原核生物、ウイルス、真核生物、またはその他)によって、また長さによって、連続または非連続として分類されます。
出典:この記事の冒頭で述べたように、タンパク質工学、設計および選択。
出力
R、SPSS、またはその他のツールに入力できるようにするには、アナリストは次の構造のデータベーステーブルにデータを配置する必要があります。
桁 | タイプ | 説明 |
---|---|---|
code | character(4) | 実験ID(英数字、大文字と小文字を区別せず、ゼロで開始することはできません) |
title | character varying(1000) | 参考のために実験のタイトル(フィールドはテキスト形式にすることもできます) |
ss_bonds | integer | 選択した鎖のジスルフィド結合の数 |
ssbonds_overlap | integer | 重なり合うジスルフィド結合の数 |
intra_count | integer | 同じチェーン内で作成された結合の数 |
sci_name_src | character varying(5000) | シーケンスが取得された生物の学名 |
tax_path | character varying | リンネ分類ツリーのパス |
src_class | character varying(20) | 生物のトップレベルクラス(真核生物、原核生物、ウイルス、古細菌、その他) |
has_reactives7 | boolean | シーケンスに反応中心が含まれている場合にのみ真 |
len_class7 | integer | セット7のシーケンスの長さ(ブラストによって計算されたp値10e-7で設定) |
材料および方法
この目標を達成するための最初のステップは、rcsb.orgからデータを収集することです。 そのサイトには、さまざまな形式の実験のダウンロード可能なPDB構造が含まれています。
データは複数の形式で保存されますが、この例では、フォーマットされた固定スペース区切りのテキスト形式(PDB)のみが使用されます。 PDBテキスト形式の代替はそのXMLバージョンであるPDBMLですが、データ分析で問題を引き起こす可能性のある不正な形式の原子位置命名エントリが含まれている場合があります。 古いmmCIFやその他の形式も利用できる場合がありますが、この記事では説明しません。
PDBフォーマット
PDB形式は、断片化された固定幅のテキスト形式であり、SQLクエリ、Javaプラグイン、Perlモジュールなどで簡単に解析できます。 ファイルコンテナ内の各データ型は、適切なタグで始まる行として表されます。次のサブセクションで各タグタイプについて説明します。 行の長さは80文字以下です。ここで、タグは6文字以下で、1つ以上のスペースを合わせて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
から抜粋したものです。 最初の列はレコードのタイプを示し、2番目の列はアトムのシリアル番号です。 構造内のすべての原子には、独自のシリアル番号があります。
シリアル番号の横には、4バイトかかる原子位置ラベルがあります。 その原子位置から、元素の化学記号を抽出することができます。これは、レコードデータの別の列に常に存在するとは限りません。
原子名の後に3文字の剰余コードがあります。 タンパク質の場合、その残基はアミノ酸に対応します。 次に、チェーンは1文字でコード化されます。 鎖とは、ギャップの有無にかかわらず、アミノ酸の単一鎖を意味しますが、リガンドを鎖に割り当てることができる場合もあります。 このケースは、次の列にあるアミノ酸配列の非常に大きなギャップから検出できます。 変異を含めて同じ構造をスキャンできる場合もあります。その場合、挿入コードはシーケンス列の後の追加の列で使用できます。 挿入コードには、影響を受ける残基を区別するのに役立つ文字が含まれています。
次の3つの列は、オングストローム(Å)で測定された各原子の空間座標です。 これらの座標の隣には、占有列があります。これは、原子がその場所にある確率を、通常の0から1のスケールで示します。
最後から2番目の列は温度係数で、Ųで測定された結晶の乱れに関する情報を伝達します。 60Ųより大きい値は無秩序を意味し、30Ųより小さい値は自信を意味します。 実験方法に依存するため、PDBファイルに常に存在するとは限りません。
次の列(記号と料金)は通常欠落しています。 化学記号は、前述のように、原子位置の列から収集できます。 電荷が存在する場合、整数の後に+
または-
が続く記号として接尾辞が付けられます(例: N1+
)。
TER
これはチェーンの終わりを示します。 この線がなくても、チェーンがどこで終わっているかを簡単に見分けることができます。 したがって、多くの場合、 TER
行が欠落しています。
ENDMDL
とMODEL
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つのジスルフィド結合がタグ付けされており、2番目の列にシーケンス番号が示されています。 これらの結合はすべてシステインを使用し(列3および6)、それらはすべて鎖A
に存在します(列4および7)。 各鎖の後に、ペプチド鎖における結合の位置を示す残基配列番号があります。 挿入コードは各残基配列の隣にありますが、この例では、その領域にアミノ酸が挿入されていないため、挿入コードは存在しません。 最後の列の前の2つの列は対称操作用に予約されており、最後の列は硫黄原子間の距離であり、Åで測定されます。
このデータにいくつかのコンテキストを与えるために少し時間を取ってみましょう。
rcsb.org NGLビューアを使用して撮影した以下の写真は、実験132L
の構造を示しています。 特に、それらはリガンドのないタンパク質を示しています。 最初の画像はスティック表現を使用しており、CPKカラーは硫黄とその結合を黄色で示しています。 V字型の硫黄結合はメチオニン結合を表し、Z字型の結合はシステイン間のジスルフィド結合です。
次の図では、バックボーンの視覚化と呼ばれるタンパク質の視覚化の簡略化された方法がアミノ酸で色分けされて示されています。ここで、システインは黄色です。 これは同じタンパク質を表しており、その側鎖は除外され、そのペプチドグループの一部のみが含まれています。この場合はタンパク質のバックボーンです。 N末端、Cアルファ、C末端の3つの原子で構成されています。 この写真はジスルフィド結合を示していませんが、タンパク質の空間配置を示すために簡略化されています。
パイプは、ペプチド結合原子を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構造の比較によって作成された異なるIDp値レベルの3つのセットがあります。 結果は、後で説明するテキストファイルに追加されます。 このプロジェクトではすべての列が必要なわけではないため、重要な列のみを説明します。
最初の2つの列には、上記のATOM
レコードで説明したように、一意のPDB実験コードとチェーン識別子が含まれています。 列6、9、およびCには、BLASTによって計算されたシーケンスの類似性のレベルであるp値の代表性に関する情報が含まれています。 その値がゼロの場合、セットの一部として受け入れられません。 値が1の場合、それはです。 上記の列は、それぞれ10e-7、10e-40、および10e-80のp値カットオフを持つセットの受け入れを表しています。 分析には、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
データベースの構築とデータの解析
何を扱っているのか、何をする必要があるのかがわかったので、始めましょう。
データのダウンロード
この分析のすべてのデータは、次の3つのアドレスにあります。
- ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/
- ftp.ncbi.nih.gov/mmdb/nrtable/
- ftp.ncbi.nih.gov/pub/taxonomy/taxdmp.zip
最初の2つのリンクには、アーカイブのリストが含まれています。 それぞれの最新のアーカイブを使用して、解像度や品質の欠如に起因する問題を回避する必要があります。 3番目のリンクには、最新の分類法アーカイブが直接含まれています。
データの解析
通常、PDBファイルの解析は、Java、Perl、またはPythonのプラグインまたはモジュールによって行われます。 この調査の場合、事前に作成されたPDB解析モジュールを使用せずにカスタムPerlアプリケーションを作成しました。 その理由は、大量のデータを解析する場合、私の経験では、実験データを使用する際の最も一般的な問題はデータのエラーです。 座標、距離、行の長さ、あるべきではない場所のコメントなどにエラーがある場合があります。
これに対処する最も効果的な方法は、最初にすべてを生のテキストとしてデータベースに保存することです。 一般的なパーサーは、仕様に完全に準拠する理想的なデータを処理するように作成されています。 しかし実際には、データは理想的ではありません。これについては、Perlインポートスクリプトが掲載されているフィルタリングのセクションで説明します。
データベース構築
データベースを構築するとき、このデータベースはデータを処理するために構築されていることに注意してください。 後で分析はSPSSまたはRで行われます。ここでの目的のために、少なくともバージョン8.4のPostgreSQLを使用することをお勧めします。
テーブル構造は、ダウンロードしたファイルから直接コピーされますが、わずかな変更が加えられています。 この場合、レコードの数が少なすぎるため、正規化に時間を費やす価値はありません。 前述のように、このデータベースは使い捨てです。これらのテーブルはWebサイトで提供されるように構築されておらず、データを処理するためだけにあります。 それが終了したら、おそらく他の研究者によるプロセスを繰り返すために、それらをドロップするか、補足データとしてバックアップすることができます。
この場合、最終結果は1つのテーブルになり、SPSSやRなどの統計ツールで使用するためにファイルにエクスポートできます。
テーブル
ATOM
レコードからのデータ抽出は、 HEADER
またはTITLE
レコードに接続する必要があります。 データ階層は次の図で説明されています。
この図は、第3正規形(3NF)のデータベースを簡略化して表したものであるため、私たちの目的では、オーバーヘッドが多すぎます。 理由:ジスルフィド結合を検出するための原子間の距離を計算するには、結合を行う必要があります。 この場合、テーブルはそれ自体に2回結合され、2次構造と1次構造にもそれぞれ2回結合されます。これは、非常に遅いプロセスです。 すべての分析に二次構造情報が必要なわけではないため、データを再利用したり、大量のジスルフィド結合を分析したりする必要がある場合に備えて、別のスキーマを提案します。
ジスルフィド結合は他の共有結合ほど頻繁ではないため、ウェアハウスモデルは使用できますが、必要ありません。 以下のスタースキーマとディメンションモデリングは、開発に時間がかかりすぎ、クエリがより複雑になります。
すべての結合を処理する必要がある場合は、スタースキーマをお勧めします。
(それ以外の場合、ジスルフィド結合は他の結合ほど一般的ではないため、必要ありません。この作業の場合、ジスルフィド結合の数は30,000に近く、3NFでは十分に速いかもしれませんが、私はそれを経由して処理することにしました正規化されていないテーブルなので、ここには示されていません。)
すべての共有結合の予想される総数は、三次構造の原子数の少なくとも2倍であり、その場合、3NFは非常に遅いため、スタースキーマ形式を使用した非正規化が必要です。 そのスキーマでは、一部のテーブルに2つの外部キーチェックがあります。これは、2つのアトム間に結合が作成されるため、各アトムには独自のprimary_structure_id
、 atom_name_id
、およびresidue_id
が必要です。
d_atom_name
ディメンションテーブルに入力する方法は2つあります。データから、および別のソースから、前述の化学成分ディクショナリからです。 その形式はPDB形式に似ていますRESIDUE
行とCONECT
行のみが役立ちます。 これは、 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_id
、およびcode
を含む一次構造テーブル。 -
ts
:生データから抽出され、ATOM
レコード形式に変換された3次/4次構造を含むテーブル。 これはステージングテーブルとして使用され、抽出後に削除できます。 リガンドは除外されます。 -
sources
:実験データが得られた生物のリスト。 -
tax_names
、taxonomy_path
、taxonomy_paths
:NCBI分類データベースからのリンネ式分類名。sources
にリストされている生物から分類パスを取得するために使用されます。 -
nr
:NRセットから抽出されたNCBI非冗長タンパク質のリスト。 -
pdb_ssbond
:特定のPDBファイル内のジスルフィド結合のリスト。
データのフィルタリングと処理
データは、RCSBPDBリポジトリのスナップショットから取得されます。
各ファイルは、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_organela
、およびss_bond
を生成します。
ps
テーブルには、 chain
、 length
、 sequence
の3つの重要な列があります。 タンパク質配列は、各鎖および残基配列順に並べられた各残基のC-アルファ原子を使用して生成され、最初の挿入と最初の代替位置のみを取ります。 chain
はTS.chain
列から取得され、 length
は単にsequence
文字列の事前計算された長さです。 この記事は単鎖と鎖内接続のみを分析することを目的としているため、ここでの分析では多鎖タンパク質はスキップされます。
SSBOND
レコード内では、すべてのジスルフィド結合がpdb_ssbond
テーブルに格納されます。このテーブルはpdb_ssbond_extended
テーブルから継承されます。 pdb_ssbond
は次のようになります。
桁 | タイプ | Nullable | ディフォルト | 説明 |
---|---|---|---|---|
id | 整数 | nullではない | nextval('pdb_ssbond_id_seq' :: regclass) | |
コード | character(4) | 4文字のコード | ||
ser_num | 整数 | ssbondのシリアル番号 | ||
残留物1 | 文字(3) | 結合の最初の残基 | ||
chain_id1 | character(1) | ボンドの最初のチェーン | ||
res_seq1 | 整数 | 最初の残基の連続番号 | ||
i_code1 | character(1) | 最初の残基の挿入コード | ||
残留物2 | 文字(3) | 結合の2番目の残基 | ||
chain_id2 | character(1) | ボンドの2番目のチェーン | ||
res_seq2 | 整数 | 2番目の残基の連続番号 | ||
i_code2 | character(1) | 2番目の残基の挿入コード | ||
sym1 | 文字(6) | 最初の対称操作 | ||
sym2 | 文字(6) | 2番目の対称操作 | ||
dist | 数値(5,2) | 原子間の距離 | ||
is_reactive | ブール値 | nullではない | false | 反応性のマーク(設定予定) |
is_consecutive | ブール値 | nullではない | true | 連続債券のマーク(設定予定) |
rep7 | ブール値 | nullではない | false | set-7構造のマーク(設定予定) |
rep40 | ブール値 | nullではない | false | set-40構造のマーク(設定予定) |
rep80 | ブール値 | nullではない | false | set-80構造のマーク(設定予定) |
is_from_pdb | ブール値 | true | ソースとしてPDBから取得(設定予定) |
これらのインデックスも追加しました。

"pdb_ssbond_pkey" PRIMARY KEY, btree (id) "ndxcode1" btree (code, chain_id1, res_seq1) "ndxcode2" btree (code, chain_id2, res_seq2)
カットオフ前のジスルフィド結合の分布はガウス分布であると想定されているため(たとえば、KSテストでテストせずに)、同じタンパク質のシステイン間の各距離で標準偏差を計算して、許容される結合長の範囲を見つけて比較しました。カットオフに。 カットオフは、計算された平均プラスマイナス3標準偏差と同じでした。 SSBOND
行のPDBファイルに含まれていなかったが、 ATOM
レコード間の距離を計算することによって自分自身を挿入した、より多くの可能性のあるジスルフィド結合を導入するために範囲を拡張しました。 ssbondsに選択された範囲は、 ssbonds
です。これは、平均(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日以内に維持するためです。
ジスルフィド結合を洗浄するには、次のアルゴリズムを使用します。
- 接続の両側が同じアミノ酸を指している場合は削除します
- 長さが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;
これにより、非冗長なタンパク質のセットがnr
テーブルにインポートされ、 ps
およびproteins
テーブルに結合され、セットにマークが付けられます( set7
、 set40
、およびset80
)。 最後に、タンパク質の量に応じて、1セットのみが分析されます。 PDBとNRの間の不一致のチェーンは、分析から削除されます。
ジスルフィド結合のないタンパク質は、どのセットにも属さないタンパク質とともに、研究から除外されます。 データはDSSPで処理され、解像度に問題があるか、処理するには原子が多すぎるこれらのファイルも除外されます。 異なる鎖を持つ接続の数を数えることによってssbond
テーブルから簡単に計算されますが、鎖間の接続が保持されなかったため、分析の結果として単一の鎖を持つタンパク質のみが使用されます。
残りのタンパク質については、結合の総数と重複する結合の数が更新され、これは各セットに対して行われます。
ソース生物は、 SOURCE
レコードから抽出されます。 それが未知、合成、設計、人工、またはハイブリッドである場合、それは研究から破棄されます。 低解像度のタンパク質も、側鎖が見えない場合にのみ除外されます。
SOURCE
レコードは、分類行を含むsources
テーブルに格納されます。 場合によっては、分類法が欠落しているか、正しくありません。 このような場合、専門家の手動修正が必要です。
NCBIからダウンロードしたソースと分類法から、クラスは各一次構造に割り当てられます。 クラスを割り当てることができない場合、タンパク質は分析リストから削除されます。 生物学データベースが使用されていることを知っているので、生物学者はすべてのソースレコードとNCBI分類クラスの追加チェックを実行することをお勧めします。そうしないと、異なるドメイン間の分類に問題が生じる可能性があります。 ソースセルラーの場所を分類IDと照合するために、ソーステーブルのデータがテーブルsources_organela
に抽出され、すべてのデータがコード、タグ、および値として書き込まれます。 その形式を以下に示します。
select * from sources_organela where code = '1rav';
コード | mol_id | 鬼ごっこ | val |
---|---|---|---|
1rav | 0 | MOL_ID | 1 |
1rav | 7 | CELLULAR_LOCATION | 細胞質(白) |
使用する分類法アーカイブは、7つのダンプファイルを含むZIPファイルです。 これらのファイルの中で、最も重要な2つはnames.dmp
とmerged.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_eukaryote | is_archaea | is_other | is_prokaryote |
---|---|---|---|---|---|---|
142182 | 細胞生物;細菌;ゲンマティモナス | f | f | f | f | t |
136087 | 細胞生物;真核生物;マラウィモナジダエ | f | t | f | f | f |
649454 | ウイルス;未分類のファージ;シアノファージG1168 | t | f | f | f | f |
321302 | ウイルス;未分類ウイルス;テリーナウイルス1 | t | f | f | f | f |
649453 | ウイルス;未分類のファージ;シアノファージG1158 | t | f | f | f | f |
536461 | ウイルス;未分類のファージ;シアノファージS-SM1 | t | f | f | f | f |
536462 | ウイルス;未分類のファージ;シアノファージS-SM2 | t | f | f | f | f |
77041 | ウイルス;未分類ウイルス;ステルスウイルス4 | t | f | f | f | f |
77042 | ウイルス;未分類ウイルス;ステルスウイルス5 | t | f | f | f | f |
641835 | ウイルス;未分類のファージ;ビブリオファージ512 | t | f | f | f | f |
1074427 | ウイルス;未分類ウイルス;マウスロザウイルス | t | f | f | f | f |
1074428 | ウイルス;未分類ウイルス;マウスモサウイルス | t | f | f | f | f |
480920 | 他の配列;プラスミド;IncP-1プラスミド6-S1 | f | f | f | t | f |
2441 | 他の配列;プラスミド;プラスミドColBM-Cl139 | f | f | f | t | f |
168317 | その他の配列;プラスミド;IncQプラスミドpIE723 | f | f | f | t | f |
536472 | ウイルス;未分類のファージ;CyanophageSyn10 | t | f | f | f | f |
536474 | ウイルス;未分類のファージ;CyanophageSyn30 | t | f | f | f | f |
2407 | 他の配列;トランスポゾン;トランスポゾンTn501 | f | f | f | t | f |
227307 | ウイルス;ssDNAウイルス;サーコウイルス科;ジャイロウイルス | t | f | f | f | f |
687247 | ウイルス;未分類のファージ;シアノファージZQS-7 | t | f | f | f | f |
分析の前に、バイアスを回避するために、シーケンスの同一性のレベルをチェックする必要があります。 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の長さ/アミノ酸 | ドメイン | TargetP 1.1 | TatP 1.0 | SignalP 4.1 | ChloroP 1.1 | TMHMM2.0膜貫通ドメインの数 | ビッグパイ | nucPred | NetNES 1.1 | PSORTb v3.0 | SecretomeP 2.0 | LocTree2 | コンセンサスローカリゼーション予測 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1akp | 2 | 0 | 114 | バクテリア | ND | Tat-信号 | シグナルペプチドなし | ND | 0 | ND | ND | ND | わからない | ND | 線毛 | わからない |
1bhu | 2 | 0 | 102 | バクテリア | ND | Tat-信号 | シグナルペプチド | ND | 1 | ND | ND | ND | わからない | ND | 分泌 | わからない |
1c75 | 0 | 0 | 71 | バクテリア | ND | Tat-信号 | シグナルペプチドなし | ND | 0 | ND | ND | ND | 細胞質膜 | 非古典的な分泌 | ペリプラズム | わからない |
1c8x | 0 | 0 | 265 | バクテリア | ND | Tat-信号 | シグナルペプチド | ND | 1 | ND | ND | ND | わからない | ND | 分泌 | わからない |
1cx1 | 1 | 0 | 153 | バクテリア | ND | Tat-信号 | シグナルペプチド | ND | 1 | ND | ND | ND | 細胞外 | ND | 分泌 | わからない |
1dab | 0 | 0 | 539 | バクテリア | ND | Tat-信号 | シグナルペプチド | ND | 0 | ND | ND | ND | 外膜 | ND | 外膜 | わからない |
1dfu | 0 | 0 | 94 | バクテリア | ND | Tat-信号 | シグナルペプチドなし | ND | 0 | ND | ND | ND | 細胞質 | ND | サイトゾル | わからない |
1e8r | 2 | 2 | 50 | バクテリア | ND | Tat-信号 | シグナルペプチド | ND | 0 | ND | ND | ND | わからない | ND | 分泌 | 分泌 |
1esc | 3 | 0 | 302 | バクテリア | ND | Tat-信号 | シグナルペプチド | ND | 1 | ND | ND | ND | 細胞外 | ND | ペリプラズム | わからない |
1g6e | 1 | 0 | 87 | バクテリア | ND | Tat-信号 | シグナルペプチド | ND | 1 | ND | ND | ND | わからない | ND | 分泌 | わからない |
処理仲介者としてのPostgreSQL
この作業では、データのフェッチから分析までの処理方法を示しました。 科学データを扱う場合、正規化が必要な場合と不要な場合があります。 別の分析に再利用されない少量のデータを処理する場合は、処理が十分に高速な場合は、データを非正規化したままにしておくだけで十分です。
これがすべて1つのバイオインフォマティクスデータベースで行われた理由は、PostgreSQLが多くの言語を統合できるためです。 これには、データベース内で直接統計分析を行うことができるRが含まれます。これは、バイオインフォマティクスツールに関する今後の記事の主題です。
Toptalの同僚であるStefanFuchsとAldoZelenの貴重な相談に特に感謝します。