2010-12-15 5 views
3

다중 고정 염기 서열 파일 (예 : Roche-454 ~ 500,000 개의 평균 읽기 길이 250bp 읽기)을 "bin"(개별 파일로 분할)하고 싶습니다. 나는 각각의 GC 내용에 기반한 저장소를 원한다.비닝 시퀀스는 GC 내용으로 읽습니다.

< 20 % GC 함량

21-30 %의 GC 함량

31-40 %의 GC 함량

41-50 %의 GC : 얻어진 출력은 8 멀티 FASTA 파일 것 콘텐츠

51-60 % GC 함량

61-70 %의 GC 함량

사람이 이미이 작업을 수행하는 스크립트 나 프로그램을 알고 있나요

691,363,210

71~80% GC 함량

> 80 % GC 함량? 누군가가 GC 콘텐츠를 기반으로 다중 파일을 정렬하는 방법을 제안 할 수 있습니까? 그렇다면 관련 빈으로 분류 할 수 있습니까?

+0

태그를 편집하여 '가비지 콜렉션'을 제거합니다. 아니요, 불행히도 쉽게 도와 줄 수있는 방법이 없습니다. 머리 꼭대기에서 내가 아는 도구가 없습니다. 프로젝트의 범위를 알고 있으며 도움이 필요하면 기꺼이 당신과 협력 할 것입니다. – qdot

+0

GC는 구아닌 - 시토신을 의미합니다. 즉, 텍스트 파일을 분석하고 메트릭을 계산하고 메트릭을 기준으로/bin을 정렬합니다. – qdot

+0

파일 형식 샘플을 제공해 주시겠습니까?Fasta 파일의 시퀀스 (대문자)가 어떻게되는지는 알고 있지만, 헤더의 모양은 무엇이며 항목을 구분하는 새로운 줄이 있습니까? – canavanin

답변

1

FASTA 파일을 읽으려면 Python과 Biopython 또는 Perl과 Bioperl을 사용하는 것이 좋습니다. Bioperl here에서 C- 내용을 계산하는 스크립트가 있으며 Biopython은 function for it입니다. 그런 다음 각 시퀀스의 GC 내용을 사전이나 해시에 저장하고 GC 내용이 얼마나 높은지에 따라 파일에 기록합니다.

더 구체적인 도움이 필요합니까?

2

R/Bioconductor에서 작업은 (a) 적절한 라이브러리로드 (b) fasta 파일 읽기 (c) 뉴클레오티드 사용 계산 및 gc % (d) 데이터를 빈으로 잘라서 출력 원본 데이터를 별도의 파일로

## load 
library(ShortRead) 
## input 
fa = readFasta("/path/to/fasta.fasta") 
## gc content. 'abc' is a matrix, [, c("G", "C")] selects two columns 
abc = alphabetFrequency(sread(fa), baseOnly=TRUE) 
gc = rowSums(abc[,c("G", "C")])/rowSums(abc) 
## cut gc content into bins, with breaks at seq(0, 1, .2) 
bin = cut(gc, seq(0, 1, .2)) 
## output, [bin==lvl] selects the reads whose 'bin' value is lvl 
for (lvl in levels(bin)) { 
    fileName = sprintf("%s.fasta", lvl) 
    writeFasta(fa[bin==lvl], file=fileName) 
} 

R/Bioconductor와 함께하려면 http://bioconductor.org/install을 참조하십시오. 표시된 크기의 454 데이터에 대한 메모리 요구 사항은 그리 나쁘지 않으며 여기서 스크립트는 상당히 빠릅니다 (예 : 260k 읽기의 경우 7 초). 내가 문제를 정확하게 이해한다면

0

, 다음 (파이썬) 같은 것을 필요

def GC(seq): # determine the GC content 
    s = seq.upper() 
    return 100.0 * (s.count('G') + s.count('C'))/len(s) 

def bin(gc): # get the number of the 'bin' for this value of GC content 
    if gc < 20: return 1 
    elif gc > 80: return 8 
    else: 
     return int(gc/10) 

그런 다음 당신은 단지 권리를 찾아, 파일에서 항목을 읽어 GC 함량을 계산해야

bin을 찾아 해당 파일에 항목을 작성하십시오.
from pyteomics import fasta 

def split_to_bin_files(multifile): 
"""Reads a file and writes the entries to appropriate 'bin' files. 
`multifile` must be a filename (str)""" 

    for entry in fasta.read(multifile): 
     fasta.write((entry,), (multifile+'_bin_'+ 
        str(bin(GC(entry[1]))))) 

그런 다음 당신은 그냥 split_to_bin_files('mybig.fasta')과 같이 호출 : 다음 예는 우리가 실험실에서 사용하는 파이썬 package 이것을 구현합니다.