Disülfid Bağları Araştırması için Biyoinformatik Veritabanı Geliştirme

Yayınlanan: 2022-03-11

Protein 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.

Birincil ve üçüncül protein yapıları

Protein katlanmasından önce ve sonra birincil ve üçüncül protein yapıları.
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.

Sarı renkte kükürt disülfid bağlarını gösteren CPK renklendirmeli çubuk gösterimi

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:

Sisteinlerin sarı olduğu amino asitlerle renklendirilmiş basitleştirilmiş protein omurgası

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.

Üçüncü normal formda bir veritabanı ile sonuçlanacak olan disülfid bağı verilerinin doğal hiyerarşisi

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:

İkincil yapıları (3NF) kullanmayan bir veritabanı şemasının daha ayrıntılı bir modeli

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:

Yıldız şemasını ve boyutlu modellemeyi kullanan veritabanı düzeni

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 ve code içerecek olan birincil yapı tablosu.
  • ts : Ham verilerden çıkarılan ve ATOM 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.

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.