我正在尝试编写一个程序,可以索引FASTQ文件的读取并在附加到每个读取的条形码上运行QC。我使用字典来存储使用条形码作为键的索引 - 相应的值是保存索引的列表列表。条形码是包含字母A,T,G和C的8字符字符串。
读取看起来像这样,带有标题,序列,+和另一个序列:
@ ST-K00127:119:HF2FVBBXX:8:1101:31253:1595 1:N:0:TCTTCACA TTTTTCATTGATCTGTCGCAAGGCTTCCTCCGCTGTACCGTTTAACTTGAATTCCATTACGTAAATAAATCTGTCTGTC + AAAFFJJFJJJJJFJJJ
字典元素可能如下所示: 关键:TCTTCACA值:[[0,350],[351,500]]
现在我正在尝试运行一个测量两个条形码之间编辑距离的函数,我想对每个条形码对照字典中的所有其他条形码执行此操作。我正在创建一个存储所有编辑距离的上三角矩阵,然后我找到编辑距离等于1或2的位置数。问题是我不断得到不同数量的位置,除非我按键列表排序事先,我认为这不应该有所作为,因为无论列表的顺序如何,所有元素仍然相互比较。有人能帮我吗?我想知道这是不是我的代码,或者是否在幕后发生了我不知道的事情。
代码示例:
key_list = list(barcode_index.keys())
N = len(key_list)
barcode_matrix = np.zeros((N, N))
for i in range(N)):
for j in range(i+1,N):
barcode_matrix[i,j] = calculate_distance(key_list[i], key_list[j])
error_barcodes1 = np.where(barcode_matrix==1)
error_barcodes2 = np.where(barcode_matrix==2)
def calculate_distance(barcode1, barcode2):
distance = 0
for i in range(0,8):
if barcode1[i] != barcode2[i]:
distance += 1
return distance