Post

SCENIC

논문 정보

Aibar, Sara, et al. “SCENIC: single-cell regulatory network inference and clustering.” Nature methods 14.11 (2017): 1083-1086.

Installation

투 스텝으로 나눠지는데

  • Running SCENIC (VSN: includes Steps 1-4)
  • Exploring SCENIC’s output (R & SCope)

VSN-pipeline

SCENIC 돌릴 때 필요하다.

Dependencies
NextflowDocker 또는 Singularity 를 필요로 한다.

Nextflow 설치

👉 Nextflow 홈페이지

👉 Nextflow Github release page
👉 Nextflow Github release v21.04.3 page

일반설치

1
2
3
4
5
6
7
8
9
# java version check
java -version # 11 이상이어야함.

# install
## 현위치에 nextflow 라고 다운 받기 때문에 시작하기전에 위치 잘 잡고 시작하자.
curl -s https://get.nextflow.io | bash 

# test
./nextflow run hello

버전 선택해서 source code로 설치

Dependencies
Compiler Java 8 or later & Runtime Java 8 or later (나아는 java 11)
1
2
3
4
5
6
7
8
wget https://github.com/nextflow-io/nextflow/archive/refs/tags/v21.04.3.tar.gz
tar -xvzf v21.04.3.tar.gz

cd nextflow-21.04.3
make compile ./ # memory부족하면 에러나니까 알아서 처신잘하자
make pack && make install

echo -e "PATH=/source/nextflow-21.04.3:$PATH" >> ~/.bash_profile 

Singularity 설치

Docker로 설치해도 됨. Docker는 해봐서 이번에 Singularity. Singularity도 이미지 배포할때 사용하는것 같은데 HPC에 더 용이하다고 함.

👉 SyLabs/Singularity 홈페이지

👉 Singularity User guide

Singularity는 무료버전인 Comunity Edition(SingularityCE)과 상업버전인 SingularityPRO로 나뉘어있다. SingularityCE랑 Singularity는 똑같은거니까 쫄지말고 설치하자. 내가 쫄아서 찾아본건 아님

01.Installing Go

SingularityCE가 Go로 작성돼 있어서. 가장 최신버전 Go 설치하는 것을 권장. 👉 Go download page

2023 Aug 기준 최신버전 = go1.21.0

보통 GCC설치할때 --enable-languages 에 설정해주면 따로 설치 안해도 되긴한다. 한번 할때 잘해야하는 이유

which go 해서 있는지 확인. 없으면 깔아준다.

1
2
3
4
5
6
wget https://go.dev/dl/go1.21.0.linux-amd64.tar.gz

tar -xvzf go1.21.0.linux-amd64.tar.gz

echo -e "PATH=/path-of-go/go/bin:$PATH" >> ~/.bash_profile 
# 설정했는데도 그 다음 singularity 설치때 go compiler가 없다고 나오면 bashrc 맨 윗줄에 추가해보자

02.Download & Configure SingularityCE

Singularity github 가서 최신버전 확인하기. 2023 Aug 기준 sigularity ver.4 출시 앞두고 있었는데 베타테스트 기간리아 3.11.4설치함.

1
2
3
4
5
6
7
8
wget https://github.com/sylabs/singularity/releases/download/v3.11.4/singularity-ce-3.11.4.tar.gz

tar -xvzf singularity-ce-3.11.4.tar.gz

cd singularity-ce-3.11.4
./mconfig --prefix=/source/singularity-ce-3.11.4  --without-seccomp --without-conmon # 위치는 알아서 잡기, 아니면 prefix 옵션빼던지
make -C builddir
make -C builddir install

Error 모음집

  • 🚨 checking: libseccomp+headers... no (mconfig 단계)
    seccomp headers are required to build Singularity with seccomp support.
    To disable seccomp support run mconfig using '--without-seccomp'. 이런 에러가 난다?

– 💡해결법 1 = 에러메세지에 나와있듯이 mconfig 단계에서 --without-seccomp 옵션 넣어준다.

– 💡해결법 2 = seccomp 깔아주기

👉 seccomp github page

👉 seccomp github/release note for download source code

1
2
3
4
5
6
7
8
9
10
   wget https://github.com/seccomp/libseccomp/releases/download/v2.5.4/libseccomp-2.5.4.tar.gz
   tar -xvzf libseccomp-2.5.4.tar.gz

   cd libseccomp-2.5.4 && mkdir builddir
   ./configure --prefix=/source/libseccomp-2.5.4/builddir #의심하지말지어다 똥인지 된장인지 찍어먹어봐야하는자여
   make && make install

   echo -e "PATH=/source/libseccomp-2.5.4/builddir/bin:$PATH" >> ~/.bash_profile
   echo 'export LD_LIBRARY_PATH=/source/libseccomp-2.5.4/builddir/lib:$LD_LIBRARY_PATH' >> ~/.bash_profile
   echo 'export LD_RUN_PATH=/source/libseccomp-2.5.4/builddir/lib' >> ~/.bash_profile

🚨 configure: error: please install gperf

에러 해결하려고 프로그램 설치하는데 또 에러가 생기는ㅋㅋㅋㅋ😂 설치해주자.

👉 gperf homepage

1
2
3
4
5
6
   wget http://ftp.gnu.org/pub/gnu/gperf/gperf-3.1.tar.gz
   tar -xvzf gperf-3.1.tar.gz
   cd gperf-3.1
   ./configure --prefix=/source/gperf-3.1
   make && make install
   echo -e "PATH=/source/gperf-3.1/bin:$PATH" >> ~/.bash_profile && source ~/.bash_profile

Step 01 : Run SCENIC

  1. Upate to latest VSN-pipeline
1
  nextflow pull vib-singlecell-nf/vsn-pipelines
  1. generate a config file
