in source/src/molecule-unfolding/utility/GraphModel.py [0:0]
def build_rb_data(self):
# find L/R fragments
rb_data = {}
self.rb_name = []
def clear_set(src, value):
for i in range(2):
if value[i] in src:
src.remove(value[i])
def update_pts_pair(rb_data):
rb_data['pair_set'] = set()
for f_0_pt in rb_data['f_0_set']:
for f_1_pt in rb_data['f_1_set']:
pair_pts = (f_0_pt, f_1_pt)
if pair_pts not in rb_data['pair_set']:
rb_data['pair_set'].add(pair_pts)
# add list to save invalid rb
invalid_rb_list = []
invalid_rb_name_list = []
for rb in self.rb_list:
self.mol_ug.remove_edge(rb[0], rb[1])
current_rb_name = "{}+{}".format(rb[0], rb[1])
self.rb_name.append(current_rb_name)
# print(rb_name)
if current_rb_name not in rb_data.keys():
rb_data[current_rb_name] = {}
i = 0
for pts in nx.connected_components(self.mol_ug):
# print(pts)
update_pts = pts.copy()
clear_set(update_pts, rb)
rb_data[current_rb_name]['f_{}_set'.format(i)] = update_pts
i = i + 1
if "f_1_set" not in rb_data[current_rb_name].keys():
invalid_rb_list.append(rb)
invalid_rb_name_list.append(current_rb_name)
# print(f"rb_name {current_rb_name} f_0_set {rb_data[current_rb_name]['f_0_set']} with length {len(rb_data[current_rb_name]['f_0_set'])}")
# update bc score
rb_data[current_rb_name]['bc_num'] = (
self.bc[rb[0]] + self.bc[rb[1]])/2
# update make pts pair set
# update_pts_pair(rb_data[rb_name])
self.mol_ug.add_edge(rb[0], rb[1])
for invalid_rb, invalid_rb_name in zip(invalid_rb_list, invalid_rb_name_list):
self.rb_list.remove(invalid_rb)
del rb_data[invalid_rb_name]
sort_rb_data = {k: v for k, v in sorted(rb_data.items(), key=lambda rb: -rb[1]['bc_num'])}
rb_data_list = []
for rb, data in sort_rb_data.items():
if len(rb_data_list) == 0:
current_rb_data = {}
else:
current_rb_data = rb_data_list[-1].copy()
current_rb_data[rb] = data
rb_data_list.append(current_rb_data)
logging.debug(rb_data_list)
return rb_data, rb_data_list