본문 바로가기
생물정보학/Tools

[Tool] Expansion Hunter 설치 및 사용방법

by HanJoohyun 2022. 11. 24.
반응형

 

 

 

 

안녕하세요 생물정보학자 한주현 입니다.

오늘은 Expansion Hunter 툴의 설치 방법과 사용방법 그리고 결과파일에 대해서 알아보겠습니다.

소개

Expansion Hunter는 sequencer로 유명한 Illumina 에서 만든 툴로 기준 서열 유전체(refernece genome)에 정렬된 BAM 포맷에서 반복되는 서열을 찾아주는 툴입니다. 반복되는 서열이 질환을 일으키는 질병 중 유명한 예시로 Huntington’s Disease가 있습니다. 이 질환은 4번 염색체인 4p16.3에서 HTT 유전자의 CAGCAGCAGCAG… 와 같은 (CAG)의 반복 서열이 원인이 됩니다. 이러한 반복서열을 찾아주는 툴이 Expansion Hunter 입니다.

설치 방법

설치에는 두 가지 방법이 있습니다.

하나는 미리 컴파일된 파일을 받아서 바로 실행하는 방법.

다른 하나는 소스코드를 받은 뒤 서버에서 컴파일 하는 방법.

두 방법 모두 좋은 방법입니다만, 일반적으로 서버에 맞는 최적의 사양으로 툴을 수행하기 위해서는 소스코드를 받아 컴파일을 하는 것을 추천드립니다만, 설치가 쉽지 않은 경우 (아무리 해도 설치가 되지 않는다 ㅜㅜ) 미리 컴파일 된 파일을 받아서 수행하여 설치 과정에서 씨름을 하며 시간을 보내는 것 보다 빨리 결과를 얻는 것도 좋은 방법입니다.

Pre-compiled binary download - 미리 컴파일된 파일 다운 받기

Pre-compiled binary를 다운받기 위해 다음 링크에 들어갑니다.

https://github.com/Illumina/ExpansionHunter/releases

 

링크를 들어가면 아래와 같이 페이지가 나오게 되고,

조금 더 스크롤을 내리면, 아래와 같이 다운로드 할 수 있는 링크들이 있습니다.

주소를 복사하고 아래와 같이 wget으로 다운로드 후 tar로 압축을 해제합니다.

Linux 기준으로 설명하겠습니다.

맥의 경우 macOS 로 된 파일을 받아서 실행하면 잘 되는것 확인하였습니다. 테스트 해본 맥은 M1 맥입니다.

wget https://github.com/Illumina/ExpansionHunter/releases/download/v5.0.0/ExpansionHunter-v5.0.0-linux_x86_64.tar.gz
tar xf ExpansionHunter-v5.0.0-linux_x86_64.tar.gz

압축이 풀리면 압축이 풀린 디렉터리에 들어간 다음 ExpansionHunter를 실행합니다

cd ExpansionHunter-v5.0.0-linux_x86_64
cd bin
./ExpansionHunter

커맨드 수행 시 아래와 같이 나오게 되면 성공!

2022-11-23T21:56:35,[Starting ExpansionHunter v5.0.0]

Basic options:
  -h [ --help ]                         Print help message
  -v [ --version ]                      Print version number
  --reads arg                           BAM/CRAM file with aligned reads
  --reference arg                       FASTA file with reference genome
  --variant-catalog arg                 JSON file with variants to genotype
  --output-prefix arg                   Prefix for the output files
  --region-extension-length arg (=1000) How far from on/off-target regions to
                                        search for informative reads
  --sex arg (=female)                   Sex of the sample; must be either male
                                        or female
  --log-level arg (=info)               trace, debug, info, warn, or error

Advanced options:
  -a [ --aligner ] arg (=dag-aligner)   Specify which aligner to use
                                        (dag-aligner or path-aligner)
  -m [ --analysis-mode ] arg (=seeking) Specify which analysis workflow to use
                                        (seeking or streaming)
  -n [ --threads ] arg (=1)             Number of threads to use

Compile from source code - 소스코드로 부터 컴파일 하기

제공되는 pre-compiled binary가 아닌 직접 소스코드로 부터 컴파일해서 사용하고 싶은 분들을 위해 적어보겠습니다.

먼저 필요한 package들을 설치해줍니다

CentOS

sudo yum install bzip2-devel libcurl-devel libstdc++-static openssl-devel xz-devel zlib-devel

Ubuntu

