Beispiel #1
0
def seperate_parents_and_children(feature_db):
    parent_dict, child_dict, intermediate_dict = {}, {}, {}
    feature_types = feature_db.featuretypes()
    parent_types, child_types, intermediate_types = find_feature_type_order(
        feature_types, feature_db)
    feature_num = 0
    for parent_type in parent_types:
        for parent in feature_db.features_of_type(featuretype=parent_type):
            feature_num += 1
            parent_dict[parent.id] = parent
            child_dict[parent.id] = []
            for child_type in child_types:
                for child in feature_db.children(parent,
                                                 featuretype=child_type):
                    child_dict[parent.id].append(child)
                    if "Parent" not in child.attributes:
                        add_parent_tag(child, feature_db)
            if len(child_dict[parent.id]) == 0:
                child_dict[parent.id].append(parent)
    for intermediate_type in intermediate_types:
        for intermediate_feature in feature_db.features_of_type(
                featuretype=intermediate_type):
            intermediate_dict[intermediate_feature.id] = intermediate_feature
            if "Parent" not in intermediate_feature.attributes:
                add_parent_tag(intermediate_feature, feature_db)
    parent_order = liftoff_utils.find_parent_order([
        parent for parent in list(parent_dict.values()) if parent is not None
    ])
    return parent_dict, child_dict, intermediate_dict, parent_order
Beispiel #2
0
def check_homologues(all_lifted_features, lifted_features_to_check, parent_dict, original_parent_order):
    all_feature_list = liftoff_utils.get_parent_list(all_lifted_features, parent_dict)
    features_to_check_list = liftoff_utils.get_parent_list(lifted_features_to_check, parent_dict)
    all_feature_list.sort(key = lambda x: (x.seqid, x.start))
    new_parent_order = liftoff_utils.find_parent_order(all_feature_list)
    chrom_index_dict = {}
    feature_index = 0
    for feature in all_feature_list:
        if feature.seqid not in chrom_index_dict:
            chrom_index_dict[feature.seqid] = feature_index
        feature_index += 1
    remap_features = {}
    for feature in features_to_check_list:
        nearby_features = all_feature_list[chrom_index_dict[feature.seqid]:]
        compare_nearby_features(nearby_features, parent_dict, feature, remap_features, original_parent_order,
                                new_parent_order)
    return remap_features