1: Reference  구축

*해당 문서는 CellRanger-ATAC/1.2.0 기준으로 작성되었습니다. (최신 업데이트 버전 :2.0)


1. fasta file과 gtf 파일 다운로드
- Ensembl: 모든 종
- phytozomev11: 식물의 경우(Maize는 maizegdb.org)

2. Config 파일 만들기
CellRanger 는 처음에 fasta file 과 gtf파일을 다 받아서 매핑을 하고 뒤에 매핑된 리드들이 어디 부분에 위치되어있는지까지 알려주는 파이프라인이기 때문에,
처음 매핑할 때 여러 정보가 요구된다.
2.0 버전의 경우 config파일의 형식이 약간  다를 수 있으며, gtf파일에서 exon정보 및 transcript_id등을 요구한다. (https://support.10xgenomics.com/single-cell-atac/software/pipelines/latest/advanced/references#jaspar)
따라서 해당  gtf가 없는 종을 연구하고 있다면 1.2.0을 사용하는게 무난하다.

vi명령어를 이용하여 config 파일하나를 만들어 준다.

<1.2 ver>
{    GENOME_FASTA_INPUT: "파일경로/Athaliana_447_TAIR10.fa",    
GENE_ANNOTATION_INPUT: "파일경로/Athaliana_447_Araport11.gene_exons.gff3",    
MOTIF_INPUT: "",    
ORGANISM: "Arabidopsis",    
PRIMARY_CONTIGS: ["Chr1", "Chr2", "Chr3", "Chr4", "Chr5"],   
 NON_NUCLEAR_CONTIGS: ["ChrM","ChrC"]}

<2 ver>
{    organism: "Populus"
    genome: ["populus"]
    input_fasta: ["/0.Reference_populus/g717v5_h1h2.fa"]
    input_gtf: ["/0.Reference_populus/PtremulaxPopulusalbaHAP1v5.1.gene_exons.gtf"]
}
만약에 가지고있는 어노테이션 파일이 gff3 라면 마지막 attribute 열의 이름이 일치하지 않아 에러가 뜰수 있다. 
이때는 이전 글 "gff3 --> gtf 변환 포스트"에서 gtf로 변환방법을 통해 gtf로 변환을 먼저 하길 추천한다. 

gtf 파일 상태에 따라서 ver2를 써야하는 경우도 있는데 이때 config 파일이 다르다.

3. Reference 구축

<1.2 ver>
module load CellRanger-ATAC/1.2.0
cellranger-atac mkref 아웃풋파일경로(꼭새로운폴더여야함!)  --config=내가 만든 config파일 이름
소요시간: 1시간

<2 ver>
module load CellRanger-ATAC/2.0.0
cellranger-atac mkref --config=내가 만든 config파일 이름

만약에 샘플이 Haploid면 어떻게 할까?

2:  Read mapping

1. Single Cell RNA-seq/ATAC-seq data 이해

일반 시퀀싱 파일은 single end로 시퀀싱을 할경우 하나의 ".fastq"파일을 갖게되고,

paired end 의 경우 "R1.fastq","R2.fastq"두개의 파일을 갖게됩니다.

Single cell의 경우 4개의 파일을 갖게되고 이름은 각각 

"I1.fastq","R1.fastq","R2.fastq" "R3.fastq"입니다.

"I1": 8bp길이의 바코드

"R1": Forward end read

"R2": 16bp길이의 10x feature바코드

"R3": Reverse end read

참고: https://divingintogeneticsandgenomics.rbind.io/post/understand-10x-scrnaseq-and-scatac-fastqs/

2. cellranger-atac count를 통한 mapping


소요시간: 32코어를쓸 때, 20gb fastq 20시간

<Ver 1.2. 와 Ver 2 동일>

cellranger-atac count \
           --id=ArabRoot-rep1-scATAC  \
           --reference=1단계에서 구축한 reference경로  \
          --fastqs=파스타파일이 있는경로
          --localcores=2

3: 중복 맵핑된 reads를 제거
중복 맵핑된  Reads를 제거
어떤 Read들은 2개이상의 genome 부분에 붙을 수 있다. 이러한 Read들을 제거해 주는 단계이다.
samtools view -@ 32 -h -f 3 -q 20 ./"${List[SLURM_ARRAY_TASK_ID]}"/outs/possorted_bam.bam | grep -v -e 'XA:Z:' -e 'SA:Z:' | samtools view -@ 32 -bS - > ../3.SortedBam/"${List[SLURM_ARRAY_TASK_ID]}"_Sorted.bam

옵션 설명
-h: output에 헤더 포함
-f 3: flag중 3만 출력.  https://broadinstitute.github.io/picard/explain-flags.html. 
3은 paired read 중 적절하게 맵핑된 Read들만을 이야기한다.
-q 20: Skip alignments with MAPQ smaller than INT

4:  PCR duplicates 제거

java -jar $EBROOTPICARD/picard.jar MarkDuplicates \
    MAX_FILE_HANDLES_FOR_READ_ENDS_MAP=1000 \
    REMOVE_DUPLICATES=true \
    METRICS_FILE= ./"${List[SLURM_ARRAY_TASK_ID]}"_dups.txt(아웃풋) \
    I= ./"${List[SLURM_ARRAY_TASK_ID]}"_Sorted.bam(이전단계-중복제거된 뱀파일) \
    O= ./"${List[SLURM_ARRAY_TASK_ID]}"_Rmpcr.bam(아웃풋) \
    BARCODE_TAG=CB \
    ASSUME_SORT_ORDER=coordinate\
    USE_JDK_DEFLATER=true USE_JDK_INFLATER=true

이때 만약에 앞에서 mapping 을 위해 cell ranger버젼 2를 사용한 경우엔 header 에러가 뜨게 된다.
이때는 samtools view -H 를 이용해서 bam file 의 헤더를 관찰할 수 있다.
samtools view -H /3.scATAC_flo/3.SortedBam/Populus_Sorted.bam > Populus_Sorted_header.sam
@hd SO:coordinate @sq SN:T01 LN:50695696 @sq SN:T02 LN:23110994 @sq SN:T03 LN:25238799 @sq SN:T04 LN:21613846 @sq SN:T05 LN:22266242 @sq SN:T06 LN:25485240

이때, 첫번째 헤더의 경우 VN version number 가 빠져있다. 이때는 먼저
위의 헤더의 "Populus_Sorted_header.sam"를 열고 안에 내용을 바꾸어준다.

vi Populus_Sorted_header.sam
@hd VN:1.5  SO:coordinate
@sq SN:T01 LN:50695696
@sq SN:T02 LN:23110994
@sq SN:T03 LN:25238799
@sq SN:T04 LN:21613846

그 다음에 아래 명령어를 이용해서 bamfile의 헤더를 바꾼다.
samtools reheader /3.scATAC_flo/3.SortedBam/Populus_Sorted_header.sam  /3.scATAC_flo/3.SortedBam/Populus_Sorted.bam > /3.scATAC_flo/3.SortedBam/Populus_Sorted_HF.bam


5:  Barcode 고정

6:  Unique Read만 bed file 로 가져오기

1) makeTn5bed.pl 를이용!
단, 이때 해당 펄 파일은 perlSAM.pm 라는 모듈을 필요로 하기 때문에,
모듈과 펄 실행파일을 같은 디렉토리에 넣고,
conda를 통해 펄을 실행시킨다 (확인은 which perl)
그리고 Naturally라는 펄 모듈은 콘다로 다운받아줘야한다.


IDR scores
LCM data sets