diff --git a/crisprbact/predict.py b/crisprbact/predict.py index 00f3aeabcba89cb2d18245d2620d84d21aa270bf..1dd657cb1bafbf30fc2981cdfff1d76c17c793bd 100644 --- a/crisprbact/predict.py +++ b/crisprbact/predict.py @@ -71,11 +71,12 @@ def on_target_predict(seq, genome=None, seed_sizes=[8, 9, 10, 11, 12]): for i, target in enumerate(alltargets): target_id = i + 1 - target.update({"id": target_id}) + target.update({"target_id": target_id}) target.update({"pred": preds[i]}) if genome: off_targets_per_seed = [] for seed_size in seed_sizes: + # off-target found for a guide off_target_df = compute_off_target_df( target["guide"], seed_size, records, genome_features ) @@ -87,7 +88,7 @@ def on_target_predict(seq, genome=None, seed_sizes=[8, 9, 10, 11, 12]): ] for j, off_t in enumerate(off_targets.values.tolist()): off_target_dict = { - "id": str(target_id) + "off_target_id": str(target_id) + "-" + str(seed_size) + "-" @@ -98,7 +99,8 @@ def on_target_predict(seq, genome=None, seed_sizes=[8, 9, 10, 11, 12]): "off_target_strand": off_t[3], "off_target_recid": off_t[4], } - + # Filter the off targets if the strand + # is not the opposite of the feature off_t[5] = list( filter( lambda feat: get_strand_value( @@ -108,6 +110,7 @@ def on_target_predict(seq, genome=None, seed_sizes=[8, 9, 10, 11, 12]): off_t[5], ) ) + # Loop through features associated to an off-target position if len(off_t[5]) > 0: # Loop for each feature for feat in off_t[5]: @@ -119,7 +122,9 @@ def on_target_predict(seq, genome=None, seed_sizes=[8, 9, 10, 11, 12]): } for k, feat in feat.qualifiers.items(): if k != "translation": - feature_dict[k] = "::".join(feat) + feature_dict["off_target_" + k] = "::".join( + feat + ) off_targets_list.append( {**feature_dict, **off_target_dict} ) @@ -137,7 +142,7 @@ def on_target_predict(seq, genome=None, seed_sizes=[8, 9, 10, 11, 12]): { "id": str(i) + "-" + str(seed_size), "seed_size": seed_size, - "off_targets": off_targets_list, + "off_targets": [], } ) # target.update({"off_targets": off_targets_list})