使用SnapATAC分析單細胞ATAC-seq數(shù)據(jù)(一): SnapATAC簡介與安裝

SnapATAC簡介

SnapATAC (Single Nucleus Analysis Pipeline for ATAC-seq) 是一個能夠快速、準確和全面分析單細胞ATAC-seq數(shù)據(jù)的R包熟吏,它可以對單細胞ATAC-seq數(shù)據(jù)進行常規(guī)的數(shù)據(jù)降維炮温、聚類和批次校正分析,鑒定遠端調(diào)控元件并預測其調(diào)控的靶基因奕塑,調(diào)用chromVAR軟件進行motif分析堂污,同時還可以將scRNA-seq和scATAC-seq數(shù)據(jù)進行整合分析等。

SnapATAC軟件安裝

Requirements

  • Linux/Unix
  • Python (>= 2.7 & < 3.0) (SnapTools) (highly recommanded for 2.7);
  • R (>= 3.4.0 & < 3.6.0) (SnapATAC) (3.6 does not work for rhdf5 package);

Pre-print

Rongxin Fang, Sebastian Preissl, Xiaomeng Hou, Jacinta Lucero, Xinxin Wang, Amir Motamedi, Andrew K. Shiau, Eran A. Mukamel, Yanxiao Zhang, M. Margarita Behrens, Joseph Ecker, Bing Ren. Fast and Accurate Clustering of Single Cell Epigenomes Reveals Cis-Regulatory Elements in Rare Cell Types. bioRxiv 615179; doi: https://doi.org/10.1101/615179

image.png

image.png

Installation

SnapATAC軟件主要由以下兩個組件組成:SnaptoolsSnapATAC.

  • SnapTools - 一個用于預處理和處理snap格式文件的python模塊龄砰。
  • SnapATAC - 一個用于數(shù)據(jù)聚類盟猖、注釋、motif發(fā)現(xiàn)和下游分析的R包换棚。
# Install snaptools from PyPI. 
# NOTE: Please use python 2.7 if possible.
# 使用pip安裝snaptools模塊
pip install snaptools

# Install SnapATAC R pakcage (development version).
# 安裝一些依賴R包
install.packages(c('raster','bigmemory','doSNOW','plot3D'))

# 使用devtools安裝SnapATAC包
library(devtools)
install_github("r3fang/SnapATAC")

SnapATAC常見問題匯總

1)What is a snap file?

snap (Single-Nucleus Accessibility Profiles)格式文件是一個層級結構的hdf5文件扒披,它可以用來存儲single nucleus ATAC-seq數(shù)據(jù)集。該文件(version 4)主要由以下幾個部分組成:header (HD), cell-by-bin accessibility matrix (AM), cell-by-peak matrix (PM), cell-by-gene matrix (GM), barcode (BD) and fragment (FM).

  • HD session: 包含snap文件的版本圃泡、創(chuàng)建日期碟案、比對信息和參考基因組信息。
  • BD session: 包含所有unique細胞的barcodes和相應的meta data信息颇蜡。
  • AM session: 包含不同分辨率(bin size)下的cell-by-bin數(shù)據(jù)矩陣价说。
  • PM session: 包含cell-by-peak的計數(shù)矩陣
  • GM session: 包含cell-by-gene的計數(shù)矩陣辆亏。
  • FM session: 包含每個細胞中可用的所有frangments片段信息。

2)How to create a snap file from fastq file?

Step 1. Barcode demultiplexing.

首先鳖目,我們將barcode信息以"@" + "barcode" + ":" + "read_name"的格式添加到每條read的開頭扮叨,用以拆分FASTQ文件。
下面是一個用于拆分fastq文件的示例领迈,我們可以通過awk或python腳本輕松實現(xiàn)彻磁。

# 下載示例數(shù)據(jù)
wget http://renlab.sdsc.edu/r3fang/share/Fang_2019/MOs_snATAC/fastq/CEMBA180306_2B.demultiplexed.R1.fastq.gz
wget http://renlab.sdsc.edu/r3fang/share/Fang_2019/MOs_snATAC/fastq/CEMBA180306_2B.demultiplexed.R2.fastq.gz
wget http://renlab.sdsc.edu/r3fang/share/Fang_2019/MOs_snATAC/peaks/all_peak.bed
wget http://renlab.sdsc.edu/r3fang/share/Fang_2019/MOs_snATAC/mm10.blacklist.bed.gz
wget http://renlab.sdsc.edu/r3fang/share/Fang_2019/MOs_snATAC/genes/gencode.vM16.gene.bed
wget http://hgdownload.cse.ucsc.edu/goldenPath/mm10/bigZips/mm10.chrom.sizes
wget http://renlab.sdsc.edu/r3fang/share/Fang_2019/MOs_snATAC/genome/mm10.fa

