GATK 를 사용해서 snp 분석을 하기 전에 picard 를 써서 sam files 를 정리해야 된다. 이와중에 시행착오가 참 많았다..
먼저 만약 1개의 sample 로 여러 개의 NGS data를 만들었을 경우, picard 의 MergeSamFiles 명령어로 여러 sam files 합치는 것과 동시에 coordinate sorting 하자.
어차피 sam file 은 reads 순서로 정렬이 되어 있으므로 reference mapping 결과대로 다시 sorting 해야 되니까 이참에 하자.
java -jar -Xmx128g picard.jar MergeSamFiles I=1.sam I=2.sam O=filename.merge.sam SO=coordinate USE_THREADING=true TMP_DIR=/.../ R=reference.fasta
합치고 싶은 sam files 각각을 I 옵션에 넣어주면 된다.
USE_THREADING - multi thread 를 활성화 시켜줘서 20% 정도 속도 향상을 시켜준다고 하는데 딱히 체감되지는 않지만...
TMP_DIR - sorting 할 때 디스크를 많이 쓴다. 여분의 디스크를 따로 설치하고 그곳을 지정해주는게 속도 향상에 더 큰 영향을 주는 듯. samtools 는 메모리 영역을 크게 할당할 수 있었는데 picard 는 그런 옵션이 없는 듯.
R - reference 파일인데 딱히 필요하지는 않는다.
* -Xms32g, -Xmx128g - java 옵션이다. Xms 는 최소 메모리, Xmx 는 최대 메모리를 지정한다. 이걸 크게 설정해 놓으면 disk I/O 작업이 빈번하게 일어나는 것을 막아 disk drive 가 고장날 확률을 줄여주고 작업 속도도 빨라진다.... 라고 기대했는데 아닌가 보다. TMP 디렉토리에 잔뜩 만들어지는 걸 보아하니..
굳이 합칠 일이 없을 경우 sorting 하는 방법이다.
java -jar /share/picard-2.0.1/dist/picard.jar SortSam I=filename.sam O=filename_sorted.sam SO=coordinate TMP_DIR=/.../tmp/ R=reference.fasta
Sorting 이 끝나면 이제 duplication 제거를 한다. 이것은 sequencing 될 때 적당한 강도의 signal 확보를 위해 PCR 을 하게 되고 이 과정에서 특정 DNA 만 유독 강하게 나올 수 있다. 이것을 찾아 가장 좋은 것 하나로 만드는 작업이다. 그렇지 않으면 depth 계산이 엉뚱하게 나올 수 있다.
java -jar picard.jar MarkDuplicatesWithMateCigar I=filename.sorted.sam O=filename.sorted.dedup.bam M=filename.sorted.dedup.bam.metrics.txt TMP_DIR=/.../tmp/ R=/reference.fasta
다음 글에서 GATK 로 넘어간다..... 그냥 넘어가면 에러 뜬다.. ㅡ_ㅡ...
bam file 의 index 를 만들어야 된다.
java -jar picard.jar BuildBamIndex I=filename.sorted.dedup.bam O=filename.sorted.dedup.bai TMP_DIR=/.../tmp/ R=/reference.fasta
굳이 output 옵션을 쓸 필요는 없다.. 알아서 현재 디렉토리에 .bai 로 나온다.
하나 더 해야 된다.. 아.. 짜증.. 진작 말하지..
java -jar picard.jar CreateSequenceDictionary R=reference.fasta O=refrence.dict
쉽게 말해 GATK 에서 사용할 reference fasta 의 index 를 생성하는거다.