Skip to content

Commit ad05489

Browse files
committed
Add strand & range filter logic to extract_exon_features in gff.py
1 parent d26d7bd commit ad05489

File tree

1 file changed

+24
-2
lines changed

1 file changed

+24
-2
lines changed

src/pycirclize/parser/gff.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,13 @@ def extract_features(
195195
)
196196
return [rec.to_seq_feature() for rec in gff_records]
197197

198-
def extract_exon_features(self, feature_type: str = "mRNA") -> list[SeqFeature]:
198+
def extract_exon_features(
199+
self,
200+
feature_type: str = "mRNA",
201+
*,
202+
target_strand: int | None = None,
203+
target_range: tuple[int, int] | None = None,
204+
) -> list[SeqFeature]:
199205
"""Extract exon structure features
200206
201207
Extract exons based on `parent feature` and `exon` ID-Parent relation
@@ -204,6 +210,10 @@ def extract_exon_features(self, feature_type: str = "mRNA") -> list[SeqFeature]:
204210
----------
205211
feature_type : str, optional
206212
Feature type (e.g. `mRNA`, `ncRNA` , etc...)
213+
target_strand : int | None, optional
214+
Extract target strand. If None, extract regardless of strand.
215+
target_range : tuple[int, int] | None, optional
216+
Extract target range. If None, extract regardless of range.
207217
208218
Returns
209219
-------
@@ -251,7 +261,19 @@ def extract_exon_features(self, feature_type: str = "mRNA") -> list[SeqFeature]:
251261

252262
exon_features.append(exon_feature)
253263

254-
return exon_features
264+
# Filter exon features by target strand & range
265+
filter_exon_features = []
266+
for feature in exon_features:
267+
if target_strand is not None and feature.strand != target_strand:
268+
continue
269+
if target_range is not None:
270+
start, end = int(feature.location.start), int(feature.location.end) # type: ignore
271+
min_range, max_range = min(target_range), max(target_range)
272+
if not min_range <= start <= end <= max_range:
273+
continue
274+
filter_exon_features.append(feature)
275+
276+
return filter_exon_features
255277

256278
############################################################
257279
# Private Method

0 commit comments

Comments
 (0)