1
2
3
4
5
6
7
  # sample 1개인 경우
  nextflow config vib-singlecell-nf/vsn-pipelines -profile tenx,singularity,single_sample > single_sample.config

  # sample 2개 이상, batch correction하고 aggregate해서 분석해야하는 경우
  nextflow config vib-singlecell-nf/vsn-pipelines -profile \
  sra,cellranger,pcacv,bbknn,dm6,scenic,scenic_use_cistarget_motifs,scenic_use_cistarget_tracks,singularity \
  > nextflow.config

기본 command는 위와 같지만 여러가지 다른 input을 넣을 수도 있다.

  • CellRanger output
    -profile tenx, -profile tenx_h5
  • Seurat object rds
    -profile seurat_rds 하고 .config file가서 file_paths parameter잘 설정됐는지 확인.

주의사항!!!

Seurat obj version 3만 지원
version 2, 5 는 지원안함

1
2
3
4
5
6
7
8
    [...]
    data {
        seurat_rds {
            file_paths = "data/1k_pbmc_v*_chemistry_SUFFIX.SC__FILE_CONVERTER.Rds"
            suffix = "_SUFFIX.SC__FILE_CONVERTER.Rds"
        }
    }
    [...]

보통 샘플이 1개인 경우는 거의 없기 때문에.. 대부분 SAMPLE AGGREGATION WORKFLOWS 사용할거라 생각함.

1
2
    nextflow config vib-singlecell-nf/vsn-pipelines -profile sra,cellranger,pcacv,bbknn,dm6,scenic,scenic_use_cistarget_motifs,scenic_use_cistarget_tracks,singularity \
  > nextflow.config

내 코드 & Trial

난 같은 데이터를 2가지 방법으로 분석해보고 똑같은 결과 주는지 확인해보려고함..

  • Trial 1. 이미 만든 Ver.5 Seurat obj -> Ver.3 obj로 Downgrade시키고 input으로 사용 + single sample workflow 사용
  • Trial 2. CellRanger결과 사용 + Sample aggregation workflow 사용

Trial 1.

Preparing input

1
2
3
4
5
6
7
8
9
library(Seurat)
options(Seurat.object.assay.version = "v5")

GEX.seurOBJ <- readRDS("GEX.seurOBJ.v5.rds")

GEX.seurOBJ[["RNA"]] <- as(object = GEX.seurOBJ[["RNA"]], Class = "Assay")
saveRDS(GEX.seurOBJ,"GEX.seurOBJ.v3.rds")

# 저장 위치 확인 후 config file에 넣어주자

Run SCENIC

1
nextflow pull vib-singlecell-nf/vsn-pipelines
  1. config file 만들기

seurat obj 를 input으로 & single sample workflow 사용. 이렇게 쓰려면 당연하겠지만 R이랑 Seurat package설치되어 있어야함.

1
    nextflow config vib-singlecell-nf/vsn-pipelines -profile seurat_rds,singularity,single_sample_scenic,hg38 > trial1.config

config file열어서 seurat_rds { file_paths = 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
   # 174번째 줄: singularity.runOptions 확인
     singularity {
       enabled = true
       autoMounts = true
       runOptions = '--cleanenv -H $PWD -B ${HOME}'
      }

   # 13번째 줄 : project 이름 설정
     params {
      global {
        outdir = 'SysFluR01' # project name
        ... }}

   # 148 번째 줄 : seurat obj 위치 설정
      data {
      seurat_rds {
         file_paths = '' #채워준다
         suffix = '.Rds' #채워준다
      } ... }
   
   # 83번째 줄: scanpy filtering option 확인  
      filter {
            report_ipynb = '/src/scanpy/bin/reports/sc_filter_qc_report.ipynb'
            cellFilterStrategy = 'fixedthresholds'
            cellFilterMinNGenes = 200
            cellFilterMaxNGenes = 4000
            cellFilterMaxPercentMito = 0.15
            geneFilterMinNCells = 3
            off = 'h5ad'
            outdir = 'out'} 

   # 37번째 줄 : highly variable genes selection 기준 확인
      feature_selection {
            report_ipynb = '/src/scanpy/bin/reports/sc_select_variable_genes_report.ipynb'
            flavor = 'seurat'
            minMean = 0.0125
            maxMean = 3
            minDisp = 0.5
            off = 'h5ad'}
  1. Run the VSN-pipelines project
  • 인터넷 연결
  • 메모리 필요
  • core 갯수 조절

nextflow -C trial1.config
run vib-singlecell-nf/vsn-pipelines
-entry single_sample

🚨 Nextflow version 23.04.3 does not match workflow required version: 21.04.31
기껏 최신버전 설치해줬더니 오류남 히히. 위로 다시 올라가서 버전 맞춰다시 깔고 돌아오면 해결..
1
2
3
4
5
6
7
8
9
Command error:
  Loading required package: SeuratObject
  Error in .requirePackage(package) : 
    unable to find required package ‘SeuratObject’
  Calls: @<- ... .extendsForS3 -> extends -> getClassDef -> .requirePackage
  In addition: Warning message:
  In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
    there is no package called ‘SeuratObject’
  Execution halted

References

  • http://htmlpreview.github.io/?https://github.com/aertslab/SCENIC/blob/master/Tutorials_JupyterNotebooks/SCENIC_tutorial_1-RunningVSN.html
  • https://github.com/vib-singlecell-nf/vsn-pipelines
  • https://vsn-pipelines-examples.readthedocs.io/en/latest/Hung.html
  1. https://github.com/nf-core/cutandrun/issues/1 

This post is licensed under CC BY 4.0 by the author.

© Subin Cho. Some rights reserved.

Using the Chirpy theme for Jekyll.