수요일, 3월 28, 2012

awk 사용법


Blast를 수행 시 -m 8을 하면 자료 뽑아내기가 쉬운 것을 알고 있다.
근데 리눅스에서는 awk라는 명령어를 사용하여 별도의 코딩을 하지 않고
일정 값 이상/이하의 결과들만 골라서 볼 수 있다.
-biodb의 wiki에 정리해둔 것이 있었는데...;;;

구글 뒤져보니 본인이 원하는 기능의 awk 기능을 잘 설명해 놓은 것이 있어서
그대로 옮겨보도록 한다. ㅋ

출처: :+:하늘을 닮은 호수:+:

-m 옵셥에서 8값을 선택한 결과 파일 (blastout.file) 에서 score가 100 이상의 결과들만 뽑길 원하는 경우
> awk '$12 > 100 { print $2 }' blastout.file

본 문장을 응용하면 결과값에 특정 문자열만 들어가 있는 것을 포함/제외 하고
출력하기, 결과값이 중복된 것이 있으면 sort를 이용하여 제거 할 수도 있으니
참 간편하지요? ;;;

그걸 몰랐던 학부 시절 때 하나하나 python으로 삽질하던 기억을 하면;; 아놔;;;
그러나 요즘도 걍 python으로 작업한다는 훈훈한 이야기가 전해내려 온다능..;;

CPAN이용해서 Perl 모듈 설치하기


Circos를 설치하기 위해서 perl 모듈 설치에 좀더
편하게 하는 방법이 있어서.... ㅎㅎ

CPAN (Comprehensive Perl Archive Network)는 각종 perl 모듈이
모아져 있는 사이트인데 perl 5.8이후부터 cpan이라는 명령어를 지원하여
보다 편리하게 perl 모듈들을 설치할 수 있게 되었다.
(윈도우의 cgwin은 역시 잘 안된다능;;;; )

5.8 이전의 경우
$perl -MCPAN -eshell
또는
5.8 이후
$cpan

이라고 명령어를 실행시키면 처음에 실행시키면 이것저거 무엇을 한다고 하고
 [yes]를 입력하면 알아서 작업을 한후 cpan이라는 프롬프트를 보여줍니다.
cpan>install 모듈명
으로 쉽게 설치 우후훗...

HTTP Status 상태 코드별로 페이지 작성하기



출처:http://linux.tini4u.net/stories.php

일반적으로 웹호스팅을 받아보면 HTTP Status code page가
윈도우의 기본적인 그것이 아니라 깔끔하게 제작된 페이지를 본적이 있을 것입니다.
그것은 아파치에서(혹은 사용자가 [Override enabled]) 서버에러에 대한
응답을 지정해주어서 그렇습니다.

아파치 문서에 보면 ErrorDocument 부분이 정의되어 있으니
한번쯤 읽어보시면 이해하시기가 쉬우실 겁니다.
대략적으로 정리하면 총 3가지 방법으로 응답을 지정할 수가 있는데,
그것은 아래와 같습니다.


1. 보통의 텍스트
ErrorDocument 500 "The server made a boo boo."


문자열인 경우엔 " " 안에 문자열을 넣으면 됩니다.
추가=> [" "] 표시는 텍스트임을 알려주는 것으로서 그 자체는 출력되지 않습니다.


2. 내부 전환
ErrorDocument 404 /missing.html


서버 내부의 파일로 전환하는 방법인데 주의할 점으로는
절대 경로로 지정했을 경우엔 틀린 방법이라는 것입니다.
문법의 최상위 경로(/)는 DocumentRoot를 의미하기 때문입니다.
즉, 내 도메인이 /home/foobar/www/로 DocumentRoot가 설정되어 있고
전환할 페이지가 /home/foobar/www/missing.html 에 있다면
ErrorDocument 404 /missing.html


위와같이 설정을 해주셔야 작동을 합니다.

다만 이것이 사용자단이 아닌 아파치단에서(httpd.conf) 설정되었을 경우
모든 도메인에 대해서 404 코드는 /missing.html 파일을 찾게 됩니다.
이런 경우 사용자 입장에서는 /missing.html 파일을 사용하지 못합니다.