# 查看fastq文件
zcat CEMBA180306_2B.demultiplexed.R1.fastq.gz | head 
@AGACGGAGACGAATCTAGGCTGGTTGCCTTAC:7001113:920:HJ55CBCX2:1:1108:1121:1892 1:N:0:0
ATCCTGGCATGAAAGGATTTTTTTTTTAGAAAATGAAATATATTTTAAAG
+
DDDDDIIIIHIIGHHHIIIHIIIIIIHHIIIIIIIIIIIIIIIIIIIIII
Step 2. Index reference genome (snaptools).

接下來,我們將對參考基因組構建索引用于后續(xù)的比對分析狸捅,這里我們展示了如何使用BWA來構建參考基因組的索引衷蜓。用戶可以通過—-aligner參數(shù)指定要使用的比對軟件,目前snaptools可以支持bwa, bowtie2和minimap2比對軟件尘喝。同時磁浇,我們還需要指定比對軟件所在文件夾的路徑,例如朽褪,如果bwa安裝在/opt/biotools/bwa/bin/bwa下置吓,我們需要指定--path-to-aligner=/opt/biotools/bwa/bin/

# 查看bwa軟件所在的路徑
which bwa
/opt/biotools/bwa/bin/bwa 

# 使用snaptools構建參考基因組索引
snaptools index-genome  \
    --input-fasta=mm10.fa  \
    --output-prefix=mm10  \
    --aligner=bwa  \
    --path-to-aligner=/opt/biotools/bwa/bin/  \
    --num-threads=5
Step 3. Alignment (snaptools).

構建好參考基因組索引后,我們使用snaptools將拆分后的FASTQ reads序列比對到相應的參考基因組上缔赠。比對后衍锚,將比對好的bam文件按reads名稱進行排序。我們還可以通過設置--num-threads參數(shù)指定多個CPU加快比對的速度嗤堰。

snaptools align-paired-end  \
    --input-reference=mm10.fa  \
    --input-fastq1=CEMBA180306_2B.demultiplexed.R1.fastq.gz  \
    --input-fastq2=CEMBA180306_2B.demultiplexed.R2.fastq.gz  \
    --output-bam=CEMBA180306_2B.bam  \
    --aligner=bwa  \
    --path-to-aligner=/opt/biotools/bwa/bin/  \
    --read-fastq-command=zcat  \
    --min-cov=0  \
    --num-threads=5  \
    --if-sort=True  \
    --tmp-folder=./  \
    --overwrite=TRUE  
Step 4. Pre-processing (snaptools).

比對完之后构拳,我們將比對好的雙端reads轉換為fragments片段,并查看每個 fragment片段的以下屬性:
1)比對質量評分MAPQ;
2)比對上的reads兩端是否按比對的flag值正確配對;
3)fragments片段的長度:
我們根據(jù)以下條件進行過濾篩選梁棠,只保留滿足條件的fragments片段;
1)兩端正確配對的fragments片段置森;
2)MAPQ值大于30的fragments片段(-min-mapq);
3)長度小于1000bp的fragments片段 (-max-flen)。

# 提取參考基因染色體長度信息
fetchChromSizes mm10.fa > mm10.chrom.sizes

# 使用snaptools進行數(shù)據(jù)預處理符糊,生成snap格式文件
snaptools snap-pre  \
    --input-file=CEMBA180306_2B.bam  \
    --output-snap=CEMBA180306_2B.snap  \
    --genome-name=mm10  \
    --genome-size=mm10.chrom.sizes  \
    --min-mapq=30  \
    --min-flen=0  \
    --max-flen=1000  \
    --keep-chrm=TRUE  \
    --keep-single=FALSE  \
    --keep-secondary=FALSE  \
    --overwrite=True  \
    --min-cov=100  \
    --verbose=True
Step 5. Cell-by-bin matrix (snaptools).

