2014년 12월 9일 화요일

새로 알게 된 IGV 활용법 - multi region view, read 정렬 등

IGV 관련 검색하다가 발견,

2013년 자료인데 재밌는 기능들을 알게 됨.
무려 180여 페이지. PPT 슬라이드니까 체감하기에 그 정돈 아니고,
초보든 어느 정도 아는 사람이든 한번 볼 만하다 싶다.

그 중 눈에 들어온 몇 가지 기능만 우선.

한번에 여러 region 보기. 동시에 몇개까지 볼 수 있는지는 모르겠는데,
targeted seq 결과를 볼 때 유용할 듯.
예전에 genome 전체 말고 몇 곳만 모아서 볼 방법은 없나 하는 생각을 했었는데
이걸로 어느 정도 가능할 것 같다.

여러 gene들을 동시에 볼 수도.
그냥 저 곳에 gene 이름을 늘어놓으면 되는 듯.

멀티뷰 -> 싱글뷰로 돌아가려면.

특정 snp에 편리하게 갈 수 있다는데, 'snp1'라는 걸 어찌 추적하지?
'첫 snp'라는 의미도 아닐 거고..

해당 위치를 중앙에 놓고, coverage plot에 빨강, 파랑으로
각 base의 freq를 표시한 건데 아래엔 파란색은 눈에 안 띈다.
정렬을 해보자.

base별로 정렬하고,

read 매핑상 forward냐 reverse냐에 따라 strand로 정렬

정렬은 했고, 이제 strand를 색깔로 구별하면,

base와 strand를 기준으로 정렬되었고
strand 색깔에 따라 for/rev가 치우져졌는지도 대략 보인다.

그 외에, BAM 파일에 들어있는 read가 너무 많아서 어떤 위치에서 전반적인
매핑 상황 - ref/alt, for/rev 등 -이 잘 안 보이면 downsampling해서 볼 수 있다.
(기본적으로 read 수를 감안해서 그렇게 browsing하게 되어 있는지는 모르겠다)


1. Genome의 inversion된 상황도 확인할 수 있고
2. RNA의 align 상황도 볼 수 있다고 하는데

나중에 다시 봐야겠다.

2014년 11월 24일 월요일

FastX Tool Kit


FastX Tool Kit에 들어있는 스크립트들. v.0.0.13 기준

별 게 다 있는데, Perl 스크립트 짜다가 간단히 루틴 만들어서 처리할 만한
기능도 있고, 그것도 번거로우니 잘하는 사람이 만든 깔끔한 것을 갖다 써도 되고.

fasta_clipping_histogram.pl
fasta_formatter
fasta_nucleotide_changer
fastq_masker
fastq_quality_boxplot_graph.sh
fastq_quality_converter
fastq_quality_filter     # 일정 quality 값 이상 되는 base가 일정 % 이상 있는 read만 keep.
fastq_quality_trimmer   # 3' end에 존재하는 일정 quality 미만인 연속된 base를 잘라냄.
fastq_to_fasta
fastx_artifacts_filter
fastx_barcode_splitter.pl    # multiplexing으로 실험된 fastq를 barcode seq 기준으로 demultiplexing하여 샘플별 read set으로 나눔.
fastx_clipper
fastx_collapser
fastx_nucleotide_distribution_graph.sh
fastx_nucleotide_distribution_line_graph.sh
fastx_quality_stats   # FASTQ 파일 내 read들에 대해 1,2, ..., N번째 base들이 어떤 quality score 분포를 띄는지 계산. min QS, 1st/3rd quantile QS 등을 계산.
fastx_renamer
fastx_reverse_complement
fastx_trimmer         # fastq 내 read들을 일괄적으로 자름. e.g 150bp->100bp. 앞(5')을 남기든지 뒤('3)를 남기든지
fastx_uncollapser

간단 커맨드라인 도움말(help) 집합:

공통: 기본적으로 quality score encoding이 Solexa/Illumina, 즉 phred-64로 되어 있다.
ASCII 코드로 64 미만인 character가 있으면 score 44인 base가 있으면 -20이라는 얘기라서 에러가 난다.
그럴 땐 Sanger encoding이라고 옵션을 붙여야 한다. -Q 33 을 덧붙이면 정상 작동.

※ "quality control processing of raw data"
항상 조각조각 찾고, 알게 되는데 한번 쓱 볼 만한.
http://59.163.192.90:8080/ngsqctoolkit/Examples/Output-Data/QC/IlluQC/Paired-end/output_pairedEnd_1.fastq_pairedEnd_2.fastq.html


