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]

(계속)