最后凫海,我們使用snap文件創(chuàng)建不同分辨率下的cell-by-bin矩陣文件。在下面的示例中,我們分別創(chuàng)建了1,000、5,000和10,000 bin size下的三個cell-by-bin矩陣芬为,并將所有的矩陣都存儲在cemba180306_2B.snap文件中。

# 使用snaptools創(chuàng)建cell-by-bin矩陣
snaptools snap-add-bmat \
    --snap-file=CEMBA180306_2B.snap \
    --bin-size-list 1000 5000 10000 \
    --verbose=True

3)How to create snap file from 10X dataset?

Case 1


image.png

1)首先建瘫,運行cellranger-atac mkfastq生成拆庫后的fastq文件;
2)接下來尸折,對于每個測序文庫啰脚,識別相應的測序文件,其中R1和R3是測序的reads实夹,I1是16bp i5 (10x Barcode), R2是i7 (sample index)橄浓。
3)最后粒梦,使用snaptools提供的dex-fastq子程序,將10X barcode信息添加到reads的名稱中荸实。

snaptools dex-fastq \
    --input-fastq=Library1_1_L001_R1_001.fastq.gz \
    --output-fastq=Library1_1_L001_R1_001.dex.fastq.gz \ 
    --index-fastq-list Library1_1_L001_R2_001.fastq.gz

snaptools dex-fastq \
    --input-fastq=Library1_1_L001_R3_001.fastq.gz \
    --output-fastq=Library1_1_L001_R3_001.dex.fastq.gz \ 
    --index-fastq-list Library1_1_L001_R2_001.fastq.gz

snaptools dex-fastq \
    --input-fastq=Library1_2_L001_R1_001.fastq.gz \
    --output-fastq=Library1_2_L001_R1_001.dex.fastq.gz \ 
    --index-fastq-list Library1_2_L001_R2_001.fastq.gz

snaptools dex-fastq \
    --input-fastq=Library1_2_L001_R3_001.fastq.gz \
    --output-fastq=Library1_2_L001_R3_001.dex.fastq.gz \ 
    --index-fastq-list Library1_2_L001_R2_001.fastq.gz

# combine these two library
cat Library1_1_L001_R1_001.fastq.gz Library1_2_L001_R1_001.fastq.gz > Library1_L001_R1_001.fastq.gz

cat Library1_1_L001_R3_001.fastq.gz Library1_2_L001_R3_001.fastq.gz > Library1_L001_R3_001.fastq.gz

Case 2


image.png

在本示例中匀们,我們有兩個10x的測序文庫(每個文庫都通過單獨的Chromium chip channel進行處理)。請注意准给,在運行完cellranger-atac mkfastq拆分數(shù)據(jù)之后泄朴,我們對每個文庫進行單獨的cellranger-atac count處理。

snaptools dex-fastq \
    --input-fastq=Library1_S1_L001_R1_001.fastq.gz \
    --output-fastq=Library1_S1_L001_R1_001.dex.fastq.gz \ 
    --index-fastq-list Library1_S1_L001_R2_001.fastq.gz

snaptools dex-fastq \
    --input-fastq=Library1_S1_L001_R3_001.fastq.gz \
    --output-fastq=Library1_S1_L001_R3_001.dex.fastq.gz \ 
    --index-fastq-list Library1_S1_L001_R2_001.fastq.gz

4)Can I run SnapATAC with CellRanger outcome?

Yes. There are two entry points

(1)use the position sorted bam file (recommanded).

# 查看比對的bam文件信息
samtools view atac_v1_adult_brain_fresh_5k_possorted_bam.bam
A00519:218:HJYFLDSXX:2:1216:26458:34976 99  chr1    3000138 60  50M =   3000474 385 TGATGACTGCCTCTATTTCTTTAGGGGAAATGGGACTTTTAGTCCATGAA  FFFFFFFFFFFFFFFF,FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF  NM:i:0  MD:Z:50 MC:Z:49M    AS:i:50 XS:i:37 CR:Z:GGTTGCGAGCCGCAAA   CY:Z:FFFFFFFFFFFFFFFF   CB:Z:GGTTGCGAGCCGCAAA-1 BC:Z:AACGGTCA   QT:Z:FFFFFFFFGP:i:3000137   MP:i:3000522    MQ:i:40 RG:Z:atac_v1_adult_brain_fresh_5k:MissingLibrary:1:HJYFLDSXX:2