sudo apt-get install libbz2-dev libcurl4-openssl-dev liblzma-dev libssl-dev zlib1g-dev

아래 링크에서 소스코드를 파일을 다운 받습니다. zip 이던 tar.gz 던 상관없습니다만 저는 tar.gz 기준으로 설명드리겠습니다.

https://github.com/Illumina/ExpansionHunter/releases

wget https://github.com/Illumina/ExpansionHunter/archive/refs/tags/v5.0.0.tar.gz
tar xf v5.0.0.tar.gz
cd ExpansionHunter-5.0.0
mkdir build
cd build
cmake ..
make

설치가 잘 되었다면 다음 경로에 파일이 생기고

build/install/bin/ExpansionHunter

이 파일을 실행하면 아래와 같은 화면을 볼 수 있습니다.

2022-11-23T21:56:35,[Starting ExpansionHunter v5.0.0]

Basic options:
  -h [ --help ]                         Print help message
  -v [ --version ]                      Print version number
  --reads arg                           BAM/CRAM file with aligned reads
  --reference arg                       FASTA file with reference genome
  --variant-catalog arg                 JSON file with variants to genotype
  --output-prefix arg                   Prefix for the output files
  --region-extension-length arg (=1000) How far from on/off-target regions to
                                        search for informative reads
  --sex arg (=female)                   Sex of the sample; must be either male
                                        or female
  --log-level arg (=info)               trace, debug, info, warn, or error

Advanced options:
  -a [ --aligner ] arg (=dag-aligner)   Specify which aligner to use
                                        (dag-aligner or path-aligner)
  -m [ --analysis-mode ] arg (=seeking) Specify which analysis workflow to use
                                        (seeking or streaming)
  -n [ --threads ] arg (=1)             Number of threads to use

저 같은 경우 make 과정에서 아래와 같이 unused-variable 이 중간에 나와서 제대로 설치가 되지 않았는데요

/tool/ehunter/io/SampleStats.cpp:67:20: error: unused variable 'isSupplementary' [-Werror=unused-variable]
         const bool isSupplementary = htsAlignmentPtr->core.flag & kSupplementaryAlign;
                    ^~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
make[5]: *** [CMakeFiles/ExpansionHunterLib.dir/build.make:589: CMakeFiles/ExpansionHunterLib.dir/io/SampleStats.cpp.o] Error 1
make[4]: *** [CMakeFiles/Makefile2:196: CMakeFiles/ExpansionHunterLib.dir/all] Error 2
make[3]: *** [Makefile:160: all] Error 2
make[2]: *** [CMakeFiles/ehunter.dir/build.make:131: ehunter-prefix/src/ehunter-stamp/ehunter-build] Error 2
make[1]: *** [CMakeFiles/Makefile2:109: CMakeFiles/ehunter.dir/all] Error 2
make: *** [Makefile:103: all] Error 2

해당 오류를 보면 SampleStats.cpp 파일에서 isSupplementary 라는 변수가 사용되지 않는데 정의되어서 오류가 발생한것입니다.

간단히 해결해본다면 해당 변수를 선언하지 않게 //comment 로 막아주면 되겠습니다. 아래와 같이 말이죠.

while ((ret = sam_read1(htsFilePtr, htsHeaderPtr, htsAlignmentPtr)) >= 0)
{
    //const bool isSupplementary = htsAlignmentPtr->core.flag & kSupplementaryAlign;
    const bool isSecondary = htsAlignmentPtr->core.flag & kSecondaryAlign;
    const bool isPrimaryAlign = /*(!isSupplementary) &&*/ (!isSecondary);
    if (isPrimaryAlign)
    {
        readLength = htsAlignmentPtr->core.l_qseq;
        break;
    }
}

이렇게 해서 소스코드로 부터 컴파일까지 하는 방법으로 설치과정을 마쳤습니다.

설치 참고 URL

https://github.com/Illumina/ExpansionHunter/blob/master/docs/02_Installation.md

사용 방법

기본적인 command line 은 아래와 같습니다.

ExpansionHunter --reads <aligned reads BAM/CRAM file/URL> \
                --reference <reference genome FASTA file> \
                --variant-catalog <JSON file specifying variants to genotype> \
                --output-prefix <Prefix for the output files>

인자를 하나씩 설명 드리면,

--reads 에 들어가는 인자는 reference sequence에 align 된 BAM 파일을 넣을 수 있고, BAM과 유사한 포맷인 CRAM 도 지원하며, http와 같은 주소나 AWS S3에 올라간 S3 형식의 주소도 들어갈 수 있습니다.

