Coverage for src / optwps / read_validator.py: 93%

15 statements  

« prev     ^ index     » next       coverage.py v7.14.0, created at 2026-05-26 00:24 +0200

1import pysam 

2 

3from .read_processing import valid_read_info 

4 

5 

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.""" 

12 

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 

23 

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 

32 

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 )