在比對的read名稱前添加barcode信息
The cell barcode is embedded in the tag CB:Z:GGTTGCGAGCCGCAAA-1, you can modify the bam file by add the cell barcode GGTTGCGAGCCGCAAA-1 to the beginning of read

# extract the header file
samtools view atac_v1_adult_brain_fresh_5k_possorted_bam.bam -H > atac_v1_adult_brain_fresh_5k_possorted.header.sam

# create a bam file with the barcode embedded into the read name
cat <( cat atac_v1_adult_brain_fresh_5k_possorted.header.sam ) \
<( samtools view atac_v1_adult_brain_fresh_5k_possorted_bam.bam | awk '{for (i=12; i<=NF; ++i) { if ($i ~ "^CB:Z:"){ td[substr($i,1,2)] = substr($i,6,length($i)-5); } }; printf "%s:%s\n", td["CB"], $0 }' ) \
| samtools view -bS - > atac_v1_adult_brain_fresh_5k_possorted.snap.bam

# 查看添加好barcode信息的bam文件
samtools view atac_v1_adult_brain_fresh_5k_possorted.snap.bam | cut -f 1 | head 
GGTTGCGAGCCGCAAA-1:A00519:218:HJYFLDSXX:2:1216:26458:34976
GGTTGCGAGCCGCAAA-1:A00519:218:HJYFLDSXX:2:2256:23194:13823
GGTTGCGAGCCGCAAA-1:A00519:218:HJYFLDSXX:2:2546:5258:31955
CTCAGCTAGTGTCACT-1:A00519:218:HJYFLDSXX:1:2428:8648:18349
CTCAGCTAGTGTCACT-1:A00519:218:HJYFLDSXX:1:2428:8648:18349
GAAGTCTGTAACACTC-1:A00519:218:HJYFLDSXX:3:2546:14968:2331
GAAGTCTGTAACACTC-1:A00519:218:HJYFLDSXX:3:2546:14705:2628
GGTTGCGAGCCGCAAA-1:A00519:218:HJYFLDSXX:2:1216:26458:34976
GGTTGCGAGCCGCAAA-1:A00519:218:HJYFLDSXX:2:2256:23194:13823
GGTTGCGAGCCGCAAA-1:A00519:218:HJYFLDSXX:2:2546:5258:31955

對bam文件按read的名稱進行排序
Then sort the bam file by read name:

samtools sort -n -@ 10 -m 1G atac_v1_adult_brain_fresh_5k_possorted.snap.bam -o atac_v1_adult_brain_fresh_5k.snap.nsrt.bam

使用snaptools進行數(shù)據(jù)預處理生成snap文件
Then generate the snap file

snaptools snap-pre  \
    --input-file=atac_v1_adult_brain_fresh_5k.snap.nsrt.bam  \
    --output-snap=atac_v1_adult_brain_fresh_5k.snap  \
    --genome-name=mm10  \
    --genome-size=mm10.chrom.sizes  \
    --min-mapq=30  \
    --min-flen=50  \
    --max-flen=1000  \
    --keep-chrm=TRUE  \
    --keep-single=FALSE  \
    --keep-secondary=False  \
    --overwrite=True  \
    --max-num=20000  \
    --min-cov=500  \
    --verbose=True

刪除中間文件
remove temporary files

rm atac_v1_adult_brain_fresh_5k.snap.snap.bam 
rm atac_v1_adult_brain_fresh_5k_possorted.header.sam

(2)use the fragment tsv file. Fragment file is already filtered, this will disable snaptools to generate quality control metrics.

# decompress the gz file
gunzip atac_v1_adult_brain_fresh_5k_fragments.tsv.gz

# sort the tsv file using the 4th column (barcode column)
sort -k4,4 atac_v1_adult_brain_fresh_5k_fragments.tsv > atac_v1_adult_brain_fresh_5k_fragments.bed

# compress the bed file 
gzip atac_v1_adult_brain_fresh_5k_fragments.bed

# run snap files using the bed file
snaptools snap-pre  \
    --input-file=atac_v1_adult_brain_fresh_5k_fragments.bed.gz  \
    --output-snap=atac_v1_adult_brain_fresh_5k.snap  \
    --genome-name=mm10  \
    --genome-size=mm10.chrom.sizes  \
    --min-mapq=30  \
    --min-flen=50  \
    --max-flen=1000  \
    --keep-chrm=TRUE  \
    --keep-single=FALSE  \
    --keep-secondary=False  \
    --overwrite=True  \
    --max-num=20000  \
    --min-cov=500  \
    --verbose=True