2014년 11월 20일 목요일

Perl에서 Config 파일 활용법 셋업


Perl Config Parsing 하기

GetOpt 모듈도 있으나, 보니까 config 파일의 형식이 지저분해 보인다.
이건 명령어 라인에서 받을 때 더 유용할 듯.
http://search.cpan.org/~mtadel/Getopt-FileConfig-1.0001/lib/Getopt/FileConfig.pm
http://www.joinc.co.kr/modules/moniwiki/wiki.php/man/20/getopt
http://perldoc.perl.org/Getopt/Long.html

대신에 Config 모듈을 써야겠다.
http://search.cpan.org/~sherzodr/Config-Simple-4.59/Simple.pm

※ hash of hash 등 복잡한 데이터 구조를 dump 출력하기 위한 코드 예시
http://www.perlmonks.org/?node_id=390153

90 서버에서 cpan 들어가서 Config::Simple을 설치하다가 에러 메시지 발생.

Can't exec "/usr/bin/make": No such file or directory at /usr/share/perl/5.14/CPAN/Distribution.pm line 2078.

Distribution.pm을 깔아야 하나?
검색해보니 답변이, 메시지를 잘 봐라, make가 없다잖냐. make를 설치해야지.

apt-get install build-essential
나는 앞에 sudo 붙여서 실행. 마지막에 무슨 메시지가 나왔는데 make 커맨드가 생기긴 했다.
근데 설치가 완료된 리눅스 시스템에 make가 없었을 수가 있나.. 암튼.

이제 되겠지. 다시 cpan 들어가서 install ~Config~ 명령어 실행.
YAML이 없어서 안 된다고 에러. 또 검색. YAML을 깔아, cpan YAML 해봐,

cpan 들어간 상태에서 하지 않고 곧장 cpan YAML. 된다.
이번엔 곧장 "cpan Config::Simple". 된다.
이번엔 hash 등 데이터 구조 출력을 위해 cpan Data::Dumper. 오케이.

※ 왜 cpan Data::Dumper랑 cpan Data::Dumer::Simple이 모듈을 설치하는 위치가
서로 다르지?
/usr/local/lib/perl/5.14.2/Data/Dumper.pm
/usr/local/share/perl/5.14.2/Data/Dumper/Simple.pm
현재, Perl이 설치된 path들:
/lustre/Tools/variant/vcftools_0.1.8a/perl/
/lustre/Tools/variant/tabix-0.2.5/perl/
/usr/lib64/perl5/vendor_perl/auto/
/usr/lib64/perl5/
/usr/share/perl5/
(이들 중에 어디에 설치될 건지는 어떻게 정해지지?)

How to add a file to @INC path in Perl
http://www.perlmonks.org/?node_id=923351
1. use lib를 써서 지정해주는 방법
use lib "/path";
use Porter;     # 경로가 /path/Porter.pm 이어야 함.
use My::Porter;    # 경로가 /path/My/Porter.pm 이어야 함.
2. -I 옵션 활용하기
perl -I /path
커맨드 라인에서 해주거나 (-I /path1 -I/path2 식으로 여럿 가능)
스크립트 내에서 #!/usr/bin/perl -I /path 해주면 됨.
※ 커맨드 라인에서 주는 것과 스크립트 내에서 주는 것은 처리과정상
런타임, 컴파일타임 기준에서 영향은 있는 듯.
3. FindBin 모듈 활용하기
use FindBin;
use lib $FindBin::Bin . '/lib';   # 이건 어떤 의도인지 모르겠다.
[11.20-21]

(계속)


2014년 4월 17일 목요일

picard tools 패키지


version 1.111에 들어있는 프로그램들.
지금까지 여러 번 사용해본 게 얼마 안 되는데, (sortsam, markduplicates 등)
알아두면 괜한 작업을 줄일 수 있겠다.

