레이블이 BAM인 게시물을 표시합니다. 모든 게시물 표시
레이블이 BAM인 게시물을 표시합니다. 모든 게시물 표시

월요일, 10월 21, 2019

bam파일을 가장 쌈빡하게 잘 다루는 방법

NGS 시대를 살면서 bam파일은 어떻게 땔래야 땔수없는
껌딱지같은 녀석이 되어버렸습니다.

다양한 정보를 가지고있기는 한데 그 안에서 정보를 추출같은 핸들링하기가 쉽지 않은게 사실이긴 합니다.

그래서 여기 sam파일 bam파일을 samtools보다 빠르게  처리해주는 툴하나
가지고 와봤습니다.

모 이미 samtools대신에 잘 사용하고 계실겁니다.

sambamba라고 (현재 버전은 v0.7.0 입니다. 논문은 여기에 있습니다.)

sambamba는 samtools와 비슷한 대부분의 기능을 가지고 있습니다.
view, sort, index, merge, slice, flagstat, markdup
그리고 사용법도 모 크게 어렵지 않습니다. :)

sambamba documentation을 보시면 모 크게 어렵지 않게 손쉽게 사용하실 수 있을겁니다. :)


출처: sana_twice.09



수요일, 5월 08, 2013

SAM/BAM Flag 설명


오홋홋홋


picard, explain-flags

SAM이나 BAM파일에서 두번째 컬럼 값을 넣어주면
이 read의 FLAG에 대한 설명을 해준다는.... :)

수요일, 11월 21, 2012

bam파일에서 fastq로 파일을 뽑을 수 있을까?

당연히 뽑을 수 있으니
글을 쓰는 것이겠지요? ㅎㅎㅎㅎ

그러나 원하는 서열이 bam파일에 있는 전체  서열이 아닌 한
약간의 작업을 해줘야 한 다는 것

현재 사용하고 있는 bam2fastq에 발등을 찍힌 관계로
align작업 후 얻어진 bam파일에서 곧바로 bam2fastq를 사용하여
 fastq를 뽑지 않고 있습니다.

약간 귀찮지만 다음 단계들을 거쳐서 뽑으면
본인이 원하는 서열들을 정확히 bam파일에서 뽑아 낼 수 있다는 것!!

bam2fastq나 그런 류의 프로그램만 사용하면 된다는 구글링 결과는
거짓부렁;;; 제길...

현재 다운로드 가능한 bam2fastq는 1.1.0 이다.
좋은 결과 있으시길~ :)


samtools view -H align.bam > align.mapped.sam
samtools view -F4 align.bam >> align.mapped.sam
samtools view -bS align.mapped.sam > align.mapped.bam
bam2fastq --aligned -o align#.mapped.fq align.mapped.bam

명령어 주석
-H는 헤더파일을 뽑는 옵션
-F4는 저도 정확히 모르겠지만 bam파일에서 -F4는 paired-end read가
모두 align되는 flag인듯 합니다.
-f4를 해서 저장한 파일들을 보면 align되지 않은 것들이 저장되는 것은 확인하였고,
-F4의 경우 align 정보가 표시되는 것으로 보아 맞는것으로 보입니다. :)
-F는 해당 flag를 제외한 결과를 return하는 옵션이고, 
-f는 해당 flag를 포함한 결과를 return하는 옵션입니다.
그러므로 -f4를하면 unmapped된 결과만 저장되고, -F4를 하면 unmapped되지 않은 결과가 저장되게 됩니다. :)
생성한 sam파일을 다시 bam파일로 변환하여 bam2fastq를 사용하여
fastq를 얻으면 됩니다. 다만, 구글링 결과에서 --no-aligned와 --aligned가 같다고
하는 글들이 있었는데..
--aligned를 해야 align된 paired read들만 fastq로 저장됩니다.
--no-aligned의 경우 결과가 상이한 것으로 나타나서 --aligned를 권장
--aligned와 동일한 결과를 보여주는 옵션은 --no-unaligned...
믿거나 말거나~ ㅎㅎ

금요일, 11월 02, 2012

Warning Warning BAM header...


Warning: BAM header too large File

TopHat - cufflinks 조합으로 RNAseq을 분석하는 분들 중에서
과연 얼마나 접해보셨을까 하는데요..
혹 수백,수천개의 chr을 가진 genome을 분석하시는 분께서는 보셨을지도..

