"""
Class and methods to perform routine sex check on all processed libraries.
"""
import logging
from .. import database
logger = logging.getLogger(__name__)
[docs]class SexVerifier(object):
"""
Identifies, stores, and updates information about a workflow batch.
"""
def __init__(self, data, processedlibrary, db):
logger.debug("creating `SexVerifier` instance")
self.data = data
self.processedlibrary = processedlibrary
self.db = db
[docs] def _retrieve_sex(self, parent_id):
"""
Retrieve reported sex for sample.
"""
logger.debug("searching parents of '{}' for reported sex"
.format(parent_id))
try:
logger.debug("searching for 'reportedSex' field...")
return database.search_ancestors(
self.db, parent_id, 'reportedSex'
).lower()
except AttributeError:
try:
logger.debug("searching for 'gender' field...")
return database.search_ancestors(
self.db, parent_id, 'gender'
).lower()
except AttributeError:
logger.debug("reported sex not found")
return
[docs] def verify(self):
"""
Compare reported sex for sample to predicted sex of processed
library.
:return:
"""
reported_sex = self._retrieve_sex(self.processedlibrary.parent_id)
logger.debug("reported sex is '{}'".format(reported_sex))
if self.data['predicted_sex'] == reported_sex:
self.data['sex_check'] = 'pass'
elif reported_sex is None:
self.data['sex_check'] = 'NA'
else:
self.data['sex_check'] = 'fail'
return self.data