Source code for checkQC.handlers.q30_handler
from checkQC.handlers.qc_handler import QCHandler, QCErrorFatal, QCErrorWarning
from checkQC.parsers.interop_parser import InteropParser
[docs]class Q30Handler(QCHandler):
"""
This handler checks that the percent of bases on a lane and reads with Q30 or high was
above the specified threshold.
"""
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.error_results = []
[docs] def parser(self):
"""
The Q30Handler fetches its data from the Interop files
:returns: A InteropParser callable
"""
return InteropParser
[docs] def collect(self, signal):
key, value = signal
if key == "percent_q30":
self.error_results.append(value)
[docs] def check_qc(self):
for error_dict in self.error_results:
lane_nbr = int(error_dict["lane"])
read = error_dict["read"]
percent_q30 = error_dict["percent_q30"]
if self.error() != self.UNKNOWN and percent_q30 < self.error():
yield QCErrorFatal("%Q30 {:.2f} was too low on lane: {} for read: {}".format(percent_q30,
lane_nbr,
read),
ordering=lane_nbr,
data={"lane": lane_nbr, "read": read,
"percent_q30": percent_q30, "threshold": self.error()})
elif self.warning() != self.UNKNOWN and percent_q30 < self.warning():
yield QCErrorWarning("%Q30 {:.2f} was too low on lane: {} for read: {}".format(percent_q30,
lane_nbr,
read),
ordering=lane_nbr,
data={"lane": lane_nbr, "read": read,
"percent_q30": percent_q30, "threshold": self.warning()})
else:
continue