AddOrReplaceReadGroups.jar
apache-ant-1.8.2-bzip2.jar
BamIndexStats.jar
BamToBfq.jar
BuildBamIndex.jar
CalculateHsMetrics.jar
CheckIlluminaDirectory.jar
CleanSam.jar
CollectAlignmentSummaryMetrics.jar
CollectGcBiasMetrics.jar
CollectInsertSizeMetrics.jar
CollectMultipleMetrics.jar
CollectRnaSeqMetrics.jar
CollectTargetedPcrMetrics.jar
commons-jexl-2.1.1.jar
commons-logging-1.1.1.jar
CompareSAMs.jar
CreateSequenceDictionary.jar
DownsampleSam.jar
- BAM 파일 내에 포함된 read들 중 일부만 가지고 즉 샘플링해서
작은 BAM 파일을 만들고자 할 때 유용.
java -jar [path]/DownsampleSam.jar INPUT=original.bam OUTPUT=sample50pct.bam TMP_DIR=picard_tmp VALIDATION_STRINGENCY=LENIENT PROBABILITY=0.50 RANDOM_SEED=null
RANDOM_SEED는 default 값이 1인데, 그대로 하면 몇 번 하든 동일한 BAM이 생성된다.
null로 설정하면 매번 다른 BAM을 생성.
- 이 코드의 좋은 점은, random sampling을 해주면서 원본 BAM의 상태를 유지해주는
특징인 것 같다. 예를 들어 매핑 위치 기준으로 sorting되어 있다면 그 순서를 헝클어뜨리지
않는다.

EstimateLibraryComplexity.jar
ExtractIlluminaBarcodes.jar
ExtractSequences.jar
FastqToSam.jar
- raw data인 fastq를 BAM 혹은 SAM으로,
단, align된 상태의 read가 당연히 아니라 unaligned BAM 파일을 만들어줌.

FilterSamReads.jar
FixMateInformation.jar
GatherBamFiles.jar
IlluminaBasecallsToFastq.jar
IlluminaBasecallsToSam.jar
IntervalListTools.jar
libIntelDeflater.so
MakeSitesOnlyVcf.jar
MarkDuplicates.jar
- align 위치 때문에 MAPQ 값 관련 오류가 나타날 수 있는데 그땐
VALIDATION_STRINGENCY=LENIENT 옵션을 추가하면 해결.

MarkIlluminaAdapters.jar
MeanQualityByCycle.jar
MergeBamAlignment.jar
MergeSamFiles.jar
MergeVcfs.jar
NormalizeFasta.jar
picard-1.111.jar
QualityScoreDistribution.jar
ReorderSam.jar
ReplaceSamHeader.jar
RevertOriginalBaseQualitiesAndAddMateCigar.jar
RevertSam.jar
sam-1.111.jar
SamFormatConverter.jar
SamToFastq.jar
snappy-java-1.0.3-rc3.jar
SortSam.jar
- 용량이 클 땐 TMP_DIR=picard_tmp 옵션을 쓰면 중간에 뻗지 않게 하여 도움이 되는 듯.

SplitVcfs.jar
tribble-1.111.jar
ValidateSamFile.jar
variant-1.111.jar
VcfFormatConverter.jar
ViewSam.jar

---

2014년 4월 8일 화요일

Human Gut Microbial Metagenome - Nature, 2010 Mar., BGI



=== 2014. 04. 08. 화

#
분석에 있어서, 인간 장내 미생물 메타지놈과 토양 미생물 메타지놈 등 샘플환경이 다르면 DNA 프렙 등 실험은 달라질 수 있을 텐데, 분석도 차이가 발생할 수 있을까? 장내 미생물의 99%는 박테리아 라고 하는데 다른 환경도 마찬가지인가. OTU 등 클러스터링 작업, 혹은 16S rRNA DB에 시퀀스 서치할 때 (taxonomy assign) 활용할 mapper 라든가, 하고 난 뒤 해석 단계에서 라든지.


#
http://www.nature.com/nature/journal/v464/n7285/abs/nature08821.html

A human gut microbial gene catalogue established by metagenomic sequencing
2010 Mar / Nature / BGI

요약: 124명의 배설물에서 추출한 total DNA를 일루미나 GA로 시퀀싱, 드노보 어셈블, ORF prediction, 기능 annotation, phylotype 분류, minimal gut genome & metagenome 분석 등






유러피언 124명의 배설물에서 (faecal sample), 16S rRNA만 추출하지 않고, 전체를 (total DNA) 시퀀싱 해서 576.7Gb를 얻었음.
read length는 첫 batch 샘플 15개는 44bp로, 나머지 샘플 109개는 75bp로 진행.

novel seq 생성과 seq depth 사이의 optimal return을 계산하기 위해 일루미나 read를 Sanger read에 (총 311.7Mb) SOAP로 매핑했더니, 일루미나 read 4Gb로 Sanger read 94%, 89%가 커버되고, 12.6, 16.6Gb로 늘려서 했더니 95%로 다소 증가했으며 depth는 높았고 uniform level 인 걸로 보아, 일루미나 시퀀싱에서 bias는 거의 없었다고 판단.
반대로, 일루미나 read들 중 57%, 74%가 매핑되지 않았는데 이들은 Sanger로는 시퀀싱 안 됐던 novel seq로 보이며, 이 비율은 4Gb에서도 비슷했음. 이걸로 보면 novelty는 4Gb만 시퀀싱해도 캡처된다고 본다.

