def processFeatures(self):
sys.stderr.write("parsing features and constructing kmer graph\n")
kmer_q=deque()
prev_feature=None
#loop through figfams to create kmers
repeat_num=1
update_repeats=[]
for feature in self.feature_parser.parse():
if prev_feature and prev_feature.group_id == feature.group_id and prev_feature.contig_id == feature.contig_id:
repeat_num+=1
update_repeats.append(prev_feature)
if self.eat_repeats:
continue
else:
if repeat_num >1:
update_repeats.append(prev_feature)
for to_up in update_repeats:
to_up.repeat_num =repeat_num
repeat_num=1
update_repeats=[]
feature.feature_id= len(self.feature_index)
self.feature_index.append(feature)
if prev_feature == None or prev_feature.genome_id != feature.genome_id:
self.trackDiversity(feature.feature_id, self.all_diversity)
if feature.genome_id not in self.replicon_map:
self.replicon_map[feature.genome_id]=set()
else:
self.replicon_map[feature.genome_id].add(feature.contig_id)
if(prev_feature and prev_feature.contig_id != feature.contig_id):
kmer_q=deque()#clear kmer stack because switching replicons
self.prev_node=None
self.prev_indices=[]
elif prev_feature and prev_feature.contig_id == feature.contig_id:
if prev_feature.start > feature.start:
assert InputError
#depending on the context populate the context bin with appropriate ids to detect duplicates
if self.context:
if(prev_feature and prev_feature.getContextValue(self.context) != feature.getContextValue(self.context)):
self.context_bin.clear()
kmer_q.append(feature)#append the feature to the queue
if(len(kmer_q)>self.ksize):
kmer_q.popleft()
self.addRFNode(kmer_q)
elif(len(kmer_q)== self.ksize):
self.addRFNode(kmer_q)#right now only passing in the last figfams information
else:#kmer size is less than ksize
kmer=None
prev_feature=feature
if self.debug: nx.set_node_attributes(self.rf_graph, "visit", "")
评论列表
文章目录