국내 유일의 클라우드 기반 통합 데이터 분석 서비스
KOBIC 자체 기술로 구축한 빅데이터 플랫폼을 통한 유전체 빅데이터 고속분석※ 목차 클릭 시 해당 컨텐츠로 이동합니다.
바이오 익스프레스 웹 서비스 소개
웹 기반 대용량 데이터 분석 서비스
[Figure 1.1-1]
[Figure 1.1-2]
분석서비스
[Figure 1.2-1]
메인 메뉴에서 분석서비스 또는 분석서비스 -> 분석실행을 클릭하면 분석파이프라인을 디자인하고 실행할 수 있는 웹 기반 에디터가 출력된다.
[Figure 1.2-2]
워크스페이스 View 영역에서는 작업자의 주제별 워크스페이스를 생성 관리한다.
[Figure 1.2-3]
분석프로그램 View 영역에서는 파이프라인을 활성화시킨 후, 디자인에 필요한 분석 프로그램 노드 목록을 확인 할 수 있으며, 파이프라인 디자인에 필요한 프로그램들을 선택, 적용하여 디자인할 수 있다.
해당 영역은 파이프라인이 활성화 된 후, 출력된다.
[Figure 1.2-4]
노드 설정 View 영역에서는 각 노드들에 대한 INPUT / OUTPUT / OPTION / DOCKER 옵션을 설정 / 관리한다.
해당 영역은 파이프라인이 활성화 된 후, 에디터상의 프로그램 노드를 클릭했을 때 출력된다.
[Figure 1.2-5]
실행기록 영역에서는 분석 파이프라인에 대한 간략한 실행 정보를 보여준다. 해당 영역은 파이프라인이 활성화 된 후, 에디터상의 프로그램 노드를 클릭했을 때 출력된다.
[Figure 1.2-6]
각 분석 실행에 대한 실행 및 장애로그 버튼을 클릭하면, 각 실행이력에 발생한 상세한 시스템 로그정보를 확인 할 수 있다.
[Figure 1.2-7]
상단 영역은 분석 파이프라인을 저장하고 전체프로그램을 실행하거나 정지시킬 수 있으며, 새로고침 버튼을 클릭하여 해당 파이프라인이 최종 저장된 상태로 동기화 시킬 수 있다.
새로고침 버튼의 동기화 기능은 바이오 익스프레스에서 제공되는 프로그램인 바이오 워크벤치에서 만들어진 해당 파이프라인과의 동기화를 말한다.
확대/축소 버튼의 +, -를 클릭하여 에디터 화면 영역을 확대하거나 축소할 수 있다.
1.2.1 워크스페이스
워크스페이스 생성
[Figure 1.2.1-1]
에디터 화면 왼쪽에 있는 워크스페이스 View 영역에서 생성버튼을 클릭하면 워크스페이스 생성 메시지창을 보여준다.
[Figure 1.2.1-2]
워크스페이스 이름, 설명, 키워드를 차례로 입력하고 생성하기를 클릭한 후, 워크스페이스 생성 확인 메시지창에서 생성을 클릭하면, 워크스페이스 뷰 영역에 워크스페이스가 생성되었음을 확인 할 수 있다.
생성된 워크스페이스를 클릭하면 목록아래에 생성정보를 확인 할 수 있다.
[Figure 1.2.1-3]
각 워크스페이스를 클릭하면 주제별 워크스페이스 안에 생성되어 있는 파이프라인 목록을 확인 할 수 있다.
워크스페이스 수정 및 삭제
[Figure 1.2.1-4]
해당 워크스페이스를 클릭한 후, 워크스페이스 목록 아래에 표시되는 워크스페이스 생성정보 뷰에서, 워크스페이스명 오른쪽에 위치한 톱니모양의 설정 아이콘을 클릭하면 수정 및 삭제 작업이 가능하다.
1.2.2 분석파이프라인 디자인
파이프라인 생성
[Figure 1.2.2-1]
[Figure 1.2.2-2]
왼쪽 워크스페이스 뷰에서 분석작업을 생성할 해당 워크스페이스명 오른쪽에서 파이프라인을 생성할 수 있는 아이콘 버튼을 확인 할 수 있다. 파이프라인 생성 아이콘을 클릭한 후, 파이프라인 생성 메시지 창을 출력한다.
[Figure 1.2.2-3]
타입선택 메뉴에서 새 파이프라인을 선택하고, 버전, 참조, 키워드, 파이프라인설명을 차례로 입력한다.
[Figure 1.2.2-4]
파이프라인 생성 정보입력을 완료하였다면, 생성하기를 클릭한 후, 파이프라인 생성 확인 메시지 창에서 생성 및 확인을 클릭하여 새 파이프라인을 생성을 완료한다.
새 파이프라인 생성이 정상적으로 완료되었다면, 해당 워크스페이스에서 생성된 파이프라인을 확인 할 수 있다.
새로 생성된 파이프라인을 클릭하면 워크스페이스 뷰 아래 상세정보 뷰에서 파이프라인 정보를 확인 할 수 있다.
파이프라인 정보 수정 및 삭제
[Figure 1.2.2-5]
파이프라인 상세정보 뷰에서 파이프라인명 오른쪽에 위치한 설정아이콘을 클릭하면 해당 파이프라인을 수정하거나 삭제 할 수 있다.
분석 프로그램 선택 및 디자인
[Figure 1.2.2-6]
새로 생성된 파이프라인의 생성정보 뷰 맨 아래에 위치한 해당 파이프라인 활성화 버튼을 클릭한다.
파이프라인이 활성화되었지만, 새 파이프라인에는 디자인이 되지 않은 상태이므로 에디터의 캔버스에는 빈 화면만 출력되는 것을 확인 할 수 있다.
[Figure 1.2.2-7]
왼쪽 상단에 파이프라인 노드 목록 뷰 탭을 클릭한다.
[Figure 1.2.2-8]
해당 카테고리 목록에서 분석 파이프라인 디자인에 필요한 프로그램을 선택 클릭하면, 에디터의 캔버스 위에 프로그램 노드가 생성된다.
각 노드들은 에디터 캔버스 위에서 드래그 방식으로 자유롭게 위치 이동이 가능하다.
화면 오른쪽 하단에 미니맵을 이용하면 에디터의 캔버스 화면을 편리하고 신속하게 이동할 수 있다.
화면 상단 오른쪽에는 캔버스를 확대 및 축소하여 에디터 화면을 조정할 수 있다.
[Figure 1.2.2-9]
노드 선택을 끝마쳤다면 에디터 상단에서 저장 및 확인을 클릭한 후, 프로그램 노드를 선택하면, 에디터 우측에 노드 설정 뷰를 확인 할 수 있다.
프로그램 노드의 삭제는 해당 프로그램 노드를 선택하면 출력되는 오른쪽 노드 설정 뷰에서 노드 삭제 버튼으로 삭제가 가능하다.
노드의 삭제는 해당 프로그램 노드 선택 후, delete 키를 눌러 삭제할 수도 있다.
실행옵션 지정
[Figure 1.2.2-10]
해당 프로그램을 선택한 후 노드 설정 뷰에서 실행에 필요한 INPUT / OUTPUT / OPTION 을 설정한다.
INPUT 탭에서 열기를 클릭하여 필요한 폴더를 지정하거나 옵션 정보를 입력한다.
[Figure 1.2.2-11]
OUTPUT 탭에서 열기를 클릭하여 필요한 폴더를 지정하거나 옵션 정보를 입력한다.
[Figure 1.2.2-12]
OPTION 탭에서 필요한 옵션 정보를 입력한다.
분석 프로그램 노드의 연결
[Figure 1.2.2-13]
[Figure 1.2.2-14]
에디터 캔버스에 위치한 해당 프로그램들을 연결하여 하나의 파이프라인을 생성한다.
분석 프로그램 노드들 사이의 연결과 옵션 설정의 순서가 바뀌어도 기능상으로 문제가 없지만, 프로그램 노드들을 연결하면 자동으로 전 단계 분석 프로그램 노드의 OUTPUT을 다음 단계 분석 프로그램 노드의 INPUT으로 설정하게 되므로 옵션을 미리 설정 한 후 연결하는 방식을 추천한다.
프로그램 노드 사이의 연결은 분석 프로그램 노드의 output 원 모양의 연결 영역을 클릭한 후, 다음 단계 분석 프로그램 노드의 input 원 모양의 연결 영역을 클릭하여 연결한다.
[Figure 1.2.2-15]
각 프로그램 노드들은 드래그 앤 드롭 방식으로 캔버스 내에서 자유롭게 이동이 가능하다.
분석 프로그램 노드 삭제 및 노드의 연결선 삭제
[Figure 1.2.2-16]
해당 프로그램들을 연결선을 선택한 후, 연결선이 파란색으로 반전 선택 되었는지 확인한다.
[Figure 1.2.2-17]
[Figure 1.2.2-18]
키보드의 delete버튼을 클릭하여, 삭제 메시지 확인 및 삭제 버튼 클릭 후 연결선 링크를 삭제한다.
1.2.3 파이프라인 실행
파이프라인 실행
[Figure 1.2.3-1]
[Figure 1.2.3-2]
[Figure 1.2.3-3]
[Figure 1.2.3-4]
에디터 화면 상단의 실행 버튼을 클릭하고, 실행 확인 메시지에서 파이프라인 실행에 대한 실행 확인 후, 디자인된 파이프라인의 프로그램들을 실행한다.
파이프 라인의 색상으로 실행중인 프로그램과, 실행을 완료한 프로그램, 미 실행된 프로그램을 각 프로그램 노드의 색상을 통해 시각적으로 구분 할 수 있으며, 상단 메뉴에서 정지버튼을 클릭하여 프로그램 실행을 정지 시킬 수 있다.
프로그램 노드 색상 별 상태정보는 [Figure 1.2.3-1]와 같다.
파이프라인의 실행 확인
[Figure 1.2.3-5]
개별 프로그램을 클릭한 후, 에디터 오른쪽 실행기록 뷰탭을 클릭하면 해당 프로그램명, 실행시각, 상태를 확인할 수 있다.
개별 파이프라인의 실행 정보는 해당 프로그램 노드를 선택한 후, 실행기록 뷰의 상태 정보에서 확인 할 수 있다.
[Figure 1.2.3-6]
개별 프로그램의 실행 및 장애로그를 확인하려면 해당 프로그램 노드를 선택하고, 실행기록 뷰의 실행 및 장애로그버튼을 클릭하면 프로그램 실행에 관련한 시스템 로그정보를 확인 할 수 있다.
[Figure 1.2.3-7]
[Figure 1.2.3-8]
에디터 캔버스 화면 우측 상단에 있는 워크스페이스명/파이프라인명 버튼을 통해서도 분석 파이프라인의 생성정보 및 실행정보를 확인 할 수 있다.
단일 프로그램 실행
[Figure 1.2.3-9]
에디터 캔버스 상의 파이프라인 프로그램 중 실행시킬 프로그램을 선택한다.
에디터 화면 오른쪽 노드 설정 뷰 맨 아래 노드 실행 버튼을 클릭한 후, 실행 확인을 클릭하여 단일 프로그램을 실행할 수 있다.
1.2.4 파이프라인 저장 및 새로고침
파이프라인 저장
[Figure 1.2.4-1]
에디터 상단의 저장 버튼을 클릭하여 현재 디자인된 파이프라인을 저장 할 수 있다.
새로고침
[Figure 1.2.4-2]
에디터 상단의 새로고침 버튼을 클릭하고, 데이터 최신화를 위해 확인 버튼을 클릭하면, 현재 디자인된 파이프라인의 상태를 최신화 된 상태로 되돌 수 있다.
공개 컨텐츠
분석 기초정보로 활용할 공개된 프로그램 및 파이프라인 열람 서비스를 통해, 미숙련 연구자들도 쉽게 파이프라인을 디자인하고 프로그램을 작성할 수 있도록 도와 줍니다.
1.3.1 분석 파이프라인
공개된 분석 파이프라인 목록 출력
[Figure 1.3.1-1]
바이오 익스프레스 웹에 공개된 분석 파이프라인 목록을 출력해준다.
바이오 익스프레스 웹에서 공개되어 제공되는 분석 파이프라인을 활용하여 파이프라인을 디자인 함으로써, 보다 신속하고 효율적으로 연구분석을 수행 할 수 있도록 지원한다.
공개 파이프라인의 분석활용
[Figure 1.3.1-2]
각 파이프라인 목록 화면에서 해당 분석 파이프라인의 오른쪽 상단 분석활용 을 클릭하면 기본정보를 입력한 후, 파이프라인을 에디터를 사용하여 디자인 활용이 가능하다.
[Figure 1.3.1-3]
기본정보 입력창이 뜨면, 해당 파이프라인의 작업공간인 워크스페이스를 지정하고 파이프라인 이름, 파이프라인 설명을 입력한 후 시작하기 버튼을 클릭하고 파이프라인 생성 메시지창에서 생성 버튼을 클릭한다.
[Figure 1.3.1-4]
생성되었다는 메시지창에서 확인 버튼을 클릭하면, 기본정보에서 지정했던 워크스페이스 안에 지정된 이름으로 분석활용 파이프라인이 에디터에 생성되고, 해당 파이프라인의 프로그램 노드 설정 및 디자인 등을 수정할 수 있으며, 각 프로그램 노드들을 실행/분석 할 수 있다.
1.3.2 분석 프로그램
공개된 분석 프로그램 목록 출력
바이오익스프레스 웹에 공개된 프로그램 목록을 출력한다.
[Figure 1.3.2-1]
프로그램 정보 확인
분석프로그램의 링크를 클릭하여 프로그램 관련 사이트로 이동한다.
[Figure 1.3.2-2]
커뮤니티
1.4.1 공지사항
바이오익스프레스 웹 관련 이슈에 대한 안내 및 알림
[Figure 1.4.1-1]
시스템, 서비스, 프로그램 업데이트, 교육일정 등에 대한 알림 및 안내 정보 목록을 출력
[Figure 1.4.1-2]
해당 내용을 클릭하여 내용을 확인한다.
1.4.2 문의사항
바이오익스프레스 서비스 이용 관련문의 및 장애문의
[Figure 1.4.2-1]
문의사항 글 목록 출력
[Figure 1.4.2-2]
문의내용 확인
문의글작성
[Figure 1.4.2-3]
문의사항 목록 아래의 글쓰기 버튼을 클릭한 뒤 제목,태그,내용을 입력하고 등록 버튼으로 저장한다.
1.4.3 정보공유
연구자들간 분석 파이프라인 및 프로그램 디버깅 정보를 공유하고 빅데이터 처리 분석에 필요한 학습정보를 공유하는 커뮤니티 공간
정보공유 목록확인
[Figure 1.4.3-1]
분석연구 활동 및 데이터 정보를 공유하고, 사용자간 분석기술 및 분석환경 등의 정보를 자유롭게 교류할 수 있다.
정보공유 글쓰기
제목, 태그, 카테고리 선택, 내용을 차례로 입력 한 후 등록버튼을 클릭하여 저장한다.
[Figure 1.4.3-2]
마이페이지
1.5.1 대시보드
[Figure 1.5.1-1]
분석 및 프로그램 실행 작업에 대한 작업단위의 시스템 자원 사용현황 제공한다.
클러스터 전체 자원 사용현황 파악을 위한 자원통계 제공하며, 자원 단계별로 색상을 통해 자원사용상태를 파악할 수 있다.
나의 작업 전체에 대한 상태정보 및 분석 작업실적 등을 한 눈에 파악이 가능하도록 제작되어 분석작업에 대한 효율적 관제기능을 제공한다.
[Figure 1.5.1-2]
나의 워크스페이스에서는 주제별로 생성된 워크스페이스 내 포함된 파이프라인들의 목록을 보여준다.
해당 워크스페이스들의 오른쪽 상단에 파이프라인 목록 건수를 표시해주는 버튼을 클릭하면 펼침 목록으로 파이프라인 목록을 보여준다.
[Figure 1.5.1-3]
각 파이프라인의 실행 건수 옆 파란색 더 보기 버튼을 클릭하면 해당 파이프라인 디자인을 활용, 에디터를 연결 출력해서 보여주며, 디자인 수정 및 프로그램 수정과 실행이 가능하다.
[Figure 1.5.1-4]
나의 워크스페이스 목록 상단 오른쪽 워크스페이스생성을 클릭하면, 분석서비스의 에디터를 실행하지 않아도 대시보드에서 새로운 워크스페이스를 생성 할 수 있다.
이름, 설명, 키워드를 차례로 입력하고, 키워드 추가하기 버튼을 클릭하여 키워드를 추가한 후, 생성하기 버튼을 클릭한다.
※ 목차 클릭 시 해당 컨텐츠로 이동합니다.
워크벤치 다운로드
2.1.1 Windows
“ https://www.kobic.re.kr/bioexpress/” 접속한다.
[Figure 2.1.1-1]
[Figure 2.1.1-2]
메인화면인 [그림 2.1.1-1]의 우측 퀵메뉴를 통하여 Windows용 워크벤치를 선택하여 다운로드한다.
[Figure 2.1.1-3]
[Figure 2.1.1-4]
다운로드된 .zip 파일을 원하는 디렉토리에 압축 해제 후 Bioexpress 를 실행한다.
2.1.2 Linux
[Figure 2.1.2-1]
[그림 2.1.2-1]과 같이 wget 명령어로 원하는 디렉토리에 다운로드 한다.
$ wget -O Bio-Express.workbench-linux.gtk-x86_64.tar.gz \
"https://www.kobic.re.kr/bioexpress/common/related_file_down?file_name=Bio-Express.workbench-linux.gtk-x86_64.tar.gz"
[Figure 2.1.2-2]
다운로드된 tar.gz 파일을 tar –zxvf 명령어로 압축 파일 해제 후 Bioexpress 를 실행한다.
$ tar -zxvf Bio-Express.workbench-linux.gtk-x86_64.tar.gz
$ cd Bio-Express.workbench-linux.gtk-x86_64
$ ./Bioexpress
2.1.3 MacOS
“ https://www.kobic.re.kr/bioexpress/” 접속한다.
[Figure 2.1.3-1]
[Figure 2.1.3-2]
메인화면의 우측 퀵메뉴를 통하여 MacOS용 워크벤치를 선택하여 다운로드한다.
[Figure 2.1.3-3]
[Figure 2.1.3-4]
다운로드 된 .zip 파일을 압축 해제 후 응용프로그램으로 옮긴 후 Bioexpress를 실행한다.
워크벤치 실행
2.2.1. 워크벤치 로그인
[Figure 2.2.1-1]
KOBIC 통합로그인(SSO)에 가입 되어 있는 아이디로 로그인 한다.
아이디가 없으면 [그림 2.2.1-1]의 로그인 화면 왼쪽 하단 Register 버튼 클릭 후 KOBIC 통합로그인(SSO)으로 이동하여 회원가입 후 로그인한다.
2.2.2. 워크벤치 시작화면
[Figure 2.2.2-1]
[그림2.2.2-1]과 같이 가운데 영역에 CLOSHA intro 페이지가 활성되고 각 서비스의 카드영역 부분을 누르면 바이오익스프레스 웹 페이지로 연결되어 자세한 소개와 사용법을 익힐 수 있다.
[Figure 2.2.2-2]
[그림2.2.2-2]메인 메뉴 [File], [Window], [Help]는 사용자 편의기능과 워크벤치 업데이트가 가능하다.
[Figure 2.2.2-3]
[그림2.2.2-3]툴바의 가장 우측 메뉴를 통하여 빅데이터 고속 전송 시스템 지박스과 클라우드 기반 통합 분석 워크벤치 클로사의 퍼스펙티브 이동이 가능하다.
툴바를 통해 워크스페이스, 파이프라인, 프로그램, 카테고리의 컨트롤 메뉴를 이용 할 수 있다.
※ 목차 클릭 시 해당 컨텐츠로 이동합니다.
화면 및 기능 소개
GBox 고속 전송 시스템은 가속기 등의 추가적인 하드웨어 구축이나 ActiveX와 같은 별도의 플러그인 설치 없이 소프트웨어 기술만으로 사용자의 대용량 데이터를 고속으로 전송한다. GBox를 통해 업로드 된 사용자 데이터는 CLOSHA에서 사용 가능하다.
[Figure 3.1-1]
GBox는 쉽고 직관적인 사용자 인터페이스로 설계되어 별도의 교육 없이 사용이 가능하다.
빅데이터 고속 전송
[Figure 3.2-1]
업로드 방법 1: [File Explorer] view에서 전송하고자 하는 폴더 또는 파일 선택 하여 [GBox Explorer] view로 Drag & Drop 한다.
[Figure 3.2-2]
업로드 방법 2: [File Explorer] view에서 전송하고자 하는 폴더 또는 파일 선택 하여 컨텍스트 메뉴의 [Upload] 버튼으로 전송한다.
[Figure 3.2-3]
다운로드 방법 1: [GBox Explorer] 에서 전송하고자 하는 폴더 또는 파일을 선택 하여 [File Explorer] view 로 Drag & Drop 한다.
[Figure 3.2-4]
다운로드 방법 2: [GBox Explorer] 에서 전송하고자 하는 폴더 또는 파일을 선택 하여 컨텍스트 메뉴 [Download] 버튼으로 전송한다.
[Figure 3.2-5]
[그림3.2-5]와 같이 파일 전송이 시작되면 어플리케이션 하단의 [Progress] view로 실시간 전송 상황 모니터링이 가능하다.
빅데이터 파일시스템 고속 동기화
[Figure 3.3-1]
GBox → HDFS: [GBox Explorer] view에서 동기화 할 폴더 또는 파일을 선택하여 컨텍스트 메뉴 [Sync] 버튼으로 동기화 한다.
[Figure 3.3-2]
HDFS → GBox : [HDFS Tree Browser] view에서 동기화 할 폴더 또는 파일을 선택하여 컨텍스트 메뉴 [Sync] 버튼으로 동기화 한다.
[Figure 3.3-3]
양방향 파일 동기화 기록을 [Synchronized History] view로 확인할 수 있다.
데이터 파일 관리 기능
[Figure 3.4-1]
[File Explorer] view와 [GBox Explorer] view의 컨텍스트 메뉴로 데이터를 관리 할 수 있다. ([New], [Rename], [Copy], [Paste], [Delete], [Refresh])
[File Explorer] view와 [GBox Explorer] view의 상단의 툴바 메뉴로 디렉토리 이동 및 바로가기 기능을 사용할 수 있다.
※ 목차 클릭 시 해당 컨텐츠로 이동합니다.
화면 및 기능 소개
바이오익스프레스 워크벤치(Bio-Express Workbench)는 대용량 데이터 분석 서비스를 제공하는 클라우드 기반의 프로그램이다. 사용자 친화적인 인터페이스로 구성되어 복잡한 생명정보 분석과정을 손쉽게 파이프라인으로 디자인 할 수 있다.
[Figure 4.1-1]
사용자 정의 기반 프로그램 등록
4.2.1. 사용자 분석 코드 작성
사용자 정의 기반 프로그램을 등록하기 위해 먼저 사용자 분석 코드를 등록해야한다.
[Figure 4.2.1-1]
사용자 분석 코드를 등록할 스크립트 폴더를 생성하기 위하여 [Script] View 컨텍스트 메뉴의 [New Folder] 버튼을 클릭한다.
[Figure 4.2.1-2]
생성 폴더의 이름을 작성한 후 [OK] 버튼을 클릭하여 폴더를 생성한다.
[Figure 4.2.1-3]
[그림 4.2.1-3]과 같이 생성된 스크립트 폴더에서 컨텍스트 메뉴의 [New Script] 버튼을 클릭하여 사용자 분석 코드를 생성한다. 사용자 분석 코드의 파일 형식으로는 Python, Bash, R을 지원한다.
[Figure 4.2.1-4]
생성할 스크립트의 이름을 입력한 후 [OK] 버튼을 클릭하여 빈 스크립트를 생성한다.
[Figure 4.2.1-5]
#!/bin/bash
INPUT_DIR=$1
OUTPUT_DIR=$2
mkdir -p $OUTPUT_DIR
in_array() {
local needle array value
needle="${1}"; shift; array=("${@}")
for value in ${array[@]};
do
[ "${value}" == "${needle}" ] && echo "true" && return;
done
echo "false"
}
array=(`find $INPUT_DIR/ -name "*.fastq.gz"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
FASTP_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${FASTP_IN_FILE_LIST[@]}"
do
basename=$i
FILE1=${basename%1.fastq.gz}
IFS='' read -r -a file1_array <<< "$FILE1"
file1_len=(${#file1_array[@]}-1)
array_check=`in_array ${file1_array[$file1_len]}2.fastq.gz ${FASTP_IN_FILE_LIST[@]}`
if [ "${array_check}" == "true" ]; then
IFS='-' read -r -a SEQ_ID <<< "$FILE1"
FASTP='/BiO/program/fastp/current/fastp'
time $FASTP -i ${INPUT_DIR}/${file1_array[$file1_len]}1.fastq.gz -I ${INPUT_DIR}/${file1_array[$file1_len]}2.fastq.gz \
-o ${OUTPUT_DIR}/${file1_array[$file1_len]}1.fastq.gz -O ${OUTPUT_DIR}/${file1_array[$file1_len]}2.fastq.gz \
--length_required 20 --average_qual 20 --detect_adapter_for_pe --correction \
-h ${OUTPUT_DIR}/${SEQ_ID[0]}.html -j ${OUTPUT_DIR}/${SEQ_ID[0]}.json
fi
done
생성한 사용자 분석 코드는 [그림4.2.1-5]와 같이 [Script] View에서 더블 클릭하여 에디터를 통해 작성 및 편집이 가능하며, 에디터에서 코드 자동 완성 기능을 제공하여 보다 편리한 코드 작성을 지원한다.
4.2.2. 사용자 프로그램 등록
작성한 사용자 분석 코드를 실행하기 위해서 사용자 프로그램을 등록한다.
[Figure 4.2.2-1]
[Figure 4.2.2-2]
[Program] View에서 컨텍스트 메뉴의 [New Category] 버튼을 클릭하여 사용자 정의 프로그램을 등록할 루트 카테고리와 서브 카테고리를 생성한다.
워크스페이스, 카테고리, 파이프라인, 프로그램 이름은 알파벳, 숫자, 일부특수문자(-_.)만 가능하며 첫 글자는 알파벳으로 지정되어야 한다. 기타 다른 문자나 공백 입력은 불가하다.
루트카데고리에 서브카데고리가 존재하는 경우와 서브카데고리에 프로그램이나 파이프라인이 존재하는 경우 삭제나 수정이 불가능하다.
[Figure 4.2.2-3]
컨텍스트 메뉴로 루트 카테고리 하위에 서브 카테고리를 생성한다.
[Figure 4.2.2-4]
생성한 서브 카테고리의 컨텍스트 메뉴 [New Program] 버튼을 클릭하여 사용자 프로그램을 등록한다.
[Figure 4.2.2-5]
등록할 사용자 프로그램의 기본정보, 추가정보, 인자값을 설정하여 프로그램을 등록한다.
키워드는 콤마(,)로 구별하여 여러 개의 키워드를 넣을 수 있다.
으로 구성되어 있으며, 설정한 값들은 Default 값이며, 프로그램 실행단계에서 사용자가 새롭게 설정 가능하다.
[Figure 4.2.2-6]
인자값 추가 버튼을 클릭하여 fastp 프로그램의 Input 파라미터를 생성한다. 생성된 파라미터는 수정 및 삭제가 가능하다.
[Figure 4.2.2-7]
생성할 파라미터의 유형을 지정한 후 Default 값을 입력한다. 파라미터의 유형이 Folder나 File 일 경우 Browser 버튼을 통해 파일 GBox의 파일 및 폴더를 불러올 수 있다.
[Figure 4.2.2-8]
[그림 3.3.2-8]과 같이 생성된 인자값을 확인할 수 있다.
[Figure 4.2.2-9]
Output 및 Option 인자값도 동일한 방법으로 파라미터를 생성할 수 있다.
분석 파이프라인 개발
4.3.1. 워크스페이스 생성
[그림 4.3.1-1]과 같이 [Workspace] View의 컨텍스트 메뉴 [New Workspace] 버튼을 클릭하여 워크스페이스를 생성한다.
[Figure 4.3.1-1]
생성할 워크스페이스의 이름과 설명을 작성하고 연관 키워드를 등록한 후 [OK] 버튼을 클릭한다.
[Figure 4.3.1-2]
생성한 워크스페이스의 컨텍스트 메뉴 [New Pipeline] 버튼을 클릭하여 분석 파이프라인을 생성한다.
[Figure 4.3.1-3]
파이프라인 유형에 따라 사용자 정의 파이프라인을 생성하거나, 기존에 등록되어 있던 파이프라인을 선택하여 인스턴스 파이프라인을 생성할 수도 있다.
[Figure 4.3.1-4]
- [Develop a new pipeline] : 사용자 정의 파이프라인 생성
- [Develop an instance pipeline] : 공개된 파이프라인을 선택
[Figure 4.3.1-5]
[그림 4.3.1-5]과 같이 [Workspace] View를 통해 생성된 사용자 정의 파이프라인을 확인할 수 있다.
4.3.2. 분석 파이프라인 디자인
4.3.2-1. 사용자 정의 파이프라인 디자인
[Figure 4.3.2-1]
분석 파이프라인 디자인에 필요한 분석 프로그램을 에디터의 ‘Palette’에서 찾는다.
[Figure 4.3.2-2]
프로그램을 선택한 후 캔버스 위에 마우스로 드래그 앤 드롭 한다.
[Figure 4.3.2-3-1]
필요한 분석 프로그램으로 디자인한 파이프라인을 저장하고, 각각의 분석 프로그램을 더블 클릭하여 실행에 필요한 옵션을 설정한다.
[Figure 4.3.2-3-2]
분석 파이프라인 실행 옵션 설정 후, 캔버스에 위치한 분석 프로그램을 연결하여 하나의 파이프라인을 생성한다.
분석 프로그램간의 연결과 옵션 설정의 순서가 바뀌어도 기능상 문제가 없지만, 분석 프로그램을 연결하면 자동으로 앞 단계 프로그램의 Output을 Input으로 설정하게 되므로 프로그램 설정 후 연결하는 방식을 추천하다.
[Figure 4.3.2-4]
분석 프로그램의 Output 파라미터 우측 끝에 위치한 원 모양의 연결 영역을 다음 단계 분석 프로그램의 Input 파라미터 좌측 연결 영역으로 드래그 앤 드롭하여 사용자 정의 파이프라인을 디자인한다.
[Figure 4.3.2-5]
연결선의 형태는 [그림 4.3.2-5]과 같이 마우스 드래그를 통하여 사용자가 원하는 대로 자유롭게 수정할 수 있다.
4.3.2-2. 인스턴스 파이프라인 디자인
[그림 4.3.2-6]]과 같이 파이프라인 생성 단계에서 인스턴스 파이프라인 유형을 선택하여 기존에 등록되어 있던 파이프라인을 선택할 수 있다..
[Figure 4.3.2-6]
인스턴스 파이프라인 역시 사용자 정의 파이프라인과 같이 각각의 프로그램 별 실행에 필요한 설정을 변경할 수 있다.
4.3.3. Share Analytics Pipeline
[Figure 4.3.3-1]
디자인된 분석 파이프라인은 KOBIC SSO에 가입한 회원 사이 공유가 가능하다.
공유하고 싶은 파이프라인의 컨텍스트 메뉴에서 Shared Pipeline을 클릭한다.
[Figure 4.3.3-2]
공유하려는 파이프라인의 정보와 공유하려는 멤버를 선택할 수 있는 테이블 확인이 가능하다.
[Figure 4.3.3-3]
[Figure 4.3.3-4]
분석 파이프라인 실행
4.4.1. 분석 파이프라인 실행
에디터 상단의 [Run] 버튼을 클릭하여 디자인한 분석 파이프라인을 실행할 수 있다.
[Figure 4.4.1-1]
분석이 실행되면 [Pipeline] View, [Log] View와 에디터를 통해 해당 분석 파이프라인의 진행 상태를 확인할 수 있다. 각 View와 에디터의 [Refresh] 버튼을 통해 분석 파이프라인 실시간 진행 상태를 확인할 수 있다. 분석 파이프라인 실행 시 순차적으로 분석 프로그램이 진행된다.
[Figure 4.4.1-2-1]
[Figure 4.4.1-2-2]
실행 중인 프로그램은 run 상태이며 에디터에서 녹색으로 표시되고, 실행을 마친 complete 상태의 프로그램은 파란색으로 표시된다.
4.4.2. 단일 분석 프로그램 실행
[Figure 4.4.2-1]
각 분석 프로그램의 단일 실행도 가능하다. 캔버스에서 단일 실행할 분석 프로그램에 마우스 오버 시 나타나는 바로 가기 메뉴에서 [Start Node]버튼을 클릭한다.
4.4.3. 데이터 분석 결과 확인
[Figure 4.4.3-1]
[Log] View를 통해 각 분석 프로그램의 로그 정보를 확인한다.
[Figure 4.4.3-2]
해당 로그를 더블 클릭하면 [Console] View에서 분석 과정 및 오류 등의 로그를 확인할 수 있다.
[Figure 4.4.3-3]
[GBoX Browse] View 를 통해 각 분석 프로그램 별로 지정한 Output 경로로 이동하여 결과를 확인할 수 있다.
[Figure 4.4.3-4]
[그림 4.4.3-4]는 Bioinformatics 카테고리의 공개 프로그램 fastp의 분석 결과이다.
공개 서비스 등록
4.5.1. 파이프라인 공개 등록
특정 사용자와의 분석 파이프라인 공유를 위하여 분석 파이프라인을 공개 등록이 가능하다.
[Figure 4.5.1-1]
[그림 4.5.1-1]과 같이 [Workspace] View에서 원하는 분석 파이프라인을 선택하고, 컨텍스트 메뉴 [Register Pipeline] 버튼을 클릭한다.
[Figure 4.5.1-2]
공개 등록이 요청된 분석 파이프라인은 관리자 승인 절차를 거쳐 공개 분석 파이프라인으로 사용이 가능하다.
4.5.2. 프로그램 공개 등록
공개 등록이 요청된 분석 프로그램은 관리자 승인 절차를 거쳐 공개 분석 프로그램으로 등록이 가능하다.
[Figure 4.5.2-1]
[그림 4.5.2-1]과 같이 [Program] View에서 원하는 분석 프로그램을 선택하고, 컨텍스트 메뉴 [Register Program] 버튼을 통해 공개 등록할 수 있다.
공개된 카데고리, 프로그램, 파이프라인은 사용자가 삭제나 수정이 불가능하다.
※ 목차 클릭 시 해당 컨텐츠로 이동합니다.
유전체 분석 파이프라인 소개
5.1.1. WGS
파이프라인
[Figure 5.1.1-1]
사용 분야
Whole-Genome Sequencing
기능 요약
정상 조직과 암 조직의 DNA Sequence를 입력 받아 Read Map to Reference, Read Merge, CleanUp등의 과정을 거쳐 bam 파일을 만들어주고, GATK4를 이용하여 보다 빠른 SNP & InDel의 somatic variant를 찾아, variant annotate를 수행해 주는 파이프라인.
상세 설명
Fastp, Cutadapt, BWA(mem), SortSam, MarkDuplicates, CountBase, BaseRecalibrator, ApplyBQSR, HaplotypeCaller, somalier 총 10단계로 구성된다. 각 단계에서 분석되는 진행 과정은 다음과 같다. 첫 번째 단계인 fastp의 입력데이터로 pair-end 된 fastq.gz 파일이 존재하는 폴더 경로를 설정한다. fastp는 fastq에 대한 전처리를 수행한다. 또한, Quality control 및 filtering의 결과를 JSON 및 HTML 보고서로 시각화하여 제공한다. 이후 Cutadapt는 fastp에 의해 전처리된 fastq.gz 파일을 입력 받아 high-throughput sequencing reads로 부터 adapter sequences, primers, poly-A tails 및 기타 유형의 unwanted sequence를 찾아 제거한다. 이와 같이 Adaptive Trimming의 결과인 fastq 파일은 다음 분석단계인 BWA(mem)로 전달된다. BWA는 human genome과 같은 large genome reference에 대하여 low-divergent sequence를 mapping한다. BWA(mem)은 genome reference를 기반으로, 70bp~10mbp query sequences를 최대 완전 일치로 seeding한 다음 정렬하여 SAM 파일을 생성한다. 이후 sam파일은 SortSam을 통하여 coordinate, queryname, sam record의 다른 속성별로 정렬하여 BAM 파일로 반환된다. 다음 MarkDuplicates 는 bam 파일 내 중복의 read에 대하여 태그를 지정하고, 이를 CountBase, BaseRecalibrator 그리고 ApplyBQSR로 전달한다. CountBase는 총 base의 수를 count한 출력파일을 나타내어준다. 그리고 BaseRecalibrator는 BQSR(Base Quality Score Recalibration)의 two-stage 중 첫 번째 단계를 수행하는데, read group, reported quality score, machine cycle, nucleotide context 등 다양한 covariates 를 기반으로 재 교정한 table을 생성한다. ApplyBQSR는 BQSR의 두 번째 단계를 수행하며 BaseRecalibrator 에서 재 교정된 table을 기반으로 input reads의 기본품질을 재 교정하고, 재 교정된 BAM 파일을 생성한다. 이후 HaplotypeCaller은 활성영역에 있는 haplotypes의 SNPs 및 InDels를 call 하여 read를 reassemble 한 결과로 VCF 파일을 생성하며, gvcf.gz 형태로 압축하여 다음단계로 전달한다. 마지막 분석단계인 somalier 는 informative sites를 추출하고, sequencing 에 따른 관련성을 평가한 결과를 SOMALIER 파일 형태로 저장한다.
NGS 데이터 분석 파이프라인 설계 과정
5.2.1. NGS 데이터 전처리
전처리 워크플로우
[Figure 5.2.1-1]
FASTQ 포맷
[Figure 5.2.1-2]
FASTQ 포맷 cont
Phred* quality score Q with base-calling error probability P
Q = -10 log10P
[Figure 5.2.1-3]
[Figure 5.2.1-4]
FASTA 포맷
[Figure 5.2.1-5]
SAM 포맷
[Figure 5.2.1-6]
SAM 포맷 cont
[Figure 5.2.1-7]
[Figure 5.2.1-8]
[Figure 5.2.1-9]
전처리 단계
[Figure 5.2.1-10]
[Figure 5.2.1-11]
[Figure 5.2.1-12]
Trimming
[Figure 5.2.1-13]
Alignment
[Figure 5.2.1-14]
전처리 단계 cont
Alignment – Aligning to a Reference
[Figure 5.2.1-15]
[Figure 5.2.1-16]
5.2.2. Whole Genome Sequencing Pipeline
파이프라인 요약
[Figure 5.2.2-1]
정상 조직과 암 조직의 DNA Sequence를 입력 받아 Read Map to Reference, Read Merge, CleanUp등의 과정을 거쳐 bam 파일을 만들어주고, GATK4를 이용하여 보다 빠른 SNV & InDel의 somatic variant를 찾아, variant annotate를 수행해 주는 파이프라인.
Fastp, Cutadapt, BWA, GATK4, Somalier
Variant annotate file of Somatic SNP & InDel
등록 파이프라인
[Figure 5.2.2-2]
단계별 설명
1) Quality Check - Quality Control & Adaptive Trimming
Fastp
#!/bin/bash
INPUT_DIR=$1
OUTPUT_DIR=$2
mkdir -p $OUTPUT_DIR
in_array() {
local needle array value
needle="${1}"; shift; array=("${@}")
for value in ${array[@]};
do
[ "${value}" == "${needle}" ] && echo "true" && return;
done
echo "false"
}
array=(`find $INPUT_DIR/ -name "*.fastq.gz"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
FASTP_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${FASTP_IN_FILE_LIST[@]}"
do
basename=$i
FILE1=${basename%1.fastq.gz}
IFS='' read -r -a file1_array <<< "$FILE1"
file1_len=(${#file1_array[@]}-1)
array_check=`in_array ${file1_array[$file1_len]}2.fastq.gz ${FASTP_IN_FILE_LIST[@]}`
if [ "${array_check}" == "true" ]; then
IFS='-' read -r -a SEQ_ID <<< "$FILE1"
FASTP='/BiO/program/fastp/current/fastp'
time $FASTP -i ${INPUT_DIR}/${file1_array[$file1_len]}1.fastq.gz -I ${INPUT_DIR}/${file1_array[$file1_len]}2.fastq.gz \
-o ${OUTPUT_DIR}/${file1_array[$file1_len]}1.fastq.gz -O ${OUTPUT_DIR}/${file1_array[$file1_len]}2.fastq.gz \
--length_required 20 --average_qual 20 --detect_adapter_for_pe --correction \
-h ${OUTPUT_DIR}/${SEQ_ID[0]}.html -j ${OUTPUT_DIR}/${SEQ_ID[0]}.json
fi
done
[Figure 5.2.2-3]
2) Trimming - Quality Control & Adaptive Trimming
Cutadapt
#!/bin/bash
INPUT_DIR=$1
OUTPUT_DIR=$2
mkdir -p $OUTPUT_DIR
in_array() {
local needle array value
needle="${1}"; shift; array=("${@}")
for value in ${array[@]};
do
[ "${value}" == "${needle}" ] && echo "true" && return;
done
echo "false"
}
array=(`find $INPUT_DIR/ -name "*.fastq.gz"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
SORT_IN_FILE_LIST+=("${array[$len]}")
done
index=1
for i in "${CUTADAPT_IN_FILE_LIST[@]}"
do
basename=$i
FILE1=${basename%1.fastq.gz}
IFS='' read -r -a file1_array <<< "$FILE1"
file1_len=(${#file1_array[@]}-1)
array_check=`in_array ${file1_array[$file1_len]}2.fastq.gz ${CUTADAPT_IN_FILE_LIST[@]}`
if [ "${array_check}" == "true" ]; then
READ_1=$INPUT_DIR/${file1_array[$file1_len]}1.fastq.gz
READ_2=$INPUT_DIR/${file1_array[$file1_len]}2.fastq.gz
READ_1_FILE_NAME=$(basename $READ_1)
READ_2_FILE_NAME=$(basename $READ_2)
IFS='.' read -r -a split_name_1 <<< "$READ_1_FILE_NAME"
IFS='.' read -r -a split_name_2 <<< "$READ_2_FILE_NAME"
READ_1_NAME=${split_name_1[0]}
READ_2_NAME=${split_name_2[0]}
CUTADAPT='/BiO/program/python/current/bin/cutadapt'
time $CUTADAPT -q 30 -j 2 -a AGATCGGAAGAGCACACGTCTGAACTCCAGTCAC -A AGATCGGAAGAGCGTCGTGTAGGGAAAGAGTGT --minimum-length 70 --pair-filter=any -o $OUTPUT_DIR/${READ_1_NAME}.fastq -p $OUTPUT_DIR/${READ_2_NAME}.fastq $READ_1 $READ_2
index=$(($index+1))
fi
done
[Figure 5.2.2-4]
3) Alignment - Read Map to Reference
BWA mem
#!/bin/bash
INPUT_DIR=$1
REF_DIR=$2
OUTPUT_DIR=$3
mkdir -p $OUTPUT_DIR
REF_FILE=(`find $REF_DIR/ -name "*.fasta"`)
in_array() {
local needle array value
needle="${1}"; shift; array=("${@}")
for value in ${array[@]};
do
[ "${value}" == "${needle}" ] && echo "true" && return;
done
echo "false"
}
array=(`find $INPUT_DIR/ -name "*.fastq"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
SORT_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${BWA_IN_FILE_LIST[@]}"
do
basename=$i
FILE1=${basename%1.fastq}
IFS='' read -r -a file1_array <<< "$FILE1"
file1_len=(${#file1_array[@]}-1)
array_check=`in_array ${file1_array[$file1_len]}2.fastq ${BWA_IN_FILE_LIST[@]}`
if [ "${array_check}" == "true" ]; then
READ_1=$INPUT_DIR/${file1_array[$file1_len]}1.fastq
READ_2=$INPUT_DIR/${file1_array[$file1_len]}2.fastq
INPUT_FILE_NAME=$(basename $READ_1 .fastq)
IFS='_' read -r -a NAME <<< "$INPUT_FILE_NAME"
IFS='-' read -r -a FASTQ_2D_ID <<< "${NAME[0]}"
OUTPUT_SAM=$OUTPUT_DIR/${NAME}.sam
BWA='/BiO/program/bwa/current/bwa'
$BWA mem \
-M -R "@RG\tID:${INPUT_DIR}\tPL:Nova6000S4\tLB:Truseq_PCRFREE\tSM:${FASTQ_2D_ID}" -v 1 \
-t 1 $REF_FILE $READ_1 $READ_2 > $OUTPUT_SAM
fi
done
[Figure 5.2.2-5]
4) Alignment - Read Merge
GATK SortSam
#!/bin/bash
INPUT_DIR=$1
OUTPUT_DIR=$2
mkdir -p $OUTPUT_DIR
array=(`find $INPUT_DIR/ -name "*.sam"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
SORT_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${SORT_IN_FILE_LIST[@]}"
do
basename=$(basename $i)
INPUT_FILE_NAME=$(basename $i .sam)
EXTENSION=${basename#*.}
if [ $EXTENSION == 'sam' ]; then
IFS='-' read -r -a FNAME <<< "$INPUT_FILE_NAME"
IFS='_' read -r -a SEQ_ID <<< "$FNAME"
INPUT_FILE=$INPUT_DIR/${INPUT_FILE_NAME}.sam
SORTSAM='/BiO/program/gatk/current/gatk SortSam'
time $SORTSAM -I $INPUT_FILE -O $OUTPUT_DIR/${INPUT_FILE_NAME}.bam -SO coordinate
fi
done
[Figure 5.2.2-6]
5) Alignment - CleanUp
GATK MarkDuplicates
#!/bin/bash
INPUT_DIR=$1
OUTPUT_DIR=$2
mkdir -p $OUTPUT_DIR
array=(`find $INPUT_DIR/ -name "*.bam"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
MARK_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${MARK_IN_FILE_LIST[@]}"
do
basename=$(basename $i)
INPUT_FILE_NAME=$(basename $i .bam)
EXTENSION=${basename#*.}
if [ $EXTENSION == 'bam' ]; then
INPUT_FILE=$INPUT_DIR/${INPUT_FILE_NAME}.bam
MARKDUPLICATES='/BiO/program/gatk/current/gatk MarkDuplicates'
time $MARKDUPLICATES \
-I $INPUT_FILE \
-O $OUTPUT_DIR/${INPUT_FILE_NAME}.bam \
-M $OUTPUT_DIR/${INPUT_FILE_NAME}.table \
--REMOVE_SEQUENCING_DUPLICATES false
echo "$MARKDUPLICATES -I $INPUT_FILE -O $OUTPUT_DIR/${INPUT_FILE_NAME}.bam -M $OUTPUT_DIR/${INPUT_FILE_NAME}.table --REMOVE_SEQUENCING_DUPLICATES true"
fi
done
[Figure 5.2.2-7]
6) Alignment - Base Count
GATK CountBases
INPUT_DIR=$1
REF_FILE=$2
OUTPUT_DIR=$3
mkdir -p $OUTPUT_DIR
array=(`find $INPUT_DIR/ -name "*.bam"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
COUNT_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${COUNT_IN_FILE_LIST[@]}"
do
basename=$(basename $i)
INPUT_FILE_NAME=$(basename $i .bam)
EXTENSION=${basename#*.}
if [ $EXTENSION == 'bam' ]; then
INPUT_FILE=$INPUT_DIR/${INPUT_FILE_NAME}.bam
/samtools/1.6/samtools index $INPUT_FILE
COUNTBASES='/BiO/program/gatk/current/gatk CountBases'
time $COUNTBASES \
-I $INPUT_FILE \
-O $OUTPUT_DIR/${INPUT_FILE_NAME}.count \
-RF NotSecondaryAlignmentReadFilter \
-L $REF_FILE
fi
done
[Figure 5.2.2-8]
7) Alignment - Base Quality Score Recalibration
GATK BaseRecalibrator
#!/bin/bash
INPUT_DIR=$1
REF_FILE1=$2
REF_FILE2=$3
REF_FILE3=$4
REF_FILE4=$5
OUTPUT_DIR=$6
mkdir -p $OUTPUT_DIR
array=(`find $INPUT_DIR/ -name "*.bam"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
BASE_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${BASE_IN_FILE_LIST[@]}"
do
basename=$(basename $i)
INPUT_FILE_NAME=$(basename $i .bam)
EXTENSION=${basename#*.}
if [ $EXTENSION == 'bam' ]; then
INPUT_FILE=$INPUT_DIR/${INPUT_FILE_NAME}.bam
BASERECALIBRATOR='/BiO/program/gatk/current/gatk BaseRecalibrator'
time $BASERECALIBRATOR \
-I $INPUT_DIR/${INPUT_FILE_NAME}.bam \
-R ${REF_FILE1} \
--known-sites ${REF_FILE2} \
--known-sites ${REF_FILE3} \
--known-sites ${REF_FILE4} \
-O $OUTPUT_DIR/${INPUT_FILE_NAME}.table
fi
done
[Figure 5.2.2-9]
8) Alignment - Apply BQSR
GATK ApplyBQSR
#!/bin/bash
INPUT_DIR=$1
REF_FILE=$2
REF_DIR=$3
OUTPUT_DIR=$4
mkdir -p $OUTPUT_DIR
array=(`find $INPUT_DIR/ -name "*.bam"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
BQSR_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${BQSR_IN_FILE_LIST[@]}"
do
basename=$(basename $i)
INPUT_FILE_NAME=$(basename $i .bam)
EXTENSION=${basename#*.}
if [ $EXTENSION == 'bam' ]; then
IFS='-' read -r -a FNAME <<< "$INPUT_FILE_NAME"
IFS='_' read -r -a SEQ_ID <<< "$FNAME"
echo $INPUT_FILE_NAME
echo $FNAME
INPUT_FILE=$INPUT_DIR/${INPUT_FILE_NAME}.bam
APPLYBQSR='/BiO/program/gatk/current/gatk ApplyBQSR'
time $APPLYBQSR \
-R $REF_FILE \
-I $INPUT_FILE \
-bqsr $REF_DIR/${INPUT_FILE_NAME}.table \
-O $OUTPUT_DIR/${SEQ_ID[0]}_v1.0.0.bam \
--static-quantized-quals 10 \
--static-quantized-quals 20 \
--static-quantized-quals 30
fi
done
[Figure 5.2.2-10]
9) Alignment - Extract&Filter of SNPs, Indels
GATK HaplotypeCaller
#!/bin/bash
echo "Total Param= $#, PROG: $0, param1 = $1, param2 = $2, param3 = $3, param4 = $4";
if [ "$#" -lt 4 ]; then
echo "$# is Illegal number of parameters."
echo "Usage: $0 input dir, reference file, output dir"
exit 1
fi
args=("$@")
for (( i=0; i<$#; i++ ))
do
echo "$i th parameter = ${args[$i]}";
done
INPUT_DIR=$1 # BAM 파일
REF_FILE1=$2
REF_FILE2=$3
OUTPUT_DIR=$4 # VCF 파일
mkdir -p $OUTPUT_DIR
array=(`find $INPUT_DIR/ -name "*.bam"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
HAPLO_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${HAPLO_IN_FILE_LIST[@]}"
do
basename=$(basename $i)
INPUT_FILE_NAME=${basename%.*}
EXTENSION=${basename##*.}
if [ $EXTENSION == 'bam' ]; then
IFS='-' read -r -a FNAME <<< "$INPUT_FILE_NAME"
IFS='_' read -r -a SEQ_ID <<< "$FNAME"
INPUT_FILE=$INPUT_DIR/${INPUT_FILE_NAME}.bam
HAPLOTYPECALLER='/BiO/program/gatk/current/gatk HaplotypeCaller'
time $HAPLOTYPECALLER -I $INPUT_FILE -R $REF_FILE1 -O $OUTPUT_DIR/${SEQ_ID}_v1.0.0.vcf -OVI true --emit-ref-confidence GVCF -L $REF_FILE2
echo "$HAPLOTYPECALLER -I $INPUT_FILE -R $REF_FILE1 -O $OUTPUT_DIR/${SEQ_ID}_v1.0.0.vcf -OVI true --emit-ref-confidence GVCF -L $REF_FILE2"
mv $OUTPUT_DIR/${SEQ_ID}_v1.0.0.vcf $OUTPUT_DIR/${SEQ_ID}_v1.0.0.gvcf
echo "mv $OUTPUT_DIR/${SEQ_ID}_v1.0.0.vcf $OUTPUT_DIR/${SEQ_ID}_v1.0.0.gvcf"
BGZIP='/BiO/program/htslib/current/bgzip'
$BGZIP -c $OUTPUT_DIR/${SEQ_ID}_v1.0.0.gvcf > $OUTPUT_DIR/${SEQ_ID}_v1.0.0.gvcf.gz
echo "$BGZIP -c $OUTPUT_DIR/${SEQ_ID}_v1.0.0.gvcf > $OUTPUT_DIR/${SEQ_ID}_v1.0.0.gvcf.gz"
TABIX='/BiO/program/htslib/current/tabix'
$TABIX -p vcf $OUTPUT_DIR/${SEQ_ID}_v1.0.0.gvcf.gz
echo "$TABIX -p vcf $OUTPUT_DIR/${SEQ_ID}_v1.0.0.gvcf.gz"
fi
done
[Figure 5.2.2-11]
10) Alignment - Variant Annotation
Somalier
#!/bin/bash
INPUT_DIR=$1
REF_FILE1=$2
REF_FILE2=$3
OUTPUT_DIR=$4
mkdir -p $OUTPUT_DIR
array=(`find $INPUT_DIR/ -name "*.gvcf.gz"`)
for i in "${array[@]}"
do
FILE=${i##*/}
IFS='' read -r -a array <<< "$FILE"
len=(${#array[@]}-1)
echo "${array[$len]}"
SOMAL_IN_FILE_LIST+=("${array[$len]}")
done
for i in "${SOMAL_IN_FILE_LIST[@]}"
do
INPUT_FILE_NAME=`basename "$i" | cut -d'.' -f-3`
EXTENSION=`echo "$i" | cut -d'.' -f4-`
if [ $EXTENSION == 'gvcf.gz' ]; then
INPUT_FILE=$INPUT_DIR/${INPUT_FILE_NAME}.gvcf.gz
IFS='-' read -r -a FNAME <<< "$INPUT_FILE_NAME"
IFS='_' read -r -a SEQ_ID <<< "$FNAME"
SOMALIER='/somalier/0.2.12/somalier'
time $SOMALIER extract -d $OUTPUT_DIR -s ${REF_FILE2} -f ${REF_FILE1} $INPUT_FILE
fi
done
[Figure 5.2.2-12]
결과 화면
[Figure 5.2.2-13]
[Figure 5.2.2-14]
[Figure 5.2.2-15]
[Figure 5.2.2-16]
@ERR792543.3 HWI-ST333_0255_FC:4:1101:1235:2392/1 CTGCCAATTCCCAATTATATTCTTGGAGAAGCTCATTAGGATAATGGAAATCAATCACTTTGGTTGATCTATCGAAACTT
+
CBCFFFFFHGHHGIJJIJIIJJJJJJGIIIJJGIGIJIJJJJGIIEIFEIHGIJJJJJJJFGGHIJIEHJGIJGIGHBEC
@ERR792543.7 HWI-ST333_0255_FC:4:1101:1228:2438/1 CTCCGGAGTGTAGGCTCCCCATATCTCAGCAAGTGGCCAAAGGTTCGTAATGCCATCTCTGCACNAATCTCCTCCCCCAT
+
@@@DFFFFCDHF8EHIIIIIIIIIIIIIIIIIGHGHIIIIIII?DDF;BFG<FHHCHEIFGCHH#-5;?DEEEEEBBDDC
@ERR792543.8 HWI-ST333_0255_FC:4:1101:1179:2464/1 GCCAGTCATGCCTGCCTGAGACGCCCCGCGGTTGGTGCCCATCTGTAACCCGATCACGTTCTTGNCCTCTTNCAGCTGGT
+
@CCFFFFFHHHHHJJJJJIJJJIIJJJIIJIDHIJFHIIJEHFHEHHHFFFFDCBDDBBDDDDC#,58??C#+8<<@CCC
@ERR792543.10 HWI-ST333_0255_FC:4:1101:1400:2280/1 CACAAACCTTGTTCTAATTTATGTGCACTTCTGAATAAAAATAACACCCTTTTGCTTTAATGCAATATTGATTTTATCAC
+
@CCDFFDFFHHHHIIGCHIIIIFIGGGGIIHIGIJIIJJIJIIJIJIGGIJIJJJJIJGGDEHGGIJIIHGIJJIHHIEH
@ERR792543.12 HWI-ST333_0255_FC:4:1101:1389:2303/1 ATGCGCTCCGCCGCTGTCCTGGCTCTTCTGCTCTGCGCCGGGCAAGTCACTGCGCTCCCTGTGAACAGCCCTATGAATAA
+
@@CFDFFFFHFD:FGGFHIIIIIIIIIIIGIIGGIIIIIIIFHFFFEACCEECCCC:@B?:@CEDCCCB?@CCCACDEDC
@ERR792543.14 HWIST333_0255_FC:4:1101:1495:2309/1
TCTCTCTCCTAATGAAAAAGTTTGTTTCTCTTTTACATTAGTAACGTATGTAACGGGTGGTATGTCTTTCTTTGCTTTGG
+
CCCFFFFFHHHDFIJJJJJJJJIJJIJJJJJJIJIGHIJGGIJJJJJJJIFGGIJFG<AH4=EEGGIJHGHHHGFCDFDD
@ERR792543.15 HWI-ST333_0255_FC:4:1101:1274:2316/1
GCCCAACTGTCCTGCTGATCTGAAGTAAGACAACTAGCCTTCTACATCAAATAATTCTGTGAGGCAATTTGAGTCAG
+
@@@DD?DDAC:3,<CGBFHHHIBCGHFEDEHF;EFEIFII@BFBGGI<DFIIGF@4BF>84<BDEFEEDGIIFFDF@
@ERR792543.16 HWI-ST333_0255_FC:4:1101:1467:2316/1
TGCAGTATAGATGGGATATGATGCATAGGCTTGGAGAACCACAGGCAAGGATGAGAGAAGAGAATATGGAAAGGATTG
@SQ SN:chr3 LN:198295559
@SQ SN:chr4 LN:190214555
@SQ SN:chr5 LN:181538259
@SQ SN:chr6 LN:170805979
@SQ SN:chr7 LN:159345973
@SQ SN:chr8 LN:145138636
@SQ SN:chr9 LN:138394717
@SQ SN:chr10 LN:133797422
@SQ SN:chr11 LN:135086622
@SQ SN:chr12 LN:133275309
@SQ SN:chr13 LN:114364328
@SQ SN:chr14 LN:107043718
@SQ SN:chr15 LN:101991189
@SQ SN:chr16 LN:90338345
@SQ SN:chr17 LN:83257441
@SQ SN:chr18 LN:80373285
@SQ SN:chr19 LN:58617616
@SQ SN:chr20 LN:64444167
@SQ SN:chr21 LN:46709983
@SQ SN:chr22 LN:50818468
@SQ SN:chrX LN:156040895
@SQ SN:chrY LN:57227415
@SQ SN:chrM LN:16569
@SQ SN:chr1_KI270706v1_random LN:175055
@SQ SN:chr1_KI270707v1_random LN:32032
@SQ SN:chr1_KI270708v1_random LN:127682
@SQ SN:chr1_KI270709v1_random LN:66860
@SQ SN:chr1_KI270710v1_random LN:40176
@SQ SN:chr1_KI270711v1_random LN:42210
@SQ SN:chr1_KI270712v1_random LN:1760438
#:GATKTable:Arguments:Recalibration argument collection values used in this run
Argument Value
binary_tag_name null
covariate ReadGroupCovariate,QualityScoreCovariate,ContextCovariate,CycleCovariate
default_platform null
deletions_default_quality 45
force_platform null
indels_context_size 3
insertions_default_quality 45
low_quality_tail 2
maximum_cycle_value 500
mismatches_context_size 2
mismatches_default_quality -1
no_standard_covs false
quantizing_levels 16
recalibration_report null
run_without_dbsnp false
solid_nocall_strategy THROW_EXCEPTION
solid_recal_mode SET_Q_ZERO
#:GATKTable:3:94:%d:%d:%d:;
#:GATKTable:Quantized:Quality quantization map
QualityScore Count QuantizedScore
0 0 6
1 0 6
2 0 6
3 0 6
4 0 6
5 0 6
6 3784 6
##fileformat=VCFv4.2
##ALT=<ID=NON_REF,Description="Represents any possible alternative allele not already represented at this location by REF and ALT">
##FILTER=<ID=LowQual,Description="Low quality">
##FORMAT=<ID=AD,Number=R,Type=Integer,Description="Allelic depths for the ref and alt alleles in the order listed">
##FORMAT=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth (reads with MQ=255 or with bad mates are filtered)">
##FORMAT=<ID=GQ,Number=1,Type=Integer,Description="Genotype Quality">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=MIN_DP,Number=1,Type=Integer,Description="Minimum DP observed within the GVCF block">
##FORMAT=<ID=PGT,Number=1,Type=String,Description="Physical phasing haplotype information, describing how the alternate alleles are phased in relation to one another; will always be heterozygous and is not intended to describe called alleles">
##FORMAT=<ID=PID,Number=1,Type=String,Description="Physical phasing ID information, where each unique ID within a given sample (but not across samples) connects records within a phasing group">
##FORMAT=<ID=PL,Number=G,Type=Integer,Description="Normalized, Phred-scaled likelihoods for genotypes as defined in the VCF specification">
##FORMAT=<ID=PS,Number=1,Type=Integer,Description="Phasing set (typically the position of the first variant in the set)">
##FORMAT=<ID=SB,Number=4,Type=Integer,Description="Per-sample component statistics which comprise the Fisher's Exact Test to detect strand bias.">
##GATKCommandLine=<ID=HaplotypeCaller,CommandLine="HaplotypeCaller --emit-ref-confidence GVCF --output /bioex/output/haplotype_caller/ERR792543_v1.0.0.vcf --intervals /bioex/reference/references_hg38_v0_wgs_metrics_intervals.interval_list --input /bioex/output/apply_bqsr/ERR792543_v1.0.0.bam --reference /bioex/reference/resources_broad_hg38_v0_Homo_sapiens_assembly38.fasta --create-output-variant-index true --use-posteriors-to-calculate-qual false --dont-use-dragstr-priors false --use-new-qual-calculator true --annotate-with-num-discovered-alleles false --heterozygosity 0.001 --indel-heterozygosity 1.25E-4 --
somalier 결과 파일
[그림 5.2.2-17]과 같이 somalier는 결과를 [파일명].somalier 파일로 저장한다.
[Figure 5.2.2-17]
INPUT | |||
---|---|---|---|
Name | Required | Value | Type |
data area 01 | data area 01 data area 01data area 01data area 01data area 01data area 01 | data area 01data area 01data area 01data area 01data area 01data area 01data area 01 | data area 01 |
OUTPUT | |||
---|---|---|---|
Name | Required | Value | Type |
content area 01 | content area 01content area 01content area 01 | content area 01 | content area 01 |
content area 02 | content area 02 | content area 02 | content area 02 |
OPTION | |||
---|---|---|---|
Name | Required | Value | Type |
content area 01 | content area 01 | content area 01 | content area 01 |
content area 03 | content area 03 | content area 03 | content area 03 |
content area 04 | content area 04 | content area 04 | content area 04 |