5)How to create a snap file from bam or bed file?

在很多情況下露氮,我們可以直接使用snaptools pre子程序將比對好的祖灰、按read名稱進行排序的bam或bed文件作為輸入,生成snap格式文件沦辙。強烈建議使用未經(jīng)過濾的比對文件作為輸入。
(1)對于bam文件讹剔,我們需要在read的名稱前添加細胞的barcode信息油讯,如下所示:

samtools view demo.bam|head

AAACTACCAGAAAGACGCAGTT:7001113:968:HMYT2BCX2:1:1215:20520:88475 77  *   0   0   *   *   0   0CTATGAGCACCGTCTCCGCCTCAGATGTGTATAAGAGACAGCAGAGTAAC @DDBAI??E?1/<DCGECEHEHHGG1@GEHIIIHGGDGE@HIHEEIIHH1  AS:i:0  XS:i:0
AAACTACCAGAAAGACGCAGTT:7001113:968:HMYT2BCX2:1:1215:20520:88475 141 *   0   0   *   *   0   0GGCTTGTACAGAGCAAGTGCTGAAGTCCCTTTCTGATGACGTTCAACAGC 0<000/<<1<D1CC111<<1<1<111<111<<CDCF1<1<DHH<<<<C11  AS:i:0  XS:i:0
AAACTACCAGAAAGACGCAGTT:7001113:968:HMYT2BCX2:1:2201:20009:41468 77  *   0   0   *   *   0   0CGGTGCCCCTGTCCTGTTCGTGCCCACCGTCTCCGCCTCAGATGTGTATA DDD@D/D<DHIHEHCCF1<<CCCGH?GHI1C1DHIII0<1D1<111<1<1  AS:i:0  XS:i:0
AAACTACCAGAAAGACGCAGTT:7001113:968:HMYT2BCX2:1:2201:20009:41468 141 *   0   0   *   *   0   0GAGCGAGGGCGGCAGAGGCAGGGGGAGGAGACCCGGTGGCCCGGCAGGCT 0<00</<//<//<//111000/<</</<0<1<1<//<<0<DCC/<///<D  AS:i:0  XS:i:0

# 使用snaptools將bam文件轉換為snap格式文件
snaptools snap-pre  \
    --input-file=demo.bam  \
    --output-snap=demo.snap  \
    --genome-name=mm10  \
    --genome-size=mm10.chrom.sizes  \
    --min-mapq=30  \
    --min-flen=0  \
    --max-flen=1000  \
    --keep-chrm=TRUE  \
    --keep-single=TRUE  \
    --keep-secondary=False  \
    --overwrite=True  \
    --min-cov=100  \
    --verbose=True

(2)對于bed格式的文件,應將barcode信息添加到第四列中延欠,如下所示:

zcat demo.bed.gz | head

chr2    74358918    74358981    AACGAGAGCTAAAGACGCAGTT
chr6    134212048   134212100   AACGAGAGCTAAAGACGCAGTT
chr10   93276785    93276892    AACGAGAGCTAAAGACGCAGTT
chr2    128601366   128601634   AACGAGAGCTAAAGCGCATGCT
chr16   62129428    62129661    AACGAGAGCTAACAACCTTCTG
chr8    84946184    84946369    AACGAGAGCTAACAACCTTCTG

# 使用snaptools將bed文件轉換為snap格式文件
snaptools snap-pre  \
    --input-file=demo.bed.gz  \
    --output-snap=demo.snap  \
    --genome-name=mm10  \
    --genome-size=mm10.chrom.sizes  \
    --min-mapq=30  \
    --min-flen=0  \
    --max-flen=1000  \
    --keep-chrm=TRUE  \
    --keep-single=TRUE  \
    --keep-secondary=False  \
    --overwrite=True  \
    --min-cov=100  \
    --verbose=True

6)How to group reads?

(1)Group reads from one cell ATACAGCCTCGC in snap file sample1.snap.

library(SnapATAC);
snap_files = "sample1.snap";
barcode_sel = "ATACAGCCTCGC";
reads.gr = extractReads(barcode_sel, snap_files);

(2)Group reads from multiple barcodes in one snap file.

library(SnapATAC);
barcode_sel = c("ATACAGCCTCGC", "ATACAGCCTCGG")
snap_files = rep("sample1.snap", 2);
reads.gr = extractReads(barcode_sel, snap_files);

