Ref :
의생명정보알고리즘 강의 / 첨단바이오공학부 김재범 교수님
🔁 전체 구현 흐름 요약 (화이트보드 기반 순서)
단계 설명
1️⃣ | sys 모듈로 프로그램 인자 받기 |
2️⃣ | 점수 (int), 서열 (str)로 데이터 구조 정의 |
3️⃣ | for 루프 사용해 각 문자를 비교 |
4️⃣ | 점수 규칙에 따라 누적 |
5️⃣ | 최종 점수 출력 (print(ascore)) |
💻 Pairwise Alignment 점수 계산 프로그램 실습 총정리 🧬
🗂️ 1. 작업 폴더 생성 및 이동
cd ~ # 홈 디렉토리로 이동
mkdir PA2025 # 실습용 폴더 생성
cd PA2025 # 해당 폴더로 이동
📝 2. Python 파일 작성 – parg.py
▶ 코드 작성
vi parg.py # vi 편집기로 파일 열기
#!/usr/bin/env python3
import sys # 인자 입력 받기 위해 사용
match = int(sys.argv[1]) # 일치 점수
mismatch = int(sys.argv[2]) # 불일치 점수
gap = int(sys.argv[3]) # 갭 점수
arow1 = sys.argv[4] # 첫 번째 시퀀스
arow2 = sys.argv[5] # 두 번째 시퀀스
print(match, mismatch, gap, arow1, arow2)
▶ 저장 방법
- i → 입력
- 코드 작성 후 ESC → :wq로 저장 & 종료
🔐 3. 실행 권한 부여
chmod +x parg.py
▶️ 4. parg.py 실행 테스트
- ❌ 인자 없이 실행 (오류 발생)
./parg.py
# IndexError 발생
- ✅ 올바른 실행
./parg.py 2 1 -1 AATCTATA AAG-AT-A
# 출력: 2 1 -1 AATCTATA AAG-AT-A
🔁 5. 반복문 연습 파일 작성 – loop.py
▶ 코드 작성
vi loop.py
#!/usr/bin/env python3
arow1 = "ACT" # 첫 번째 시퀀스
arow2 = "A-T" # 두 번째 시퀀스
for i in range(len(arow1)):
nt1 = arow1[i]
nt2 = arow2[i]
print(nt1, nt2)
🔐 6. loop.py 실행 권한 부여 및 실행
chmod +x loop.py
./loop.py
🔐 7. 실습 파일 작성 – P6.py
▶ 코드 작성
vi P6.py
#!/usr/bin/env python3
import sys
match = int(sys.argv[1])
mismatch = int(sys.argv[2])
gap = int(sys.argv[3])
arow1 = sys.argv[4]
arow2 = sys.argv[5]
ascore = 0
for i in range(len(arow1)):
nt1 = arow1[i]
nt2 = arow2[i]
if nt1 == nt2:
ascore += match
elif nt1 == '-' or nt2 == '-':
ascore += gap
else:
ascore += mismatch
print(ascore)
▶️ 8. P6.py 실행 권한 부여 및 실행
chmod +x P6.py
./P6.py 2 1 -1 AATCTATA AAG-AT-A
# 출력: 정렬 점수 계산 결과 출력
📌 요약
- parg.py: 인자 확인용 테스트
- loop.py: 반복문 순회 확인
- P6.py: 실제 Pairwise Alignment 점수 계산기 🎯
연습 문제
S = match/mismatch × (m - n) + gap × g
✅ 수정된 코드 (PA1.py로 저장할 코드):
#!/usr/bin/env python3
import sys
# 입력값 받기
match = int(sys.argv[1])
mismatch = int(sys.argv[2])
gap = int(sys.argv[3])
arow1 = sys.argv[4]
arow2 = sys.argv[5]
# m: match count, n: mismatch count, g: gap count
m = n = g = 0
# 두 시퀀스 비교
for i in range(len(arow1)):
nt1 = arow1[i]
nt2 = arow2[i]
if nt1 == '-' or nt2 == '-':
g += 1
elif nt1 == nt2:
m += 1
else:
n += 1
# 새로운 scoring 공식 적용
ascore = match * (m - n) + gap * g
# 결과 출력
print(ascore)
✅ 절대경로 정리
- 디렉토리 이동:
cd /mss/home_student/학번/PA2025
- 파일 실행 테스트 (예시):
./PA1.py 2 -1 -2 ACG-T A-GGT
- py 파일 절대 경로:
/mss/home_student/학번/PA2025/PA1.py
'생명정보학 > 대학 강의' 카테고리의 다른 글
의생명정보알고리즘 예상 문제 정리 (0) | 2025.04.24 |
---|---|
의생명정보알고리즘 중간고사 정리 (0) | 2025.04.14 |
의생명정보알고리즘 대학 강의 정리 (0) | 2025.03.20 |
의생명정보알고리즘 OT (의생명정보학) (0) | 2025.03.05 |