Skip to content

Commit

Permalink
added source_type to Study Arm; tests needed #329
Browse files Browse the repository at this point in the history
  • Loading branch information
Zigur committed Jul 26, 2019
1 parent 5bbb08f commit 264a390
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 14 deletions.
49 changes: 40 additions & 9 deletions isatools/create/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,14 +94,18 @@
with open(os.path.join(os.path.dirname(__file__), '..', 'resources', 'config', 'yaml',
'study-creator-config.yaml')) as yaml_file:
yaml_config = yaml.load(yaml_file)
default_ontology_source_reference = OntologySource(**yaml_config['study']['ontology_source_references'][0])
default_ontology_source_reference = OntologySource(**yaml_config['study']['ontology_source_references'][1])

DEFAULT_SOURCE_TYPE = Characteristic(
category=OntologyAnnotation(term='Material Type'),
category=OntologyAnnotation(
term='Study Subject',
term_source=default_ontology_source_reference,
term_accession='http://purl.obolibrary.org/obo/NCIT_C41189'
),
value=OntologyAnnotation(
term='subject',
term='Human',
term_source=default_ontology_source_reference,
term_accession='0100051')
term_accession='http://purl.obolibrary.org/obo/NCIT_C14225')
)

ZFILL_WIDTH = 3
Expand Down Expand Up @@ -1597,34 +1601,49 @@ class StudyArm(object):

ARM_MAP_ASSIGNMENT_ERROR = 'arm_map must be an OrderedDict'

def __init__(self, name, arm_map=None, group_size=0):
DEFAULT_SOURCE_TYPE = DEFAULT_SOURCE_TYPE

def __init__(self, name, arm_map=None, source_type=None, group_size=0):
"""
The default constructor.
:param name: string
:param arm_map: OrderedDict - a StudyCell -> SampleAndAssayPlan ordered mapping
:param source_type: Characteristic/str - determines the "type" of the subjects/sources
:param group_size: int - a positive integer who specifies the number of subject in the Arm
"""
self.__name = ''
self.__source_type = None
self.__group_size = None
self.__arm_map = OrderedDict()
self.name = name
self.group_size = group_size
if arm_map is not None:
self.arm_map = arm_map
if source_type:
self.source_tye = source_type

def __repr__(self):
return '{0}.{1}(' \
'name={name}, ' \
'source_type={source_type}, ' \
'group_size={group_size}, ' \
'cells={cells}, ' \
'sample_assay_plans={sample_assay_plans})'.format(
self.__class__.__module__, self.__class__.__name__, name=self.name, group_size=self.group_size,
self.__class__.__module__, self.__class__.__name__, name=self.name,
source_type=self.source_type, group_size=self.group_size,
cells=self.cells, sample_assay_plans=self.sample_assay_plans
)

def __str__(self):
return """"{1}(
name={name},
source_type={source_type},
group_size={group_size},
cells={cells},
sample_assay_plans={sample_assay_plans}
)""".format(
self.__class__.__module__, self.__class__.__name__, name=self.name, group_size=self.group_size,
cells=self.cells, sample_assay_plans=self.sample_assay_plans
source_type=self.source_type, cells=self.cells, sample_assay_plans=self.sample_assay_plans
)

def __hash__(self):
Expand All @@ -1647,6 +1666,19 @@ def name(self, name):
raise AttributeError('StudyArm name must be a string')
self.__name = name

@property
def source_type(self):
if self.__source_type:
return self.__source_type
else:
return self.DEFAULT_SOURCE_TYPE

@source_type.setter
def source_type(self, source_type):
if not isinstance(source_type, (str, Characteristic)):
raise AttributeError('The source_type property must be either a string or a valid characteristic')
self.__source_type = source_type

@property
def group_size(self):
return self.__group_size
Expand Down Expand Up @@ -1824,7 +1856,6 @@ def __init__(self, name='Study Design', source_type=DEFAULT_SOURCE_TYPE, study_a
if study_arms:
self.study_arms = study_arms


@property
def name(self):
return self.__name
Expand Down Expand Up @@ -2010,7 +2041,7 @@ def _generate_samples(self, sources_map, sampling_protocol, performer, split_ass
def _generate_isa_elements_from_node(node, assay_graph, processes=[], other_materials=[], data_files=[],
previous_items=[], ix=0):
log.debug('# processes: {0}'.format(len(processes)))
item = isa_objects_factory(node, ix)
item = isa_objects_factory(node, sequence_no=ix)
if isinstance(item, Process):
item.inputs = previous_items
processes.append(item)
Expand Down
4 changes: 4 additions & 0 deletions isatools/resources/config/yaml/study-creator-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ study:
file: 'https://raw.githubusercontent.com/obi-ontology/obi/v2018-02-12/obi.owl'
version: 'v2018-02-12'
description: 'Ontology for Biomedical Investigations'
- name: 'NCIT',
file: 'http://purl.obolibrary.org/obo/ncit/releases/2019-03-02/ncit.owl'
version: '19.02d'
description: 'NCI Thesaurus OBO Edition'
protocols:
- name: 'sample collection'
protocol_type: 'sample_collection'
Expand Down
11 changes: 6 additions & 5 deletions tests/test_create_models_study_design.py
Original file line number Diff line number Diff line change
Expand Up @@ -913,19 +913,20 @@ def test_repr(self):

def test_str(self):
qc = QualityControl()
self.assertEqual(str(qc), """QualityControl(
self.assertEqual(str(qc).replace(" ", ""), """QualityControl(
pre_run_sample_type=None
post_run_sample_type=None
interspersed_sample_types=[]
)""")
)""".replace(" ", ""))
qc = QualityControl(interspersed_sample_type=self.interspersed_sample_types,
pre_run_sample_type=self.pre_run_sample_type,
post_run_sample_type=self.post_run_sample_type)
self.assertEqual(str(qc), """QualityControl(
self.assertEqual(str(qc).replace(" ", ""), """QualityControl(
pre_run_sample_type={0}
post_run_sample_type={1}
interspersed_sample_types=[({2},{3})]
)""".format(self.pre_run_sample_type.id, self.post_run_sample_type.id, self.dummy_sample_type.id, 20))
interspersed_sample_types=[('{2}',{3})]
)""".format(self.pre_run_sample_type.id, self.post_run_sample_type.id, self.dummy_sample_type.id, 20)
.replace(" ", ""))


class AssayGraphTest(unittest.TestCase):
Expand Down

0 comments on commit 264a390

Please sign in to comment.