我正在使用条形码在PCR之前标记线粒体DNA链。条形码序列是未知的,但它们有18个核苷酸长,并且直接跟随已知的序列( CATCAT或TACTAC)。每个DNA分子都将获得一个唯一的条形码标识符。一旦分子经过PCR,我需要根据它们的18个核苷酸条形码对序列进行聚类,然后按条形码对序列进行比对。
举一个非常简单的例子,假设我有两个进入PCR反应的分子:
CATCATBARCODE1SEQUENCE1
TACTACBARCODE2SEQUENCE2
经过放大后,我得到了:
CATCATBARCODE1SEQUENCE1
CATCATBARCODE1SEQUENCE1
TACTACBARCODE2SEQUENCE2
TACTACBARCODE2SEQUENCE2
然后我想搜索位置6-13的序列部分,并基于该序列窗口对它们进行聚类,而不更改序列的其余部分,这实际上看起来就像我上面的一样。然后我就可以对相邻的序列进行比对。
关于如何在不考虑序列的其余部分的情况下完成序列窗口的聚类,您有什么想法吗?谢谢。
发布于 2016-02-18 22:57:38
过于简化的R代码,但似乎做了你所要求的:
seqs <- c('CATCATBARCODE1SEQUENCE1',
'CATCATBARCODE1SEQUENCE1',
'TACTACBARCODE2SEQUENCE2',
'TACTACBARCODE2SEQUENCE2' )
clusters <- list()
for (seq in seqs) {
barcode <- substr(seq, 7, 14)
if (!is.null(clusters[[barcode]])) {
clusters[[barcode]] <- append(clusters[[barcode]], seq)
} else {
clusters[[barcode]] <- c(seq)
}
}
print(clusters)
打印:
$BARCODE1
[1] "CATCATBARCODE1SEQUENCE1" "CATCATBARCODE1SEQUENCE1"
$BARCODE2
[1] "TACTACBARCODE2SEQUENCE2" "TACTACBARCODE2SEQUENCE2"
发布于 2016-02-21 07:54:11
假设您已经可以获得以CATCATBARCODEX开头的序列,那么我要做的就是在python中处理它。如果您的序列开始不同,那么您可能需要搜索CATCAT,并丢弃那些看起来处于错误位置的CATCAT。如果条形码的数量非常多,可能会有一些问题,但我认为对于大约100,000个简单的方法应该是可行的。
无论如何,一旦你找到CATCAT,我要做的就是建立一个条形码字典并开始过滤。然后,你只需撕下序列的第一部分,并使用任何方法进行比对(我有一个条形码项目,使用自定义基因组和领结是很方便的)。
假设您需要找到这个序列,而不是仅仅从它开始,在python中,解决方案应该是
my_dict= {}
for seq in seqs:
idx = seq.find("CATCAT")
idx2 = seq.find("TACTAC")
if idx==-1 and idx2==-1:continue
# here you need to consider the location of idx and idx2, both may be present, sequence needs to be long enough etc
barcode = seq[idx+6, idx+6+18]
# you may want to shorten the barcode or encode it to a string
if barcode in my_dict:
my_dict[barcode]=1
else :
my_dict[barcode]+=1;
seq=seq[idx+24:]
除了计数之外,您还可以1)按条形码将序列附加到fasta文件,或2)将条形码作为注释分配给大型fasta文件。
无论如何,您可能想要剥离序列以简化下游分析。
https://stackoverflow.com/questions/35329732
复制相似问题