Coverage for src / optwps / read_validator.py: 93%
15 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-25 22:34 +0200
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-25 22:34 +0200
1import pysam
3from .read_processing import valid_read_info
6class ReadValidator:
7 """
8 Validates reads based on criteria such as duplication, mapping quality,
9 insert size, and mappability.
10 This class encapsulates the logic for determining whether a read should be
11 included in WPS calculations."""
13 def __init__(
14 self,
15 min_insert_size=None,
16 max_insert_size=None,
17 mappability_file=None,
18 min_mappability_threshold=0.9,
19 ):
20 self.mappability_file = None
21 if mappability_file is not None:
22 import pyBigWig
24 self.mappability_file = pyBigWig.open(mappability_file)
25 if not self.mappability_file.isBigWig():
26 raise ValueError(
27 "Provided mappability file is not a valid BigWig file."
28 )
29 self.min_insert_size = min_insert_size
30 self.max_insert_size = max_insert_size
31 self.min_mappability_threshold = min_mappability_threshold
33 def valid_read(
34 self,
35 read: pysam.AlignedSegment,
36 upstream_limit: int = None,
37 downsample_ratio: float = None,
38 ):
39 """Check if a read is valid for WPS calculation based on various criteria."""
40 return valid_read_info(
41 read,
42 min_insert_size=self.min_insert_size,
43 max_insert_size=self.max_insert_size,
44 mappability_file=self.mappability_file,
45 min_mappability_threshold=self.min_mappability_threshold,
46 upstream_limit=upstream_limit,
47 downsample_ratio=downsample_ratio,
48 )