124개 샘플들에서 공통적으로 발견되는 미생물 종을 조사하기 위해 public DB의 데이터를 기반으로 bacteria와 archaea genome들을 모아서 'non-redundant set' 650개를 구성해놓고, 모든 read를 여기에 BLASTN으로 매핑.

개인별 미생물 다양성 차이가 클 것으로 예상하여 각 샘플의 read들을 각기 독립적으로 드노보 어셈블리 (SOAPdenovo) 진행, 전체 중 42.7% read가 참여되어 6.58M개 contig를 (길이>500bp) 생성. 총 길이는 10.3Gb, N50은 2.2kb. (supp. table #4)
샘플 하나의 read들 중 35%가 다른 샘플들로부터 생성된 contig에 매핑되었는데,
이는 common sequence core의 존재를 의미하는 것.

contig set을 완성하기 위해 124개 샘플의 unassembled read들만 모아서 재차 어셈블 진행.
0.4M개 contig 생성, 총 길이 370Mb, N50은 939bp.

어셈블리 퀄러티 검증은, contig를 Sanger read에 SOAP으로 매핑 (2개 샘플 진행) & FLX read의 드노보 어셈블 결과에 매핑 (1개 샘플 진행) 하여 contig 약 98% 이상이 99.5% 이상의 collinearity를 보이는 것으로 증명. 그리고, 어셈블리 에러를 계산해본 결과, 일루미나 및 FLX contig에서 각각 megabase당 14.2 및 20.7이 나옴. short read, long read based 어셈블리가 comparable하다고 주장.
Sanger read는 왜 어셈블하지 않았을까?

커버리지 계산은, 일루미나 read를 contig 그리고 known bacteria genome에 SOAP으로 첫 35bp에서 mismatch 2개 허용 & 90% identity를 적용했고, FLX 및 Sanger read를 같은 reference에 BLASTN으로 1 * 10^(-8), 100bp 이상 align, 90% identity를 적용해서 매핑.

어셈블해서 나온 contig들에 metaGene 이라는 툴을 적용하여 ORF prediction.
(contig들이 미생물들의 predicted gene들이 되는 셈...)
BLAT으로 pairwise alignment, 95% identity, 둘 중 짧은 시퀀스 길이 90% 이상 align 기준으로 grouping하고, 그룹에서 가장 긴 시퀀스가 그 그룹을 대표, 최종적으로 ORF 길이가 100bp 미만인 것은 filter out. 그리고 NCBI Genetic Codes 11로 translation 진행.

그리고 1%, 10% coverage 기준으로 계산해봄, 즉 그 genome이 1% 혹은 10% 커버됐다면 해당 미생물 종이 그 샘플에 포함된 걸로 간주한다는 것.
1% 기준: 모두 공통 18개 지놈, 전체 중 90% 이상 샘플 공통 57개, 50% 공통 75개,
10% 기준: 90% 공통 13개, 50% 공통 35개
1%는, 일반적인 bacteria genome 크기로 보면 40kb인데 이는 16S rRNA 길이의 25배에 해당된다고...
기준에 대한 근거로 얘기한 것 같은데, 그 미생물이 그 샘플에 포함됐는지 여부를 판단하기 위한 기준으로는 1%는 낮은 것 아닌가 생각이 든다.

common core 미생물들에 있어서도 개인간 미생물 조성 (relative abundance) 편차가 컸는데, 지놈 커버리지 1% 기준으로 90% 이상의 샘플에서 공통적으로 발견된 57개 microbial genome의 샘플간 편차가 적게는 12배에서 2187배까지 차이가 났다.
예상대로, Bacteroidetes 그리고 Firmicutes가 가장 높은 abundance를 보였다.

predicted gene들의 기능 조사를 위해, gene들을 NCBI-NR, KEGG, COG & eggNOG DB에 매핑한 결과, 77.1%가 phylotype 분류가 됐고 57.5%는 eggNOG 클러스터에 매치됐으며 47.0%은 KEGG orthology에, 18.7%는 KEGG pathway에 매치됐다.
KEGG pathway에는 별로 안 되는구나.

minimal gut genome - bacterium 하나가 장 내에서 자라는 데 필수적인 gene들 조사
minimal gut metagenome - 장 내의 ecosystem이 homeostasis (항상성)을 유지하기 위해 필요한 여러 종들로부터 생성되는 gene들을 조사

그 외...
1. 124 individuals - healthy, overweight, obese, inflammatory bowel disease
2. total DNA 사용한 이유? 제목이 gene catalogue긴 한데... 예산 여유가 있고, 이전의 다른 연구 그룹과 (미국,일본) 차별화되기 위해서 그런 건가.
- 아래 16S vs shotgun 비교가 어느 정도 대답이 되겠다.

사용된 DB:
- NCBI GenBank의 bacterial genome 806개
- known human gut bacteria genome sequences from
HMP DB, GenBank, Washington Univ in St Louis (85 genomes, ver. 2009 Apr.), MetaHIT project (17 genomes, ver. 2009 Sep., Sanger Ins.)
- US individuals (SRA002775; Roche 454), Jap (P. Bork's group, EMBL; Sanger)
- integrated NR DB: NCBI-NR (ver. 2009 Apr) + all genes from the known human gut bacteria genomes)
integrated NR DB 구성 방법?


#
http://res.illumina.com/documents/products/research_reviews/metagenomics_research_review.pdf
메타지놈: 16S rRNA 시퀀싱 vs shotgun 시퀀싱
application: monitoring populations / discovering new genes, new members, resolving complex taxonomies
ability to detect rare member: highly sensitive / much deeper sequencing required for the same level of sensitivity



#
16S rRNA gene의 시퀀싱에 대해서,


microbial taxon들을 확인하는 phylogenetic marker로 활용, 모든 생명체가 가지고 있고 bacteria의 경우 RNA의 80%를 차지, conserved & variable region이 산재해 있어서 PCR & 시퀀싱으로 확인하기 좋다, 특히 microbial population의 fluctuation monitoring에 효과적.

여러 NGS 플랫폼들에 있어서 read length, read depth, sequencing error이 그에 미치는 영향이 연구되어 있다, 그 논문은:
McCafferty J., Muhlbauer M., Gharaibeh R. Z., Arthur J. C., Perez-Chanona E., et al. (2013)
Stochastic changes over time and not founder effects drive cage effects in microbial community assembly in a mouse model. ISME J


#
검색 중 관심 가는 논문 목록

A Catalog of Reference Genomes from the Human Microbiome
2010 May / Science / The Human Microbiome Jumpstart Reference Strains Consortium
http://www.sciencemag.org/content/328/5981/994.full.pdf

Data mining the human gut microbiota for therapeutic targets
Brief Bioinform 1 November 2012: 751-768
http://bib.oxfordjournals.org/cgi/reprint/13/6/751

Computational systems biology and in silico modeling of the human microbiome
Brief Bioinform 1 November 2012: 769-780
http://bib.oxfordjournals.org/cgi/reprint/13/6/769

Computational meta'omics for microbial community studies
Mol Syst Biol 24 March 2014: 666
http://msb.embopress.org/cgi/reprint/9/1/666

Comparative analysis of microbiome between accurately identified 16S rDNA and quantified bacteria in simulated samples
J Med Microbiol 1 March 2014: 433-440
http://jmm.sgmjournals.org/cgi/reprint/63/Pt_3/433



2014년 2월 19일 수요일

셸 커맨드 모음


# 2014. 02. 20
# wget 이용해서 파일 다운받는데, 정확한 파일 위치도 이름도 모를 때

wget -r -nd   --accept=*dbsnp137*vcf*  ftp://ftp.broadinstitute.org/

해당 ftp 사이트에 접속, 하위 폴더들을 들여다보면서 (-r, recursive)
"*dbsnp137*vcf*" 같은 이름의 파일들, dbsnp137.vcf는 물론, what_dbsnp137_sort.vcf.gz 같은 파일들도 받는다 (--accept 옵션). 단, 현 위치에 저장할 때 원본의 파일 구조는 무시한다 (-nd, no directory). -nd 옵션 없이 하면, ftp://.../abc/def/file.txt 파일이 "ftp://.../abc/def/file.txt"에 저장된다. 즉 현재 위치에 ftp 주소를 이름으로 하는 폴더가 생기고 그 아래에 abc 폴더 등등... 원본의 폴더 구조를 다 살려서.

참고:
http://www.gnu.org/software/wget/manual/html_node/Types-of-Files.html