그렇습니다. 아직 genome project가 완벽하게 완료되지않아
chr이 완벽하게 정리되지 않아 그렇게 길지 않은 scaffold로 존재하고 있는 경우
마주할 수 있는 문제입니다.
BAM header 파일이 너무 커서 즐!! 이라고 내뱉는것입죠

samtools view -H input.bam #bam파일 Header만 print하는 명령어

구글링을 통해 얻은 결론
소스코드 수정후 새로 컴파일을 해야한다는 것!
(아놔... precompile된것만 편하게 사용하고 있었는데...
 소스 컴파일한다고 더 제대로 작동한다는 보장도 없는데 말이죠 아놔;;; )

여하튼 cufflink 소스 파일과 필요한 패키지들을 (DNS가 문제인지 외부로 직접은 안붙고
내부만 붙어서 다른 서버에서 다운받아서 복사한 후) 어찌어찌해서 설치 ㅋㅋ
현재까지는 잘 작동있다는 점~
컴파일하는동안 내내 warning이 화면을 도배했다는 점~
이거마저 안되면 난 모르겠다는 점~


cufflinks 패키지 설치시 많은 난관들이 있었지만 구글링을 통해 해결
그 경험을 정리해서 필요한 것과 수정해야 하는것들을 순서대로 다시 정리하자면

1. cmake 설치
 cmake 다운로드
 생각하지도 말고 root로 접속하여
 압축 풀고 폴더 안으로 침투하여
 >./bootstrap
 >make && make install
 을 나비처럼 날아서 타이핑과 엔터를 치면 나도 모르는 사이 설치가 되고 있다는 사실!!


2. boost 설치
 boost 다운로드
 이것 역시 다운로드 후 압축 풀고 root권한으로 접속 하여 설치작업을 진행하는것이 여러모로 건강에 도움이 될 듯 하다.
>cd boost/tools/build/v2/
>./boostrap.sh
>./b2 install
>./bjam #심심하면 이것도 실행을... 아... 기억이.. ㅎㅎ
boost 설치에 대해서는 cufflinks 홈페이지를 참조하는 것도 나쁘지 않는듯
cufflinks 튜토리얼
 root 권한으로 걍 설치하면 BOOST_ROOT path 지정하는게 필요가 있을까 하는 생각도..


3. samtools 설치
 samtools 다운로드
이건 모 설치하는데 크게 어렵지 않는 관계로 걍 본인 계정으로 설치, 그냥 압축 풀고
make 실행시키면 설치될듯합니다.
다만 이후 head파일이나 library파일을 위에서 언급한 tutorial페이지에 나와있는대로
올바른 위치에 복사를 해주어야 정신건강에 좋을듯 하다는 말을 남기면서 다음 단계로 고고씽~!!!


4. eigen 설치
 eigen 다운로드
이것 역시 압축을 해제한 후 계정을 root권한으로 갈아타고
압축 해제한 폴더로 들어가서 서브 디렉토리중 하나인 Eigen 폴더를 통채로
시스템 헤더 파일이 있는 곳으로 복사하면 OK
복사할 디렉토리는 cufflinks 튜토리얼을 참고하시길..


5. cufflinks 설치
 cufflinks 다운로드
마지막으로 대미를 장식할 오늘의 주인공 cufflinks
이것은 꼭 root 권한으로 설치 안해줘도 상관없다.
각자 개인 계정에 압축을 풀고 설치 과정을 시작하면 된다.
단 이 글에서 문제가 되었던 위험 요소를 제거를 하기 위해서 파일하나를 수정할 필요가 있다. :)
>cd cuffinks-2.x.x
>vi src/hits.cpp
MAX_HEADER_LEN = 4 * 1024 * 1024 로 되어 있는 것을
각자 genome 사정에 맞게 수정하면 된다. 
본인의 경우 MAX_HEADER_LEN = 128 * 1024 * 1024
>./configure --prefix=/path/to/cufflinks/install
(위에서 root권한을 사용해서 기본설정으로 설치를 안해주었다면
 --with-boost/--with-eigen/--with-bam 경로를 설정해 주어야 한다.
>make && make install


5단계를 거치고 나서 cufflinks가 설치가 완료되면
이제 새로 컴파일한 실행 파일로 실행하면 일단 warning을 뱉어내지 않으면서
일을 시작할 것이다.

중간에 세그먼트 폴트 에러를 뱉어내면서 죽지 않기를 바랄뿐이다. :)