Dear,
I do have a 2x150 mRNA-seq experiment with 3 drosophila replicates :
file format type num_seqs sum_len min_len avg_len max_len
A1_R1.fastq.gz FASTQ DNA 22,721,029 3,408,154,350 150 150 150
A1_R2.fastq.gz FASTQ DNA 22,721,029 3,408,154,350 150 150 150
A2_R1.fastq.gz FASTQ DNA 24,093,863 3,614,079,450 150 150 150
A2_R2.fastq.gz FASTQ DNA 24,093,863 3,614,079,450 150 150 150
A3_R1.fastq.gz FASTQ DNA 24,080,758 3,612,113,700 150 150 150
A3_R2.fastq.gz FASTQ DNA 24,080,758 3,612,113,700 150 150 150
One goal of this study is to identify the TE copies of a transposon (called "412") potentially exprimed. And if possible, their proportions. For that, I have a multi-fasta file with the 30 known copies we identified. Here is the multi alignment of these copies :
-> they are similar at >98% , about ~7.5kb each and only few snvs/indels could difference them. I know a long read sequencing could fix the problem but we now have only short-reads, and that question came up later in our full study.
I tried some things to response it (with some BLAST outputs but too tricky, star/hisat2 mapping and extract the uniquely mapped reads) , but the most robust seems to be using salmon (or kallisto).
I ran salmon directly on the raw reads with :
for sample in A1 A2 A3
do
salmon quant \
-i $HOME/Analyse_DM412/mapping/salmon/DM412_all_isoforms.index \
-l IU \
-1 $HOME/Analyse_DM412/fastqReads/${sample}_R1.fastq.gz \
-2 $HOME/Analyse_DM412/fastqReads/${sample}_R2.fastq.gz \
-p 8 \
--validateMappings \
--seqBias --gcBias \
-z ${sample}_salmon/${sample}_alignment.sam \
-o ${sample}_salmon
done
I show the quant results only for the 5 first copies :
==> A1_salmon/quant.sf <==
Name Length EffectiveLength TPM NumReads
412-1-chrX-ref|NC_004354.4|:10138270-10145710 7441 7830.687 17337.115815 634.456
412-2-chrX-ref|NC_004354.4|:551477-558981 7505 7872.176 41855.810400 1539.839
412-5-chrX-ref|NC_004354.4|:1033407-1040982 7576 7949.727 0.000000 0.000
412-6-chrX-ref|NC_004354.4|:19136607-19143468 6862 6882.823 6041.067240 194.314
412-4-chrX-ref|NC_004354.4|:5524896-5528701 3806 3632.014 98162.348244 1666.162
==> A2_salmon/quant.sf <==
Name Length EffectiveLength TPM NumReads
412-1-chrX-ref|NC_004354.4|:10138270-10145710 7441 7869.034 31721.650122 1214.067
412-2-chrX-ref|NC_004354.4|:551477-558981 7505 7982.440 65734.986659 2552.099
412-5-chrX-ref|NC_004354.4|:1033407-1040982 7576 8055.466 0.000000 0.000
412-6-chrX-ref|NC_004354.4|:19136607-19143468 6862 6997.530 5434.429198 184.954
412-4-chrX-ref|NC_004354.4|:5524896-5528701 3806 3543.578 57323.131025 987.955
==> A3_salmon/quant.sf <==
Name Length EffectiveLength TPM NumReads
412-1-chrX-ref|NC_004354.4|:10138270-10145710 7441 7795.757 19247.178710 1156.249
412-2-chrX-ref|NC_004354.4|:551477-558981 7505 7836.288 56558.662685 3415.351
412-5-chrX-ref|NC_004354.4|:1033407-1040982 7576 7917.329 0.000000 0.000
412-6-chrX-ref|NC_004354.4|:19136607-19143468 6862 6866.519 10016.912066 530.025
412-4-chrX-ref|NC_004354.4|:5524896-5528701 3806 3616.071 101893.786777 2839.295
-> It is very between replicates. When I do a PCA based on the coverage with plotPCA, they still go together.
If I do filter the secondary/supplementary + <Q20 alignments, I loose all the signal.. Do you think I could rely on the salmon results?
Thanks for the help, Paillou
0 answers
No answers yet.
Log in to answer this question.
I can't remember exactly how Salmon quantifies the quality score but I believe it isn't a phred score. Q20 is generally a good filter for the raw reads but I am not sure why you are using this value here. Do you lose the signal if you just remove secondary and supplemental alignments? After that You are already using the
--validatemappingsparameter so the mapping should pass those thresholds, and a post-mapping quality filter is probably not necessary.Are the TE copies with large gaps functional? And do you need to track individual copies? otherwise, considering the similarity, can you just generate a single or several consensus sequences to simplify the analysis?
Thanks for the answer,
I do use this value just as a "symbolic" value, since in it is a common value in the analysis pipelines. If I only filter the secondary and supplemental alignments, I will also lose the signal. That's why I don't really understand how the
--validatemappingsworks in Salmon (first time I use it).TE copies with large gaps are functional yes. The TE in question is 412, known in Drosophila with 2 ORFs. I was also considering one or more consensus, with common SNVs/indels to get some clusters (with a custom script, or if you know a tool to achieve it?): I won't be as precise as with single copy sequences, but it could be a start.
In any way, tt the end, long reads sequencing will be the solution.
What exactly is the signal that you lose?
Do you care if different version of 412 are expressed or just that this TE in general? I think long-reads would only really help if you want to isolate expression of different versions of 412.
For the consensus sequence, a classic way to do it (and used often when generating TE libraries for better or worse) is using cd-hit-est e.g.
cd-hit-est -i 412.fa -o 412.consensus.fa -d 0 -aS 0.8 -c 0.8 -G 0 -g 1 -b 500following the 80-80-80 rule. This should cluster most of yours, but it could be adjusted to 90-90-90 if you want to see a few variations. I think using a consensus sequence would be just as precise (of course not exactly but it is a proxy for expression regardless) as you average out coverage across the element and the different elements are apparently very similar.I mean I lose all my alignments if I do remove secondary and supplemental alignments.
For sure, long-reads is the solution. It is in discussion in our team.
Thanks for the cdhit tip. I digged a bit and I think a kmer approach could be suit :
jellyfishorUniqueKMERto generate the kmers on my multi fastaIf you are losing all your alignments, I think the filtering is just not working properly. In all cases I know of, each read will be given a primary alignment which should remain after your filtering.
Can you show some stats of your alignments? e.g.
samtools statsto look at the number of secondary/supp alignments etc.Then can you show what command you are using for filtering.