만약 서버 관리자로써 모든 Status Code 페이지를 전환하려면
Alias /Error "/usr/local/apache/htdocs/Error/"
ErrorDocument 404 /Error/missing.html


이런식으로 Alias를 만들어 주면 해결이 됩니다.
왜냐하면 모든 도메인은 /Error/missing.html를 찾을 것이고
/Error은 /usr/local/apache/htdocs/Error/ 으로 보내지기 때문입니다.
/Error/missing.html를 풀이해보면
/usr/local/apache/htdocs/Error/missing.html 이 되겠죠.

추가=> 스크립트나 SSI로도 내부 전환이 가능합니다.


3. 외부 전환
ErrorDocument 402 http://www.example.com/subscription_info.html


서버 외부의 파일로 전환하는 방법인데 김정균님 경험상으로
외부 전환시 CGI와 htaccess 인증시에 505 Status Code가 발생했다고 합니다.
원래 요청과 관련있는 환경 변수의 상당수가 스크립트에 전달되지 못한다는 점을 알고 있어야 합니다.


※ 설정하면서 주의해야 할 사항
위의 설정대로 설정했고 아무런 문제도 없는데
IE 자체의 에러페이지가 보이는 경우가 있습니다.
이런 경우는 대략 몇가지 문제가 있는데 대표적인것은 아래와 같습니다.

1. 완전한 HTML 페이지가 아닐 경우
<BODY>로 시작해서 </BODY>로 확실하게 끝나지 않았거나
혹은 <HTML>로 시작해서 </HTML>로 확실하게 끝나지 않았을 경우 입니다.
또는 PHP의 exit 명령으로 종료할때 </BODY></HTML>가 출력되지 않는
경우에도 IE 기본 페이지가 나옵니다.

2. Custom error page의 사이즈가 기준치보다 작은 경우
Custom error page 라는게 크기가 정해져 있기 때문에
이 크기가 넘지 않는 경우에도 IE 기본 페이지가 나옵니다.
Custom error page 의 각 크기 기준치는 아래와 같습니다.
Code Description File Size


400 Bad Request > 512 bytes
403 Forbidden > 256 bytes
404 Not Found > 512 bytes
405 Method Not Allowed > 256 bytes
406 Not Acceptable > 512 bytes
408 Request Time-out > 512 bytes
409 Conflict > 512 bytes
410 Gone > 256 bytes
500 Internal Server Error > 512 bytes
501 Not Implemented > 512 bytes
505 HTTP Version Not Supported > 512 bytes

금요일, 3월 23, 2012

Fasta 형식의 파일에서 빈서열 제거


가끔씩 Blast를 수행하고자 formatdb를 수행 할 때,
다음과 같은 에러를 접한 적이 있으리라 본다.


[formatdb] WARNING: Cannot add sequence number XXXXX XX.XXX.XXX.
 because it has zero-length.
[formatdb] FATAL ERROR: Fatal error when adding sequence to BLAST database.


formatdb를 수행하려는 fasta 서열에
빈 서열을 가지고 있기 때문에 나오는 에러로
빈 서열을 제거하면 OK!

vi check.py


import glob,sys
from Bio import SeqIO


file = sys.argv[1]


ow = open(file.split('.')[0]+'.check','w')
seqs = SeqIO.parse(open(file), format='fasta')
 for rec in seqs:
        name = rec.description
        seq = rec.seq.tostring()


        if len(seq.strip()) != 0:
                ow.write('>'+name+'\n')
                ow.write(seq+'\n')


ow.close()



[test]$python check.py test.fasta

Finding Homo Polymeric


출처: Finding homopolymer stretches in contigs

필요에 의해서 perl로 있는거 이용해서 약간 수정

$ vi findingHomopolymer.pl
$file = $ARGV[0];
open(data,$file);
$s = <data>;
$min = 4;


while ( $s =~ /(A{$min,}|T{$min,}|G{$min,}|C{$min,})/g) {
   $end = pos($s);
   $start = $end - length($1) + 1;
   print "$start, $end, $1 \n";
}

$ perl findingHomopolymer.pl seq.fa

※주위: seq.fa에는 서열만 한줄로 있어야 작동합니다.
fasta 폼 이런거 인식 못합니다. ㅋ

