def test_extract_per_individual_state_metadata_from_sample_metadata_and_biom( self): """extract_per_individual_state_metadata_from_sample_metadata_and_biom functions as expected """ # single observations o1_expected = {'o1': {'001': [22, 10], '006': [25, 4], '007': [33, 26], '008': [99, 75]}} actual = extract_per_individual_state_metadata_from_sample_metadata_and_biom( self.individual_states_and_responses_map_f1, self.paired_difference_biom1, state_category="TreatmentState", state_values=["Pre", "Post"], individual_identifier_category="PersonalID", observation_ids=['o1']) self.assertEqual(actual, o1_expected) # all observations all_expected = {'o1': {'001': [22, 10], '006': [25, 4], '007': [33, 26], '008': [99, 75]}, 'o2': {'001': [10, 44], '006': [3, 99], '007': [8, 18], '008': [64, 164]}, 'o3': {'001': [10, 50], '006': [50, 10], '007': [10, 50], '008': [50, 10]}} actual = extract_per_individual_state_metadata_from_sample_metadata_and_biom( self.individual_states_and_responses_map_f1, self.paired_difference_biom1, state_category="TreatmentState", state_values=["Pre", "Post"], individual_identifier_category="PersonalID", observation_ids=None) self.assertEqual(actual, all_expected) # invalid observation id self.assertRaises( UnknownIDError, extract_per_individual_state_metadata_from_sample_metadata_and_biom, self.individual_states_and_responses_map_f1, self.paired_difference_biom1, state_category="TreatmentState", state_values=["Pre", "Post"], individual_identifier_category="PersonalID", observation_ids=['o1', 'bad.obs.id'])
def test_extract_per_individual_state_metadata_from_sample_metadata_and_biom(self): """extract_per_individual_state_metadata_from_sample_metadata_and_biom functions as expected """ # single observations o1_expected = {'o1':{'001':[22,10], '006':[25,4], '007':[33,26], '008':[99,75]}} actual = extract_per_individual_state_metadata_from_sample_metadata_and_biom( self.individual_states_and_responses_map_f1, self.paired_difference_biom1, state_category="TreatmentState", state_values=["Pre","Post"], individual_identifier_category="PersonalID", observation_ids=['o1']) self.assertEqual(actual,o1_expected) # all observations all_expected = {'o1':{'001':[22,10], '006':[25,4], '007':[33,26], '008':[99,75]}, 'o2':{'001':[10,44], '006':[3,99], '007':[8,18], '008':[64,164]}, 'o3':{'001':[10,50], '006':[50,10], '007':[10,50], '008':[50,10]}} actual = extract_per_individual_state_metadata_from_sample_metadata_and_biom( self.individual_states_and_responses_map_f1, self.paired_difference_biom1, state_category="TreatmentState", state_values=["Pre","Post"], individual_identifier_category="PersonalID", observation_ids=None) self.assertEqual(actual,all_expected) # invalid observation id self.assertRaises( UnknownID, extract_per_individual_state_metadata_from_sample_metadata_and_biom, self.individual_states_and_responses_map_f1, self.paired_difference_biom1, state_category="TreatmentState", state_values=["Pre","Post"], individual_identifier_category="PersonalID", observation_ids=['o1','bad.obs.id'])
def main(): option_parser, opts, args =\ parse_command_line_parameters(**script_info) mapping_fp = opts.mapping_fp state_values = opts.state_values.split(',') metadata_categories = opts.metadata_categories state_category = opts.state_category individual_id_category = opts.individual_id_category output_dir = opts.output_dir biom_table_fp = opts.biom_table_fp observation_ids = opts.observation_ids if not observation_ids is None: observation_ids = observation_ids.split(',') valid_states = opts.valid_states ymin = opts.ymin ymax = opts.ymax line_color = opts.line_color # validate the input - currently only supports either biom data # or mapping file data. if useful in the future it shouldn't be too # hard to allow the user to provide both. if metadata_categories and biom_table_fp: option_parser.error( "Can only pass --metadata_categories or --biom_table_fp, not both.") elif not (metadata_categories or biom_table_fp): option_parser.error( "Must pass either --metadata_categories or --biom_table_fp.") else: pass # parse the mapping file to a dict mapping_data = parse_mapping_file_to_dict(open(mapping_fp, 'U'))[0] # currently only support for pre/post (ie, two-state) tests if len(state_values) != 2: option_parser.error( "Exactly two state_values must be passed separated by a comma.") # filter mapping_data, if requested if valid_states: sample_ids_to_keep = sample_ids_from_metadata_description( open(mapping_fp, 'U'), valid_states) for sid in mapping_data.keys(): if sid not in sample_ids_to_keep: del mapping_data[sid] if biom_table_fp: biom_table = parse_biom_table(open(biom_table_fp, 'U')) analysis_categories = observation_ids or biom_table.ObservationIds personal_ids_to_state_values = \ extract_per_individual_state_metadata_from_sample_metadata_and_biom( mapping_data, biom_table, state_category, state_values, individual_id_category, observation_ids=analysis_categories) else: analysis_categories = metadata_categories.split(',') personal_ids_to_state_values = \ extract_per_individual_state_metadata_from_sample_metadata( mapping_data, state_category, state_values, individual_id_category, analysis_categories) paired_difference_analyses(personal_ids_to_state_values, analysis_categories, state_values, output_dir, line_color=line_color, ymin=ymin, ymax=ymax)
def main(): option_parser, opts, args =\ parse_command_line_parameters(**script_info) mapping_fp = opts.mapping_fp state_values = opts.state_values.split(',') metadata_categories = opts.metadata_categories state_category = opts.state_category individual_id_category = opts.individual_id_category output_dir = opts.output_dir biom_table_fp = opts.biom_table_fp observation_ids = opts.observation_ids if not observation_ids is None: observation_ids = observation_ids.split(',') valid_states = opts.valid_states ymin = opts.ymin ymax = opts.ymax line_color = opts.line_color # validate the input - currently only supports either biom data # or mapping file data. if useful in the future it shouldn't be too # hard to allow the user to provide both. if metadata_categories and biom_table_fp: option_parser.error( "Can only pass --metadata_categories or --biom_table_fp, not both." ) elif not (metadata_categories or biom_table_fp): option_parser.error( "Must pass either --metadata_categories or --biom_table_fp.") else: pass # parse the mapping file to a dict mapping_data = parse_mapping_file_to_dict(open(mapping_fp, 'U'))[0] # currently only support for pre/post (ie, two-state) tests if len(state_values) != 2: option_parser.error( "Exactly two state_values must be passed separated by a comma.") # filter mapping_data, if requested if valid_states: sample_ids_to_keep = sample_ids_from_metadata_description( open(mapping_fp, 'U'), valid_states) for sid in mapping_data.keys(): if sid not in sample_ids_to_keep: del mapping_data[sid] if biom_table_fp: biom_table = parse_biom_table(open(biom_table_fp, 'U')) analysis_categories = observation_ids or biom_table.ObservationIds personal_ids_to_state_values = \ extract_per_individual_state_metadata_from_sample_metadata_and_biom( mapping_data, biom_table, state_category, state_values, individual_id_category, observation_ids=analysis_categories) else: analysis_categories = metadata_categories.split(',') personal_ids_to_state_values = \ extract_per_individual_state_metadata_from_sample_metadata( mapping_data, state_category, state_values, individual_id_category, analysis_categories) paired_difference_analyses(personal_ids_to_state_values, analysis_categories, state_values, output_dir, line_color=line_color, ymin=ymin, ymax=ymax)