(3)Group reads from multiple barcodes and multiple snap files.

library(SnapATAC);
barcode_sel = rep("ATACAGCCTCGC", 2);
snap_files = c("sample1.snap", "sample2.snap");
reads.gr = extractReads(barcode_sel, snap_files);

7)How to analyze multiple samples together?

因為SnapATAC軟件使用cell-by-bin矩陣對細胞進行聚類分群陌兑,這使他很容易將多個樣本進行結合并執(zhí)行比較分析。它需要將所有的樣本創(chuàng)建相同bin size大小的cell-by-bin矩陣由捎。在這里兔综,我們以PBMC_5K和PBMC_10K數(shù)據(jù)為例進行分析。

$ R
# 加載SnapATAC包
> library(SnapATAC);

# 下載示例數(shù)據(jù)
> system("wget http://renlab.sdsc.edu/r3fang/share/Fang_2019/published_scATAC/atac_v1_pbmc_10k_fastqs/atac_v1_pbmc_10k.snap");
> system("wget http://renlab.sdsc.edu/r3fang/share/Fang_2019/published_scATAC/atac_v1_pbmc_5k_fastqs/atac_v1_pbmc_5k.snap");
> file.list = c("atac_v1_pbmc_5k.snap", "atac_v1_pbmc_10k.snap");
> sample.list = c("pbmc.5k", "pbmc.10k");

# 使用createSnap函數(shù)將兩個數(shù)據(jù)結合在一起
> x.sp = createSnap(file=file.list, sample=sample.list);

createSnap函數(shù)將創(chuàng)建一個snap對象狞玛,該對象中包含了每個snap文件的名稱和相應的barcodes信息软驰。

8)How to choose bin size?

SnapATAC軟件是基于cell-by-bin矩陣對細胞進行聚類分群的,因此選擇不同的bin size可能對細胞的聚類分群產(chǎn)生較大的影響心肪。如何選擇最優(yōu)的bin size锭亏,這個問題沒有絕對的答案。

一方面硬鞍,我們發(fā)現(xiàn)在5kb-50kb范圍內(nèi)的bin size大小的改變慧瘤,并沒有明顯地改變細胞聚類分群的結果(如下圖所示)。而另一方面固该,我們確實注意到了一個大的bin size通常會生成相對較少的cluster锅减。這種聚類的差異,可以使用分辨率較小的Louvain聚類算法進行彌補伐坏。

使用較大bin size的好處是可以節(jié)省一些內(nèi)存怔匣,這對于一些大型數(shù)據(jù)集尤為有用。這里提供了一個bin size大小選擇的主觀建議桦沉。


image.png

參考來源:https://github.com/r3fang/SnapATAC/wiki/FAQs#what-is-a-snap-file

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劫狠,一起剝皮案震驚了整個濱河市拴疤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌独泞,老刑警劉巖呐矾,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異懦砂,居然都是意外死亡蜒犯,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門荞膘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罚随,“玉大人,你說我怎么就攤上這事羽资√云校” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵屠升,是天一觀的道長潮改。 經(jīng)常有香客問我,道長腹暖,這世上最難降的妖魔是什么汇在? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮脏答,結果婚禮上糕殉,老公的妹妹穿的比我還像新娘。我一直安慰自己殖告,他們只是感情好阿蝶,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著黄绩,像睡著了一般赡磅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宝与,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天焚廊,我揣著相機與錄音,去河邊找鬼习劫。 笑死咆瘟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的诽里。 我是一名探鬼主播袒餐,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了灸眼?” 一聲冷哼從身側響起卧檐,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎焰宣,沒想到半個月后霉囚,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡匕积,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年盈罐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闪唆。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡盅粪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悄蕾,到底是詐尸還是另有隱情票顾,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布帆调,位于F島的核電站奠骄,受9級特大地震影響,放射性物質發(fā)生泄漏贷帮。R本人自食惡果不足惜戚揭,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一诱告、第九天 我趴在偏房一處隱蔽的房頂上張望撵枢。 院中可真熱鬧,春花似錦精居、人聲如沸锄禽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沃但。三九已至,卻和暖如春佛吓,著一層夾襖步出監(jiān)牢的瞬間宵晚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工维雇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淤刃,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓吱型,卻偏偏與公主長得像逸贾,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355