Skip to main content

MUSCLE Multiple Sequence Alignment - Educational Implementation

Project description

FatihMSA — Çoklu Dizi Hizalaması

MUSCLE (Multiple Sequence Comparison by Log-Expectation) algoritmasının Python ile yazılmış eğitim amaçlı implementasyonu. K-mer tabanlı mesafe hesaplama, UPGMA rehber ağaç ve Needleman-Wunsch dinamik programlaması kullanarak N diziyi hizalar.


Kurulum

pip install FatihMSA-221201001

Ya da geliştirici modunda (kaynak koddan):

git clone <repo-url>
cd FatihMSA
pip install -e .

Hızlı Kullanım

Python API

from fatihmsa import run_muscle, read_fasta, write_fasta, sequences_to_list

# Ham string listesiyle
sequences = ["ATCGATCG", "ATCGTTCG", "GCTAGCTA", "GCTAACTA"]
aligned = run_muscle(sequences)

for i, seq in enumerate(aligned):
    print(f"Dizi {i}: {seq}")

# FASTA dosyasından
fasta = read_fasta("input.fasta")
ids, seqs = sequences_to_list(fasta)
aligned = run_muscle(seqs)

# Sonucu FASTA olarak kaydet
write_fasta(dict(zip(ids, aligned)), "output.fasta")

Komut Satırı (CLI)

# Sonucu ekrana yaz
fatihmsa input.fasta

# Dosyaya yaz
fatihmsa input.fasta -o output.fasta

# Adım adım ilerlemeyi göster
fatihmsa input.fasta -o output.fasta -v

Yardım:

fatihmsa --help

Algoritma

FatihMSA, MUSCLE algoritmasının üç aşamalı yapısını takip eder:

Aşama 1 — Taslak Hizalama

  1. K-mer mesafesi: Her dizi çifti için 3-mer kümeleri çıkarılır, Jaccard uzaklığı hesaplanır:

    dist(i, j) = 1 - |kmers(i) ∩ kmers(j)| / |kmers(i) ∪ kmers(j)|
    
  2. UPGMA rehber ağaç: Mesafe matrisinden hiyerarşik kümeleme yapılır. Her adımda en yakın iki küme average-linkage formülüyle birleştirilir:

    dist(new, k) = (dist(i,k) × size_i + dist(j,k) × size_j) / (size_i + size_j)
    

    Çıktı Newick formatında bir ağaç stringidir, örneğin:

    ((0:0.357,1:0.357):0.500,(2:0.357,3:0.357):0.500);
    
  3. Progresif hizalama: UPGMA'nın belirlediği merge sırasına göre diziler sırayla hizalanır:

    • Dizi + Dizi → Needleman-Wunsch global hizalama
    • Dizi + Profil → Profil-dizi hizalama
    • Profil + Profil → Profil-profil hizalama

Aşama 2 — İyileştirme

Taslak hizalamadan elde edilen profiller üzerinden mesafe matrisi yeniden hesaplanır, rehber ağaç güncellenir ve hizalama tekrarlanır. Bu aşama, ilk taslaktaki hataları düzeltmeye yöneliktir.

Not: Bu implementasyonda aşama 2 basitleştirilmiş biçimde uygulanmıştır.

Aşama 3 — Rafine Etme

Profil-profil hizalama kullanılarak hizalanmış sütunlar yeniden değerlendirilir. Her sütun, karakter frekanslarından oluşan bir vektördür:

# Örnek profil sütunu
{'A': 0.5, 'G': 0.25, '-': 0.25}

İki profil sütunu arasındaki skor ağırlıklı ortalama ile hesaplanır:

match_score(col1, col2) = Σ freq1[c1] × freq2[c2] × score(c1, c2)

Puanlama Parametreleri

Durum Skor
Eşleşme +1
Uyumsuzluk −1
Boşluk (gap) −2

Parametreler needleman_wunsch() fonksiyonu üzerinden özelleştirilebilir:

from fatihmsa.align import needleman_wunsch
a1, a2 = needleman_wunsch("ATCG", "ATTG", match=2, mismatch=-1, gap=-3)

Desteklenen Formatlar

Ham String Listesi

sequences = ["ATCGATCG", "GCTAGCTA"]
aligned = run_muscle(sequences)
  • Büyük/küçük harf fark etmez (otomatik büyük harfe çevrilir)
  • Geçerli karakterler: A, T, C, G, N

FASTA Formatı

>seq1
ATCGATCG
>seq2
ATCGTTCG
>seq3
GCTAGCTA

Dosyadan veya doğrudan string olarak okunabilir:

from fatihmsa import read_fasta

# Dosyadan
fasta = read_fasta("input.fasta")

# Doğrudan string
fasta = read_fasta(">seq1\nATCGATCG\n>seq2\nATCGTTCG\n")

Proje Yapısı

FatihMSA/
├── fatihmsa/
│   ├── __init__.py      # Dışa aktarılan fonksiyonlar
│   ├── align.py         # Needleman-Wunsch global hizalama
│   ├── cli.py           # Komut satırı arayüzü (argparse)
│   ├── distance.py      # K-mer mesafesi + UPGMA rehber ağaç
│   ├── io.py            # FASTA okuma/yazma
│   └── main.py          # Progresif MSA orkestratörü
├── tests/
│   ├── test_align.py    # Hizalama testleri
│   ├── test_distance.py # Mesafe ve UPGMA testleri
│   └── test_main.py     # Uçtan uca MSA testleri
├── pyproject.toml
├── setup.py
└── README.md

Testleri çalıştırmak için:

pytest tests/ -v

Geliştirici

Alan Bilgi
Ad Soyad Fatih Yilmazer
Öğrenci No 221201001
Ders Biyoinformatik
Paket Adı FatihMSA-221201001
Versiyon 1.0.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fatihmsa_221201001-1.1.0.tar.gz (12.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fatihmsa_221201001-1.1.0-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file fatihmsa_221201001-1.1.0.tar.gz.

File metadata

  • Download URL: fatihmsa_221201001-1.1.0.tar.gz
  • Upload date:
  • Size: 12.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for fatihmsa_221201001-1.1.0.tar.gz
Algorithm Hash digest
SHA256 a13125aa780f0ed2ee8fd1e60a3cc00353fb5ec62004c98f0d67376ffd9a1cc4
MD5 4d6e266ff81748162763970d6794bf95
BLAKE2b-256 84f25ddd219adc9d557a0fcc663dc46947cb8ec0278297f655af8310643da9a2

See more details on using hashes here.

File details

Details for the file fatihmsa_221201001-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for fatihmsa_221201001-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0edf1c46d35fc31bc4f0dbe83331a607a25e7d23155c1a3a30b6e4eb5f70c3e4
MD5 9f2775f3ec6c57aa4bdb0044b2f8c6bd
BLAKE2b-256 594530d672a332818860486f4e78f79263cf9da85febbb2b5bf8050cf86e9504

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page