AlphaFold3 data_pipeline 模块DataPipeline类的 process_multiseq_fasta
方法用于处理多序列 FASTA 文件,生成 AlphaFold3 结构预测所需的特征,适用于多链复合物的预测。它结合了 Minkyung Baek 在 Twitter 上提出的“AlphaFold-Gap”策略,即通过在多链 MSA 中插入固定长度的 gap 以模拟多链复合物。
源代码:
def process_multiseq_fasta(self,fasta_path: str,super_alignment_dir: str,ri_gap: int = 200,) -> FeatureDict:"""Assembles features for a multi-sequence FASTA. Uses Minkyung Baek'shack from Twitter (a.k.a. AlphaFold-Gap)."""with open(fasta_path, 'r') as f:fasta_str = f.read()input_seqs, input_descs = parsers.parse_fasta(fasta_str)# No whitespace allowedinput_descs = [i.split()[0] for i in input_descs]# Stitch all of the sequences togetherinput_sequence = ''.join(input_seqs)input_description = '-'.join(input_descs)num_res = len(input_sequence)sequence_features = make_sequence_features(sequence=input_sequence,description=input_description,num_res=num_res,)seq_lens = [len(s) for s in input_seqs]total_offset = 0for sl in seq_lens:total_offset += slsequence_features["residue_index"][total_offset:] += ri_gapmsa_list = []deletion_mat_list = []for seq, desc in zip(input_seqs, input_descs):alignment_dir = os.path.join(super_alignment_dir, desc)msas = self._get_msas(alignment_dir, seq, None)msa_list.append([m.sequences for m in msas])deletion_mat_list.append([m.deletion_matrix for m in msas])final_msa = []final_deletion_mat = []final_msa_obj = []msa_it = enumerate(zip(msa_list, deletion_mat_list))for i, (msas, deletion_mats) in msa_it:prec, post = sum(seq_lens[:i]), sum(seq_lens[i + 1:])msas = [[prec * '-' + seq + post * '-' for seq in msa] for msa in msas]deletion_mats = [[prec * [0] +