diff --git a/hi-classifier/restriction_site.py b/hi-classifier/restrictionsite.py similarity index 91% rename from hi-classifier/restriction_site.py rename to hi-classifier/restrictionsite.py index cc28b647a633dbc5be30d092c9a097d7744bdc71..e2303f18e50b6429a7650b3c7231581880372c09 100644 --- a/hi-classifier/restriction_site.py +++ b/hi-classifier/restrictionsite.py @@ -133,7 +133,7 @@ def get_restriction_site_patterns( de motifs regex compilés (et leur longueur). Si le site est, par exemple, "N^GATC_N", la partie effective devient "GATC" - (après suppression de '^', '_' et des 'N' superflus). + (après suppression de '^', '_', et des 'N' superflus autour). Parameters: enzymes (List[str]): Liste des noms d'enzymes (ex: ["HindIII", "DpnII"]). @@ -141,29 +141,37 @@ def get_restriction_site_patterns( Returns: List[Tuple[re.Pattern, int]]: Liste de tuples (motif_compilé, longueur). - Ex: [(re.compile("GATC"), 4), (re.compile("GATC"), 4)] pour un palindrome. + Ex: [(re.compile("GATC"), 4)] pour DpnII (palindromique). Examples: >>> # Exemple avec DpnII, qui a un site palindromique GATC >>> result = get_restriction_site_patterns(["DpnII"]) >>> result - [(re.compile('.GATC.'), 6)] + [(re.compile('GATC'), 4)] """ results: List[Tuple[re.Pattern, int]] = [] restriction_batch = RestrictionBatch(enzymes) for enzyme in restriction_batch: site_raw = enzyme.elucidate() + # 1) On enlève '^' et '_' (si présents) site_clean = site_raw.replace("^", "").replace("_", "") - # Remplacer 'N' par '.' pour autoriser n'importe quelle base - pattern_fw = re.compile(site_clean.replace("N", ".")) + # 2) Supprimer les 'N' en début + while site_clean.startswith("N"): + site_clean = site_clean[1:] + # 3) Supprimer les 'N' en fin + while site_clean.endswith("N"): + site_clean = site_clean[:-1] + + # Le motif final + pattern_fw = re.compile(site_clean) results.append((pattern_fw, len(site_clean))) - # Vérifier le RC + # 4) Calcul du reverse complément rc_site = str(Seq(site_clean).reverse_complement()) if rc_site != site_clean: - pattern_rc = re.compile(rc_site.replace("N", ".")) + pattern_rc = re.compile(rc_site) results.append((pattern_rc, len(rc_site))) return results @@ -190,7 +198,7 @@ def SearchInDataBase(Enzymes: str) -> Tuple[List[Any], List[Any]]: >>> result = SearchInDataBase("dpnii") Ligation sites: GATCGATC >>> result - ([(re.compile('GATCGATC'), 4)], [(re.compile('.GATC.'), 6)]) + ([(re.compile('GATCGATC'), 4)], [(re.compile('GATC'), 4)]) >>> # Exemple avec DpnII, qui a un site palindromique GATC >>> result = SearchInDataBase("arima") @@ -201,8 +209,7 @@ def SearchInDataBase(Enzymes: str) -> Tuple[List[Any], List[Any]]: Ligation sites: GATCA.TC Ligation sites: GA.TA.TC >>> result - ([(re.compile('GATCGATC'), 4), (re.compile('GATCA.TC'), 4), (re.compile('GA.TGATC'), 4), (re.compile('GA.TGATC'), 4), (re.compile('GATCA.TC'), 4), (re.compile('GA.TA.TC'), 4)], [(re.compile('.GATC.'), 6), (re.compile('GA.TC'), 5)]) - + ([(re.compile('GATCGATC'), 4), (re.compile('GATCA.TC'), 4), (re.compile('GA.TGATC'), 4), (re.compile('GA.TGATC'), 4), (re.compile('GATCA.TC'), 4), (re.compile('GA.TA.TC'), 4)], [(re.compile('GATC'), 4), (re.compile('GANTC'), 5)]) """ if Enzymes == "No restriction enzyme found": print(Enzymes)