Disülfid Bağları Araştırması için Biyoinformatik Veritabanı Geliştirme
Yayınlanan: 2022-03-11Protein Veri Bankası (PDB) biyoinformatik veri tabanı, proteinlerin, nükleik asitlerin ve karmaşık düzeneklerin deneysel olarak belirlenmiş yapılarının dünyanın en büyük deposudur. Tüm veriler, X-ışını, spektroskopi, kristalografi, NMR vb. gibi deneysel yöntemler kullanılarak toplanır.
Bu makale, PDB'den verilerin nasıl çıkarılacağını, filtreleneceğini ve temizleneceğini açıklar. Bu da, yaşamın farklı alanlarında protein disülfid bağlarının oluşumu: Protein Mühendisliği, Tasarım ve Seçim , Cilt 27, Sayı 3'te yayınlanan Protein Veri Bankasındaki proteinlerin karşılaştırılması makalesinde açıklanan analiz türünü sağlar. 1 Mart 2014, s. 65–72.
PDB, farklı çözünürlükler, yöntemler, mutasyonlar vb. ile çok sayıda tekrar eden yapıya sahiptir. Aynı veya benzer proteinlerle bir deney yapmak, herhangi bir grup analizinde yanlılık üretebilir, bu nedenle herhangi bir kopya kümesi arasından doğru yapıyı seçmemiz gerekecek. . Bu amaçla, yedekli olmayan (NR) bir protein seti kullanmamız gerekir.
Normalleştirme amacıyla, atom adlarını 3NF kullanan veya yıldız şeması ve boyutsal modelleme kullanan bir veritabanına aktarmak için kimyasal bileşik sözlüğünü indirmenizi öneririm. (Sorunlu yapıları ortadan kaldırmaya yardımcı olması için DSSP'yi de kullandım. Bu makalede bunu ele almayacağım, ancak diğer DSSP özelliklerini kullanmadığımı unutmayın.)
Bu araştırmada kullanılan veriler, farklı türlerden alınan en az bir disülfid bağı içeren tek birimli proteinleri içerir. Bir analiz gerçekleştirmek için, tüm disülfid bağları önce alana (arkea, prokaryot, viral, ökaryot veya diğer) ve ayrıca uzunluğa göre ardışık veya ardışık olmayan olarak sınıflandırılır.
Kaynak: Bu makalenin başında belirtildiği gibi Protein Mühendisliği, Tasarım ve Seçimi .
Çıktı
R, SPSS veya başka bir araca giriş yapmaya hazır olmak için, bir analistin bu yapıya sahip bir veritabanı tablosunda olması gereken verilere ihtiyacı olacaktır:
Kolon | Tip | Tanım |
---|---|---|
code | character(4) | Deneme Kimliği (alfanümerik, büyük/küçük harfe duyarlı değildir ve sıfırla başlayamaz) |
title | character varying(1000) | Referans için deneyin başlığı (alan metin biçiminde de olabilir) |
ss_bonds | integer | Seçilen zincirdeki disülfid bağlarının sayısı |
ssbonds_overlap | integer | Örtüşen disülfid bağlarının sayısı |
intra_count | integer | Aynı zincir içinde yapılan bağ sayısı |
sci_name_src | character varying(5000) | Dizinin alındığı organizmanın bilimsel adı |
tax_path | character varying | Linnaean sınıflandırma ağacındaki yol |
src_class | character varying(20) | Üst düzey organizma sınıfı (ökaryot, prokaryot, virüs, arke, diğer) |
has_reactives7 | boolean | Yalnızca ve yalnızca dizi reaktif merkezler içeriyorsa doğrudur |
len_class7 | integer | Set 7'deki dizinin uzunluğu (patlama ile hesaplanan p değeri 10e-7 ile set) |
Malzemeler ve yöntemler
Bu amaca ulaşmak için ilk adım, rcsb.org'dan veri toplamaktır. Bu site, çeşitli formatlarda indirilebilir PDB deney yapıları içerir.
Veriler birden çok biçimde saklansa da, bu örnekte yalnızca biçimlendirilmiş sabit alanla ayrılmış metin biçimi (PDB) kullanılacaktır. PDB metin biçimine bir alternatif, onun XML sürümü olan PDBML'dir, ancak bazen veri analizi için sorunlara neden olabilecek hatalı biçimlendirilmiş atom konumu adlandırma girdileri içerir. Daha eski mmCIF ve diğer biçimler de mevcut olabilir, ancak bunlar bu makalede açıklanmayacaktır.
PDB Formatı
PDB formatı, örneğin SQL sorguları, Java eklentileri veya Perl modülleri tarafından kolayca ayrıştırılabilen, parçalanmış sabit genişlikli bir metin formatıdır. Dosya kapsayıcısındaki her veri türü, uygun etiketle başlayan bir satır olarak temsil edilir; aşağıdaki alt bölümlerde her bir etiket türünü inceleyeceğiz. Satır uzunluğu 80 karakterden az veya buna eşittir, burada bir etiket altı veya daha az karakter artı birlikte sekiz bayt alan bir veya daha fazla boşluk alır. Ayrıca, genellikle CONECT
etiketleri için, etiketler ve veriler arasında boşluk olmayan durumlar da vardır.
TITLE
TITLE
etiketi, molekül adını ve belirli bir amino asidin eklenmesi, mutasyonu veya silinmesi gibi diğer ilgili verileri içeren bir satırı deneyin başlığı (bir parçası) olarak işaretler.
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
Bir TITLE
kaydında birden fazla satır olması durumunda, başlık 9 ve 10 baytlarında (bu satırların sayısına bağlı olarak) sağa hizalanmış bir devam numarasına göre sıralanarak bir araya getirilmelidir.
ATOM
ATOM
satırlarında depolanan veriler, bir deneydeki her atom için koordinat verileridir. Bazen bir deneyde eklemeler, mutasyonlar, alternatif konumlar veya birden çok model bulunur. Bu, aynı atomun birden çok kez tekrarlanmasıyla sonuçlanır. Doğru atomların seçilmesi daha sonra açıklanacaktır.
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
Yukarıdaki örnek 1BAH
deneyinden alınmıştır. İlk sütun kaydın türünü belirtir ve ikinci sütun atomun seri numarasıdır. Bir yapıdaki her atomun kendi seri numarası vardır.
Seri numarasının yanında dört bayt alan atom konumu etiketi bulunur. Bu atom konumundan, kayıt verilerinde her zaman bulunmayan elementin kimyasal sembolünü kendi ayrı sütununda çıkarmak mümkündür.
Atom adından sonra üç harfli bir kalıntı kodu vardır. Proteinler söz konusu olduğunda, bu kalıntı bir amino aside karşılık gelir. Ardından zincir bir harfle kodlanır. Zincir ile, bazen ligandlar bir zincire atanabilse de, boşluklu veya boşluksuz tek bir amino asit zincirini kastediyoruz; bu durum, bir sonraki sütunda yer alan bir amino asit dizisindeki çok büyük boşluklar aracılığıyla saptanabilir. Bazen aynı yapı mutasyonlar dahil edilerek taranabilir, bu durumda ekleme kodu, dizi sütunundan sonra fazladan bir sütunda bulunur. Ekleme kodu, hangi kalıntının etkilendiğini ayırt etmeye yardımcı olacak bir harf içerir.
Sonraki üç sütun, her bir atomun Angstrom (Å) cinsinden ölçülen uzaysal koordinatlarıdır. Bu koordinatların yanında, atomun o yerde olma olasılığının normal sıfırdan bire ölçeğinde ne olduğunu söyleyen doluluk sütunu bulunur.
Son ikinci sütun, Ų cinsinden ölçülen kristaldeki düzensizlik hakkında bilgi taşıyan sıcaklık faktörüdür. 60Ų'den büyük bir değer düzensizliği, 30Ų'den düşük bir değer ise güveni ifade eder. PDB dosyalarında her zaman bulunmaz çünkü deneysel yönteme bağlıdır.
Sonraki sütunlar (sembol ve yük) genellikle eksiktir. Kimyasal sembol, yukarıda bahsettiğimiz gibi atom konumu sütunundan alınabilir. Yük mevcut olduğunda, sembolün sonuna bir tamsayı olarak +
veya -
eklenir, örneğin N1+
.
TER
Bu zincirin sonunu gösterir. Bu çizgi olmadan bile zincirin nerede bittiğini ayırt etmek kolaydır. Bu nedenle, genellikle TER
satırı eksik.
MODEL
ve ENDMDL
MODEL
satırı, bir yapının modelinin başladığı yeri gösterir ve modelin seri numarasını içerir.
O modeldeki tüm atom çizgilerinden sonra bir ENDMDL
çizgisiyle biter.
SSBOND
Bu çizgiler, sistein amino asitleri arasında disülfit bağları içerir. Disülfid bağları diğer kalıntı tiplerinde mevcut olabilir, ancak bu makalede yalnızca amino asitler analiz edilecektir, bu nedenle yalnızca sistein dahildir. Aşağıdaki örnek, 132L
kodlu deneyden alınmıştır:
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
Bu örnekte, dosyada ikinci sütunda sıra numaralarıyla etiketlenmiş dört disülfid bağı vardır. Bu bağların tümü sistein kullanır (3. ve 6. sütunlar) ve hepsi A
zincirinde (4. ve 7. sütunlar) bulunur. Her zincirden sonra, bağın peptit zincirindeki konumunu gösteren bir kalıntı sıra numarası vardır. Ekleme kodları, her kalıntı dizisinin yanındadır, ancak bu örnekte, o bölgeye yerleştirilmiş amino asit olmadığı için mevcut değildirler. Son sütundan önceki iki sütun simetri işlemleri için ayrılmıştır ve son sütun, Å cinsinden ölçülen kükürt atomları arasındaki mesafedir.
Bu verilere biraz bağlam vermek için bir dakikanızı ayıralım.
Aşağıdaki resimler rcsb.org NGL görüntüleyici kullanılarak çekilmiştir ve 132L
deneyinin yapısını göstermektedir. Özellikle ligand içermeyen bir protein gösterirler. İlk resim, kükürtleri ve bağlarını sarı renkte gösteren CPK rengiyle bir çubuk gösterimi kullanır. V şeklindeki kükürt bağlantıları metiyonin bağlantılarını temsil ederken, Z şeklindeki bağlantılar sisteinler arasındaki disülfid bağlarıdır.
Bir sonraki resimde, omurga görselleştirme adı verilen basitleştirilmiş bir protein görselleştirme yöntemi, sisteinlerin sarı olduğu amino asitlerle renklendirilmiş olarak gösterilmektedir. Yan zinciri hariç tutularak aynı proteini temsil eder ve peptit grubunun yalnızca bir kısmını içerir - bu durumda protein omurgası. Üç atomdan oluşur: N-terminali, C-alfa ve C-terminali. Bu resim disülfit bağlarını göstermiyor, ancak proteinin uzamsal düzenini göstermek için basitleştirildi:
Borular, peptit bağlı atomların bir C-alfa atomu ile birleştirilmesiyle oluşturulur. Sisteinin rengi, CPK boyama yönteminde kükürtün rengiyle aynıdır. Sistenler yeterince yakına geldiklerinde kükürtleri disülfit bağları oluşturur ve bu yapıyı güçlendirir. Aksi takdirde bu protein çok fazla bağlanır ve yapısı daha yüksek sıcaklıklarda daha az kararlı olur.
CONECT
Bu kayıtlar, atomlar arasındaki bağlantıları etiketlemek için kullanılır. Bazen bu etiketler hiç bulunmazken, diğer zamanlarda tüm veriler doldurulur. Disülfit bağlarının analiz edilmesi durumunda, bu kısım yararlı olabilir - ancak gerekli değildir. Bunun nedeni, bu projede, mesafeler ölçülerek etiketlenmemiş tahviller eklendiğinden, bu ek yük olur ve ayrıca kontrol edilmesi gerekir.
SOURCE
Bu kayıtlar, molekülün çıkarıldığı kaynak organizma hakkında bilgi içerir. Taksonomide daha kolay konum için alt kayıtlar içerirler ve başlık kayıtlarında gördüğümüz çok satırlı yapıya sahiptirler.
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 Biçimi
Bu, yedekli olmayan (NR) zincir PDB kümelerinin bir listesidir. Anlık görüntüleri ftp.ncbi.nih.gov/mmdb/nrtable/ adresinde bulunabilir. Amacı, protein benzerliğinden kaynaklanan gereksiz önyargılardan kaçınmaktır. NR, tüm PDB yapılarının karşılaştırılmasıyla oluşturulan farklı kimlik p-değer seviyelerine sahip üç kümeye sahiptir. Sonuç, daha sonra açıklanacak olan metin dosyalarına eklenir. Bu proje için tüm sütunlar gerekli değildir, bu nedenle sadece önemli olanlar açıklanacaktır.
İlk iki sütun, benzersiz PDB deney kodunu ve yukarıda ATOM
kayıtları için açıklandığı gibi zincir tanımlayıcıyı içerir. Sütun 6, 9 ve C, BLAST tarafından hesaplanan dizilerin benzerlik düzeyi olan p-değeri temsili hakkında bilgi içerir. Bu değer sıfır ise bir kümenin parçası olarak kabul edilmez; değer 1 ise, öyledir. Bahsedilen sütunlar, sırasıyla 10e-7, 10e-40 ve 10e-80 p-değeri eşikleri olan kümelerin kabulünü temsil eder. Analiz için yalnızca 10e-7'lik bir p değeri kesme değerine sahip setler kullanılacaktır.
Son sütun, bir yapının kabul edilebilirliği hakkında bilgi içerir; burada a
kabul edilebilir ve n
değildir.
#--------------------------------------------------------------------------------------------------------------------------- # 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
Veritabanı Oluşturma ve Verileri Ayrıştırma
Artık neyle uğraştığımız ve ne yapmamız gerektiğine dair bir fikrimiz olduğuna göre, başlayalım.
Veri İndirme
Bu analiz için tüm veriler şu üç adreste bulunabilir:
- ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/
- ftp.ncbi.nih.gov/mmdb/nrtable/
- ftp.ncbi.nih.gov/pub/taxonomy/taxdmp.zip
İlk iki bağlantı bir arşiv listesi içerir. Çözünürlük veya kalite eksikliğinden kaynaklanan sorunları önlemek için her birinin en son arşivi kullanılmalıdır. Üçüncü bağlantı, doğrudan en yeni sınıflandırma arşivini içerir.
Verileri Ayrıştırma
Genellikle PDB dosyalarının ayrıştırılması Java, Perl veya Python'daki eklentiler veya modüller tarafından yapılır. Bu araştırma durumunda, önceden yazılmış bir PDB ayrıştırma modülü kullanmadan özel bir Perl uygulaması yazdım. Bunun nedeni, büyük miktarda veriyi ayrıştırırken, deneyimlerime göre, deneysel verilerin kullanılmasıyla ilgili en yaygın sorun verilerdeki hatalardır. Bazen koordinatlarda, mesafelerde, satır uzunluklarında, olmaması gereken yerlerde yorumlarda vs. hatalar olabiliyor.
Bununla başa çıkmanın en etkili yolu, başlangıçta her şeyi veritabanında ham metin olarak saklamaktır. Ortak ayrıştırıcılar, spesifikasyonlara tamamen uyan ideal verilerle başa çıkmak için yazılmıştır. Ancak pratikte veriler ideal değildir ve bu, Perl içe aktarma komut dosyasını bulacağınız filtreleme bölümünde açıklanacaktır.
Veritabanı Yapısı
Veritabanını oluştururken, bu veritabanının veri işlemek için oluşturulduğunu unutmayın. Daha sonra analiz SPSS veya R'de yapılacaktır. Buradaki amaçlarımız için PostgreSQL'in en az 8.4 sürümü ile kullanılması önerilir.
Tablo yapısı, sadece birkaç küçük değişiklikle indirilen dosyalardan doğrudan kopyalanır. Bu durumda, kayıtların sayısı normalleşme için zamanımızı harcamaya değmeyecek kadar küçüktür. Belirtildiği gibi, bu veritabanı yalnızca tek kullanımlıktır: Bu tablolar bir web sitesinde sunulmak üzere oluşturulmamıştır; yalnızca veri işlemek için oradadırlar. Bu bittiğinde, belki başka bir araştırmacı tarafından süreci tekrarlamak için ek veri olarak atılabilirler veya yedeklenebilirler.
Bu durumda nihai sonuç, daha sonra SPSS veya R gibi bazı istatistiksel araçlarla kullanılmak üzere bir dosyaya aktarılabilen bir tablo olacaktır.
tablolar
ATOM
kayıtlarından veri çıkarımı, HEADER
veya TITLE
kayıtlarına bağlanmalıdır. Veri hiyerarşisi aşağıdaki resimde açıklanmıştır.
Bu resim, üçüncü normal formda (3NF) bir veritabanının basitleştirilmiş bir temsili olduğundan, amaçlarımız için çok fazla ek yük içermektedir. Sebep: Disülfit bağı tespiti için atomlar arasındaki mesafeyi hesaplamak için birleştirme yapmamız gerekir. Bu durumda, iki kez kendisine birleştirilmiş bir tablomuz olurdu ve ayrıca her biri iki kez ikincil ve birincil bir yapıya katıldı, bu çok yavaş bir süreç. Her analiz ikincil yapı bilgisine ihtiyaç duymadığından, verileri yeniden kullanmanız veya daha büyük miktarlarda disülfit bağlarını analiz etmeniz gerektiğinde başka bir şema önerilir:
Disülfid bağları, diğer kovalent bağlar kadar sık değildir, bu nedenle kullanılabilmesine rağmen bir depo modeline gerek yoktur. Aşağıdaki yıldız şeması ve boyutlu modellemenin geliştirilmesi çok zaman alacak ve sorguları daha karmaşık hale getirecektir:
Tüm bağların işlenmesi gerektiği durumlarda yıldız şemasını öneririm.
(Aksi takdirde gerekli değildir, çünkü disülfit bağları diğer bağlar kadar yaygın değildir. Bu çalışma durumunda, disülfid bağlarının sayısı 30.000'e yakındır, bu 3NF'de yeterince hızlı olabilir, ancak bunu üzerinden işlemeye karar verdim. normalleştirilmemiş bir tablo, bu yüzden burada gösterilmemiştir.)
Tüm kovalent bağların beklenen toplam sayısı, üçüncül yapıdaki atom sayısının en az iki katıdır ve bu durumda 3NF çok yavaş olacaktır, bu nedenle yıldız şeması formunu kullanarak denormalizasyon gereklidir. Bu şemada, bazı tablolarda iki yabancı anahtar denetimi vardır ve bunun nedeni iki atom arasında bir bağ oluşturulmasıdır, bu nedenle her atomun kendi atom_name_id
primary_structure_id
residue_id
.
d_atom_name
boyut tablosunu doldurmanın iki yolu vardır: verilerden ve başka bir kaynaktan, daha önce bahsettiğim kimyasal bileşen sözlüğü. Formatı PDB formatına benzer: Yalnızca RESIDUE
ve CONECT
satırları kullanışlıdır. Bunun nedeni, RESIDUE
ilk sütununun üç harfli bir kalıntı kodu içermesi ve CONECT
atomun adını ve yine atom adları olan bağlantılarını içermesidir. Yani bu dosyadan, tüm atom isimlerini ayrıştırabilir ve onları veritabanımıza dahil edebiliriz, ancak veritabanının listelenmemiş atom isimleri içerme olasılığına izin vermenizi tavsiye ederim.
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
Bu projede, kodlama hızı, yürütme hızından ve depolama tüketiminden daha önemlidir. Normalleştirmemeye karar verdim - sonuçta amacımız girişte belirtilen sütunlarla bir tablo oluşturmak.
Bu bölümde sadece en önemli tablolar açıklanacaktır.
Ana tablolar şunlardır:
-
proteins
: Deney adlarını ve kodlarını içeren tablo. -
ps
:sequence
,chain_id
vecode
içerecek olan birincil yapı tablosu. -
ts
: Ham verilerden çıkarılan veATOM
kayıt formatına dönüştürülmüş üçüncül/dörtlü yapıyı içeren tablo. Bu bir evreleme tablosu olarak kullanılacaktır ve çıkarıldıktan sonra bırakılabilir. Ligandlar hariçtir. -
sources
: Deneysel verilerin elde edildiği organizmaların listesi. -
tax_names
,taxonomy_path
,taxonomy_paths
:sources
listelenen organizmalardan taksonomi yollarını almak için kullanılan NCBI taksonomi veri tabanından Linnean taksonomi adları. -
nr
: NR setinden ekstrakte edilen NCBI yedekli olmayan proteinlerin listesi. -
pdb_ssbond
: Belirli bir PDB dosyasındaki disülfit bağlarının listesi.
Verileri Filtreleme ve İşleme
Veriler, RCSB PDB deposundaki anlık görüntülerden alınır.
Her dosya, bir Perl betiği kullanılarak PostgreSQL veritabanımızda tek bir raw_pdb
tablosuna aktarılır. Komut dosyası, yığın başına 10.000 ekleme işlemi kullanır.
raw_pdb
yapısı şudur:
Kolon | Tip | değiştiriciler |
---|---|---|
kod | karakter değişen(20) | geçersiz değil |
satır_sayısı | tam sayı | geçersiz değil |
line_cont | karakter değişen(80) | geçersiz değil |
İçe aktarma komut dosyası şöyle görünür:
#!/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;
Satırlar içe aktarıldıktan sonra aşağıda tanımlayacağımız fonksiyonlar kullanılarak ayrıştırılır.

raw_pdb
verilerinden, karşılık gelen kayıtları ayrıştırarak ts
, ps
, proteins
, sources_organela
, ss_bond
sources
oluştururuz.
ps
tablosunun üç önemli sütunu vardır: chain
, length
ve sequence
. Protein dizisi, her zincir için ve kalıntı dizisine göre sıralanan her kalıntı için C-alfa atomları kullanılarak üretilir, yalnızca ilk ekleme ve ilk alternatif konum alınır. chain
, TS.chain
sütunundan alınır ve length
, sequence
önceden hesaplanmış uzunluğudur. Bu makale yalnızca tek zincirleri ve zincir içi bağlantıları analiz etmeyi amaçladığından, buradaki analizimizde çok zincirli proteinler atlanmıştır.
SSBOND
kayıtları içinde, tüm disülfit bağları, pdb_ssbond
tablosundan miras alınan pdb_ssbond_extended
tablosunda depolanır. pdb_ssbond
şöyle görünür:
Kolon | Tip | Null yapılabilir | Varsayılan | Tanım |
---|---|---|---|---|
İD | tam sayı | geçersiz değil | nextval('pdb_ssbond_id_seq'::regclass) | |
kod | karakter(4) | dört harfli kod | ||
ser_num | tam sayı | ssbond seri numarası | ||
kalıntı1 | karakter(3) | bağdaki ilk kalıntı | ||
zincir_id1 | karakter(1) | bağdaki ilk zincir | ||
res_seq1 | tam sayı | ilk kalıntının sıralı sayısı | ||
i_code1 | karakter(1) | ilk kalıntının ekleme kodu | ||
kalıntı2 | karakter(3) | bağdaki ikinci kalıntı | ||
zincir_id2 | karakter(1) | bağdaki ikinci zincir | ||
res_seq2 | tam sayı | ikinci kalıntının sıralı sayısı | ||
i_code2 | karakter(1) | ikinci kalıntının ekleme kodu | ||
sym1 | karakter(6) | ilk simetri operatörü | ||
sym2 | karakter(6) | ikinci simetri operatörü | ||
uzak | sayısal(5,2) | atomlar arasındaki mesafe | ||
is_reaktif | boole | geçersiz değil | YANLIŞ | reaktivite işareti (ayarlanacak) |
is_consecutive | boole | geçersiz değil | doğru | ardışık tahviller için işaret (ayarlanacak) |
rep7 | boole | geçersiz değil | YANLIŞ | set-7 yapıları için işaret (ayarlanacak) |
rep40 | boole | geçersiz değil | YANLIŞ | set-40 yapıları için işaret (ayarlanacak) |
rep80 | boole | geçersiz değil | YANLIŞ | set-80 yapıları için işaret (ayarlanacak) |
is_from_pdb | boole | doğru | kaynak olarak PDB'den alınır (ayarlanacak) |
Bu dizinleri de ekledim:
"pdb_ssbond_pkey" PRIMARY KEY, btree (id) "ndxcode1" btree (code, chain_id1, res_seq1) "ndxcode2" btree (code, chain_id2, res_seq2)
Kesimden önce disülfid bağlarının dağılımının Gauss olduğu varsayılır (örneğin, KS testi ile test edilmeden), bu nedenle izin verilen bağ uzunlukları aralığını keşfetmek ve bunları karşılaştırmak için aynı proteindeki sisteinler arasındaki her mesafede standart sapmalar hesaplandı. kesmeye. Kesinti, hesaplanan ortalama artı eksi üç standart sapma ile aynıydı. SSBOND
satırlarında PDB dosyasında listelenmeyen ancak ATOM
kayıtları arasındaki mesafeleri hesaplayarak kendimize eklediğimiz daha olası disülfid bağlarını tanıtmak için aralığı genişlettik. Ssbondlar için seçilen aralık, ssbonds
ile 2.48801947642267 Å arasındadır; bu, ortalama (2.05) artı-eksi dört standart sapmadır:
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
tablosu tüm atomların koordinatlarını içerir, ancak yalnızca kükürtleri " SG "
olarak adlandırılan sisteinler kullanılacaktır. Böylece, aranacak kayıt sayısını azaltarak süreci hızlandırmak için yalnızca " SG "
kükürt atomlu başka bir evreleme tablosu oluşturulur. Yalnızca kükürtleri seçerken, kombinasyon sayısı tüm atomlar durumunda olduğundan çok daha azdır - birincisinin 194.574'ü, ikincisinin 122.761.100'ü ile karşılaştırıldığında. Kendi kendine birleştirilen bu tabloda, mesafeler Öklid mesafesi kullanılarak hesaplanır ve sonuçlar pdb_ssbond
tablosuna alınır, ancak yalnızca mesafenin daha önce hesaplanan tanımlanmış uzunluklar arasında olduğu durumlarda. Bu hızlandırmayı yapmanın nedeni, tüm süreci yeniden çalıştırma süresini - kontrol amacıyla - bir gün içinde tutmak için azaltmaktır.
Disülfit bağlarını temizlemek için aşağıdaki algoritmayı kullanırız:
- Bağlantının her iki tarafı da aynı amino aside işaret ettiğinde silin
- Uzunluğu 1.617534456264 ile 2.48801947642267 arasında olmayan bağları silin
- Eklemeleri kaldır
- Alternatif atom konumlarının neden olduğu bağları kaldırın, ancak ilk konumu bırakın
Bunun kodu (ilk argüman olarak pdb_ssbond
tablosunu alarak):
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;
Bununla, gereksiz protein seti, ps
ve proteins
tablolarına birleştirilen nr
tablosuna aktarılır ve setler işaretlenir ( set7
, set40
ve set80
). Sonunda, protein miktarına göre sadece bir set analiz edilecektir. PDB ve NR arasındaki uyumsuz zincirler analizden çıkarılır.
Disülfid bağları olmayan proteinler, herhangi bir kümeye ait olmayan proteinlerle birlikte araştırma dışı bırakılır. Veriler DSSP ile işlenir ve çözünürlükte sorun yaşayan veya işlenemeyecek kadar çok atom içeren bu dosyalar da hariç tutulur. Farklı zincirlere sahip bağlantıların sayısı sayılarak ssbond
tablosundan kolayca hesaplansa da, zincirler arası bağlantılar korunmadığından analiz için sonuç olarak sadece tek zincirli proteinler kullanılır.
Kalan proteinler için, toplam bağ sayısı ve örtüşen bağ sayısı için bir güncelleme yapılır ve bu, her bir küme için yapılır.
Kaynak organizma, SOURCE
kayıtlarından çıkarılır. Bilinmeyen, sentetik, tasarlanmış, yapay veya hibrit olmadığı durumlarda araştırmadan çıkarılır. Düşük çözünürlüklü proteinler de yalnızca yan zincirleri görünür olmadığında hariç tutulur.
SOURCE
kayıtları, sınıflandırma satırlarını içeren sources
tablosunda saklanır. Bazı durumlarda, sınıflandırma eksik veya yanlıştır. Bu durumlarda, uzmanların manuel olarak düzeltilmesi gerekir.
NCBI'den indirilen kaynak ve sınıflandırmadan, sınıf her bir birincil yapıya atanır. Bir sınıfın atanamaması durumunda protein, analiz listesinden çıkarılır. Biyolojik veritabanlarının kullanıldığını bilerek, tüm kaynak kayıtlarının ve NCBI sınıflandırma sınıflarının bir biyolog tarafından ekstra kontrolünün yapılması önerilir, aksi takdirde farklı alanlar arasında sınıflandırmalarda sorunlar olabilir. Kaynak hücresel konumlarını sınıflandırma kimlikleriyle eşleştirmek için, kaynak tablodaki veriler, tüm verilerin kod, etiket ve değer olarak yazıldığı Resources_organela tablosuna sources_organela
. Biçimi aşağıda gösterilmiştir:
select * from sources_organela where code = '1rav';
kod | mol_id | etiket | val |
---|---|---|---|
1rav | 0 | MOL_ID | 1 |
1rav | 7 | HÜCRE_LOCATION | SİTOPLAZMA (BEYAZ) |
Kullanmak istediğimiz sınıflandırma arşivi, yedi döküm dosyası içeren bir ZIP dosyasıdır. Bu dosyalar arasında en önemlilerinden ikisi names.dmp
ve merged.dmp
. Her iki dosya da belgelerde ayrıntılı olarak açıklandığı gibi CSV sekmesi ile ayrılmış dosyalardır:
-
merged.dmp
dosyası, önceki sınıflandırma kimliklerinin bir listesini ve her birinin birleştirildiği mevcut sınıflandırma kimliklerini içerir. -
names.dmp
bu önemli sütunları şu sırayla içerir:-
tax_id
: Sınıflandırma kimliği -
name_txt
: Türün adı ve varsa benzersiz adı (türlerin birden fazla adla bulunabildiği durumlarda bu, belirsizliğin giderilmesine yardımcı olur)
-
-
division.dmp
, sınıflarımız olarak kullanacağımız üst düzey alan adlarını içerir. -
nodes.dmp
, sınıflandırma kimliklerini kullanan organizmaların hiyerarşik yapısını içeren tablodur.- Bir üst sınıflandırma kimliği,
names.dmp
içinde bulunabilen bir yabancı anahtar içerir. - Ayrıca, ilgili üst alan verilerini doğru bir şekilde depolamamız için önemli olan bir bölüm kimliği içerir.
- Bir üst sınıflandırma kimliği,
Tüm bu veriler ve manuel düzeltmelerle (yaşamın doğru alanlarını ayarlayarak) taxonomy_path
tablosunun yapısını oluşturabildik. Bir veri örneklemesi şöyle görünür:
select * from taxonomy_path order by length(path) limit 20 offset 2000;
vergi numarası | yol | is_viral | is_ökaryot | is_archaea | is_other | is_prokaryot |
---|---|---|---|---|---|---|
142182 | hücresel organizmalar; Bakteriler; Gemmatimonadetes | F | F | F | F | T |
136087 | hücresel organizmalar; Eukaryota; Malawimonadidae | F | T | F | F | F |
649454 | Virüsler; sınıflandırılmamış fajlar; Siyanofaj G1168 | T | F | F | F | F |
321302 | Virüsler; sınıflandırılmamış virüsler; Tellina virüsü 1 | T | F | F | F | F |
649453 | Virüsler; sınıflandırılmamış fajlar; Siyanofaj G1158 | T | F | F | F | F |
536461 | Virüsler; sınıflandırılmamış fajlar; Siyanofaj S-SM1 | T | F | F | F | F |
536462 | Virüsler; sınıflandırılmamış fajlar; Siyanofaj S-SM2 | T | F | F | F | F |
77041 | Virüsler;sınıflandırılmamış virüsler;Gizli virüs 4 | T | F | F | F | F |
77042 | Virüsler; sınıflandırılmamış virüsler; Gizli virüs 5 | T | F | F | F | F |
641835 | Virüsler; sınıflandırılmamış fajlar; Vibrio faj 512 | T | F | F | F | F |
1074427 | Virüsler;sınıflandırılmamış virüsler;Mouse Rosavirus | T | F | F | F | F |
1074428 | Virüsler;sınıflandırılmamış virüsler;Mouse Mosavirus | T | F | F | F | F |
480920 | diğer diziler;plazmitler;IncP-1 plazmit 6-S1 | F | F | F | T | F |
2441 | other sequences;plasmids;Plasmid ColBM-Cl139 | F | F | F | T | F |
168317 | other sequences;plasmids;IncQ plasmid pIE723 | F | F | F | T | F |
536472 | Viruses;unclassified phages;Cyanophage Syn10 | T | F | F | F | F |
536474 | Viruses;unclassified phages;Cyanophage Syn30 | T | F | F | F | F |
2407 | other sequences;transposons;Transposon Tn501 | F | F | F | T | F |
227307 | Viruses;ssDNA viruses;Circoviridae;Gyrovirus | T | F | F | F | F |
687247 | Viruses;unclassified phages;Cyanophage ZQS-7 | T | F | F | F | F |
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 kodu | Toplam SS-bağ sayısı | Ardışık olmayan SS bağlarının sayısı | PDB uzunluğu / amino asitler | İhtisas | HedefP 1.1 | TatP 1.0 | SinyalP 4.1 | KloroP 1.1 | TMHMM 2.0 transmembran etki alanı sayısı | büyük pi | NucPred | NetNES 1.1 | PSORTb v3.0 | SecretomeP 2.0 | LocTree2 | Konsensüs yerelleştirme tahmini |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1akp | 2 | 0 | 114 | bakteri | ND | Tat sinyali | sinyal peptidi yok | ND | 0 | ND | ND | ND | Bilinmeyen | ND | fimbrium | Bilinmeyen |
1bhu | 2 | 0 | 102 | bakteri | ND | Tat sinyali | sinyal peptidi | ND | 1 | ND | ND | ND | Bilinmeyen | ND | salgılanmış | Bilinmeyen |
1c75 | 0 | 0 | 71 | bakteri | ND | Tat sinyali | sinyal peptidi yok | ND | 0 | ND | ND | ND | Sitoplazmik membran | klasik olmayan salgı | periplazma | Bilinmeyen |
1c8x | 0 | 0 | 265 | bakteri | ND | Tat sinyali | sinyal peptidi | ND | 1 | ND | ND | ND | Bilinmeyen | ND | salgılanmış | Bilinmeyen |
1cx1 | 1 | 0 | 153 | bakteri | ND | Tat sinyali | sinyal peptidi | ND | 1 | ND | ND | ND | hücre dışı | ND | salgılanmış | Bilinmeyen |
1dab | 0 | 0 | 539 | bakteri | ND | Tat sinyali | sinyal peptidi | ND | 0 | ND | ND | ND | dış zar | ND | dış zar | Bilinmeyen |
1dfu | 0 | 0 | 94 | bakteri | ND | Tat sinyali | sinyal peptidi yok | ND | 0 | ND | ND | ND | sitoplazmik | ND | sitozol | Bilinmeyen |
1e8r | 2 | 2 | 50 | bakteri | ND | Tat sinyali | sinyal peptidi | ND | 0 | ND | ND | ND | Bilinmeyen | ND | salgılanmış | salgılanmış |
1esc | 3 | 0 | 302 | bakteri | ND | Tat sinyali | sinyal peptidi | ND | 1 | ND | ND | ND | hücre dışı | ND | periplazma | Bilinmeyen |
1g6e | 1 | 0 | 87 | bakteri | ND | Tat sinyali | sinyal peptidi | ND | 1 | ND | ND | ND | Bilinmeyen | ND | salgılanmış | Bilinmeyen |
İşlem Aracısı Olarak PostgreSQL
Bu çalışmada, getirmeden analiz etmeye kadar verilerin nasıl işleneceğini gösterdik. Bilimsel verilerle çalışırken bazen normalleştirmeye ihtiyaç duyulur, bazen de gerekmez. Başka bir analiz için tekrar kullanılmayacak olan küçük miktarlardaki verilerle çalışırken, işlemenin yeterince hızlı olduğu yerde denormalize bırakılması yeterlidir.
Bunun tek bir biyoinformatik veritabanında yapılmasının nedeni, PostgreSQL'in birçok dili entegre edebilmesidir. Bu, biyoinformatik araçlar hakkında gelecekteki bir makalenin konusu olan doğrudan veritabanında istatistiksel analiz yapabilen R'yi içerir.
Toptal meslektaşları Stefan Fuchs ve Aldo Zelen'e paha biçilmez istişareleri için özel teşekkürler.