MSSQL Data Type


숫자형
bit : 1bit, 0,1
tinyint : 1byte, 0~255
smallint : 2byte, -2^15 ~ 2^15-1
int : 4byte, -2^31~2^31-1
bigint : 8byte, -2^63~2^63-1
smallmoney : 4byte, -2^31~2^31-1
money : 8byte, -2^63~2^63-1
numeric /decimal : -10^38~10^38-1
float : -1.79E+308 ~ 1.79E+308
real : -3.40E+38 ~ 3.40E+38

문자형
char/varchar : 8000자 이하의 문자
nchar/nvarchar : 4000자 이하의 유니코드 문자
text : 8000자 넘는 문자
ntext : 8000자 넘는 유니코드 문자

날짜형 
smalldatetime : 4byte, 1900-1-1 ~ 2079-6-6, 1분 단위
datetime : 8byte, 1753-1-1 ~ 9999-12-31, 1 ms 단위

이진/특수형
binary/varbinary : 8000 byte 이하의 이진값
image : 8000 byte 이상의 그림등의 바이너리 값
cutsor : 커서 이름을 변수로 처리
uniqueidentifer : 전역 유일 구분자
teimstamp : 데이터베이스 안에서 유일한 수

Eclipse Plugin 설치


(지금은 또 어떻게 얼마나 많이 변했을지 모르는 Eclipse.... ;; )


Eclipse 사용시 사용하고자 하는 plugin을 설치할 일이 있을 것이다

웬만하면 [HELP] - [Software Updates]에서 해결 가능하다.
그러나 가끔씩 맘에 안들게 이 메뉴로 해결이 불가능 할 때가 있다.

그럴때에는 manual하게 설치를 해줘야 한다.
-모 그냥 심심풀이로 사용하고자 하는 경우에는 굳이
 스트레스 받으면서 할 필요 없다.

3.4버전 Eclipse인 Ganymede는 Europa와 달리
Plugin폴더에 파일만 복사하면 plugin이 설치가 안된다.
-그래서 조낸 힘들었다.. ㅠ.ㅜ
-Europa도 안써봤었는데.. 제길..
앞으로 만날 Maven, Ant가 무섭다.. xml 설정 같은거 지랄같이 못하는데..

여하튼... Ganymede에서 수동으로 plugin을 설치하려면
두개의 설정 파일과 두개의 폴더에 관련 파일들을 복사해 주어야
Ganymede가 기분좋게 인식해준다.
-[HELP]-[Software Updates]에서 의존성 문제로 설치안되던 녀석들도
너무 깔끔하게 설치된다는 사실.. 제길...

일단 수정되어야 할 파일
eclipse/artifacts.xml
eclipse/configuration/org.eclipse.equinox.simpleconfigurator/bundles.info

그리고 수동으로 설치 할 plugin관련 파일들을 저장할 폴더 두곳
eclipse/features/
eclipse/plugins/

그런데 문제는 각 파일과 폴더를 들여다 보면 막막할것이다.
파일안에 어떻게 내용을 넣어줘야하며, 폴더에는 어떤 파일들을 넣어줘야 하는지..

그래서 본좌는 개발용으로 사용하는 eclipse외에 버전별로(왜 버전별인지 플러그인 설치하다가 당해보면 알것이다.) 다운로드 받아놨다. ^^

그래서 원하는 plugin을 설치가 되는 eclipse에 설치 된 후,
그 eclipse에 저장된 폴더들과 파일의 관련 부분만을 긇어서 원래 개발용
eclipse에 첨가시켜주면 OK!!
젠장.. 이거 깨닫는데 한달 걸렸다..;;;


오픈소스 라이선스 가이드


ㅋ 이것마저 어렵군..
GPL
CPL
Apache License
MIT License 도 있고.. ㅋㅋ

어떤놈은 코드공개,
어떤놈은 공개안하고 돈받고 팔아도 되고...

그러나 일단 배포를 안하면 코드공개와는 상관없다는...



오라클 데이터 타입