--reference 에 들어가는 인자는 reference genome 서열이 담긴 FASTA 파일이 들어갑니다.

--variant-catalog 에 들어가는 인자가 ExpansionHunter에서 가장 핵심이 되는 파일인데 이 파일 내부에 미리 설정된 반복서열과 그 위치가 적혀있습니다. Huntington’s Disease를 유발하는 HTT 를 살펴보면 아래와 같습니다.

{
    "LocusId": "HTT",
    "LocusStructure": "(CAG)*CAACAG(CCG)*",
    "ReferenceRegion": [
        "4:3074876-3074933",
        "4:3074939-3074966"
    ],
    "VariantId": [
        "HTT",
        "HTT_CCG"
    ],
    "VariantType": [
        "Repeat",
        "Repeat"
    ]
},

이 파일은 툴을 설치 할 때 들어있으므로 따로 받거나 하지 않으셔도 됩니다. 추가로 형식에만 맞춘다면 내가 원하는 반복서열을 찾아낼 수도 있습니다.

추가적인 인자로는

성별 : --sex male 또는 female(기본값)

스레드 개수: --thread 1 (기본값)

가 들어갈 수 있습니다.

참고 URL

https://github.com/Illumina/ExpansionHunter/blob/master/docs/03_Usage.md

결과

분석 결과는 VCF나 JSON 파일로 나오게 됩니다.

VCF 결과 예시

아래 결과는 VCF 결과 파일의 예시입니다.

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  variants
chr1    2005    .       C       <STR2>,<STR10>  .       PASS    END=2008;REF=1;RL=1;RU=CAG;VARID=SNV_AND_STR_chr1:2005-2008;REPID=SNV_AND_STR_chr1:2005-2008  GT:SO:REPCN:REPCI:ADSP:ADFL:ADIR:LC     1/2:SPANNING/SPANNING:2/10:2-2/10-10:38/29:7/20:0/0:99.648649

이 예시를 해석해보면 RU=CAG 즉 CAG의 반복이 첫 번째 ALT인 는 2회 반복 된다는 의미이고 두 번째 ALT인 은 10회 반복 된다는 의미입니다.

JSON 결과 예시

{
  "LocusResults": {
    "SNV_AND_STR": {
      "AlleleCount": 2,
      "Coverage": 99.6486486486486,
      "LocusId": "SNV_AND_STR",
      "ReadLength": 150,
      "Variants": {
        "SNV_AND_STR_chr1:2005-2008": {
          "CountsOfFlankingReads": "(0, 1), (1, 4), (2, 2), (3, 1), (4, 2), (5, 1), (6, 1), (7, 2), (8, 3), (9, 3)",
          "CountsOfInrepeatReads": "()",
          "CountsOfSpanningReads": "(2, 38), (10, 29)",
          "Genotype": "2/10",
          "GenotypeConfidenceInterval": "2-2/10-10",
          "ReferenceRegion": "chr1:2005-2008",
          "RepeatUnit": "CAG",
          "VariantId": "SNV_AND_STR_chr1:2005-2008",
          "VariantSubtype": "Repeat",
          "VariantType": "Repeat"
        }
      }
    }
  },
  "SampleParameters": {
    "SampleId": "variants",
    "Sex": "Female"
  }
}

위 VCF와 같은 변이 결과를 JSON 형태로 표시하였습니다. 복잡하긴한데 살펴보자면, 이 변이는 “VariantType”에서 “Repeat”으로 반복 서열의 변이이고, RepeatUnit을 보면 “CAG”가 반복되는 서열입니다. 몇 회 반복되었는지는 “CountsOfSpanningReads”에 나옵니다. 이는 (n, m) 으로 나타나는데 n은 서열이 몇 번 반복되는지 나타내는 것이고, m은 그러한 리드가 몇 회 나타나는지를 알려줍니다.

결과 파일에 대한 자세한 사항은 아래 링크를 참조해주세요

https://github.com/Illumina/ExpansionHunter/blob/master/docs/05_OutputJsonFiles.md

https://github.com/Illumina/ExpansionHunter/blob/master/docs/06_OutputVcfFiles.md

마치며

오늘은 ExpansionHunter 툴의 설치방법, 사용방법 그리고 결과에 대해서 알아보았습니다.

여러분들께 도움이 되셨으면 좋겠습니다!

 

 

 

 

 

반응형

댓글