@@ -6,36 +6,21 @@ OUTDIR="synthetic_reads"
66
77mkdir -p " $OUTDIR " /{genes,fusions}
88
9- echo " ====================================="
10- echo " Step 1: index FASTA"
11- echo " ====================================="
9+ echo " == Index FASTA =="
1210samtools faidx " $FASTA "
1311
14- echo " ====================================="
15- echo " Step 2: define gene list (NO coordinates)"
16- echo " ====================================="
17-
1812GENES=(
1913 AKAP9 ALK ATF1 BRAF BRD4 CD74 EML4 ETV1 ETV6
2014 EWSR1 FLI1 HOOK3 NTRK3 NUTM1 RET ROS1 TMPRSS2
2115)
2216
23- echo " ====================================="
24- echo " Step 3: build normal gene transcripts"
25- echo " ====================================="
26-
27- for gene in " ${GENES[@]} " ; do
28- seq=$( samtools faidx " $FASTA " " $gene " | tail -n +2)
29-
30- echo " >${gene} _normal" > " $OUTDIR /genes/${gene} .fa"
31- echo " $seq " >> " $OUTDIR /genes/${gene} .fa"
32- done
33-
34- cat " $OUTDIR " /genes/* .fa > " $OUTDIR /all_genes.fa"
17+ extract_gene () {
18+ samtools faidx " $FASTA " " $1 " 2> /dev/null \
19+ | tail -n +2 \
20+ | tr -d ' \n'
21+ }
3522
36- echo " ====================================="
37- echo " Step 4: build fusion transcripts"
38- echo " ====================================="
23+ echo " == Build breakpoint fusion fragments =="
3924
4025FUSIONS=(
4126 " ALK EML4"
@@ -46,57 +31,103 @@ FUSIONS=(
4631 " TMPRSS2 ALK"
4732)
4833
34+ rm -f " $OUTDIR " /fusions/* .fa
35+
4936i=0
37+
5038for pair in " ${FUSIONS[@]} " ; do
51- g1=$( echo $pair | awk ' {print $1}' )
52- g2=$( echo $pair | awk ' {print $2}' )
5339
54- seq1=$( samtools faidx " $FASTA " " $g1 " | tail -n +2)
55- seq2=$( samtools faidx " $FASTA " " $g2 " | tail -n +2)
40+ g1=$( echo " $pair " | awk ' {print $1}' )
41+ g2=$( echo " $pair " | awk ' {print $2}' )
42+
43+ seq1=$( extract_gene " $g1 " )
44+ seq2=$( extract_gene " $g2 " )
45+
46+ [[ -z " $seq1 " || -z " $seq2 " ]] && continue
47+
48+ bp1=$(( ${# seq1} / 2 ))
49+ bp2=$(( ${# seq2} / 3 ))
5650
57- mid1=$(( ${# seq1} / 2 ))
58- mid2=$(( ${# seq2} / 3 ))
51+ # 200 bp on each side of breakpoint
52+ left_start=$(( bp1 - 200 ))
53+ (( left_start < 0 )) && left_start=0
5954
60- fusion_seq=" ${seq1: 0: $mid1 }${seq2: $mid2 } "
55+ left_seq=" ${seq1: $left_start : 200} "
56+ right_seq=" ${seq2: $bp2 : 200} "
6157
62- echo " >fusion_${g1} _${g2} _${i} " > " $OUTDIR /fusions/fusion_${i} .fa"
63- echo " $fusion_seq " >> " $OUTDIR /fusions/fusion_${i} .fa"
58+ fusion_fragment=" ${left_seq}${right_seq} "
6459
65- i=$(( i+ 1 ))
60+ {
61+ echo " >fusion_${g1} _${g2} _${i} "
62+ echo " $fusion_fragment "
63+ } > " $OUTDIR /fusions/fusion_${i} .fa"
64+
65+ (( i+= 1 ))
6666done
6767
6868cat " $OUTDIR " /fusions/* .fa > " $OUTDIR /all_fusions.fa"
6969
70- echo " ====================================="
71- echo " Step 5: combine transcriptome"
72- echo " ====================================="
73-
74- cat " $OUTDIR /all_genes.fa" " $OUTDIR /all_fusions.fa" > " $OUTDIR /transcriptome.fa"
70+ echo " == Simulate normal background reads =="
7571
76- echo " ====================================="
77- echo " Step 6: simulate reads"
78- echo " ====================================="
72+ # Keep background modest.
73+ # With a 4.4 Mb minigenome this produces ~40-60 MB gzipped FASTQs.
7974
8075art_illumina \
8176 -ss HS25 \
82- -i " $OUTDIR /all_genes.fa" \
83- -p -l 150 -f 30 -m 200 -s 10 -rs 42 \
77+ -i " $FASTA " \
78+ -p \
79+ -l 150 \
80+ -f 50 \
81+ -m 250 \
82+ -s 25 \
83+ -rs 42 \
8484 -o " $OUTDIR /normal_"
8585
86+ echo " == Simulate breakpoint-spanning fusion reads =="
87+
88+ # High coverage on tiny breakpoint fragments
89+ # Generates many split/chimeric reads without huge files
90+
8691art_illumina \
8792 -ss HS25 \
8893 -i " $OUTDIR /all_fusions.fa" \
89- -p -l 150 -f 5 -m 200 -s 10 -rs 42 \
94+ -p \
95+ -l 150 \
96+ -f 600 \
97+ -m 250 \
98+ -s 25 \
99+ -rs 43 \
90100 -o " $OUTDIR /fusion_"
91101
92- echo " ====================================="
93- echo " Step 7: merge reads"
94- echo " ====================================="
102+ echo " == Merge =="
103+
104+ cat \
105+ " $OUTDIR /normal_1.fq" \
106+ " $OUTDIR /fusion_1.fq" \
107+ > " $OUTDIR /test_sample_R1.fastq"
108+
109+ cat \
110+ " $OUTDIR /normal_2.fq" \
111+ " $OUTDIR /fusion_2.fq" \
112+ > " $OUTDIR /test_sample_R2.fastq"
113+
114+ echo " == Compress =="
115+
116+ gzip -f " $OUTDIR /test_sample_R1.fastq"
117+ gzip -f " $OUTDIR /test_sample_R2.fastq"
118+
119+ echo
120+ echo " Final sizes:"
121+ du -h " $OUTDIR /test_sample_R1.fastq.gz"
122+ du -h " $OUTDIR /test_sample_R2.fastq.gz"
95123
96- cat " $OUTDIR /normal_1.fq" " $OUTDIR /fusion_1.fq" > " $OUTDIR /final_1.fq"
97- cat " $OUTDIR /normal_2.fq" " $OUTDIR /fusion_2.fq" > " $OUTDIR /final_2.fq"
124+ echo
125+ echo " Read counts:"
126+ echo -n " R1: "
127+ zcat " $OUTDIR /test_sample_R1.fastq.gz" | awk ' END{print NR/4}'
98128
99- gzip -f " $OUTDIR /final_1.fq "
100- gzip -f " $OUTDIR /final_2.fq "
129+ echo -n " R2: "
130+ zcat " $OUTDIR /test_sample_R2.fastq.gz " | awk ' END{print NR/4} '
101131
102- echo " DONE"
132+ echo
133+ echo " Done"
0 commit comments