문자형 데이터
CHAR : 고정길이 문자형 데이터 타입 (~2k Byte)
VARCHAR2 : 가변길이 문자형 데이터 타입 (~4k Byte)
NCHAR : 고정길이 유니코드 문자형 데이터 타입 (~2k Byte)
NVARCHAR2 : 가변길이 유니코드 문자형 데이터 타입 (~4k Byte)

숫자형 데이터
BINARY_FLAOT : 32비트 부동 소수 (4 Byte)
BINARY_DOUBLE : 64비트 부동 소수 (8 Byte)
NUMBER : 가변 숫자 타입 (~21 Byte)


날짜형 데이터
DATE : 고정 길이 날짜,시간 데이터 (~7 Byte, DD-MM-YY)
INTERVAL YEAR TO MONTH
INTERVAL DAY TO SECOND
TIMESTAMP : DATE 보다 정밀도가 높음
TIMESTAMP WITH TIME ZONE : 지역 시간대 적용크리에이티브 커먼즈 라이센스

hmmer Manual

Blast와 함께 보편적으로 사용되는 Hmmer에 대한 설명서
hmmbuild/ hmmcalibrate/ hmmsearch에 대해서 설명
-물론 제가 사용하는 옵션에 대해서만 blast만큼 많지 않음. default로 사용해도 문제가 없으니깐~ 문제를 모르는것일 수도.. ㅎㅎ


hmmbuild: hmm matrix 만들어 줌
hmmbuild [-options] <hmmfile output> <alignment file>

-F 기존에 동일 이름의 hmm파일이 있으면 삭제하고 새로 만듬. 이 옵션 설정 안해주면 hmmbuild 아예 실행안됨.
ex) hmmbuild -F your_file.hmm your_file.aln


-f/ -g/ -s algorithm styles을 설정하는 옵션 이번에 사용하면서 이런 옵션을 처음 봤습니다. 왠지 hmm 멋져보이는 이유는.. ㅋ
ex) hmmbuild -f your_file.hmm your_file.aln


--amino/ --nucleic 강제로 alignment file이 어떤 서열인지 알려주는 것입니다.
ex) hmmbuild --amino your_file.hmm your_file.aln


-sequence weighting strategies
- model construction strategies
위의 무엇인가 고급스러운 것을 최대한 안건드리면 사용하는게
제 생활신조입니다. default인 이유는 그런 이유가 있을 것이다 라는.. ㅋ
개인적으로 잘 아시는 분만 선택해서 사용하시면 됩니다.
사용방법은 옵션을 그냥 적어주시면 됩니다.
ex) Alternative model construction strategies중 --fast 옵션 사용
      hmmbuild --fast your_file.hmm your_file.aln


hmmcalibrate: 만들어진 hmm matrix를 보정 시켜줌
hmmcalibrate [-options] <hmmfile>
--cpu: 프로그램 수행에 사용할 cpu 갯수 설정, 멀티 코어의 경우 가능. 단, 컴파일 및 바이너리 파일을 받을때 cpu옵션이 on 되어 있는 것을 받아야 사용 가능

--seed: hmmcalibrate를 몇번 수행할것인지 설정 하는 옵션 인듯.

본인의 hmmcalibrate 사용 예

ex) hmmcalibrate your_file.hmm



hmmsearch: 만들어진 hmm 파일을 이용해서 유사한 서열을 찾음.
hmmsearch [-options] <hmmfile> <sequence file or database>

-A <n>: 상위 n개 까지만 출력
-E <x>: blast의 e-value cutoff와 같은 것
-T/ -Z옵션도 안좋은 값을 짤라내기 위한 옵션

--cpu : 프로그램 수행에 사용할 cpu 갯수 설정, 멀티 코어의 경우 가능. 단, 컴파일 및 바이너리 파일을 받을때 cpu옵션이 on 되어 있는 것을 받아야 사용 가능

 --domE <x> / --domT <x>
위의 -T/ -Z의 옵션과 같이 도메인에서 필터링 하는 옵션인듯. 사용 안해봤음. ^^
<sequence file or database>는 fasta format 파일이면 사용 가능함.

본인이 으레 쓰는 방법임. hmmsearch 결과는 '>'로 빼주면 됨.

ex) hmmsearch -E 0.001 your_file.hmm your_database.fasta > result.output