示例#1
0
    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'])
示例#2
0
 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)