7강 / 20강

좌표계 — FASTA · .fai · chr1 인가 1 인가

참조 유전체를 실제로 여는 일 · 코드랩 1단계

좌표계 — FASTA · .fai · chr1 인가 1 인가
이름이 다르면 같은 자리가 다른 자리가 됩니다. 오류 없이요.

참조 유전체는 FASTA 파일 하나입니다. 생김새는 놀랄 만큼 단순합니다.

>13 dna:chromosome chromosome:CanFam3.1:13:1:94715083:1 REF
ACGTTTCAGGATCCAAGGTTACGGATCCAAGGTTACGGATCCAAGGTTAC
GGATCCAAGGTTACGGATCCAAGGTTACGNNNNNNNNNNNNNNNNNNNNN
…

> 로 시작하는 줄이 이름이고, 그다음 줄들이 서열입니다. 줄바꿈은 사람이 보기 좋으라고 넣은 것이라 뜻이 없습니다.

N 은 "여기가 무엇인지 모른다"입니다. 6강에서 본 메우지 못한 구멍이 이렇게 보입니다.

이 산수 때문에 FASTA 는 모든 줄의 길이가 같아야 합니다. 손으로 편집하다 줄 하나를 흐트러뜨리면 색인이 통째로 어긋납니다.
Python 브라우저에서 실행
좌표를 넣어 보세요. 1-based 와 0-based, 그리고 이름 규칙이 어긋날 때 무슨 일이 생기는지 보여 줍니다.
불러오는 중…

함정 하나 — chr13 인가 13 인가

Ensembl 방식
13 · X · MT
접두사가 없다. Ensembl REST 와 GTF 가 이 방식
UCSC 방식
chr13 · chrX · chrM
접두사가 붙는다. IGV 기본 · 대부분의 브라우저

두 방식을 섞으면 어떻게 되느냐 — 프로그램이 오류를 내지 않습니다. 그냥 "그런 염색체는 없다" 고 보고 결과가 0줄이 나옵니다.

워크숍 노트북 1단계가 Ensembl REST 에서 서열을 받아오므로, 그 결과는 접두사가 없는 쪽입니다. 그 위에 UCSC 방식의 BED 파일을 얹으면 아무것도 안 걸립니다.

실무에서 가장 흔한 조용한 사고입니다. 파이프라인을 짤 때 이름 규칙을 한 번 정하고 끝까지 지키는 것이 답입니다.
Python 브라우저에서 실행
D816V 의 '816' 은 단백질 좌표입니다. DNA 좌표에서 여기까지 오는 길에 칸이 여럿 있습니다.
Python 브라우저에서 실행

코드랩 1단계가 하는 일

req = urllib.request.Request(base + f"/lookup/symbol/{species}/KIT?expand=0", …)
info = json.load(urllib.request.urlopen(req, timeout=60))
srn, start, end = info["seq_region_name"], info["start"], info["end"]

Ensembl REST 에 "개의 KIT 유전자가 어디 있느냐" 를 묻고, 답으로 온 좌표를 써서 그 둘레 20 kb 를 잘라 옵니다.

species 를 canis_lupus_familiaris 와 canis_familiaris 둘 다 시도하는 것이 눈여겨볼 대목입니다. 같은 종을 두 이름으로 부르는 시기가 있었고, 어느 이름이 살아 있는지는 서버 판마다 다릅니다.

그리고 인터넷이 막히면 결정론적 합성 서열로 자동 대체합니다. 교실에서 열 명 중 한 명은 네트워크가 막히기 때문입니다.

🤔 확인 문제
FASTA 의 .fai 색인이 하는 일은?
🤔 확인 문제
Ensembl 방식 FASTA(13)에 UCSC 방식 BED(chr13)를 얹으면?
🤔 확인 문제
BED 형식은 어떻게 셉니까?